1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
| public class MapPanel extends JPanel { // une classe qui permet d'afficher un ensemble de région et de gérer la sélection d'une région
private static final Color SELECTION_COLOR = new Color(0,0,0,164); // la couleur utilisée pour marquer une sélection : il s'agit d'un noir transparent (le 164 est une transparence de 255/164=64% environ)
private final List<MapRegion> regions = new ArrayList<>(); // la liste des régions affichées
private final EventListenerList regionSelectionListenerList; // un conteneur d'écouteur d'évenement spécifique pour gérer la sélection (non indispensable, mais plus simple à gérer)
private Dimension preferredSize = new Dimension(0,0); // la taille du panel (à 0,0 au début, puisque pas de région
private MapRegion selectedRegion; // la région actuellement sélectionnée
private Point offset = new Point(0,0);
private AffineTransform offsetTransform = new AffineTransform();
public MapPanel() {
regionSelectionListenerList = new EventListenerList(); // créé le conteneur d'écouteur d'évenement
addMouseListener(new MouseAdapter() { // un écouteur de souris pour gérer le clic sur région
@Override
public void mouseClicked(MouseEvent e) {
if ( e.getClickCount()==1 && e.getButton()==MouseEvent.BUTTON1 ) { // si un clic sur le bouton de clic de la souris
for(MapRegion region : regions) { // on parcourt toutes les régions
if ( offsetTransform.createTransformedShape(region.path).contains(e.getPoint()) ) { // si la forme de la région contient le point de la souris
fireRegionSelected(region); // alors on envoi l'évenment "région cliquée"
}
}
}
}
});
}
public void select(MapRegion region) { // cette méthode permet de sélection une région (ou de désectionner en passant null)
selectedRegion=region; // on affecte la région sélectionnée avec le paramètre
repaint(); // on redessine le panel (pour que la région sélectionnée se marque comme étant sélectionnée, ou que la région déselectionnée ne se marque plus comme étant sélectionnée
}
public void register(MapRegion region) { // cette méthode permet d'ajouter une nouvelle région
regions.add(region); // on stocke la nouvelle région dans la liste de régions
Rectangle bounds = null; // on veut calculer la taille du composant (soit la taille minimum pour afficher toutes les régions) : on va faire l'union de toutes les bounds
// les bounds d'une forme c'est le rectangle horizontal minimum qui contient l'ensemble de la forme (quelque soit la forme, un triangle, un cercle, une forme complexe représentant une région d'un pays, etc...)
for(MapRegion reg : regions) { // on parcourt toutes les régions
if ( bounds==null ) {
bounds=reg.path.getBounds(); // pas d'union de la première avec la précéndente, parce que pas de précédente
}
else {
bounds = bounds.union(reg.path.getBounds()); // on fait l'union de la zone de la région courante avec la taille servant à faire l'union de toutes les bounds
}
}
this.offset = new Point((int)bounds.getX(),(int)bounds.getY()); // un offset pour recaler la carte en haut à gauche
this.preferredSize=new Dimension((int)bounds.getWidth(),(int)bounds.getHeight()); // la taille du composant est l'espace compris entre 0,0 et maxX, maxY de l'union de tous les bounds (fait un dessin pour t'en rendre compte si nécessaire)
this.offsetTransform = AffineTransform.getTranslateInstance(-offset.getX(), -offset.getY());
repaint(); // on a ajouté une nouvelle région : il faut redessiner pour la voir apparaitre
}
@Override
public Dimension getPreferredSize() {
return preferredSize; // on revoit la taille préférentielle du composant, qui est la taille minimum pour afficher toutes les régions (voir méthode register)
}
@Override
protected void paintComponent(Graphics g) { // pour dessiner le composant
super.paintComponent(g); // on appelle toujours le dessin standard (dessine le fond du composant)
g.translate(-offset.x, -offset.y); // permet de recaler la carte en haut à gauche
final Graphics2D g2d=(Graphics2D)g; // on a besoin d'accèder à des méthodes spécifiques de Graphics2D
g2d.setFont(g2d.getFont().deriveFont(Font.BOLD,12)); // on passe la police actuelle en gras et taille 12 pour afficher les noms de régions
for(MapRegion region : regions) { // on parcourt toutes les régions
g2d.setPaint(region.color); // on sélectionne la couleur de fond pour tous les dessins qu'on fait après
g2d.fill(region.path); // on rempli la forme de la région avec la couleur sélectionnée
if ( region==selectedRegion ) { // si la région est sélectionnée
g2d.setColor(SELECTION_COLOR); // on sélectionne la couleur de sélection
g2d.fill(region.path); // on remplit la forme à nouveau : comme la couleur de sélection est transparent, son noir va se combiner avec la couleur de la forme qu'on a remplie juste avant
}
g2d.setColor(getForeground()); // on utilise la couleur standard du foreground (noir par défaut)
g2d.draw(region.path); // on dessine le contour de la forme, pour avoir une bordure
}
for(MapRegion region : regions) { // on parcourt toutes les régions
Point2D loc = getStringLocation(g2d, region.path.getBounds2D(), region.name, SwingConstants.CENTER, SwingConstants.CENTER); // on détermine la position du texte de nom de région
g2d.drawString(region.getName(), (int)loc.getX(), (int)loc.getY()); // on affiche le nom de région
}
}
public void addRegionSelectionListener(RegionSelectionListener actionListener) { // cette méthode sert à ajouter un écouteur d'évenements de sélection de région
regionSelectionListenerList.add(RegionSelectionListener.class, actionListener); // on ajoute l'écouteur au conteneur d'écouteur
}
public void removeRegionSelectionListener(RegionSelectionListener actionListener) { // cette méthode sert à supprimer un écouteur d'évenements de sélection de région
regionSelectionListenerList.remove(RegionSelectionListener.class, actionListener); // on retire l'écouteur du conteneur d'écouteur
}
private void fireRegionSelected(MapRegion region) { // cette méthode permet d'envoyer un évenement de sélection de région (qui dit "on a cliqué sur telle région"
for(RegionSelectionListener listener : regionSelectionListenerList.getListeners(RegionSelectionListener.class)) { // on parcourt tous les écouteurs stockées dans le conteneur
listener.selected(region); // on envoie l'évenement
}
}
public static class MapRegion { // cette classe représente une région
// j'ai limité la notion de région aux attributs suivant :
private final Shape path; // une forme (quelconque : ça peut être un rectangle, un cercle, un polygone, une forme complexe comme celle d'une région d'un pays
private final Paint color; // une peinture de remplissage (ça peut être une couleur, mais aussi une texture, une photo, etc.)
private final String name; // un nom de région
private final String data; // un texte de description (on pourrait ici avoir plusieurs attributs : un pour le nombre d'habitant, un pour la superficie, etc, mais pour un POC un texte est suffisant)
public MapRegion(Shape path, Paint color, String name, String data) { // pour créer une nouvelle région
this.path=path;
this.color=color;
this.name=name;
this.data=data;
}
public String getData() { // retourne la description de la région
return data;
}
public String getName() { // retourne le nom de la région
return name;
}
}
public static interface RegionSelectionListener extends EventListener { // définit un écouteur d'évenement spécifique pour la sélection de région
void selected(MapRegion region); // l'évenement est juste la région qu'on a cliquée
}
public static void main(String[] args) { // le programme principal de démo
JFrame frame = new JFrame(); // on créé une fenêtre
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // pour que l'application s'arrête complètement lorsqu'on ferme la fenêtre
final MapPanel mapPanel = new MapPanel(); // on créé un panel d'affichage de régions
// on enregitre 4 régions différentes, leur forme étant créées par les méthode createRegion1, createRegion2, etc... on indique la couleur, le nom, et le texte de description (les paramètres attendus par le constructeur de la classe MapRegion)
for(MapRegion region : createRegions(SENEGAL_REGIONS)) {
mapPanel.register(region);
}
// on enregistre un écouteur d'évenement de sélection de régions qui va appeler la méthode selectRegion en lui passant le panel d'affichage de régions et la région cliquée (reçue par l'évenement)
mapPanel.addRegionSelectionListener(new RegionSelectionListener() {
@Override
public void selected(MapRegion region) {
selectRegion(mapPanel, region);
}
});
frame.add(mapPanel); // on ajoute le panel d'affichage de région à la fenêtre (par défaut il se place au centre)
frame.pack(); // on demande un dimensionnement automatique (ça va utiliser le preferredSize calculée dans MapRegiion, parce que c'est comme ça que fonctionne le LayoutManager affectée par défaut au contentPane d'une JFrame à la création)
frame.setLocationRelativeTo(null); // on centre la fenêtre
frame.setVisible(true); // on affiche la fenêtre
}
private static void selectRegion(MapPanel mapPanel, MapRegion region) { // cette méthode permet de réagir au clic sur une région
mapPanel.select(region); // on marque la région cliquée comme sélectionnée
showData(region.getName(), region.getData()); // on affiche les informations
mapPanel.select(null); // comme la fenêtre d'affichage des informations est bloquante, on revient ici seulement quand elle est fermée, donc lorsqu'elle est fermée, on dit que la région n'est plus sélectionnée
}
private static void showData(String name, String data) { // on affiche les informations dans un dialogue modal (bloquant l'UI derrière = tant qu'on clique pas sur OK, on ne peut plus rien faire dans la JFrame)
JOptionPane.showMessageDialog(null, data, "Région "+name, JOptionPane.INFORMATION_MESSAGE);
}
// http://plugins.spip.net/svgmap.html (extrait du fichier de définitions des pourtours de région augmenté des informations supplémentaires nécessaires
private final static String[][] FRANCE_REGIONS = {
{"M323.34,117.03l-2.08,4.81l-23.76-1.75l-6.13-7.29l-7.23,2.37l-5.39-3.77l-15.95,2.04l0.36-13.6l3.78-5.62l-2.97-3.64l4.1-12.98l-2.31-8.85l-5.27-7.94l0.9-17.17l3.77-5.27l6.35,4.65l10.14,0.57l7.34,8.19l13.89-0.61l-2.41,6.26l26.82,4.56l4.11,6.19l9.94-3.3l7.6,2.48l9.93-2.61l6.39,5.9l5.76-4.26l0.38,11.07l-6.36,10.2l-3.58,15.72l-17.57,3.02l3.91,10.65l-5.72-0.76l0.7,14.48l-9.31,2.29L323.34,117.03z","Picardie","#5BC4ED","Blahblah"},
{"M263.19,99.9l-0.41,13.54l-9.44,4.66l-2.5,13.32l-17.88,6.74l-6.21-9.89l-3.18-5.44l-7.77-1.84l1.32-17l-4.7-13.87l7.48-1.81l7.04,0.39l-10.02-2.22l-3.62-0.77l-6.42-1.2l3.65-7.85l9.18-6.15l12.36-2.92l15.36-5.52l9.35-4.47l4.22-5.88l-0.48,9.14l5.21,7.87l2.31,8.85l-4.1,12.98l3.03,3.7L263.19,99.9z","Haute-Normandie","#E6C199","Blahblah"},
{"M223.56,122.83l9.4,15.34l-0.64,6.06l1.09,3.88l-0.55,8.02l-6.34,2.49l-0.2,7.42l-6.42-4.65l-7.71-2.93l0.05-4.72l-3.36-4.63l-15.58,4.09l-0.86-7.5l-6.43-5.67l-19.89,5.66l-4.75-5.84l-14.94-2.6l-4.36,5.86l-7.08-4.01l-0.06-6.24l8.46-0.78l-5.51-6.13l1.89-27.39l-7.93-20.16l2.4-6.25l-4.54-3.87l3.27-2.32l4.83,3.89l10.73,0.04l6.92-2.11l3.26,1.85l-0.06,4.99l-3.14,4.54l3.82,10.21l5.37,0.02l32.66,6l8.2-3.34l6.86-1.92l4.7,13.87l-1.32,17L223.56,122.83z","Basse-Normandie","#E66166","Blahblah"},
{"M308.04,177.68l-16.31-2.95l-3.94-9.76l-15.24,0.32l-7.77-12.18l-9.31-7.84l-0.19-8.74l-4.45-5.1l2.5-13.32l9.44-4.66l15.95-2.04l5.39,3.77l7.23-2.37l6.13,7.29l23.76,1.75l2.08-4.81l10.09,16.02l3.43,15.88l-4.76,4.2l-1.41,12.08l-13.32,0.35L308.04,177.68z","Île-de-France","#97BF0D","Blahblah"},
{"M106.4,187.95l-3.82,8.91l-7.55,2.9l-14.77-0.71l-5.81-5.87l7.35-0.15l-0.33-3.35l-9.61,0.01l-5.22,1.93l-0.05,8.88l-3.11-4.06l1.58-6.57l-1.35-5.07l-6.53-3.7l-2.93,1.51L47,174.85l-12.71-2.49l-1.98-4l-8.45-0.47L24,174l-9.87-4.44c0.8-11.62-13.39-16.11-14.13-16.35l14.68,0.28l6.43-2.98l-6.34-6.46l-2.44,2.64l-1.5-2.86l-3.72-3.54l4.14-2.54l3.71,3.54l9.12-1.15l-5.32-4.74l3.61-3.12l-8.08,2.31l-10.18-0.01l-2.99-5.72l4.02-0.88l-0.22-5.01l15.63-5.23l3.18,2.96l13.74-2.56l5.29,5.29l3.83-6.45l2.94,6.56l11.52-11.29l8.45,0.47l10.28-3.19l-1.02,6.61l4.92,4.04l8.13,13.23l9.39-5.03l9.17-1.7l-0.46,6.64l5.78-1.9l2.27,2.19l3.05-0.82l-0.26-4.46l6.54-0.47l-1.29,2.16l0.94,2.82l7.98,0.04l0.06,6.24l7.08,4.01l4.36-5.86l9.72,1.65l-1.12,14.23l-4.21,3.65l4.04,11.06l-0.32,4.7l-7.04-0.39l-0.87,4.39l-5.42,7.37l-7.44-4.72l-6.62,5.74l-7.31-0.68l-4.73,3.06L106.4,187.95z","Bretagne","#64A1D3","Blahblah"},
{"M383.88,184.86l0.27,0.34l-12.26,5.51l-7.63,4.2l-3.67-4.1l-11.38,1.03l-6.29-15.35l-6.72-0.94l1.02-6.6l-6.53-3.75l1.41-12.08l4.76-4.2l-3.43-15.88l9.31-2.29l-0.7-14.48l5.72,0.76l-3.91-10.65l17.57-3.02l1.11-3.83l2.47-11.9l6.36-10.2l-0.38-11.07l11.42,0.93l12.89-10.61l0.24,21.11l5.59,0.87l15.37,14.69l-3,2.66l-7.78-2.16l-7.95,19.88l-1.56,10.68l4.91,2.44l-2.04,13.27l-6.2-0.35l3.31,9.01l5.6,2.06l14.97,12.48l-0.72,6.42l10.34,1.69c0.02,0.41,0.27,8.35,0.21,9.17l-2.75,2.86l8.97,9.44l-8.02,9.82l0.52,4.75l-3.84,2.29l-2.09-2.34l-6.03,5.49l-11.73-2.05l-5.18-3.58l0.54-7.78L383.88,184.86z","Champagne-Ardenne","#E09C63","Blahblah"},
{"M490.31,170.33l-3.83-1.88l-1.6-9.52l8.04-9.13l3.24-6.89l-4.29-3.58l-6.94,2.39l-4.57-7.47l5.08-8.05l8.76,5.52l10.15-1.14l2.47-7.08l4.26-0.32l22.82,5.16l-2.9,9.28l-7.78,6.23l-14.77,41.93l1.98,4l-6.98,15.16l3.41,7.45l-7.17,9.59l-5.09,0.79l-2.5,3.53l-4.72-6.09l-1.33-4.58l-4.76-4.7l-1.11-5.09l-6.74-3.09l9.31-17l1.15-8.54L490.31,170.33z","Alsace","#CCB32F","Blahblah"},
{"M193.29,153.19l15.58-4.09l3.36,4.63l-0.05,4.72l7.71,2.93l6.42,4.65l7.1,7.92l-5.86,0.41l-0.59,11.58l-9.1,5.56l-0.13,7.93l-18.79,1.2l-1.54,16.2l-6.97,4.8l1.63,6.94l-6.44,2.87l-22.93-0.97l-5.11,4.62l-19.5-5.83l10.5,9.61l0.96,6.45l10.43,8.63l-3.72,4.79l0.83,12.54l3.29,3.45l-7.87,3.96l-2.08-3.46l-14.09-0.51l-8.07-1.85c-0.51-0.52-10.03-10.28-10.86-10.6c-0.82-0.32-4.31-0.51-4.48-0.52l-3.59-13.54l-10.07-9.72l4.1-2l-1.14-3.95l6.18-3.54l1.02-2.43l-8.09-5.74l3.84-6.45l14.44-0.3l-15.32-3.35l-6.44,3.24l-11.04-3.95l4.05-1.44l-1.36-4.8l5.53-4.01l7.55-2.9l3.82-8.91l8.71-0.66l4.73-3.06l7.31,0.69l6.62-5.74l7.44,4.72l5.42-7.37l0.87-4.39l7.04,0.39l0.32-4.7l-4.04-11.06l4.21-3.65l1.12-14.23l5.22,0.96l4.75,5.84l19.89-5.66l6.36,5.6L193.29,153.19z","Pays de la Loire","#EBFB94","Blahblah"},
{"M270.86,280.97l-17.31-0.39l-9.38,0.96l-10.41-2.13l-8.2-15.69l1.29-9.4l-6.25-1.52l-9.64-12.85l-10.22,2.41l-0.06-10.24l-8.63-3.56l-1.63-6.94l6.97-4.8l1.41-16.23l18.92-1.17l0.13-7.93l8.99-5.74l0.71-11.4l5.86-0.41l-7.1-7.92l0.2-7.42l6.44-2.34l0.55-8.02l-1.19-4.02l0.64-6.06l17.88-6.74l4.45,5.1l0.33,8.95l9.17,7.63l7.77,12.18l15.24-0.32l3.94,9.76l21.25,3.87l0.77,13.37l-5.27,10.82l3.33,7.93l-4.67,3.26l-0.64,7.7l4.64,6.37l-1.22,17.7l3.49,6.86l-0.17,4.07l0.02,2.65l-21.8,5.58l-2.2,11.54l-13.94,5.32L270.86,280.97z","Centre","#ABDAC3","Blahblah"},
{"M311.82,210.72l-3.33-7.93l5.27-10.82l-0.77-13.37l-4.94-0.92l9.32-12.12l13.32-0.35l6.48,3.56l-1.02,6.6l6.72,0.94l6.29,15.35l11.37-1.03l3.68,4.09l19.89-9.71l13.08,14.66l-0.8,7.45l5.17,3.58l11.73,2.05l5.34,4.46l-5.56,6.9l2.49,4.86l-0.82,6.16l-13.07,19.23l6.91,6.53l-7.23,2.37l5.98,7.56l-0.86,9.21l-17.21-0.13l-2.1,13.97l-3.64,4.41l-9.61-8.35l-10.62,10.51l-10.98-1.23l-4.45-4.63l3.45-5.42l0.1-9.71l-7.9-4.33l-7.37-12.7l-7.68,5.47l-15.01-3.62l-0.19-4.94l0.15-6.72l-3.49-6.86l1.22-17.7l-4.64-6.37l0.64-7.7L311.82,210.72z","Bourgogne","#FBF083","Blahblah"},
{"M383.51,298.29l3.64-4.41l2.1-13.97l17.21,0.13l2.13,3.93l-4.89,4.06l8.24,7.69l5.62-3.57l5.89,4.76l19.82-12.77l3.81,11.42l-8.38,6.76l1.31,3.54l1.27-0.07l11.14-5.75l0.16-6.38l7.16-5.43l17.17,0.96l2.49,9.02l-6.36,2.14l3.25,6.01l8.31,6.57l-1.11,7.99l-8.66,2.58l-0.44,6.36l7.76,6.27l1.6,9.54l7.09,3.72l-3.09,3.99l-0.36,9.14l-5.39,0.26l-4.81,4.17l-11.8,1l-11.23,5.06l-7.45-2.64l-0.38,5.54l7.67,3.48l-0.81,7.73l-7.16-2.77l-7.14,1.13l-3.28,2.32l-4.03,1.16l-5.39,8.58l-5.11,0.23l-3.08,3.69l4.63,2.55l-2.22,3.49l-7.37,0.42l-3.08,3.71l4.52,4.14l4.43,1.36l3.89,5.85l-2.73,3.02l-3.02-1.28l-4.26,4.08l-9.2-6.84l-8.49,3.19l5.49-8.77l-12.69,3.74l-6.85-3.31l-13.39,1.61l0.5-3.17l-5.84-1.29l-2.89,5.11l-8.48-4.09l-0.24-4.73l-4.32-2.88l-5.12-20l18.33-7.58l-0.24-4.73l3.16-0.66l1.2-5.21l4.24-0.03l1.33-6.87l-3.96-8.28l-4.28,0.59l-1.66-4.53l-13.67,1.45l2-8.5l-8.76-16.31l1.47-4.92l-4.41-5.66l6.36-6.17l1.31-14.92l4.19-0.46l4.45,4.63l10.98,1.23l10.62-10.51L383.51,298.29z","Rhône-Alpes","#F1A1AC","Blahblah"},
{"M218.03,391.29l-0.2,2.9l-4.49,3.64l1.67,8.48l-7.32-0.3l-0.44,2.19l3.98,3.83l-2.6,8.86l-8.28,1.2l-0.44,2.32l-3.79,1.84l-8.54-3.25l-7.54,2.79l-8.66-0.44l-3.77,6.13l-1.71-3.98l-11.64,4.9l0.7,14.48l-6.05,5.25l12.4-0.62l0.78,9.09l3.28,1.57l-0.24,7.6l-11.08,8.98l0.44,5.82l-5.32-0.7l-1.41,12.3l-15.21-0.85l-5.07-8.34l-20.3-8.91l-1.96-4.27l-4.55,4.46l-5.8-1.99l4.39-10.3l-3.92-4.67l-5.04,3.33l-2.48-5.14l-5.06-0.28l-1.18-3.4l7.44-1.25l6.95-4.73l6.95-8.88l7.23-18.76l6.68-35.45l1.53-5.75l9.9-0.01l-4.31-7.18l-4.51,3.92c0.15-0.66,10.17-41.46,7.97-50.09l3.64-3.68l0.75,5.59l8.95,9.38l5.41,20.02l-0.86-19.01l7.09-0.29l4.43,3.44l0.1,6.67l6.96,1.5l6.93,6.84l4.35-3.33l1.05-4.33l11.03-5.41l-0.1-6.66l6.91-1.84l4.79-11.95l8.24-4.51l10.61,6.47l9.21,12.04l4.68-0.3l-0.49,7.06l-4.68,6.4l7.9,8.49l-0.17,10.55l-8.87,13.93l0.21,5.16L218.03,391.29z","Aquitaine","#FCEA0D","Blahblah"},
{"M419.99,487.29l-13.23-0.74l-4.35-2.46l4.47-3.36l-5.61-4.75l-9.49,2.25l-3.55-5.76l-5.64-0.31l-2.07,5.44l-8.9-2.16l-3.83-5.77l-9.84-0.83l0.64-5.24l8.15-1.36l-0.62-5.44l7.48-1.8l1.45-8.8l10.35-6.65l-0.97-6.34l-6.39-9.89l2.99-6.5l6.85,3.31l12.69-3.74l-5.49,8.77l8.49-3.19l9.2,6.84l4.26-4.08l3.02,1.28l2.73-3.02l-3.89-5.85l-4.43-1.36l-4.52-4.14l3.08-3.71l7.37-0.42l2.22-3.49l-4.63-2.55l3.08-3.69l5.11-0.23l5.39-8.58l4.03-1.16l3.28-2.32l7.14-1.13l7.16,2.77l0.81-7.73l-7.67-3.48l0.38-5.54l7.45,2.64l11.23-5.06l10.83,16.99l6.99,1.23l0.94,9.07l-4.48,1.29l-2.32,2.59l-2.78,7.16l4.21,4.53l-2.83,6.08l4.78,4.14l10.1,5.28l11.63,3.42l11.17-2.15l3.13,7.95l-7.5,6.24l-4.25,12.54l-11.69,1.28l-7.76,10.12l-5.47-0.17l-5.28,9.55l-6.27,0.76l-4.91,5.55l6.14,1.19l-6.5,6.42l-8.57-0.89l-2.29,4.59l-9.72-2.49l0.76,5.33l-11.92-3.45l0.78,5.04l-7.95-3.5L419.99,487.29z","Provence-Alpes-Côte d'Azur","#3875FF","Blahblah"},
{"M520.93,495.94l5.25,0.65l-0.26,14.49l3.85,12.02l-0.57,18.6l-6.99,6.58l0.34,5.02l-2.89,21.22l-5.52,6.35l-6.9-6.5l-8.45-0.48l1.44-3.56l-3.75-3.79l5.48-5.8l-9-1.61l3-6.92l-5.42-0.82l5.42-7.74l-6.42-0.82l-0.57-6.75l3.42-2.63l-0.04-5.46l7.04-11.83l9.2-2.26l5.77-3.51l3.95,1.83l2.8-15.95L520.93,495.94z","Corse","#FD9164","Blahblah"},
{"M297.91,454.21l-7.42,5l-5.72-3.1l-5.93,4.11l4.57,7.47l-7.04,3.72l-12.7-4.31l-0.57,4.14l-8.2-4.07l-4.18,2.67l-6.16-2.51l-0.72,4.49l-5.38,0.26l-0.22,8.23l10.87,9.08l-0.17,9.5l-6.74,6.05l5.92,4.76l5.17-1.1l2.8,4.5l-16.25,10.2l-5.97-2.04l1.43-4.36l-4.59-3.04l-9.03-0.23l-3.75-7.15l-5.97,0.5l-13.71-7.55l-7.63-1.37l-0.69,9.97l-8.88-2.44l-3.96-0.28l-4.66,1.96l-4.54-3.87l-9.43,0.9l-10.72-7.86l1.43-12.53l5.32,0.7l-0.46-5.58l11.1-9.22l0.22-7.37l-3.28-1.56l-0.77-9.33l-12.4,0.62l6.05-5.25l-0.7-14.48l11.64-4.9l1.71,3.98l3.77-6.13l8.64,0.68l7.55-3.03l8.54,3.25l3.79-1.84l0.44-2.32l8.28-1.2l2.6-8.86l-3.98-3.83l0.44-2.19l7.32,0.3l-1.67-8.48l4.49-3.64l0.2-2.9l7.45-1.39l-0.21-5.16l8.87-13.93l10.56,2.01l18.09-1.13l-1.64,9.09l5.51,1.98l-1.73,8.79l3.3,1.43l11.79,1.08l12.53-17.63l5.51,10.17l3.41-0.22l1.03,9.64l5.05,8.61v16.38l10.25,3.07l-3.08,6.7l7.21,2.98l-5.34,3.59l-0.03,4.72l-6.82,4.62l-4.4-1.92l-4.06,9.77L297.91,454.21z","Midi-Pyrénées","#94F800","Blahblah"},
{"M276.37,471.41l7.04-3.72l-4.57-7.47l5.93-4.11l5.72,3.1l7.42-5l3.37,0.33l4.06-9.77l4.28,1.76l6.94-4.46l0.03-4.72l5.34-3.59l-7.21-2.98l3.08-6.7l-10.25-3.07v-16.38l-5.05-8.61l6.1-14.8l8.88-5.75l5.9,4.63l0.46,5.58l3.96-0.05l2.1-5.71l3.11-0.11l0.26,4.32l7.98,3.23l5.12,20l4.32,2.88l0.24,4.73l8.48,4.09l2.89-5.11l5.84,1.29l-0.5,3.17l13.39-1.61l-2.99,6.5l6.39,9.89l0.97,6.34l-10.35,6.65l-1.45,8.8l-7.48,1.8l0.74,5.6l-8.28,1.2l-0.64,5.24l-6.46-0.64l-2.47-5.13c-12.11-0.68-19.38,11.31-19.76,11.94c-2.79-0.72-10.17,5.21-10.56,5.51c-7.31-0.69-10.98,2.01-11.18,2.15c-11.16,6.08-10.93,22.19-10.92,23.04l1.24,14.79l3.24,2.13l3.86,5.49l-3.1,4l-3.49-2.7l-12.14-0.12l-5.51,6.07l-4.84-3.6l-5.99,4.94l-7.24-5.68l-5.12-3.62l-10.6,6.08l-7.11-10.16l16.25-10.2l-2.95-4.62l-4.87,1.18l-6.07-4.73l6.74-6.05l0.17-9.5l-10.78-9.09l0.24-8.37l5.13-0.08l0.87-4.52l6.16,2.51l4.25-2.83l8.26,4.11l0.27-3.99L276.37,471.41z","Languedoc-Roussillon","#A3A6B3","Blahblah"},
{"M432.79,192.93l-8.97-9.44l2.75-2.86l-0.21-9.17l-10.34-1.69l0.72-6.42l-14.97-12.48l-5.6-2.06l-3.31-9.01l6.2,0.35l2.04-13.27l-4.91-2.44l1.56-10.68l7.95-19.88l7.78,2.16l3-2.66l4.96,1.89l9.89-1.6l10.06,7.17l11.54-3.24l4.27,3.57l5.14-0.82l11.33,16.18l6.49-4.08l10.84,6.72l8.63-3.55l6.53,1.06l0.96,6.79l-0.29,0.02l-2.47,7.08l-10.15,1.14l-8.76-5.52l-5.08,8.05l4.57,7.47l6.94-2.39l4.16,3.84l-3.11,6.63l-8.04,9.13l1.6,9.52l3.83,1.88l-6.41,6.86l-1.15,8.54l-9.31,17l-9.9-8.97l-3.17,4.82l-4.8-6.26l-10.65,2.74l-0.34-5.14L432.79,192.93z","Lorraine","#65B361","Blahblah"},
{"M145.3,339.97l-5.12-10.62l-6.82-7.61l-7.56-3.59l-2.04-4.78l-9.97-6.96l-1.07-5.05l9.1,3.29l5.53,5.27l5.93-3.17l5.04-7.5l-3.58-5.48l4.62-1.4l-8.3-10.74l5.28-6.92l14.09,0.51l2.08,3.46l7.87-3.96l-3.29-3.45l-0.83-12.54l3.72-4.79l-10.43-8.63l-0.96-6.45l-10.5-9.61l19.5,5.83l5.11-4.62l22.93,0.97l6.44-2.87l8.63,3.56l0.06,10.24l10.22-2.41l9.64,12.85l6.25,1.52l-1.29,9.4l8.2,15.69l-10.13,5.22l-10.92,10.77l7.1,12.68l-12.75,12.02l-8.24,4.51l-4.79,11.95l-6.91,1.84l0.1,6.66l-11.03,5.41l-1.05,4.33l-4.35,3.33l-6.93-6.84l-6.96-1.5l-0.1-6.67l-4.43-3.44L145.3,339.97z","Poitou-Charentes","#D588B5","Blahblah"},
{"M219.82,308.08l-7.1-12.68l10.92-10.77l10.13-5.22l10.49,2.29l9.31-1.12l17.31,0.39l4.46,0.8l2.83,8.21l12.43,12.36l-1.37,10.97l-9.25,3.71l4.46,4.97l-2,4.33l4.69,5.81L284.8,337l-0.38,9.7l-9.51,2.53l-1.96,7.94l-4.78,3.62l-1.18,4.93l-4.21,5.99l-18.09,1.13l-10.56-2.01l0.17-10.55l-7.9-8.49l4.68-6.4l0.49-7.06l-4.69,0.28l-9.2-12.02l-10.61-6.47L219.82,308.08z","Limousin","#64A0D3","Blahblah"},
{"M275.33,281.76l13.94-5.32l2.2-11.54l21.8-5.58l0.19,4.94l15.01,3.62l7.68-5.47l7.37,12.7l7.9,4.33l-0.1,9.71l-3.45,5.42l-4.19,0.46l-1.31,14.92l-6.36,6.17l4.41,5.66l-1.47,4.92l8.76,16.31l-2,8.5l13.67-1.45l1.66,4.53l4.28-0.59l3.96,8.28l-1.33,6.87l-4.24,0.03l-1.2,5.21l-3.16,0.66l0.24,4.73l-18.33,7.58l-7.98-3.23l-0.26-4.32l-3.11,0.11l-2.1,5.71l-3.96,0.05l-0.46-5.58l-5.9-4.63l-8.88,5.75l-6.1,14.8l-1.03-9.64l-3.41,0.22l-5.51-10.17l-12.53,17.63l-11.79-1.08l-3.3-1.43l1.73-8.79l-5.51-1.98l1.64-9.09l4.21-5.99l1.18-4.93l4.78-3.62l1.96-7.94l9.51-2.53l0.38-9.7l2.32-4.87l-4.69-5.81l2-4.33l-4.46-4.97l9.25-3.71l1.37-10.97l-12.43-12.36L275.33,281.76z","Auvergne","#FE5CE6","Blahblah"},
{"M327.25,61.98l-26.82-4.56l2.41-6.26l-13.89,0.61l-7.34-8.19l-10.14-0.57l-6.35-4.65l4.49-27.99l6.36-5.52l14.86-2.5L307.96,0l3.43,15.74l6.98,5.38l13.3-4.25l5.65,16.43l9.49,1.64l3.75,11.31l17.97,1.57l2.44,18.56l-5.76,4.26l-6.39-5.9l-9.93,2.61l-7.6-2.48l-9.94,3.3L327.25,61.98z","Nord-Pas-de-Calais","#F8C434","Blahblah"},
{"M473.44,202.73l6.74,3.09l1.11,5.09l4.76,4.7l-0.68,6.63l-5.78,1.06l-4.21,3.61l9.81,1.15l-0.28,4.14l-25.78,21.33l-1.98,8.21l-10.89,6.33l-0.21,0.97l0.78,7.12l-3.58,7.96l-19.82,12.77l-5.89-4.76l-5.62,3.57l-8.24-7.69l4.74-4.27l-1.98-3.72l0.86-9.21l-5.98-7.56l7.23-2.37l-6.91-6.53l13.07-19.23l0.87-5.97l-2.49-4.86l5.56-6.9l-5.34-4.46l6.03-5.49l2.09,2.34l3.84-2.29l-0.52-4.75l8.02-9.82l11.8-3l0.34,5.14l10.65-2.74l4.8,6.26l3.17-4.82L473.44,202.73z","Franche-Comté","#A8CCEF","Blahblah"}
};
// https://www.amcharts.com/svg-maps/
private final static String[][] SENEGAL_REGIONS = {
{"M37.765,531.05l0.498,0.462l0.396,4.828l0.854,1.479l1.048,2.896l0.647,2.635l0.117,1.731l0.252,0.339l0.951,0.303l0.198,1.3l-0.174,1.208l-0.482,0.444l-1.468,0.342l-0.46,0.506l-0.025,0.293l0.373,0.041l-0.022,0.732l-0.493,2.504l1.133,0.989l-0.003,1.556l-0.704,3.099l0.673,1.922l-1.87,1.126l0,0l-1.386,-2.947l-3.44,-4.147l-5.689,-4.293l-1.219,-0.579l-1.316,-0.423l-0.332,0.277l-5.067,-2.192l-2.771,-0.719l-2.769,-0.034l-2.541,0.625l-1.006,0.643l-0.537,0.866l0.134,0.958l0.578,0.281l0.556,-0.117l0.068,0.57l-0.754,0.65l0.488,0.955l-0.111,0.336l-0.507,-0.118l-0.283,-0.586l-0.334,0.253l0.219,0.142l0.028,0.31l-0.274,0.112l0.63,0.366l0.137,0.141l0.411,0.141l-0.082,0.563l-0.987,0.453l-0.233,0.756l0.397,0.678l-0.384,0.451l-0.325,-0.85l-0.744,-0.531l0.109,-0.576l-0.466,-0.612l-1.069,-0.191l-0.137,-0.506l-0.295,0.398l-0.299,-0.174l-0.42,0.226l0.097,-1.048l-0.837,-0.811l0.384,-0.508l-1.398,-0.93l-0.274,-0.845l-0.658,0.028l-0.055,-0.282l-0.521,-0.112l-0.082,-0.761l-1.124,-1.183l-1.48,-0.282l0.384,-1.183l0.676,0.366l0.229,-0.311l0.736,0.07l0.113,-0.492l1.299,0.05l0.675,-0.275l0.74,-0.93l1.042,0.451l2.775,-0.535l7.204,-2.876l0.384,-0.366l0.247,0.142l0.11,-0.339l1.919,-0.423l0.274,-0.395l7.375,-3.1L37.765,531.05z","Dakar","#5BC4ED","Blahblah" },
{"M101.156,561.749l-0.571,-1.517l-4.896,0.453l-2.245,-0.642l-0.039,-0.425l-1.345,-0.921l-0.985,-1.402l0.123,-0.323l-0.641,-0.172l-0.307,-0.748l-0.758,0.179l-0.334,-0.391l0.255,-0.972l-0.678,-0.167l0.108,-1.629l2.549,-3.529l1.178,-0.517l0.562,-1.851l-0.453,-0.148l-0.087,-0.836l0.387,-0.491l0.492,-2.009l-5.154,-4.347l0.549,-1.286l1.885,-1.671l-0.335,-2.032l-1.113,-1.494l-1.591,-1.298l-3.055,-3.92l0.522,-0.628l2.19,-2.004l1.752,-0.868l4.336,-0.918l6.312,-1.922l0.526,-0.213l-0.102,-0.691l3.128,-0.163l2.473,-1.621l2.85,-0.82l5.121,0.242l0.301,0.322l0.576,-0.167l1.446,0.347l0.705,-1.018l0.32,0.27l-0.296,0.895l1.931,0.601l0.415,-0.523l0.712,-0.047l0.623,0.549l-0.021,0.818l4.506,1.212l2.633,1.171l0.746,0.513l-0.305,0.467l0.345,1.501l1.103,-0.371l0.356,0.455l0.926,0.102l4.052,-1.1l0,0l2.456,-0.023l3.048,0.528l2.132,-0.416l1.695,0.13l1.911,-0.918l1.805,-0.453l2.67,0.861l2.022,1.057l0.676,-1.497l0.692,-0.648l3.841,0.165l0.17,-0.539l1.366,-1.081l1.148,-0.332l1.705,0.351l0.087,0.398l-0.343,0.321l6.167,-0.918l0.205,0.542l1.163,1.139l3.894,1.746l1.165,1.525l0.345,1.341l1.294,2.242l1.261,1.023l1.805,-0.166l1.551,-0.873l2.435,-3.345l0.776,-0.437l0.686,0.043l0.573,0.342l0.349,1.181l1.903,2.06l0.785,1.393l0.018,0.821l-0.515,0.91l2.437,1.114l1.623,0.422l-0.403,0.444l5.955,3.67l4.17,-1.512l1.243,-0.148l2.12,0.467l2.973,1.159l0.176,0.649l-0.244,1.761l1.441,0.823l0,0l-0.847,0.873l-2.024,4.314l-0.615,1.64l-0.219,1.562l-4.985,1.1l-4.162,3.498l-0.851,-0.029l0,0l-0.577,-0.831l-0.236,-1.324l-0.996,-0.894l-0.521,1.345l-0.461,-0.035l-2.089,-0.716l0.147,-1.709l-1.586,0.604l-1.477,-1.219l0.244,-1.572l-1.109,-0.103l-1.174,0.804l-1.033,-0.298l-1.137,0.56l-0.379,0.371l-0.135,2.343l-2.738,-1.656l-2.284,-0.796l-2.333,-1.597l-2.09,-1.002l-1.09,0.645l-0.757,3.952l0.605,4.495l-0.189,1.836l0.247,0.926l-1.11,3.352l-1.349,1.504l-3.079,2.237l-1.81,0.802l-2.543,0.542l-3.486,2.019l-4.618,0.01l-1.254,0.341l-2.139,-0.575l-1.909,-0.725l-0.661,-1.019l-0.07,-1.564l-2.863,0.274l-0.562,0.953l-2.53,-0.162l-0.626,0.204l-2.397,-0.343l-2.45,-0.957l-0.55,0.239l-0.134,-0.588l-0.388,-0.161l-0.844,0.316l-1.137,-0.398l0.008,-0.694l-0.307,-0.19l-1.234,0.303l-2.993,-1.542l-0.784,0.719l-3.576,-0.318l-1.371,0.026l-0.78,0.363l-1.898,-0.229l-0.718,-0.582l-1.674,-0.236l-0.647,-0.732l-0.966,-0.263l-0.253,-0.953l-1.42,-0.418l-1.699,0.914l-0.655,-0.431l-1.133,0.601l-0.639,-0.092l-0.724,0.366l-3.229,-0.004l-1.548,0.725l-1.672,-0.574L101.156,561.749z","Diourbel","#E6C199","Blahblah"},
{"M87.786,656.963l0.494,0.981l0.411,0.141l0.027,0.392h0.521l0.542,0.617l0.527,0.112l-0.274,0.364l-1.207,-0.364l-1.289,-2.103L87.786,656.963zM89.239,653.823l0.603,0.981l-0.411,0.729l-0.713,0.477L89.239,653.823zM101.156,561.749l2.84,-0.25l1.672,0.574l1.548,-0.725l3.229,0.004l0.724,-0.366l0.639,0.092l1.133,-0.601l0.655,0.431l1.699,-0.914l1.42,0.418l0.253,0.953l0.966,0.263l0.647,0.732l1.674,0.236l0.718,0.582l1.898,0.229l0.78,-0.363l1.371,-0.026l3.576,0.318l0.784,-0.719l2.993,1.542l1.234,-0.303l0.307,0.19l-0.008,0.694l1.137,0.398l0.844,-0.316l0.388,0.161l0.134,0.588l0.55,-0.239l2.45,0.957l2.397,0.343l0.626,-0.204l2.53,0.162l0.562,-0.953l2.863,-0.274l0.07,1.564l0.661,1.019l1.909,0.725l2.139,0.575l1.254,-0.341l4.618,-0.01l3.486,-2.019l2.543,-0.542l1.81,-0.802l3.079,-2.237l1.349,-1.504l1.11,-3.352l-0.247,-0.926l0.189,-1.836l-0.605,-4.495l0.757,-3.952l1.09,-0.645l2.09,1.002l2.333,1.597l2.284,0.796l2.738,1.656l0.135,-2.343l0.379,-0.371l1.137,-0.56l1.033,0.298l1.174,-0.804l1.109,0.103l-0.244,1.572l1.477,1.219l1.586,-0.604l-0.147,1.709l2.089,0.716l0.461,0.035l0.521,-1.345l0.996,0.894l0.236,1.324l0.577,0.831l0,0l-0.067,2.552l0.325,2.455l1.266,1.433l1.04,0.379l-1.906,1.067l-0.431,-0.48l-6.715,5.424l0.095,2.646l-0.763,0.61l-2.875,-0.879l-0.84,0.094l-0.304,0.837l0.745,0.931l-0.649,0.241l0,0l-1.737,-1.141l-2.433,0.066l-0.815,0.382l-0.17,0.798l-0.556,0.765l-0.455,2.516l-0.798,0.951l-1.281,0.552l-2,0.11l-0.91,1.705l-1.458,5.115l-0.57,0.083l-8.556,-0.188l0.045,-6.605l-0.396,-0.67l-1.307,-0.161l-0.671,1.326l-0.583,0.39l-0.578,-0.251l-0.597,-0.923l-0.946,-0.716l-1.315,-0.328l-1.706,1.493l-0.209,1.111l-0.806,0.861l-1.58,0.275l-0.109,1.733l-1.38,1.467l0.161,0.858l-0.498,0.461l-1.748,0.733l-1.109,0.059l-1.03,-0.563l-2.813,-0.504l-1.461,1.035l-2.021,0.669l-2.383,-0.255l-2.347,0.226l-0.97,0.545l-0.797,1.109l-0.517,2.148l-5.006,-0.493l0.129,0.277l-0.792,0.529l0.223,0.951l-1.006,1.354l-0.434,0.221l-1.314,-0.732l-0.415,0.641l-0.395,-0.128l-0.613,0.673l-1.105,0.467l-0.227,0.771l-1.322,0.603l-0.157,0.346l-2.119,-0.27l-0.476,0.432l-0.603,2.141l-0.301,0.192l0.219,0.442l-0.958,0.339l0.864,0.556l-0.112,0.584l-0.269,0.329l-0.417,-0.002l-0.205,-0.535l-0.455,0.086l0.394,1.368l-0.268,1.526l1.442,1.03l-0.506,0.424l-0.645,-0.084l-0.145,0.344l0.476,0.608l0.4,-0.044l-0.143,0.383l-0.948,-0.456l-0.191,0.707l-0.486,-0.234l-0.207,0.981l-0.725,-0.011l0.531,0.712l0.902,-0.247l2.023,0.125l1.718,-0.565l2.958,0.212l1.668,1.298l2.152,0.797l3.143,2.66l0.424,2.683l-0.096,2.612l-0.519,0.822l-2.755,1.785l-0.305,0.999l-0.779,0.838l-0.232,1.211l0.121,0.356l1.043,0.692l0.171,-0.22l2.674,-0.225l1.575,0.481l-0.323,1.577l1.468,0.129l-0.066,1.562l0.704,1.019l0.529,5.412l-0.534,0.35l-0.762,2.002l-0.009,1.001l-0.396,0.21l-1.125,2.019l-1.84,-0.12l-0.462,0.224l0.868,0.973l-0.663,3.465l1.973,1.106l0.441,0.901l4.295,3.814l0.555,-0.552l0.49,-0.012l0.227,0.302l0.489,5.375l0.423,1.658l0.405,0.987l1.341,1.282l-0.108,0.908l1.295,0.161l-0.258,1.301l-1.413,0.706l0.102,0.678l1.119,0.649l-0.285,0.833l-0.802,0.685l0,0l-34.325,-0.067l-0.8,0.229l-4.728,-0.235l-0.091,-0.737l-0.425,-0.168l-0.91,0.536l-0.762,-1.555l-1.691,-1.316l0.174,-0.617l-0.92,-1.152l-1.943,-0.702l-1.801,-2.229l-0.533,-1.262l-0.33,-0.018v-2.804l0.502,-1.543l-1.569,-2.552l-0.615,-0.229l-2.569,-2.66l-0.218,0.253l-0.932,-0.141l-0.795,-1.458l-1.551,-0.82l-2.824,-0.737l-0.45,-0.665l-0.329,1.044l-0.329,0.141l-0.411,-6.201l0.384,-2.722l0.274,1.6l-0.247,2.554l0.192,1.739l0.322,0.337l-0.151,-9.663l-0.845,-0.227l-0.204,-0.662l-0.959,-11.684l0,0l0.931,-1.238l1.15,-0.06l-0.09,-2.131l-1.389,-1.517l0.094,-0.608l-2.238,-1.448l-0.267,-0.388l0.05,-0.607l0.657,-0.972l0.499,-0.145l0.871,0.331l1.16,-0.423l0.553,0.107l0.013,-0.59l-0.98,-1.421l0.595,-0.832l0.802,-0.249l0.792,-1.054l0.708,-0.092l1.003,-1.167l0.004,-1.377l-1.46,-0.77l-0.622,-0.878l0.301,-0.801l-0.372,-1.316l1.236,-0.518l0.921,-0.867l-0.577,0.014l-0.482,-0.691l2.542,-3.719l0.173,-0.943l-0.326,-4.112l0.507,-4.238l0.529,-1.072l0.213,-1.585l0.659,-0.775l4.101,0.24l1.414,-0.302l1.744,-1.875l2.222,-0.907l4.318,-3.648l1.495,-2.658l0.917,-3.637l-0.046,-0.735l0.945,-1.821L101.156,561.749z","Fatick","#E66166","Blahblah"},
{"M436.241,758.746L436.366,758.488L433.834,757.064L433.188,756.2L433.196,755.045L433.823,754.397L436.054,753.229L437.688,752.589L439.615,752.334L438.094,750.467L436.935,746.009L437.267,745.375L436.9,744.632L437.797,743.222L438.415,742.973L437.432,742.186L437.177,741.608L438.346,741.049L438.43,740.762L437.791,739.771L435.879,739.787L433.278,738.906L433.076,738.022L433.883,736.764L431.354,735.473L431.229,734.772L431.606,733.561L430.287,732.575L431.249,732.466L432.229,732.897L432.981,732.571L434.097,731.336L433.8,730.729L433.84,729.697L432.748,729.004L432.108,727.84L431.918,726.786L430.497,725.452L430.216,725.423L429.84,726.107L429.542,726.131L429.045,724.536L427.873,723.509L427.33,721.956L425.228,721.618L424.793,721.213L424.962,720.635L425.191,720.889L425.65,720.814L426.527,719.958L427.207,719.877L428.092,719.13L427.776,718.63L428.005,718.338L427.79,717.258L429.13,717.295L430.043,716.386L429.993,716.955L430.545,717.033L430.838,716.87L430.936,716.11L431.684,715.827L432.516,716.862L431.973,717.289L433.055,717.34L433.229,716.888L433.608,716.814L434.358,717.342L435.257,716.759L438.466,718.308L440.044,719.521L440.811,719.194L441.987,717.208L442.955,716.559L443.213,715.843L444.01,716.644L444.859,716.5L445.967,716.775L446.233,716.343L446.217,715.508L446.927,715.637L448.11,715.371L449.085,714.91L449.357,714.264L450.032,714.926L451.2,714.727L451.774,715.413L453.147,714.205L454.095,715.012L455.408,714.35L454.856,715.776L455.058,716.039L455.936,716.05L456.503,716.729L456.879,716.669L456.733,717.209L457.151,718.149L457.736,717.833L458.244,717.088L458.713,717.736L460.365,718.662L460.596,719.947L461.305,719.601L462.102,720.16L461.804,720.906L462.818,721.155L463.392,721.667L464.531,720.812L465.366,722.559L466.896,722.828L467.163,722.242L466.296,721.443L466.393,720.726L466.881,720.562L467.728,720.874L467.053,719.956L467.018,719.496L468.411,719.337L468.226,718.695L468.468,718.582L469.374,718.885L470.728,718.759L470.681,717.065L471.63,716.801L472.012,717.173L472.318,716.999L471.919,715.934L472.255,714.823L473.066,715.231L473.149,714.602L473.652,714.465L474.748,714.826L475.174,715.277L475.658,715.14L476.436,714.623L476.45,714.273L476.096,713.999L476.138,713.305L477.873,713.126L478.315,712.078L479.435,711.748L479.293,710.538L480.7,709.612L480.578,708.637L481.295,708.76L480.93,708.483L481.152,708.119L480.43,707.66L480.876,706.914L480.629,706.59L480.856,706.296L480.581,706.232L480.5,704.901L481.45,705.034L482.168,704.821L482.558,704.167L483.128,704.573L483.933,704.189L484.423,703.616L484.422,703.056L484.938,702.7L487.457,703.189L487.326,702.908L488.413,702.57L488.607,701.298L489.453,701.559L489.762,702.432L490.143,702.107L490.983,702.086L491.627,703.194L492.312,703.746L493.033,703.97L494.08,703.418L494.591,703.843L495.372,703.375L495.724,703.83L496.082,703.803L496.271,703.138L496.718,702.781L497.641,702.549L498.663,702.836L499.005,702.6L499.004,702.024L499.754,701.521L500.422,698.96L501.779,698.273L501.664,697.261L502.055,697.257L502.158,696.799L503.883,695.459L505.426,695.05L506.133,693.747L507.364,693.969L509.977,692.921L512.635,694.615L513.679,696.241L514.118,696.377L515.061,696.07L515.204,695.785L515.197,694.398L516.395,692.927L516.758,690.427L517.857,690.461L518.354,690.761L520.261,690.604L521.907,691.046L522.393,690.585L523.347,690.506L524.34,689.945L525.292,688.337L525.178,687.969L524.422,687.316L521.46,682.663L521.513,681.364L521.261,680.836L521.834,679.823L522.414,679.623L522.721,678.026L522.526,676.515L523.334,675.988L524.808,676.824L525.168,676.685L527.373,677.727L527.723,678.168L531.182,680.144L532.831,680.693L533.196,681.887L533.877,682.663L534.968,682.949L536.757,684.615L540.013,685.19L541.836,686.412L544.44,685.043L544.069,686.995L544.467,687.948L544.194,689.029L543.779,689.385L544.233,690.867L545.594,691.102L546.76,689.631L547.762,689.626L548.155,689.182L548.597,689.148L550.823,687.024L551.638,685.584L552.348,685.454L553.286,685.745L554.098,685.434L554.482,684.973L556.607,684.6L557.396,683.995L558.344,683.729L558.344,683.729L559.935,684.019L560.842,685.661L562.616,686.896L563.392,688.757L563.863,688.786L564.337,689.233L564.44,690.157L563.972,691.117L566.749,691.104L567.169,690.836L567.373,689.347L567.854,688.619L568.614,688.197L569.933,688.197L570.173,687.932L570.841,685.307L572.429,683.264L572.115,682.237L572.289,681.168L573.227,680.503L574.094,680.321L576.739,680.688L577.708,681.804L577.762,683.056L580.349,683.08L582.37,682.426L584.339,682.671L584.438,684.183L583.254,685.598L585.263,685.94L586.732,685.322L587.266,685.415L587.542,685.927L587.488,688.577L588.292,689.978L588.037,691.114L589.378,691.628L590.277,692.897L592.197,693.143L592.859,694.008L592.64,694.797L593.449,695.735L594.606,696.347L594.585,696.965L592.797,699.299L592.655,701.12L592.892,701.894L593.342,702.299L596.08,702.423L596.647,702.63L596.887,703.036L596.922,704.246L596.571,705.082L595.056,706.457L595.261,707.426L596.642,707.853L597.23,710.232L598.643,710.981L599.184,712.322L602.441,712.471L604.217,714.204L604.154,715.078L603.203,716.239L603.205,716.672L603.869,717.098L604.785,718.383L605.557,718.675L605.596,719.491L605.178,720.337L606.635,720.743L607.068,721.3L607.03,722.106L605.866,722.588L605.148,722.511L605.201,723.156L606.048,724.093L605.85,724.858L606.212,724.808L606.79,724.984L607.495,725.696L607.932,725.54L608.185,724.708L607.879,723.187L608.162,722.875L610.01,723.153L610.948,724.297L611.064,726.393L611.995,728.346L611.575,729.175L610.581,729.519L607.625,730.226L607.347,730.109L607.216,729.507L606.788,729.801L606.662,731.112L607.905,731.491L607.92,732.279L606.642,733.503L606.347,734.664L607.238,736.565L606.904,737.154L605.761,737.861L606.543,738.609L606.456,739.764L607.334,739.675L607.808,739.234L608.479,739.427L607.897,741.155L608.581,742.442L608.404,744.565L607.732,745.123L606.949,745.175L607.869,745.639L608.901,747.166L608.318,748.197L608.759,748.519L609.741,748.499L610.282,749.638L608.002,750.065L604.283,749.984L604.329,752.931L603.493,753.286L602.943,752.522L602.96,754.491L602.095,754.975L601.911,755.366L602.316,756.225L603.289,756.389L604.398,756.144L605.355,757.515L605.482,758.776L605.986,759.09L605.953,760.108L605.489,760.766L604.491,761.19L604.434,761.765L604.55,762.167L606.039,763.093L606.355,763.705L605.806,765.362L604.691,766.34L602.604,766.184L602.08,767.863L602.348,768.173L602.875,767.592L603.639,767.635L604.053,768.207L604.077,769.828L605.019,770.117L605.253,770.01L605.23,769.011L605.563,768.39L606.116,768.268L606.637,768.725L607.921,768.724L607.99,769.307L607.542,770.135L608.528,770.322L608.779,770.746L608.454,773.359L609.059,774.089L608.808,773.107L609.585,771.538L610.171,771.523L610.749,771.881L611.051,772.683L611.19,774.113L610.824,773.886L610.479,774.547L611.297,775.107L611.443,776.214L610.631,776.31L610.144,777.359L609.162,777.405L609.334,778.353L610.003,779.173L609.667,780.8L608.562,781.128L608.158,780.874L606.538,780.889L604.483,779.007L603.045,778.583L601.974,778.724L600.996,778.375L599.994,778.41L599.073,777.724L596.687,777.871L587.672,778.8L586.587,779.584L585.733,779.476L584.976,779.881L583.625,779.204L580.934,779.824L579.858,780.196L577.091,782.517L575.439,782.473L574.068,783.648L571.793,783.655L570.201,784.162L569.404,783.205L567.479,783.063L567.355,782.61L566.762,782.162L565.875,782.789L565.621,782.493L563.883,782.326L562.234,783.055L562.078,782.588L560.778,781.505L560.626,780.862L559.57,780.761L557.965,780.024L557.163,777.792L550.905,781.693L549.839,782.067L549.227,781.826L546.125,782.438L545.645,782.261L545.279,781.633L544.129,781.153L543.161,779.957L541.811,779.904L541.074,779.341L540.418,779.887L539.604,779.835L536.034,781.11L535.598,781.421L534.938,782.959L534.133,783.933L532.426,784.342L532.023,785.06L529.854,786.117L529.555,786.742L528.453,786.674L526.56,787.216L525.044,786.975L524.428,787.599L523.567,787.854L522.732,787.454L520.088,788.505L519.512,789.154L518.217,789.096L511.991,792L511.094,789.15L510.271,788.607L509.211,786.213L508.616,785.689L508.571,785.18L507.207,784.194L505.967,784.347L504.752,784.084L502.848,782.74L498.551,781.922L497.567,782.267L496.55,782.223L493.848,785.016L491.516,786.01L490.51,784.323L489.828,783.934L489.573,782.819L489.804,781.943L488.249,782.368L487.059,781.45L486.712,780.149L485.548,779.305L483.709,778.965L481.432,779.474L479.338,778.883L472.32,779.423L471.771,779.245L472.708,777.032L472.916,776.252L472.709,776.037L471.641,775.345L471.015,775.688L469.078,774.409L468.135,774.947L466.931,775.103L466.146,774.672L465.597,773.953L463.975,773.374L463.847,772.982L464.968,771.584L464.772,771.119L463.883,771.104L460.681,769.697L460.013,768.604L460.413,767.764L459.288,767.371L458.339,767.806L455.829,768.234L454.089,769.088L453.709,769.869L454.327,770.451L454.236,771.333L454.53,771.929L453.871,775.128L452.177,775.228L451.43,776.054L449.284,775.554L448.505,774.683L445.477,774.372L444.758,774.766L442.614,774.351L441.946,773.521L442.191,771.059L441.752,769.309L442.124,768.728L443.141,768.067L443.212,766.423L444.266,765.037L444.003,763.533L444.141,762.584L443.439,761.479L443.734,760.337L442.243,759.38L442.62,758.559L442.425,758.352L441.181,758.314L440.907,759.077L439.784,759.437L439.374,760.071L439.111,759.757L438.47,759.897L437.896,759.096L436.971,759.12L436.981,758.533z","Kédougou","#97BF0D","Blahblah"},
{"M209.269,541.355L210.94,541.137L213.924,543.528L216.257,547.252L219.085,550.507L221.321,552.711L226.133,555.608L248.748,559.858L249.405,557.314L259.943,550.51L263.974,555.259L265.855,555.262L265.855,555.262L268.744,558.479L270.394,558.984L276.059,562.574L278.441,562.576L279.395,561.592L281.102,561.322L285.524,561.387L285.74,562.577L286.126,562.739L286.945,562.644L287.424,562.104L288.297,562.147L290.662,563.005L290.696,563.439L290.696,563.439L290.115,564.711L287.991,564.873L287.417,574.281L287.665,577.371L287.558,577.886L287.211,578.072L286.512,591.126L288.114,592.979L290.87,595.355L290.941,595.761L292.014,607.257L291.277,611.87L291.95,612.095L292.324,612.591L291.267,614.056L292.176,620.9L291.537,621.625L289.378,622.908L291.886,623.117L290.159,627.814L283.081,632.555L281.418,633.33L278.632,640.021L270.522,640.831L268.648,643.296L267.646,644.15L267.688,644.551L267.232,645.003L267.232,645.003L267.23,644.997L267.23,644.997L263.636,643.076L261.018,642.221L256.308,641.69L254.234,642.23L253.332,642.166L244.877,639.062L239.006,641.108L229.772,646.854L227.39,646.872L225.939,645.369L224.171,644.12L222.464,643.542L219.792,643.197L217.575,643.475L214.883,644.448L212.935,645.405L211.801,646.339L211.739,646.813L211.128,647.093L211.128,647.093L211.127,646.436L209.69,646.307L208.585,643.978L208.424,643.451L209.179,643.441L209.164,641.896L207.743,641.916L207.279,641.584L203.207,641.597L203.102,641.009L202.589,640.802L202.067,641.145L201.971,641.887L200.295,641.871L198.297,640.916L198.218,639.96L197.23,640.155L193.755,638.623L192.989,638.812L192.583,639.312L191.364,641.099L191.133,641.975L189.868,643.181L189.562,643.83L188.594,644.293L187.983,644.21L186.24,642.652L185.257,641.292L185.49,641.196L185.34,640.606L185.057,640.41L184.555,640.6L183.173,639.374L181.94,638.82L181.477,638.128L181.559,637.584L182.418,636.518L180.947,635.145L182.536,633.739L183.699,631.379L183.584,630.455L181.747,628.212L181.043,626.053L180.598,625.616L179.729,625.417L178.195,625.982L176.429,624.96L175.353,623.829L173.379,623.306L173.325,622.485L173.9,620.592L173.484,619.577L173.775,618.912L173.386,618.347L173.219,616.365L172.228,616.357L172.089,616.11L170.966,615.851L167.769,613.516L167.753,612.887L166.597,612.721L166.039,610.644L167.082,609.702L166.71,608.501L167.028,603.859L170.044,597.054L172.761,596.996L175,596.403L175.823,592.541L176.122,592.132L182.579,592.411L182.972,590.456L183.217,585.912L182.11,578.613L182.948,573.476L183.798,573.23L184.487,571.622L184.487,571.622L185.136,571.381L184.391,570.45L184.695,569.613L185.535,569.52L188.41,570.398L189.173,569.788L189.078,567.142L195.792,561.718L196.223,562.198L198.129,561.131L197.09,560.752L195.824,559.319L195.5,556.864L195.566,554.313L195.566,554.313L196.417,554.342L200.579,550.844L205.564,549.744L205.783,548.183L206.398,546.543L208.422,542.229z","Kédougou","#64A1D3","Blahblah"},
{"M184.487,571.622L183.798,573.23L182.948,573.476L182.11,578.613L183.217,585.912L182.972,590.456L182.579,592.411L176.122,592.132L175.823,592.541L175,596.403L172.761,596.996L170.044,597.054L167.028,603.859L166.71,608.501L167.082,609.702L166.039,610.644L166.597,612.721L167.753,612.887L167.769,613.516L170.966,615.851L172.089,616.11L172.228,616.357L173.219,616.365L173.386,618.347L173.775,618.912L173.484,619.577L173.9,620.592L173.325,622.485L173.379,623.306L175.353,623.829L176.429,624.96L178.195,625.982L179.729,625.417L180.598,625.616L181.043,626.053L181.747,628.212L183.584,630.455L183.699,631.379L182.536,633.739L180.947,635.145L182.418,636.518L181.559,637.584L181.477,638.128L181.94,638.82L183.173,639.374L184.555,640.6L185.057,640.41L185.34,640.606L185.49,641.196L185.257,641.292L186.24,642.652L187.983,644.21L188.594,644.293L189.562,643.83L189.868,643.181L191.133,641.975L191.364,641.099L192.583,639.312L192.989,638.812L193.755,638.623L197.23,640.155L198.218,639.96L198.297,640.916L200.295,641.871L201.971,641.887L202.067,641.145L202.589,640.802L203.102,641.009L203.207,641.597L207.279,641.584L207.743,641.916L209.164,641.896L209.179,643.441L208.424,643.451L208.585,643.978L209.69,646.307L211.127,646.436L211.128,647.093L211.128,647.093L211.13,647.828L210.086,647.684L208.878,649.028L206.818,652.568L205.434,656.935L204.316,662.887L138.351,662.809L138.351,662.809L139.153,662.124L139.438,661.291L138.32,660.642L138.218,659.964L139.631,659.258L139.889,657.957L138.594,657.796L138.702,656.888L137.361,655.605L136.957,654.618L136.533,652.96L136.044,647.585L135.817,647.283L135.327,647.295L134.772,647.847L130.478,644.032L130.037,643.131L128.064,642.024L128.727,638.56L127.859,637.587L128.322,637.363L130.162,637.483L131.287,635.465L131.683,635.255L131.692,634.254L132.454,632.252L132.988,631.902L132.458,626.49L131.754,625.472L131.821,623.91L130.353,623.781L130.676,622.204L129.101,621.723L126.426,621.947L126.255,622.167L125.212,621.475L125.092,621.118L125.324,619.907L126.103,619.069L126.407,618.07L129.163,616.285L129.681,615.463L129.777,612.851L129.354,610.168L126.211,607.508L124.059,606.711L122.391,605.413L119.433,605.201L117.715,605.767L115.692,605.642L114.79,605.889L114.259,605.177L114.983,605.188L115.19,604.206L115.677,604.44L115.868,603.733L116.816,604.189L116.959,603.807L116.559,603.851L116.083,603.242L116.229,602.898L116.873,602.982L117.379,602.559L115.938,601.528L116.205,600.002L115.812,598.634L116.267,598.548L116.471,599.083L116.888,599.085L117.156,598.756L117.268,598.172L116.404,597.616L117.362,597.277L117.143,596.835L117.444,596.643L118.046,594.502L118.522,594.07L120.642,594.34L120.799,593.994L122.121,593.392L122.348,592.621L123.453,592.154L124.065,591.481L124.46,591.609L124.875,590.969L126.189,591.701L126.623,591.48L127.629,590.127L127.407,589.176L128.198,588.646L128.069,588.369L133.076,588.862L133.593,586.714L134.39,585.604L135.36,585.06L137.707,584.834L140.09,585.089L142.11,584.42L143.571,583.385L146.385,583.889L147.415,584.451L148.524,584.393L150.271,583.659L150.77,583.198L150.608,582.34L151.988,580.873L152.098,579.14L153.678,578.864L154.483,578.003L154.693,576.892L156.398,575.398L157.714,575.727L158.66,576.442L159.256,577.365L159.834,577.616L160.417,577.227L161.089,575.9L162.396,576.062L162.792,576.731L162.748,583.337L171.303,583.524L171.874,583.441L173.332,578.326L174.242,576.621L176.242,576.511L177.522,575.959L178.321,575.008L178.775,572.492L179.332,571.728L179.502,570.93L180.317,570.548L182.75,570.481z","Kaolack","#E09C63","Blahblah"},
{"M264.066,677.539L265.659,677.48L267.718,679.302L270.44,680.502L272.275,680.634L274.752,680.357L275.896,682.661L277.734,684.717L280.076,686.107L284.685,688.091L285.86,688.09L286.177,687.853L288.799,688.263L291.619,687.378L294.365,685.876L296.745,689.419L298.124,690.796L299.734,691.553L304.313,692.129L306.549,695.139L308.189,696.38L310.403,697.827L314.398,699.283L315.376,699.5L319.386,698.486L322.729,698.526L323.785,698.258L324.558,699.615L326.572,700.735L328.953,700.517L331.14,699.605L334.48,700.61L335.97,699.936L336.682,699.985L337.982,698.453L338.438,697.416L338.452,695.515L337.739,694.665L338.515,694.104L339.579,693.746L340.167,694.408L341.615,694.12L342.397,693.04L343.342,693L343.272,693.682L345.805,694.027L345.838,693.339L349.313,693.078L354.559,690.039L360.136,690.615L362.965,690.153L365.662,688.818L367.071,687.502L369.486,683.665L370.233,680.75L370.28,678.253L369.926,677.686L367.878,676.144L365.911,672.445L363.61,670.923L363.61,670.923L364.187,670.85L366.309,671.583L366.251,669.672L367.345,667.288L369.452,667.74L370.666,667.493L370.923,668.218L369.889,669.687L369.796,671.531L368.789,673.852L369.213,675.212L370.095,675.355L372.379,673.403L375.523,674.184L377.846,675.454L377.281,676.664L375.431,677.612L373.876,678.798L373.896,679.763L374.605,680.525L374.524,682.059L373.79,683.232L372.283,684.591L372.799,684.955L375.124,685.014L380.145,683.889L381.811,683.805L382.156,684.068L382.085,685.047L380.942,685.822L379.151,688.084L379.576,688.92L382.112,688.059L382.969,687.909L383.15,688.158L381.782,691.519L380.575,692.727L380.688,693.282L381.814,694.57L384.564,694.148L385.584,695.024L384.868,696.838L385.011,697.604L385.787,698.038L386.584,698.035L387.236,697.892L387.702,697.421L388.104,697.765L388.146,698.329L388.585,698.358L388.458,698.653L388.931,699.415L388.46,699.213L388.307,700.05L388.691,699.892L389.208,700.156L389.206,700.685L389.666,700.97L389.249,701.135L389.262,702.223L389.018,701.605L388.496,701.639L387.9,702.134L388.839,702.317L388.983,702.596L388.604,703.058L388.886,703.286L388.611,703.947L388.074,703.959L387.832,704.289L388.2,704.45L387.65,704.974L387.848,705.339L388.477,705.239L388.491,705.542L388.776,705.58L388.687,706.03L388.325,705.76L388.172,705.91L388.32,706.368L388.962,706.504L389.172,706.914L388.781,707.338L388.165,706.855L387.938,707.632L388.563,707.661L388.666,708.014L387.801,708.284L387.715,708.951L387.987,709.102L388.267,708.852L388.859,709.268L389.064,709.032L390.035,709.422L389.901,709.733L389.538,709.608L389.43,709.91L389.755,710.239L389.451,710.284L389.62,710.586L389.369,710.844L389.735,711.243L390.061,711.146L390.384,711.83L390.388,711.412L390.928,711.443L391.114,711.918L390.766,712.298L391.266,712.896L390.98,713.108L391.036,713.852L391.786,712.894L392.533,713.036L392.444,713.357L391.903,713.152L391.887,713.565L392.28,713.787L392.045,714.309L391.605,714.521L391.622,715.482L391.93,715.856L392.398,716.028L392.458,715.652L393.139,715.928L393.326,715.66L393.155,715.29L392.982,714.92L393.66,714.725L394.606,715.615L393.623,716.479L393.882,716.631L393.711,717.055L393.973,717.16L394.594,716.657L395.299,717.468L395.298,717.712L395.107,717.817L394.792,718.174L395.72,718.514L395.796,718.891L396.198,718.419L396.266,719.016L396.52,718.705L397.407,718.556L397.502,719.665L396.384,720.044L396.862,720.391L396.287,720.508L396.023,721.767L396.385,721.62L396.586,722.084L397.811,721.022L398.93,721.998L398.61,723.023L397.652,723.58L398.514,724.545L398.431,725.315L398.924,725.503L399.479,725.135L399.482,725.806L398.179,726.093L397.403,727.089L397.979,728.022L399.042,728.077L398.844,727.615L399.186,727.557L399.728,728.307L399.048,729.403L398.245,729.293L398.796,730.24L398.876,731.492L399.857,731.665L401.18,732.87L402.136,732.718L402.724,732.922L402.233,734.284L402.74,734.757L401.751,734.785L401.615,735.163L403.643,736.78L403.929,737.6L403.363,738.049L402.641,737.487L401.82,737.293L401.235,737.288L401.107,737.647L402.147,738.091L402.346,739.138L400.989,740.058L401.349,742.018L402.658,742.121L402.897,742.688L401.884,744.483L402.153,744.712L402.848,744.125L403.22,745.565L402.805,746.307L403.245,747.577L402.548,747.448L402.138,748.073L402.377,748.634L402.9,748.837L403.266,749.836L402.813,750.473L402.514,750.502L402.3,750.131L401.854,750.239L402.592,750.714L402.896,751.841L402.467,751.936L402.126,752.99L402.917,752.751L403.848,751.702L404.662,751.891L405.005,752.252L405.527,751.792L405.32,752.551L404.56,753.013L404.785,753.157L405.085,752.802L405.507,752.793L404.992,753.49L405.55,753.398L406.06,753.784L405.907,754.73L406.685,755.28L408.086,754.522L409.165,754.915L409.809,754.843L410.065,754.072L410.736,753.812L410.894,753.284L411.725,752.996L413.602,753.488L413.602,753.488L412.846,756.661L399.002,755.108L349.821,755.188L327.101,754.721L326.793,755.104L317.521,754.972L317.519,754.58L303.685,754.492L277.329,754.813L239.109,754.091L239.109,754.091L237.325,752.94L236.724,750.555L235.708,748.71L237.563,745.489L237.494,744.168L238.47,743.524L238.623,742.333L239.653,741.12L239.602,734.334L239.986,732.725L235.727,728.158L234.619,725.605L234.541,724.9L235.618,722.895L235.262,720.958L232.616,719.168L231.966,719.125L228.814,717.422L226.766,714.311L226.59,709L226.219,708.411L226.017,707.119L224.374,706.965L224.127,703.831L222.062,703.143L219.016,703.231L219.039,702.385L218.243,701.94L216.476,700.098L216.11,695.461L217.68,692.698L217.601,686.465L217.945,686.195L217.945,686.195L221.87,685.479L223.48,684.496L228.56,680.296L229.753,677.531L231.699,669.182L232.732,668.711L236.921,664.853L237.21,663.84L242.232,662.106L243.593,665.439L244.409,666.593L247.008,669.457L249.799,671.929L253.594,674.192L258.259,676.371L261.028,677.329z","Kolda","#CCB32F","Blahblah"},
{"M291.04,425.25l-0.472,0.03l-1.039,1.228l-3.966,-0.593l0.367,-3.041l-0.868,-1.8l-2.84,3.105l-5.811,3.066l-1.832,1.949l-2.702,1.502l-2.428,0.891l-2.632,-4.43l-2.317,-1.374l-7.005,-7.293l-3.58,2.395l-12.749,1.08l-2.946,2.117l-1.157,-0.116l-5.229,-1.629L231,421.305l-1.309,-3.501l-0.659,-0.243l-1.88,-1.796l-2.91,-1.187l-1.195,-1.007l-3.429,1.601l-3.139,0.253l-2.415,-2.542l-1.227,2.08l-0.112,1.883l0.692,1.811l-2.382,0.041l-2.633,1.396l1.656,4.499l-0.288,3.137l-1.165,-0.568l-1.998,-0.419l-5.195,2.088l-1.909,0.139l-2.335,-0.455l1.092,-2.053l0.266,-1.147l-1.47,-2.167l-7.488,-3.857l-11.076,-10.155l-8.732,-9.661l-0.811,0.209l-3.803,2.683l-4.741,4.237l-0.812,1.481l-3.376,1.347l-8.093,4.048l-2.021,0.607l-3.944,2.222l-2.242,0.466l-1.397,0.682l-0.518,0.732l0.175,0.335l-2.366,3.576l-5.186,4.153l-3.232,1.896l-0.867,1.271l-0.397,1.521l-0.547,0.59l-0.243,-0.33l-1.587,1.755l-2.687,1.011l-0.875,1.612l-0.769,0.104l-0.56,-0.917l-0.633,0.061l-0.746,0.562l-1.995,0.229l-3.62,-0.018l-3.434,-0.561l-1.587,0.155l-2.832,1.03l-3.159,2.284l-1.235,0.204l-0.237,1.013l-0.249,-0.06l0,0l-0.768,2.279l0.274,0.535l-0.521,0.739l-0.027,0.651l-4.195,8.66l-4.688,8.177L80.81,473.52l0,0l2.822,1.716l0.66,0.988l0.047,1.089l-2.967,4.292l-1.83,4.987l-0.582,2.922l0.306,0.398l2.608,0.963l1.248,1.73l1.793,0.983l1.392,1.67l3.31,2.155l0.392,0.718l-0.021,1.201l1.126,0.424l0.674,1.357l-0.093,3.272l-0.681,1.113l0.369,0.063l1.628,-1.442l0.637,-1.152l2.351,-2.413l3.838,-7.436l1.131,-0.243l0.564,-0.486l0.21,-0.942l-0.382,-0.326l1.401,-2.185l4.985,-5.165l0.569,0.313l2.65,2.883l0.97,0.422l2.618,0.493l2.417,-0.416l0.832,0.304l1.488,2.45l-0.08,0.803l-1.024,1.371l1.241,1.668l0.933,0.673l0.938,0.253l0.397,-0.34l0.371,-1.73l1.126,-0.396l1.003,0.412l1.237,1.565l0.422,1.816l-0.178,1.838l0.264,1.731l1.197,2.384l0.988,0.961l0.739,1.419l0.112,2.952l3.91,3.175l0.238,4.872l1.583,4.027l0.282,2.956l-0.151,1.401l0,0l2.456,-0.023l3.048,0.528l2.132,-0.416l1.695,0.13l1.911,-0.918l1.805,-0.453l2.67,0.861l2.022,1.057l0.676,-1.497l0.692,-0.648l3.841,0.165l0.17,-0.539l1.366,-1.081l1.148,-0.332l1.705,0.351l0.087,0.398l-0.343,0.321l6.167,-0.918l0.205,0.542l1.163,1.139l3.894,1.746l1.165,1.525l0.345,1.341l1.294,2.242l1.261,1.023l1.805,-0.166l1.551,-0.873l2.435,-3.345l0.776,-0.437l0.686,0.043l0.573,0.342l0.349,1.181l1.903,2.06l0.785,1.393l0.018,0.821l-0.515,0.91l2.437,1.114l1.623,0.422l-0.403,0.444l5.955,3.67l4.17,-1.512l1.243,-0.148l2.12,0.467l2.973,1.159l0.176,0.649l-0.244,1.761l1.441,0.823l0,0l1.671,-0.219l2.984,2.392l2.333,3.724l2.828,3.255l2.235,2.204l4.812,2.897l22.615,4.25l0.658,-2.544l10.538,-6.805l4.03,4.749l1.881,0.003l0,0l2.664,-3.183l0.577,-1.363l0.705,-4.315l0.584,-1.611l0.732,-0.739l2.672,-1.618l0.421,-7.032l-0.128,-2.402l-0.76,-4.344l-0.301,-6.022l-2.276,-6.696l-0.393,-0.523l-0.781,-6.39l0.677,-0.709l6.648,-1.504l0.467,-0.725l8.11,-0.013l3.841,-0.334l0.281,-0.785l4.617,-5.623l2.025,-0.865l1.883,-6.606l-0.109,-3.739l3.798,-5.485l-4.097,-0.082l-6.708,1.606l-1.107,0.054l-12.567,-6.625l-3.169,-0.884l-1.016,-0.925l-0.274,-1.199l-0.055,-0.808l1.63,0.019l2.344,-2.492l1.104,-1.75l-0.909,-2.443l0.054,-3.193l-1.567,-0.48l2.026,-6.354l2.133,-5.281l0.526,-0.694l1.67,-1.087l2.566,-1.004l-0.556,-4.588l13.229,-8.91L291.04,425.25z","Louga","#EBFB94","Blahblah"},
{"M400.844,405.389L399.156,405.896L398.204,406.646L397.699,407.457L397.876,408.986L399.167,410.249L400.576,410.073L401.486,408.405L402.202,407.636L403.008,407.376L403.258,407.511L403.5,408.752L404.527,409.946L410.256,412.206L411.396,413.041L411.151,417.115L412.439,418.686L412.244,420.4L412.777,422.328L413.687,423.901L414.658,424.888L415.997,425.666L417.002,425.757L417.507,426.132L417.456,427.049L416.4,428.047L415.918,428.9L415.938,429.571L416.471,430.195L418.146,431.032L418.812,431.735L418.964,432.804L418.609,435.046L419.04,436.98L422.165,439.803L422.22,440.265L421.864,440.553L420.763,439.918L420.014,440.103L419.563,441.061L419.589,442.285L427.88,449.541L427.517,450.654L426.771,451.688L425.804,451.844L424.141,451.327L423.496,451.985L423.554,453.625L424.84,455.552L425.881,458.012L426.448,458.338L427.252,458.301L428.584,456.855L429.998,456.678L434.294,458.922L439.781,461.154L439.734,461.512L439.087,462.047L439.786,463.017L439.893,464.208L438.584,466.796L438.062,468.854L438.188,469.635L438.542,469.911L440.729,470.584L441.921,471.319L443.704,471.702L446.426,471.418L448.382,469.944L450.181,469.896L451.488,469.3L451.933,469.386L452.33,471.91L452.061,474.023L452.228,474.886L453.144,475.34L454.979,474.905L455.606,475.028L455.778,475.336L455.434,476.23L453.631,477.804L453.495,482.918L453.987,484.023L455.941,485.738L457.434,486.077L459.308,486.052L462.841,487.946L463.508,488.573L464.676,490.975L464.654,492.607L463.27,494.441L461.806,494.02L460.635,492.985L459.096,492.941L458.412,493.705L458.684,495.113L459.55,495.961L461.911,497.314L462.479,498.183L462.742,499.329L463.295,499.961L464.351,499.936L465.951,498.546L467.381,498.392L468.513,498.963L469.488,500.723L468.748,503.432L469.144,504.934L470.232,505.633L472.557,506.379L475.446,509.153L478.131,510.235L478.587,511.456L478.85,511.699L479.215,511.555L479.215,511.555L482.861,516.586L483.295,516.533L483.785,517.889L485.442,520.222L485.779,521.922L486.494,522.358L485.977,523.123L486.269,523.826L486.978,525.104L487.505,524.829L487.724,525.747L488.227,525.977L487.382,527.392L487.791,527.841L487.529,528.188L487.79,529.137L488.923,530.999L482.709,550.269L476.06,559.472L468.616,562.826L453.28,565.073L448.511,563.621L444.82,562.84L424.346,559.691L415.576,566.483L413.792,567.371L412.195,569.104L398.766,579.521L397.794,580.022L387.549,580.384L371.086,580.003L361.381,564.549L353.706,563.157L342.114,564.337L338.098,569.131L330.483,566.565L327.862,566.215L328.107,565.771L322.258,562.363L313.557,560.729L311.188,558.429L309.544,558.803L307.663,559.882L301.591,562.431L300.253,563.149L299.267,564.644L295.585,564.853L293.277,563.431L290.696,563.439L290.696,563.439L290.662,563.005L288.297,562.147L287.424,562.104L286.945,562.644L286.126,562.739L285.74,562.577L285.524,561.387L281.102,561.322L279.395,561.592L278.441,562.576L276.059,562.574L270.394,558.984L268.744,558.479L265.855,555.262L265.855,555.262L268.519,552.079L269.096,550.716L269.801,546.4L270.385,544.789L271.117,544.05L273.79,542.432L274.21,535.399L274.083,532.997L273.323,528.653L273.022,522.631L270.746,515.935L270.353,515.411L269.572,509.021L270.249,508.313L276.897,506.809L277.364,506.084L285.474,506.071L289.315,505.737L289.596,504.952L294.213,499.329L296.238,498.464L298.122,491.857L298.013,488.118L301.811,482.633L297.714,482.551L291.006,484.157L289.899,484.211L277.333,477.586L274.163,476.702L273.147,475.777L272.874,474.578L272.818,473.771L274.448,473.789L276.792,471.297L277.897,469.547L276.988,467.104L277.042,463.91L275.476,463.43L277.501,457.075L279.635,451.794L280.161,451.1L281.832,450.013L284.398,449.009L283.842,444.421L297.07,435.511L297.07,435.511L300.756,440.52L300.367,441.123L300.035,443.308L300.878,447.568L300.494,449.425L301.311,450.056L303.502,450.938L304.888,452.908L305.1,454.234L309.531,454.264L309.857,454.96L310.359,455.152L309.87,457.368L309.423,457.347L309.417,458.698L309.18,458.873L308.573,461.607L306.003,461.611L306.431,469.313L306.005,474.904L310.336,480.177L309.675,481.8L310.063,482.482L314.551,481.418L324.568,481.359L330.13,478.262L331.751,474.252L331.439,473.01L329.857,473.004L329.936,471.616L328.528,470.248L328.705,468.593L332.457,467.901L331.814,464.101L347.288,464.661L349.97,453.044L351.767,440.416L353.969,429.015L356.293,428.11L360.825,423.365L361.882,422.942L362.572,421.536L364.414,419.608L364.659,418.344L365.098,417.72L367.146,416.635L375.254,413.758L377.009,405.918L377.58,404.62L377.58,404.62L379.091,407.103L380.837,408.641L381.465,408.842L383.142,407.379L386.157,407.535L390.986,405.086L392.49,404.735L394.262,404.877L396.88,405.775L397.534,405.566L400.272,403.449L400.954,403.681L401.532,404.765L401.426,405.106z","Matam","#ABDAC3","Blahblah"},
{"M202.913,682.848L206.669,684.597L207.856,684.604L213.551,686.649L217.945,686.195L217.945,686.195L217.601,686.465L217.68,692.698L216.11,695.461L216.476,700.098L218.243,701.94L219.039,702.385L219.016,703.231L222.062,703.143L224.127,703.831L224.374,706.965L226.017,707.119L226.219,708.411L226.59,709L226.766,714.311L228.814,717.422L231.966,719.125L232.616,719.168L235.262,720.958L235.618,722.895L234.541,724.9L234.619,725.605L235.727,728.158L239.986,732.725L239.602,734.334L239.653,741.12L238.623,742.333L238.47,743.524L237.494,744.168L237.563,745.489L235.708,748.71L236.724,750.555L237.325,752.94L239.109,754.091L239.109,754.091L238.727,754.563L237.967,754.583L235.995,754.142L233.878,754.191L227.781,756.707L224.436,758.807L217.926,761.327L214.777,764.863L210.813,767.848L208.251,769.368L192.789,775.962L192.859,776.324L189.384,778.053L189.304,777.801L183.81,780.286L178.273,779.354L163.384,777.678L163.384,777.678L163.292,776.479L162.83,776.047L161.629,775.602L160.049,776.333L159.656,775.447L159.509,774.651L160.332,774.155L160.066,773.226L160.137,771.677L159.416,770.546L157.221,769.293L156.925,768.424L157.059,767.041L155.865,765.311L155.78,764.599L156.539,763.668L156.567,763.143L156.263,762.961L155.653,760.097L153.961,757.917L152.865,757.192L152.462,756.979L150.64,757.115L150.167,754.41L151.211,750.873L150.412,749.839L150.048,747.849L150.908,746.941L152.658,746.083L153.321,743.501L152.155,741.59L152.061,740.109L154.335,738.238L154.959,736.698L154.378,734.842L155.056,733.868L154.983,733.327L153.827,733.028L153.825,732.639L154.257,732.326L153.822,731.202L153.576,730.929L152.721,730.837L153.074,730.133L153.593,729.88L153.53,728.59L154.066,727.645L155.144,727.371L155.546,726.762L156.126,724.646L157.105,724.455L157.653,724.02L158.777,722.395L159.483,720.678L160.045,718.093L162.212,715.184L162.401,714.017L162.143,713.102L160.99,712.886L160.17,713.078L159.485,712.742L158.77,711.116L158.974,710.483L160.118,709.12L161.725,707.819L162.478,707.877L162.657,707.65L162.913,705.571L162.913,705.571L162.826,704.186L171.802,704.2L171.846,687.381L179.252,687.011L181.643,686.31L183.857,685.106L186.349,686.007L193.267,687.191L196.038,686.221L197.903,684.664L197.805,684.303L199.652,682.921L202.479,682.637z","Sédhiou","#FBF083","Blahblah"},
{"M256.93,353.988L257.769,353.853L259.661,352.231L259.885,353.611L260.553,354.058L261.127,354.058L261.791,353.266L262.277,351.39L263.103,351.025L263.496,351.286L264.78,353.496L266.614,353.079L267.957,353.664L268.539,353.105L268.756,351.96L269.455,351.672L271.769,354.186L272.214,353.988L273.538,351.724L274.193,351.501L275.354,352.457L275.439,354.404L277.11,355.264L277.318,355.011L276.891,353.984L277.936,353.772L277.866,352.547L278.075,352.386L279.245,353.239L281.627,352.521L285.957,352.102L286.529,352.588L286.469,353.486L285.45,353.775L285.374,354.208L286.657,355.446L287.623,354.333L288.799,354.22L289.52,354.491L290.184,355.397L290.99,354.76L291.992,355.132L293.227,354.73L294.809,355.419L295.233,354.71L295.62,352.859L295.984,352.707L297.459,354.189L300.602,355.745L301.612,355.452L302.725,354.498L305.524,354.779L306.545,353.111L308.181,351.812L308.828,352.157L309.151,353.452L309.628,353.848L311.943,353.343L313.576,353.752L316.003,352.918L316.888,353.044L317.426,354.077L317.333,357.063L316.688,359.466L317.146,360.671L317.75,360.773L318.799,360.216L320.256,360.172L321.151,358.878L322.141,358.73L323.068,359.59L322.481,361.986L323.951,365.166L324.383,365.117L324.448,363.724L325.326,362.712L327.952,362.903L329.034,363.813L329.972,364.178L329.529,365.331L329.899,366.41L333.216,368.101L334.733,370.254L335.439,370.345L336.09,369.681L336.574,369.764L335.803,371.123L336.051,372.127L337.946,372.712L338.721,373.379L339.187,374.816L342.34,376.707L343.17,378.031L345.663,380.495L346.635,382.513L349.707,382.997L350.824,383.817L352.839,384.665L353.916,386.276L353.858,386.997L353.545,387.187L352.055,386.725L350.976,386.954L350.604,387.414L350.968,390.369L353.625,390.371L354.456,390.978L352.818,392.798L352.265,395.645L353.058,395.685L355.388,394.502L356.542,395.284L357.541,394.993L357.911,397.884L358.575,398.647L359.407,399.024L361.082,398.19L361.905,398.5L362.623,399.256L362.776,399.864L361.852,401.213L361.746,402.826L362.759,404.175L362.874,405.179L363.935,405.481L364.579,407.534L365.146,407.578L366.829,405.536L369.622,403.947L372.088,404.06L374.646,403.159L377.177,400.203L378.09,399.912L378.889,400.271L379.117,401.223L378.906,401.96L377.479,403.437L377.58,404.62L377.58,404.62L377.009,405.918L375.254,413.758L367.146,416.635L365.098,417.72L364.659,418.344L364.414,419.608L362.572,421.536L361.882,422.942L360.825,423.365L356.293,428.11L353.969,429.015L351.767,440.416L349.97,453.044L347.288,464.661L331.814,464.101L332.457,467.901L328.705,468.593L328.528,470.248L329.936,471.616L329.857,473.004L331.439,473.01L331.751,474.252L330.13,478.262L324.568,481.359L314.551,481.418L310.063,482.482L309.675,481.8L310.336,480.177L306.005,474.904L306.431,469.313L306.003,461.611L308.573,461.607L309.18,458.873L309.417,458.698L309.423,457.347L309.87,457.368L310.359,455.152L309.857,454.96L309.531,454.264L305.1,454.234L304.888,452.908L303.502,450.938L301.311,450.056L300.494,449.425L300.878,447.568L300.035,443.308L300.367,441.123L300.756,440.52L297.07,435.511L297.07,435.511L291.04,425.25L290.568,425.28L289.529,426.508L285.563,425.915L285.93,422.874L285.062,421.074L282.222,424.18L276.411,427.246L274.579,429.195L271.876,430.697L269.449,431.588L266.817,427.158L264.5,425.784L257.495,418.491L253.915,420.886L241.166,421.966L238.22,424.083L237.063,423.967L231.833,422.338L231,421.305L229.691,417.804L229.032,417.561L227.152,415.765L224.243,414.578L223.048,413.571L219.619,415.172L216.479,415.425L214.064,412.883L212.837,414.963L212.725,416.846L213.417,418.656L211.035,418.697L208.402,420.094L210.058,424.593L209.77,427.729L208.605,427.161L206.608,426.742L201.413,428.83L199.503,428.969L197.168,428.514L198.26,426.461L198.526,425.313L197.056,423.146L189.568,419.289L178.492,409.134L169.76,399.473L168.949,399.682L165.146,402.364L160.405,406.602L159.593,408.083L156.217,409.43L148.125,413.478L146.104,414.085L142.159,416.307L139.917,416.772L138.521,417.454L138.003,418.187L138.178,418.521L135.812,422.098L130.626,426.251L127.394,428.147L126.526,429.419L126.129,430.94L125.582,431.53L125.339,431.2L123.752,432.955L121.065,433.966L120.19,435.578L119.421,435.683L118.862,434.766L118.229,434.826L117.483,435.388L115.488,435.617L111.868,435.6L108.435,435.039L106.848,435.194L104.016,436.225L100.857,438.509L99.623,438.713L99.385,439.726L99.136,439.666L99.136,439.666L100.644,433.762L101.604,422.301L101.979,412.183L104.596,412.132L105.712,410.374L106.36,410.053L106.709,408.974L108.065,408.232L108.128,407.563L106.929,406.533L106.775,405.943L107.26,404.778L106.963,402.963L107.215,402.515L107.01,399.727L108.177,397.697L109.227,396.572L110.977,395.881L112.691,396.606L113.762,396.269L115.163,394.588L116.067,391.909L116.967,391.137L117.045,390.051L115.683,388.065L115.859,386.418L116.821,384.749L117.448,384.252L118.357,384.046L119.165,382.931L119.374,382.225L119.091,380.79L119.242,377.979L119.98,377.051L121.26,376.848L121.41,376.585L121.53,372.931L121.829,371.49L122.592,370.407L123.836,369.813L124.027,366.615L124.652,365.815L125.947,364.964L128.24,364.322L129.651,364.668L131.205,365.488L133.498,365.337L134.945,364.544L136.338,362.917L137.342,362.222L138.805,361.763L139.129,361.946L141.131,361.639L142.052,362.136L142.429,362.692L142.62,363.388L142.474,365.059L144.808,366.591L146.932,369.54L148.659,369.349L150.891,367.521L152.082,367.058L153.674,367.473L154.804,368.249L155.146,368.843L155.572,368.932L156.176,366.585L158.079,363.189L161.377,361.04L161.499,361.979L160.941,364.194L159.772,366.433L160.859,365.922L162.929,365.599L165.29,365.922L166.149,366.678L166.265,368.207L168.728,366.826L169.994,366.451L170.972,366.485L173.841,367.798L178.915,368.5L181.923,370.244L183.024,369.368L186.869,369.003L188.527,368.311L189.034,367.414L188.609,365.508L189.472,364.426L190.747,364.601L191.927,364.376L194.25,365.802L195.602,366.104L197.244,365.948L199.865,365.132L200.738,364.387L199.65,362.694L199.7,361.65L200.077,360.935L201.205,360.003L203.434,359.023L203.834,358.401L204.67,357.905L206.452,358.192L207.731,359.25L208.432,360.526L208.736,362.386L209.18,362.918L211.595,363.576L213.971,362.445L215.406,361.209L217.533,361.186L220.502,359.814L224.237,360.541L225.684,360.479L227.185,361.865L227.864,362.054L228.714,362.01L231.081,360.39L233.121,359.543L234.053,358.375L235.118,358.396L238.328,359.48L239.635,359.281L242.167,357.233L242.767,356.376L242.732,355.509L241.678,353.967L239.838,353.733L239.265,353.311L239.347,351.612L241.389,349.248L242.491,349.314L243.351,349.74L243.924,350.591L244.672,352.747L245.655,354.278L245.945,354.327L246.402,353.833L247.745,354.035L250.803,352.738L251.221,351.82L251.417,348.66L252.062,347.851L253.081,347.896L255.683,349.295L255.83,350.201L255.496,351.925L256.235,353.375z","Saint-Louis","#F1A1AC","Blahblah"},
{"M267.232,645.003l-0.002,-0.006l0,0L267.232,645.003zM267.232,645.003l0.457,-0.452l-0.042,-0.4l1.001,-0.854l1.875,-2.465l8.11,-0.81l2.786,-6.691l1.663,-0.775l7.078,-4.74l1.727,-4.697l-2.508,-0.209l2.159,-1.283l0.639,-0.725l-0.909,-6.845l1.057,-1.465l-0.374,-0.496l-0.673,-0.225l0.737,-4.613l-1.073,-11.496l-0.071,-0.405l-2.756,-2.377l-1.602,-1.853l0.699,-13.054l0.347,-0.187l0.106,-0.515l-0.248,-3.09l0.574,-9.408l2.125,-0.162l0.581,-1.271l0,0l2.582,-0.009l2.308,1.422l3.682,-0.209l0.986,-1.494l1.337,-0.719l6.072,-2.549l1.881,-1.079l1.644,-0.374l2.369,2.301l8.701,1.634l5.85,3.408l-0.245,0.443l2.621,0.351l7.614,2.565l4.017,-4.794l11.592,-1.18l7.675,1.392l9.705,15.454l16.463,0.381l10.245,-0.361l0.972,-0.502l13.43,-10.417l1.597,-1.732l1.784,-0.888l8.77,-6.792l20.475,3.148l3.69,0.781l4.77,1.452l15.336,-2.247l7.443,-3.354l6.649,-9.203l6.214,-19.27l-1.133,-1.862l-0.261,-0.949l0.262,-0.347l-0.409,-0.449l0.845,-1.415l-0.503,-0.229l-0.219,-0.918l-0.527,0.275l-0.709,-1.278l-0.292,-0.703l0.518,-0.765l-0.715,-0.437l-0.337,-1.7l-1.657,-2.333l-0.49,-1.355l-0.434,0.053l-3.646,-5.031l0,0l0.186,-1.279l0.432,-0.649l1.029,-0.378l1.113,0.135l5.153,2.474l1.819,2.188l3.779,3.114l5.785,1.716l1.397,1.16l1.64,2.056l0.827,6.05l0.41,0.845l-0.499,1.649l0.09,0.505l1.391,1.061l2.537,2.629l1.689,1.225l4.183,1.662l2.761,0.319l4.482,5.27l3.881,0.869l0.707,2.662l1.361,0.165l0.818,0.521l0.32,1.237l-0.571,1.361l0.604,0.681l0.905,0.346l1.675,-0.007l1.007,0.878l0.977,-0.245l0.257,0.222l-0.091,0.684l-1.509,0.809l-0.166,0.751l0.236,0.27l2.313,0.535l0.515,0.41l0.19,1.651l-0.426,1.301l-0.528,0.609l-1.686,0.286l-0.077,2.866l-1.384,1.927l-0.087,1.252l-2.133,-0.122l-0.846,0.813l0.366,2.282l-0.705,1.807l-0.053,1.63l2.118,1.313l-0.694,2.197l1.649,1.617l-0.017,0.346l-1.205,1.483l0.048,1.763l1.919,0.982l0.513,-0.446l0.654,0.049l0.629,1.209l0.858,0.422l1.171,0.035l0.415,-0.427l0.836,0.212l0.276,-0.109l-0.229,-0.495l0.414,-0.172l0.154,0.534l-0.542,0.783l0.519,1.039l0.714,0.372l0.257,-0.48l1.117,-0.414l0.868,0.842l0.04,0.67l-0.244,0.158l0.221,0.446l-0.45,-0.103l-0.493,0.736l1.363,1.25l-0.459,0.519l-0.182,-0.188l-0.273,-0.125l-0.141,0.289l-0.164,-0.356l-0.33,-0.093l0.003,0.435l-0.25,-0.051l0.341,0.527l1.384,0.212l-0.521,0.324l0.313,0.173l-0.215,0.473l-0.85,0.231l0.101,0.259l0.434,0.215l0.617,0.299l1.057,-0.075l0.69,0.83l1.341,-0.2l1.81,1.055l1.057,-0.099l-0.051,0.464l0.278,0.17l0.363,-0.35l0.603,0.645l2.353,6.663l0.959,0.854l0.016,1.363l1.18,0.503l0.228,0.437l-0.251,3.748l-0.694,0.982l-0.4,1.371l0.39,0.884l0.168,2.731l-1.398,0.363l0.26,2.104l-0.745,1.206l-0.646,0.199l0.104,1.752l-0.753,0.512l1.019,2.081l0.071,0.719l-0.357,0.468l6.555,-0.289l0.829,7.39l-1.018,6.353l-0.432,0.579l0.073,1.104l-0.599,2.527l0.16,1.172l-1.115,0.367l-0.407,0.912l-0.946,0.253l-0.682,1.463l-2.025,1.669l-0.122,0.718l-0.646,0.533l-0.714,0.007l-2.218,1.64l-2.092,0.793l-0.604,0.792l-0.773,-0.253l3.329,5.828l0.349,1.525l-0.147,2.438l3.669,3.169l0.391,0.652l-0.121,1.792l1.436,0.698l1.141,1.707l0.237,0.883l1.693,1.299l2.377,0.796l0.785,1.351l2.402,1.303l0.58,1.211l1.479,0.732l0.612,0.669l0.443,1.209l-0.025,1.111l-0.169,0.605l-1.147,1.085l-0.129,1.11l-0.849,1.902l0.156,0.833l0,0l-0.948,0.267l-0.788,0.604l-2.125,0.373l-0.385,0.461l-0.812,0.312l-0.938,-0.291l-0.71,0.13l-0.814,1.44l-2.227,2.124l-0.441,0.033l-0.394,0.444l-1.002,0.005l-1.166,1.471l-1.36,-0.234l-0.454,-1.482l0.415,-0.355l0.272,-1.081l-0.397,-0.953l0.371,-1.952l-2.604,1.369l-1.823,-1.222l-3.256,-0.575l-1.789,-1.666l-1.091,-0.286l-0.681,-0.776l-0.365,-1.193l-1.649,-0.55l-3.459,-1.976l-0.35,-0.441l-2.205,-1.042l-0.36,0.14l-1.474,-0.836l-0.808,0.526l0.194,1.512l-0.307,1.597l-0.58,0.2l-0.573,1.013l0.252,0.528l-0.053,1.299l2.962,4.653l0.756,0.652l0.114,0.368l-0.952,1.608l-0.993,0.561l-0.954,0.079l-0.485,0.461l-1.646,-0.442l-1.906,0.157l-0.497,-0.3l-1.1,-0.034l-0.363,2.5l-1.197,1.472l0.007,1.387l-0.144,0.285l-0.942,0.307l-0.439,-0.136l-1.044,-1.626l-2.658,-1.694l-2.612,1.048l-1.231,-0.222l-0.707,1.303l-1.543,0.409l-1.725,1.34l-0.104,0.458l-0.391,0.004l0.115,1.013l-1.357,0.687l-0.668,2.561l-0.75,0.504l0.001,0.575l-0.342,0.236l-1.022,-0.287l-0.923,0.232l-0.446,0.356l-0.189,0.665l-0.358,0.027l-0.352,-0.455l-0.781,0.468l-0.511,-0.425l-1.047,0.552l-0.722,-0.224l-0.685,-0.552l-0.644,-1.108l-0.841,0.021l-0.381,0.324l-0.309,-0.873l-0.846,-0.261l-0.194,1.272l-1.087,0.338l0.131,0.281l-2.52,-0.489l-0.516,0.355l0.001,0.561l-0.49,0.573l-0.805,0.384l-0.57,-0.406l-0.39,0.654l-0.718,0.213l-0.95,-0.133l0.081,1.331l0.275,0.063l-0.228,0.294l0.247,0.324l-0.446,0.746l0.723,0.459l-0.223,0.364l0.365,0.276l-0.717,-0.123l0.122,0.976l-1.407,0.926l0.142,1.21l-1.119,0.33l-0.442,1.048l-1.735,0.179l-0.042,0.694l0.354,0.274l-0.015,0.35l-0.777,0.517l-0.484,0.138l-0.426,-0.451l-1.096,-0.361l-0.503,0.137l-0.083,0.63l-0.812,-0.408l-0.336,1.11l0.399,1.065l-0.307,0.174l-0.382,-0.372l-0.949,0.265l0.047,1.693l-1.354,0.126l-0.906,-0.303l-0.242,0.113l0.186,0.642l-1.394,0.159l0.035,0.46l0.675,0.918l-0.847,-0.313l-0.488,0.164l-0.097,0.718l0.867,0.799l-0.268,0.586l-1.529,-0.27l-0.835,-1.747l-1.14,0.855l-0.573,-0.512l-1.015,-0.249l0.298,-0.746l-0.797,-0.56l-0.709,0.347l-0.23,-1.285l-1.652,-0.926l-0.469,-0.648l-0.508,0.745l-0.585,0.316l-0.418,-0.94l0.146,-0.54l-0.376,0.06l-0.567,-0.679l-0.878,-0.011l-0.201,-0.263l0.552,-1.427l-1.313,0.662l-0.947,-0.807l-1.373,1.208l-0.574,-0.687l-1.168,0.199l-0.675,-0.662l-0.272,0.646l-0.975,0.461l-1.184,0.266l-0.71,-0.129l0.017,0.835l-0.267,0.433l-1.107,-0.275l-0.85,0.144l-0.797,-0.801l-0.258,0.716l-0.968,0.649l-1.177,1.986l-0.767,0.327l-1.578,-1.214l-3.209,-1.549l-0.898,0.583l-0.75,-0.527l-0.379,0.073l-0.175,0.452l-1.082,-0.051l0.543,-0.427l-0.832,-1.035l-0.748,0.283l-0.098,0.76l-0.293,0.163l-0.552,-0.078l0.05,-0.569l-0.913,0.909l-1.34,-0.037l0.215,1.08l-0.229,0.292l0.315,0.5l-0.885,0.747l-0.68,0.081l-0.877,0.856l-0.459,0.074l-0.229,-0.254l-0.169,0.578l0.435,0.405l2.103,0.338l0.543,1.553l1.172,1.027l0.497,1.595l0.298,-0.023l0.376,-0.685l0.281,0.029l1.421,1.334l0.19,1.054l0.64,1.164l1.092,0.693l-0.04,1.032l0.297,0.606l-1.115,1.235l-0.753,0.326l-0.979,-0.432l-0.962,0.109l1.319,0.985l-0.377,1.212l0.124,0.7l2.529,1.291l-0.807,1.259l0.202,0.884l2.601,0.881l1.912,-0.016l0.639,0.99l-0.084,0.287l-1.169,0.56l0.255,0.577l0.983,0.787l-0.618,0.249l-0.896,1.41l0.366,0.743l-0.332,0.634l1.159,4.458l1.521,1.867l-1.928,0.255l-1.634,0.64l-2.23,1.169l-0.627,0.647l-0.008,1.155l0.646,0.864l2.532,1.424l-0.125,0.258l0,0l-0.483,0.079l-0.471,-0.578l-0.307,0.003l-0.16,0.914l-0.592,-0.558l-1.125,-0.257l-0.295,0.681l-1.166,-0.267l-0.704,0.968l-1.175,-1.063l-1.25,-0.324l0.082,-0.674l-0.47,-0.421l-0.54,0.412l-0.539,-0.163l-0.332,0.688l-0.668,0.354l-0.873,-0.94l-0.879,0.424l-0.893,-0.6l-1.322,0.11l-1.375,-0.548l-0.927,0.488l0.172,0.564l-1.785,0.153l-0.356,-0.216l-0.835,0.463l-1.303,-0.245l0.267,-1.018l-0.474,-0.378l-0.599,0.669l-0.439,-0.527l0.052,-2.678l-0.224,-0.673l-0.652,-0.103l0,0l-1.877,-0.492l-0.831,0.288l-0.157,0.527l-0.671,0.261l-0.257,0.771l-0.644,0.072l-1.079,-0.393l-1.401,0.758l-0.777,-0.55l0.152,-0.946l-0.51,-0.386l-0.558,0.092l0.515,-0.697l-0.422,0.009l-0.3,0.355l-0.226,-0.145l0.761,-0.462l0.207,-0.759l-0.522,0.46l-0.343,-0.361l-0.814,-0.188l-0.931,1.049l-0.791,0.239l0.341,-1.055l0.43,-0.095l-0.305,-1.127l-0.737,-0.475l0.445,-0.108l0.214,0.371l0.299,-0.029l0.453,-0.637l-0.365,-0.999l-0.523,-0.203l-0.239,-0.561l0.41,-0.625l0.697,0.129l-0.44,-1.271l0.415,-0.741l-0.372,-1.44l-0.694,0.587l-0.27,-0.229l1.014,-1.796l-0.239,-0.566l-1.31,-0.104l-0.359,-1.96l1.356,-0.92l-0.198,-1.047l-1.04,-0.443l0.128,-0.359l0.585,0.005l0.82,0.194l0.723,0.562l0.565,-0.449l-0.286,-0.819l-2.027,-1.617l0.136,-0.378l0.989,-0.028l-0.507,-0.473l0.49,-1.362l-0.588,-0.204l-0.956,0.152l-1.322,-1.205l-0.981,-0.173l-0.08,-1.252l-0.551,-0.947l0.803,0.11l0.68,-1.097l-0.542,-0.75l-0.342,0.059l0.198,0.462l-1.063,-0.055l-0.575,-0.934l0.775,-0.996l1.304,-0.287l-0.004,-0.671l-0.555,0.368l-0.493,-0.188l0.083,-0.771l-0.861,-0.965l0.958,-0.557l0.319,-1.025l-1.119,-0.976l-1.225,1.062l-0.201,-0.464l-0.361,0.146l0.264,-1.259l0.575,-0.117l-0.479,-0.347l1.118,-0.379l-0.095,-1.109l-0.888,0.149l-0.254,0.311l-0.067,-0.597l-0.402,0.472l-0.076,-0.377l-0.928,-0.34l0.315,-0.356l0.19,-0.105l0.001,-0.244l-0.705,-0.811l-0.621,0.503l-0.262,-0.105l0.171,-0.424l-0.259,-0.151l0.983,-0.864l-0.946,-0.891l-0.678,0.195l0.173,0.37l0.171,0.37l-0.188,0.268l-0.681,-0.275l-0.06,0.376l-0.469,-0.172l-0.308,-0.374l-0.017,-0.962l0.439,-0.212l0.235,-0.521l-0.394,-0.222l0.017,-0.413l0.541,0.205l0.089,-0.321l-0.747,-0.143l-0.75,0.958l-0.056,-0.743l0.285,-0.212l-0.5,-0.599l0.349,-0.38l-0.187,-0.475l-0.54,-0.031l-0.004,0.418l-0.323,-0.685l-0.325,0.098l-0.366,-0.399l0.251,-0.258l-0.169,-0.302l0.304,-0.045l-0.325,-0.329l0.108,-0.302l0.363,0.125l0.134,-0.312l-0.971,-0.39l-0.205,0.235l-0.593,-0.416l-0.279,0.25l-0.272,-0.15l0.086,-0.667l0.865,-0.271l-0.104,-0.353l-0.624,-0.029l0.227,-0.776l0.616,0.482l0.391,-0.424l-0.21,-0.41l-0.642,-0.136l-0.148,-0.458l0.153,-0.15l0.361,0.271l0.09,-0.45l-0.285,-0.038l-0.015,-0.303l-0.629,0.1l-0.197,-0.365l0.55,-0.523l-0.368,-0.161l0.242,-0.33l0.537,-0.012l0.274,-0.661l-0.281,-0.229l0.379,-0.462l-0.145,-0.278l-0.938,-0.184l0.596,-0.495l0.521,-0.033l0.244,0.617l-0.013,-1.088l0.417,-0.165l-0.46,-0.285l0.002,-0.528l-0.517,-0.265l-0.385,0.158l0.153,-0.837l0.471,0.202l-0.473,-0.762l0.127,-0.295l-0.438,-0.029l-0.042,-0.564l-0.402,-0.344l-0.466,0.471l-0.652,0.144l-0.797,0.003l-0.776,-0.434l-0.143,-0.767l0.716,-1.813l-1.02,-0.876l-2.75,0.422l-1.126,-1.288l-0.113,-0.556l1.207,-1.208l1.368,-3.36l-0.182,-0.249l-0.856,0.149l-2.536,0.861l-0.425,-0.836l1.791,-2.262l1.143,-0.775l0.071,-0.979l-0.346,-0.264l-1.666,0.084l-5.021,1.125l-2.325,-0.059l-0.516,-0.364l1.507,-1.358l0.734,-1.174l0.081,-1.533l-0.71,-0.763l-0.02,-0.965l1.555,-1.186l1.851,-0.948l0.564,-1.21l-2.322,-1.271l-3.145,-0.78l-2.284,1.952l-0.882,-0.144l-0.424,-1.36l1.007,-2.32l0.093,-1.845l1.034,-1.469l-0.257,-0.725l-1.214,0.247l-2.107,-0.452l-1.094,2.384l0.058,1.911l-2.122,-0.733l-0.576,0.073l0,0l-0.916,-1.014l-1.146,-2.085l-0.963,-0.99l-1.401,-0.761l-3.354,-0.937l-1.932,-0.988l-1.486,-0.116l-2.167,0.644l-3.184,1.958l-6.124,-0.123l-4.611,1.812l-2.269,0.225l-4.112,2.356l-2.164,1.862l-1.513,1.858l-3.528,0.282l-4.736,1.678l-2.604,-1.123l-2.098,-0.298l-0.683,-0.811l-1.851,-1.171l-3.236,-1.295l-0.649,-1.21l-0.957,-0.996l-2.469,-1.716l-0.104,-1.757l-0.644,-2.688l-1.974,-3.197l-2.167,-1.71l-2.912,-1.562l-3.29,-0.628l-4.467,-0.067l-3.202,1.223l-2.997,1.88l-1.052,0.965l-0.925,0.083l-7.045,-3.779l-0.409,-1.542l-0.776,-0.086l-0.115,-0.608l0.677,-0.59l-0.13,-1.469l-0.61,-2.283l-1.02,-0.702l0.22,-1.162l-0.452,-0.632l-0.694,-0.091l-0.474,-1.337L267.232,645.003z","Tambacounda","#FCEA0D","Blahblah"},
{"M80.81,473.52L83.632,475.235L84.292,476.224L84.339,477.313L81.372,481.604L79.542,486.592L78.96,489.514L79.266,489.912L81.875,490.875L83.122,492.605L84.915,493.589L86.307,495.259L89.617,497.414L90.009,498.132L89.987,499.333L91.113,499.757L91.788,501.114L91.694,504.387L91.014,505.5L91.382,505.563L93.011,504.12L93.648,502.968L95.999,500.555L99.836,493.119L100.967,492.876L101.532,492.39L101.742,491.447L101.359,491.121L102.76,488.937L107.745,483.771L108.314,484.085L110.964,486.968L111.935,487.39L114.552,487.883L116.97,487.467L117.801,487.771L119.289,490.221L119.209,491.023L118.185,492.395L119.426,494.063L120.358,494.735L121.297,494.988L121.694,494.648L122.065,492.918L123.191,492.522L124.194,492.935L125.432,494.5L125.854,496.316L125.676,498.154L125.939,499.886L127.136,502.27L128.125,503.23L128.863,504.649L128.976,507.602L132.885,510.776L133.124,515.648L134.706,519.676L134.988,522.632L134.836,524.033L134.836,524.033L130.784,525.133L129.858,525.031L129.502,524.576L128.399,524.947L128.055,523.446L128.36,522.979L127.614,522.467L124.981,521.296L120.476,520.084L120.497,519.266L119.874,518.717L119.162,518.764L118.747,519.287L116.816,518.687L117.112,517.792L116.792,517.522L116.087,518.54L114.641,518.193L114.065,518.36L113.765,518.038L108.644,517.796L105.793,518.616L103.321,520.237L100.192,520.4L100.294,521.092L99.768,521.305L93.457,523.227L89.121,524.145L87.369,525.013L85.178,527.017L84.656,527.645L87.711,531.564L89.302,532.862L90.416,534.356L90.751,536.389L88.866,538.06L88.317,539.346L93.471,543.692L92.979,545.701L92.592,546.192L92.68,547.028L93.133,547.177L92.571,549.027L91.394,549.544L88.844,553.073L88.736,554.702L89.414,554.869L89.158,555.841L89.493,556.231L90.25,556.053L90.558,556.801L91.199,556.973L91.076,557.296L92.061,558.698L93.406,559.619L93.445,560.044L95.69,560.686L100.585,560.232L101.156,561.749L101.156,561.749L101.214,562.919L100.269,564.74L100.315,565.476L99.399,569.112L97.904,571.771L93.586,575.419L91.364,576.326L89.62,578.201L88.206,578.503L84.104,578.263L83.445,579.038L83.232,580.623L82.703,581.695L82.196,585.934L82.522,590.046L82.349,590.989L79.807,594.708L80.29,595.399L80.866,595.386L79.945,596.253L78.708,596.771L79.08,598.087L78.779,598.888L79.401,599.766L80.861,600.535L80.857,601.912L79.854,603.079L79.146,603.171L78.354,604.225L77.552,604.474L76.957,605.306L77.938,606.727L77.925,607.316L77.372,607.209L76.211,607.632L75.34,607.301L74.841,607.445L74.184,608.417L74.134,609.024L74.401,609.412L76.639,610.86L76.544,611.469L77.933,612.985L78.023,615.116L76.873,615.176L75.942,616.414L75.942,616.414L74.928,612.074L73.112,608.473L73.173,608.132L72.661,607.722L71.963,607.967L71.29,607.746L71.353,607.025L70.857,606.741L70.785,607.099L68.586,604.806L67.718,603.379L66.775,602.913L66.483,600.178L65.621,597.539L62.196,593.103L61.397,592.69L60.589,592.675L60.232,590.397L60.37,586.867L60.007,585.635L59.136,584.577L58.606,583.032L57.97,582.53L56.663,580.489L54.993,579.501L52.95,577.426L51.595,577.06L50.654,576.237L48.786,576.097L47.868,575.491L47.271,574.058L46.472,573.763L45.67,572.349L44.79,571.513L44.247,569.176L43.033,566.29L40.437,564.123L39.205,561.784L39.205,561.784L41.075,560.658L40.401,558.736L41.105,555.638L41.108,554.082L39.975,553.093L40.468,550.589L40.49,549.856L40.118,549.815L40.143,549.522L40.603,549.017L42.071,548.675L42.553,548.23L42.727,547.022L42.529,545.723L41.579,545.42L41.326,545.081L41.209,543.35L40.562,540.715L39.514,537.818L38.659,536.34L38.263,531.512L37.765,531.05L37.765,531.05L40.959,529.358L43.015,525.016L54.302,512.233L63.393,500.597L67.259,495.197L76.179,480.53z","Thiès","#3875FF","Blahblah"},
{"M90.072,705.396L90.548,705.737L91.49,705.754L93.572,705.284L94.715,705.79L96.572,705.851L115.769,705.762L133.301,706.043L149.929,705.952L157.145,705.368L162.913,705.571L162.913,705.571L162.657,707.65L162.478,707.877L161.725,707.819L160.118,709.12L158.974,710.483L158.77,711.116L159.485,712.742L160.17,713.078L160.99,712.886L162.143,713.102L162.401,714.017L162.212,715.184L160.045,718.093L159.483,720.678L158.777,722.395L157.653,724.02L157.105,724.455L156.126,724.646L155.546,726.762L155.144,727.371L154.066,727.645L153.53,728.59L153.593,729.88L153.074,730.133L152.721,730.837L153.576,730.929L153.822,731.202L154.257,732.326L153.825,732.639L153.827,733.028L154.983,733.327L155.056,733.868L154.378,734.842L154.959,736.698L154.335,738.238L152.061,740.109L152.155,741.59L153.321,743.501L152.658,746.083L150.908,746.941L150.048,747.849L150.412,749.839L151.211,750.873L150.167,754.41L150.64,757.115L152.462,756.979L152.865,757.192L153.961,757.917L155.653,760.097L156.263,762.961L156.567,763.143L156.539,763.668L155.78,764.599L155.865,765.311L157.059,767.041L156.925,768.424L157.221,769.293L159.416,770.546L160.137,771.677L160.066,773.226L160.332,774.155L159.509,774.651L159.656,775.447L160.049,776.333L161.629,775.602L162.83,776.047L163.292,776.479L163.384,777.678L163.384,777.678L156.912,778.467L148.58,775.568L145.61,775.669L136.455,777.958L132.446,776.665L125.795,779.577L118.773,783.631L115.577,785.14L114.896,786.572L110.958,786.221L104.396,787.072L101.979,787.766L98.678,786.766L92.681,788.161L89.26,787.116L84.365,786.897L81.438,788.829L80.305,787.373L80.128,785.843L79.685,784.926L79.202,784.543L78.848,784.632L78.206,783.779L76.141,782.343L74.403,776.996L74.215,774.228L75.821,770.237L76.826,762.705L76.56,760.588L75.545,758.694L75.491,758.153L75.853,757.772L74.876,755.908L74.512,753.073L75.603,750.142L75.694,748.56L75.13,747.772L74.299,747.826L74.61,747.478L74.6,746.932L74.244,745.788L75.531,742.147L75.666,740.399L76.353,737.204L77.039,735.415L77.998,729.687L78.683,727.816L79.671,719.554L79.529,717.944L78.476,715.943L78.95,715.029L80.177,714.588L80.348,714.17L79.883,713.124L80.591,712.739L79.566,711.838L79.592,711.323L79.875,710.845L80.302,710.821L80.965,711.432L81.076,710.98L80.689,710.183L81.937,710.134L82.215,709.855L82.311,708.92L83.094,708.979L82.893,708.011L82.285,707.354L82.646,706.715L83.291,706.973L83.025,706.115L84.013,706.323L84.341,705.525L86.026,705.539L87.247,704.896z","Ziguinchor","#FD9164","Blahblah"},
};
public static List<MapRegion> createRegions(String[][] desc) { // méthodes qui analyse le tableau pour en faire une liste de région
final List<MapRegion> list = new ArrayList<>(); // une liste pour stocker les régions
for(String[] regionDesc : desc) { // on parcourt le tableau
Path2D path = simpleSVGToPath2D(regionDesc[0]); // première colonne, définition SVG du path, qu'on va parser (analyser la chaîne de caractères et la convertir en Path2D)
String name = regionDesc[1]; // deuxième colonne, nom de la région
Color color = toColor(regionDesc[2]); // troisième colonne, couleur
String data = regionDesc[3]; // quatrième, texte à afficher
list.add(new MapRegion(path, color, name, data)); // on ajoute la nouvelle région
}
return list;
}
private static Color toColor(String colorDef) { // méthode qui convertit une couleur au format "css" en couleur Java
return Color.decode(colorDef);
}
private static Path2D simpleSVGToPath2D(String string) { // méthode qui convertit un path SVG en Path2D
string = string.replace(',', ' '); // pour faciliter le traitement des séparateurs (espace=virgule)
Path2D path = new Path2D.Double(); // on créé un path
char lastCommand=0; // en SVG, une commande qui suit la même commande n'est pas répété : on a besoin de connaitre la commande précédemment exécutée
Point2D point = new Point2D.Double(); // le point pour dessiner le path en SVG
for(int i=0; i<string.length(); ) { // on va parcourt tous les caractères de la définition
char command = string.charAt(i); // i est la position du caractère à traiter
if ( command==' ') { // si la commande est une espace, alors on utilise la dernière commande
command=lastCommand;
}
else {
lastCommand=command; // on stocke la dernière commande pour la prochaine itération qui fait une référence à la commande précédente
}
switch(command) { // selon la commande
case 'M': // si la commande est M = moveTo SVG
i = parsePoint2D(i, string, point, false); // on parse les coordonnées du point qui suivent dans la description
path.moveTo(point.getX(), point.getY()); // on fait le move
break;
case 'l': // si la command est l = lineTo relatif
i = parsePoint2D(i, string, point, true); // on parse les coordonnées du point qui suivent dans la description
path.lineTo(point.getX(), point.getY()); // on fait le lineTo
break;
case 'L': // si la commande est L = lineTo absolu
i = parsePoint2D(i, string, point, false); // on parse les coordonnées du point qui suivent dans la description
path.lineTo(point.getX(), point.getY()); // on fait le lineTo
break;
case 'h': // = lineTo horizontal relatif
i = parseHor2D(i, string, point, true);
path.lineTo(point.getX(), point.getY()); // on fait le lineTo
break;
case 'H': // = lineTo horizontal absolu
i = parseHor2D(i, string, point, false);
path.lineTo(point.getX(), point.getY()); // on fait le lineTo
break;
case 'v': // = lineTo vertical relatif
i = parseVert2D(i, string, point, true);
path.lineTo(point.getX(), point.getY());
break;
case 'V': // = lineTo vertical relatif
i = parseVert2D(i, string, point, true);
path.lineTo(point.getX(), point.getY());
break;
case 'c': // = cubic bezier relatif
i = bezierCurve(path, i, string, point, true);
break;
case 'C': // = cubic bezier absolu
i = bezierCurve(path, i, string, point, false);
break;
case 'z': // fermeture du path
path.closePath();
i++;
break;
default:
throw new IllegalStateException("Command: "+command);
}
}
return path;
}
/**
* parse et ajoute une bezier au path
* @param path : le path2D qu'on es en train de créé
* @param index : la position du prochain caractère dans la description SVG
* @param string : la description SVG
* @param point : le point qui sert à mémoriser le dernier point dessiné
* @param relative : un booléen qui dit qu'on est en train de faire du relatif(true) ou de l'absolu(false)
* @return la position du prochain caractère à traiter dans la description SVG pour tracer la suite du contour
*/
private static int bezierCurve(Path2D path, int index, String string, Point2D point, boolean relative) {
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
int start=index;
index = nextIndex(string, index);
double xp1 = Double.parseDouble(string.substring(start, index));
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
start=index;
index = nextIndex(string, index);
double yp1 = Double.parseDouble(string.substring(start, index));
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
start=index;
index = nextIndex(string, index);
double xp2 = Double.parseDouble(string.substring(start, index));
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
start=index;
index = nextIndex(string, index);
double yp2 = Double.parseDouble(string.substring(start, index));
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
start=index;
index = nextIndex(string, index);
double xp3 = Double.parseDouble(string.substring(start, index));
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
start=index;
index = nextIndex(string, index);
double yp3 = Double.parseDouble(string.substring(start, index));
if ( relative ) {
xp1+=point.getX();
xp2+=point.getX();
xp3+=point.getX();
yp1+=point.getY();
yp2+=point.getY();
yp3+=point.getY();
}
path.curveTo(xp1, yp1, xp2, yp2, xp3, yp3);
point.setLocation(xp3, yp3);
return index;
}
// analyse la string SVG à partir de index pour déterminer les coordonnées (x et y) relatives ou absolues du prochain point et retourne la nouvelle position dans la description pour parser la suite
private static int parsePoint2D(int index, String string, Point2D point, boolean relative) {
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++; // on passe les séparateurs (tout ce qui n'est ni un chiffre, ni un point, ni un moins)
int start=index; // la prochaine coordonnée commence ici (en index)
index = nextIndex(string, index); // on cherche la position du dernière caractère du nombre
double x = Double.parseDouble(string.substring(start, index)); // la coordonnée se situe entre start inclus et index exclus, substring permet de récupérer cette partie, et parseDouble converti la chaine en nombre à virgule
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++; // on recommence pareil pour la seconde coordonnée
start=index;
index = nextIndex(string, index);
double y = Double.parseDouble(string.substring(start, index));
if ( relative ) { // en mode relatif,
point.setLocation(point.getX()+x, point.getY()+y); // on ajoute les 2 nombres trouvés respectivement à l'abscisse et à l'orgonnée
}
else { // en mode absolu
point.setLocation(x, y); // les deux nombres sont respectivement l'abscisse et l'ordonnée
}
return index; // en retourne la nouvelle position dans la description SVG pour continuer son analyse et terminer de créer le Path2D
}
// idem que parsetPoint2D mais ne parse qu'une seule coordonnée x
private static int parseHor2D(int index, String string, Point2D point, boolean relative) {
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
int start=index;
index = nextIndex(string, index);
double x = Double.parseDouble(string.substring(start, index));
if ( relative ) {
point.setLocation(point.getX()+x, point.getY());
}
else {
point.setLocation(x, point.getY());
}
return index;
}
// idem que parsetPoint2D mais ne parse qu'une seule coordonnée y
private static int parseVert2D(int index, String string, Point2D point, boolean relative) {
while ( "-0123456789.".indexOf(string.charAt(index))<0 ) index++;
int start=index;
index = nextIndex(string, index);
double y = Double.parseDouble(string.substring(start, index));
if ( relative ) {
point.setLocation(point.getX(), point.getY()+y);
}
else {
point.setLocation(point.getX(), y);
}
return index;
}
// chercher la position de séparation entre une valeur double SVG dans string et la suivante, à partir de la position index
// permet de déterminer la fin d'un nombre (coordonnée) commençant en index.
private static int nextIndex(String string, int index) {
if ( string.charAt(index)=='-' ) index++; // on passe le signe -
while("0123456789.".indexOf(string.charAt(index))>=0) index++; // tant qu'on a un nombre ou un point, on avance
return index; // retourne la position trouvée
}
/**
* méthode qui permet de placer un texte relativement à un rectangle : elle calcule la position à utiliser avec la méthode Graphics.drawString()
*
* @param g2d contexte graphique
* @param bounds bounds du rectangle
* @param string le texte
* @param halign le type d'alignement horizontal parmi SwingContants.LEFT, SwingConstants.CENTER ou SwingConstants.RIGHT
* @param valign le type d'alignement vertical parmi SwingContants.TOP, SwingConstants.CENTER ou SwingConstants.BOTTOM
* @return
*/
public static Point2D.Float getStringLocation(Graphics2D g2d, Rectangle2D bounds, String string, int halign, int valign) {
final FontMetrics fontMetrics = g2d.getFontMetrics();
final Rectangle2D textBounds = fontMetrics.getStringBounds(string, g2d);
final double textWidth = textBounds.getWidth();
double x,y;
switch (halign) {
case SwingConstants.LEFT:
x = bounds.getX();
break;
case SwingConstants.RIGHT:
x = bounds.getX() + bounds.getWidth() - textWidth;
break;
case SwingConstants.CENTER:
default:
x = bounds.getX()
+ (bounds.getWidth() - textWidth) / 2;
break;
}
switch (valign) {
case SwingConstants.TOP:
y = bounds.getY() + fontMetrics.getAscent() - fontMetrics.getDescent();
break;
case SwingConstants.BOTTOM:
y = bounds.getY()
+ bounds.getHeight() - fontMetrics.getDescent() ;
break;
case SwingConstants.CENTER:
default:
y = bounds.getY()
+ bounds.getHeight()/ 2 - ( ( fontMetrics.getAscent() + fontMetrics.getDescent() ) / 2 ) + fontMetrics.getAscent() ;
break;
}
return new Point2D.Float((float)x, (float)y);
}
} |
Partager