Skip to content

Instantly share code, notes, and snippets.

@AlecTroemel
Last active April 25, 2021 18:06

Revisions

  1. AlecTroemel revised this gist Apr 25, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion earigator.p8
    Original file line number Diff line number Diff line change
    @@ -685,7 +685,7 @@ function _init()
    gstate:add("start",gs_start)
    gstate:add("over",gs_over)
    gstate:add("title",gs_title)
    gstate:switch("game")
    gstate:switch("title")
    end

    function _update60()
  2. AlecTroemel revised this gist Apr 25, 2021. 1 changed file with 8 additions and 2 deletions.
    10 changes: 8 additions & 2 deletions earigator.p8
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,8 @@
    pico-8 cartridge // http://www.pico-8.com
    version 30
    __lua__
    -- ld48: earigator
    -- by: alec t
    -- framework

    -------------------------------
    @@ -683,7 +685,7 @@ function _init()
    gstate:add("start",gs_start)
    gstate:add("over",gs_over)
    gstate:add("title",gs_title)
    gstate:switch("title")
    gstate:switch("game")
    end

    function _update60()
    @@ -1037,6 +1039,9 @@ gs_game={world={}}
    score=0

    function gs_game:init()
    physics:reset()
    physics2:reset()

    music(6)
    score=0
    self.world={}
    @@ -1102,7 +1107,7 @@ function gs_game:draw()
    end
    -->8
    -- minigame utils
    colors={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
    colors={3,4,5,6,7,8,9,10,11,12,13,14,15}
    buttons={⬅️,➡️,⬆️,⬇️,❎,🅾️}
    buttons_chr={"⬅️","➡️","⬆️","⬇️","","🅾️"}
    minigames={"mashit","pmatch","timeit"}
    @@ -1375,6 +1380,7 @@ end
    gs_title={world={}}

    function gs_title:init()
    self.world={}
    music(0)
    for i=1,5 do
    add(self.world,mk_earwax(
  3. AlecTroemel created this gist Apr 25, 2021.
    1,771 changes: 1,771 additions & 0 deletions earigator.p8
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1771 @@
    pico-8 cartridge // http://www.pico-8.com
    version 30
    __lua__
    -- framework

    -------------------------------
    --------- tiny ecs ----------
    -- by katrinakitten
    -------------------------------
    function ent(t)
    local cmpt={}
    t=t or {}
    setmetatable(t,{
    __index=cmpt,
    __add=function(self,cmp)
    assert(cmp._cn)
    self[cmp._cn]=cmp
    return self
    end,
    __sub=function(self,cn)
    self[cn]=nil
    return self
    end
    })
    return t
    end

    function cmp(cn,t)
    t=t or {}
    t._cn=cn
    return t
    end

    function sys(cns,f)
    return function(ents,...)
    for e in all(ents) do
    for cn in all(cns) do
    if(not e[cn]) goto _
    end
    f(e,...)
    ::_::
    end
    end
    end

    -------------------------------
    --------- components ----------
    -------------------------------
    function pos(x,y)
    return cmp("pos",{ x=x,y=y })
    end

    function vel(x,y)
    return cmp("vel",{ x=x,y=y })
    end

    function speed(x,y)
    return cmp("speed",{ x=x,y=y })
    end

    function fric(v)
    return cmp("fric",{ v=v })
    end

    function anim(cur,sts)
    return cmp("anim",{
    tick=0,
    frame=1,
    current=cur,
    states=sts
    })
    end

    function image(x,y,w,h,t)
    return cmp("image",
    { x=x,y=y,
    w=w,h=h,
    t=t --type: "sprite" or "map"
    })
    end

    function col(w,h,f,ox,oy,b,s)
    if not s then
    s=false
    end

    return cmp("col",
    { w=w,h=h,
    flags=f,
    ox=ox,oy=oy,
    bounce=b,
    shake=s })
    end

    function timer(int,cb)
    return cmp("timer",
    {interval=int,callback=cb})
    end

    function mk_timer(int,cb)
    e=ent()
    e+=timer(int,cb)
    return e
    end
    -------------------------------
    --------- systems ----------
    -------------------------------
    move=sys({ "pos","vel","col" },
    function(e)
    local new_pos=map_collision(
    e.pos,e.vel,e.col)

    e.pos.x=new_pos.x
    e.pos.y=new_pos.y

    e.col.hit=new_pos.hit


    if new_pos.hit then
    if e.col.bounce then
    e.vel.x*=-1
    e.vel.y*=-1
    end

    if e.col.shake then
    screenshake:start(4)
    end
    end
    end)

    friction=sys({ "vel","fric" },
    function(e)
    e.vel.x*=e.fric.v
    e.vel.y*=e.fric.v
    end)

    anim_u=sys({ "anim" },
    function(e)
    local a=e.anim
    local s=a.states[a.current]

    a.tick=(a.tick+1)%s.speed
    if a.tick==0 then
    a.frame=(a.frame+1)%#s.frames
    end
    end)

    anim_d=sys({ "anim","pos" },
    function(e)
    local p=e.pos
    local a=e.anim
    local f=a
    .states[a.current]
    .frames[a.frame+1]
    spr(f,p.x,p.y,1,1,a.flip)
    end)

    image_d=sys({ "pos","image" },
    function(e)
    i=e.image
    p=e.pos
    if i.t=="sprite" then
    sspr(i.x,i.y,i.w,i.h,p.x,p.y)
    end

    if i.t=="map" then
    map(i.x,i.y,p.x,p.y,i.w,i.h)
    end
    end)

    timer_u=sys({ "timer" },
    function(e,w)
    if e.timer.interval==0 then
    e.timer:callback()
    del(w,e)
    else
    e.timer.interval-=1
    end
    end)
    -------------------------------
    --------- game state ----------
    -------------------------------
    -- each state has init,
    -- update, draw funcs
    -------------------------------
    gstate={ current="" }

    function gstate:add(name, s)
    self[name]=s
    end

    function gstate:switch(n)
    self.current=n
    self[n]:init()
    end

    function gstate:update()
    self[self.current]:update()
    end

    function gstate:draw()
    self[self.current]:draw()
    end

    --------------------------------
    -------- screen shake ----------
    --------------------------------
    screenshake={
    duration=0,
    intensity=2
    }

    function screenshake:start(d,i)
    self.duration=d
    if i!=nil then
    self.intensity=i
    end
    end

    function screenshake:update()
    if self.duration>0 then
    local i=self.intensity
    local sx=flr(rnd(i)-i/2)
    local sy=flr(rnd(i)-i/2)
    camera(sx,sy)
    self.duration-=1
    end

    if self.duration==0 then
    camera(0,0)
    end
    end


    -------------------------------
    -------- 2d vector -----------
    -------------------------------
    vec2d = {}

    function vec2d:new(x,y)
    o={x=x,y=y}
    self.__index=self
    return setmetatable(o, self)
    end

    function vec2d:len()
    return sqrt(self.x^2+self.y^2)
    end

    function vec2d:norm()
    local l = self:len()
    return vec2d:new(
    self.x/l,
    self.y/l)
    end

    function vec2d:minus(vec)
    return vec2d:new(
    self.x-vec.x,
    self.y-vec.y
    )
    end

    function sqr(a)
    return a*a
    end

    function round(a)
    return flr(a+0.5)
    end

    function dist(p1, p2)
    local dx=p2.x-p1.x
    local dy=p2.y-p1.y
    return sqrt(dx*dx+dy*dy)
    end

    -------------------------------
    -------- collision -----------
    -- detect if box a and b overlap.
    -- both a and b must have comps
    -- col, pos
    -- original: https://mboffin.itch.io/pico8-overlap
    -------------------------------
    function overlap(a,newx,newy,b)
    assert(a.col)
    assert(a.pos)
    assert(b.col)
    assert(b.pos)

    return not (
    newx>=b.pos.x+b.col.w
    or newy>=b.pos.y+b.col.h
    or newx+a.col.w<=b.pos.x
    or newy+a.col.h<=b.pos.y)
    end

    map_offset={x=0,y=0}

    function map_collision(p,v,c)
    local newx=p.x+v.x
    local newy=p.y+v.y
    local dx=v.x>0 and 1 or -1
    local dy=v.y>0 and 1 or -1
    local w_hit=false

    -- check x direction
    for i=p.x+c.ox,p.x+v.x+c.ox,dx do
    local x=dx>0 and i+c.w-1 or i
    local hit=false

    for y=p.y+c.oy,p.y+c.h+c.oy,c.h/3 do
    local flag=fget(mget(
    (x/8)-map_offset.x,
    (y/8)-map_offset.y))
    for f in all(c.flags) do
    if f==flag then
    hit=true
    end
    end
    end

    if not hit then
    w_hit=true
    newx=i
    end
    end

    -- now y direction
    for i=p.y+c.oy,p.y+v.y+c.oy,dy do
    local y=dy>0 and i+c.h-1 or i
    local hit=false

    for x=p.x+c.ox,p.x+c.w+c.ox,c.w/3 do
    local flag=fget(mget(
    (x/8)-map_offset.x,
    (y/8)-map_offset.y))
    for f in all(c.flags) do
    if f==flag then
    hit=true
    end
    end
    end
    if not hit then
    w_hit=true
    newy=i
    end
    end

    return {x=newx,y=newy,
    hit=w_hit}
    end

    -------------------------------
    ---------- physics ------------
    -------------------------------
    function new_physics()
    return {
    particles = {},
    springs = {},

    ax = 0,
    ay = 0,
    dt = 0.1,

    setforce = function(this, _ax, _ay)
    this.ax = _ax
    this.ay = _ay
    end,

    reset = function(this)
    this.particles = {}
    this.springs = {}
    end,

    addparticle = function(this, p)
    add(this.particles, p)
    end,

    addspring = function(this, s)
    add(this.springs, s)
    end,

    update = function(this)
    for p in all(this.particles) do
    p:update(this.ax, this.ay, this.dt)
    end

    for s in all(this.springs) do
    s:update()
    end
    end
    }
    end

    function spring(_p1, _p2, _length, _stiffness)
    return {
    p1 = _p1,
    p2 = _p2,
    length = _length,
    stiffness = _stiffness,

    update = function(this)

    dx = this.p2.x - this.p1.x
    dy = this.p2.y - this.p1.y
    d2 = sqrt(dx*dx + dy*dy)
    d3 = (d2 - this.length)/d2

    if (not(this.p1.locked)) then
    this.p1.x += 0.5*dx*d3*this.stiffness
    this.p1.y += 0.5*dy*d3*this.stiffness
    end

    if (not(this.p2.locked)) then
    this.p2.x -= 0.5*dx*d3*this.stiffness
    this.p2.y -= 0.5*dy*d3*this.stiffness
    end

    end
    }
    end

    function particle(_x,_y)
    return {
    x = _x,
    y = _y,
    x1 = _x,
    y1 = _y,
    locked = false,
    shake = false,

    lock = function(this)
    this.locked = true
    end,

    unlock = function(this)
    this.locked = false
    end,

    shakeit = function(this)
    this.shake=true
    end,

    update = function(this, ax, ay, dt)

    if (not(this.locked)) then

    this.tempx = this.x
    this.tempy = this.y

    local pos={x=this.x,y=this.y}
    local vel={
    x=this.x-this.x1+ax*dt*dt,
    y=this.y-this.y1+ay*dt*dt
    }
    local col={
    w=2,h=2,
    flags={0},
    ox=0,oy=0,
    bounce=true}
    -- colision with map
    new_pos=map_collision(pos,vel,col)

    this.x=new_pos.x
    this.y=new_pos.y

    if new_pos.hit then
    if this.shake then
    screenshake:start(4)
    end
    end

    this.x1 = this.tempx
    this.y1 = this.tempy
    end
    end

    }
    end

    -------------------------------
    ---------- textbox ------------
    -------------------------------
    -- call this before you start using dtb.
    -- optional parameter is the number of lines that are displayed. default is 3.
    function dtb_init(numlines)
    dtb_queu={}
    dtb_queuf={}
    dtb_numlines=3
    if numlines then
    dtb_numlines=numlines
    end
    _dtb_clean()
    end

    -- this will add a piece of text to the queu. the queu is processed automatically.
    function dtb_disp(txt,callback)
    local lines={}
    local currline=""
    local curword=""
    local curchar=""
    local upt=function()
    if #curword+#currline>29 then
    add(lines,currline)
    currline=""
    end
    currline=currline..curword
    curword=""
    end
    for i=1,#txt do
    curchar=sub(txt,i,i)
    curword=curword..curchar
    if curchar==" " then
    upt()
    elseif #curword>28 then
    curword=curword.."-"
    upt()
    end
    end
    upt()
    if currline~="" then
    add(lines,currline)
    end
    add(dtb_queu,lines)
    if callback==nil then
    callback=0
    end
    add(dtb_queuf,callback)
    end

    -- functions with an underscore prefix are ment for internal use, don't worry about them.
    function _dtb_clean()
    dtb_dislines={}
    for i=1,dtb_numlines do
    add(dtb_dislines,"")
    end
    dtb_curline=0
    dtb_ltime=0
    end

    function _dtb_nextline()
    dtb_curline+=1
    for i=1,#dtb_dislines-1 do
    dtb_dislines[i]=dtb_dislines[i+1]
    end
    dtb_dislines[#dtb_dislines]=""
    sfx(2)
    end

    function _dtb_nexttext()
    if dtb_queuf[1]~=0 then
    dtb_queuf[1]()
    end
    del(dtb_queuf,dtb_queuf[1])
    del(dtb_queu,dtb_queu[1])
    _dtb_clean()
    sfx(2)
    end

    -- make sure that this function is called each update.
    function dtb_update()
    if #dtb_queu>0 then
    if dtb_curline==0 then
    dtb_curline=1
    end
    local dislineslength=#dtb_dislines
    local curlines=dtb_queu[1]
    local curlinelength=#dtb_dislines[dislineslength]
    local complete=curlinelength>=#curlines[dtb_curline]
    if complete and dtb_curline>=#curlines then
    if btnp(4) then
    _dtb_nexttext()
    return
    end
    elseif dtb_curline>0 then
    dtb_ltime-=1
    if not complete then
    if dtb_ltime<=0 then
    local curchari=curlinelength+1
    local curchar=sub(curlines[dtb_curline],curchari,curchari)
    dtb_ltime=1
    if curchar~=" " then
    sfx(rnd({0,1,2}))
    end
    if curchar=="." then
    dtb_ltime=6
    end
    dtb_dislines[dislineslength]=dtb_dislines[dislineslength]..curchar
    end
    if btnp(4) then
    dtb_dislines[dislineslength]=curlines[dtb_curline]
    end
    else
    if btnp(4) then
    _dtb_nextline()
    end
    end
    end
    end
    end

    -- make sure to call this function everytime you draw.
    function dtb_draw()
    if #dtb_queu>0 then
    local dislineslength=#dtb_dislines
    local offset=0
    if dtb_curline<dislineslength then
    offset=dislineslength-dtb_curline
    end

    palt(0, false)
    palt(11, true)
    map(0,28,0,0,32,5)
    palt(0, true)
    palt(11, false)

    if dtb_curline>0 and #dtb_dislines[#dtb_dislines]==#dtb_queu[1][dtb_curline] then
    print("\x8e",114,28,7)
    end

    for i=1,dislineslength do
    print(
    dtb_dislines[i],
    6,
    i*8+23-(dislineslength+offset)*8,7)
    end
    end
    end

    -------------------------------
    --------- transition ----------
    -------------------------------
    transition={
    r=0,g=0,x=0,y=0,a=false
    }

    function transition:start(x,y)
    self.r=0
    self.g=8
    self.x=x
    self.y=y
    self.a=true
    end

    function transition:update()
    if not self.a then
    return
    end

    if self.r<128 and self.g>0 then
    self.r+=self.g
    elseif self.r>=127 and self.g>0 then
    self.g*=-1
    elseif self.r>0 and self.g<0 then
    self.r+=self.g
    elseif self.r<=1 and self.g<0 then
    self.a=false
    end
    end

    function transition:draw()
    if self.a then
    circfill(
    self.x,self.y,self.r,0)
    end
    end
    -->8
    -- built ins

    physics=new_physics()
    physics2=new_physics()

    function _init()
    dtb_init()

    physics:reset()
    physics2:reset()
    physics:setforce(40,0)
    physics2:setforce(0,0)

    gstate:add("game",gs_game)
    gstate:add("start",gs_start)
    gstate:add("over",gs_over)
    gstate:add("title",gs_title)
    gstate:switch("title")
    end

    function _update60()
    screenshake:update()
    dtb_update()
    physics:update()
    physics2:update()
    gstate:update()
    transition:update()

    end

    function _draw()
    gstate:draw()
    transition:draw()
    dtb_draw()
    end
    -->8
    -- main game

    -------------------------------
    --------- components ----------
    -------------------------------
    function control()
    return cmp("control",{})
    end

    function qtip(c,l,sx,sy)
    assert(c>1)

    local points={}
    for i=1,c do
    local p=particle(sx+l*i,sy)

    if (i==c) then p:shakeit() end
    if (i==1) then p:lock() end
    physics:addparticle(p)

    add(points,p)

    if i>1 then
    local p1=points[i-1]
    local p2=points[i]
    local s=spring(p1,p2,l,1)
    physics:addspring(s)
    end
    end

    return cmp("qtip",
    { points=points,
    tip=points[c],
    atch={},
    hide=false })
    end

    function earwax(sx,sy)
    local points={}
    local num=2
    for i=1,num do
    local rx=rnd()*5+sx
    local ry=rnd()*5+sy
    local p=particle(rx,ry)
    if (i==1) then p:lock() end
    p.ro=rnd()
    p.rs=rnd()
    p.c=rnd({4,9})
    physics2:addparticle(p)
    add(points,p)
    end

    for x=1,num do
    for y=1,num do
    if (x > y) then
    local s=spring(
    points[x],
    points[y],
    dist(points[x],points[y]),
    0.5)
    physics2:addspring(s)
    end
    end
    end

    return cmp("earwax",
    { points=points,
    num=num,
    attached=false })
    end

    function texture_circ(
    rmin,rmax,f,s,of,c)
    return cmp("texture_circ",
    { rmin=rmin,
    rmax=rmax,
    fill=f,
    speed=s,
    offset=of,
    c=c})
    end

    -------------------------------
    --------- systems ----------
    -------------------------------
    controlable=sys(
    { "control","vel","speed" },
    function(e)
    if not cleaning and #dtb_queu==0 then
    local s=e.speed
    if btn(⬆️) and q_tip.pos.y>20 then
    e.vel.y=-s.y
    end
    if btn(⬇️) and q_tip.pos.y<100 then
    e.vel.y=s.y
    end
    if btn(⬅️) and q_tip.pos.x>30 then
    e.vel.x=-s.x
    end
    if btn(➡️) then
    e.vel.x=s.y
    end
    end
    end)

    control_cleaning=sys(
    { "control","vel","speed" },
    function(e,w)
    if not cleaning and
    #dtb_queu==0 then
    if btnp(❎) or btnp(🅾️) then
    q_tip.qtip.hide=true
    cleaning=true
    add(w,mk_timer(60,function()
    q_tip.speed.x=ogs.x
    q_tip.speed.y=ogs.y
    start_minigame()
    end))
    end
    end
    end
    )

    qtip_u=sys(
    { "qtip","pos","speed","vel" },
    function(e)
    if e.qtip.hide and e.pos.x>0 then
    e.vel.x-=0.5
    e.vel.y=0
    elseif e.qtip.hide and e.pos.x<-70 then
    e.vel.x=0
    end

    e.qtip.points[1].x=e.pos.x
    e.qtip.points[1].y=e.pos.y
    end)

    camera_follow=sys(
    { "qtip","pos" },
    function(e)
    local cam_x=peek2(0x5f28)
    local cam_y=peek2(0x5f2a)
    local offset_x=e.pos.x-24

    if offset_x>0 then
    camera(offset_x+cam_x,cam_y)
    end
    end)

    qtip_d=sys(
    { "qtip","pos" },
    function(e)
    local pos=e.pos
    local points=e.qtip.points

    -- qtip
    for i,p in pairs(points) do
    if i>1 then
    local x_offset=0
    if i==2 then
    x_offset=6
    end

    pb=points[i-1]
    for j=0,7 do
    tline(pb.x+x_offset,pb.y+j-3,
    p.x,p.y+j-3,
    1/8,j/8)
    end
    end

    if i==#points then
    map(0,1,p.x-4,p.y-3,2,1)
    end
    end

    -- arm
    map(0,6,pos.x-126,pos.y-3,12,1)
    -- hand
    map(2,2,pos.x-30,pos.y-19,5,4)
    end)

    earwax_u=sys(
    { "earwax","pos" },
    function(e)
    local tip=q_tip.qtip.tip

    if e.earwax.attached then
    e.pos.x=tip.x+4
    e.pos.y=tip.y
    elseif time()>1 then

    local q_touch=overlap(
    e,e.pos.x,e.pos.y,
    {pos={x=tip.x,y=tip.y},
    col={w=10,h=10}}
    )
    if q_touch then
    sfx(3,3)
    e.earwax.attached=true
    add(q_tip.qtip.atch,e)
    e.vel.x=0
    e.vel.y=0
    q_tip.speed.x=max(
    0.1,q_tip.speed.x-0.1)
    q_tip.speed.y=max(
    0.1,q_tip.speed.y-0.1)
    end
    end

    e.earwax.points[1].x=e.pos.x
    e.earwax.points[1].y=e.pos.y
    end)

    earwax_d=sys(
    { "earwax","col","pos" },
    function(e)
    local t=time()
    local points=e.earwax.points

    for i,p in pairs(points) do
    r=(4+p.ro*1.5)+sin(t*p.rs)/2
    circfill(p.x,p.y,r,p.c)
    end

    -- rect(e.pos.x,e.pos.y,
    -- e.pos.x+e.col.w,
    -- e.pos.y+e.col.h,8)
    end)

    texture_circ_u=sys(
    { "texture_circ" },
    function(e)
    local tc=e.texture_circ
    e.texture_circ.r=tc.rmin
    +(sin((tc.offset+time())*tc.speed)
    *tc.rmax)
    end)

    texture_circ_d=sys(
    { "pos","texture_circ" },
    function(e)
    local p=e.pos
    local tc=e.texture_circ

    fillp(e.texture_circ.fill)
    circfill(p.x,p.y,tc.r,tc.c)
    fillp(█)
    end)

    function draw_ui()
    local cam_x=peek2(0x5f28)

    -- box
    palt(0, false)
    palt(11, true)
    map(0,24,cam_x,106,32,3)
    palt(0, true)
    palt(11, false)

    circfill(128+cam_x,0,21,9)
    circfill(128+cam_x,0,20,0)
    print(
    "\^p"..wax_count.."\^-p",
    114+cam_x,2,9)

    -- attached wax count
    if cleaning and minigame then
    minigame:draw(cam_x)
    else
    print(
    "\^t ● weight: \^-t",
    4+cam_x,113,9)

    local ach=#q_tip.qtip.atch
    local c=11
    if (ach>1) c=10
    if (ach>2) c=9
    if (ach>3) c=8
    circfill(55+cam_x,117,ach,c)

    -- time
    local t=flr(score/60)
    print(
    "\^t ⧗ time: \f7"..t.."\-f \^-t",
    65+cam_x,113,9)
    end
    end
    -------------------------------
    --------- factories ----------
    -------------------------------
    ogs={x=1.2,y=0.9}
    function mk_qtip(x,y,l)
    local q=ent()
    q+=pos(x,y)
    q+=qtip(2,l,x+20,y,false)
    q+=vel(0,0)
    q+=speed(ogs.x,ogs.y)
    q+=fric(0.95)
    q+=control()
    q+=col(8,8,{0},0,0)
    return q
    end

    function mk_earwax(xs,ys,xw,yw)
    local e=ent()
    local x=xs+rnd(xw)
    local y=ys+rnd(yw)
    e+=pos(x,y)
    e+=col(4,4,{0},0,0,true)
    e+=vel((rnd()-0.5)/5,(rnd()-0.5)/1)
    e+=earwax(x,y)
    return e
    end

    function mk_bg_circ()
    local e=ent()
    local x=rnd(128)
    local y=rnd(128)
    e+=pos(x,y)

    local f=rnd({…,∧,░,ˇ})
    local s=0.02
    local of=rnd(100)
    local c=rnd({8,8,8,14})
    e+=texture_circ(10,20,f,s,of,c)

    return e
    end

    -- gamestate
    gs_game={world={}}
    score=0

    function gs_game:init()
    music(6)
    score=0
    self.world={}
    cleaning=false
    wax_count=30
    ogs={x=1.2,y=0.9}
    map_offset={x=0,y=-7}
    init_minigames()

    q_tip=mk_qtip(-20,45,48)
    add(self.world,q_tip)

    for i=1,wax_count do
    add(self.world,mk_earwax(
    64,32,32*8,64))
    end

    for i=1,8 do
    add(self.world,mk_bg_circ())
    end
    end

    function gs_game:update()
    score+=1
    timer_u(self.world,self.world)
    move(self.world)
    controlable(self.world)
    control_cleaning(self.world,self.world)
    friction(self.world)
    anim_u(self.world)

    qtip_u(self.world)
    earwax_u(self.world)
    texture_circ_u(self.world)

    if cleaning and minigame then
    minigame:update(self.world)
    end

    if wax_count==0 then
    if not transition.a then
    transition:start(64,64)
    add(self.world,
    mk_timer(20,function()
    gstate:switch("over")
    end))
    end
    end
    end

    function gs_game:draw()
    cls(1)
    texture_circ_d(self.world)
    anim_d(self.world)
    image_d(self.world)
    camera_follow(self.world)
    qtip_d(self.world)
    earwax_d(self.world)

    map(0,7,0,0,32*4,32)

    draw_ui()
    end
    -->8
    -- minigame utils
    colors={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
    buttons={⬅️,➡️,⬆️,⬇️,❎,🅾️}
    buttons_chr={"⬅️","➡️","⬆️","⬇️","","🅾️"}
    minigames={"mashit","pmatch","timeit"}
    minigame=nil
    minigame_done=true

    function init_minigames()
    minigame=nil
    minigame_done=true
    end

    function start_minigame()
    local choice=rnd(minigames)
    minigame_done=false

    if choice=="mashit" then
    minigame=mashit
    elseif choice=="pmatch" then
    minigame=pmatch
    elseif choice=="timeit" then
    minigame=timeit
    else
    minigame=mashit
    end

    minigame:init()
    end

    function complete_minigame(w)
    if minigame_done then
    return
    end
    minigame_done=true

    sfx(5)
    for e in all(q_tip.qtip.atch) do
    del(w,e)
    wax_count-=1
    end
    q_tip.qtip.atch={}
    q_tip.qtip.hide=false
    q_tip.vel.x=5
    add(w,mk_timer(40,function()
    cleaning=false
    minigame=nil
    end))
    end
    -->8
    -- minigames
    mashit={}
    function mashit:complete()
    return self.count>=self.need
    end
    function mashit:init()
    self.c=rnd(colors)
    self.need=10
    self.count=0
    self.choice=rnd({1,2,3,4,5,6})
    self.button=buttons[self.choice]
    self.button_chr=buttons_chr[self.choice]
    end
    function mashit:update(w)
    if self:complete() then
    complete_minigame(w)
    elseif btnp(self.button) then
    self.count+=1
    self.c=rnd(colors)
    screenshake:start(4)
    sfx(3,3)
    end
    end
    function mashit:draw(cam_x)
    local togo=self.need-self.count
    print(
    "\^t mash "..self.button_chr.."!! "..togo.."\^-t",
    4+cam_x,113,self.c)
    end

    timeit={v=0,seed=0,go=true}
    function timeit:init()
    self.go=true
    self.seed=rnd(60)
    self.v=0
    self.pick=nil
    self.d=20+rnd(20)
    end
    function timeit:update(w)
    if self.go then
    self.v=30+sin((self.seed+time())/3)*30
    end

    if btnp(❎) then
    if self.v>self.d-5 and
    self.v<self.d+5 then
    self.go=false
    complete_minigame(w)
    screenshake:start(4)
    sfx(4,3)
    end
    end
    end
    function timeit:draw(cam_x)
    print(
    "\^t hit ❎ in\^-t",
    4+cam_x,113,9)
    rectfill(
    47+cam_x,114,
    47+8+cam_x,114+8,11)

    rect(60,113,120,122,7)
    rectfill(
    60+self.d-5,113,
    60+self.d+5,122,11)
    line(
    60+self.v,112,
    60+self.v,123,7)
    end

    pmatch={}
    function pmatch:complete()
    return self.i>#self.pattern
    end
    function pmatch:init()
    self.pattern={}
    self.pattern_chr={}
    self.i=1

    for i=1,5 do
    local j=rnd({1,2,3,4,5,6})
    add(self.pattern,buttons[j])
    add(self.pattern_chr,buttons_chr[j])
    end
    end
    function pmatch:update(w)
    if self:complete() then
    complete_minigame(w)
    elseif btnp(self.pattern[self.i]) then
    self.i+=1
    screenshake:start(4)
    sfx(4,3)
    end
    end
    function pmatch:draw(cam_x)
    print(
    "\^t match: \^-t",
    4+cam_x,113,9)

    for i,p in pairs(self.pattern_chr) do
    local c=9
    if self.i>i then
    c=11
    end

    print(
    "\^t\^w"..p.."\^-t\^w",
    20+cam_x+(i*16),113,c)
    end
    end



    -->8
    -- starting screen

    gs_start={world={}}

    head_u=sys({"head"},
    function(e,w)
    local t=q_tip.qtip.tip
    local d=dist(e.head,t)
    if d<16 then
    if not transition.a and time()>1then
    transition:start(e.head.x,e.head.y)
    add(w,mk_timer(40,function()
    gstate:switch("game")
    end))
    end
    end
    end)

    function mk_head(x,y,sx)
    local h=ent()
    h+=pos(x,y)
    h+=cmp("head",{x=74,y=90})
    h+=image(sx,24,8,8,"map")
    return h
    end

    function gs_start:init()
    music(2)
    self.world={}
    map_offset={x=20,y=32}
    add(self.world,mk_head(64,64,17))
    q_tip=mk_qtip(0,90,20)
    add(self.world,q_tip)
    dtb_disp("well hello there. you're probably wondering why im so sad.")
    dtb_disp("it's these darn ears. they're soooo itchy!! no matter how hard and deep i scratch them, i can never get the itch..")
    dtb_disp("i dig deeper and deeper, but nothing works.. it's like the itch is on my brain!. i fear this will be the end of me :(")
    dtb_disp("wait a minute.. you could help me!")
    dtb_disp("would you help me?...")
    dtb_disp("you would?!..")
    dtb_disp("thank you!..")
    dtb_disp("when you're ready use the d-pad to move your q-tip into my ear.. no need to be shy.")
    dtb_disp("be sure to collect all the wax.")
    dtb_disp("press ❎/🅾️ to clear the junk and reload your q-tip. you may have to complete some sort of minigame though... oh also, be sure to watch your q-tip's weight, as gunk will slow you down!")
    dtb_disp("i'll score you based on how fast you get all the junk in my ears.")
    dtb_disp("good luck!")
    end

    function gs_start:update()
    timer_u(self.world,self.world)
    move(self.world)
    controlable(self.world,self.world)
    friction(self.world)
    qtip_u(self.world)
    timer_u(self.world,self.world)
    head_u(self.world,self.world)

    if q_tip.pos.x>100 then
    q_tip.vel.x=-0.1
    end
    end

    function gs_start:draw()
    cls(1)
    image_d(self.world)
    qtip_d(self.world)
    print("insert q-tip into ear",22,10,9)

    end
    -->8
    -- game over
    gs_over={world={}}

    function gs_over:init()
    music(15)
    self.world={}
    local t=flr(score/60)
    dtb_disp("aaahhh, much better..")
    dtb_disp("your final time was \^i"..t.."\^-i")
    dtb_disp("i honestly have no idea if thats good or bad!")
    dtb_disp("press 🅾️ to get the other ear")

    add(self.world,mk_head(32,64,26))
    end

    function gs_over:update()
    timer_u(self.world,self.world)

    if #dtb_queu==0 then
    if btnp(🅾️) then
    if not transition.a then
    transition:start(64,64)
    add(self.world,
    mk_timer(20,function()
    gstate:switch("game")
    end))
    end
    end
    end
    end

    function gs_over:draw()
    cls(1)
    image_d(self.world)
    end

    -->8
    -- title
    gs_title={world={}}

    function gs_title:init()
    music(0)
    for i=1,5 do
    add(self.world,mk_earwax(
    4,25,30*4,10))
    end

    for i=1,5 do
    add(self.world,mk_earwax(
    4,85,30*4,10))
    end
    end

    function gs_title:update()
    timer_u(self.world,self.world)

    if btnp(🅾️) or btnp(❎) then
    if not transition.a then
    transition:start(64,64)
    add(self.world,
    mk_timer(20,function()
    gstate:switch("start")
    end))
    end
    end
    end

    function gs_title:draw()
    cls(1)
    map(53,24,0,0,32,32)
    map(36,26,-5,42,32,32)

    earwax_d(self.world)
    print("press ❎/🅾️",75,72,9)
    end


    __gfx__
    00000000222222222222222222222222222222221121211211111111121211210000000000000000000000000000004444444444440000000000000000000000
    000000002eeeee2ee2eeee2e2eeeee2eee2eeee22111112111111111211221110000000000000000000044444444444444444444444440000000000000000000
    007007002eeee22ee2eeee2e2eeee22eee22eee21121211111111111122212120000000000000000004444444444444444444444444440000000000000000000
    00077000222ee2eeeeeeeeee222ee2eeeee2eee21212121211111111212121110000000000000000044444444444444444444444444444400000000000000000
    000770002eeee22eeee2eeee2eeee22eeeeeeee22221222211111111222112120000000000000000444444444444444444444444444444440000000000000000
    007007002eeeeeeee222e2ee2ee2eeeeeeee22e22122212111111111121221110000000000000000444444444444444444444444444444444000000000000000
    000000002ee2eeeee2eeee2e222eee2ee2eee2222228222211111111222211210000000000000004444444444444444444444444444444444000000000000000
    0000000022222222222222222eeeeee22eeeeee28282282811111111221221120000000000000004444444444444444444444444444444444000000000000000
    00000000222eeee22eeeeee22eeeeee22eeeeee2282888282828882800099bbb0000000000000004444444444444444444444444444444444440000000000000
    000000002eeeeee22ee2ee222eeeee2ee22eeee2888228828882288200099bbb0000000000000044444444444444444444444444444444444440000000000000
    000000002eeee2222ee2eee22eeee22eee2ee222282888882828888200099bbb000000000000004444444444ffffffffffffffffffff44444444000000000000
    999999992eee2ee2222eeee2222ee2eeeeee2ee2888882888888828800099bbb0000000000004444444ffffff77fffffffffffffffff44444444000000000000
    999999992eeeeee22eeeeee22eeee22eeeeeeee2888888888828282800099bbb000000000000444444fffff7777fffff77ffffffffffff444444000000000000
    bbbbbbbb2ee2eee22eeeeee22eeeeeeeeee2eee2888888888888288200099bbb000000000000444444fff77fffff7777777ffffffffffff44444000000000000
    bbbbbbbb2e22eee22eee22222ee2eeeeee22eee2828882882888882800099bbb00000000000044444fffffffff777777777ffffffffffff44444000000000000
    bbbbbbbb222222222eeeeee22222222222222222202220222288288200099bbb04444444000044444ffffffff7777777fffffffffffffff44444000444444400
    0000000022222222bbbbbbbbbbbbbbbbbbbbbbbb20222022288882828222112104ffffff440044444ffffff77777777777777ffffffffff44444004fff77ff40
    00000000ee2eeee2bbb99bbbbbbbbbbbbbb99bbb8288828802888888221221114ffff7ffff4444444fffffff7777ff7ff777fffffffffff4444404ff7777ff40
    00000000ee22eee2bbb99bbbbbbbbbbbbbb99bbb8888888828888282822212124ff7777fffff44444ffffffffffffffffffffffffffffff444444fffff777f40
    00000000eee2eee2b9999999999999999999999b8888888828888828282121114fff77777fff44444fffffff44fffffffffffffffffffff444444ffffff77f40
    00000000eeeeeee2b9999999999999999999999b8888828828888828222212124ffffff777ff44444ffffff44fffffffffffff4fffffff4444444ffffff77f40
    00000000eeee22e2bbb999000000000000999bbb2828888802882888821221114fffffff77fff44444ffff444fffffffffffff444fffff444444fffffff7ff40
    00000000eeeee2e2bbb990000000000000099bbb8882288228888882222211214fffffff777ff44444fff444ffffffffffffff444444ff444444ffffffffff40
    0000000022222222bbb990000000000000099bbb2828882828888828821221124ffffffff77ff44444ff444fffffffffffffffff444444444444ffff44ffff40
    0000000022222222bbb99000bbb9900000099bbb8282282822888282221221214fffffffff7ff44444f444fffffffffffffffffffff444444444ffff444fff40
    000000002eee2ee2bbb99000bbb9900000099bbb2222822228888888222212124fff4ffffffff44444444ff444444ffffff44444444ff44f4444fffff44fff40
    000000002eee2ee2bbb99900bbb9900000999bbb1212221288828282121222114fff4ffffffff444fffff4444444444ffff444444444ffff4444fff7f44fff40
    0000000022eeeee2b9999999bbb990009999999b2222122288888828222112224fff4ff7fffff444fffff4444444444fffff44444444fffff444ff77f44ff400
    000000002eeeeee2b9999999bbb990009999999b21212121282288282121212104ff4477fffff444fffffff44444f44fffffffff444fffffff44ff77f44ff400
    000000002ee222e2bbb99bbbbbb99000bbb99bbb12111211888828881112121104ff44f7fffff444fffffffffffff44ffffffffffffffffffff4ffffff4ff400
    000000002ee2e222bbb99bbbbbb99000bbb99bbb11121111828288821211111204ff444774fff44fffff44fffffff44ffff44ffffff4fffffff4ffffff4ff400
    000000002eeeeee2bbbbbbbbbbb99000bbbbbbbb12111212282882282112121104ff444ff4fff4fffffff44444444447ffff44444444ffffff444f44ff4ff400
    000000000000000000000000000000000000000000000000000000000000000004ff444f44fff4fffffffffffffff4477fff44ffffffffffff444f444ffff400
    000000000000000000000000000000000000000000000000000000000000000004ff4ff444fff4fffffffffffffff4f77fff44ffffffffffff444f444ffff400
    777777770000000000000ff0000000000000000000000000000000000000000004fffff44ffff4ffffffffffffff44f77ffff4ffffffffffff444ff444fff400
    77777777000000ff0000fff00000000000000000000000000000000000000000004ffff44ffff4ffffffffffff444f777ffff4444fffffffff444fff44fff400
    6666766600000fff0000fff00000000000000000000000000000000000000000004fff444ffff4fffffffffff4444f777ffff44444ffffffff444ffff4fff400
    0000000000000fff0000ff000000000000000000000000000000000000000000004ffffffffff4ffffffffff444f777777fffff444ffffffff444ffffffff400
    0000000000000fff000fff000000000000000000000000000000000000000000004ffffffffff4ffffffffff44ffffffffffffff44ffffffff444ffffffff400
    0000000000000fff000fff000000000000000000000000000000000000000000004ffffffffff4ffffffffff44ffffffffffffff44ffffffff444ffffffff400
    00000000000000ff000ff0000000000000000000444ffffffffffff444ffffff0044ffffffff44ffffffffff444ffffffffffff444fffffff4444ffffffff400
    0000000000ff00fff0fff000ffff000000000000f444444ffffff444ffffffff0044ffffffff44fffffffffff444444ffffff444fffffffff44444fffffff400
    0000000000fff00ff0ff4fffffffff0000000000ffffffffffffffffffffffff0044fffffff444fffffffffffffffffffffffffffffffffff444044ffffff400
    0000000000fffffff4ffffffffffffff00000000ffffffffffffffffffffffff0004fffff444004ffffffffffffffffffffffffffffffffff400004fffff4400
    00000000000ffffff4fffffff000ffff00000000ffffffffffffffffffffffff000444444440004fffffffffff44444444444444fffffffff400004444440000
    000000000000044fffffff00000000ff00000000ff44fffffffffff44fffffff000044444000004ffffffffff44444ffffff444444fffffff400000000000000
    000000000000000fffffff00000000ff00000000ff44444fffff44444fffffff0000000000000004ffffffff4fffffffffffffffff4ffffff400000000000000
    0000000000000000ffffff00000000fff0000000ff444444444444444fffffff0000000000000004ffffffffffffff444444ffffff4ffffff400000000000000
    00000000000000004fffff00000777fff6000000fff4444444444444ffffffff0000000000000004ffffffff4ffffff444ffffffffffffff4400000000000000
    00000000ffffffffffffff000077777777700000ffffff4444444ffffffffff400000000000000004ffffffffffffff444fffffffffffff44000000000000000
    00000000ffffffffffffff000777777777770000fffffffffffffffffffffff4000000000000000004ffffffffffffff44fffffffffffff40000000000000000
    00000000ffffffffffffff000777777777760000fffffff44444fffffffff440000000000000000000444ffffffffffffffffffffffff4400000000000000000
    00000000ffffffffffffff0007777777777600004fffffffffffffffff4442200000000000000000222244444fffffffffffffffff4442200000000000000000
    0000000044444444ffffff000077777777760000444444444444444422222222000000000000022222ee22244444444444444444222222222200000000000000
    000000000000000044ffff000077777776600000ffffffffffffffff2222222200000000000222ee22ee2222ffffffffffffffff222222222222200000000000
    00000000000000000000ff0000066666600000002ffffffffffffff22222ee22000000000222eeee222eee222ffffffffffffff22222ee2222eee20000000000
    00000067777770000000ff000000fffff6000000000000670000000000000000000000022eeeeeeee22eeee222fffffffffffff222eeee222eeeee2000000000
    00007777777777000000fff00000ffff777000000000777700000000000000000000002eeeeeeeeeee2eeee22222fffffffff2222eeeee22eeeeeee200000000
    000077777777777000004ff0000fff0077777777777777770000000000000000000002eeeeeeeeeeee2eeeeee2222ffffff22222eeeee22eeeeeeee200000000
    000067777777777000000fff00ffff007776777777776777000000000000000000002eeeeeeeeeeeeeeeeeeeee2222222222222eeeeeeeeeeeeeeeee20000000
    0000677777777770000004fffffff0007776666666666777000000000000000000002eeeeeeeeeeeeeeeeeeeeee222222222eeeeeeeeeeeeeeeeeeee20000000
    000067777777770000000044ffff00007776000000006777000000000000000000002eeeeeeeeeee222eeeeeeeeeeeeeeeeeeeeeeeeeeeee2eeeeeeee2000000
    00000667777777000000000000000000766000000000066700000000000000000002eeeeeeeeeeee222eeeeeeeeeeeeeeeeeeeeeeeeeee222eeeeeeeee200000
    00000006666660000000000000000000600000000000000600000000000000000002eeeeeeeeeeee2222eeeeeeeeeeeeeeeeeeeeeeeee2222eeeeeeeee200000
    23010101010101010101010101010143000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    50505050505050505050505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    51515151515151515151515151515151510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000c1c2c3c4c5c6c7c8c9cacbcccdcecfc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000d1d2d3d4d5d6d7d8d9dadbdcdddedfd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000e1e2e3e4e5e6e7e8e9eaebecedeeefe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000f1f2f3f4f5f6f7f8f9fafbfcfdfefff0000000000000000000000000000000000000000000000000000000000000000000000525252525252525252525252
    52525252520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000535353535353535353535353
    53535353530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000ff0000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000fff0000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000fff0000ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000fff000fff00000000000000000000000000000000000000000000777000000000000000000000000000000000000000000000000000000000000000000000
    000fff000fff00000000000000000000000000000000000000000007777000000000000000070000000000000000000000000000000000000000000000000000
    0000ff000ff000000000000000000000000000000000000000000007777000000000000000000700770000000000000000000000000000000000000000000000
    ff00fff0fff000ffff00000000000000000000000077000000000007770000000000000000077070770000000000000000000000000000000000000000000000
    fff00ff0ff4fffffffff000000000077770000077777007700000000000000000000000077777077770007777770000077000000000000000000000000000000
    fffffff4ffffffffffffff0000000777777000777777007770000000770000077770000777777067777700077777000077700000000000000000000000000000
    0ffffff4fffffff000ffff0000000777777007777077007777077000770007777777007777077000776777000777700077770770000000000067777770000000
    00044fffffff00000000ff0000007770077077770077007777777000770007777777077770077000770677700007770077777770000000007777777777000000
    00000fffffff00000000ff0000007770077077700077007707777000770077700077077700077000770067700000770077077770000077777777777777700000
    000000ffffff00000000fff000007700077077000077007700077007770077000077077000077007770770000000770077000770007777776777777777700000
    0000004fffff00000777fff600007700777077000077007700077007770077000077077000077007770770000000770077000770077766666777777777700000
    ffffffffffff00007777777770007707777077000077007700770007770077000077077000077007700770000000770077007700077600006777777777000000
    ffffffffffff00077777777777007777770077000777007700770007770077000777077000777007707770000000770077007700077000000667777777000000
    ffffffffffff00077777777777777767600076007777077700770007700077007777077007777077707770000007770777007700776000000006666660000000
    ffffffffffff00077777777777777776000077777770077000770007700077777777077777770077777777000007700770007700776000000000000000000000
    444444ffffff00007777777776667777000777776770777000677077707777666667077777670777766067700077777770007777770000000000000000000000
    00000044ffff00007777777660000677777776660777760000067777777766600077777660677766660067777777677600000777760000000000000000000000
    0000000000ff00000666666000000066666600000666600000066666666600007776666000066600000006666666666000000666600000000000000000000000
    0000000000ff000000fffff000000000000000000000000000000000000000077777000000000000000000000000000000000000000000000000000000000000
    0000000000fff00000ffff0099999999999999999999999999999999999900777067099999999999999999999999999999999999000000000000000000000000
    00000000004ff0000fff000999999999999999999999999999999999999007770077099999999999999999999999999999999990000000000000000000000000
    00000000000fff00ffff000444444444444444444444444444444444440077700077044444444444444444444444444444444400000000000000000000000000
    000000000004fffffff0000000000000000000000000000000000000000077000077000000000000000000000000000000000000000000000000000000000000
    00000000000044ffff00000000000000000000000000000000000000000077700776000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000067777760000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000006666600000000000000000000000000000000000000000000000000000000000000
    __label__
    11212112112121121121211211212112112121121121211211212112112121121121211211212112112121121121211211212112112121121121211211212112
    21111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121
    11212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111
    12121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212
    22212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222
    21222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121
    22282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222
    82822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828
    28288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828
    88822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882
    28288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888
    88888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288
    88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
    88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
    82888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288
    21222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111144444111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111444444411111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111114444444441111111111111111111111111111111111111
    11111111111111111111111111111111111999111111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
    11111111111111111111111111111111199999991111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
    11111111111111111111111111111111199999991111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
    11111111111111111111111111111111999999999111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
    11111111111111111111111111111111999999999411111111111111999991111111111111111111144444444444111111111111111111111111111111111111
    11111111111111111111111111114444499999999411111111111119999999911111111111111111114444444441111111111111111111111111111144411111
    11111111111111111111111111144444449999994411111111111199999999911111111111111111111444444411111111111111111111111111114444444111
    11111111111111111111111111444444444999994111111111111999999999991111111111111111111144444111111111111111111111111111114444444111
    11111111111111111111111114444444444499441111111111111999999999991111111111111111111111111111111111111111111111111111144444444491
    11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111144444444491
    11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111144444444499
    11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111114444444999
    11111111111111111111111114444444444411111111111111111199999999911111111111111111111111111111111111111111111111111111114444444999
    11111111111111111111111111444444444111111111111111111119999999111111111111111111111111111111111111111111111111111111111144499991
    11111111111111111111111111444444441111111111111111111111999991111111111111111111111111111111111111111111111111111111111199999991
    11111111111111111111111111114444411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111999111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111ff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    1111111ff1111fff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    111111fff1111fff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    111111fff1111ff11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    111111fff111fff11111111111111111111111111111111111111111111777111111111111111111111111111111111111111111111111111111111111111111
    111111fff111fff11111111111111111111111111111111111111111117777111111111111111171111111111111111111111111111111111111111111111111
    1111111ff111ff111111111111111111111111111111111111111111117777111111111111111111711771111111111111111111111111111111111111111111
    111ff11fff1fff111ffff11111111111111111111111177111111111117771111111111111111177171771111111111111111111111111111111111111111111
    111fff11ff1ff4fffffffff111111111177771111177777117711111111111111111111111177777177771117777771111177111111111111111111111111111
    111fffffff4ffffffffffffff1111111777777111777777117771111111771111177771111777777167777711177777111177711111111111111111111111111
    1111ffffff4fffffff111ffff1111111777777117777177117777177111771117777777117777177111776777111777711177771771111111111167777771111
    11111144fffffff11111111ff1111117771177177771177117777777111771117777777177771177111771677711117771177777771111111117777777777111
    11111111fffffff11111111ff1111117771177177711177117717777111771177711177177711177111771167711111771177177771111177777777777777711
    111111111ffffff11111111fff111117711177177111177117711177117771177111177177111177117771771111111771177111771117777776777777777711
    1111111114fffff11111777fff611117711777177111177117711177117771177111177177111177117771771111111771177111771177766666777777777711
    fffffffffffffff11117777777771117717777177111177117711771117771177111177177111177117711771111111771177117711177611116777777777111
    fffffffffffffff11177777777777117777771177111777117711771117771177111777177111777117717771111111771177117711177111111667777777111
    fffffffffffffff11177777777777777767611176117777177711771117711177117777177117777177717771111117771777117711776111111116666661111
    fffffffffffffff11177777777777777776111177777771177111771117711177777777177777771177777777111117711771117711776111111111111111111
    444444444ffffff11117777777776667777111777776771777111677177717777666667177777671777766167711177777771117777771111111111111111111
    11111111144ffff11117777777661111677777776661777761111167777777766611177777661677766661167777777677611111777761111111111111111111
    1111111111111ff11111666666111111166666611111666611111166666666611117776666111166611111116666666666111111666611111111111111111111
    1111111111111ff111111fffff111111111111111111111111111111111111111177777111111111111111111111111111111111111111111111111111111111
    1111111111111fff11111ffff1199999999999999999999999999999999999911777167199999999999999999999999999999999999111111111111111111111
    11111111111114ff1111fff111999999999999999999999999999999999999117771177199999999999999999999999999999999991111111111111111111111
    11111111111111fff11ffff111444444444444444444444444444444444441177711177144444444444444444444444444444444411111111111111111111111
    111111111111114fffffff1111111111111111111111111111111111111111177111177111111111111111111111111111111111111111111111111111111111
    11111111111111144ffff11111111111111111111111111111111111111111177711776111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111167777761111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111116666611111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111119999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111199999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111119999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111119999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111119999999999911111111111111111111111111111111111111111111111111144411111111111111111111111111111111111111
    11111111111111111111111119999999999911111111111111111111111111111111111111111111111114444444111111111111111111111111111111111111
    11111111111111111111111119999999999911111111111111111111111111111111111111111111111114444444999111111111111111111111111111111111
    11111111111111111111111111999999999111111111111111111111111111111111111111111111111144444444499991111111111111111111111111111111
    11111111111111111111111114499999991111111111111111111999111111111111111114444411111144444444499991111111111111111111111111111111
    11111111111111111111111444449999941111111111111111199999991111111111111144444441111144444444499999111111111111111111111111111111
    11111111111111111111111444444444441111111111111111199999991111111111111444444444111114444444999999111111111111111111111111111111
    11111111111111111111114444444444411111111111111111999999999111111111114444444444491114444444999999111111111111111111111111111111
    11111111111111111111444444444444411111111111111111999999999111111111114444444444491111144499999991111111111111111111111111111111
    11111111111111111111444444444441111111111111111111999999999111111111114444444444499111111199999991111111111111111111111111111111
    11111111111111111114444444444411111111111111111111199999991111111111114444444444499111111111999111111111111111111111111111111111
    11111111111111111114444444444411111111111111111111199999991111111111114444444444499111111111111111111111111111111111111111111111
    11111111111111111114444444441111111111111111111111111999111111111111111444444444991111111111111111111111111111111111111111111111
    11111111111111111111444444411111111111111111111111111111111111111111111144444449991111111111111111111111111111111111111111111111
    11111111111111111111444444411111111111111111111111111111111111111111111114444499111111111111111111111111111111111111111111111111
    11111111111111111111114441111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    21222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122
    82888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288
    88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
    88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
    88888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288
    28288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888
    88822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882
    28288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828
    82822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828
    22228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222
    12122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212
    22221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222
    21212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121
    12111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211
    11121111111211111112111111121111111211111112111111121111111211111112111111121111111211111112111111121111111211111112111111121111
    12111212121112121211121212111212121112121211121212111212121112121211121212111212121112121211121212111212121112121211121212111212

    __gff__
    0001010101010101000000000000000000010101010101000000000000000000000100000001010100000000000000000001000000010101000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    __map__
    4040404040404040404040404040400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    7071000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000004142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000005152530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    6161616162636400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000072730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    6161616161616161616161616161616161000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    1515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515162706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010221262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000003101020204262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000001201210314262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000011403041304262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000003020412120314262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000012311212121321262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000013141212130221262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000001212030204262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000114110114262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    2525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525362706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    3535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353706060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    222323232323232323232323232323240008090a0b0c0d0e0f0008090a0b0c0d0e0f0f000000000000000000000000000000000005050505050505050505050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    332020202020202020202020202020170018191a1b1c1d1e1f0018191a1b1c1d1e1f00000000000000000000000000000000000015151515151515151515151515151515150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    321010101010101010101010101010340028292a2b2c2d2e2f0028292a2b2c2d2e2f000000c0c1c2c3c4c5c6c7c8c9cacbcccdcecf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000038393a3b3c3d3e3f0038393a3b3c3d3e3f000000d0d1d2d3d4d5d6d7d8d9dadbdcdddedf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    222323232323232323232323232323240048494a4b4c4d4e4f0048494a4b4c4d4e4f000061e0e1e2e3e4e5e6e7e8e9eaebecedeeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    332020202020202020202020202020170058595a5b5c5d5e5f0058595a5556575e5f000000f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    332020202020202020202020202020170068696a6b6c6d6e6f0068696a6566676e6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    332020202020202020202020202020170078797a7b7c7d7e7f0078797a7b7c7d7e7f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    __sfx__
    000100002a5402e54038540000002300033000130000d0000800005000200001a00016000100000f0000e0000e0000d0000c0000b000000000000000000000000000000000000000000000000000000000000000
    00010000225402a540365400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000100001854021540305400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    120100003d6203c630336401c64019640196401d640246302b6302e6202f6202e6202b62026610206101b610166100c610016502e600346000000000000000000000000000000000000000000000000000000000
    290200002c0502c0502c0502c05038050380503805038050380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00090000305502b540265302b52030540325503456034575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0120000000055345211d62500055070551d625345000705500055000001d6250705500000070551d6250705500055345211d62500055070551d625000000705500055000001d62507055000001d6251d62507055
    012000001b1511c1511c1521c1550000000000000001f154221512215222156211502115021155180001e1511f1511c1511815024151241522415122141221502215022140221350000000000000000000000000
    5510002030755307153575535715367553671537755377153a7553a7153775537715347553471530755307152e7552e715307552e715347553471530755307152e7552e715307552e71534755347153775537715
    a11000200000030755307153575535715367553671537755377153a7553a7153775537715347553471530755307152e7552e715307552e715347553471530755307152e7552e715307552e715347553471537755
    0120000005055345211d625050550c0551d625345000c05505055000001d6250c055000000c0551d6250c05505055345211d625050550c0551d625345000c05505055000001d6250c055000000c0550b0550a055
    012000001d1511d1512115024150271512715227155000002915129151291512d1512715127152261512415123150241501d15121150241512715127152271502714027132271252210000000000000000000000
    911c00000235500000000000000000000000000000000000000000235500000000000235500000023550000002355023000000000000000000000002300023000000002355000000000002355000000235500000
    911c00002135500000000000000000000000000000000000000002135500000000002135500000213550000022355023000000000000000000000002300023000000022355000000000024355000002235500000
    911c00002a355000000000000000000000000000000000000000026355000000000026355000002a355000002b35502300000000000000000000000230002300000002e35500000000002c355000002935500000
    911c00000035500000000000000000000000000000000000000000035500000000000035500000003550000000355023000000000000000000000002300023000000000355000000000000355000000135500000
    911c00001f35500000000000000000000000000000000000000001f35500000000001f355000001f355000001f355023000000000000000000000002300023000000022355000000000021355000002035500000
    911c0000283550000000000000000000000000000000000000000243550000000000283550000024355000002935502300000000000000000000000230002300000002b355000000000029355000002635500000
    920d002010610156301a6401e640226302562027620276402665025640216201e6201a64016620136101161010610106101063011640166501b6402264026620296102a6102861027630246401f6401a63012620
    011800000c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b455
    01180000003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655
    01180000000002b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555
    01180000053501f655053501f655053501f655053501f655023501f655023501f655023501f655023501f655073501f655073501f655073501f655073501f655073501f655053501f655033501f655023501f655
    011800000c023204550c023204550c023204550c023204550c0231d4550c0231d4550c0231d4550c0231d4550c0231b4550c0231b4550c0231b4550c0231b4550c0231a4550c0231a4550c0231a4550c0231a455
    491800003015132151301503015030152301523015500000291502b1512c1512f1523015229152261512715026152241522315024151201511e1501f1521f1521f1321f12500000000000000000000000002f151
    491800003515035152351523315132151301502f1522f1562f1513015232152331503215130151301522f15230140301323013230135000000000000000000003015130156321523215233156331563515237152
    491800003715237152371523714237142371423713237132371323712237122371223711237112371123711500000000000000000000000000000000000000000000000000000000000000000000000000000000
    01180000083501f655083501f655083501f655083501f655053501f655053501f655053501f655053501f655073501f655073501f655073501f655073501f655033501f655033501f655033501f655033501f655
    01180000053501f655053501f655053501f655053501f655023501f655023501f655023501f655023501f655073501f655073501f655073501f655073501f655003501f655023501f655033501f655073501f655
    011800000c023274550c023274550c023274550c02327455130232e4550c0232e4550c0232e4550c0232e4550c023264550c023264550c023264550c023264550c0232e4550c0232e4550c0232e4550c0232e455
    0118000018255302551825530255182553025518255302551a255322551a255322551a255322551a25532255232553b255232553b255232553b25523255322551f255372551f255372551f255372551f25537255
    011800001825530255182553025518255302551825530255172552f255172552f255172552f255172552f2551b255332551b255332551b255332551b255332551f255372551f255372551f255372551f25537255
    4918000024151241522615226156271522b1513015032150331503315233155371513715235150331523215037152371423713500000351543315132152301522e1522e1522e1552f10000000000003015037150
    4918000038152381523815500000381513715035155331563215232152321500000037154351513315132150331553313533125331253311533151301513015232151321512f1512f15230152301323012230115
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    111400001d0501d0501d0501d0501d0501d0521d0521d0551f0501f0501f0521f0551f0501f0501f0551f05521050210502105021050210502105021050210502105021050210402104021032210322102221015
    0114000024050240502405024050210502104221042210452605026050260522605523050230502305523055250502505025050250502505025050280502d05028050250402d04028030250322d0322802225015
    3114000029555295252d5552d555305553055535555355552b0552b0252f0552f025320553202537055370252d5552d5553155531555345553455538555385553905539025390453902539035395153951539515
    011400000502005020050200502005020050220502205025070200702007022070250702007020070250702509020090200902009020090200902009020090200902009020090200902009022090120901209015
    __music__
    01 08090a0b
    02 0c0d0a0b
    01 0e0f1014
    00 0e0f1014
    00 11121314
    02 11121314
    01 5c161517
    00 1a161517
    00 1b181917
    00 1c161517
    00 1d201f57
    00 1e211957
    00 221d1f17
    00 231e1917
    02 5c161517
    00 28292a2b