创建测试敌人行为
接下来,我们要创建一些测试敌人行为,并以此为灵感来扩展我们的“脑力”。首先,我们需要一些辅助精灵(sprites),以便让敌人看起来有所不同。这样,当游戏中出现问题时,我就能立即看出是哪个敌人引起的。
我准备了一些临时的敌人精灵,并为它们创建了动画帧。虽然这些精灵是临时的,但它们足以让我们测试工具管道是否正常工作。我们计划在游戏中有多种小敌人、一些大敌人和一个BOSS战。
编辑精灵和动画
在创建敌人精灵的过程中,我发现了一些工具上的不便之处。例如,复制精灵数据、微调值以及直接选择精灵地图等功能都不是很方便。我希望未来能改进这些工具,以提高工作效率。
创建完精灵后,我为它们设置了动画。虽然动画编辑器很基本,但它足以满足我们的需求。我注意到,在实际使用这些工具时,可能会遇到一些问题,我们需要根据实际情况进行修复和改进。
设计敌人行为
现在,我们要开始设计敌人的行为了。我列出了一些想要实现的目标,包括:
- 直线攻击:敌人从屏幕顶部飞入,然后飞出,并在过程中射击。
- 侧面攻击:敌人从屏幕一侧飞入,射击后飞走。
- 环绕攻击:敌人从顶部飞入,环绕玩家一圈后飞走。
- 后退射击:敌人飞入后,在后退的过程中连续射击。
- 蛇形攻击:多个敌人以蛇形队列飞行并攻击。
- 直冲玩家:敌人直冲玩家而来,但玩家可以躲避。
- BOSS战:设计一个BOSS敌人的行为模式。
我按照这些目标逐一实现了敌人的行为。在过程中,我发现了一些需要改进的地方,比如动画的流畅性、速度控制的精确性等。我还添加了一个新命令ASP
(Animate Speed),用于动画化敌人的速度,使它们的移动看起来更加自然。
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
-- goals
-- - enemy brain system
-- - - brain database
-- - - interpreter
-- - - what commands?
-- - - delete old enemies
-- - bullet pattern system
-- smol things
-- - anilib in drawobj
-- - playert dies if they get hit by bullet
-- - xscroll big pita
-- - enemy scrolling in sync with bg
-- - merge splash system?
-- - maybe update splash and muzz in draw?
-- - freeze / die / inviz overhaul
function _init()
t=0
debug={}
#include shmup_myspr.txt
#include shmup_anilib.txt
#include shmup_enlib.txt
#include shmup_sched.txt
#include shmup_mapsegs.txt
#include shmup_brains.txt
butarr=split "1,2,3,1,4,6,7,4,5,9,8,5,1,2,3,1"
dirx=split "0,-1,1, 0,0, -0.7, 0.7,0.7,-0.7"
diry=split "0, 0,0,-1,1, -0.7,-0.7,0.7,0.7"
pal_flash=split "8,8,8,8,8,14,7,14,15,7,7,8,8,14,7"
pal_wflash=split "7,7,7,7,7,7,7,7,7,7,7,7,7,7,7"
freeze=0
_upd=upd_menu
_drw=drw_menu
--★
--coldebug=true
end
function startgame()
px,py=64,64
spd=1.4
--spd=0.1
lastdir=0
shipspr=0
scroll=0
xscroll=0
mapsegi=0
cursegs={}
boss=false
parts={}
shots={}
shotwait=0
enemies={}
buls={}
schedi=1
pspr={
x=0,
y=0,
age=0,
ani={3},
col=28
}
invul=0
inviz=0
freeze=0
_upd=upd_game
_drw=drw_game
end
function _draw()
_drw()
--★
cursor(4,4)
color(7)
for txt in all(debug) do
print(txt)
end
end
function _update60()
if slowmo then
for i=0,60 do
flip()
end
end
if freeze>0 then
freeze-=1
if freeze==0 then
die2()
end
else
t+=1
_upd()
end
end
-->8
--draw
function drw_game()
camera(-xscroll,0)
for seg in all(cursegs) do
map(seg.x,seg.y,0,scroll-seg.o,18,8)
end
for e in all(enemies) do
if e.flash>0 then
e.flash-=1
pal(pal_flash)
end
drawobj(e)
--mspr(cyc(e.age,e.ani,e.anis),e.x,e.y)
pset(e.x,e.y,8)
pal()
end
for s in all(shots) do
drawobj(s)
--mspr(cyc(s.age,s.ani,s.anis),s.x,s.y)
if s.delme then
del(shots,s)
end
end
for p in all(parts) do
if p.age and p.age>=0 then
--animate color
if p.ctab then
p.ctabv=p.ctabv or 0
local i=(p.age+p.ctabv)/p.maxage
i=mid(1,flr(1+i*#p.ctab),#p.ctab)
p.c=p.ctab[i]
end
p.draw(p)
end
end
--ship
if inviz<=0 then
if invul<=0 or (time()*9)%1<0.5 then
if freeze>0 then
pal(pal_wflash)
end
drawobj(pspr)
local fframe=anilib[1][t\3%4+1]
for i=-1,2,3 do
mspr(fframe,pspr.x+i,py+8)
end
pal()
end
else
inviz-=1
end
for s in all(buls) do
drawobj(s)
--mspr(cyc(s.age,s.ani,s.anis),s.x,s.y)
end
camera()
debug[1]=scroll
debug[2]=#enemies
debug[3]=#buls
end
function drw_menu()
map(19,8)
end
-->8
--update
function upd_game()
--scrolling
scroll+=0.2
if #cursegs<1 or scroll>cursegs[#cursegs].o then
if boss then
scroll-=64
for seg in all(cursegs) do
seg.o-=64
end
else
mapsegi+=1
end
local segnum=mapsegs[mapsegi]
add(cursegs,{
x=segnum\4*18,
y=segnum%4*8,
o=#cursegs<1 and -64 or cursegs[#cursegs].o+64
})
--★
--if #cursegs>2 and scroll-cursegs[1].o>=128 then
if #cursegs>3 then
deli(cursegs,1)
end
end
--spawning
if schedi<=#sched and sched[schedi][1]<scroll then
spawnen(unpack(sched[schedi],2))
schedi+=1
end
--movement
local dir=butarr[1+(btn()&0b1111)]
if lastdir!=dir and dir>=5 then
--anti-cobblestone
px=flr(px)+0.5
py=flr(py)+0.5
end
px+=dirx[dir]*spd
py+=diry[dir]*spd
local dshipspr=mysgn(dirx[dir])
shipspr+=mysgn(dshipspr-shipspr)*0.15
shipspr=mid(-1,shipspr,1)
lastdir=dir
xscroll=mid(0,(px-10)/108,1)\-0.0625
pspr.x=flr(px)-xscroll
pspr.y=flr(py)
pspr.ani[1]=flr(shipspr*2.4+3.5)
--xscroll=mid(0,(px-10)/100,1)*-16
--2441
if shotwait>0 then
shotwait-=1
else
if btn(❎) then
shoot()
end
end
if btnp(🅾️) then
explode(64,64)
end
boss=btn(🅾️)
if t%60==0 then
--spawnen()
end
dobuls(shots)
dobuls(buls)
doenemies()
-- shots vs enemies
for e in all(enemies) do
for s in all(shots) do
if not s.delme and col2(e,s) then
e.flash=2
s.delme=true
add(parts,{
draw=sprite,
x=s.x,
y=s.y+4,
maxage=5,
age=-1,
ani=anilib[4]
})
e.hp-=1
if e.hp<=0 then
del(enemies,e)
explode(e.x,e.y)
end
end
end
end
-- ship vs enemies
if invul<=0 then
for e in all(enemies) do
if col2(pspr,e) then
die()
end
end
for b in all(buls) do
if col2(pspr,b) then
die()
end
end
else
invul-=1
end
for p in all(parts) do
dopart(p)
end
end
function upd_menu()
if btnp(❎) or btnp(🅾️) then
startgame()
end
end
-->8
--tools
function mysgn(v)
return v==0 and 0 or sgn(v)
end
function rndrange(low,high)
return flr(rnd(high+1-low)+low)
end
function mspr(si,sx,sy)
local _x,_y,_w,_h,_ox,_oy,_fx,_nx=unpack(myspr[si])
sspr(_x,_y,_w,_h,sx-_ox,sy-_oy,_w,_h,_fx==1)
if _fx==2 then
sspr(_x,_y,_w,_h,sx-_ox+_w,sy-_oy,_w,_h,true)
end
if _nx then
mspr(_nx,sx,sy)
end
end
--★
function msprc(si,sx,sy)
local _x,_y,_w,_h,_ox,_oy,_fx,_nx=unpack(myspr[si])
rect(sx-_ox,sy-_oy,sx-_ox+_w-1,sy-_oy+_h-1,rnd({8,14,15}))
end
function split2d(s)
local arr={}
for v in all(split(s,"|")) do
add(arr,split(v))
end
return arr
end
function col2(oa,ob)
local _ax,_ay,_aw,_ah,_aox,_aoy,_afx=unpack(myspr[oa.col])
local _bx,_by,_bw,_bh,_box,_boy,_bfx=unpack(myspr[ob.col])
local a_left=flr(oa.x)-_aox
local a_top=flr(oa.y)-_aoy
local a_right=a_left+_aw-1
local a_bottom=a_top+_ah-1
local b_left=flr(ob.x)-_box
local b_top=flr(ob.y)-_boy
local b_right=b_left+_bw-1
local b_bottom=b_top+_bh-1
if a_top>b_bottom then return false end
if b_top>a_bottom then return false end
if a_left>b_right then return false end
if b_left>a_right then return false end
return true
end
function col(x1,y1,w1,h1,x2,y2,w2,h2)
local a_left=x1
local a_top=y1
local a_right=x1+w1-1
local a_bottom=y1+h1-1
local b_left=x2
local b_top=y2
local b_right=x2+w2-1
local b_bottom=y2+h2-1
if a_top>b_bottom then return false end
if b_top>a_bottom then return false end
if a_left>b_right then return false end
if b_left>a_right then return false end
return true
end
function cyc(age,arr,anis)
local anis=anis or 1
return arr[(age\anis-1)%#arr+1]
end
function drawobj(obj)
mspr(cyc(obj.age,obj.ani,obj.anis),obj.x,obj.y)
--★
if coldebug and obj.col then
msprc(obj.col,obj.x,obj.y)
end
end
-->8
--gameplay
function die()
freeze=30
sfx(2)
end
function die2()
explode(px-xscroll,py)
inviz=30
invul=150
end
function spawnen(eni,enx,eny)
local en=enlib[eni]
add(enemies,{
x=enx,
y=eny,
ani=anilib[en[1]],
anis=en[2],
sx=0,
sy=0,
ang=0,
spd=0,
brain=1,--en[3],
bri=1,
age=0,
flash=0,
hp=en[4],
col=en[5],
wait=0
})
end
function doenemies()
for e in all(enemies) do
if e.wait>0 then
e.wait-=1
else
dobrain(e)
end
e.sx=sin(e.ang)*e.spd
e.sy=cos(e.ang)*e.spd
e.x+=e.sx
e.y+=e.sy
e.age+=1
end
end
function dobrain(e)
local mybra=brains[e.brain]
local quit=false
if e.bri<#mybra then
local cmd=mybra[e.bri]
local par1=mybra[e.bri+1]
local par2=mybra[e.bri+2]
if cmd=="hed" then
--set heading / speed
e.ang=par1
e.spd=par2
elseif cmd=="wai" then
--wait x frames
e.wait=par1
quit=true
end
e.bri+=3
if quit then return end
dobrain(e)
end
end
function dobuls(arr)
for s in all(arr) do
s.age+=1
s.x+=s.sx
s.y+=s.sy
if s.y<-16 or s.y>130 then
del(arr,s)
end
end
end
function shoot()
--slowmo=true
local shotspd=-6
shotwait=2
for i=-4,4,8 do
add(shots,{
x=pspr.x+i,
y=py-14,
sx=0,
sy=shotspd,
ani=anilib[3],
anis=2,
age=(t\2)%3+1,
col=29
})
add(parts,{
draw=sprite,
maxage=5,
x=i,
y=-4,
ani=anilib[2],
plock=true
})
end
sfx(0)
end
-->8
--particles
function explode(ex,ey)
sfx(1)
add(parts,{
draw=blob,
x=ex,
y=ey,
r=17,
maxage=2,
ctab={119,167} --★
})
sparkblast(ex,ey,2)
sparkblast(ex,ey,8)
grape(ex,ey,2,13,1,
"return",{119,167,167,154},
0
)
grape(rndrange(ex-5,ex+5),ey-5,10,20,1,
"return",{167,154,169},
-0.2
)
grape(rndrange(ex-5,ex+5),ey-10,25,25,0.8,
"fade",{167,167,154,169,141,93},
-0.3
)
end
--1855
function dopart(p)
-- age and wait
p.age=p.age or 0
if p.age==0 then
p.ox=p.x
p.oy=p.y
p.r=p.r or 1
p.spd=p.spd or 1
end
p.age+=1
if p.age<=0 then return end
--particle code
--movement
if p.tox then
p.x+=(p.tox-p.x)/(4/p.spd)
p.y+=(p.toy-p.y)/(4/p.spd)
end
if p.sx then
p.x+=p.sx
p.y+=p.sy
if p.tox then
p.tox+=p.sx
p.toy+=p.sy
end
if p.drag then
p.sx*=p.drag
p.sy*=p.drag
end
end
--size
if p.tor then
p.r+=(p.tor-p.r)/(5/p.spd)--★ spd
end
if p.sr then
p.r+=p.sr
end
if p.age>=p.maxage or p.r<0.5 then
if p.onend=="return" then
p.tox=p.ox
p.toy=p.oy
p.tor=nil
p.sr=-0.3
elseif p.onend=="fade" then
p.tor=nil
p.sr=-0.1-rnd(0.3)
else
del(parts,p)
end
p.ctab=nil
p.onend=nil
p.maxage=32000
end
end
function grape(ex,ey,ewait,
emaxage,espd,
eonend,ectab,
edrift)
local spokes=6
local ang=rnd()
local step=1/spokes
for i=1,spokes do
--spawn blobs
local myang=ang+step*i
local dist=7+rnd(3)
local dist2=dist/2
add(parts,{
draw=blob,
x=ex+sin(myang)*dist2,
y=ey+cos(myang)*dist2,
r=2,
tor=rndrange(4,7),
tox=ex+sin(myang)*dist,
toy=ey+cos(myang)*dist,
sx=0,
sy=edrift,
age=-ewait,
maxage=emaxage,
onend=eonend,
spd=espd,
ctab=ectab,
ctabv=rnd(5)
})
end
add(parts,{
draw=blob,
x=ex,
y=ey,
r=2,
tor=7,
sx=0,
sy=edrift,
age=-ewait,
maxage=emaxage,
onend=eonend,
spd=espd,
ctab=ectab
})
end
function sparkblast(ex,ey,ewait)
local ang=rnd()
for i=1,6 do
local ang2=ang+rnd(0.5)
local spd=rndrange(4,8)
add(parts,{
draw=spark,
x=ex,
y=ey,
ctab={7,10},
sx=sin(ang2)*spd,
sy=cos(ang2)*spd,
drag=0.8,
age=-ewait,
maxage=rndrange(8,13)
})
end
end
function blob(p)
local myr=flr(p.r)
local thk={
0,
myr*0.05,
myr*0.15,
myr*0.3
}
local pat={
0b1111111111111111,
0b1011010010101101,
0b1000000000000000,
0,
}
--★
if myr<=2 then
pat={0b1111111111111111}
thk={0}
elseif myr<=5 then
deli(thk,4)
deli(thk,2)
pat={0b1111111111111111,0}
elseif myr<=8 then
deli(thk,myr<=6 and 3 or 4)
deli(pat,3)
pat[2]=0b1010101010101010
end
for i=1,#thk do
fillp(pat[i])
circfill(flr(p.x),flr(p.y)-thk[i],
myr-thk[i],p.c)
end
fillp()
--★
if myr==1 then
line(p.x,p.y-1,p.x,p.y,p.c)
elseif myr==2 then
rectfill(p.x-1,p.y-2,p.x+1,p.y,p.c)
end
end
function spark(p)
--47
for i=0,1 do
line(p.x+i,p.y,p.x+p.sx*2+i,p.y+p.sy*2,p.c)
end
end
function sprite(p)
if p.age<=0 then
return
end
local _x,_y=p.x,p.y
if p.plock then
_x+=pspr.x
_y+=py
end
mspr(cyc(p.age,p.ani,p.anis),_x,_y)
end
__gfx__
000000cc0000000000000cc00000000000000c0009009090000700000700070000000700000fff0000a00009000000900900000eeeeeeeee000000000e070070
00000c11c00000000000c11c000000000000c1000900909007770000070007000000000000f888f00a790909000000900000000eeeeeeeee000000000e777777
0000c1671c000000000c1671c0000000000c1600970090907777000007000000000000000f88e88f0a79099a000090900000000eeeeeeeee000000000e7c7777
0000c111d1c00000000c111d1c00000000c111009709a0907777007007000000700000000f8efe8fa77009a7090090000000000eeeeeeeee000000000e7c77c7
000c1ccc11c0000000c1ccc11c00000000c1cc09770970977777077077000000700000000f88e88f77790a77090000990000000eeeeeeeee000000000e0707c7
00c1c77cc11c00000c1c77cc11c000000c1c7709770979a777770770777000007700000000f888f0777a0777009009a00000000eeeeeeeee000000000e000070
00c1c7c1c11c00000c1c7c1c11c00000cc1c7c97a79a7977777700777707000770000000000fff000777777790909a700000000eeeeeeeee000000000e070070
00c1c111c111c000c11c111c111c000c111c1197a79a797077777077770000777000000000000000eee077779000a7000000000eeeeeeeee000000000eeee070
00c1c111c171c000c11c111c171c000c171c119aa79a79a007777777770000777000000000000000eee007779000a0000000000eeeeeeeee000000000eeee777
0c11cc171161c00c161cc117161c000c1611719aa799a9a000770777770700777070000070000000eeeeeeee000000009000000eeeeeeeee000000000eeee7c7
0c1d1c711d6d1c0c16d1c77116d1c0c1d6d1179a9a99a9aeeeee0077770000777000000070000000eeeeeeee090000000000000eeeeeeeee000000000eeee070
c1ddd111d6d7d1c1dddd1111dd671c176d6d11999a99999eeeee0077770000077000000770000000eeeeeeee009000000000000eeeeeeeee000000000eeee000
c1dd6ddd6d66d1c1dd66dddd6d661c1666d6dd999a99999eeeee0007770000007000000770000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000eeee070
c1d676676d6dd1c1d6676676d6dd1c1dd6d676909999999eeeee000077eeeeeee000000070000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000eeeeeee
0c176d167d111c0c117dd1171111c0c1111716900990909eeeeeeeeeeeeeeeeeeeeeeeeee0000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000
00c151155d11c000c1655155d11c000cc16151000900909eeeeeeeeeeeeeeeeeeeeeeeeee0000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000
000c1111111c00000c11111111c000000c1111000000000eeeeeeeeeeeeeeeeeeeeeeeeee0000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000
0000ccccccc0000000cccccccc00000000cccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee
00ee00ee0000000eeee00000000000000ee00ee00ee0000000eeee00000000000000ee000000000000000000000000000000000000000000000000000000ee44
0e11ee440000eee4444e00000000000ee440e11ee440000eee4444e00000000000ee4400000000000000000000000000000000000000000000000000000e44ff
e16d14ff000e114ffff4eeee000000e14ffe16d14ff000e114ffff4eeee000000e14ff0000000000000000000000000000000000000000000000000000e4ffff
e1d14ff7000e14ff7fff4111e0000e14ff7e1d14ff7000e14ff7fff4111e0000e14ff7000000000000000000000000000000000000000000000000000e4ff77f
e11d4f7f00e1d4f7ff9f4d161e00e1d4f7fe1134f7f00e134f7ff9f43161e00e134f7f00000000000000000000000000000000000000000000000000e14f777f
0e1c4fff00e1c4fff99f4c1d1e00e1c4fff0e1b4fff00e1b4fff99f4b1d1e00e1b4fff0000000000000000000000000000000000000000000000000e124f77ff
e1dc4f990e1dc4f9999f4cd11e0e1dc4f99e13b4f990e13b4f9999f4b311e0e13b4f99000000000000000000000000000000000000000000000000e1824ffff9
e1cc47990e1cc47999974cc1e0e16cc4799e1bb47990e1bb47999974bb1e0e16bb4799000000000000000000000000000000000000000000000000e1824fff99
e1dcc4770e1dcc477774ccd1e0e1ddcc477e13bb4770e13bb477774bb31e0e1d3bb47700000000000000000000000000000000000000000000000e18824f9999
e1dcc7440e1dcc744447ccd1e0e11dcc744e13bba440e13bba4444abb31e0e113bba4400000000000000000000000000000000000000000000000e182e4f7999
e11dcd7ce161dcd7cc7dcd1e000e11dcd7ce113b3abe1613b3abba3b31e000e113b3ab0000000000000000000000000000000000000000000000e11e1e247777
0e11dc77e1d11dc7777cd11e000ee11dc770e113baae1d113baaaab311e000ee113baa000000000000000000000000000000000000000000000e1d1888824477
e16d1ddce111e1ddccdd11e000000e11dd1e16d133be111e133bb3311e000000e1133100000000000000000000000000000000000000000000e1d611888f2244
e1d111dd0eee0e1dddd1d61e000000ee116e1d111330eee0e133331d61e000000ee11600000000000000000000000000000000000000000000e16d1188eeff22
e111ee11000000e111111d1e00000000e1de111ee11000000e111111d1e00000000e1d00000000000000000000000000000000000000000000e1d11128e2def7
0eee00ee0000000eeeee11e0000000000e10eee00ee0000000eeeee11e0000000000e1000000000000000000000000000000000000000000000e111912822ee7
00000000000000000000ee000000000000e00000000000000000000ee000000000000e0000000000000000000000000000000000000000000000ee1111288ee7
00ee00ee0000000eeee00000000000000ee00ee00ee0000000eeee00000000000000ee0000000000000000000000000000000000000000000000e1d1111228ff
0e11ee440000eee4444e00000000000ee440e11ee440000eee4444e00000000000ee440000000000000000000000000000000000000000000000e1d7d1111288
e16d14ff000e114ffff4eeee000000e14ffe16d14ff000e114ffff4eeee000000e14ff000000000000000000000000000000000000000000000e1d776d111911
e1d14ff7000e14ff7fff4111e0000e14ff7e1d14ff7000e14ff7fff4111e0000e14ff7000000000000000000000000000000000000000000000e1676d116d11d
e1124f7f00e124f7ff9f42161e00e124f7fe1144f7f00e144f7ff9f44161e00e144f7f00000000000000000000000000000000000000000000e1dd66d11dd167
0e184fff00e184fff99f481d1e00e184fff0e194fff00e194fff99f491d1e00e194fff00000000000000000000000000000000000000000000e167dd1ee111d1
e12e4f990e12e4f9999f4e211e0e12e4f99e1494f990e1494f9999f49411e0e1494f99000000000000000000000000000000000000000000000e166d1e0eee11
e18847990e18847999974881e0e16884799e19947990e19947999974991e0e169947990000000000000000000000000000000000000000000000e111e00000ee
e12e84770e12e84777748e21e0e1d2e8477e14994770e14994777749941e0e1d49947700000000000000000000000000000000000000000000000eee00000000
e128ef440e128ef4444fe821e0e1128ef44e1499a440e1499a4444a9941e0e11499a440000000000000000000000000000000000cccccccccccccccc111ccc11
e11282fee161282feef2821e000e11282fee11494a9e161494a99a4941e000e11494a900000000000000000000000000000000001c1c1c1ccccccccc1111ccc1
0e112effe1d112effffe211e000ee112eff0e1149aae1d1149aaaa9411e000ee1149aa0000000000000000000000000000000000cccccccccccccccc11111ccc
e16d1228e111e122882211e000000e11221e16d1449e111e144994411e000000e114410000000000000000000000000000000000ccccccccccccccccc11111cc
e1d111220eee0e122221d61e000000ee116e1d111440eee0e144441d61e000000ee1160000000000000000000000000000000000cccccccccccccccccc11111c
e111ee11000000e111111d1e00000000e1de111ee11000000e111111d1e00000000e1d0000000000000000000000000000000000ccccccccccccccccccc11111
0eee00ee0000000eeeee11e0000000000e10eee00ee0000000eeeee11e0000000000e10000000000000000000000000000000000ccccccccc1c1c1c11ccc1111
00000000000000000000ee000000000000e00000000000000000000ee000000000000e0000000000000000000000000000000000cccccccccccccccc11ccc111
bbbbbbb111bbbbbbbbbbbbbb11111111dd5555dddd5555ddb9999999999999bbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddd5d55d55d88888888
bbb1111161111bbbbbbbbbbb17777761d566665dd56ddd5db9999999999999bbbbbb4444bbbb44444444bbbbdddd5d55dddd55d555d5ddddd55d5d6588888888
bbb16dd1611661bbbbbbbbbb17777761d565565dd5655d5db9999999999999bbbb44999944449999999944bbddd5151155d5115111515ddddd55d65588888888
bbb16dd1611661bbb9abb9ab17777761d566665dd56ddd5db9999999999999bbbb49999999999999999994bbdd51515111515151515115dd5dd5d55d88888888
bbb16666666661bbb9a999ab17777761d57ccc5dd57ccc5dbb9999999999999bb4999999999999999999994bdd115111515151511151115ddd5d556588888888
bbb1d11ddd11d1bbb9abb9ab17777761d57dd55dd566665dbb9999999999999bb9999999999999999999999bd551111151111111111151dd5dd6565d88888888
bbb31111111113bbb9a333ab17777761d576655dd555555dbb9999999999999bb9999999999999999999999bd1511111111111111111515d5d5555dd88888888
bbbbbbbbbbbbbbbbbbbbbbbb17666661d576655ddd55555dbb9999999999999bb9999999999999999999999bd1111111111111111111111ddd5ddd5d88888888
11111111111111111111111116ddddd1d57dd55db3333333333333bb99999999b9999999999999999999999bd1111111111111111111111d8888888888888888
111111116111111111777777176666d1d57dd55d333b3b3b3bbb333399999999b9999999999999999999999bd5111111111111111111115d8888888888888888
11116dd16116611111777777176666d1d576655d3bbbbbbbbbbb3b3b99999999b9999999999999999999999bd1111111111111111111111d8888888888888888
11116dd161166111116666661dddddd1d576655dbbbbbbbbbbbbbbbb99999999b9999999999999999999999bd111111111111111111115dd8888888888888888
1111666666666111116666661cccccc1d57dd55dbbbbbbbbbbbbbbbb99999999bb99999999999999999999bbdd51111111111111111111dd8888888888888888
1111d00ddd00d11111d00ddd1d5665d1d57dd555bbbbbbbbbbbbbbbb99999999bb99999999999999999999bbdd111111111111511115d1dd8888888888888888
11110000000001111110000010d55d01d5555555bbbbbbbbbbbbbbbb99999999bbbb99999999bbbb9999bbbbdddd15111511dddd1511dddd8888888888888888
11111111111111111111111110000001dd555555bbbbbbbbbbbbbbbb99999999bbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddd8888888888888888
bbbbbbbbbbbbbbbb31111111111113bbbbbbbbbbbbbbbbbbbbbbbbbbbbb533bbbbbbbbbbbbbbbbbbbbb3b3bbb3bbbbb3bbbbbbb5555555555bbbbbbb11111111
bbbbbbbbbbbbbbbbb31111171111113bbbbbbbbbbbbbbbbbbbbbbbbbbbbd3bbbbbbbbbbbbbbbbbbbb3b3333333bbbbb3bbbbbb5cccccccccd5bbbbbb11111111
bbbbbbbbbbbbbbbb31111117111113bbbbbbbbbbbbbbbbb11bbbbbbbbbbd3bbbbbbbbbbbbbbbbbbb33355553533b3b33bbbbb57ddddddddddd5bbbbb15151515
bbbbbbbbbb3b3bbbb3111111111113bbbbb5bbb5bbb5bb1331b5bbb5bbb53bbbbbb5bbb5bbb5bbbb5554454545333335bbbb5d6dddddddddd5d5bbbb51515151
bbbbbbbb3b3b3b3bb31111171111113bddd5ddd5ddd5d13bb315ddd5bbb533bbbbb5ddd5ddd5bbbb4544454444555552bbb55d6dddddddddd55d5bbb55555555
bbbbbbbbbbbbbbbb31111117111113bbbbb5bbb5bbb5b13b3315bbb5bbbd3bbbbbbd3bb5bbbdbbbb4444444444222222bb5ddd6dddddddddd555d5bb55555555
bbbbbbbbbbbbbbbbb3111117111113bb3335333533353133b3153335bbbd3bbbbbbd3335333d3bbb4242424244422222b5dd5d6dddddddddd5555d5b33333333
bbbbbbbbbbbbbbbbb31111171111113bbbbbbbbbbbbbb13bb31bbbbbbbb53bbbbbb53bbbbbb53bbb44444444444422245d5d5d6dddddddddd55555d533333333
bb3bb3b3111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb53bbbbbb53bbb24242424242424245ddd5d6dddddddddd5555555dddddddd
33133131111111111111111111111111bbbbbbbbb111bbbbbbbbbbbbbbbb111bbbbd3bbbbbbd3bbb42424242444242425d5d5d6dddddddddd5555555d55d5ddd
11111111111111111111111331111111b11111bbb1711bbbbb11111bbbb1171bbbbd3bbbbbbd3bbb24242424222665245d5ddd6dddddddddd5555555dddddddd
111111111111111111111133331111111711771bb17111bbb1771171bb11171bbbb53bb5bbb53bbb42424242426555225ddd5d6dddddddddd5555555dddddddd
11111111111111111111113bb311111117177111b117171b11177171b171711bbbb5ddd5ddd53bbb24242424225555245d5d5d6dddddddddd5555555dddddddd
11111111133133131331313b3311331331111111b131711b11111113b117131bbbbd3bb5bbbd3bbb42424242422552225d5ddd6dddddddddd5555555dddddddd
111111113bb3bb3b3bb3b133b313b33b31331311bb31111111313313111113bbbbbd3335333d3bbb22222222242222425ddd5d6dddddddddd5555555dddddddd
77771771bbbbbbbbbbbbb13bb31bbbbbbbbbbbbbbbb1311bbbbbbbbbb1131bbbbbbbbbbbbbbbbbbb24242424242222245d5d5d6dddddddddd5555555dddddddd
b333333bbbbbbbbbbbbbbbbb3333333333333333bbbbbbbbcccccccccccccccccccccccc1111111122222222222442225d5ddd7ccccccccc75555555cccccccc
3b3bb3b3bbbbbbbbbbbbbbbb133333313b3bb3b3bbbbbbbbcccccccccccccccccccccccc1111111122222222244444225ddd5655555555555555555555555555
3bbbbbb3bbbbbbb11bbbbbbb131313113bbbbbb33bbbbbb3cccccccccccccccccccccccc1111111122222222244222225d5d65dddddddddddd555555dddddddd
bbbbbbbbbbbbbb1331bbbbbb31111113bbbbbbbb33bbbb33ccccccccc777c7cccccccccc1111111111111111142222215d565d666666666666d55555666dd666
3bbbbbb3bbbbb13bb31bbbbbb314413b3bbbbbb3b3bbbb3bccccccccccccccccc7c777cc11111111ccccccccc122221c5d65d66666666666666d555566d66d66
b3bbbbbbbbbbb13b331bbbbbb3122133b3bbbbbbb3bbbb33cccccccccccccccccccccccc11111111111111111cccccc1565d6666666666666666d55566d66d66
3b33b3b3bbbbb133b31bbbbb3312213b3b33b3b3333bb33bcccccccccccccccccccccccc11111111ccccccccc111111c55d666666666666666666d5566dddd66
333b3b33bbbbb13bb31bbbbbb313313b333b3b33b333333bcccccccccccccccccccccccc11111111111111111cccccc15d66666666666666666666d566666666
33333333bbbbb133331bbbbb33133133333333333333333333333333333333332222222211111111b3b3bbbb11122211b5666666666666666666665b66666666
13333331bbbbbb1331bbbbbb313333131333333113333331133333313333333322222222111111113333b3b311242211b5666666666666666666665b66dddd66
13131311bbbbbbb11bbbbbbb1333333113131311131313111313131133333333222222221111111135553333c242222cb5666666666666666666665b66d66d66
31111113bbbbbb3223bbbbbb2333333241111114411111133111111433333333322333221111111154445555c222222cb5666666666666666666665b66dddd66
b311313bbbbbbb3223bbbbbb23333332222442222224413bb3144222b333333b3333333311111111444445441c2222c1b5666666666666666666665b66666666
3313113bbbbbbbb33bbbbbbb33bbbb33332222333322213b33122233b3333333333333331111111144444444c1cccc1cb5555555555555555555555b55555555
b3113133bbbbbbbbbbbbbbbb3bbbbbb33332233333322133b31223333333333b3333333317777771424242421c1111c1b3333333333333333333333b33333333
b313113bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb333313bb313333bb333333b33333333111111114444444411cccc11b3333333333333333333333b33333333
__map__
e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f09dc0c0c0c0c0c0c0c0c0c0c1c0c0c0c0c09d9df0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0c0c0c1c0c0c0c0c0c2c3c0c0c0c0c0c0c0c0c0c1c0c0c0c0c0c0c2c3c0c0c0c0c1c0c0c0c0e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9c0e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e60000
f5e4f6f3f5e4f6f3f4f3f5e4e3e4e3e4e3e4c0c0c0c1c0d7c0c0c0c0c0c0e1e0e5e0e5e0f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4c4c4c4c4c5e0c6c4c2c3c4c4c4c4c4c4c4c4c0cccdcdcdcdcec0c2c3c0cccdcdcdcdcec0c0e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9c0e6e6e7e6e6e6e6e6e6e6e6e6e6e6e6e6e6e60000
f1f4f2c1f1f4f2c0c0c1f1f4f3f4f3f4f3f4e0e2c0d4c0c0c0c0c0c0c0e1e0f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0c0c1c0c0f1f4f2c0c2c3c0c0c1e1e0e2c0c0c0dcdfdddddddec0c2c3c0dcdfdddddfdec0c0c4c4c2c3c0c0c1c0c0c0c0c0c2c3c4c4c4e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e8e6e60000
d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0f0e0e5e0e5e0e2c0c0c0c1f1f5e4f0e4f0e4f0e4f6f3f4f3f4f3f5e4e3e4f0e4f0e4f0e4c0c0c0c0c0c0c1c0c2c3c1c0c0f1f4f2c0c0c0dcdda5a5dfdec0c2c3c0dcdda5a5dfdec0d0d0d0e9e9d0d0d0d0d0d0d0d0e9e9d0d0d0b5b6b6b5b6b6b6b5b6b5b5b6b6b5b6b5b6b50000
d1d2e4d3d1d1d1d2e4d3d1d2e4d3d1d1d1d2e4f0e4f0e4f6f2c0c0c0c0e1e0f0e4f0e4f0e4f6f2c0c1c0c0c0f1f4f3f5e4f0e4f0e4f0c0c0c0c0c1c0c0c0c2c3c0c0c0c0c0c0c0c1c0dcdddfdddfdec0c2c3c0dcdddfdddfdec1d1d1d1d1d1d1d1d1e9e9d1d1d1d1d1d1d1d1c0c1c0c0e1e4e2c0c0c0c0c0c0c0c1c0c1c00000
e5e0f0e0e5e0e5e0f0e0e5e0f0e0e5e0e5e0f0e4f0e4f6f2c0c0c0d4e1e0f0e4f0e4f0e4f0e4e2c0c0c0c1c0c0c0c0f1f5e4f0e4f0e4b5b6b5b6b5b6b5b6b5b6b6b5b6b6b6b6b5b6c0dcdddfdddfdec1c2c3c0dcdfdddddfdec0c0c0c0c0c0c0c0c0c2c3c0c0c0c0c0c0c1c0c0c0c0c0f1f4f2c0c0c0c1c0c0c0c0c0c0c00000
e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f6f2c0c0d7c0c0f1f5e4f0e4f0e4f0e4f6f2c0c0c0c0c0c0c1c0e1e4f0e4f0e4f0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0dcdfdddddddec0c2c3c0dcdfdddddddec0c0c0c0c1c0c0c0c0c2c3c0c0c1c0c0c0c0c0c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c40000
f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e49ee4f0e0e2c1c0c0c0c0c0f1f5e4f0e4f09e9ee4e5e0e2c0c0c0c0c0c0f1f5e4f0e4f09e9ec0c0c0c1c0c0c0c0c0c0e1e0e2c0c1c09ec0dcdddddfdddec0c2c3c0dcdddddddfdec09ec0c0c0c0c0c0c0c2c3c0c0c0c0c0c0c09ec0c0c0a8aac0c0c0c0c0c0c0c0c0c0c0c0c00000
e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f09de3e4f6f2c0c0c0c0c0c0e1e0f0e4f0e49d9df0e4f0e0e2c0c0c1c0c0e1e0f0e4f0e49d9dc0c0c0e1e0e2c0c0c0c0f1f4f2c0c0c09dc0dcdfdddddddec0c2c3c1dcdddddddfdec0c4c4c4c4c4c4c4c4c2c3c4c4c4c4c4c4c4c4c0c0a8b7b7a9a9a9aac0cccdcdcdcec0c09d0000
f0e4f0e4f0e4e3e4f0e4f0e4f0e4f0e4f0e4f4f3f4f2c0d5c0c0c0c1c0f1f5e4f0e4f0e4f0e4f0e4f6f2e1e0e2c0e1e0f0e4f0e4f0e4c0c1c0c0f1f4f2c0c0c1c0c0c0c0c0c1c0c0c0dcdddddddfdec0c2c3c0dcdfdddddddec0e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9c0cccdcdcdcdcdcdcdcddcabacaddecdcec00000
e4f0e4f0e4f0e4f0e4f0e4f0e4e3e4f0e4f0c0c0c1c0d4c0c0c0c0c0c0c0f1f5e4e3e4e3e4f0e4f0e0e2f1f4f2c0f1f5e4f0e4f0e4f0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c1dcdfa5a5dddec0c2c3c0dcdfa5a5dfdec0f9f9e9e9f9b0b1e9e9e9e9f9b0b1b0b1f9e9c0dcdda5a5dfdddddddfdcbbbcbddedddec10000
f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4c0c0c0c0c0c0d6c0c0c0c0c0c0f1f4f3f4f3f0e4f0e4f0e0e2c0c0c1e1e0f0e4f0e4f0e4cafacbfacacbcacafafafacbfafafacbfacac0dcdddddddfdec0c2c3c0dcdddddddfdec0f9b2b1e9f9f9e9e9e9e9e9f9f9e9b2b1f9e9c1dcddddddddddaedddddcaedddddedddec00000
e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0c0c0c0c0d7c0c0c0c0c1c0cccdcee1e0e2c0e4f0e4f0e4f6f2c0c0c0f1f5e4f0e4f0e4f0dadadadadadbdadadadbdadadadadadadbdac0dcdfdddddfdec0c2c3c0dcdfdddddfdec0f9b0b1e9f9b2b1e9e9e9b0b1f9e9e9f9b0b1c0dcddaeddabacacadaedcdddddddedddec00000
f0e4e3e4f0e4f0e4f0e4f0e4f0e4e3e4f0e4c0c0c0c1c0c0c0c0c0c0c0dcdddef1f4f2c0f0e4f0e4f6e0e2c0e1e0e2f1f5e4f0e4f0e4f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8c0ecededededeec0c2c3c0ecededededeec0f9f9e9e9f9b0b1e9e9e9e9f9b0b1b0b1f9e9c0dcdfa5abe9e9e9e9addcdddfdfdedddec00000
e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0c4c4c4c4c4c4c4c5e0c6c4ecefeec0c0c0c0e4f0e4f0e4f6f2c0f1f4f2e1e0f0e4f0e4f0e4f7e4f7e4f7e4f7e4f7e4f7e4f7e4f7e4f7c0fcffcfcffffec1c2c3c0fcffcfcffffec0f9b0b1e9f9f9e9e9e9e9b2b1f9e9b0b1f9e9c0dcdda5bbe9e9e9e9bddcdddfdddedddec00000
f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e49ec0c0c0c0c0c1f1f4f2c0fccffea0a1c09e9ee4e3e0f6f2c0c1c0c0c0f1f5e4e3e4e39ef0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f09ec0c1c0b8bac0c0c0c2c3c0c0c0b8bac0c1c0f9b2b1e9f9b0b1e9e9e9b0b1f9e9e9f9b0b19edcdfddaebbbcbcbddddcdddddfdeddde9e0000
e4e3e4e3e4f6f3f4f3f4f3f4f3f5e4e3e4e39dc1c0c0c0c0c0c0c0c0c0c0c0c0c0c0c09d9df4f3f4f2c0c0c0c1c0c0c0f1f4f3f4f39d9df0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e49dc8c4c4c4c4c4c4c9c2c3c0c0a8a9a9aac0c0f9f9e9e9f9b0b1e9e9e9e9f9b0b1b2b1f9e99ddcdddddfddddaedfa5dcdddddddeddde9d0000
f4f3f4f3f4f2c0c0c1c0c0c0c0f1f4f3f4f3d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0f0e4f0e4e3e4f0e4f0e4f0e4e3e4f0e4f0e4c7c0c0c0c0c0c0c7c2c3c0c0b8b9b9bac0c0f9b0b1e9f9f9e9e9e9e9b0b1f9e9b0b1f9e9c0dcdda5a5dda5a5dddddcdda5dfdedfdec00000
c0c0c0c1c0c0c0c0c0c0c0c0c1c0c0c0c0c0d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d2e4d3d1d1d1d1d1d1d1d2e4d3d1d2e4d3e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0d8c4c4c4c4c4c4d9c2c3c0c0c0c0c0c0c0c0f9b0b1e9f9b2b1e9e9e9b0b1f9e9e9f9b0b1c0dcdda5a5dfa5a5dddfdcdfdfdddedddec00000
cacafacacbcafacafafacacbcafacacbfacac4c4c4c4c4c4c4c4c4c5e0c6c4c4c4c4c4c4e5e4f0e4e5e0c6c4c4c4c5e0f0e4e5e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4a9a9a9a9a9a9a9aac2c3a8a9a9a9a9a9a9a9d1d1d1d1d1d1d1d1e9e9d1d1d1d1d1d1d1d1c1dcdddddddddddddddddcdda5dfdedddec00000
dadbdadadadadadadbdadadadbdadadadadbc0c0d7c0c0c0c0d6c0f1f4f2c0c0c1d5c0c0e4f0e4f0e4f6f2e1e0e2f1f5e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4e3e4f0b9b9b9b9b9b9b9bac2c3b8b9b9b9b9b9b9b9c4c4c4c4c4c4c4c4c2c3c4c4c4c4c4c4c4c4c0dcdddfdddddfdddddddcdda5dddedddec00000
eaeaebeaeaeaeaeaeaeaeaebeaebeaeaeaeac0c1c0c0c0d4c0c0c0c0c1c0c0c0c0c0d7c0f0e4f0e4f6e0e2f1f4f2c0f1f5e4f0e4f0e4f0e4e3e4f0e4f6f3f4f3f4f3f5e4f0e4f0e4c0a8a9aac0c1c0c0c2c3c0c0c0c0c0c1c0c0c0c1c0c0c0c0c1c0c2c3c0c0c0c0c1c0c0c0c0dcdfa5a5dda5dddddddcdddfdfdedfdec10000
e9e9e9e9e9e9fbe9e9e9e9e9e9e9e9fbe9e9c0c0c0c0c0c0c1c0c0c0d5e1e0e2c0c0c0c0e4f0e4f0e4f6f2c0c0c0c1e1e0f0e4f0e4f0e4f0e4f0e4f6f2a8a9a9aac1f1f5e4f0e4f0c0b8b9bac0c0a8aac2c3c0c1c0c0c0c0c0c0c0c0c0c0c0c0c0c0c2c3c0c1c0c0c0c0c1c0c0dcdda5a5dda5a5ddddecefefefeedddec00000
e9e9fbe9e9e9e9e9e9e9e9e9e9e9e9e9e9e99ec0c1c0c0c0c0c0c0c0c0f1f4f2c0c1c09e9ee4f0e4f6f2c0c0c0c0c0f1f5e4f0e4f09e9ee4f0e4f6f2a8b7b7b7b7aae1e4f0e4f09ec0c1c0c0c0c0b8bac2c3c0c0c0c0c0c0c0c0c0c0c0c1c0c0c0c0c2c3c0c0c0c0c0c0c0c09edcdfdddfdddddddddddfdfdfddddddde9e0000
e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e69de2c0c0c0e1e0e2c0c0c0c0c0c0c0c0c09d9dc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c09d9df0e4f0e0e2b8b7b7b7b7baf1f5e4f0e49dc8c4c4c4c4c4c4c9c2c3c8c4c4c4c4c4c4c9c8c4c9a6a7c8c4c9c8c4c9c8c4c9c8c4c9c89ddcdda5a5dda5a5dddda4dda4dda4dfde9d0000
e6e6e7e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6f6f2c0c0c0f1f4f2c0c0c0c1d6c0c0c1e1e0c0c0c0c0c0c0c0c0c0d7c0c0c0c1c0c0c0c0f0e4f0e4f0e0e2b8b7b7bac0e1e0f0e4f0e4c7d4c0c0c0d6c0c7c2c3c7d5d7d5c0d7c0c7c7d7c7a6a7c7d4c7c7d6c7c7d6c7c7d6c7c7c0dcdfa5a5dda5a5dddfb4ddb4ddb4dfdec00000
e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e8e6e6e0e2c0c1c0c0d6c0c0e1e0e2c0c0d5c0f1f5c0c0c1c0e1e0e2d6c0c0c0c0c0c0c0c0c0c0e4f0e4f0e4f6f2a2c0c0c0c1f1f5e4f0e4f0c7c0d7d6d5c0d7c7c2c3c7c0c0d4c0d6c0c7c7d6c7a6a7c7d7c7c7d5c7c7d7c7c7d6c7c7c0dcdddddddfdddddddddddddfdddfdddec00000
e6e6e6e6e6e6e6e6e8e6e6e6e6e6e6e6e6e6f0e0e2c0d4c0c0c0c0f1f4f2c0c0c0d6e1e0c0c0c0c0f1f4f2c0d5c0c0c1c0c0c1c0c0c0f0e4f0e4f0e4c1c0a2a2c0a2e1e0f0e4f0e4d8c4c4c4c4c4c4d9c2c3d8c4c4c4c4c4c4d9d8c4d9a6a7d8c4d9d8c4d9d8c4d9d8c4d9d8c0ecededededededededededededededeec00000
e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e4f0e0e2c0c0d7c0c0c1c0c0c0d7c0e1e0f0c0c0c0d5c0c0c0c0c0c0c0c0d4c0c0d5c0c0e4f0e4e3e4f0e0e2a0a1c1e1e4f0e4f0e4f0c8c4c4c4c4c4c4c9c2c3c8c4c4c4c4c4c4c9c8c4c9a6a7c8c4c9c8c4c9c8c4c9c8c4c9c8c0fccfcffdcfa3fdcfcffdfdffffffcffec10000
e6e6e6e6e6e6e6e6e6e6e6e6e7e6e6e6e6e6f0e4f0e0e2c0c0c0c0c0c0c1c0c0e1e0f0e4c0c0d4c0c0c0c1c0c0c0c0c0e1e0e2c0c0c0f0e4f0e4f0e4f0e0e2a0a1f1f4e4e3e4f0e4c7d7c0d4c0d7c0c7c2c3c7c0d4d5c0d7c0c7c7d5c7a6a7c7d6c7c7d5c7c7d4c7c7d4c7c7c0e9e9a3e9e9b3e9e9b2b1a3a3e9e9b0b1c00000
e6e6e6e8e6e6e6e6e6e6e6e6e6e6e6e6e6e6e4f0e4f0e0e2c0e1e0e2c0e1e0e5e0f0e4f0c0c0c0c0c0c0c0c0c0c0c1c0f1f4f2c0c0c0e4f0e4f0e4f0e4f0e0e5e0e5e0f0e4f0e4f0c7d5d6c0d5c0c0c7c2c3c7d5c0c0d6c0d6c7c7d4c7a6a7c7d4c7c7d4c7c7d5c7c7d7c7c7c1e9e9b3e9e9e9e9e9e9e9b3b3a3e9b2b1c00000
e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6f0e4f0e4f0e0e5e0f0e0e5e0f0e4f0e4f09e9ec0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c09ef0e4f0e4f0e4f0e4f0e4f0e4f0e4f0e4f09ed8c4c4c4c4c4c4d9c2c3d8c4c4c4c4c4c4d9d8c4d9a6a7d8c4d9d8c4d9d8c4d9d8c4d9d8c0e9e9e9e9e9e9e9e9e9e9e9e9b3e9e9e9c00000
__sfx__
a2010000070401f6401f6300e6200d610050100301001050000100201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
12030000256402c6602f6602f65027640206401a630136300e6500d650106401866022620106400b6300a65010630146101062001620006100061000000000000000000000000000000000000000000000000000
000300003a0263f0463c0160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000