#!/usr/bin/env perl
#
# demo that illustrates the to_panel method of Game::LevelMap

use strict;
use warnings;
use Game::LevelMap;
use IO::Termios 0.07;

sub alt_screen ()   { "\e[?1049h" }
sub clear_screen () { "\e[1;1H\e[2J" }
sub term_norm ()    { "\e[m" }
sub unalt_screen () { "\e[?1049l" }

my $lm = Game::LevelMap->new(
    from_string => do { local $/; readline *DATA }
);

STDOUT->autoflush(1);

print alt_screen, clear_screen, term_norm;

my $term = IO::Termios->new( \*STDIN );
my $orig = $term->getattr;
$term->cfmakeraw;

#$lm->to_terminal;
#sleep(1);

my @panel_offset = ( 2,  2 );
my @panel_size   = ( 21, 21 );

for my $c ( 0 .. 5 ) {
    $lm->to_panel( @panel_offset, @panel_size, $c, 0 );
    sleep(1);
}
for my $x ( 1 .. 10 ) {
    $lm->to_panel( @panel_offset, @panel_size, 5 + $x, $x );
    sleep(1);
}
for my $r ( 11 .. 15 ) {
    $lm->to_panel( @panel_offset, @panel_size, 15, $r );
    sleep(1);
}

$term->setattr($orig);

print unalt_screen, $/;

__DATA__
++~.~.~~..++++,,......,.,++++++++++++++++,,,~.,,,,+++#####################################################+++,.,,+++############
++,.~...,.++++,,..~,~.,.+++++++++++++++++,,,.~,,+++++#####################################################++++.,++++############
,+.~~~,,,+++++,,.~~,~~..+++++++++++++++++,,....,+++++#####################################################+,++..++++############
,,.~~~,,,+++++,..~.,,..,++++++++++++++++,,,..,..+++++#####################################################++++~.+,+#############
,~.~~.~,,++++,~.~~.~,.~..+++++++++++++++,,..,,..++++++####################################################++++.~.+,+############
,~~.~...++++,...~~.~,,,,,++++++++++,++++.,..,,,.,++++.###################################################+++,+~~~+,#############
,~~~~~~~++++....~~~.,++,,++++++++.+.+++,.,~~~,,.~++,++###################################################+++~+~~.+++############
,,~~~~~~++++~..~~~..,++++++++++++,+.+++,~,.~.,..,.+,+,###################################################+,+,,~~,+++############
.,.~~~~~++++...~~~.~,++++++++++,+,,.++,..,...,...,+,.++##################################################++++,~~,+++############
~,~~~~~,,.++~.~~~~~..,++++++++,.+...++.~.~~.~,,.,,+.,+###################################################+++++..+++#############
~.~~~~.~,.+,.~~~~~....+++++++++...~.,+...~..,,,.,.+,,+###################################################+++++,,+++#############
~~~~~~~~,~,,~~~~~~~.~.+++++++++~,...,+~...~.,,,+.~...+####################################################++++,++++#############
~~~~~~~,,~,,,~~~~~~~~~+++++++++.,~.~,,~~~.~.,,++...,.+####################################################++++++,++#############
~~.~~~~,~~~,..~~~~~~~.++++++++++.~~.,,,.~~~.,.++....,,####################################################++++++,+++############
~~~~~~.~.~.,..~~~~~~..+++++++++,...,,,,.~~~~..++,,.,++####################################################+++++++++,############
~~~~~..~~~~,~~~~~~~~..+++++++++....,.~,~~~~..,+++,,+++####################################################++++++,+++############
~~~~~~~~~~.,.~~~~~~~.,+++++++++.,~...~.~~~~...+++,,+++####################################################++++++,+,+############
~~~~~~~~~~.~.~~~~~~~..++++++++,,,~.....~~~~.~,+++++++++##################################################+++++++++,+############
~~~~~~~~~~.~.~~~~~~~.~+++~+++++,,....~~.~~~..,+++++++++++################################################++++++++,++############
~~~~~~~~~~.~.~~~~~~~,.++..++++++,~~.~~..~~~..,+++++++++++################################################++++++++++#############
~~~~~~~~~~~~~~~~~~~~.,++..~+++++,~~~~~~~~~~..,+++++++++++#####################+#########################++++++++,,+#############
~~~~~~~~~~~~~~~~~~~~,,++,.~+++++,.~~~~~~~~~..+++++++++++######################+####+##################++++++++++.+++############
~~~~~~~~~~~~~~~~~~~~,,,..~.+++++~.~~~~~~~~~.,+++++++++++######################+#+##+#################++++++++++++++#############
~~~~~~~~~~~~~~~~~~~.,,,~~~.,+++,..~~~~~~~~~.,,++++++++++######################+++##+##+##############+++++++++++.++#############
~~~~~~~~~~~~~~~~~~~.,~,.~~~.+++~.~~~~~~~~~..,,+.++++++++#####################+,+++#++#+++############+++++++++++++++############
~~~~~~~~~~~~~~~~~~...~,..~..+++.~.~~~~~~~~..~,,.+++++++######################,+.,+#+++++++############++++++++,+++++#+##########
~~~~~~~~~~~~~~~~~..~.~...~~~+++...~~~~~~~~~.~,..+++++++#####################+++,,++++++.++############++++++++++++++++##########
~~~~~~~~~~~~~~~~~~.~.~,~~.~,+++.~~~~~~~~~~~.~,..+++++++######################+,+,++++++,++############+++++++++.++++++##########
~~~~~~~~~~~~~~~~~~~~.~.~~~~,+++~~~~~~~~~~~~~.,~,+.+++++######################+++,,++++,+++############++++++++,+++++++##########
~~~~~~~~~~~~~~~~~~~~.~.~~~.,+++.~~~~~~~~~~~~.,.~,++++++######################+++++++++++++############+++++++++,++++++##########
~~~~~~~~~~~~~~~~~~~~~~~~~~.,~++,~~~~~~~~~~~..,~~,++++++#####################+++.++++++++++++###########++++++++,++++++##########
~~~~~~~~~~~~~~~~~~~~~~~~~~~,.,,,.~~~~~~~~~~~.,..+++++++#####################+++++++,+++.+++,+##########++++++++.,+++++##########
~~~~~~~~~~~~~~~~~~~~~~~~~~.~~,,~.~~~~~~~~~~~~...,++++++####################++++++++,+++,+++,+++########++++++++..+++++######+##+
~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~,..~~~~~~~~~~~~...,++++++##################+++++++..,.+++,++++.+#########+++++++..,+++++######+##+
~~~~~~~~~~~~~~~~~~~~~~~~~...~.,~~~~~~~~~~~~~~~..,++++++##################++++++..,,.+++.++,,++#########++++++.,,,,++++##++##+##+
~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~,,~~~~~~~~~~~~~.~..++++++##################++++++,,.,,,.+,++,,++#########+++++,+++.+++++++++##++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,.~~~~~~~~~~~~...+++++++###################++++++,.+..++,++,+,+#########+++++.+++,+++++++++##++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.~~~~~~~~~~~~~..+++++++###################+++++++,+.,.+,++,+++#########+++++++++.,+++++++++++++,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~~~~~~~~~~~.,.+++++++###################+++++++++++..,+,,+++#########+++++++++,+++++++,+++++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~~~~~~~~~~.~,,+++++++###################+++++++++++,..++,++++########+++++++++,+++++++++++++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~.,,.++++++++#+#################+++++++++++,.++,.+++#######++++++++++.+++++++++++++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~.~~~~~~~~~~~.,,.++++++++++#################++++++++++,..,..,+++#######+++++++++,+++++++++++,++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~..~+~++++++++++#################++++++++++.,,,,,,+++#######++++++++++,+++++++++,~++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,+++++++++++,+################++++++++++.,..,+++++++++##++++++++++,.++++++++,+,++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~++++++++++++++###############+++++++++..,,.,++++++++++++++++++++++.+++++++,+++++++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~..+++++++++++.++###############+++++++++..,,,.+++++++++++++++++++++,,++++++,++++++#+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,++++++++++..++###############+++++++++..,,+,+++++++++++++++++++++,,++++,.++,+,+,#+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.+++++++++++..,++###############++++++++,.,++++++++++,++++++++++++++,++++.~++,+,####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~++++++++++++,+++###+###########++++++,+..,++++++++++++++,++++++++++,++++,,.+,+#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++++++,+++++++##########+++++++,+...+++++++++++,+++++++++++++,++..+,++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,++++++++..++.,++++++##########+++++++.,,..+++++++++++,++,++++++++++,,+,.++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,+++++++++..+~~~+,++++##########+++++++.,~..+++++++++++.++++,+++++++++,.,+++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,,+++++++++..+,.,+,++++##########++++++,..~.,++++++++++.,++,.++++++++++,.++++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,,,,+~+~+++..,,..,+.++++##########++++++.,...,+.+++++++++,.++,++++++++++.,+++++++++####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,~,~+~,~+++,,.,....,++++#########++++++++...,,,,+++,+++++,,,,.++++++++++,,+++++++++####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~,.~.++++,~~...~++++++########++++,+++,...,,.+++.++++++,.,,+++++++++,.,+++++++######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,~~++++,.~~...++++++######+++,++++++,,~~,,.+++,+++++++,.,+++++++,,,,.++++++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~.~.+++,.~..~.++++++#####+++++.,++++,.~..,.+++.+++++++,,++++,+,++..+..+++++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~.+++,,~....++++++#####++++,.+,+++~.~....,++.,++++++.,++++,.,,,.,+,,++++########
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.~~.+++,,,.~~.++++++#####+++++,,.+++..~..~.,++~.++++++,,+++++,.,..,++,+,++########
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~,++..,..~....+++++####++..+,,,++.~.~~~.,,+,,..+++++.,+++++,.,.,+++,++++########
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~.~+.~~.~~...,,+++++###+++,+.~,.++,..~~~.,,,,,.,++++,.,,++++,...,+++,,++++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~.~+,~~.~....~.++++++#+++..,,.,,++,.~~~~.,,,,~.,+++.,..,,,++,...+++++..+++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~.,+~....~..,.,++++++++++.,.,..,++,.~~~~~,,,,.,,+,+.,,.,,.++,..,+++++,++++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,.~~.~..~,+++++++++++++..,..,++,,~~~~...,..,++,.....,,.,.,..,++++++.+++#######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,~~..~~..,+++++++++++++,,,.,,++,.~~~~...,.~,+++.,,...,.,,...,+++++,,++,+######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,,~~~~~..~+++++++++++++.+,.,,,,..~~~~..~.~.,,++,.,~..,..,.,,..++++,,++++######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~,~~~~~~...+++++++++++++++,.,,,.~,~~~~..~~~.,.,,,~.~~~,~...,,,.+++++.+,++######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~~~.,,.+++++++++++++++,~,.,,...~~~~~~.~~,,,,,..~.~~...,,,,+++++,,,,++######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~~~.,,.+++++++++++++++,~~.,..~.~~~~~~.~~...,~..~~~...~.+,,+++++++,,,+######
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.+.+++++++++++++++.~..~..~~~~~~~~~~~.~,,.~~~~..~~.,+.+++++++++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~+++++++++++++++++.~...~~~~~~~~~~~~~~~,,..~~~~~~..,+,+++++++++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++++++++++++++++.~....~~~~~~~~~~~~~~.,.~~~~~~~.,,+++++++++++++++#####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++++++++++,~....~~~~~~~~~~~~~..,.~~~~~~~..,+++++++++++++++##++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~,++++++++++++++++..~~.~~~~~~~~~~~~~~~~..~~~~~~~~..+++++++++++.+++##++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++++++++++..~~.~~~~~~~~~~~~~~~..~~~~~~~~.~,+++++++++++.,+++#++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..+++++.+++++++++,,,.~~~~~~~~~~~~~~~~~~..~~~~~~~..,.++++++++++,.,++++++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~++,+..+++++++++,,,~~~~~~~~~~~~~~~~~~~~.~~~~~~~..,,++++++++++,+++++,++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++,.,,+++++++++..,~~~~~~~~~~~~~~~~~~~~.~~~~~~~..,,+++++++++++++++++++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,+,~~.~,++++++++..,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,+++++++++++++,,+++++#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,.+,.....+++++++,~.,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,+++++++++++++,++++###
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~,,.~~.++++++....,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,++++++++#+++++++++###
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,.~~,++++++.~.,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,+++,+++##+++,+++,++##
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~,~.~~,+++++++....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,+,,+.+###+++,+++,+##
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.~~~.+++++++,~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,,.,++####+++++++,###
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++++++++...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,.,,,+####+###+++++##
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~..++++++++..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....+.,+####+####++++##
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~++++++++.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....,++++#########+++###
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++++++++.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,..,++++#########++####
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..++++++++.,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,,+++################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++++++++~,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,+,,,++################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,+++++++.,~~~~~~~~~~~~~~~~~~~~~~~~~~.~~,.,+,+,,#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,,.+++++...~~~~~~~~~~~~~~~~~~~~~~~~~~..,..+,.++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,~..++++...~~~~~~~~~~~~~~~~~~~~~~~~~~.,~,,,+++++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,~~~++++....~~~~~~~~~~~~~~~~~~~~~~~~~~,,,,++.+++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.~~++++,.~.~~~~~~~~~~~~~~~~~~~~~~~~~~~,,.+++,++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~.~.++++..~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~.++++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++#################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~.+++++,~~~~~~~~~~~~~~~~~~~~~~~~~~~~..+++++++++################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~.+++++..~~~~~~~~~~~~~~~~~~~~~~~~~~~.~+++++++++################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,++++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,+++,~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,+++++++++###############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,++,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,.,+++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~.++,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,,.++++++++++############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~++,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,.++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,~++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....+++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,.+++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~,,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~+++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,+++++++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++++++++++++############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,+++++++.++++############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,,++++++.+++,############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..,~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,.+++,,+,++,+############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,,+++,++,++++############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~..,.++++..+++,+############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~..,.++++,,,,+++############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~....+++,.,..+.+############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,++,,,+++++,############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,+++.+++++,+############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,++,.++++,+#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,+,,++++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,,,,,,+++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~.,.,,,.,++++#############
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,.,,.,,++++#############
