As you know, i'm working on a small text adventure that plays out in this very monastery. At the moment, this is nothing more than a proof on concept with a dozen or so rooms and two puzzles.
Due to my broken arm (plus painkillers) the work is going very slowly and code quality rather low. But i thought i'd give you a small preview anyway:
Here's the updated game engine (file PMAdventures.pl):
#!/usr/bin/env perl
use strict;
use warnings;
use MIME::Base64;
my $gamefile = shift @ARGV;
if(!defined($gamefile) || !-f $gamefile) {
die("Usage: perl PMAdventures.pl gamefile");
}
# Main game variables
my $location = '';
my $oldlocation = '';
my (%rooms, %objects, %synonyms);
my %mlevels = (
-100=> 'Pennance required',
0 => 'Initiate',
20 => 'Novice',
50 => 'Acolyte',
90 => 'Sexton',
150 => 'Beadle',
);
my $xp = 0;
open(my $ifh, '<', $gamefile) or die($!);
my @lines = <$ifh>;
close $ifh;
my $completefile;
if($lines[0] =~ /B64GAMEFILE/) {
shift @lines;
$completefile = decode_base64(join('', @lines));
} else {
$completefile = join('', @lines);
}
eval($completefile) or die($@);
while(1) {
#print the room description
if($location ne $oldlocation) {
$oldlocation = $location;
print "\n\n";
print $rooms{$location}->{name}, "\n";
print '=' x length($rooms{$location}->{name}), "\n\n";
if(!defined($rooms{$location}->{visited}) || !$rooms{$location
+}->{visited}) {
$rooms{$location}->{visited} = 1;
print $rooms{$location}->{description}, "\n";
}
print "You see:\n";
foreach my $key (sort keys %objects) {
if($objects{$key}->{location} eq $location) {
print " ", $objects{$key}->{short}, "\n";
}
}
print "There are exits in this direction(s): ", join(',', sort
+ keys %{$rooms{$location}->{exits}}), "\n";
}
# Ask the player what to do
print "What next: ";
my $cmd = <>;
# Primitively clean up the input
chomp $cmd;
$cmd = lc $cmd;
$cmd =~ s/(\s+)/\ /g;
$cmd =~ s/^\ //;
$cmd =~ s/\ $//;
next if($cmd eq '');
# Apply synonyms
foreach my $key (keys %synonyms) {
my $repl = $synonyms{$key};
$cmd =~ s/$key/$repl/;
}
print "(DEBUG) I heard '$cmd'\n";
# allow the player to finish
if($cmd =~ /(quit|exit)/i) {
print "Goodbye.\n";
last;
}
# We don't like nice users. Just state what you want!
if($cmd =~ /please/i) {
print "I don't know how to please!\n";
next;
}
# Force re-displaying the room description
if($cmd eq 'look') {
$oldlocation = '';
$rooms{$location}->{visited} = 0;
next;
}
# Wanna take us to another room?
if(defined($rooms{$location}->{exits}->{$cmd})) {
# Check to see if its a code section, else just move
# the player to that room
if(ref($rooms{$location}->{exits}->{$cmd}) eq 'CODE') {
$rooms{$location}->{exits}->{$cmd}->();
} else {
$location = $rooms{$location}->{exits}->{$cmd};
}
next;
}
# The inventory command
if($cmd eq 'inventory') {
print "Your open pocket reveals:\n";
foreach my $key (sort keys %objects) {
if($objects{$key}->{location} eq 'inventory') {
print " ", $objects{$key}->{short}, "\n";
}
}
}
# Look for a simple two-verb command
if($cmd =~ /(\w+)\ (\w+)/) {
my ($verb, $thing) = ($1, $2);
# Check if the object exists
if(!defined($objects{$thing})) {
print "Sorry, the programmer never invented a $thing!\n";
next;
}
# Ok, next, let's see if the object is in reach
if($objects{$thing}->{location} ne 'inventory' && $objects{$th
+ing}->{location} ne $location) {
print "You can't see $thing anywhere near you!\n";
next;
}
# Allow "describe" action
if($verb eq "describe") {
print $objects{$thing}->{long}, "\n";
next;
}
# Check if it is an allowed action for this object
if(!defined($objects{$thing}->{actions}->{$verb})) {
print "You can't do that to $thing\n";
next;
}
# First of all, if the action is a sub, execute it and be done
+ with it.
if(ref($objects{$thing}->{actions}->{$verb}) eq 'CODE') {
$objects{$thing}->{actions}->{$verb}->();
next;
}
# Inventory-related actions
if($verb eq 'take') {
if($objects{$thing}->{location} eq 'inventory') {
print "You already have that in your magic pocket!\n";
next;
}
$objects{$thing}->{location} = 'inventory';
print $objects{$thing}->{actions}->{$verb}, "\n";
next;
}
if($verb eq 'drop') {
if($objects{$thing}->{location} ne 'inventory') {
print "You can't find that object anywhere within your
+ vast magic pocket!\n";
next;
}
$objects{$thing}->{location} = $location;
print $objects{$thing}->{actions}->{$verb}, "\n";
next;
}
# Uhm, ok, this seems to be a text-printing-only action, like
+reading a sign
print $objects{$thing}->{actions}->{$verb}, "\n";
next;
}
# Scratch head and try again
if(rand(100) > 50) {
print "Sorry, could you state that more clearly?\n";
} else {
print "I'll just stand around scratching my head instead...\n"
+;
}
}
sub getCurrentMLevel {
foreach my $key(reverse sort{$a <=> $b} keys %mlevels) {
if($xp >= $key) {
return $mlevels{$key};
}
}
return "EE has encountered an internal error.";
}
sub getNextMLevel {
foreach my $key(sort{$a <=> $b} keys %mlevels) {
if($xp < $key) {
return ($key- $xp, $mlevels{$key});
}
}
return "EE has encountered an internal error.";
}
sub showScore {
print "You have $xp XP (", getCurrentMLevel(), ")\n";
return;
}
sub gainScore {
my ($gain) = @_;
my @x = ('It tastes just like chicken.',
'You are a unique snowflake.',
'As if it mattered.',
'Non-refundable.',
'Are you shure you want to do this?',
);
$xp += $gain;
if($gain > 0) {
print "You gained $gain XP. ", $x[ rand @x ], "\n";
my ($diff, $nl) = getNextMLevel();
print "You have $diff points until next level: $nl\n";
} elsif($gain < 0) {
print "You LOST $gain XP!\n";
} else {
print "Your XP remains unchanged.\n";
}
return;
}
And here's the game file, base64 encoded to prevent spoilers (chaos_in_the_monastery_demo.b64):
B64GAMEFILE
IyBGaXJzdCwgcHJpbnQgYSBzaW1wbGUgaW50cm8gdG8gdGhlIGdhbWUKcHJpbnQgPDwnRU
+5ESU5U
Uk8nOwoiQ2hhb3MgaW4gdGhlIE1vbmFzdGVyeSAoRGVtbyBWZXJpb24pIgo9PT09PT09PT
+09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQoKWW91IGFyZSBzaXR0aW5nIGluIHlvdXIgb2
+ZmaWNl
LCBidWdmaXhpbmcgYSB2ZXJ5IG9sZAptb2R1bGUgeW91IHdyb3RlIHdoZW4geW91IHdoZX
+JlIHN0
aWxsIGEgbm92aWNlLgoKU3VkZGVubHksIHlvdSBoYXZlIHRoaXMgc3RyYW5nZSBmZWVsaW
+5nIGFz
IGlmIHNvbWV0aGluZwpoYXMgZ29uZSB0ZXJyaWJseSB3cm9uZy4gWW91ciBjb21wdXRlci
+BzY3Jl
ZW4gZ29lcyBibGFuawpmb3IgYSBzZWNvbmQgYW5kIHRoZW4gZGlzcGxheXMgYSBiaWcgd2
+Fybmlu
ZyBzaWduLiBJbiB0aGUKZGlzdGFuY2UsIHlvdSBoZWFyIHdlaXJkIGEgc291bmQsIHNvbW
+V0aGlu
ZyBsaWtlICJaT09PSU5HISIuCkVORElOVFJPCnByaW50ICJcblxuUHJlc3MgRU5URVIiOw
+pteSAk
eWFkYSA9IDw+OwpwcmludCAiXG5cblxuIjsKCiRsb2NhdGlvbiA9ICdvZmZpY2UnOwojJG
+xvY2F0
aW9uID0gJ2VudHJhbmNlJzsKCiMgc3lub25teW1zIChyZWdleCByZXBsYWNlbWVudHMgb2
+4gY29t
bWFuZCBpbnB1dCkKJXN5bm9ueW1zID0gKAogICAgc2NvcmUgICA9PiAicmVhZCBzY29yZW
+NhcmQi
LAogICAgJ15uJCcgICA9PiAgIm5vcnRoIiwKICAgICdecyQnICAgPT4gICJzb3V0aCIsCi
+AgICAn
XmUkJyAgID0+ICAiZWFzdCIsCiAgICAnXnckJyAgID0+ICAid2VzdCIsCiAgICBleGFtaW
+5lID0+
ICJkZXNjcmliZSIsCiAgICAnXnhcICcgICA9PiAiZGVzY3JpYmUgIiwKICAgICdeaSQnIC
+AgPT4g
ImludmVudG9yeSIsCiAgICAnXmwkJyAgID0+ICJsb29rIiwKICAgIG5vZGVyZWFwZXIgID
+0+ICJy
ZWFwZXIiLAogICAgcG9rZXIgICA9PiAiY2FyZHMiLAogICAgcGxheSAgICA9PiAidXNlIi
+wKKTsK
CiMgZGVmaW5lIHNvbWUgcm9vbXMgdG8gaGF2ZSwgdWgsIHJvb20gdG8gcnVuIGFyb3VuZA
+ojIFRo
ZXNlIGFyZSBwdXJlbHkgc3RhdGljIG9iamVjdHMKJXJvb21zID0gKAogICAgJ29mZmljZS
+cgID0+
IHsKICAgICAgICBuYW1lICAgID0+ICdZb3VyIG9mZmljZScsCiAgICAgICAgZGVzY3JpcH
+Rpb24g
PT4gIllvdSBhcmUgaW4geW91ciBvZmZpY2UuIEl0IGlzIHJhdGhlciBzbWFsbCwgYnV0IG
+l0IGlz
IHlvdXIgb3duLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgb25seSBleG
+l0IGlz
IHRocm91Z2ggdGhlIGRvb3IgaW4gdGhlIG5vcnRoLiIsCiAgICAgICAgZXhpdHMgICA9Pi
+B7CiAg
ICAgICAgICAgICdub3J0aCcgID0+IHN1YiB7CiAgICAgICAgICAgICAgICAgICAgcHJpbn
+QgIlRo
ZSBzZWN1cml0eSBsb2NrIG9mIHlvdXIgZG9vciBoYXMgYmVlblxuIiwKICAgICAgICAgIC
+AgICAg
ICAgICAgICAgICAicmVtb3RlbHkgYWN0aXZhdGVkIVxuIjsKICAgICAgICAgICAgICAgIC
+AgICBw
cmludCAiRW50ZXIgdW5sb2NrIHBpbjogIjsKICAgICAgICAgICAgICAgICAgICBteSAkcG
+luID0g
PD47CiAgICAgICAgICAgICAgICAgICAgY2hvbXAgJHBpbjsKICAgICAgICAgICAgICAgIC
+AgICBp
ZigkcGluIGVxICI4OTA4MTMiKSB7ICMgY2F2YWMncyBob21lIG5vZGUgaWQKICAgICAgIC
+AgICAg
ICAgICAgICAgICAgJGxvY2F0aW9uID0gJ2hhbGwxJzsKICAgICAgICAgICAgICAgICAgIC
+AgICAg
cHJpbnQgIlRoZSBkb29yIG9wZW5zIHdpdGggYSBzYXRpc2ZpZWQgaHVtbSBhbmQgbGV0XC
+dzIHlv
dSB0aHJvdWdoLiIKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgIC
+AgICAg
ICAgICAgICBwcmludCAiQSB2ZXJ5IGxvdWQgc2VjdXJpdHkgYWxhcm0gcGllcmNlcyB5b3
+VyIGVh
cnMuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgIC
+AgICAg
ICAgICAgICAgcHJpbnQgIllvdXIgZWFycyBhcmUgcmluZ2luZy5cbiI7CiAgICAgICAgIC
+AgICAg
ICAgICAgICAgIHNsZWVwKDQpOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiVG
+hlIGFs
YXJtIHN0b3BzLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoNCk7CiAgIC
+AgICAg
ICAgICAgICAgICAgICAgIHByaW50ICJOb3RoaW5nIGVsc2Ugc2VlbXMgdG8gaGFwcGVuLl
+xuIgog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgfSwKIC
+AgIH0s
CiAgICAnaGFsbDEnICA9PiB7CiAgICAgICAgbmFtZSAgICA9PiAnSGFsbCBvZiB0aGUgQ2
+FtZWwn
LAogICAgICAgIGRlc2NyaXB0aW9uID0+ICJZb3UgYXJlIGluIHRoZSBzb3V0aGVybiBwYX
+J0IG9m
IHRoZSAnSGFsbCBvZiB0aGUgQ2FtZWwnLiBcbiIgLgogICAgICAgICAgICAgICAgICAgIC
+AgICAi
SXQgaXMgbmFtZWQgYWZ0ZXIgdGhlIGZhbW91cyBwZXQgVGhlIENyZWF0b3IgTGFycnkgbm
+V2ZXIg
aGFkLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgd2FsbHMgaGF2ZSBhIG
+Rpc3Rp
bmN0aXZlIGNhbWVsLWxpa2UgcGF0dGVybiwgc28gaGF2ZSB0aGVcbiIgLgogICAgICAgIC
+AgICAg
ICAgICAgICAgICAiZmxvb3IgYW5kIHRoZSBjZWlsaW5nLiBUaGUgaGFsbHdheSBzZWVtcy
+B0byBz
dHJldGNoIGZvciBtaWxlc1xuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJtaWxlcy
+B0byB0
aGUgbm9ydGguXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgIkp1c3Qgc291dGggb2
+YgeW91
IGlzIHlvdXIgb2ZmaWNlLiBPbmUgb2YgdGhlIGJlc3QgbG9jYXRpb25zIGluIHRoZVxuIi
+AuCiAg
ICAgICAgICAgICAgICAgICAgICAgICJtb25hc3RlcnkuIE9uIHRoZSBlYXN0IHlvdSBjYW
+4gc2Vl
IHRoZSBlbnRyYW5jZSB0byB5b3VyIGZyaWVuZHNcbiIgLgogICAgICAgICAgICAgICAgIC
+AgICAg
ICAib2ZmaWNlLCB0aGUgTm9kZVJlYXBlclxuIiwKICAgICAgICBleGl0cyAgID0+IHsKIC
+AgICAg
ICAgICAgc291dGggICAgPT4gJ29mZmljZScsCiAgICAgICAgICAgIG5vcnRoICAgID0+IC
+doYWxs
MicsCiAgICAgICAgICAgIGVhc3QgICAgPT4gJ3JlYXBlcm9mZmljZScsCiAgICAgICAgfS
+wKICAg
IH0sCiAgICAncmVhcGVyb2ZmaWNlJyAgPT4gewogICAgICAgIG5hbWUgICAgPT4gJ1RoZS
+BOb2Rl
UmVhcGVycyBvZmZpY2UnLAogICAgICAgIGRlc2NyaXB0aW9uID0+ICJZb3Ugd291bGQgZX
+hwZWN0
IHNvbWVvbmUgd2l0aCB0aGUgam9iIHRpdGxlICdOb2RlUmVhcGVyJyB0byBoYXZlIGFcbi
+IgLgog
ICAgICAgICAgICAgICAgICAgICAgICAicmF0aGVyIGdsb29teSBvZmZpY2UuLi4gYW5kIH
+lvdSB3
b3VsZCBiZSB3cm9uZy4gTGFyZ2Ugd2luZG93cywgdGFubmluZ1xuIiAuCiAgICAgICAgIC
+AgICAg
ICAgICAgICAgICJsYW1wcywgZGVjayBjaGFpcnMgYW5kIHRoZSBzb3VuZCBvZiB3YXZlcy
+BicmVh
a2luZyBnZW50bHkgb24gdGhlIGJlYWNoXG4iIC4KICAgICAgICAgICAgICAgICAgICAgIC
+AgInR1
bm5lbGVkIHRocm91Z2ggaGlkZGVuIHNwZWFrZXJzIGhhdmUgdHVybmVkIHRoaXMgb2ZmaW
+NlIGlu
dG8gYSBnb29kXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgImltaXRhdGlvbiBvZi
+BhIHRy
b3BpY2FsIGJlYWNoIHJlc29ydC4gU29tZW9uZSBoYXMgZ29uZSBzbyBmYXIgYXMgdG8gaW
+1wb3J0
XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgImEgZmV3IHRydWNrbG9hZHMgb2YgYm
+VhY2gg
c2FuZCBmcm9tIHRoZSBiYWhhbWFzIHRvIGNvdmVyIHRoZSBmbG9vci5cbiIgLgogICAgIC
+AgICAg
ICAgICAgICAgICAgICAiVGhlIGV4aXQgaXMgaW4gdGhlIHdlc3QsIGNhbW91ZmxhZ2VkIG
+FzIGVu
dHJhbmNlIHRvIGEgY2x1YmhvdXNlLlxuIiwKICAgICAgICBleGl0cyAgID0+IHsKICAgIC
+AgICAg
ICAgd2VzdCAgICA9PiAnaGFsbDEnLAogICAgICAgIH0sCiAgICB9LAoKICAgICdoYWxsMi
+cgID0+
IHsKICAgICAgICBuYW1lICAgID0+ICdIYWxsIG9mIHRoZSBDYW1lbCcsCiAgICAgICAgZG
+VzY3Jp
cHRpb24gPT4gIlRoaXMgc3BvdCBpcyBrbm93biBhcyB0aGUgT2FzaXMuIEl0IGhhcyB0aG
+Ugb25s
eSB3YXRlciBmb3VudGFpblxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aG
+Ugd2hv
bGUgbmV0d29yayBvZiBoYWxsd2F5cy5cbiIgLgogICAgICAgICAgICAgICAgICAgICAgIC
+AiRWFz
dCBvZiB5b3UgaXMgdGhlIGdvbGRlbiBmb3VudGFpbiBvZiByZWZyZXNobWVudC4gSW4gdG
+hlIHdl
c3QgaXNcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAidGhlIGZhbW91cyAnUmVnaX
+N0cnkg
UG9ydGFsJyB0aGF0IHdpbGwgbGVhZCB5b3UgaW50byB0aGUgJ0hhbGx3YXlcbiIgLgogIC
+AgICAg
ICAgICAgICAgICAgICAgICAib2YgV2lzZG9tJy4gVGhlICdIYWxsIG9mIHRoZSBDYW1lbC
+cgc3Ry
ZXRjaGVzIGZ1cnRoZXIgdG8gdGhlIG5vcnRoXG4iIC4KICAgICAgICAgICAgICAgICAgIC
+AgICAg
ImFuZCBzb3V0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGV4aXRzIC
+AgPT4g
ewogICAgICAgICAgICBzb3V0aCAgICA9PiAnaGFsbDEnLAogICAgICAgICAgICBub3J0aC
+AgICA9
PiAnaGFsbDMnLAogICAgICAgICAgICBlYXN0ICAgID0+IHN1YiB7CiAgICAgICAgICAgIC
+AgICBw
cmludCAiWW91IGhlYXIgYSBsb3VkIFpPSU5HLlxuIjsKICAgICAgICAgICAgfSwKICAgIC
+AgICAg
ICAgd2VzdCAgICA9PiAnaGFsbDQnLAogICAgICAgIH0sCiAgICB9LAogICAgJ2hhbGwzJy
+AgPT4g
ewogICAgICAgIG5hbWUgICAgPT4gJ0hhbGwgb2YgdGhlIENhbWVsJywKICAgICAgICBkZX
+Njcmlw
dGlvbiA9PiAiVGhpcyBpcyB0aGUgbW9zdCBub3J0aGVybiBwYXJ0IG9mIHRoZSBoYWxsLl
+xuIiAu
CiAgICAgICAgICAgICAgICAgICAgICAgIkV4Y2VwdCBmb3IgYSBzaW5nbGUgR3JhZmZpdG
+kgb24g
dGhlIHdhbGwgdGhhdFxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgInJlYWRzICdWIH
+doZmcg
eXJuZWFycSBub2JoZyBFQkcxMyEnLCBub3RoaW5nXG4iIC4KICAgICAgICAgICAgICAgIC
+AgICAg
ICAiYnJlYWtzIHRoZSBtb25vdG9ueSBvZiB0aGUgY2FtZWwgcGF0dGVybiBvbiBldmVyeV
+xuIiAu
CiAgICAgICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZSBzdXJmYWNlLlxuIiAuCiAgIC
+AgICAg
ICAgICAgICAgICAgICAgIkluIHRoZSBzb3V0aCB0aGUgaGFsbCBzdHJldGNoZXMgZm9yIG
+1pbGVz
IHVudGlsIHNvbWV3aGVyZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgImJleW9uZC
+B0aGUg
dmlzaWJsZSBob3Jpem9uIGl0IGVuZCBpbiB5b3VyIG9mZmljZSdzIGRvb3IuXG4iIC4KIC
+AgICAg
ICAgICAgICAgICAgICAgICAiVG8gdGhlIG5vcnRoIGlzIHRoZSBtYWluIGVudHJhbmNlIG
+9mIHRo
ZSBtb25hc3RlcnkuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdH
+MgICA9
PiB7CiAgICAgICAgICAgIHNvdXRoICAgID0+ICdoYWxsMicsCiAgICAgICAgICAgIG5vcn
+RoICAg
ID0+ICdlbnRyYW5jZScsCiAgICAgICAgfSwKICAgIH0sCiAgICAnZW50cmFuY2UnICA9Pi
+B7CiAg
ICAgICAgbmFtZSAgICA9PiAnR3JlYXQgRW50cmFuY2UnLAogICAgICAgIGRlc2NyaXB0aW
+9uID0+
ICJZb3UgYXJlIHN0YW5kaW5nIGF0IHdvcmxkIGZhbW91cyBFbnRyYW5jZSBvZiB0aGVcbi
+IgLgog
ICAgICAgICAgICAgICAgICAgICAgICAibW9uYXN0ZXJ5LiBUaGUgaW1tZW5zZSBHYXRlcy
+Aob3Bl
biAyNC83IG9mIGNvdXJzZSlcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAicmVhbG
+x5IG1h
a2VzIG9uZSB3b25kZXIgaG93IG11Y2ggb2FrIGZvcnJlc3QgaGFkXG4iIC4KICAgICAgIC
+AgICAg
ICAgICAgICAgICAgImJlZW4gY3V0IGRvd24gdG8gbWFrZSBpdC4gVG8gdGhlIHNvdXRoIH
+lvdSBj
YW4gc2VlIHRoZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICInSGFsbCBvZiB0aG
+UgQ2Ft
ZWwnIGFuZCB0byB0aGUgbm9ydGggYmVnaW5uaW5nIG9mIHRoZVxuIiAuCiAgICAgICAgIC
+AgICAg
ICAgICAgICAgICJwYXRoIGRvd24gdGhlIG1vdW50YWluLlxuIiAuCiAgICAgICAgICAgIC
+AgICAg
ICAgICAgICJBIGJpZyBpbmZvc2NyZWVuIGZhY2VzIHRoZSBnYXRlcywgYWx3YXlzIHVwZG
+F0aW5n
IHRvXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgInNob3cgdGhlIGxhdGVzdCBTb1
+BXIHF1
ZXN0aW9uLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdHMgIC
+A9PiB7
CiAgICAgICAgICAgIHNvdXRoICAgID0+ICdoYWxsMycsCiAgICAgICAgICAgIG5vcnRoIC
+AgID0+
ICdlbmRvZndvcmxkJywKICAgICAgICB9LAogICAgfSwgICAgCgogICAgJ2VuZG9md29ybG
+QnICA9
PiB7CiAgICAgICAgbmFtZSAgICA9PiAnRW5kIG9mIHRoZSBXb3JsZCcsCiAgICAgICAgZG
+VzY3Jp
cHRpb24gPT4gIkFzIHlvdSBzdGFuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG
+Rvd24g
dGhlXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAibW91bnRhaW4geW91IHJlYWxpem
+UgdGhh
dCB0aGUgd2FybmluZyB3YXMgdHJ1ZS4gVHllXG4iIC4KICAgICAgICAgICAgICAgICAgIC
+AgICAi
cmVhbGx5IGRpZCBicmVhayB0aGUgbW9uYXN0ZXJ5IHRoaXMgdGltZS4gVGhlIHBhdGhcbi
+IgLgog
ICAgICAgICAgICAgICAgICAgICAgICJzdWRkZW5seSBzdG9wcyBhZnRlciBhIGZldyBtZX
+RlcnMg
YW5kIGJleW9uZCB0aGF0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAicG9pbnQgaX
+MuLi4g
bm90aGluZy5cbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJcbiIgLgogICAgICAgIC
+AgICAg
ICAgICAgICAgICJSZWFsbHksIGp1c3QgcGxhaW4gZW1wdHksIG5vdGhpbmduZXNzLiBOby
+B0cmVl
cyxcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJubyBwYXRoLCBjZXJ0YWlubHkgbm
+8gbW91
bnRhaW4uIEp1c3QsIHdlbGwsIG5vdGhpbmcuXG4iIC4KICAgICAgICAgICAgICAgICAgIC
+AgICAi
VGhlIG9ubHkgcGF0aCBsZWZ0IGZyb20gaGVyZSBpcyBzb3V0aCwgYmFjayBpbnRvIFxuIi
+AuCiAg
ICAgICAgICAgICAgICAgICAgICAgInRoZSBtb25hc3RlcnkuXG4iLAogICAgICAgICAgIC
+AgICAg
ICAgICAgICAKICAgICAgICBleGl0cyAgID0+IHsKICAgICAgICAgICAgc291dGggICAgPT
+4gJ2Vu
dHJhbmNlJywKICAgICAgICB9LAogICAgfSwgICAgCgogICAgJ2hhbGw0JyAgPT4gewogIC
+AgICAg
IG5hbWUgICAgPT4gJ0hhbGx3YXkgb2YgV2lzZG9tJywKICAgICAgICBkZXNjcmlwdGlvbi
+A9PiAi
WW91IGFyZSBpbiB0aGUgZWFzdGVybW9zdCBwYXJ0IG9mIHRoZSBIYWxsd2F5IG9mXG4iIC
+4KICAg
ICAgICAgICAgICAgICAgICAgICAgIldpc2RvbS4gVGhpcyBoYWxsIHNwYW5zIHRoZSBlbn
+RpcmUg
bGVuZ3RoIG9mIHRoZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJtb25hc3Rlcn
+kuIEZs
b29yLCB3YWxscyBhbmQgY2VpbGluZyBhcmUgYmVhdXRpZnVsbHlcbiIgLgogICAgICAgIC
+AgICAg
ICAgICAgICAgICAiZGVjb3JhdGVkIGluIGxpZ2h0IGJyb3duIG1hcmJsZSB3aXRoIGNyeX
+N0YWxp
bmVcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAiaW5sYXlzLiBFYXN0IG9mIHlvdS
+BpcyB0
aGUgJ1JlZ2lzdHJ5IFBvcnRhbCcgdGhhdCBsZWFkc1xuIiAuCiAgICAgICAgICAgICAgIC
+AgICAg
ICAgICJ5b3UgYmFjayB0byB0aGUgSGFsbCBvZiB0aGUgQ2FtZWwsIHNvdXRoIG9mIHlvdS
+BpcyB0
aGVcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAib2ZmaWNlIG9mIHRoZSBTaXRlRG
+9jQ2xh
biB3aGlsZSBub3J0aCBpZiB0aGUgU3VwZXJTZWFyY2hcbiIgLgogICAgICAgICAgICAgIC
+AgICAg
ICAgICAiYWRtaW5pc3RyYXRvcnMgb2ZmaWNlLlxuIiwKICAgICAgICAgICAgICAgICAgIC
+AgICAg
CiAgICAgICAgZXhpdHMgICA9PiB7CiAgICAgICAgICAgIGVhc3QgICAgPT4gJ2hhbGwyJy
+wKICAg
ICAgICAgICAgICAgIHdlc3QgICAgPT4gc3ViIHsKICAgICAgICAgICAgICAgIGlmKCRvYm
+plY3Rz
e3ZvdGVzfS0+e2xvY2F0aW9ufSBlcSAibm93aGVyZSIpIHsKICAgICAgICAgICAgICAgIC
+AgICBw
cmludCAiQSBiZWFyZHkgZ3V5LCBzdHJhbmdlbHkgZW5vdWdoIHdlYXJpbmdcbiIgLgogIC
+AgICAg
ICAgICAgICAgICAgICAgICAgICJhIFRpbmtlciBCZWxsIGZhaXJ5IGNvc3R1bWUsIHJ1c2
+hlcyBw
YXN0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAieW91IGFuZCBzdHVmZnMgc2
+9tZXRo
aW5nIGludG8geW91ciBwb2NrZXQuXG4iOwogICAgICAgICAgICAgICAgICAgIHNsZWVwKD
+EyKTsK
ICAgICAgICAgICAgICAgICAgICBwcmludCAiV2hhdCB0aGUuLi4/XG4iOwogICAgICAgIC
+AgICAg
ICAgICAgIHNsZWVwKDUpOwogICAgICAgICAgICAgICAgICAgICRvYmplY3Rze3ZvdGVzfS
+0+e2xv
Y2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgIC
+AgICAg
JGxvY2F0aW9uID0gJ2hhbGw1JzsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbm9ydG
+ggICA9
PiBzdWIgewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBzdWRkZW5seSBmZWVsIGEgaG
+VhZGFj
aGUuXG4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzb3V0aCAgID0+IHN1YiB7Ci
+AgICAg
ICAgICAgICAgICBwcmludCAiWW91IHN1ZGRlbmx5IGFjY2VsZXJhdGUgYmFja3dhcmQgYW
+5kIFxu
IiAuCiAgICAgICAgICAgICAgICAgICAgICAic21hY2sgYWdhaW5zdCB0aGUgd2FsbCBiZW
+hpbmQg
eW91LlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAnaGFsbD
+UnICA9
PiB7CiAgICAgICAgbmFtZSAgICA9PiAnSGFsbHdheSBvZiBXaXNkb20nLAogICAgICAgIG
+Rlc2Ny
aXB0aW9uID0+ICJUaGUgSGFsbHdheSBvZiBXaXNkb20gc3RyZXRjaGVzIGVhc3QgYW5kIH
+dlc3Qg
b2YgeW91LlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgIkluIHRoaXMgcGFydCwgbG
+FyZ2Ug
cGFpbnRpbmdzIG9mIHRoZSBtb25hc3RlcnkgZm91bmRlcnNcbiIgLgogICAgICAgICAgIC
+AgICAg
ICAgICAgICJsaW5lIHRoZSB3YWxsLlxuIFNvdXRoIG9mIHlvdSBpZiB0aGUgamFuaXRvcn
+MgYnJv
b20gY2xvc2V0LFxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgInRvIHRoZSBub3J0aC
+BpcyB0
aGUgZW50cmFuY2UgdG8gdGhlIG1lZGl0YXRpb24gY2hhbWJlci5cbiIsCiAgICAgICAgIC
+AgICAg
ICAgICAgICAgIAogICAgICAgIGV4aXRzICAgPT4gewogICAgICAgICAgICBlYXN0ICAgID
+0+ICdo
YWxsNCcsCiAgICAgICAgICAgIHdlc3QgICAgPT4gJ2hhbGw2JywKICAgICAgICAgICAgbm
+9ydGgg
ICA9PiBzdWIgewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBmZWVsIGNvbGQuXG4iOw
+ogICAg
ICAgICAgICB9LAogICAgICAgICAgICBzb3V0aCAgID0+IHN1YiB7CiAgICAgICAgICAgIC
+AgICBw
cmludCAiU29tZW9uZSBzYXlzICdLTkFBQUFBUkNLJ1xuIjsKICAgICAgICAgICAgfSwKIC
+AgICAg
ICB9LAogICAgfSwKICAgIAogICAgJ2hhbGw2JyAgPT4gewogICAgICAgIG5hbWUgICAgPT
+4gJ0hh
bGx3YXkgb2YgV2lzZG9tJywKICAgICAgICBkZXNjcmlwdGlvbiA9PiAiTm9ybWFsbHksIH
+RoaXMg
cGFydCBvZiB0aGUgSGFsbHdheSBvZiBXaXNkb21cbiIgLgogICAgICAgICAgICAgICAgIC
+AgICAg
ICJ3b3VsZCBiZSBhbiBpbXBvcnRhbnQganVuY3R1cmUgd2l0aGluIHRoZSBtb25hc3Rlcn
+ksXG4i
IC4KICAgICAgICAgICAgICAgICAgICAgICAiQnV0IGV4Y2VwdCBmb3IgdGhlIGV4aXQgdG
+8gdGhl
IGVhc3QsIGV2ZXJ5IGV4aXQgaXNcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJibG
+9ja2Vk
IGJ5IHNjYWZmb2xkaW5nLiBZb3UgbWlnaHQgYmUgYWJsZSB0byBzcXVlZXplXG4iIC4KIC
+AgICAg
ICAgICAgICAgICAgICAgICAidGhyb3VnaCB0byB0aGUgd2VzdGVybiBwYXJ0IG9mIHRoZS
+BIYWxs
d2F5LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdHMgICA9Pi
+B7CiAg
ICAgICAgICAgIGVhc3QgICAgPT4gJ2hhbGw1JywKICAgICAgICAgICAgd2VzdCAgICA9Pi
+BzdWIg
ewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBoZWFyIGEgYm9vbWluZyB2b2ljZSBzYX
+lpbmdc
biI7CiAgICAgICAgICAgICAgICBwcmludCAiICoqVEhJUyBBUkVBIElTIE5PVCBBVkFJTE
+FCTEUg
SU4gVEhJUyBERU1PICoqXG4iOwogICAgICAgICAgICAgICAgc2xlZXAoNSk7CiAgICAgIC
+AgICAg
ICAgICBwcmludCAiWW91IGhhdmUgdGhlIGZlZWxpbmcgdGhhdCBzb21lb25lIGdyYWJzIH
+lvdVxu
IiAuCiAgICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIGhhaXIgYW5kIHB1bGxzIHlvdS
+BiYWNr
Li4uXG4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICAjbm9ydGggICA9PiBzdWIgew
+ogICAg
ICAgICAgICAjICAgIHByaW50ICJTb21lb25lIHNheXMgJ0tOQUFBQUFSQ0snXG4iOwogIC
+AgICAg
ICAgICAjICAgICRsb2NhdGlvbiA9ICdyb2JvdHJvb20nOwogICAgICAgICAgICAjfSwKIC
+AgICAg
ICAgICAgI3NvdXRoICAgPT4gJ3JvYm90cm9vbScsCiAgICAgICAgfSwKICAgIH0sCiAgIC
+AKICAg
IAopOwoKIyBQdXQgc29tZSBzdHVmZiBpbiB0aGF0IHJvb20uIAolb2JqZWN0cyA9ICggIC
+AgCiAg
ICAndm90ZXMnICA9PiB7CiAgICAgICAgbG9jYXRpb24gPT4gJ25vd2hlcmUnLAogICAgIC
+AgIHNo
b3J0ICAgPT4gJ2Egc3RhY2sgb2Ygdm90ZXMnLAogICAgICAgIGxvbmcgICAgPT4gJ1lvdX
+IgZGFp
bHkgcXVvdGEgb2Ygdm90ZXMuIFVzZSB0aGVtIHdpc2VseS4nLAogICAgICAgIGFjdGlvbn
+MgPT4g
ewogICAgICAgICAgICB0YWtlICAgID0+ICdZb3UgcHV0IHRoZSB3b29kZW4gdGFibGUgaW
+4geW91
ciBtYWdpYyBwb2NrZXQuJywKICAgICAgICAgICAgZHJvcCAgICA9PiAnWW91IGNhcmVmdW
+xseSBw
dXQgZG93biB0aGUgdGFibGUuJywKICAgICAgICB9LAogICAgfSwKICAgICdpbmZvc2NyZW
+VuJyAg
PT4gewogICAgICAgIGxvY2F0aW9uID0+ICdlbnRyYW5jZScsCiAgICAgICAgc2hvcnQgIC
+A9PiAn
YSB2ZXJ5IGxhcmdlIGluZm9zY3JlZW4nLAogICAgICAgIGxvbmcgICAgPT4gJ1RoaXMgaX
+MgdGhl
IHdvcmxkIGZhbW91cyAiVGhlIE1vbmFzdGVyeSBHYXRlcyIgaW5mb3NjcmVlbi4nLAogIC
+AgICAg
IGFjdGlvbnMgPT4gewogICAgICAgICAgICB0YWtlICAgID0+IHN1YiB7CiAgICAgICAgIC
+AgICAg
ICBwcmludCAiTm8hIFRoaXMgaXMgYSBVTiBQcm90ZWN0ZWQgSGlzdG9yaWNhbCBMYW5kbW
+FyayFc
biI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlYWQgICAgPT4gc3ViIHsKICAgIC
+AgICAg
ICAgICAgIHByaW50ICJUaGUgc2NyZWVuIGN1cnJlbnRseSByZWFkczpcblxuIjsKICAgIC
+AgICAg
ICAgICAgIHByaW50U09QVygpOwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LA
+ogICAg
J21vZHVsZXMnICA9PiB7CiAgICAgICAgbG9jYXRpb24gPT4gJ29mZmljZScsCiAgICAgIC
+Agc2hv
cnQgICA9PiAnYSBidW5jaCBvZiBBQ01FIG1vZHVsZXMnLAogICAgICAgIGxvbmcgICAgPT
+4gJ1Ro
aXMgaXMgeW91ciB0cmVhc3VyZWQgc3RhY2sgb2YgdXNlZnVsbCBBQ01FIG1vZHVsZXMuJy
+wKICAg
ICAgICBhY3Rpb25zID0+IHsKICAgICAgICAgICAgdGFrZSAgICA9PiBzdWIgewogICAgIC
+AgICAg
ICAgICAgcHJpbnQgIllvdSBwdXQgdGhlIG1vZHVsZXMgaW50byB5b3VyIG1hZ2ljIHBvY2
+tldC5c
biI7CiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgIm1vZHVsZXMiIHdpdGggdGhlIGluZG
+l2aWR1
YWwgbW9kdWxlcwogICAgICAgICAgICAgICAgJG9iamVjdHN7bW9kdWxlc30tPntsb2NhdG
+lvbn0g
PSAibm93aGVyZSI7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3tibGVhY2h9LT57bG9jYX
+Rpb259
ID0gImludmVudG9yeSI7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3tidXRmaXJzdH0tPn
+tsb2Nh
dGlvbn0gPSAiaW52ZW50b3J5IjsKICAgICAgICAgICAgICAgICMgYWxzbywgbGV0IHRoZS
+Bub3Rl
IHdpdGggdGhlIHBpbiBhcHBlYXIKICAgICAgICAgICAgICAgICRvYmplY3Rze25vdGV9LT
+57bG9j
YXRpb259ID0gIm9mZmljZSI7CiAgICAgICAgICAgICAgICBwcmludCAiQSBzbWFsbCBub3
+RlIGZh
bGxzIHRvIHRoZSBmbG9vci5cbiI7CiAgICAgICAgICAgICAgICBnYWluU2NvcmUoNSk7Ci
+AgICAg
ICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnbm90ZScgID0+IHsKICAgICAgIC
+Bsb2Nh
dGlvbiA9PiAnbm93aGVyZScsCiAgICAgICAgc2hvcnQgICA9PiAnYSBzbWFsbCBub3RlJy
+wKICAg
ICAgICBsb25nICAgID0+ICdBIHNtYWxsIHBpZWNlIG9mIHBhcGVyIHdpdGggc29tZSBudW
+1iZXJz
IG9uIGl0LicsCiAgICAgICAgdW5yZWFkICA9PiAxLAogICAgICAgIGFjdGlvbnMgPT4gew
+ogICAg
ICAgICAgICB0YWtlID0+ICJUYWtlbi4iLAogICAgICAgICAgICBkcm9wID0+ICJJZiB5b3
+UgaW5z
aXN0Li4uIiwKICAgICAgICAgICAgcmVhZCA9PiBzdWIgewogICAgICAgICAgICAgICAgcH
+JpbnQg
Ijg5MDgxM1xuIjsKICAgICAgICAgICAgICAgIGlmKCRvYmplY3Rze25vdGV9LT57dW5yZW
+FkfSkg
ewogICAgICAgICAgICAgICAgICAgICRvYmplY3Rze25vdGV9LT57dW5yZWFkfSA9IDA7Ci
+AgICAg
ICAgICAgICAgICAgICAgZ2FpblNjb3JlKDIpOwogICAgICAgICAgICAgICAgfQogICAgIC
+AgICAg
ICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3Njb3JlY2FyZCcgID0+IHsKICAgICAgIC
+Bsb2Nh
dGlvbiA9PiAnaW52ZW50b3J5JywKICAgICAgICBzaG9ydCAgID0+ICd5b3VyIHNjb3JlY2
+FyZCcs
CiAgICAgICAgbG9uZyAgICA9PiAnVGhpcyBwbGFzdGljIGNhcmQgZGlzcGxheXMgeW91ci
+BjdXJy
ZW50IHNjb3JlIGFuZCBsZXZlbC4nLAogICAgICAgIGFjdGlvbnMgPT4gewogICAgICAgIC
+AgICBy
ZWFkID0+IHN1YiB7CiAgICAgICAgICAgICAgICBzaG93U2NvcmUoKTsKICAgICAgICAgIC
+AgfSwK
ICAgICAgICB9LAogICAgfSwKICAgICdibGVhY2gnICA9PiB7CiAgICAgICAgbG9jYXRpb2
+4gPT4g
J25vd2hlcmUnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSBcJ2JsZWFjaFwnIG1vZHVsZS
+csCiAg
ICAgICAgbG9uZyAgICA9PiAnQUNNRTo6QmxlYWNoIHJlbW92ZXMgYWxsIHRob3NlIHVuc2
+lnaHRs
eSBjaGFyYWN0ZXJzLicsCiAgICAgICAgYWN0aW9ucyA9PiB7CiAgICAgICAgICAgIGRyb3
+AgICAg
PT4gc3ViIHsKICAgICAgICAgICAgICAgIHByaW50ICJZb3UgbWlnaHQgbmVlZCB0aGF0IG
+xhdGVy
LlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdXNlICAgID0+IHN1YiB7CiAgIC
+AgICAg
ICAgICAgICBwcmludCAiKioqKioqKipkbyBzb21ldGhpbmcqKioqKioqKioqKipcbiI7Ci
+AgICAg
ICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnYnV0Zmlyc3QnICA9PiB7CiAgIC
+AgICAg
bG9jYXRpb24gPT4gJ25vd2hlcmUnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSBcJ2J1dG
+ZpcnN0
XCcgbW9kdWxlJywKICAgICAgICBsb25nICAgID0+ICdBQ01FOjpCdXRGaXJzdCBsZXRcJ3
+MgeW91
IGRvIHNvbWV0aGluZyBidXQgZmlyc3Qgc29tZXRoaW5nIGVsc2UuJywKICAgICAgICBhY3
+Rpb25z
ID0+IHsKICAgICAgICAgICAgZHJvcCAgICA9PiBzdWIgewogICAgICAgICAgICAgICAgcH
+JpbnQg
IllvdSBtaWdodCBuZWVkIHRoYXQgbGF0ZXIuXG4iOwogICAgICAgICAgICB9LAogICAgIC
+AgICAg
ICB1c2UgICAgPT4gc3ViIHsKICAgICAgICAgICAgICAgIHByaW50ICIqKioqKioqKmRvIH
+NvbWV0
aGluZyoqKioqKioqKioqKlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfS
+wKICAg
IAogICAgJ2Jvb2snICA9PiB7CiAgICAgICAgbG9jYXRpb24gICAgPT4gJ2ludmVudG9yeS
+csCiAg
ICAgICAgc2hvcnQgICA9PiAnYSBwb2NrZXQgYm9vaycsCiAgICAgICAgbG9uZyAgICA9Pi
+AnSXRc
J3MgdGhlIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHJlZmVyZW5jZSBndWlkZSBwb2NrZX
+QgYm9v
ay4nLAogICAgICAgIHJlYWRjb3VudCA9PiAwLAogICAgICAgIGFjdGlvbnMgPT4gewogIC
+AgICAg
ICAgICB0YWtlICAgID0+IHN1YiB7CiAgICAgICAgICAgICAgICBwcmludCAiWW91IGp1bX
+AgdXAg
YW5kIGRvd24gaW4gam95IVxuIjsKICAgICAgICAgICAgICAgIGdhaW5TY29yZSgyKTsKIC
+AgICAg
ICAgICAgfSwKICAgICAgICAgICAgZHJvcCAgICA9PiBzdWIgewogICAgICAgICAgICAgIC
+AgcHJp
bnQgIllvdXIgbW9vZCBzdWRkZW5seSBjaGFuZ2VzIGZvciB0aGUgd29yc2UgOi0oXG4iOw
+ogICAg
ICAgICAgICAgICAgZ2FpblNjb3JlKC0yKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIC
+AgZHJv
cCAgICA9PiAnWW91ciBtb29kIHN1ZGRlbmx5IGNoYW5nZXMgZm9yIHRoZSB3b3JzZSA6LS
+gnLAog
ICAgICAgICAgICByZWFkICAgID0+IHN1YiB7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3
+tib29r
fS0+e3JlYWRjb3VudH0rKzsKICAgICAgICAgICAgICAgIGlmKCRvYmplY3Rze2Jvb2t9LT
+57cmVh
ZGNvdW50fSA8IDUpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiWW91IHN1ZGRlbm
+x5IGZl
ZWwgbXVjaCBzbWFydGVyLlxuIiwKICAgICAgICAgICAgICAgICAgICBnYWluU2NvcmUoNS
+k7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHByaW50ICJZb3
+Uga25v
dyBpdCBieSBoZWFydC5cbiI7CiAgICAgICAgICAgICAgICAgICAgZ2FpblNjb3JlKDApOw
+ogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3
+NjcmVl
bicgID0+IHsKICAgICAgICBsb2NhdGlvbiAgICA9PiAnb2ZmaWNlJywKICAgICAgICBzaG
+9ydCAg
ID0+ICdhIGNvbXB1dGVyIHNjcmVlbicsCiAgICAgICAgbG9uZyAgICA9PiAnVGhlIHNjcm
+VlbiAo
YSBiaWcgYXNzIDI1IiBDUlQpIGRpc3BsYXlzIGEgYmlnIHdhcm5pbmcgc2lnbiB3aXRoIG
+JpZyBy
ZWQgbGV0dGVycyEnLAogICAgICAgIGFjdGlvbnMgPT4gewogICAgICAgICAgICB0YWtlIC
+AgID0+
CiAgICAgICAgICAgICAgICBzdWIgewogICAgICAgICAgICAgICAgICAgIHByaW50ICJPay
+wgaSds
bCB0cnkuLi5cbiI7IHNsZWVwKDIpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbX
+kgJGdy
dW50IChxd1tHcnJyciBIcnJtbW1wZmZmIEhoaGhoaEhIaGhoaCBQZmZmZmZybW1tbCBLbm
+5ubm5u
bm5ubm91b3VvdW9vdW5ubm5dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IC
+IkZ3J1
bnQuLi4uLlxuIjsgc2xlZXAoMyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIC
+AgICAg
ICAgICAgIHByaW50ICJTb3JyeSwgaSdtIGp1c3Qgbm90IHN0cm9uZyBlbm91Z2ghXG4iOw
+ogICAg
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVhZCAgICA9PiAiSXQgc2F5czpcbiIgLg
+ogICAg
ICAgICAgICAgICAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iLg
+ogICAg
ICAgICAgICAgICAgICAgICAgICIqIFRZRSBCUk9LRSBUSEUgTU9OQVNURVJZISAqXG4iLg
+ogICAg
ICAgICAgICAgICAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iLg
+ogICAg
ICAgICAgICAgICAgICAgICAgICJcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgIkFmdG
+VyIGEg
cmVjZW50IHVwZGF0ZSB0byB0aGUgbW9uYXN0ZXJpZXMgc291cmNlIGNvZGUsXG4gIi4KIC
+AgICAg
ICAgICAgICAgICAgICAgICAid2UgYXJlIHN1ZmZlcmluZyBzbGlnaHQgcHJvYmxlbXMgd2
+l0aCB0
aGUgc3BhY2V0aW1lXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiY29udGludXVtLi
+BXaGVu
IHlvdSBsZWF2ZSBhIHJvb20sIHlvdSBtaWdodCBiZVxuIiAuCiAgICAgICAgICAgICAgIC
+AgICAg
ICAgInRyYW5zcG9ydGVkIHRvIHNvbWV3aGVyZSB5b3UgZGlkbid0IGV4cGVjdCB0byBlbm
+QgdXAu
XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiKFdoaWNoIGluY2x1ZGVzIHRoZSByb2
+9tIHlv
dSBqdXN0IGxlZnQpLiBTeW1wdG9tcyBpbmNsdWRlLFxuIi4KICAgICAgICAgICAgICAgIC
+AgICAg
ICAiYnV0IGFyZSBub3QgbGltaXRlZCB0bzogaGVhZGFjaGVzLCBiZWVpbmcgc21hc2hlZC
+BhZ2Fp
bnN0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiYSB3YWxsLCBpcnJpdGF0aW9uLC
+BkZWF0
aCwgY29uZnVzaW9uLCBkZWphIHZ1LCB1c2luZyBsZWV0c3BlYWtcbiIgLgogICAgICAgIC
+AgICAg
ICAgICAgICAgICJhbmQgYW4gdXJnZSB0byBwbGF5IHRoaXMgZ2FtZSBhZ2FpbiBhbmQgYW
+dhaW4g
YW5kIGFnYWluLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgIlxuIiAuCiAgICAgIC
+AgICAg
ICAgICAgICAgICAgIkZvciB5b3VyIHNhZmV0eSwgeW91ciBkb29yIGhhcyBiZWVuIGxvY2
+tlZCBi
eSByZW1vdGUgY29tbWFuZC5cbiIsCiAgICAgICAgfSwKICAgIH0sCiAgICAKICAgICMgUH
+V6emxl
IGluIHJlYXBlcnMgb2ZmaWNlCiAgICAnY2FyZHMnICA9PiB7CiAgICAgICAgbG9jYXRpb2
+4gPT4g
J2VuZG9md29ybGQnLAogICAgICAgIHNob3J0ICAgPT4gJ3BsYXlpbmcgY2FyZHMnLAogIC
+AgICAg
IGxvbmcgICAgPT4gJ0EgcGFjayBvZiBjYXJkcy4gWW91IHJlYWxseSBlbmpvaXkgYSBuaW
+NlIGdh
bWUgb2YgcG9rZXIuJywKICAgICAgICBhY3Rpb25zID0+IHsKICAgICAgICAgICAgdGFrZS
+A9PiAi
WW91IHBpY2sgdXAgdGhlIHBhY2sgb2YgcGxheWluZyBjYXJkcy4iLAogICAgICAgICAgIC
+Bkcm9w
ID0+ICJZb3UgcGxhY2UgdGhlIHBhY2sgb2YgY2FyZHMgb24gdGhlIGZsb29yLiIsCiAgIC
+AgICAg
ICAgIHVzZSA9PiBzdWIgewogICAgICAgICAgICAgICAgaWYoJGxvY2F0aW9uIG5lICdyZW
+FwZXJv
ZmZpY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIllvdSBzaHVmZmxlIHRoZS
+BjYXJk
cywgZ2V0IGJvcmVkIGFuZCBwdXQgdGhlbSBiYWNrLlxuIjsKICAgICAgICAgICAgICAgIH
+0gZWxz
aWYoJG9iamVjdHN7c2N5dGhlfS0+e2xvY2F0aW9ufSBuZSAicmVhcGVyb2ZmaWNlIikgew
+ogICAg
ICAgICAgICAgICAgICAgIHByaW50ICJUaGUgTm9kZVJlYXBlciBoYXMgbm90aGluZyBsZW
+Z0IHRv
IGxvb3NlLlxuIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC
+AgICAg
cHJpbnQgIllvdXIgZnJpZW5kIE5vZGVSZWFwZXIgYWdyZWVzIHRvIGEgcXVpY2sgZ2FtZS
+BvZlxu
IiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9rZXIuIE5vdCBmaXZlIG1pbn
+V0ZXMg
bGF0ZXIgeW91IGdldCBhIFJveWFsIGZsdXNoLlxuIiAuCiAgICAgICAgICAgICAgICAgIC
+AgICAg
ICAgICAiSGUgaGFuZHMgeW91IGhpcyBzY3l0aGUgYXMgY29sbGF0ZXJhbCB1bnRpbCBoZS
+BjYW5c
biIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCB0byBhbiBBVE0uXG4iOw
+ogICAg
ICAgICAgICAgICAgICAgIGdhaW5TY29yZSgxMyk7CiAgICAgICAgICAgICAgICAgICAgJG
+9iamVj
dHN7c2N5dGhlfS0+e2xvY2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgIC
+AgfQog
ICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3NjeXRoZScgID0+IHsKIC
+AgICAg
ICBsb2NhdGlvbiA9PiAncmVhcGVyb2ZmaWNlJywKICAgICAgICBzaG9ydCAgID0+ICdhIH
+NjeXRo
ZScsCiAgICAgICAgbG9uZyAgICA9PiAnVGhlIE5vZGVSZWFwZXJzIFNjeXRoZScsCiAgIC
+AgICAg
YWN0aW9ucyA9PiB7CiAgICAgICAgICAgIGRyb3AgPT4gc3ViIHsKICAgICAgICAgICAgIC
+AgIGlm
KCRsb2NhdGlvbiBuZSAncmVhcGVyb2ZmaWNlJykgewogICAgICAgICAgICAgICAgICAgIC
+RvYmpl
Y3Rze3NjeXRoZX0tPntsb2NhdGlvbn0gPSAkbG9jYXRpb247CiAgICAgICAgICAgICAgIC
+AgICAg
cHJpbnQgIlRoZSBzY3l0aGUgY2xhdHRlcnMgdG8gdGhlIGZsb29yLlxuIjsKICAgICAgIC
+AgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk5vdCB1bnRpbCBOb2
+RlUmVh
cGVyIHBheXMgaGlzIHBva2VyIGRlcHQgdG8geW91LlxuIjsKICAgICAgICAgICAgICAgIH
+0KICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgdGFrZSA9PiBzdWIgewogICAgICAgICAgICAgIC
+AgaWYo
JGxvY2F0aW9uIG5lICdyZWFwZXJvZmZpY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgJG
+9iamVj
dHN7c2N5dGhlfS0+e2xvY2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgIC
+AgICAg
IHByaW50ICJZb3UgcGljayB1cCB0aGUgc2N5dGhlLlxuIjsKICAgICAgICAgICAgICAgIH
+0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIllvdXIgZnJpZW5kIE5vZGVSZWFwZX
+Igd29u
J3QgbGV0IHlvdSB0b3VjaCBpdC5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgIC
+AgIH0s
CiAgICAgICAgfSwKICAgIH0sCiAgICAncmVhcGVyJyAgPT4gewogICAgICAgIGxvY2F0aW
+9uID0+
ICdyZWFwZXJvZmZpY2UnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSByZWFwZXInLAogIC
+AgICAg
IGxvbmcgICAgPT4gJ1lvdXIgZnJpZW5kLCB0aGUgTm9kZVJlYXBlci4nLAogICAgICAgIG
+FjdGlv
bnMgPT4gewogICAgICAgICAgICB0YWxrID0+ICdIZSBpZ25vcmVzIHlvdSBjb21wbGV0bH
+kgYW5k
IGNvbnRpbnVlcyB0byBkcmluayBoaXMgbWFydGluaS4nLAogICAgICAgIH0sCiAgICB9LA
+opOwoK
c3ViIHByaW50U09QVyB7CiAgICAjIHNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIGh0dHA6Ly
+9wZXJs
bW9ua3Mub3JnLz9ub2RlPTExNjc1OSAoYnkgc3VhdmVhbnQpCiAgICBteSBAeCA9ICgKIC
+AgICAg
ICBbJ1N1YmplY3Q6ICddLAogICAgICAgIFsnTmVlZCBoZWxwJywgJ05vb2IgcXVlc3Rpb2
+4nLCAn
Q2FuIHlvdSBmaXggdGhpcz8nLCAnaG93IHRvIHN0YXJ0PycsICdORUVEIFVSR0VOVCBIRU
+xQJ10s
CiAgICAgICAgWyJcbiJdLAogICAgICAgIFsgJ0hlbGxvJywgJ0dyZWV0aW5ncycsICdIaS
+csICcn
LCAnV2hhdFwncyB1cCcsICdIb25vcmVkIE1vbmtzJywgJ1VtbW0nIF0sCiAgICAgICAgWy
+JcbiJd
LAogICAgICAgIFsKICAgICAgICAgICAgJ215IHRlYWNoZXIgYXNzaWduZWQgdXMgYScsCi
+AgICAg
ICAgICAgICdJIHdhcyB3b25kZXJpbmcsIGlmIEkgd2FudGVkIHRvLCBob3cgd291bGQgSS
+B3cml0
ZSBhJywKICAgICAgICAgICAgJ0kgaGF2ZSBubyBjbHVlIHdoZW4gdG8gc3RhcnQsIEkgbm
+VlZCB0
byB3cml0ZSBhJywKICAgICdVUkdFTlQhIFVSR0VOVCEhIFVSR0VOVCEhISBJIG5lZWVlZW
+QgaGVs
cCB3aXRoIHRoaXMuIENhbiBzb21lb25lIHRlbGwgbWUgaG93IHRvIHdyaXRlIG9yIGdpdm
+UgbWUg
c29tZSBjb2RlIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvZicKICAgICAgICBdLAogICAgIC
+AgIFsn
IGZpbml0ZSBhdXRvbWF0YS4gJywgJyBzdGF0ZSBtYWNoaW5lLiAnLCAnIHRva2VuIHBhcn
+Nlci4g
J10sCiAgICAgICAgWwogICAgIlRoZSByZXF1aXJlbWVudHMgY2FuIGJlIGZvdW5kIGF0IH
+RoaXMg
VVJMOlxuICBodHRwOi8vd3d3Lm15c2tvb2wuZWR1L2hvbWV3b3JrL2RvX2l0X3lvdXJzZW
+xmL2Fz
c2lnbm1lbnQxLmh0bWwiLAogICAgJ0l0IG11c3QgYmUgYWJsZSB0byBwcm9jZXNzIHVwIH
+RvIF9f
UkFORF9fIHN0YXRlcyBvdmVyIHRoZSBhbHBoYWJldCBpbmNsdWRpbmcgMSwzIGFuZCA3Li
+BSdW4g
dGhlc2UgdGVzdCBzdHJpbmdzIGFnYWluc3QgaXQuLi4gMTMzNyAzMTMzNyAxMzN0IGFuZC
+BzdVgj
ci4nLAogICAgJ0l0IG5lZWQgdG8gZG8gc29tZXRoaW5nIHdpdGggc3RhdGVzIGFuZCBhbi
+BhbHBo
YWJldCwgYnV0IElcJ20gbm90IGdvb2Qgd2l0aCBnZW9ncmFwaHkgc28gcmVhbGx5IG5lZW
+QgaGVs
cCEnLAogICAgICAgICAgICAnJywKICAgICdUaGUgY29kZSBJIGhhdmUgc3RhcnRlZCBsb2
+9rcyBs
aWtlIHRoaXM6ICNpbmNsdWRlIDxzdGRpby5oPiAgdm9pZCBtYWluKCkgeyBwcmludGYoIk
+hlbGxv
IFdvcmxkXG4iKTsgfS4uLiBpZiBhbnlvbmUgY2FuIHRlbGwgbWUgd2hlcmUgdG8gZ28gZn
+JvbSBo
ZXJlIEkgd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0LicKICAgICAgICBdLAogICAgIC
+AgIFsi
XG4gICAgICAgICAgICAgICAgIl0sCiAgICAgICAgWwogICAgICAgICAgICAnVGhhbmsgWW
+91JywK
ICAgICAgICAgICAgJ09oLCBhbmQgSSBuZWVkIHRoaXMgYnkgRnJpZGF5JywKICAgICAgIC
+AgICAg
J1BsZWFzZSBwbGVhc2UgUExFRUVaIScsCiAgICAgICAgICAgICcnLAogICAgICAgICAgIC
+AnVGhh
bmsgeW91IGZvciB0aGlzIHdvbmRlcmZ1bCBzaXRlIScsCiAgICAgICAgICAgICdJIHNlbm
+QgeW91
IHRoaXMgZmlsZSBpbiBvcmRlciB0byBoYXZlIHlvdXIgYWR2aWNlJywKICAgICAgICAgIC
+AgJ2Ns
dWVsZXNzIG5ld2JpZScsCiAgICAgICAgICAgICdwZWFybCB1c2VyJwogICAgICAgIF0sCi
+AgICAg
ICAgWyJcbiJdCiAgICApOwogICAgZm9yIChAeCkgewogICAgICAgIG15IEB5ID0gQCRfOw
+ogICAg
ICAgICRfID0gJHlbIHJhbmQgQHkgXTsKICAgICAgICBzL19fUkFORF9fL2ludChyYW5kKD
+MwKSkv
Z2U7CiAgICAgICAgcHJpbnQ7CiAgICB9CiAgICAKICAgIHJldHVybjsKfQoKCjE7Cg==
If you want to see the game file in plain text, just remove the first line and run it through a base64 decoder of your choice.