# HG changeset patch # User David Demelier # Date 1579177940 -3600 # Node ID f053a9f38c0e03682586cc5a1719060010d52cd3 # Parent b815621df3e3e30f39fa84c40d28f2ec31909d7d core: implement basic scrolling, closes #2459 diff -r b815621df3e3 -r f053a9f38c0e Makefile --- a/Makefile Wed Jan 15 22:31:17 2020 +0100 +++ b/Makefile Thu Jan 16 13:32:20 2020 +0100 @@ -30,6 +30,7 @@ src/game.c \ src/image.c \ src/map.c \ + src/map_state.c \ src/message.c \ src/painter.c \ src/sprite.c \ diff -r b815621df3e3 -r f053a9f38c0e assets/maps/test.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/assets/maps/test.map Thu Jan 16 13:32:20 2020 +0100 @@ -0,0 +1,20008 @@ +title|World +width|100 +height|100 +tilewidth|32 +tileheight|32 +layer|background +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +111 +112 +112 +112 +112 +112 +112 +112 +112 +113 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +141 +142 +142 +142 +142 +142 +142 +142 +142 +143 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +171 +172 +172 +172 +172 +172 +172 +172 +172 +173 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +layer|foreground +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +893 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +893 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +893 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +893 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +893 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +tileset|test.png diff -r b815621df3e3 -r f053a9f38c0e assets/sprites/test-walk.png Binary file assets/sprites/test-walk.png has changed diff -r b815621df3e3 -r f053a9f38c0e assets/sprites/test-walk.xcf Binary file assets/sprites/test-walk.xcf has changed diff -r b815621df3e3 -r f053a9f38c0e assets/tilesets/test.png Binary file assets/tilesets/test.png has changed diff -r b815621df3e3 -r f053a9f38c0e src/main.c --- a/src/main.c Wed Jan 15 22:31:17 2020 +0100 +++ b/src/main.c Thu Jan 16 13:32:20 2020 +0100 @@ -20,8 +20,13 @@ #include "error.h" #include "event.h" #include "game.h" +#include "image.h" +#include "map.h" +#include "map_state.h" #include "splashscreen.h" +#include "sprite.h" #include "sys.h" +#include "util.h" #include "window.h" #define WINDOW_WIDTH 1280 @@ -30,6 +35,8 @@ static void init(void) { + struct map map; + if (!sys_init()) error_fatal(); if (!window_init("Molko's Adventure", WINDOW_WIDTH, WINDOW_HEIGHT)) @@ -62,6 +69,9 @@ game_update(elapsed); game_draw(); + + if ((elapsed = clock_elapsed(&clock)) < 20) + delay(20 - elapsed); } } diff -r b815621df3e3 -r f053a9f38c0e src/map.c --- a/src/map.c Wed Jan 15 22:31:17 2020 +0100 +++ b/src/map.c Thu Jan 16 13:32:20 2020 +0100 @@ -23,12 +23,13 @@ #include "error.h" #include "error_p.h" +#include "image.h" #include "map.h" -#include "image.h" -#include "texture.h" +#include "painter.h" #include "sprite.h" #include "sys.h" -#include "painter.h" +#include "texture.h" +#include "window.h" #include @@ -182,17 +183,16 @@ void map_draw(struct map *map, int srcx, int srcy) { - /* TODO: remove window size here */ texture_draw_ex( map->picture, srcx, srcy, - 1024, - 576, + window_width(), + window_height(), 0, 0, - 1024, - 576, + window_width(), + window_height(), 0 ); } @@ -219,5 +219,5 @@ free(map->layers[0].tiles); free(map->layers[1].tiles); - memset(&map, 0, sizeof (struct map)); + memset(map, 0, sizeof (struct map)); } diff -r b815621df3e3 -r f053a9f38c0e src/map_state.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/map_state.c Thu Jan 16 13:32:20 2020 +0100 @@ -0,0 +1,287 @@ +/* + * map_state.c -- state when player is on a map + * + * Copyright (c) 2020 David Demelier + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include "event.h" +#include "game.h" +#include "map.h" +#include "map_state.h" +#include "painter.h" +#include "state.h" +#include "texture.h" +#include "walksprite.h" +#include "window.h" + +/* + * This is the speed the player moves on the map. + * + * SPEED represents the number of pixels it must move per SEC. + * SEC simply represends the number of milliseconds in one second. + */ +#define SPEED 100 +#define SEC 1000 + +/* + * Those are margins within the edge of the screen. The camera always try to + * keep those padding between the player and the screen. + */ +#define MARGIN_WIDTH 80 +#define MARGIN_HEIGHT 80 + +/* + * This structure defines the possible movement of the player as flags since + * it's possible to make diagonal movements. + */ +enum movement { + MOVING_UP = 1 << 0, + MOVING_RIGHT = 1 << 1, + MOVING_DOWN = 1 << 2, + MOVING_LEFT = 1 << 3 +}; + +/* + * A bit of explanation within this array. The structure walksprite requires + * an orientation between 0-7 depending on the user direction. + * + * Since keys for moving the character may be pressed at the same time, we need + * a conversion table from "key pressed" to "orientation". + * + * When an orientation is impossible, it is set to -1. Example, when both left + * and right are pressed. + * + * MOVING_UP = 0001 = 0x1 + * MOVING_RIGHT = 0010 = 0x2 + * MOVING_DOWN = 0100 = 0x3 + * MOVING_LEFT = 1000 = 0x4 + */ +static unsigned int orientations[16] = { + [0x1] = 0, + [0x2] = 2, + [0x3] = 1, + [0x4] = 4, + [0x6] = 3, + [0x8] = 6, + [0x9] = 7, + [0xC] = 5 +}; + +static struct { + struct map map; + struct walksprite player_sprite; + int player_x; + int player_y; + int player_orientation; + int view_x; + int view_y; + enum movement moving; +} data; + +static void +enter(void) +{ +} + +static void +leave(void) +{ +} + +static void +handle_keydown(const union event *event) +{ + switch (event->key.key) { + case KEY_UP: + data.moving |= MOVING_UP; + break; + case KEY_RIGHT: + data.moving |= MOVING_RIGHT; + break; + case KEY_DOWN: + data.moving |= MOVING_DOWN; + break; + case KEY_LEFT: + data.moving |= MOVING_LEFT; + break; + default: + break; + } + + data.player_orientation = orientations[data.moving]; +} + +static void +handle_keyup(const union event *event) +{ + switch (event->key.key) { + case KEY_UP: + data.moving &= ~(MOVING_UP); + break; + case KEY_RIGHT: + data.moving &= ~(MOVING_RIGHT); + break; + case KEY_DOWN: + data.moving &= ~(MOVING_DOWN); + break; + case KEY_LEFT: + data.moving &= ~(MOVING_LEFT); + break; + default: + break; + } +} + +static void +move(unsigned int ticks) +{ + /* This is the amount of pixels the player must move. */ + const int delta = SPEED * ticks / SEC; + + /* This is the view width which simply equals to the screen. */ + const unsigned int view_w = window_width(); + const unsigned int view_h = window_height(); + + /* This is the rectangle within the view where users must be. */ + const int margin_x = data.view_x + MARGIN_WIDTH; + const int margin_y = data.view_y + MARGIN_HEIGHT; + const unsigned int margin_w = window_width() - (MARGIN_WIDTH * 2); + const unsigned int margin_h = window_height() - (MARGIN_HEIGHT * 2); + + /* This is map size. */ + const unsigned int map_w = texture_width(data.map.picture); + const unsigned int map_h = texture_height(data.map.picture); + + int dx = 0; + int dy = 0; + + if (data.moving == 0) + return; + + if (data.moving & MOVING_UP) + dy = -1; + if (data.moving & MOVING_DOWN) + dy = 1; + if (data.moving & MOVING_LEFT) + dx = -1; + if (data.moving & MOVING_RIGHT) + dx = 1; + + /* Move the player and adjust view if needed. */ + if (dx > 0) { + data.player_x += delta; + + if (data.player_x > (int)(margin_x + margin_w)) { + data.view_x = (data.player_x - view_w) + MARGIN_WIDTH; + + if (data.view_x >= (int)(map_w - view_w)) + data.view_x = map_w - view_w; + } + + if (data.player_x > map_w - 48) + data.player_x = map_w - 48; + } else if (dx < 0) { + data.player_x -= delta; + + if (data.player_x < margin_x) { + data.view_x = data.player_x - MARGIN_WIDTH; + + if (data.view_x < 0) + data.view_x = 0; + } + + if (data.player_x < 0) + data.player_x = 0; + } + + if (dy > 0) { + data.player_y += delta; + + if (data.player_y > (int)(margin_y + margin_h)) { + data.view_y = (data.player_y - view_h) + MARGIN_HEIGHT; + + if (data.view_y >= (int)(map_h - view_h)) + data.view_y = map_h - view_h; + } + + if (data.player_y > map_h - 48) + data.player_y = map_h - 48; + } else if (dy < 0) { + data.player_y -= delta; + + if (data.player_y < margin_y) { + data.view_y = data.player_y - MARGIN_HEIGHT; + + if (data.view_y < 0) + data.view_y = 0; + } + + if (data.player_y < 0) + data.player_y = 0; + } + + walksprite_update(&data.player_sprite, ticks); +} + +static void +handle(const union event *event) +{ + switch (event->type) { + case EVENT_KEYDOWN: + handle_keydown(event); + break; + case EVENT_KEYUP: + handle_keyup(event); + break; + default: + break; + } +} + +static void +update(unsigned int ticks) +{ + move(ticks); +} + +static void +draw(void) +{ + painter_set_color(0x000000ff); + painter_clear(); + map_repaint(&data.map); + map_draw(&data.map, data.view_x, data.view_y); + walksprite_draw(&data.player_sprite, data.player_orientation, data.player_x - data.view_x, data.player_y - data.view_y); + painter_present(); +} + +void +map_state_start(struct map *map, struct sprite *s) +{ + data.map = *map; + + walksprite_init(&data.player_sprite, s, 250); + game_switch(&map_state); +} + +struct state map_state = { + .enter = enter, + .leave = leave, + .update = update, + .handle = handle, + .draw = draw +}; diff -r b815621df3e3 -r f053a9f38c0e src/map_state.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/map_state.h Thu Jan 16 13:32:20 2020 +0100 @@ -0,0 +1,46 @@ +/* + * map_state.h -- state when player is on a map + * + * Copyright (c) 2020 David Demelier + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MOLKO_MAP_STATE_H +#define MOLKO_MAP_STATE_H + +/** + * \file map_state.h + * \brief State when player is on a map. + */ + +struct map; +struct sprite; + +/** + * \brief State when player is on a map. + */ +extern struct state map_state; + +/** + * Convenient function that switch game state with the given map. + * + * \pre map != NULL + * \pre sprite != NULL + * \param map the map to use (will take ownership) + * \param sprite the player sprite + */ +void +map_state_start(struct map *map, struct sprite *s); + +#endif /* !MOLKO_MAP_STATE_H */ diff -r b815621df3e3 -r f053a9f38c0e src/splashscreen.c --- a/src/splashscreen.c Wed Jan 15 22:31:17 2020 +0100 +++ b/src/splashscreen.c Thu Jan 16 13:32:20 2020 +0100 @@ -16,19 +16,19 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include -#include // TODO: temporary - #include "error.h" #include "font.h" #include "painter.h" #include "splashscreen.h" +#include "map_state.h" +#include "image.h" #include "state.h" #include "sys.h" #include "texture.h" #include "window.h" +#include "map.h" -#define DELAY 5000 +#define DELAY 3000 static unsigned int elapsed; static struct font *font; @@ -39,17 +39,14 @@ static void enter(void) { - if (!(font = font_openf(sys_datapath("fonts/knights-quest.ttf"), 100))) + if (!(font = font_openf(sys_datapath("fonts/knights-quest.ttf"), 160))) error_fatal(); if (!(text = font_render(font, "Molko's Adventure", 0x000000ff))) error_fatal(); /* Compute position. */ - unsigned int w = 0; - unsigned int h = 0; - - if (!texture_get_size(text, &w, &h)) - error_fatal(); + const unsigned int w = texture_width(text); + const unsigned int h = texture_height(text); x = (window_width() / 2) - (w / 2); y = (window_height() / 2) - (h / 2) - 100; @@ -74,8 +71,18 @@ /* TODO: change this once map is done. */ if (elapsed >= DELAY) { - printf("splash finished!"); - exit(0); + /* TODO: this will be removed too. */ + static struct map map; + static struct texture *player_texture; + static struct sprite player_sprite; + + if (!map_open(&map, sys_datapath("maps/test.map"))) + error_fatal(); + if (!(player_texture = image_openf(sys_datapath("sprites/test-walk.png")))) + error_fatal(); + + sprite_init(&player_sprite, player_texture, 48, 48); + map_state_start(&map, &player_sprite); } } diff -r b815621df3e3 -r f053a9f38c0e src/texture.c --- a/src/texture.c Wed Jan 15 22:31:17 2020 +0100 +++ b/src/texture.c Thu Jan 16 13:32:20 2020 +0100 @@ -40,24 +40,30 @@ return tex; } -bool -texture_get_size(struct texture *tex, unsigned int *w, unsigned int *h) +unsigned int +texture_width(struct texture *tex) { assert(tex); - int rw, rh; + int width; + + if (SDL_QueryTexture(tex->handle, NULL, NULL, &width, NULL) < 0) + return 0; + + return width; +} - if (SDL_QueryTexture(tex->handle, NULL, NULL, &rw, &rh) < 0) { - error_sdl(); - *w = 0; - *h = 0; - return false; - } +unsigned int +texture_height(struct texture *tex) +{ + assert(tex); - *w = rw; - *h = rh; + int height; - return true; + if (SDL_QueryTexture(tex->handle, NULL, NULL, NULL, &height) < 0) + return 0; + + return height; } void diff -r b815621df3e3 -r f053a9f38c0e src/texture.h --- a/src/texture.h Wed Jan 15 22:31:17 2020 +0100 +++ b/src/texture.h Thu Jan 16 13:32:20 2020 +0100 @@ -47,15 +47,24 @@ texture_new(unsigned int w, unsigned int h); /** - * Get texture size. + * Get texture width. * * \pre tex != NULL * \param tex the texture - * \param w the width - * \param h the height + * \return the width */ -bool -texture_get_size(struct texture *tex, unsigned int *w, unsigned int *h); +unsigned int +texture_width(struct texture *tex); + +/** + * Get texture height. + * + * \pre tex != NULL + * \param tex the texture + * \return the height + */ +unsigned int +texture_height(struct texture *tex); /** * Simple texture drawing. diff -r b815621df3e3 -r f053a9f38c0e src/util.h --- a/src/util.h Wed Jan 15 22:31:17 2020 +0100 +++ b/src/util.h Thu Jan 16 13:32:20 2020 +0100 @@ -22,6 +22,14 @@ #include /** + * Get the number of elements in a static array. + * + * \param x the array + * \return the number of elements + */ +#define nelem(x) sizeof ((x)) / sizeof ((x)[0]) + +/** * Wrapper around malloc(3) that exits on allocation failure. * * \param size the size