From c486c42de87e904ec3ae7ddc96f435dc48585fef Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Fri, 2 Sep 2011 23:02:23 -0500 Subject: [PATCH] Add default marker set --- src/main/java/org/dynmap/DynmapPlugin.java | 4 +- .../java/org/dynmap/markers/MarkerAPI.java | 5 +- .../java/org/dynmap/markers/MarkerIcon.java | 8 +- .../dynmap/markers/impl/MarkerAPIImpl.java | 112 +++++++++++++++++- .../dynmap/markers/impl/MarkerIconImpl.java | 16 ++- src/main/resources/markers/anchor.png | Bin 0 -> 831 bytes src/main/resources/markers/bank.png | Bin 0 -> 771 bytes src/main/resources/markers/basket.png | Bin 0 -> 639 bytes src/main/resources/markers/beer.png | Bin 0 -> 609 bytes src/main/resources/markers/bighouse.png | Bin 0 -> 756 bytes src/main/resources/markers/blueflag.png | Bin 0 -> 726 bytes src/main/resources/markers/bomb.png | Bin 0 -> 871 bytes src/main/resources/markers/bookshelf.png | Bin 0 -> 719 bytes src/main/resources/markers/bricks.png | Bin 0 -> 959 bytes src/main/resources/markers/bronzemedal.png | Bin 0 -> 657 bytes src/main/resources/markers/bronzestar.png | Bin 0 -> 692 bytes src/main/resources/markers/building.png | Bin 0 -> 630 bytes src/main/resources/markers/cake.png | Bin 0 -> 792 bytes src/main/resources/markers/camera.png | Bin 0 -> 729 bytes src/main/resources/markers/cart.png | Bin 0 -> 745 bytes src/main/resources/markers/caution.png | Bin 0 -> 543 bytes src/main/resources/markers/chest.png | Bin 0 -> 476 bytes src/main/resources/markers/church.png | Bin 0 -> 608 bytes src/main/resources/markers/coins.png | Bin 0 -> 672 bytes src/main/resources/markers/comment.png | Bin 0 -> 695 bytes src/main/resources/markers/compass.png | Bin 0 -> 906 bytes src/main/resources/markers/construction.png | Bin 0 -> 654 bytes src/main/resources/markers/cross.png | Bin 0 -> 473 bytes src/main/resources/markers/cup.png | Bin 0 -> 724 bytes src/main/resources/markers/cutlery.png | Bin 0 -> 584 bytes src/main/resources/markers/default.png | Bin 0 -> 781 bytes src/main/resources/markers/diamond.png | Bin 0 -> 555 bytes src/main/resources/markers/dog.png | Bin 0 -> 879 bytes src/main/resources/markers/door.png | Bin 0 -> 606 bytes src/main/resources/markers/down.png | Bin 0 -> 381 bytes src/main/resources/markers/drink.png | Bin 0 -> 773 bytes src/main/resources/markers/exclamation.png | Bin 0 -> 732 bytes src/main/resources/markers/factory.png | Bin 0 -> 710 bytes src/main/resources/markers/fire.png | Bin 0 -> 637 bytes src/main/resources/markers/flower.png | Bin 0 -> 920 bytes src/main/resources/markers/gear.png | Bin 0 -> 777 bytes src/main/resources/markers/goldmedal.png | Bin 0 -> 664 bytes src/main/resources/markers/goldstar.png | Bin 0 -> 699 bytes src/main/resources/markers/greenflag.png | Bin 0 -> 722 bytes src/main/resources/markers/hammer.png | Bin 0 -> 814 bytes src/main/resources/markers/heart.png | Bin 0 -> 742 bytes src/main/resources/markers/house.png | Bin 0 -> 727 bytes src/main/resources/markers/key.png | Bin 0 -> 664 bytes src/main/resources/markers/king.png | Bin 0 -> 691 bytes src/main/resources/markers/left.png | Bin 0 -> 371 bytes src/main/resources/markers/lightbulb.png | Bin 0 -> 685 bytes src/main/resources/markers/lighthouse.png | Bin 0 -> 781 bytes src/main/resources/markers/lock.png | Bin 0 -> 689 bytes src/main/resources/markers/orangeflag.png | Bin 0 -> 709 bytes src/main/resources/markers/pin.png | Bin 0 -> 521 bytes src/main/resources/markers/pinkflag.png | Bin 0 -> 711 bytes src/main/resources/markers/pirateflag.png | Bin 0 -> 753 bytes src/main/resources/markers/pointdown.png | Bin 0 -> 659 bytes src/main/resources/markers/pointleft.png | Bin 0 -> 617 bytes src/main/resources/markers/pointright.png | Bin 0 -> 620 bytes src/main/resources/markers/pointup.png | Bin 0 -> 637 bytes src/main/resources/markers/purpleflag.png | Bin 0 -> 744 bytes src/main/resources/markers/queen.png | Bin 0 -> 694 bytes src/main/resources/markers/redflag.png | Bin 0 -> 737 bytes src/main/resources/markers/right.png | Bin 0 -> 363 bytes src/main/resources/markers/ruby.png | Bin 0 -> 568 bytes src/main/resources/markers/scales.png | Bin 0 -> 664 bytes src/main/resources/markers/shield.png | Bin 0 -> 704 bytes src/main/resources/markers/sign.png | Bin 0 -> 650 bytes src/main/resources/markers/silvermedal.png | Bin 0 -> 635 bytes src/main/resources/markers/silverstar.png | Bin 0 -> 717 bytes src/main/resources/markers/skull.png | Bin 0 -> 798 bytes src/main/resources/markers/star.png | Bin 0 -> 611 bytes src/main/resources/markers/sun.png | Bin 0 -> 621 bytes src/main/resources/markers/temple.png | Bin 0 -> 627 bytes src/main/resources/markers/theater.png | Bin 0 -> 815 bytes src/main/resources/markers/tornado.png | Bin 0 -> 854 bytes src/main/resources/markers/tower.png | Bin 0 -> 747 bytes src/main/resources/markers/tree.png | Bin 0 -> 716 bytes src/main/resources/markers/truck.png | Bin 0 -> 623 bytes src/main/resources/markers/up.png | Bin 0 -> 391 bytes src/main/resources/markers/walk.png | Bin 0 -> 700 bytes src/main/resources/markers/warning.png | Bin 0 -> 652 bytes src/main/resources/markers/world.png | Bin 0 -> 910 bytes src/main/resources/markers/wrench.png | Bin 0 -> 660 bytes src/main/resources/markers/yellowflag.png | Bin 0 -> 671 bytes 86 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/markers/anchor.png create mode 100644 src/main/resources/markers/bank.png create mode 100644 src/main/resources/markers/basket.png create mode 100644 src/main/resources/markers/beer.png create mode 100644 src/main/resources/markers/bighouse.png create mode 100644 src/main/resources/markers/blueflag.png create mode 100644 src/main/resources/markers/bomb.png create mode 100644 src/main/resources/markers/bookshelf.png create mode 100644 src/main/resources/markers/bricks.png create mode 100644 src/main/resources/markers/bronzemedal.png create mode 100644 src/main/resources/markers/bronzestar.png create mode 100644 src/main/resources/markers/building.png create mode 100644 src/main/resources/markers/cake.png create mode 100644 src/main/resources/markers/camera.png create mode 100644 src/main/resources/markers/cart.png create mode 100644 src/main/resources/markers/caution.png create mode 100644 src/main/resources/markers/chest.png create mode 100644 src/main/resources/markers/church.png create mode 100644 src/main/resources/markers/coins.png create mode 100644 src/main/resources/markers/comment.png create mode 100644 src/main/resources/markers/compass.png create mode 100644 src/main/resources/markers/construction.png create mode 100644 src/main/resources/markers/cross.png create mode 100644 src/main/resources/markers/cup.png create mode 100644 src/main/resources/markers/cutlery.png create mode 100644 src/main/resources/markers/default.png create mode 100644 src/main/resources/markers/diamond.png create mode 100644 src/main/resources/markers/dog.png create mode 100644 src/main/resources/markers/door.png create mode 100644 src/main/resources/markers/down.png create mode 100644 src/main/resources/markers/drink.png create mode 100644 src/main/resources/markers/exclamation.png create mode 100644 src/main/resources/markers/factory.png create mode 100644 src/main/resources/markers/fire.png create mode 100644 src/main/resources/markers/flower.png create mode 100644 src/main/resources/markers/gear.png create mode 100644 src/main/resources/markers/goldmedal.png create mode 100644 src/main/resources/markers/goldstar.png create mode 100644 src/main/resources/markers/greenflag.png create mode 100644 src/main/resources/markers/hammer.png create mode 100644 src/main/resources/markers/heart.png create mode 100644 src/main/resources/markers/house.png create mode 100644 src/main/resources/markers/key.png create mode 100644 src/main/resources/markers/king.png create mode 100644 src/main/resources/markers/left.png create mode 100644 src/main/resources/markers/lightbulb.png create mode 100644 src/main/resources/markers/lighthouse.png create mode 100644 src/main/resources/markers/lock.png create mode 100644 src/main/resources/markers/orangeflag.png create mode 100644 src/main/resources/markers/pin.png create mode 100644 src/main/resources/markers/pinkflag.png create mode 100644 src/main/resources/markers/pirateflag.png create mode 100644 src/main/resources/markers/pointdown.png create mode 100644 src/main/resources/markers/pointleft.png create mode 100644 src/main/resources/markers/pointright.png create mode 100644 src/main/resources/markers/pointup.png create mode 100644 src/main/resources/markers/purpleflag.png create mode 100644 src/main/resources/markers/queen.png create mode 100644 src/main/resources/markers/redflag.png create mode 100644 src/main/resources/markers/right.png create mode 100644 src/main/resources/markers/ruby.png create mode 100644 src/main/resources/markers/scales.png create mode 100644 src/main/resources/markers/shield.png create mode 100644 src/main/resources/markers/sign.png create mode 100644 src/main/resources/markers/silvermedal.png create mode 100644 src/main/resources/markers/silverstar.png create mode 100644 src/main/resources/markers/skull.png create mode 100644 src/main/resources/markers/star.png create mode 100644 src/main/resources/markers/sun.png create mode 100644 src/main/resources/markers/temple.png create mode 100644 src/main/resources/markers/theater.png create mode 100644 src/main/resources/markers/tornado.png create mode 100644 src/main/resources/markers/tower.png create mode 100644 src/main/resources/markers/tree.png create mode 100644 src/main/resources/markers/truck.png create mode 100644 src/main/resources/markers/up.png create mode 100644 src/main/resources/markers/walk.png create mode 100644 src/main/resources/markers/warning.png create mode 100644 src/main/resources/markers/world.png create mode 100644 src/main/resources/markers/wrench.png create mode 100644 src/main/resources/markers/yellowflag.png diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index c0973188..cfbdffd1 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -213,8 +213,6 @@ public class DynmapPlugin extends JavaPlugin { dataDirectory = this.getDataFolder(); - /* Initialize marker API, if not already done */ - MarkerAPI m_api = getMarkerAPI(); /* Load block models */ HDBlockModels.loadModels(dataDirectory); /* Load texture mappings */ @@ -254,6 +252,8 @@ public class DynmapPlugin extends JavaPlugin { if (!tilesDirectory.isDirectory() && !tilesDirectory.mkdirs()) { Log.warning("Could not create directory for tiles ('" + tilesDirectory + "')."); } + /* Initialize marker API (after tilesDirectory is ready) */ + MarkerAPI m_api = getMarkerAPI(); playerList = new PlayerList(getServer(), getFile("hiddenplayers.txt"), configuration); playerList.load(); diff --git a/src/main/java/org/dynmap/markers/MarkerAPI.java b/src/main/java/org/dynmap/markers/MarkerAPI.java index a5a5c1d0..19c5bcc9 100644 --- a/src/main/java/org/dynmap/markers/MarkerAPI.java +++ b/src/main/java/org/dynmap/markers/MarkerAPI.java @@ -1,6 +1,7 @@ package org.dynmap.markers; import java.io.File; +import java.io.InputStream; import java.util.Set; /** @@ -42,8 +43,8 @@ public interface MarkerAPI { * Register a new marker icon * @param id - ID of marker icon (must be unique among marker icons - letters, numbers, periods, underscores only) * @param label - label for marker icon - * @param markerfile - file containing PNG encoded icon for marker (will be copied) + * @param marker_png - stream containing PNG encoded icon for marker (will be read and copied) * @return marker icon object, or null if failed */ - public MarkerIcon createMarkerIcon(String id, String label, File markerfile); + public MarkerIcon createMarkerIcon(String id, String label, InputStream marker_png); } diff --git a/src/main/java/org/dynmap/markers/MarkerIcon.java b/src/main/java/org/dynmap/markers/MarkerIcon.java index 2612ca9a..a253a421 100644 --- a/src/main/java/org/dynmap/markers/MarkerIcon.java +++ b/src/main/java/org/dynmap/markers/MarkerIcon.java @@ -6,7 +6,8 @@ package org.dynmap.markers; public interface MarkerIcon { /** Default marker icon - always exists */ public static final String DEFAULT = "default"; - + + /** * Get ID of the marker icon (unique among marker icons) * @return ID @@ -17,4 +18,9 @@ public interface MarkerIcon { * @return icon label */ public String getMarkerIconLabel(); + /** + * Is builtin marker + * @return true + */ + public boolean isBuiltIn(); } diff --git a/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java b/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java index a723f465..677b7d8b 100644 --- a/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java +++ b/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java @@ -1,6 +1,11 @@ package org.dynmap.markers.impl; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; @@ -25,10 +30,24 @@ import org.dynmap.markers.MarkerSet; */ public class MarkerAPIImpl implements MarkerAPI { private File markerpersist; + private File markerdir; /* Local store for markers (internal) */ + private File markertiledir; /* Marker directory for web server (under tiles) */ private HashMap markericons = new HashMap(); private HashMap markersets = new HashMap(); static MarkerAPIImpl api; + + /* Built-in icons */ + private static final String[] builtin_icons = { + "anchor", "bank", "basket", "beer", "bighouse", "blueflag", "bomb", "bookshelf", "bricks", "bronzemedal", "bronzestar", + "building", "cake", "camera", "cart", "caution", "chest", "church", "coins", "comment", "compass", "construction", + "cross", "cup", "cutlery", "default", "diamond", "dog", "door", "down", "drink", "exclamation", "factory", + "fire", "flower", "gear", "goldmedal", "goldstar", "greenflag", "hammer", "heart", "house", "key", "king", + "left", "lightbulb", "lighthouse", "lock", "orangeflag", "pin", "pinkflag", "pirateflag", "pointdown", "pointleft", + "pointright", "pointup", "purpleflag", "queen", "redflag", "right", "ruby", "scales", "skull", "shield", "sign", + "silvermedal", "silverstar", "star", "sun", "temple", "theater", "tornado", "tower", "tree", "truck", "up", + "walk", "warning", "world", "wrench", "yellowflag" + }; /** * Singleton initializer @@ -43,12 +62,29 @@ public class MarkerAPIImpl implements MarkerAPI { /* Load persistence */ api.loadMarkers(); /* Fill in default icons and sets, if needed */ - if(api.getMarkerIcon(MarkerIcon.DEFAULT) == null) { - api.createMarkerIcon(MarkerIcon.DEFAULT, "Marker", null); + for(int i = 0; i < builtin_icons.length; i++) { + String id = builtin_icons[i]; + if(api.getMarkerIcon(id) == null) { + api.createBuiltinMarkerIcon(id, id); + } } if(api.getMarkerSet(MarkerSet.DEFAULT) == null) { api.createMarkerSet(MarkerSet.DEFAULT, "Markers", null, true); } + /* Build paths for markers */ + api.markerdir = new File(plugin.getDataFolder(), "markers"); + if(api.markerdir.mkdirs() == false) { /* Create directory if needed */ + Log.severe("Error creating markers directory - " + api.markerdir.getPath()); + } + api.markertiledir = new File(DynmapPlugin.tilesDirectory, "_markers_"); + if(api.markertiledir.mkdirs() == false) { /* Create directory if needed */ + Log.severe("Error creating markers directory - " + api.markertiledir.getPath()); + } + /* Now publish marker files to the tiles directory */ + for(MarkerIcon ico : api.getMarkerIcons()) { + api.publishMarkerIcon(ico); + } + return api; } @@ -63,6 +99,54 @@ public class MarkerAPIImpl implements MarkerAPI { set.cleanup(); markersets.clear(); } + + private MarkerIcon createBuiltinMarkerIcon(String id, String label) { + if(markericons.containsKey(id)) return null; /* Exists? */ + MarkerIconImpl ico = new MarkerIconImpl(id, label, true); + markericons.put(id, ico); /* Add to set */ + return ico; + } + + private void publishMarkerIcon(MarkerIcon ico) { + byte[] buf = new byte[512]; + InputStream in = null; + File infile = new File(markerdir, ico.getMarkerIconID() + ".png"); /* Get source file name */ + File outfile = new File(markertiledir, ico.getMarkerIconID() + ".png"); /* Destination */ + OutputStream out = null; + try { + out = new FileOutputStream(outfile); + } catch (IOException iox) { + Log.severe("Cannot write marker to tilespath - " + outfile.getPath()); + return; + } + if(ico.isBuiltIn()) { + in = getClass().getResourceAsStream("/markers/" + ico.getMarkerIconID() + ".png"); + } + else if(infile.canRead()) { /* If it exists and is readable */ + try { + in = new FileInputStream(infile); + } catch (IOException iox) { + Log.severe("Error opening marker " + infile.getPath() + " - " + iox); + } + } + if(in == null) { /* Not found, use default marker */ + in = getClass().getResourceAsStream("/markers/marker.png"); + if(in == null) + return; + } + /* Copy to destination */ + try { + int len; + while((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + } catch (IOException iox) { + Log.severe("Error writing marker to tilespath - " + outfile.getPath()); + } finally { + if(in != null) try { in.close(); } catch (IOException x){} + if(out != null) try { out.close(); } catch (IOException x){} + } + } @Override public Set getMarkerSets() { @@ -100,11 +184,29 @@ public class MarkerAPIImpl implements MarkerAPI { } @Override - public MarkerIcon createMarkerIcon(String id, String label, File markerfile) { + public MarkerIcon createMarkerIcon(String id, String label, InputStream marker_png) { if(markericons.containsKey(id)) return null; /* Exists? */ - MarkerIconImpl ico = new MarkerIconImpl(id, label); - + MarkerIconImpl ico = new MarkerIconImpl(id, label, false); + /* Copy icon resource into marker directory */ + File f = new File(markerdir, id + ".png"); + FileOutputStream fos = null; + try { + byte[] buf = new byte[512]; + int len; + fos = new FileOutputStream(f); + while((len = marker_png.read(buf)) > 0) { + fos.write(buf, 0, len); + } + } catch (IOException iox) { + Log.severe("Error copying marker - " + f.getPath()); + return null; + } finally { + if(fos != null) try { fos.close(); } catch (IOException x) {} + } markericons.put(id, ico); /* Add to set */ + + /* Publish the marker */ + publishMarkerIcon(ico); saveMarkers(); /* Save results */ diff --git a/src/main/java/org/dynmap/markers/impl/MarkerIconImpl.java b/src/main/java/org/dynmap/markers/impl/MarkerIconImpl.java index 0b15f4f2..7adcccb1 100644 --- a/src/main/java/org/dynmap/markers/impl/MarkerIconImpl.java +++ b/src/main/java/org/dynmap/markers/impl/MarkerIconImpl.java @@ -9,18 +9,21 @@ import org.dynmap.markers.MarkerIcon; class MarkerIconImpl implements MarkerIcon { private String iconid; private String label; + private boolean is_builtin; MarkerIconImpl(String id) { iconid = id; label = id; + is_builtin = false; } - MarkerIconImpl(String id, String lbl) { + MarkerIconImpl(String id, String lbl, boolean is_builtin) { iconid = id; if(lbl != null) label = lbl; else label = id; + this.is_builtin = is_builtin; } void cleanup() { @@ -36,12 +39,20 @@ class MarkerIconImpl implements MarkerIcon { public String getMarkerIconLabel() { return label; } + + @Override + public boolean isBuiltIn() { + return is_builtin; + } /** * Get configuration node to be saved * @return node */ Map getPersistentData() { + if(is_builtin) + return null; + HashMap node = new HashMap(); node.put("label", label); @@ -49,6 +60,9 @@ class MarkerIconImpl implements MarkerIcon { } boolean loadPersistentData(ConfigurationNode node) { + if(is_builtin) + return false; + label = node.getString("label", iconid); return true; diff --git a/src/main/resources/markers/anchor.png b/src/main/resources/markers/anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..870ebf634b6f991d663434e038e1d970fc9be656 GIT binary patch literal 831 zcmV-F1Hk-=P)|SPhkmf>;k8K5C3mv9M09hBGDSjHqd47#d^4z$PSZ4$mGe!D#*Q z9V$vsk1)jzdQZ(|MkksgORy04+_8_O6Z>3k9c5iVJeERA7z99S{(tWimxodGT?M zn{FvSTfW=vc0psq{hsa*ZKm6gUy8CUhR6Uh(NVzEJ$VI70TGErIrRE`vMxo3XMZ6% zWgGBbFZ^+jD>06ng$R}~v?>X)F?s_Ks+eWaqiV2Tg^w!>yKzHFtEG-IH#pt-6pOvS_}h;VBSwL6&3$ z3g8Z?se};tX|cearq@F;+F0dK5Jb!(K<%UFeUXvt!OQb7WOIPtU4^#OqaO^RM&l*4f*^<325sL+gc^I~oRTCa($c8Vn8OaDfFfwH zZ(&Y(!L(H@JJB`nvS{OCVGy}=q?uJUcfXXD6vvN@j(~N*4l^953_2|{3%ni=Oihe0 zk2o_k9rAK>;7w~gS66do4`Zsl4lND0ate#es`u_ca56VHC0}-FlCpj!Gl@eHb2m5v~jv!`wA{@O-(zd(L}4|(2Jp&@s8g$Hu|o& zyYr!Ee#Uv~e1%h^(X9Dz0-XsYBjQ8fs~0T^dxPJhZ)N=xU;q!kUWYuv{Ol@yFH zD`k5q3WAmvEgyQQ77@X)haiY3qCztAA&Yv5f}n7VB770Em3oMv3j4`a-ZblJvC3>RkVJ1i61Ps)k zOQLTjj;$1Et-=N+&~4a=Y&+6~yZs7hD>*(rxC5EN0JpHe@f}7M@O-)2y(&C1GZ+r< zjYaCZzT$%j12dC|_f4Sg=@*3e#3Ga@+&>jO-p5*8hUS8@O$eX5j{LICFyZ1%!!_LR zyb2*4WP}UFP0Wl8;(Oagq=yF)@DTSa2m;L_b_tPqFO1?+WT*ZhJDWyD#a0|YdKrn1 zXOP)BWTz+nJmCmWJYS&xHKOS?+reD{kxfHrvqB0SI$Vv`whQQg{~4|);ka2pPdLI8 z&zQIJF_ZcY%dp^TBI6uNF*KdN1uJNxqH+tQbf8=vO8Gd#6K}DJb2HNj+4)e~yHXNT zkK)Gd22GNvKe!u?7IyVI^aiE-)35=Sb3Ff>-i8Mv;5`_(8dq(E2-Xc^Ps zFihj8Z$V18lZnG{BU zeZxRYGlpIy!2-*^6qUR6T%f!*wD@8tj=}Y7R-5>$m4q;Uu5L&$vL$A8Av%CwFv+%FDcb18TMq&8>cJpLX?rO|4+>3-U=2k2Ls?x+ zTV10GX>fPV_};XUYzba;VBR<1d*8f$Z)ZkGDe>RO#JZGco-C=%jLci<_~Y76=ZiHd z?@cV@^@s0@Gcsp?t0aQW!_@uEF0a;qcqobF^Cip`9E^u2;X+3nd<;1kaPmkPiHnD@ zIG(_-(C%k`KvziD>mFZ^+*K@vTf98{))uWr(ZC$=O@me-OK%Va`k#$O2;m) zhp!#@f$M`n#TW2pqra^MbN0^pO?+%PgYND6+4%kvRJ~&N|iy5>PLT zo7D>T?eE0YTQ;1vQ&(6pIDqa|Psb zMjYt69)|V^r~Lt>D2x&C^d^k6fl3YF`(C^%v^o~Ltr|rADV(==o=qiiY`YeQ0T^Xf zWiu`?aEPQ`#kJf%=6-GB#n!j=sRS=yy;-r{fZoc%H3P06;pgEF7MY1CU>Nj0tUdp| zHb=*#`RHq_)yC0}2I>b}xY~IPXjwS@E;_dUncTdoO(fW--}l~M5ANQ~lopT; zsN+}4lt#y(*+73Jb|UQAVkPyC-2(r;k0?7@o1jwQhZG2jl76SS-qRMC&21Lm< zv2*0#Z9J6DNmY*a*QKmIk+ORrKW?lkhx}xWxMb*t9plFFX7%r)luPjw7^@@HmyXrl vg$YfMvr^wVZjsGR_|lv3C8;36KLG{+J@Wc19H^kj00000NkvXXu0mjfoyQR9 literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/bighouse.png b/src/main/resources/markers/bighouse.png new file mode 100644 index 0000000000000000000000000000000000000000..9723cf0ec46c6937ab25ab3953c1936a7cbaa4cc GIT binary patch literal 756 zcmV%8+D5 zkaI?M6=Re|3sgF)5bkJoC~Rd3SHtH~IUPa#c?9JR)z}@nhmmkIk}sm7fU~|Dy9j$v zSfVeAtw%iQ-t2)YGf1>0ZiG59|2l%ty_{?ms#=T;+0h;@W~P9du{YTSD>Yh!Rp=#nJTMvKf0>m;kgbB#Q~X)YQ`=IP6d3veScp;!obT{Xu8q^gCxgD zaq;B1D4@^|{<}eZ>ue{SW5?xgAxN3<$B*ud4i!T!LfxSnOs3+<6;x=U&tb_Dab;P^ zSNcuGNHjktzvmT7_g2?%7=wdDU|qG;h(U7Yq9Yhffah5X1}RhoOx;uavT8--=oZLU ma}9BM1dH#n2mdkt2rvMu;Tvl;0qT7K0000)c4Zf@?3XYQjaqTnIt-rPBJzVn}%!_t@bKQLwe=zM74_Vwu1S?<)&N-2k=0_X>W zTySQYf{k;=E`q@`3Nrf7(qjoVG}w#&PZKz}OCiz2G29(Sd7oZfAqX)DxPQpLLjq9FsL z2e#w*)K>^kj@BzNw+>8Xf$nXCo1SE%&;rjs`JzAA)v$wIUE}P`Srh z3!+g*uF`Pv%AbYk)~KEZzYxJlPH7XMdsH!mnT?Hw#c4bD{K;x+70=)1qC9ned+TP@s zy70!@fXz&77#vgieK^ti0TI*?Rt?0H%Vh?Y!C%b1cBb!(AZ=(!2U7U~+{yQ$#kN5G zR`^d7IysxkxDdtkn1-MTE2Ira&#U@3Ku3pv`F@N4v>yTt0Df@z(2J3eJ^%m!07*qo IM6N<$f(}7WM*si- literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/bomb.png b/src/main/resources/markers/bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8e3a336342ec237da25e201c1ecfb7a87a5812 GIT binary patch literal 871 zcmV-t1DO1YP)R1iJ2h!#auv}`HSx)!aXB*c;yJqYamfJ|EyJsGoRvZU0R zxz618qyOA2BKqOu-h1x(zW?<};oS{@=L6OAc7d}lcwRqbY=g#RR0P|*d)FCSnGePg zg(OJ`!!SY+1mKY67Wz5|!)Sva(2ZcrO1ivyRYHdaqB=tNrWKq;HYt;bWi^YkrT+rbyAz;iuVwv7@A6bd?$sU*$YJHx|s zRd1w&`s9uSI5V?&6XM**^W`VdpvcI6o50)GZxByZQwt6(%cNNwFiFI;EGUZ7!Mood z!TuxujO<%5^*s2zO5}d?}F`uauDw+n4H`k zPb8uY!luISw63TMTL=(Yv`Fh5c=X`@ZFz0Wx=4VYZr{ZVPnw#W8))|{1;P6(vuHt- z&q>&{%z?qHSB~x3*E97;K*Z`bYjgdV`<`({c@Zm9Q$$XRjDjeJOj{XFkEKuEyL;#S x&fR-6Otgvrhek*es{T3G2@?e4_rXsA1^^7|#?#mN-%kJl002ovPDHLkV1f|Vn~wkh literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/bookshelf.png b/src/main/resources/markers/bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..c589cadf8682f3f01990bbaa2da5917c35ec9b34 GIT binary patch literal 719 zcmV;=0xeR^LDbkvSE#l z<>Fc>lE%tH5E~0CA&r%7EVQukPs9&I5)cVkijB1h5{;5HBGE`R?z$Ex5;11M?8p0> z=eaWv(>u%Ed2`?WICIW@YGDR@Mx&{~rGokAa;c)+=`0`p?)aBG^dm{0U!o)D3(Y`F zGa=B>7o{{QPzmpI7D}0%IpEq^G$ZL|cv#!Gj89KrV|>e^v$ca0?W5>@{DBwGr?K*( zi^lC=$XI;HgvZt6c(T0(r$*2Ps~N#G&M}B{44uPB1xpHtJaH&!hKV^5EY{i>^IoU+ zBNX&$fogTQ6mz+8m!r1=1<#ojV$8g4BcZR`-NC)qAKzF@a~lPglqXPm;sSY!;R>Vy z_w_MkJbmr_#KZPJ8agCLas`jT7*w=DPL@on5M>(jbCE_)rdNtSCN~p2I=PR!3ra|? zTDZikutlE0-$_ldGRZPzUBob1(9M-9m{M9wh(uHpsn)KZflghB)Czin9j~nVLc&X$ z23c)6Dlx+n+V%4+pjh?Q#uq3Kg7cUJ1&4!3D(spN*|P`J*jfLK*~wMBS^tjR3pdc) z{Eg+edz=vl9lpDZ#cGRWIciG~TEjM`Fq?KgZKaYCQ-==>m6sY0js z&9f~$h`5!g3fm$Y9q#MAt`wG%3Q_?p7AcYx-+YI;Vn_yZ7SJdvbsV{K8a1!Z!8hXH z`O#7Td@=!8e!mUtMm#&;GLLGQk$IO6qBrG5WRaOe-0S=5%+R{yU60{|j!7et71gh>DZ002ovPDHLkV1ffn BLxlhU literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/bricks.png b/src/main/resources/markers/bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d1ee031caac3a759216f17dfb7f1eba56959fa GIT binary patch literal 959 zcmV;w13>(VP)rX%js7%!YRx)|ekoM9S=nq^U< z$rcD>P&+6>R|=FuDfElB?>Y6b#rSdIKlxvr=l~NX@6eo~X6c5@aVfdAfJK$;+DMWS0108H>wILI8l;+}uQw}r>Nc3a=q7fw#SjrD&Am%^04>Mml!8DNRjM^xuQK??rqYv#gGf z^X{%y{7w&sbA1khjk4xM2pcQk^<&hx(cJeE>FH@!H4S(7LF_Y^vHf}qY&v3X2}2rB zI0WD5&+fdyGc5ynL>4<1W^FB6eu0&XXE2tA*m|HB=kObtg)wZt00eg3mb>S!eHWDG zs_vERc&!X4JBKhUE94g?4wnmet)FT>38@iu1=0hpRD{V&IIeWN>D+M?hhbu9QlN>- zabqL>{<+==Pr0s=`SEq7Zvp>y6Uy^s7jmSd6Rb&#o1yJ2gqks?J|J6I#;}B}-oJMb zPjj(vF2p8Khj(pDkCPB93VE$5u_F5-~-AgfFW_fW*nNGu4FIapzQXt^b zd1RlD{8|c`OVd?vXMEYiPZR2QWKk`+Okq9CVtj@2hA71%`8Us>ogXxGU87EIK36L9 z)o77Gji0AGw=fXVl}(E{?O?i0?6w@yv1EAoitPX4vs6TRDE8JD!L*^PF%pS5JDXea zdc5RI72<0Wk5l4ynxry0CjOWrn#ghKHSCV9Ziojh zt76pGZKbZpK_r%BX!r(^nc33x$Sn7~?46&7zka@F zMm_g^`{Cz83*ARf51Zb$N-;kf`)%O##Km*B$36V^SX$E_|0{%lr}sZ+l~a_}PzF#7 hfLYZA{-^#FU;soca7ggQ=hFZH002ovPDHLkV1jrc&W`{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/bronzemedal.png b/src/main/resources/markers/bronzemedal.png new file mode 100644 index 0000000000000000000000000000000000000000..83c06af3ad5cce29baeb80a915343a07bed32c8c GIT binary patch literal 657 zcmV;C0&e|@P)1H0iTMe;E0)4}@+s>^h>B zid;HR*TZfrM`}H6t}I^O%l_nNe>}lzWd@&&Q%gSiRj1n1O!s8!C zaCQ#WmBqo-JiABGg^pLSY%D~kF2ek>3>F%La(Eib=xN7zbNv+}QRm4$0y zeFuQ*Z@`Mi2|ZNL?vnT@=NY3m1aA=t5j5E?g=u)Gk~JJ_2sU;z}*FiKNh& z#H1vKV$y_a64N&K;hdXBl8bR*;GCIn{(H{MxlC16aASc(~UZ@8REs`qZc5PLMF%lig4CxRbe27@u$xM%{46o3W23k5z!w(%%&(H@S~A{ z40wBhUYlQInoVfg5S%Z5p`!q`-#~x98^^O-wKb3NoWTAg02PJEd75H!$C#Q%>=76C>2kagnHts%(LxoO!%LAV?b*8OAwSei^B+gA|fnmW5 z7*{kuB6=|M9f(toGtD)uF^>3_3n|lvZ!)m}v8B*kVeN^7FzJP)=bYPc z&o8dHTvmN~{4&n{-e!`gP9Ob@V}g)>^4x&QUcUW=PWK&>avAMT2Zu|gO>AWuN{1#f zQz?4?-x2U(twU~sPOpnF(&&EZZHv_DqkkxY@nm`=K@bE;rxM@m0FoD-KKcg|7;9mj zLbKiW2i0tiK+)-=e`p65xv@A_nG&Nyby`pjq5P=RXSXB}k|)}DBbB67quKHm2avqz z^wGa%2RxVKX~n`3cL)9+ z7#F}ug%j1I&^o}K2ages?UJAn&gRJb>$ov@5k>;(qkkYlfC)qr7)Lv$g2BzJbEscZ zIC%0jdi58mJ(9lrIken`NGtE(Y~lRvr1<6gGOpY&V)5xLK7V_UKm%ii7&&5(T$6wJ zWY+t>{#*v*e1h@u=;P!}hH_GX+p~(hOQ$fg11Rj>htTysa!o$ozv_Jl(hQ9AAK0~f zssE__lnx!%VSdcRX}N8DcOodGp?BYs?&VydJ`X2!X02hrpbp+wz Q0{{R307*qoM6N<$g4uW_yZ`_I literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/cake.png b/src/main/resources/markers/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..0e69b3fa4367d6cdb87379f4a2261a59b4b3b4d2 GIT binary patch literal 792 zcmV+z1LypSP)|p$pl%)1`@t?2IP-0N1_}6I^Iw$b;Th$Ai zIkOUv{eu^bkXh8Y{}O!gh&|zC0{7oVf3c5)Obh0r+?(U3JfeTCJyE|Ld~NV*abxu5 z4|P(qbx4+u7h$Gn#9pLY&tiO)F`00g@W4uTGO+Y#bWcHGF?!P}$rEnb4QGP_HO<4} zka58ae2On2Y^~ucjiU)3qC>)o7S~9wD2%)f#h&C1{g%iWn`m<#fkpO|Y+y?Zz;vat zFrUL=*bo>)x(LMd*N{3jq|*izr-D|Of?P5(K_xKw8i7OP2D5;sW8IKEUZ}*Vmv~s5 z1M|x%xVyb@c#gu|D4|mUdfP}pCy(K_&GWMmhiF~xDxn}- z0yas}mt+~|ARO;IZ#X-=SJE_*wFT$|GO;`c5(br|0~@perqi9jb=C9|4M%JDd?R0irw80(T!t}0z=q%uMC-~jULVepAfNOQ9g z6aiMzMoG6|YLpFfSZ;zq*WG+^7{BL&`<+;kDaml28vxwoq`R?Ff}ooaN_4tmR+a2! z12t|}_RV38IGyTMn($g9}dj$t_%tn2~yZ^%D>r~k&u4(D~3 z%%9;H8fqr)I#@}BXgS?p2yf-y-+un>4NZm)zOGh^77EwFH&XxFDRLAkiewr1E5HEK WNHoXRXuswF00005P)gv(RQ~*3boXL z;0LrZ0#MW2}Y{qJO~nz>8lAhEhzLAX=eDS`ugqrl}~j zyY22w$C+s`MBikRo4tF_ojd2AJEJhhaFC_!IS(H_-cnWVNTWfw?%%uHDPoBylk86h zKj+TvTgpELrlz02;G3>D8jWTiXCz2@y&eplJ_WzGxyN!CzN~zO<2dqPRaI!3{t{Eu z&)EJ&C}j?D*><_i^0`&^V2()>{`QYDb2&yRk-3SdlT1&i)5v5pFbo6z{e!r9;~L7P zGD_tVK7Yz!p!P;Rt^1>>%3L3qlA~P6OlPWAOQWSTC$Yw6dDdV}5=C z!PXWW@9B{y{8Z`#a`~Lhaa>n^byZc6Or{V&8^^{*0j^82vXaHgV?CHzYr(FsTQWFQ zFW_pg2g@8AzA!Ac5VGk)u#u6ASX}%F!!#vOsZ7 zv|FvB(fA&)Fj z+}y^icPWHIhv5d23IAC=9l>A_9UOD{ z1T21#oC0GFIWj-r9E-*zHLuUW(XMVDYXPOSSwPd!-qyy)Ep%W!uP)@D=;PM*pO5jUa?t1eTYv!o(12EEkpV;%00000 LNkvXXu0mjfpI=I` literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/cart.png b/src/main/resources/markers/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..72425907d246f25e36abed030f8699e5553e1e4c GIT binary patch literal 745 zcmVBsCpFoL)pN{Uyii_B)Vf~AvaXx|H_vwXrgM-9fBn88G-bt+&eE-FMg6vU>D#dvXR z0y0leG8x)*$lYva$%$aZ6RzN@&|3L7MZ4#ug9=%%GxT5BxLJ zsM!5GR>J3>hI79Yim{CA1NZ#9qTP@wrAQ_XiV6>Vt$B-GjjjI;)#}{r_P)`cT>}}ec#hdy!*zlmyjfLT%hYZ8k=2f z29JmVDJ?C*h0db-Q zag`tu6obp!L~)B0F04hs!e-fWL9np!FIZTLT3Lt|f`$77+}0w6){1Cgk(Djfu;K@q znfLacmk$ORL`dN9PR=>^<=&eap|wUkpV-OjRHUJl8gxYMiagMXAt_}gDkq~vtrP;U zc9@+hfgq>$t_wJl4*aF=-Vgb%v1t(G)S||f5x?FkocMZf?mH@HmlovI=)HLX+f=@H zJW%)wxc{)Sd1^sUjo#}~WT*kxgpDQf_ z=WBp>izV$c&8R?krb){CiP!g!m=3GV{oeqv0>Jz|F2%SjxZ@ zxGsL|j9QS_wUo`+tf^tGR7!93O%@RMewtR3tzslx+}~C$$Xl0~4703ZtvFdN=!tK= zjZKRB$-`mmjcxlz2)L}~=IZ2h?+;>uuTkEv7J`-J3B<-uQrY+bBIzwOpaDZb&?nF)5K>qKau7_s-F0S9h=pEG z2X@%Ko8NqkyVEVeIap`mjO_zh1O$E-$EqQetV$utOhEHTYc0&j#I5bsFnGB|nuEg1 zPUY$H%pnMcR1(r!=i&AJV?^B+beMR}Gg*Ug58v(@4I0!$oF;nWr+7iGD6ThaWSD=eeiJ||ETD`v!Z45C;*^lvSsMAYk` zP%I^(XIJ1AGt6op#cR8TqWN2hkdi>z&%lqujevX}e-UPqF+xO-H}~_r#x5f){KUPESg$5I{Y%WJ00RJ1`G% z5w(z9SeBc@)I=zPh(e*DvIs_zlnSE1Kq46EK@gP8LLy_9ts;w{T_epR31kXdm5ZXR zaqi+}ek%Y@l3;1&XaGdpWd>zCpNB_OC76-;Z8Tps~5LbK9NbRS?Okue#>RZagR* zgf8E_qUXQP>9LBoNKT!8Y7=t`$5sDrbey>W#0&UPi!G8X}S zaWB}A$+Voij%u_Ehx&Hl>8S(w_OXtQ+w(a3=ryLF)zFri#rx7YlJ8OEXEA*CrJiut zx_F4b;Y{!2ci7T>3?lpm1qadRItqvPSR|)TpE>4j9eZ%{1@V`y^Q>EL;*5yu5Hdz(wgJKYDv31#k4af1r*3_dW1e-*Q;5w~3;jGM zj#LpjS<^&;b;j}HMT_Lr=`+WCvx$>Ersd|O%mn6Pz9@l(kts91d2x7KnDVgx?f{gx uG^NY4Gb=kitsN)rXIX8Sn>h1ZfB^utHUm}{Ix+hI0000mKa@ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/coins.png b/src/main/resources/markers/coins.png new file mode 100644 index 0000000000000000000000000000000000000000..28d59ee7c990e82556ce202106ba6e418319d690 GIT binary patch literal 672 zcmV;R0$=@!P)jJkOwB1$0`G}kTSs&eXjTJxC59a}RHQ4GiE zP(uwoC_j&t%`#Z_Y-2fCf=E=5EnWuv?_j|mf>xhmC~4iHK!Kx%hAX?Y52hsl8p{o& z9Qjb;0J0~bhS_P&!^6ZXU_>H_#58tFk~Y>}BVX~zc@8LWDn*b20oh)~>J3W%6Qc7~ zK@mx?fW!jGQHUfMBksi%NL|++v=kWZhgN}Bj7V~)NJ1hR9c5Dm%M)k5;7$}!*X8jV z)@~I@auc184APHINQOj`Svr|SIVR`NIj4%zseeeP(}8<_6}i$y0_=n6A(|S)rU9TU zvCd2L&I~R*+PPy0UOm~k{yeF@Q{0t^5lt37?(L4#KS0000y2_ z7KDB(vKJyD2(oYxfn-F{qCORr5WNr)^db5ZtwKf-y$C@cq8Ubr62mA4nJmmUrZt1r zhYW2g*1(yY&)V}mowJQ18?wVaT%PCtf9KwF?z!SfM-&he$Qpm?=2gQm-6l-%_{Rhf z0Z9@;RTk&zPZ*{F#U!C_8V6+|{0FwyVMDzG6;_lCkkNpV&ok~Pp|Q8RX&#b+PK9=C zlqC31w>H3KS230Xv>ZyBRRPx11}j`^aHBWoHw=7~=CfM+o-K8768zx@kfL3(dTHl1 z*07ctW+ghx_RXuEn3@A*D#a3|uv01LHP*0}8D^E7t|Mnq%9OK3%BQ-hacNk~46{^3 zBTsQ;3(7OrGQ+F_!-P~kqR`6=V4?CelV^2pc4%<)JM0w{LpOO=?fiKRL4VmEyz1iic!g7}l z780s_BP6y_Q&rMjX)PQ-9G}LW?g%F1;R}NgE#xvtrfF$I%dwry);70QyK0*5 zpL2ujbh$H%NcAU3H8A>i@#C%evW>(LEN?`S*myqd(` z-ggMSi98D3JnCCe!&&l){l1rJ{!r5CpZUCZdHd4Zytemn%R2Z1qX@hR-Ftoe_@#aA z!SVmDLHz9&(dzB{(;$X!nABaEj18O|etfNa_myV}RZ&qYfJ84?&?8#dc$q0 z8oQ=Vx|!-kyLC8i5oCf2Mv*cdh!1rr6Q|G!`m~2VOhLwc5fO(VZj7aSkSSwhxOE7V z%}Q}AY^7FBZP@xJX-Jy3>GJ2MH@W_9N3hca=iztG`JVIroj(%)k?N($F(h-pgym}3 zETjsSC5*e zSUnRNkQ8ai)B7dHa+=)Oag6*Fk}OlNTc|CM;@|ZyuI3=6>oKgF8P#7;UbYj+c7nB1 zc}VN|l(D64B!3^F&6^;yQ(5Zk>Uwsnznzf|#%P0Dw{lA{J@JUZk0`qpPt{q={VOB7a{yNyYL);28!EUlrYdn(C5Dwf#?AN1N#g zDV!ZG#B7}Xg~l!DCqH?7-y6}*U!|sV_jUSDsAhwnM2(isCaA(ksf(wzXqzkt$+_@0^palg#sNxsZO$3WYx^Pjo(xzG= zXeN_n-dyi{GuWikx^Up~9%t@7_q_A&BWA|`e9E7qSqB()2{2qiD5$KCfEL5%SV(wH z{$23Pj(b>GPT)x24~!mKlD`gS=F(VLNeZ_17nVtX$BDzs@L%PD>K$pkl;^^kgM4&k zg0Gw%WPT&qEVz)*2$tJ`4RYrADSj}0jT=*7_u@D%Z%dUimi+*~-i`b7BPjjq#Ax;- z#*VGPtEU7T#;U=F3|4|y>%!xA130<=5oqlu787mgZ&PwGH!>#FKto6SHo-{F9)?jU zC(aWi%2j+4OK?D<{oJMNMH2LC;q=f}u5ZZmiKl_dFSpU|R@huaRd>*Z-U;inahs%t z>EcS~$*;F0&$IXLOWyhPIMj{WL+tITi7E$XCK}p7ao{ujT8KagXapKz5QzLbdK-&S z6rEE;!PKhmPFK2Yw?kkE`ug{wUMoX|0muXg(5yv~Mptr&sM1!Ek-<#j3B{9Ww3@}h z4vS>Aq{cXw9HOX!|9&p!q9)!rM+%d>cB6Ut6`A?`Q%}g{a$DZQ z%#)`@G`%0?x^4@>v*$0~ep@YxRHvmdl(VGv^jP`L4^UM-Z=E34oJj0MrSj7fM#|Y@ oUZoP5y@|SP9RK=S@_q|20Qt`l0)cqd6aWAK07*qoM6N<$f|e{e!T1Bai@#8xK6ALSt`Ds!U zgJE$w!x4r~upuBeNDL+qQVRo&AX69_8I6G^o-xSIWB9ggCR~y$DjiIti(QyHiNWT; z1rwm&voHfda$rLYlhYZ#Z(52q5IOy#8P3n03Dykco(1bgG5}#nY&^ryJ)2N8v%B~) zoL{^Ut{E1HENGU1B^ZDHMEDoxSD+ZO8uT!Lhqh5*5X0XKC$V~g*}$CP-1>DOS1`g{ z05<@n+1SUM;or?Ga1BiAI$#=I?Ch4UU_;fHo8W8^o&;cN2@GxNd{hQ%GD^#sypjxcyz{1W3 zEO_G35tPt|#SXeWC><~$WhP^!%wmis3^C+UG80S@4$WBQ;juso00=MutP2U)_A3w6 P00000NkvXXu0mjf8D7L! literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/cup.png b/src/main/resources/markers/cup.png new file mode 100644 index 0000000000000000000000000000000000000000..9e234da1c5f7112d9d38eee45866f58ac517521e GIT binary patch literal 724 zcmV;_0xSKAP)pjff_;jiX5$ z+9v6=N#~K0$9QI}P`mBI10OSU=bZC>=W&^3S=fnj?9jv)FUOr1TM1*luer6YpL4ON zRIy-~CN#}({>!olo+>v4fqYBF&)MwqLk5J!a=A=_3{*%q7!1}gew{${%>$&Sr@+XW zGi(w7l?u?bKZM;~mqLyEy6>cyQ@5D%^B3NK_-M0RC%R7|e6be3WMO+{{1} z7G)?HIjp5u&^hoHrlx|IN+lfa>O_I$TIC`R^jXb70J;DE#H^`I@#g6e87p_;zEn3G>PFu#CEWYfEq7d2A)Xjk#SBCD5rrG$b*XTWSx{4@T2=-Gxd+vPuk&ce*k|ZDAy0)}*X+`-l zcy}=TWO(HMEVgXPc9RGJLd~{w8X^`5>fZzQ-*4k@0R{k9H5wIymHvPL0000PbXFRCwBile!1e#xWEM^@UjGdcA>KMMqhdy9uWG<&Fj;kq8<@ z2?m3vn3wg^{O?XfUIzQ@d+-F&bTdJ{(KHQgeACSJ;uHuXVVOh~{T^FJ+f2mOYCT|C ztMr=t089w)3GXnswHHkSD2m)`rgAXA;c&cyY;0_;mkjfEGeut|aiL=xce~x&BO~6xr%3?>LEz==brW1&l?Iu)3Wi~eiPPzv z?;hi9VD3;5eCY9b4)|*W?$Wr+WdP)O6q z7>leSX)%atjW2@I9*e?eQJXdqJ%o^mHU&~jkCiD58g9feXksL6D9TKTtSs6HE$lI6 zHu)$Yq|J=?`FH-C#URn9|8h9b@7(|V=L42bYZ(UGE5WV?@bGsmx*O9M{g}o-j*w>i zChE)I#}qdT>t7(byn&o%zco!0omCi97hvXX---40 zZP>tnp(XP_^*umiFj(BBXvTwa^m_Fmw$o+{_k3)1XmoW#xX9H1|T0aI?D#A^Qf+MTmI3Ili|EA!d7m=(-hUDVAj2M>n&kT(BF*O4+-~*R1P!1#4IXTe!_*JjZKzZIZsu zaFmH!asir_#BBd7%ndTkK6(j3anXYfVqe8Nk^+pA&0{=g*HEoa7=y5)p{Y>G$#wxl z!?3jp3oaVpk?Dbw<$-%CmR`d#2EC1_>jn~u@5rg~<5Z(Sx)_?O!b$saWVp~28HP&& z{ZX}ZziRw8hGS*JFtC`KM^WQ_F#d=Pn3x%bLJcI^*QFz6c-;348WGBW{w{EVR!2mb zoB05am327-Dy=6z6(fQWnpOx=gkq3l8U%7>okk#D#K%V{C=say$chY(6}rpqwZkGT zvq-0at#>A2nkr}9FS_#WN=^*z&4uVDpKd1#b}yUC#rTi&Q-A>gX_iQEIL>6700000 LNkvXXu0mjfGd5k{ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/diamond.png b/src/main/resources/markers/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..e25a716813cb68d806f026ef7163e2b776067747 GIT binary patch literal 555 zcmV+`0@VG9P)%I30myQZ*qp`!0jJ@4z$0tDi$6Ecn+lMhgh_M~xV3k{^0dOP z>cFoW9cW)SIqwzN?f`d9IBOJQMI6O&#YJHLHBfBsnk^XW|Z|MgY+f( z9lKyD44m9Nuuk#EJ$K-<-1)4KuP55NEHjzNDn$CO?Kz> tlC5n38-?NG=Zux^d~%qV{+<5{FaYI;!||XIK`j6P002ovPDHLkV1ff#3CjQg literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/dog.png b/src/main/resources/markers/dog.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2dc26f88fe14bb56f6c11389f68ba66b4ebfd3 GIT binary patch literal 879 zcmV-#1CacQP)3nr#e zX86EVRXt@dUImWeq8LHtiT&t%-vo=rgqSSCH!*;yrvtanmZ4&U4L^T;1<#uRMI@E2 zOmCEd=b`sY6obgkEJpkNHyG-lCcg;(ft;+);pHGjOK*DAF==VJj%b=B-W?Sv2g}z5#MfMqp+f%$$x%U#Nj2O2?gxd*9@j ztj#Q3Qw~*%(%cm+PO-utl;TZHHggCCX3>7@5`wc+FlX4oCEGiWUu)TCXu5vTclhdq zwr$RoV~Q;C#-s#lQUV%UTG95-jo$AQ7#{crM}ZBQg(Vnw^&;8kl#X0!+CkV+eR3e9 zud3!nx%+d+*nG$zZ<0ML6^#uIxLa3;Y^w#57)ChY!=m*3FXwJPE+>rp_a^ExR-P66T|)EhuTQ3|M2NwbClHg=jAT}1^}Kke7g-(ewhFO002ovPDHLk FV1j0rkbeLG literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/door.png b/src/main/resources/markers/door.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4651e597df0b55221b65824786f5bbb751c1ab GIT binary patch literal 606 zcmV-k0-^nhP)vyz zTFo0MbjVO#SH@!6{D4sj)*4uGmy(A@VS8t{15L{R!%8V*(sp?F^al1nyv5J`_gLS$ z14A>L(~*H<{KW-_(Y%2);liiAC;06nqOu6S?GvPf1pP*^yMv>Fo=E`Il|kevF^Pbw zZ(up|-voSy95WnGJCo-UfSq_SBn0jWLBY2T_Zet$7sc4iI0sD=V`pW#K24E_fvX#P zXxo+y1`vDNBx@u=nz>3zAY;XlOMK0{4l)86Xc-|LC{orQ?|vvrkaEPM*XI$sUu?z% zh6@6xBtRkq2dm@p1P}(EjTDwn*6_`wPw?XN3apCdaFh|8>91!X=S+bc2q`j!+(_rg zJ;a*bUVd3640cVzz!8osFUgTy87&fk+=To#lQGvcv{4xqU(4OEYcMpZYlo_;=H%G5 zB4lCEC-u#^XCR|%nmC%g`o7Ldzfrjm8GZ|adh_uFE-yD2=?p(1#N{)E)fN0>-MfA5 s`o_7_JDV3)jKcrb616Iy&>sN?0IKWq#ew<8WdHyG07*qoM6N<$g8oPisQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/down.png b/src/main/resources/markers/down.png new file mode 100644 index 0000000000000000000000000000000000000000..691f6e0c7c86f88608e3a712044d0bf2b15d854a GIT binary patch literal 381 zcmV-@0fPRCP)EKoEw%ZLQCtk5Hm0 z@!kq57WxpPS1&$7QF_<6Q1GA+(1K`g9))_*g9kC-!K7rz*)&S9Zj^fPhhhHA%>Mkd zVU37ThA}43n|)5l8QYFG>YSbL({cRkd|oKW2U>^7Sgn?c~51DT;)X%j_2UZC8I$c`LE}~tl;rOoBTyJXCZ{9-C?s2oS z42uhs+UOpxuHo{4C7q9c5^yP4SCOzVI~>4;9#$It`Y}0?jU&W`}}lH*>z_( zZ%|nqJ#-T^MGJy1MuoZdAokK9AkjlTiQN#E2!awSBP0rXDZ&iN>LKX@y>t;w)Ud+U zR5IP!ZQWgWXV#t0x4E*e{^0PP^Zm~G&3C@<45#Zl7&wl@(`P+CijPuMuInkJnI%4x zLzv)szL%ob6W+RzF+)D->ej8Ih?0_GxMUfU-3E>~z+f=IXf(n^#S5y2z}(!1k&%(+ zaCp9%X)X(B$wlngz70d8qxe2K346W_SAiQciA5t3DhwbTRN$nK)E+#5?w;Os-LgP3 zsX^y?MEd(-ocWE|z#x=YFOX?KIC2aqE5mG25wN?0M5DO^$vAH|3m%69POlg8=1pnR zuw*>hd?*B^uMg7!g-)!l6bObw?-%0n!%9a7#@pKwPNfh{CZR5-APQ!PW-}agLYHWR zSYCmIs{O%|a2nr+hi^~#{ctulL88QBiv^`tE4D}?Jd%X<R|N90f~#(w-%eQlSor=K=^4hUOs z-0JwS(c^JjNkF9*;)w*T76H70$HLz*rY6SG_4v{8cW>W3XSKNk47*y+Up(zzS8$T! zc)Kh+p(qN?lO7HQgD-t;m#$IHAeqW)ms`lf*TRCrh(nTeNwi}BzP*s>?OE({%G1Pu zVa1u`RRW#&9?Vu%R-W5aQ|%B03r(R3Y-Mp(RpnX6XXmdH&@|2M@svWy6HrrAjTl`Z zTUpHZ8K0eR%oR{IE#&u4C6VJ{U^Wx2b>Ud=Df8(V~%ps1jYwv3=%%l5i0DB2W}Z44tJBSp)fQ1XWg)Zj_t>-k=q zdf$C_I^SGxSPjfQ_nh;6-;aqVR%hzos45jsSRaW_nQZ&+P7l`0~I@O zn+~0Y>-6qD*@WH48{kz`2!d?D&*iW*I)e1@08j|dogVn~>MsG3y;N22!OK@+uVnCR zun&cqNrdZbuu68otvig;#ugMSQ<#4E0DflKh)^J^-h5QAy?mxu?%dFeXXZp9zfkCsbh{M- z*LS5V5loE2PL{$+Bw@=8<~|z%TKXm~dE$sCk9kXG!v6LZN&uGU!E#&ymLT{z90`b} z&p7kM5l>zuphROO3)>a4O#x3TionE3Bp{YP!7*tl8&QXUx>&L&%>$ zCKVH~c9sj$g~9S-0*PoF+^c27yKu==prvnmBYEP8C(j794Nu>iPk+Z|AV=p#BJ8@~{n!Z5(l=zu z6GuFGQ4fHHH<^5gJvH0eaHJk3$t1LGLH9mK*z**QEo~|*hZ2GHjSY-V&4PIHVgcNp zUU+0WJ~q+0zqSU|)qCKi%A$r!vx3b{EK1ccbMxr`@v|ewBYG--hO`<7o}8$=UFABh z!uI0FBp-jd5WHx6KXXqU-mv_CuW{ShCo{Em$>Jdw51Dw`+n@7q0R{kJU>oU7Ii_a- O0000X|PU zO0;@ONlH=TDvEH^rgBjswJCE`7!nB;Vqm)#3GUiNP>Wi(HzLVMC|dLbLL0-M6v3Cz z=li+$&YaHNo0JO!JD0f(XXZQeo$ov1Y{zk|#8MC-{2f|IRG0G@EKZ?B0-hlRe1-Va z#?byuEtY;vLt%rk1!H8;S92H@20v-vgH>%1@ZQ%NJ3G7JJsN?;Kf)nGl8bC5jh=~b zNWpN6vIsG?QF7%)RIF&3C?YFXeI>$K2NRIIka!6LX7I>pV1BW|2VIPT|1U#%`K-PgNLJ>Y3~WL@AOWrB3B#bH3Tr%x!5@rp{2`Du+4L! z>d%fb>k2TPW=qML5i-3;!u$ET0bdGq^aYtYN?`7?Hib#T6+pyVx1+ZDVhJLh1MvM-9trqro*G}5SPL} zu>psI6o=)zLj)MKP)u&uF^Gies@%D>WGY_JS7a1&_A8)@zFuMOkD+yZK+V!$2Vgnv zwmb6+ilWkjB>wWGk-hp# z{0pqyDN(R_Q3o)eXVQ0<$(E;*_Z5=IC3sH2g#C|e0{m8p=taI2Sv>fJv(-zZR9~W^ zC~fjdI{Par22OTz-Rm%sj_$qV{H2#X|6Aj5d$Uzn15i8Okl5au^MaWE|8sWMrT_x~ Xu%x*?4BFz<00000NkvXXu0mjf^X4iH literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/flower.png b/src/main/resources/markers/flower.png new file mode 100644 index 0000000000000000000000000000000000000000..ba4b0ab7a843e51d13b5f1b69b8733cee1e8886d GIT binary patch literal 920 zcmV;J184k+P)M&Td@zHxOe+nQ_1| z3K2ihE%b+g^k;182D|&wugY848bc*FFLkTVdH0@Emto#I)$#jx!V&??vNS0r7-P^h z&Egub?7Z~z*td7*&hsEQf!<1>PztMi&HB3b*0vT<4g^F`S1+FT4PIxQH!!dY%B>)> zQAMCD0xM^|*|2q;*HK_Y_l>{WrxLSx+#SHjR2EK`9crJOwc6YEZH5#K5AHntn_$Zn zRy+CAZ%4dKi}$Z?Zh&Dp;qew>)He=qX&H382Bv8UzV)N7r3O{iRd6_p5Q{`zO)Ix1 zw(Mzo!iBKTHE(Ld>;K-tKNv$*-72D$n8`8l1&d*72EZk18|(4vSp>d;2wJyqg2Jf^ zs0C)^G6onYvFMMZzG>`eNx~CY38yT=$Ej(QHD172C=0H0YFAQgBpqW$oY9Fq|w(iq&$cz0_8&e@q_2Dai&)b z0c0%~PHgEwaZ@?WL=c9j0`aF|{PIsHGFA~;Dpj@7GgpuPKrXysClCEPQTcsENp)>C z+-?strVC4+*-_r6Bvuvyp)Me{)+CWrNF@^(8XQJwI5^RH`S3ClQIxFTu@OQV2>9a& z552>!PzOTYK%y52)A!HOBM7~jK*$$|C3Li?`<5vEtO0`=7>O7x$4PBU7&(l@>TvGE z6)blAj}KWdbdf|QOM^PZbjn1^KdG8G=iWh0dA(bv<;LYTm2*yvjSRzKv!S_h1D2N5 zU`54pnCU5GvPmo{D}}AlhL^oh5E}Pi*nMF8eSYcY+4G5LG&&v#A`y!qJmQ0E(E?~r zNg*gOx1R_H@jf<*$zT|XXgsEHc^eUZ*njtsrrYjFAu?Gr^RLrYxUFEJot~|rsyMwy za%VREV5om!oAU3Eu8VsV?u(6T*(qu%L~FxN=jMhVdq`aVW$I{n#H0Rutv%20X7Z^4 u<Te z3L;=)DTG#wz=lLz5I4GDg~WsfD^MaJAQ}}!6L~6IHY9G4l^Xm3wHpNj2{up)iIfJ1 z5-3`<4=d2|o`KOy|K6zj z-rgQ=)YU1gDt!Y(I~?;ikwjsB);~CDHlMqCaBzUdMR$OEH5d&BoXO9}+UhE{0|D|T z7Zq8UR;z`_v;6Mf-HvM%fj|V&Xf$Pa_dCkV%8;3P%8;9T8j(m8{tZ7WD=U$%PlwOv zV@87!(=#&){+|fA6g=$io#h@xlgWh8j}X-SRY^-vgCt2j!o}c|$K9pe^f|ExT#1V| zYl-5S--Ksn1@5IKc$SwD`}I??+pJb1774Es3q8G0<^BDA9=ZXca0E#@9p*pH!?)&r zJv}w`vb>_Ao-w(`T4LkpVFmZ#QI9MLO7={k!ZkEBAQp>ZYkLd2Bprxw$?YDQ`uJf+ zuh)Oe&d#YJdn6h`b@de_CnsZUZ0s-s`i+i`A}=ow))MQXk+a**U#Ks=SSE3@deQ~0 z0)^A*gxBkZjz_8%(N3H8&aT-y{_f;G7z|=zVL|Bu0u~n+Lli}Yczk>uLj!%KM~yT` zv~#4y<+v=ZODsFb1Y<@9E>~6k?YMYcDeRYZ2|VSXdWS@Lh0d<~JB8*#X116iZEPSV zH5CH)tl>>VE9qpXbBo0ya{Ql;RT2w_!!C_RbIIXwz~yoU`TL7mSy{MVTZ>l{6WH9` zq@Ixdem~M$iv z85w1@Nm}o8@YLfVk1vJ?RUDCrRLpUL<6=+P&z&^RzXcconJh2WhKU{;00000NkvXX Hu0mjflC)gi literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/goldmedal.png b/src/main/resources/markers/goldmedal.png new file mode 100644 index 0000000000000000000000000000000000000000..aba79c3b24732b1d1eca20bbe69641512899312f GIT binary patch literal 664 zcmV;J0%!e+P) zrnbp8KQ_tkb6&P7yQvu%cHhkReQ(~(Fd+mw_TehqaBM_{LkESNZ6_pzVvJ%6M``kf zFgqL-9+Tv$yU*#T1+1h1&fSD<14qY+ts?pOTGY$&3CLo^+IKX*yhH7C5{$cPVYd)0 ze1(4OEIbA87LX;@vuU(yWmruIj7o9^9B_)+l#`gA0=B@~>hjw`BVeLz)xj9su1p}f zxsKxRY#Zad)Z4^M!|dF>lX!LT)M2I_GNI`1bxy-UGh0IDV+N0wasK5G@!IolvEyV~ zE-}7gE!+~KlBCdz>y`InlVZ8V>5{~FIld( zO~YwKiu39;L1#N0UrU@;Yt|UMjLK31nlXyN$VK!IUubu?x-VEnOofdtZ{|HEnkq>qCYn43TS-y__6JP-TFasxq9NS3%0000f2UJ~!Q(Vc<|H*V`z(49MDz%GPnbtQ27pkt8Cst86E{Q8*! zmt=7_!pk_R0B0TMs-`hm(}qr5P83m4HSFX$E}K8&w$)ELP$W!n^;_+0z%`y)UQZxb zVn}5f9tP=j!H09EnsGH#-8b9v=XlZj5#Y2+KflLetiu zn2rTkX5QXVl2JTzegZ7i0}I35-Z=y~r3C4y2d4h+ zDwkjU3%)i5N!Ftz8P_Y!Fnw@zZoJ7L;k%ISa*tUIP8U!vffp5&6M@>O>|RI*ER^V> zhJ)Dt;#2HnvmH$a^l%14&(FMYxQ?AO*t)1$8g*6Py{86=y030-BN~j%pSb_^9@Ql&XtaPC;OT6B?o2w}})hOR>D4nR=iV6SYS}tD5WVSc(<= zLeq8%BHVq}VV%u^N;Ztl_XskJk!r5D9VV`GxK+Q$z|?)jTaJH&@*{?c*Wr-d26}m(?4YeC3wY?>&6O=icgbnB4>!#S*!|Qg1HtJ#~!+wVwl;BL-S- h$96GStHFN(1^|jtI*D#yZRP*~002ovPDHLkV1o1_I{W|t literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/greenflag.png b/src/main/resources/markers/greenflag.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c61b07800bc14997ef38bcc2b42eeec0dea62f GIT binary patch literal 722 zcmV;@0xkWCP)Nr&L5o$y znjfZZNM4fnBkwu8n-_Yq;J`4uv$NlPGqbAIO{mr?YMwT zswe>S!3Z$iRuxSHyn&F^Tx& z7}kYDif&Ze34A*NoFU*YCcr3V-3H=4Nxc1;K(;o9Z}Yd%5(4V3i36L*U|2C!jf%Tv z!%hTQ7^gb>aB-j$%%j6~e(^O@bG?YP0Bgg5;{$B+XUo&DD8b#+6A1c46ly`!e5gB+ z0K6<-Pszx^rvg4js>+qlbSo?Rk!M#iwU9)n0GwzW7P%z@g5V&!nUjraG)k<=R=A(+ zZ#~%r*Udk|#~Sy=retJfR<5eFJh)hTX0LRqp@@bxa!vFvP07*qoM6N<$ Ef~s>x9{>OV literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/hammer.png b/src/main/resources/markers/hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..06d69a5500569eac074fb5550066751f0748c6cf GIT binary patch literal 814 zcmV+}1JV46P)92_k7 z^71M+7!0~y5CrhY6OuqV1A_o?JP0%BV7Kb3%9pY%_jvnw$6U_IF}dC1iJ94%aGvMe zGzaVnQg=SY6OpJgrVd>JQP$W&6b6br<)uE%6k=_8I(RDSBs#lZV`zA|l|@fA8jT<| zmcyQtbBsh}H&%}ofm1~NqbQ1SI93}nGcqiqtl&UUAnKo35f*xojE;?ggEln~4l3b6 zHLxU97F|&kuoSG663hI;0?V1l*!U#UQqMt>BuZ7aox`p{^fIyn>SRJldfxS1yz1z{ zyZ(NCM}0#hqNAg<3{UTJK($NNqg$Di^b468uyyyq&(9xqk86{cmX;A08;i!K7Pwqa zo3Mk;vA`-LH&I1Szm#0zFIu0W zwASkQ2JIQgJzShOGK~_FQnQ3s`nXBk(c?7qEVy-#Ax8(U; zS#DwRfT~wUfy%nYksT#}kQUx*jtomV8WWDUo$avyUn{>${D5>sUB09)YqM|0c<^BN+SI`Y> z*Il=DXLfgH`n_>oRO|!k#jxt3_Q0&@v zlVs*y*A*0V&cGD$STcRWaqOE${ej-#jV`FQwO)hL>Z(Y5{IHOUMGjKDFW9mWxOfR_ zUEM}KlR@n5P;VjiJ1T73>2JQ=fzs4xQA0(kS_phbQtE>Q5xH0ijv*i zbPS{wU>xOm7>Z$le9FR6Q4UWaaJz>#fc&ec5LD-!LO@kL4e`QDX3|hJUDg;jj--T& z!n;90_kkP!4RNK;s4g{>6D~usR4i*k)#11uH-C`mS#E>I(K5JCD4dHJ~@S4-i|q{hk3sNj=!db$U+kBU&4p^ zNPFAz@Sp76SmGBL-5__dZHle8%NjAnl7_Uj89az4-Xzw|7vJX>B`BatP>`Tv*Esu4phX{rq>O_n>xBi+$d_WAT& z9A?RZ@cBF=pK??qhS*J=awpJGU6S-yuZ+!22mN}Q=du@S{52>PEPRW`Ft(EE>zt)%N2L{agZ>FH Y0MN}G*KUV_XaE2J07*qoM6N<$g5pGASO5S3 literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/house.png b/src/main/resources/markers/house.png new file mode 100644 index 0000000000000000000000000000000000000000..da024e5ad48ea2d6949c58e26dec214719219781 GIT binary patch literal 727 zcmV;|0x127P)Oc{#|VS_=ii(Oca z4V)THou7XC{q?@DA`=ZdaQM!5&U1dgbDocAng&7$T1m(c4JzPy12XY0JcV-Jrz7&m z>!a7)EY5Ou_=f~Xp;=D2Vd=kw;1y_MMf15_R#YU_wH;@uce{rWQNb(cvcSInVGNCh zz-EgS91z1UsGeVt)yAInw{jWoUYirC4WRR+6X)-SAqwkU9S>&FWgEh$tKCra?Pxgx zEr7Y{C=S}4u-^(o+*-rAr)eIGJrZH}e?Uy}LYcYTdIC1~{(+0I-k3lkyMdCB#q!E; zsu`3Dn-Fp-oEn=%r|km9J#@J>A#9T`J@j$l4E%2w@N;#MUPTY1(Fk*!o`b}S0!fmf zsVa_ipT_v@0U)`E`yq|+PxzBZq{|Z+&gIvkXasBT?_hH&4qffKD(z>n4&t!)H5kTV z4ZVssdyaDz!dbR-MoNO&LjG41c$sjFpOF$@|?%pmiR*{ zm*^sk0Nt`g$y3QEu{=G(gU7wkxv#qHA{dtCG+aSd%5+qjszS*E$U+iryQ&i~oB3D_ z3`4O^XH*oqszl~sNyxxt-oskf19N{*ukcRLC&C~!&C)PoB6)PKhsVnj%_MXEEeV$VhIP)8L`^; z5HFVWb+&MPp9AvO70LyPVukqzBGrE99;$ose?obS1k3#^zyL|pISzYTjoknM002ov JPDHLkV1g@@Q*QtO literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/key.png b/src/main/resources/markers/key.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ad1af405862a246af0c19f0a6fdba21a1ae90b GIT binary patch literal 664 zcmV;J0%!e+P)ZI-Y^0SUqC(OB9qNBjduS>oD)j2XlQ$0@#FHch^-vMKl*Op{gBq(1Nodmq zNlTk%lil^3+7ybL+SwggX1@34eecaO95P-dFC{Dkae)1OX-X1HUY%W-6Z@8BiDmoo z^6o^*JJ1^#jw$HwaT1b2-`4SMv558J#_F~BLO>Ak4&a1$z#WKO3Bfc>)T(v-_)sJc z2_ZE|70mzo-sJ>+%t>|xW~&t+xi|#Fq-}{K_r8GW?UWk1^+H|J3K$t5f@NB9QERJ! z%MzR}8HVAYz8UojWM;?8#702c@8+;bSw{lXB5U*}nCt>!Np=WJS}re448=k~L#G<6 zGeMIItgTHjkB3e-(d+4hIvLxG!GZenXRy8IZ3!%sEFDmg znu+EEgC~`9C?(oa8ucX3>Qu&B2ErMcDy@887KbR_Q!_9$o7ehAw$&vTGv4$dV^-roglwqA*w zn4XTT`h&-O!=rAr8Vv$5$ON34*V?CQhy5>{V)BJAc+qN_ln{gVcAZ+4{tMhE5Yc9y y{eB56Q0t^7lw$*wPIuOhN0000$bEX;R zI(M8qcjn&C?S-kRfA~1x`JU(e&v%4rng}8Ii_xo?!o^W6EQSF#C(YJMT#AbpyB!h+%VJ3Zmm3NzvY}ubc%*1E6ivP1+vAC~6-ZA3wLeVi zk1lMUE)oIIL%;3IK`i9pOu45lW|%|8UJn^r8`!#YH<`JabhN#qtL-^=hi6yjz!%ga zxsD`t^_L-{p#*19BPu&~71GxoU-ksHg`4|*Y9NmN_T0n_bDARv~!!n0zr$&8Esim9s9 z(3S0&{un9MhcT=66K%bR(e?!Q`ZRLtKG0e8bX>TM%JNau_wNce2R`q?+ElGKkF-PM z_$iKl_Ng#9|w+%40JWX;HhrhrBiIKPe4{b{$m@l zlO+~$kkn!*V}odcAaC~t*>cWJ$)#V@B7@^ZIwO2Ot`YOc(G4A8 zU&O(~649P*W3N0Krfe=_Fq41sWj8B9elUd9PVU179o0Uwa^WbKNj-Af0ik2w6+lpSX>YUs|dlu(qI$9>Fut&IV?S*Da3)d znVorgc4k*tYZ)gbW5(Ybs7gcNr(g_diwy)FDVZ0e68Pp!!{8m;*lLny%xPz4Y_Yy( zuY7U(fj!%fX+7<*JPWs-Aqjkg;nR+iiGWL`HTG!pnB=93QLq~AQd-i;f;$LzHmMW` z&A6<5qM!9(+7ALAd*=i)FDf?3NxZ_96Oz43l~)ndeTG&$M=Ub&gl52vTC3B(+9#64 zNo{?DyZZ~S4~a%x!kZ}98LrWpgr!pwo$@d>!{Tq>Md-BflLqnsKhviG0|0(vX0VEM Rkdpua002ovPDHLkV1n_Goa+Dp literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/lightbulb.png b/src/main/resources/markers/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..117285ff7e4990a05278fa6eecdd654c611e819c GIT binary patch literal 685 zcmV;e0#f~nP)5ABxY_j{DeaXg{WY}Tn&G*eW@4cO6oO4*l7!&X0gVP~yRPJ*_KgqdK$7C?M>nW2R zmxeDq&RDrdU9-U3nbC7FtFwcV2>Om+r=%({@GWRBC$YA&0!T{y@cH?NZ30WPXOGh2 z)ljq_uILpaIzeJJ0ZFksptO7gpFaEmXY5!kKKI&!6g1473WNi2dfec;25yw8vsr_f zM30lOUIfBUWK-)?ls)*LfXsNTXCMHhQi5Dur-s}*XkCB_F@uiOGq4@GbT($!Np|3L zyGg|Z=J0}*GI+j}0;_7mMO^wSFpDF&tpZj354fz-ZF{kh{D~706^VBR;a0qm)C6X6 zEUs;hBj^TS{k{2Zzi&qf9v_KGUW^>7eFY9iIUQ1$55K-=1h;JmPhR9EHoqjHmvsdF zewdOQCaXKeLH{m+SsaUN*EP?9diCOg(aUG{-P;)*@i?~a`S%qh8HSd|#`|Z*yK}2! zH>a29scx%nkjOmbk;yxck`gb|#!ZozWd$G88fI>d4--z)grZ&7GzY?pWdP)G~(D{lBw2Gq1O{9y`}JbR(p!qB8( zS`gDr^F;t114VNkkU9>8dI8G=ko?LVurR>1c*aoVur5h^bW!A}Ds5(M;ydA&Cnin> zL@yiEu)_=h3rM^Mk{rH#w`zGx1B9mctF(ny_Z-C^wjEr&oepQUN0!M`HCGVlhPS&LiC4qk22q zwUDn`u7YYy8AuJaeG_dvBp$3{BU1* ze7vrv_zCrOHAnnz4Jk7Yju$~Vf_QQro>B=72ZKjn03&Rh!Ia4B($(c?{v6qH3%#|$ z{g@qlgh9WI2lW-0d;S>yfExlad+~SW^4bDiyWX!j9Ez+s6-?f`fh!%2xO}n+)Aw#e z((KS2c6s3D9c33t!2!F_zUo>ZQrQeN88C^!#BYt0=_LG>ZWxBq_fJ69K&Qu7ij1Ct zVlVttd8rbhGiaIH3Ef2JZh);24awD384AD@ML1Yjo-bspG1EB~s5j_?X)kHp4ZuA) z!J4sbja;ECZ0xxmEoT*?B5Z+(Y|aDSufY8VU~0zy)y&Sx4*>=ME(7~J(Q+Dc00000 LNkvXXu0mjfhe=^l literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/lock.png b/src/main/resources/markers/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf83d9535b798fff3b855d96903fded0345bff8 GIT binary patch literal 689 zcmV;i0#5yjP)n=pQ5k2669Fs@}&zywLNv* z-vm>c`(G1@_`cZTgS3f3RTXf~@p17Jayj$c)zo0;KMBSsCZ`jzSgO6F1IAke8-+rc z+Y^mKPwH4(T}3XR&x~9f9;)FKG=yzCDMiyTGn<8(&reOHZ$A#!M@Fv?lr4KW7CS`U z2s#?-N0Ax{HZ1|ylTf0Oz&B}WKKRDdcWy0z-w1O|+13bYCir1V;4FfljvD-~G^AGQ zIa_NYsB4f*cNt8SdLTG_CP6@>Q4ZvyDjp=C(^P=TDm*#z>d5GqvrQV5x#;P=G6|^L zE4C2{q^h+Z74f}b0yq|4-y1tq!_^5K$Ah)L2=mzu!YX8+jHP8a%VWLzXh9IP z#i@gLvtdPruJFM5_A0rc4rbtyLwZ{m9IwR@1lh@mK<_&hI$*xflK8c24jentPa=_! zrFAq&@Q0vS_Kg?M-{@5gfh5!(Xz-{O7Use`5xg1Og|X!#Q6f&mPW)dK31vP5n}Ki_86pH=0SkFZ&%>7U2`~`=S2ZxZ4k{IVr5?Jv-vKK~ z8X)RKpJ}BWHHR`-5ak4{$s=IngTyjNLHtjEc{(lAINzpy$X;83(m+2l^bS#ib;kA= zfNx}D%|O;v?la)R2iL0aZo$Ox<#A}oDgg*OZAML#Saj+{oj^Rt|8FtVXSHDB#0mk1 zO6D1gwT*DgL2{{*)di$NDEdk7!U{7>vnrSo8vu(stmxy-m+lAY*+^py7B6RSFY}Np2QPvJEBJ9x#G4@TA}Ux!tl$TFk%TH3n}b+IY}W`@ zV{0_lCfRIv-*evX#zdtDhaHC9H}jkS&g`;VCpV9HaQC#k-PhL^`_sO54``*5P#OR^ zV_<^Sm=qTo=f}`&jIQCKKE1kkJvv6VqitOR@t&oKty%`w-2q4uB&oMkurFs|Esit4 zQroDNUPI;knczDlw1!e1e9y&_gFAuTYhZdBux%g_3jlmm6592l98X(ao!~Kn&i+1p zJbwqWuEq$)hXU{<3$(WaZEH!z(@fuJZE^gK{2x#6K(qxxoLQSNUAX4jmfoXw-;aa7*TQLc_A ztI?X^V3LOb9x13gK@0%GZGjd(UKYxCpG}QFJo-5Gysm8WaOy?X(XcF|j35?=PwGme zHVW16x23_Fl{{U34*O1wAEBC}J#gh`)E*Be#s+rvBrj;vFfsf-cs5g=eROX!d+l`Q zW;z6D4yjsj!(3@tOmvAK}kO-C5Hu!2dkz5nk{e$QW8gc#aW~Y#I^NT<9|(>;y1Y*0eGOqe0U6t t=oe9eE*9)VF9dqD#f)fc%tPmuuyRM`=ql=hXT@-@d1cFkqyGX%`*o|(&+REYI z=5(8XYjfwEo!)Q$aJ&feg_rZ5bKd9qp7-Zt;}0({X}O%WP-07O17+0)LBnZG&{Wmh z)YSo5QLBi^sVK@PS(bCzY*yn=F@4T?{(-NQG))836uj}3px#k8QB!jU6%~~LV<;&t z#qZEB_^)&F61bmYm%wQlcTGie^A+svrSWBE2J`dtXllHKa5#*H zh6`{w&ckFfjT2Zi8jat}%F12*a7nLcBOZsx?#;TzZ_aF3Q#Qg$+KmcuRtr#AD zhDam=CNgBxGN?2NM_`hJtwa)%B!Q$tltgT9#t9IG%hiR&#W4Er^&yibAY^@FPL?WLn=?M~~fIp2U6UN5g zA-2AO;*w%~oSMSGzyNl3cG2D4gO$})*lKDI#;7MqCJzYyq*53fdWwRsFBA%W zqwuxvvr4{rtRPDy6OS7sqyBOzISnFRDt4Gjgj`MJ&`(~bqkziAzAB*S+&b=(b5;Li jJgZ*!?!_tXuK)u8)!Hs~K|;Q100000NkvXXu0mjfOMYE{ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/pointdown.png b/src/main/resources/markers/pointdown.png new file mode 100644 index 0000000000000000000000000000000000000000..c66cf8a9251fad4d03a419b30f0fd31a63851933 GIT binary patch literal 659 zcmV;E0&M+>P)Q4s##dz;-Po0v4Q zCRz5LKmrpogyh1GR>8OY=kJ$i z(qVKRJNJNKeSV_u>p$T#xJ-8fSuPZC=%{Gh*v#d=#AecwZUSyOxtFn9-ae1Z6dp=+ zQFW&c5DdeB>I)z|eDO>&excZ{!d9^QVyt<3B&wKPq3R@`J8W14Xl$U_G$6T;gF6E# zBo=DMzJ7IlD!tNHK#n40A65OcI;R;}?KP@9&}&=x*(hV=+CA0j4K1f0k3O?Sh7EUzc%ya*C=NcVUm)&SubmWWe16By)h0sTD4W zUV%wrS(fp9A%ABw=D!_K^VhXfmSUoF2A9l}XG4IoODg=q0vqx6rXSg63^8^YR30;ax=%&R$yT9ugftWGEpQXTj`gT%+`qm2)* z_kr_b+>>U%YuyE1{y+a<)N z-?LsnQEK^R3-_Po*2&Jdl&Q)1Xp;S_e0vLrM{A*_4>%(K@E`Q-kJigLx9xusRO-f? t)x~$VJ!*)5iw_d~78hZy*ARaRFaRZB%3BRWz1;u+002ovPDHLkV1i{|FUbG^ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/pointleft.png b/src/main/resources/markers/pointleft.png new file mode 100644 index 0000000000000000000000000000000000000000..cd36a6c3187f2b7839ef6883a8f353163e91eccb GIT binary patch literal 617 zcmV-v0+#)WP)L9*JqW$@>VCAa@j+l z{z<^~Y0kClP<91DV;QM^gT1-zz`96$?)uOpQflnad{Fr6LC3jLEu+imLZ=Wgy0;tKTPp*$Cvvy&ii14Afx`4-sQPEdB7|;b@73}+Q7b}^pV00000NkvXXu0mjf D`nVb? literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/pointright.png b/src/main/resources/markers/pointright.png new file mode 100644 index 0000000000000000000000000000000000000000..7efc7c6c389103d6161e2d03f9adbcd95b8e4868 GIT binary patch literal 620 zcmV-y0+aoTP)1)9RzKJF zkx!cuJ3Tx$fu4T5qYU;4Xk34lxOf#C^HV70fBc(3_TI?y$@Amk%IarSHkMGX;&mqi zdO*&kmIsGY$D8#nG^=Zjey5xP&8#Q8jhtwrzB_N{GaCGRUBen?&{lvhS`y)bjZHWq~r__`dEv zX*)>SkDHH+>puZ6Pe#?j8O=ADBeR^Iqsvk!mnj zrKE^$3Tkay4SqHS?MjUz2reov+_JsTDzjxTj&a(?;lrYt^S^V%S8Ba_~zW>e^9W-;JPLv zBUcDlKh`~T_B0b_GL?+gW)jhB?FsztXkeV9o_Xi1*%HY5-t0Rv+QH#I`ilZZA4A`8 z%m*Df6oFG&#Qxqcm`kr9G_m2qY+_Jt+qnysViD4=Cc(snlF}zxN@s|`fv!mip`ZyD zx-RJo-ym=t2_x8t@W?r==6;OjQ!mHzU#I;QY5~n3N4W})Wy5xD)RYCzn-t_L?h`#d zb7{4d!;bCxYLWudObQstgQ{hPFTdGC z*urLO{B+{>$Il}K36WGP`*V(&tuh2@tdJItNEgs1?&wCI1TYv!o X6VCK6EIAed00000NkvXXu0mjfP8cS( literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/purpleflag.png b/src/main/resources/markers/purpleflag.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb00ee851467382873ef223527462bc96e454a6 GIT binary patch literal 744 zcmVP)&?<`-VH;btYZ1{ZuvS3}rA;j&auY2|B5F~Yp(_ayl0u4?WCdba32O4B z=kxV`@11*RIy1Ld8nx)aftfSseBXD@95#IUz$ln^Jltq~kexj>rBObsl-j421~fTi za0K_9Dt?1;evx65(S)$fi-MiD)acn~H^U_8bW50()?iT|aD=rra zm|GHAk`|nAQIPX(BBLnh%qExuzvxqdMSzBY8#3SCd8OC{gOUeP#mOB=KSXvdXQk`1 zB36b-SOiqgM`WU+)yVodu>>z0BA-s#B(n!JFVrvgCrtLVTG| zkIiS^j^Cagd|hen&avU7mk;dMiI{^}wV;+lERKD~hFl+EkNUfGTcQK=?_c1=rMXtB zNe}gmi3{ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/queen.png b/src/main/resources/markers/queen.png new file mode 100644 index 0000000000000000000000000000000000000000..6fbe5a26545aff8932ceaeed3499b0b9df2167a8 GIT binary patch literal 694 zcmV;n0!jUeP) zP16*!5ZzeRjrhQYt|TChfU?_8>u&Q`0(~U zrhkfUGhlb3aSrEby(;7O;|bh~kK)vsK?DXk44>>rk4r`TO88zYgIxd&NZjjjL&_IW z<#~wZGAb1j&8C9B13u`@#@&tpnx=rY*sz?-L$1{zOEpMx9ZH?vqtymQk-^Y@MB^` zC4*mt$uULJah?uaR%rf^QD?Zx zfU#gHa4E{!IR_f^1g`4~C_H~;3bFd)3A{HJ&A4$MxEwu9>wfJLlGW9XhFFCBI}0(! zAQaOPdO!!ZKO29smFU literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/redflag.png b/src/main/resources/markers/redflag.png new file mode 100644 index 0000000000000000000000000000000000000000..b99e36b28322c3b80fbac06848b4a2f3347afdc1 GIT binary patch literal 737 zcmV<70v`Q|P)CWrQPE+}+;`rb^PTT}_Y6y1J@iC!bu^OkJ2wpG`X&6hl>S~NC7=Mt z7?=<%JRG{oxz&obrhj{Q<)CUf&}&u+VW5!5&(S1?I@%Fl zzma*)QX`bCR|;o&D0D<9Y9pnB=eelAb{osRT~Oc0;Ele8sIEeBW(ModT!Oz+gkQ+3 zN&>bjDzM|+MZAxnhR{qji2im{Bgl2$L3rDC@GV=RyaN2$H2leNNNTX}ZUUmR63i{a z;-Gh406@dghr_oQh<1o(ChC?bxdpkj2uV57;XbI(qsV>zf@r+WXu!+$I*bEwWT&%wCF*3KGsBA9@ggz3I+T z%`gBccqAOhnBzYkaWdTT@0@odjCWL)`Jm~9ISOdYGj zsmp^GsAhhkIp&mwd@;9pzGYMG4N4QQx}Fm;g{&)kUS{q4x4upH2iHi8#9f64*AGwB zJz9d)417bT{SS0jD0nn0ELL;cN!F8-KI1`2C10)eOW4gIsYyn{_^;$i%!{SsgRj|2pm THg6h&00000NkvXXu0mjfkUdfU literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/right.png b/src/main/resources/markers/right.png new file mode 100644 index 0000000000000000000000000000000000000000..8d204afeb0d5ddaff68bcb9a8d36666956571930 GIT binary patch literal 363 zcmV-x0hIoUP){#KSL@rBLgE7&}y(wP#_YET{{{6-+Z#Xaz<}2PklbIOD;d}!LI3s7JFqyTOD)4X zR$hj{e*`pxyl8C<^nyGCgYf@UhKUa4lZMG zAo}+cALk#RF-+qYXUN=I!e9c_e3p@nbR!9M4ID5I{mcXqU;vp}hWwg#P2T_j002ov JPDHLkV1h^gmZ$&# literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/ruby.png b/src/main/resources/markers/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..24755ce64570db7fac25ca28713f8814db023f27 GIT binary patch literal 568 zcmV-80>}M{P)uRmJE&Mrhh>JDse zfimgu)bS*gY2kSe4W~%{Ys9KCJooT1_Iw_?ZE&~YO9}iR5?zj_PGguRLC|OBgz^SVry^OH#y|-;yZS-qgHV`OXOMMb85T63KgGU0F9JW>rE)3il}ZF7sM_m^ zC=jnjH>e}~y{qyya>eD>xSMNm>;z05f%Mr39);A7WzlK3WD`xy5O&$^Z*aH5!YIYc zop0nmzk7vS{TK_*#b-Im?zzpd_A#7aCnvL?;x)#Sw=Z$mrOxBikUEu|bbqhIa4=v` z;GGG)k{shf$qU@dDr7RzHBnLa?w~1|YX{(81rx~|k$f-9Nz4%LlvfjY^EdcUExU9H z-MW8IJGXA?<>=C6|Mi_@N4M?$)&GMN$=_h(u+RCY00RJ+)W@ay#}qCA0000lBbAHN`CKY+he|ZD*Ik#8&6Hok^Ux&jiMA53z`1{DaT~0!$!cLxG2sq%h|XJ`VQZ6GCmC0ENzi zFvtcNdsC6;6LA6d-yBS=KPH9SN}>2=Q<29eUJh1iZZ=lwt^lh|@G!`7{f|!#$O5K4 z)&4GbUVYp9`N!|4Uw{36dh5lPz11$}4j={p{y{YFt?_q2R&yJurrzDs1uVI}B4{s= z5<+s2P`ZifP7q^psvFn^J1T;9qN~X=GusOeL}%SIdcT)Qzy1FY6eWxdOe{JH%@bfn~h!~vo&gdhnVFsyTdG!V)$HFL}F2dqE3Fx6;3=AKxGBEJ#GB6w{lVD(Y z$nf_sB$k;3)y0{e(bViK6#>hAeR=!dpRHC5|305!`1j!;!=J-R3}2pKy9JhHf*A1m z`R&^%Y7T+a+_(qxkM_%1if4WY^OHPav7q&8Hc-uCpc!FTXCNeXJ!I{BMtulzkdJC@a@|lhOa+OVr@EV2Or0R{kY>@P~ePR^D90000blGV<`Bkv+M$F5UR zAuO{LuD>v(XdP#1=0@>HSV_Hq`i&-42f2F!vB&*0%rvjTvfw#!3i)gV`7dD@+ey@Q z4Z+jiVuUF#d8aP>8O<)6xY)2xLfr zt{@y}0_vf2$SuFd`0TGhnLzMkd?gv(STeUVaMU!5)6HB4vXcZf2ejJLFca(8(pQ!^ zw@iTdPjEgpmI;SYb*vkvkw=jP6sHq~-zg{!J=hMtKyZF*jC1WG=|C%cmhSb=9rq9P zDGl{VEWCoVrVieYVHD#@tiE~n$v66$ngv|!!V^e;jmzz~H*Q(|Qg@4|{g}_CnUPNq&G%$4Z~bUWKbFV1l=Z z$O%HQDVRkO>bK3zhlh5FEZHCh-LS#i3bsG4qE@Yu+oglq$}QtE*i>{h>^E_arLR6oz;i$8z- z%C!`2FLxHO?)~vS8-pN;kac@0JN4oY)nJ{iJt>s9V`V1NIl!{KY5|Uej&4#~Ce_9y zx(0!K(L;DXSH#_gH)9lWquWM$WhN#IUJg`16{aks(`7!rE;>tAB^Oy@e=u zFc=%~NNxD+gdN3LUR#{+Mi&MXh@?`84GkfhOySavYZx6pj3Xl{BvT0_lX1kN(moxG zy}qBF9ga)qY|EvdbJ(so6P#Y|4ks-*E)3g2O%qr0Q{|Js68%znIgRv3UY)-3?&ztr zD9x5|eZF$K&($V;@&ovM*2APKh+V0?5A}zOoONX^^!M|B0_>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/silvermedal.png b/src/main/resources/markers/silvermedal.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf9fe9264a16ad0c7ab4bd387e586fff1ff656e GIT binary patch literal 635 zcmV->0)+jEP)-2jcElfEflm%AqufbWg{5DCXxh03JVRS&_XQ~A}FTPLdYKwEHtxg5fe!f%$nC` zWy8#5UN`5??u4Bon*$&B&Ue1^xcA&)oO8r>^Eun~17yPxU;)J3NYk=|(mZa3 zLs)2chS*u-4pnP!9L+-I?;O7U`-ElE;8Egs`60;EsTXs*AHM$NI~M02uS4uV5=XwO z&@{&+I(YhOe(ZFAK70M@AQsJKIF^NwCeqQF!8PK71-pwhk4ZXlE?hVVqs@qT$97Qq^&92#W@YT& z?E#8eZG literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/silverstar.png b/src/main/resources/markers/silverstar.png new file mode 100644 index 0000000000000000000000000000000000000000..d405d12c296531179bfe2f66e3374f2cd841789e GIT binary patch literal 717 zcmV;;0y6!HP)gjlL$#^kh}|0VWBh41(k3&CsM4NKcrw6<8_YuSfn zJOs*7P0a-1EPM|>qCb|(W6^mW^;(uVhw%0zpcv(-MpbrY97DGr-Yv>ZcOINck|b=~ zv=O%UmJ%13oyW}Q2sn;|7ScDKRbE{jJT#!{fl@5=^|-q9o2_OPixP5T9t+{+66fl& zVQ;qsJkKHY>8t6**km7p2UIs856O1+^3B_w_6|q$h9*dotm-z$u~?4A;q^^VT|IyD z1c?h&_aH!sqaM$@Q9($cu|ZGfFPEIIg_Q(6lT)KqL$&{HBC+}S@{i&5^*V@R0UUYW z)Wuu@x^)`FBjI7HsW}B|X6qK0(a?lcCX2Ve8RFAOrL!=SvM5)r=c@sW$=JIT6)^Q- z4$q(5KS(hRf9$ct)`n(7V=vhb)=V&T;~po;vcdD-pS*tQTu&^rRGN8k*6%!Z;mR|8 zU7ex&K+q{D|9%MlK6c_ARpqf|%w8S$TYv!oYZnr8y$l8V00000NkvXXu0mjfw6j7n literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/skull.png b/src/main/resources/markers/skull.png new file mode 100644 index 0000000000000000000000000000000000000000..7eadc96c4c11ef62254d2eeb2c6e44a4a370d50d GIT binary patch literal 798 zcmV+(1L6FMP)Nl+BE2Y=#OF!7}IYP{(|G~r*<3+A&KWHwRu znz)shm;~i+4;BNwc>Wkx!U2gHs(TlO>6H7|Lq9 z+zyqMRZv}R!J!!_8+(^!;e){-4Nu^g+S=jF=`c_o2_Th_Q?n2X9fFFA3h?=S;C8zq z9*;u}ei8B%6Ha-$x45(j#SzIgteGDv=;-K#SgZ?FRfX2pR{R=@7$o^YaY zAsjvnGe1**hI~8Hd37Z5kmnXMywpOW5N~N|5x&&u-tgc9-hC%>OU$4)ux0Dc`X)#v zKMTT4CJpPo8=$xM9!f8VY<3t6xnJP%tSo1JLo?*Hfhy60VH%F{SEC|9OH?Rm zpc^JkegBB0Tu5ciBJgZ>RxH!>bPD&2mx(pU6S#Qc{6Q_R6%I5vo$&d*$Nl~QV! z%BuvqRj-bXzqwK2*{BJa=jWm)HOv5vUCtZ4x c6#N!o03}~-V7gU5zRc*| z45Z&?emr^0j-8hchX+0Gr<3(lPlaS->quaKI}8l}Cj(chJE6`CptWZn49}0BdQeXr zFb`*V??B>%a%{K*wizPtX>ncjB)pH=-^y10WPJ)!n#zgM4pj4i;|5ZTkibVcAJ07I zkIipia+jA%DEw$a4h10`Ja7KtfB2&Vx#15Pqmw_SW;&*LDqsU5iA=;LZH@pl52p zICK%7Tc1Q@4|tJOtXrkU!}oJH$w0Nh3jYO*#8hKq!=Ll#a>m`Nl;Akvn{~GPe!>NK z4!$Q<&g2Y9|BZ9|Q!>*h`DQ(^8@pGdRl@)+AZh;t{1spTmhK??Qqqhe00000NkvXX Hu0mjfCLI}f literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/temple.png b/src/main/resources/markers/temple.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab1e9b5fd01d1359541a9ffd37b4f0df0c3cf2a GIT binary patch literal 627 zcmV-(0*w8MP)n>nd4+CBJywJpl zxw(g;z*}o!W6M2Yj#gZdkn%=c(zPZL!TU5^RWZjD42;oGm+w3(3u)};D26W`fG!kp zt@^mEIXFHe*nY-Lh8c|Cx{AuhUKtG}SJkUi4WDu$msbR8vr~Vd-=hIA0xQ;6yo&a?!=QTx37<3Wd%rLE)^l=)g^1NQ3PjWJ~&}4 z3Z6u(ZRti~{>|!Bs_{c|)@?|pTq0#^DT6wt6XeHKiUK;gohkegU;u3yFKAexmO}sl N002ovPDHLkV1ht!CQkqW literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/theater.png b/src/main/resources/markers/theater.png new file mode 100644 index 0000000000000000000000000000000000000000..13053e095e962426968e85d70d9f1d1bdd436f5b GIT binary patch literal 815 zcmV+~1JL}5P)RCwBqQdvlpQ563EZ5Ah6bP^ph zF|$Qt80n$K7lS|qvkVbKA&OFZ@I@^%f?lMDFo`nF7ct4CASWTBf)*pN(3&(dC)aUY z8fQu{b+-TiZ|7Ho2wM)^d*Ph(edjyp9xkWkX=7McQ&p8EgTcgc0LSsrUb^P#9S{V; zVZWMw94nYe;A2&#X$Wy5qSs59A?Hw!84Z%rHiW`}q5-w)I!zOgkV5hjV*zJ9Sl=`Pn1u2s3{h=>J_zWo zN5H5!Pg4&1W)uk2j6`5nB{G$P)1=CNoGa?W*>3B}>&HGk7%wS4=j1 zJ+E-R=`~EN6d2d?P={$J7U-w^5>Doi!WTe0_sdRL4-`MJ^MYZM!W*IYk2uQZ!qk*g zxoEl84rhNDsuxJw0OV&SqVJO%6x)c!rTn*9?`PvVtw0p$QaOA( t*oJ-N@BLqbMG|N~w`Ad;V9kCAFaV~%Ct!vLA0Ge!002ovPDHLkV1hq*Vy6HA literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/tornado.png b/src/main/resources/markers/tornado.png new file mode 100644 index 0000000000000000000000000000000000000000..41040e112703fb4a1531d7909728a81e95110cb9 GIT binary patch literal 854 zcmV-c1F8IpP)|qgh3HO;Ua>{Z%Uxh)5k^=#lh3j7 z(WH0gj&om~dz*=&MF$S&KK}FF?|k36jIQfo7zRzP-Sw)X?N?Q`PSZ38RcQ21*L1T& z*Hib}2YU1Z&~A6#YK$@lz}5ENW=+>Fa8@UrPAAso=EH8aLRwpcl#q~+B(tijjM$0@ zj(V1tmeA9Bk>Noh%gKYV*dYiOu)F|8R-kYkRT-*6*TlxiL?Q`B5TG+GEcAhs=Wh5} z1At}us@=PGB2ZQeca{?}HOT}bD=Lx%A}3`elSx=D78Dm2pl)9+>~8z#vj~_Db9H9Iv-Z)fF1W4WHKs zr^5k(s7vv|@o{+c7yc365Og%@oKTs^m^g5}_!X`7SO>7=Akp zKK*%dCF(P56jw!*mXv_y7@}^)8tsA+(dA{+6;Tu+#S#bxC*-G(I%_jEa9-=^6HEMl zvXzC~m4#R=4wdExIiQfW;m8k62PZK%{r%>%{;tQ=^YO0+O|3mPL#WlCQP@Z{mSbVF zS;5n_rl|{r~^~07*qoM6N<$g2~5+sQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/tower.png b/src/main/resources/markers/tower.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1bc75a5b0a775a0f5ec83343c921dcb13293f1 GIT binary patch literal 747 zcmVHP62E&o0A{)Xqsx2m_wF8F z0&~cY(P?ZJ5@SrffkTG<-F=WsK=1flHZcC0Y5o|7FQ-tc(8FG^33_bXK=M=*T!yMB z{8z9soy~1ry*`-2)Qv%S$;0A&l3ZnQr9TD3wqRCFR7?w7xozkUruP8^gZu9=y0o$k zNs^G6p26m;4{*10kU4SY(sID*^5eQz#Dg?O4=^BE=EieBwjoDV$g+!k*}?qA4t^U9 zre(vX;4RzT110+d4ECkFtr76nim$0&6&|}|L7a&NXfL6&S;b*dsynhyuNUBSgy6^w zT1f&YJ(npG14n=@WQ`*LNV?)J=zNsGuiX+-CmYb!8iQW8@Np%NWQ&iIXe0ge9{{|z zvuj0+Txf;rr8-fqma;l@!-7JAFKA_$yjc!OH3yVroF%Uo^~Cvj1UDyFG4NywcVBLz zr!62tNJiD80n*=dLVqExl@<7cVQiTy7B_bVz*o(n3jGD(*$`Gw$2*8Yh$;~lX!YR` z8bTq2N%M2E*@wjOTC~R^nCQb~H3u)QL4!XQ%@}@YYk7FRGD1FvI`V$32JkpCr6Wt; zOE6681?mUI9~gOfQRng8R)|~l9C@$t@-pSo(;h*c$`A<4@F@%)S4QGQ35Al4Pis3! zL{u0R555)kTcY|?!!#t8NIG11Z?Je=Svg3W!KQI+v!LN8?lVl6Q#Q{#{bjIy=SkFP*p)H`e~tBx`>`jnCDNE-xlaaVEN@y3Q0TK2V~xN{`5nCLi%szP#Qma>eU%1SpK{b}b= z7a0>{D<+Wb61CMqCTE73njgUzP{cpcNwPHfnToQokTx6L+Q4j%AZ8AWn!`J5T^Np4 zR4@4bPNH8k_`LykSG3{wIFTJ$UVX5%80s=Q^8_6O()9lNmS*$lx{!Q6@fn{Q#N~1# z$r%|1lNw&nGxvqK-6ElN&%Arm^$9FA^uEg+_S5aSk zfaxDgs1Ep@)re<53Q%EetnrA%USlZMdM+`=k{-e35yGwrV3~qf^$0CiFmEWiI*YAv z^LY_-YeeGOBC?<}Grk-#O@mFOEHaV)#&TMKWvkn#i8a!Tj1`O6)P9HOHV1o6(?St^b|!CzLNtjCJ-L#fuJ!b7-nBo#INOI|u8a0U zB6n?P<%-Q|eb4;Q}$TZuOmHVfCpyqj49yv0bx@vsL& yxJ`JXptLEdD7oCrUxnMf#t@|={4c>D0R{kZDGud~Q~h@U0000gn@?P`u;XR}k zZEZk>8d2+_bmu}4+zF}1&&q{vidAvrF5p7&gMX3w*{CaB=%SmV;7T{$6qIV!s0&T3 zh)JH6Chz4XGjpAc6+$U)vT)!q!##J-+%tEE5fM5W209!a3z#p@Z-S(DMTr&Pr2$FJwOUktDwj4{9XGK`vG>nbrQbhto12&$N*JD@D2P9}-?WkwYW(M%F5<)12 zV?z$I4?d^oyxNeloB(Ggs?5P;c|grB8f3z&3%n@$cwX@F>IcV(ZN1=J+}8rS6S};= z0GhC{00&P?>kz7n7C4Z!4Y)A_pFECqcN84vpdqE0kfKRKghY!FqCuQDsUaikMjvFus2;*@c&pt9n7*(nwrG7XAd>MYR3We?Hs`d zQ3gAH@)Q}2@U>XL*pX44aP!t3^r!kERY4{buo=gfLJ^~5M>T(Yd>m_2yGu+;tJ=uNJW$%~nQz#_PUB0GymdoWZ^LiG(U%MNN#SgWD zLEztu#}kLQ4sO<)|HZSmL)Iv)UR-}ym|OBhmgU)h|Bb%|7yxl(`)c91UmO4c002ov JPDHLkV1koV7Lot} literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/up.png b/src/main/resources/markers/up.png new file mode 100644 index 0000000000000000000000000000000000000000..30d005f256c90fd6448701aeb754e3455521824e GIT binary patch literal 391 zcmV;20eJq2P)^@RCwBA{Qv(y12SM_WQ4QbyBNTd zJIfg0g6QhO0>~H!oZ1=wUw$wPj6rOi>aiK%(!ucm^zFX?b9XX;F^CNk!)5>r0~+w^ zVffz=(8O@{X%WLeR*2ZuXGIKcAK zMkXMe2`qjVi&_RI1{?t7(Vzc6G5lvi^E9yrfWV*spBWgK8SnzUF8IapiGdMhz<+XF z0MzuG5$FOIid;Z}7eFTbV){hT1vsTa(a6a9gMk&wCfR_$-x>BUUd-SOW8-uvp6sjy l#DY-vdmz4tEjt4Q7yvrXvHb(I`EvjO002ovPDHLkV1jrmr_YP)7~wHBw}^Gc1}%^^FDC(Ey~0$F z{6Yg}qcltJ72|SgU~Ydrr^HkvrIcZWje==G6rT{Dba-ys1*;4ogv%;o1#?F2z4gScE7g{5 ztw);b(eIgts1qQE7a_eJS`u_Z9$gL(cpPo}GuJqte3Y2VTWu}7@n(DhBSRik)>NUw zRD|JZM3NjQPqUN|9BnJ>&fKf{e0TiR(FS;Y^B8#PM#v{!pPHOP+1g_4+G*ZVbD>8{ zZAP+OAmQ_kc>c@{B|PIAf7)sP>GzNL0}(VgZf9asd)mQe67Wo*@3KZj@%jGQb`}am zLq8slNnb$q2JJ%I|9Q%4RCf2=b6TOuuh`e8#k{>85A;Q42d_=|52#AS{l8OAZX=XB iYf5}x<4o557GMC9mJ4j8lD32Z0000gnc`tb{X&P*` zHm$7{18N{GS_LVBy68p_1QDyas~=nm;!do^RreyMS_NI0h4@+cfiB!s1sC0j##Jk| z32g#ZA)hvRZ^oGkUD?!v0|)Nhd*=QJSm$I@kQ(c8Xv4>Mkq#%XK|{-pcw{YQZk#$Q zY`N|DCv#tXxgUfOH+Df(Hk5(yiHT7B97L^P5ZZIe=r&Y>ioTaS%|oFbCs511H3-K~ zf;*8RZTqJKDa3*eKr=bE^S{!n3ac1H2Uq_K+FU(f%Ulo@Ug1Rd4NG@V4%Bv#Ht9j*I??S)}Y8 zA|r>6fruqFhB7$UyFf6f%TT9l%Q6_3@H~|%38%nL%@?BnIaE=MN;N(SUT*0#YveiAkybVpoxM9$LykQ6L^m&OS!QF|JZU4w_2fM9#q#ZMW4{t`#3H@oXV~&mAD^ObHufGFb=8C|6^jqZ(B#XY2TR28u&x=w)WcWDKx3*DU zbefcwM@A2jwLGdOg0pf2g>?Kx-(bt$;_`C*lE}@q=^5_kG4&muso%q?p>DQReMWJ9 z6A3j$N%#sUFLYuh7Eb(|CDrRXdnWIy+C*L;C{%TETm{_f6}5{yWhtB3$wK zPnTcj%FyfF{AgQ^Xrw8xk*2iaUpkW0<0La_Qo1cdRZ*>kfGiPRd{E>|&IZPsxp4Ua z>hPHk&u=9HZxxm8JG4K);i<3f{1U7{0j8vgjuQ%rnzTOB&aZ#A5|1@vUOU~f^uwpe zgirF0Ve%ltHdnrP?0u!EY_}vye!~|;&M7Y&c5?3I?2)}+h&yAR^Z%xC)v6X&>Q!jf knP?{#SHfOB&i@E70Q(eglU)(D^Z)<=07*qoM6N<$g0&O7BLDyZ literal 0 HcmV?d00001 diff --git a/src/main/resources/markers/wrench.png b/src/main/resources/markers/wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8cc7a2ad02f6d880412577bd3c3f9bd77dc99f GIT binary patch literal 660 zcmV;F0&D$=P)ZWV1D!WOtK1XM@TfnzRpQ80Nj-H}k$3j)=f<94du-@Rg%PG*)XeHPzLc zk^a4cVxjPjFh;h0<46qDv;0T z$M&^5pyTv-`)(GZC?X?f7{-C9RIaHiAW2e<#cILAf*)p+5utDhmoHsx|CjGQ(^FkQ zktC=dS*=#+bUMhgtZw_XHB|+2xojq%m+NW_1{9gl!Hy2xzH^UC?D_`19&36~R1`(Z zreey8@I|M<1 zn92AaJ-pw;*!gmg+Gw~jKGZ!Dpbu%HTW><-o%E3FiYv-e4$Wv$Ys;)wK!y7}A(~4O zU7h9W@aQt_z3wKP&E{CGMV0;U!N!~8L!G;tou~J2#pCyJr1B-ilWBw%%WHw>KUeZe zr%s#tCq`Pg*qyG<9Slw&B@v>(c>G+PpBCk82+PlAq)#;EP- zcdEZOJjK%6s=bn?1rAR>@<_`iL=p)sh5gg1f$m0000+2Klq6k5k%aLLc}aA_yIu(N?f8w zceA)Avoq7ap6N{1Ll6s!{#4bgSFc;{j0`;V139ohSG%#h=S>kljv+)ZG?q<}| z_qtkZ1Yrnv2KpWV)%!s612E5`Y$p%~z`EmH8TT6+U0VQ`_nXcGr9rp}8{_o~Fnt;5 z%(HkksdurkMZjr*IM~Cuvx>P)Rvl4|o6KoO^J)yFxHry_a0Fpis~+cgW#HRWHu?f= z7_suSoA=WeEg@R>>+!bvj%%7#bT0;V{|5MBG3laWFmv?gElYc6+^Lq0 zaLz1eUI2bo<8aVyV`W#vHen#P@yvB5lf~@!WmZP8%-T3EmYLDXG!uyd(#~S^-ZRyY ztn366Nh&_k3m8OCYkptV+B)@eo9dffullX2y(MHgsXI@5dSh) zSp2?Rrnq86jhG03pEe_yUuay*iU20Et?fL8|Fk~>3;@0S#Ntyq=$Zfk002ovPDHLk FV1hMoEVcju literal 0 HcmV?d00001