<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[166033] trunk/Websites/webkit.org</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/166033">166033</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-03-20 18:29:36 -0700 (Thu, 20 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Sample code for potential ARIA blog post.
https://bugs.webkit.org/show_bug.cgi?id=130548

Patch by James Craig &lt;jcraig@apple.com&gt; on 2014-03-20
Rubber-stamped by Chris Fleizach.

* blog-files/aria1.0: Added.
* blog-files/aria1.0/africa_large.svg: Added.
* blog-files/aria1.0/combobox_with_live_region_status.html: Added.
* blog-files/aria1.0/roaming_tabindex: Added.
* blog-files/aria1.0/roaming_tabindex/css: Added.
* blog-files/aria1.0/roaming_tabindex/css/img: Added.
* blog-files/aria1.0/roaming_tabindex/css/img/buttons.png: Added.
* blog-files/aria1.0/roaming_tabindex/css/img/icons.png: Added.
* blog-files/aria1.0/roaming_tabindex/css/screen.css: Added.
* blog-files/aria1.0/roaming_tabindex/final.html: Added.
* blog-files/aria1.0/roaming_tabindex/js: Added.
* blog-files/aria1.0/roaming_tabindex/js/aria.js: Added.
* blog-files/aria1.0/roaming_tabindex/js/init.js: Added.
* blog-files/aria1.0/roaming_tabindex/js/prototype.js: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsiteswebkitorgChangeLog">trunk/Websites/webkit.org/ChangeLog</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Websites/webkit.org/blog-files/aria1.0/</li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10africa_largesvg">trunk/Websites/webkit.org/blog-files/aria1.0/africa_large.svg</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10combobox_with_live_region_statushtml">trunk/Websites/webkit.org/blog-files/aria1.0/combobox_with_live_region_status.html</a></li>
<li>trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/</li>
<li>trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/</li>
<li>trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/</li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssimgbuttonspng">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/buttons.png</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssimgiconspng">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/icons.png</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssscreencss">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/screen.css</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexfinalhtml">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/final.html</a></li>
<li>trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/</li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsariajs">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/aria.js</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsinitjs">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/init.js</a></li>
<li><a href="#trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsprototypejs">trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/prototype.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebsiteswebkitorgChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Websites/webkit.org/ChangeLog (166032 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/ChangeLog        2014-03-21 01:16:40 UTC (rev 166032)
+++ trunk/Websites/webkit.org/ChangeLog        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-03-20  James Craig  &lt;jcraig@apple.com&gt;
+
+        Sample code for potential ARIA blog post.
+        https://bugs.webkit.org/show_bug.cgi?id=130548
+
+        Rubber-stamped by Chris Fleizach.
+
+        * blog-files/aria1.0: Added.
+        * blog-files/aria1.0/africa_large.svg: Added.
+        * blog-files/aria1.0/combobox_with_live_region_status.html: Added.
+        * blog-files/aria1.0/roaming_tabindex: Added.
+        * blog-files/aria1.0/roaming_tabindex/css: Added.
+        * blog-files/aria1.0/roaming_tabindex/css/img: Added.
+        * blog-files/aria1.0/roaming_tabindex/css/img/buttons.png: Added.
+        * blog-files/aria1.0/roaming_tabindex/css/img/icons.png: Added.
+        * blog-files/aria1.0/roaming_tabindex/css/screen.css: Added.
+        * blog-files/aria1.0/roaming_tabindex/final.html: Added.
+        * blog-files/aria1.0/roaming_tabindex/js: Added.
+        * blog-files/aria1.0/roaming_tabindex/js/aria.js: Added.
+        * blog-files/aria1.0/roaming_tabindex/js/init.js: Added.
+        * blog-files/aria1.0/roaming_tabindex/js/prototype.js: Added.
+
</ins><span class="cx"> 2014-03-14  Maciej Stachowiak  &lt;mjs@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Replace &quot;Apple Computer, Inc.&quot; with &quot;Apple Inc.&quot; in copyright headers
</span></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10africa_largesvg"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/africa_large.svg (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/africa_large.svg                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/africa_large.svg        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,546 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&gt;
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; 
+  &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
+&lt;svg xmlns:cc=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:svg=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;800&quot; viewbox=&quot;0 0 800 800&quot;&gt;
+  &lt;metadata&gt;
+  &lt;rdf:rdf&gt;
+   &lt;dc:format&gt;
+    image/svg+xml
+   &lt;/dc:format&gt;
+   &lt;dc:title&gt;
+    Africa 2007
+   &lt;/dc:title&gt;
+   &lt;dc:creator&gt;
+    Peter Collingridge, accessified by James Craig
+   &lt;/dc:creator&gt;
+  &lt;/rdf:rdf&gt;
+ &lt;/metadata&gt;
+ &lt;style type=&quot;text/css&quot; id=&quot;style_css_sheet&quot;&gt;
+/*
+ * Below are Cascading Style Sheet definitions that allow how countries are displayed to be changed easily.
+ */
+
+.land
+{
+   fill:#666;
+   stroke:white;
+   stroke-width:1;
+   stroke-miterlimit:4;
+}
+.coast
+{
+   stroke-width:0.5;
+}
+.circle
+{
+   opacity:0;
+   fill-opacity:1;
+   stroke:black;
+   stroke-width:0.5;
+   stroke-opacity:1;
+}
+
+ &lt;/style&gt;
+
+ &lt;!-- countries --&gt;
+ &lt;g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Algeria&quot; id=&quot;Algeria&quot; class=&quot;land dz&quot; d=&quot;M190.6276,112.125 L191.2396,99.0788 C190.6742,95.5706 196.0528,94.413 197.9896,92.6492 C198.9498,91.7746 200.5194,89.9876 201.9974,90.0796 C203.2832,90.1598 203.5808,88.2224 205.2712,87.8946 C208.0232,87.361 209.4344,90.0296 211.0892,86.3828 C211.6028,85.2536 213.3172,85.7264 214.3024,85.5968 C216.076,85.3616 217.8628,85.1204 219.5368,84.5012 C222.8992,83.258 223.0382,79.6468 225.905,78.1324 C227.087,77.5072 228.634,77.4378 229.8808,76.9772 C231.4156,76.4082 232.4236,74.6876 234.0064,74.3696 C234.586,74.253 237.7048,73.9996 236.4292,72.3556 C235.6048,71.2936 234.2944,70.9062 235.9864,69.3596 C233.566,68.6946 235.7512,66.158 237.5272,66.3068 C239.8768,66.5036 242.044,65.6658 242.8768,63.4664 C244.4728,59.253 255.3484,62.985 258.4504,62.1884 C254.8936,60.583 261.0482,58.6226 259.1152,57.1326 C258.2024,56.429 257.1808,55.808 256.4392,54.908 C255.58,53.8674 256.0276,52.3758 255.184,51.1014 C254.302,49.7696 254.7908,48.6734 255.0452,47.3474 C255.284,46.1042 254.3248,46.0892 254.4592,44.8832 C254.5852,43.7562 254.5678,42.3988 254.5822,41.2768 C254.6026,39.7708 253.5988,38.5614 255.0916,37.3928 C253.54,36.759 254.1676,35.8942 253.9432,34.7338 C253.6444,33.1882 250.964,32.6866 250.3772,31.0966 C253.2512,31.0894 254.4796,30.3918 256.9216,29.1438 C257.9848,28.6004 258.6544,28.5992 259.2964,27.4784 C259.864,26.486 260.2924,25.653 261.3472,25.0892 C261.9424,24.7698 263.0956,23.8436 263.7244,24.3402 C264.5404,24.9848 265.57,23.865 266.1124,23.3682 C267.5212,22.0808 269.4556,25.3218 270.8956,22.3604 C272.8264,18.3918 279.4804,16.6748 283.378,16.2258 C286.1524,15.9068 288.9556,15.1436 291.7516,15.3318 C293.8372,15.4724 295.2736,12.813 297.0832,13.8368 C297.8704,14.2818 297.6916,14.0324 297.9916,13.5368 C298.0576,13.4286 301.1848,13.4742 301.6504,13.2894 C304.3528,12.218 307.0816,12.6224 309.9232,12.543 C312.2908,12.4772 312.8536,12.968 314.656,14.3274 C316.9588,16.0638 317.758,13.496 319.7548,13.2512 C320.3968,13.1732 324.3808,13.0004 324.1624,11.8206 C323.7688,9.6968 326.6692,11.0046 327.3592,11.468 C328.8004,12.434 330.9688,12.9224 332.446,11.7416 C333.2572,11.0924 332.728,10.2476 334.2724,10.6326 C335.3692,10.9062 336.2296,11.7128 337.4224,11.6492 C336.412,13.3182 338.9176,12.734 339.7096,12.5274 C341.29,12.1158 342.9976,12.5012 344.5144,11.9936 C344.6284,14.1462 341.8996,15.2012 340.7104,16.5726 C343.9492,17.2712 340.8424,21.825 341.4964,23.912 C342.6328,27.537 342.1588,30.2766 341.3944,33.8528 C340.7656,36.7952 337.4908,39.087 335.3032,41.018 C334.0276,42.1436 334.648,45.0834 335.3932,46.3302 C336.598,48.3476 336.0496,50.546 338.5324,51.4892 C341.9224,52.7756 340.9276,57.0704 343.66,59.115 C344.9272,60.0642 346.4224,60.7506 347.4952,61.9424 C348.9448,63.5538 349.1572,66.1952 349.4944,68.24 C350.1904,72.4638 352.1944,77.1572 352.1944,81.4158 C352.1944,82.5656 349.7776,82.1258 351.3364,84.2042 C352.8448,86.219 354.0934,88.5874 354.592,91.0664 C356.3078,99.5986 353.7858,99.546 355.072,103.9206 C355.6856,106.0078 355.7182,107.5338 354.907,109.5654 C353.9912,111.8586 354.8262,114.0022 355.3242,116.2906 C356.0754,119.7502 354.5368,119.8052 352.078,121.6628 C349.276,123.782 353.9344,127.8978 355.15,129.7674 C357.4228,133.262 356.056,137.4104 359.0788,140.673 C360.2392,141.926 361.5736,140.4234 362.812,140.517 C364.3792,140.636 366.0796,141.818 367.5508,142.3518 C370.9084,143.5712 372.0364,146.3886 373.2748,149.5784 C373.8628,151.0892 374.4556,151.2714 372.8188,152.2002 C355.787,163.0636 338.6056,173.9326 324.0916,188.0624 C323.2568,189.2776 320.5564,192.3152 318.4588,193.4744 C316.867,194.354 314.5252,194.4342 312.7708,194.7978 C310.3864,195.2912 307.996,195.7592 305.614,196.2642 C304.4188,196.5174 293.9452,200.1164 294.3952,196.4094 C294.5536,195.1028 295.4872,194.5962 295.3588,193.149 C295.3096,192.5936 295.4762,189.6752 294.8978,189.386 C293.1374,188.5052 290.9386,188.102 288.9958,187.7288 C288.0382,187.544 286.7518,185.1086 286.0206,185.288 C281.8238,186.3182 281.1634,182.1358 280.4092,181.5104 C279.518,180.7712 277.9804,180.7038 277.1644,180.0836 C276.2464,179.3864 277.0366,177.6546 276.4846,176.7186 C275.791,175.5414 274.5868,174.5168 273.4576,173.8484 C271.5232,172.7034 269.7112,171.344 267.9388,169.9674 C263.5348,166.5488 259.2076,163.0278 254.824,159.5826 C237.9184,146.2914 221.0356,133.0494 203.3476,120.8034 C199.1272,117.8756 194.8852,114.9896 190.6276,112.125&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Angola&quot; id=&quot;Angola&quot; class=&quot;land ao&quot;&gt;
+   &lt;path d=&quot;M372.1636,574.6182 C372.0328,570.4074 373.1728,566.1582 372.6964,561.9342 C372.622,561.2814 372.1408,560.6526 372.412,559.9842 C372.7996,559.029 373.852,558.4734 374.272,557.4798 C374.6092,556.683 374.6476,555.8226 374.7592,554.9778 C374.86,554.217 375.8632,553.2858 375.6124,552.6414 C375.076,551.2662 376.9516,547.5678 377.2516,546.0234 C377.68,543.819 377.2096,541.425 378.4444,539.4906 C379.2664,538.2018 378.7456,535.5066 379.6948,534.6738 C380.6704,533.8182 382.2496,531.9618 382.8628,530.8086 C383.7688,529.1058 383.212,526.4106 385.9696,526.1586 C387.91,525.9822 388.0804,524.4942 389.0392,522.819 C391.3144,518.8422 391.9576,512.6778 390.9076,508.2726 C390.4228,506.2386 389.6236,504.7902 388.4788,503.0706 C387.286,501.2802 387.2476,499.8894 386.5912,498.0162 C386.2924,497.1618 385.5316,496.5174 385.4164,495.6042 C385.2748,494.487 385.4404,493.4526 384.9448,492.4014 C384.2104,490.8414 382.7548,488.8242 384.9436,487.7058 C384.3592,488.1294 383.9404,488.7822 383.9956,489.5298 C384.4612,488.6526 384.9736,487.755 385.6876,487.053 C386.2588,486.4914 387.1816,486.5262 387.2812,485.6274 C387.5392,483.285 387.0628,481.1358 385.942,479.0886 C384.6808,476.7858 384.0196,474.3726 383.0416,471.9474 C382.6084,470.8722 382.642,469.6758 382.3288,468.5694 C381.8632,466.9242 380.3416,465.813 379.4956,464.3802 C378.8032,463.2078 376.39,459.1194 378.4936,458.469 C379.4644,458.169 380.4664,458.163 381.4624,458.0334 C382.8472,457.8522 383.53,456.6078 385.0612,456.4602 C392.1316,455.781 399.2752,456.5874 406.3828,456.4266 C409.0804,456.3654 411.844,456.1506 414.5392,456.2478 C417.0712,456.3402 416.53,458.067 417.7048,459.6918 C418.1944,460.3686 417.7432,462.417 417.9688,463.3194 C418.3732,464.9442 419.1688,466.425 419.7712,467.9766 C420.2392,469.179 419.5156,470.2314 420.5284,471.309 C421.6096,472.4586 421.888,473.295 422.536,474.6942 C422.9356,475.5546 424.7968,479.6034 426.022,479.265 C426.7576,479.0622 430.4884,479.349 430.4848,479.3406 C430.2928,478.869 434.5048,477.651 435.2716,477.8214 C437.4292,478.3002 439.4092,478.5534 441.9676,478.5534 C441.6556,477.0438 442.5616,475.5606 442.0516,474.0654 C443.3284,474.339 443.4448,473.1174 443.2828,472.1874 C443.0584,470.8998 444.0556,469.3146 443.6116,468.1854 C445.8328,468.1854 448.06,468.2286 450.28,468.2094 C450.9436,468.2034 450.5548,467.4306 451.096,467.247 C451.8676,466.9842 452.7592,467.2386 453.5488,467.2386 C453.0544,469.7142 451.702,471.1266 454.8496,471.1266 C457.6,471.1266 460.3756,470.9814 463.1224,471.0426 C465.4024,471.093 464.986,473.3742 464.4556,474.9114 C464.1592,475.7742 463.7692,476.655 463.6912,477.5742 C463.57,479.031 464.8324,480.5022 465.0928,481.9578 C465.6388,485.0154 464.5036,488.3982 464.266,491.4714 C464.0176,494.6766 465.1492,495.9366 466.9888,498.3366 C468.2872,500.031 468.9376,504.417 468.5464,506.4906 C468.4096,507.2214 467.7196,507.6858 467.464,508.3806 C466.9888,509.6718 468.292,510.9114 467.8888,512.2506 C469.0048,512.2782 469.9984,510.6858 470.908,510.1962 C471.6892,509.7762 474.0496,510.4074 474.9148,510.6462 C476.4484,511.0698 478.2628,509.3442 479.902,509.4078 C481.4668,509.469 483.2128,510.4398 483.874,508.3638 C484.606,509.4206 484.6948,512.7806 484.4748,513.9762 C484.1706,515.6306 484.1984,517.2804 483.7924,518.9178 C483.3034,520.8886 484.5544,522.687 484.0408,524.6118 C483.5224,526.5534 482.1328,528.1362 483.7888,529.9638 C480.3844,531.4 475.6142,530.7086 471.9826,530.6882 C470.1624,530.678 468.0284,530.2394 466.2182,530.4814 C464.627,530.6942 465.4214,536.6176 465.349,538.5138 C465.1562,543.557 465.4324,547.1166 465.2396,550.9758 C465.0476,554.8202 465.251,558.7386 465.1456,562.5918 C465.0378,566.5304 467.7748,567.5826 470.0428,570.393 C472.462,573.3906 474.9004,576.399 478.1728,578.5266 C472.8244,579.567 467.4436,580.4766 462.1648,581.8446 C460.0612,582.3906 459.2512,581.8578 457.2568,581.6346 C456.3664,581.535 455.6092,581.9622 454.798,582.231 C453.4804,582.6678 452.224,582.0258 450.9652,581.6802 C446.4868,580.455 441.6916,580.9482 437.1364,580.2366 C435.1828,579.9318 434.1872,578.2406 433.2568,576.7206 C432.4288,575.3684 429.7826,575.926 428.392,575.991 C417.2234,576.5138 405.7432,576.0186 394.5592,576.0186 C392.2552,576.0186 392.0068,575.8758 390.0196,574.317 C388.0216,572.7498 386.4428,570.8008 383.752,571.9938 C381.7672,572.8738 379.708,575.2712 377.4412,574.1886 C374.663,572.8618 374.2664,574.2338 372.1636,574.6182&quot; id=&quot;Angola&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M374.8396,447.5262 C376.3912,446.3106 378.1372,443.1942 380.176,442.785 C381.0832,442.6038 381.0016,441.1374 382.0036,441.1422 C383.128,441.147 383.8492,442.9338 384.5956,443.5554 C382.7788,444.7998 381.1396,445.9062 379.57,447.4758 C378.802,448.2426 379.0228,448.2438 379.372,449.1282 C379.864,450.375 379.588,451.8486 379.474,453.1374 C379.3192,454.887 376.0324,456.309 376.0096,454.0182 C375.9976,452.7546 376.6768,452.4582 376.288,451.0614 C376.0024,450.0342 374.44,448.3062 375.7036,447.3594 C375.4156,447.4134 375.1276,447.4698 374.8396,447.5262&quot; id=&quot;Angola&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Benin&quot; id=&quot;Benin&quot; class=&quot;land bj&quot; d=&quot;M272.3596,284.2338 C272.7702,283.2914 272.8678,281.8736 273.5272,281.1516 C274.1456,280.4746 274.3422,280.588 274.9152,279.9956 C276.1004,278.7704 277.9864,275.3164 279.5672,276.9442 C280.0564,277.448 284.9468,276.2348 285.896,274.5714 C286.5044,273.5052 287.3284,272.0706 287.3032,270.7988 C287.2876,270.0294 286.3138,268.245 287.5568,267.9842 C288.3418,267.8196 289.438,268.0328 289.78,267.5288 C291.0234,265.6956 292.6024,267.7098 293.5292,268.7552 C294.1898,269.5004 294.5914,270.1244 295.2382,270.8852 C296.0014,271.7804 297.052,272.6718 297.8116,273.7352 C298.234,274.3266 297.298,275.8016 297.1624,276.3882 C296.8528,277.737 298.1296,278.8506 298.7932,279.8658 C299.5648,281.0468 298.9456,282.2804 299.4484,283.3734 C300.0496,284.6838 300.8152,285.6734 299.9728,287.0834 C299.5264,287.831 298.5514,287.1336 298.2538,287.9882 C297.8002,289.2914 299.6248,290.2164 298.0276,292.0076 C297.3082,292.8142 296.3214,293.0344 295.7934,293.9716 C295.3026,294.8452 295.134,295.717 294.4152,296.6062 C293.0388,298.3126 295.148,300.6566 292.208,301.3814 C291.224,301.6238 290.6312,301.18 290.4536,302.3188 C290.288,303.3784 289.7144,304.394 289.7716,305.463 C289.9118,308.0838 289.8718,310.705 289.6804,313.3038 C289.5958,314.4528 290.7584,316.7406 290.5666,318.368 C290.3974,319.8016 290.3692,321.0562 290.1544,322.3098 C289.8358,324.1692 290.5336,324.9224 290.395,325.908 C290.2396,327.0126 289.5448,328.6562 289.6714,329.4176 C288.4748,329.441 286.4104,329.7018 285.2344,329.936 C283.4032,330.3006 281.5648,330.6342 279.7144,330.8864 C280.1524,330.4902 280.6672,330.2886 281.2624,330.2816 C281.1832,329.349 280.5382,328.3538 280.081,327.5642 C279.3694,326.3354 279.1828,324.2906 278.9824,322.9142 C279.1698,322.8964 280.1484,322.6136 280.0216,320.0972 C279.7906,315.5176 279.9838,310.8582 279.9688,306.2408 C279.9602,303.6296 279.8456,301.644 278.3912,299.4228 C277.0112,297.318 277.4524,294.8678 277.3756,292.526 C277.3154,290.6916 274.5656,289.8108 273.2068,288.5418 C271.9372,287.3564 272.2664,285.7256 272.3596,284.2338&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Botswana&quot; id=&quot;Botswana&quot; class=&quot;land bw&quot; d=&quot;M445.5916,652.5582 L446.6156,623.7826 L454.7936,623.7928 L455.9446,585.5804 C458.8446,584.8792 466.2134,584.4466 470.4118,582.9926 C471.7178,582.5402 474.9154,581.8614 476.2258,582.6126 C478.0006,583.629 478.342,585.7446 479.2048,587.4104 C481.5082,585.5896 483.3232,581.8622 486.047,581.799 C487.066,581.7754 486.961,582.3714 487.7062,582.4746 C488.671,582.6078 489.2368,581.2838 489.9588,580.8532 C492.2948,579.4596 494.7344,579.656 494.3206,580.501 C494.2036,580.7396 494.3212,582.0714 494.434,582.356 C495.058,583.9304 495.9346,585.4326 496.9636,586.773 C497.9716,588.0862 498.783,588.79 499.5364,591.0512 C500.0744,592.6662 500.2766,593.0086 500.741,594.5422 C501.7166,597.7618 504.0604,600.5128 506.9894,602.0218 C510.0882,603.6184 512.9288,603.2914 511.8676,608.2278 C514.6966,607.5668 516.9118,607.8982 515.6884,611.6564 C515.2674,612.9496 515.41,613.9326 516.154,615.0582 C516.9592,616.28 517.5208,619.189 518.8118,619.5896 C521.4016,620.3934 523.6448,620.2586 526.411,621.2018 C528.4652,621.902 526.6876,622.8674 527.3212,623.922 C527.8098,624.7354 529.6354,624.4766 529.9242,625.6432 C526.696,626.043 527.2118,626.7284 526.0192,628.3962 C524.6866,630.2596 521.0456,629.3324 519.4686,631.0316 C518.047,632.5632 516.8558,635.1252 514.9376,636.636 C514.7246,636.8036 513.9808,637.495 513.2008,638.043 C511.9022,638.9554 510.4736,639.2882 509.4856,640.4072 C508.168,641.899 507.9128,642.3356 507.685,644.5774 C507.4052,647.3302 505.798,647.9546 503.8452,650.2816 C502.6978,651.649 500.8042,652.0274 498.8806,652.3406 C497.4936,652.5664 498.3154,653.1032 498.0502,654.4472 C497.701,656.2148 496.843,657.8168 496.2718,659.511 C495.421,662.0262 494.081,662.9038 491.5106,662.6806 C489.1778,662.479 489.4504,664.1528 486.449,663.4934 C485.2576,663.2318 482.4048,661.8994 481.388,661.8308 C479.899,661.7304 478.929,660.8042 478.0726,659.732 C476.7982,658.136 473.3226,656.9664 471.5254,659.2844 C469.8828,661.403 470.6078,663.7672 469.0934,665.946 C468.3462,667.0208 467.2822,667.759 466.2706,668.4526 C465.0202,669.3082 464.6564,670.6892 463.5944,671.6804 C462.8036,672.4196 462.1258,672.0986 461.2414,672.4586 C460.9474,672.7106 460.919,673.0038 460.9862,673.4228 C460.6418,674.379 459.199,674.6448 458.3626,674.5908 C457.0318,674.5032 456.2868,674.173 455.0032,674.0718 C453.8382,673.9798 452.7984,673.5222 451.306,674.7582 C449.1314,670.61 453.673,668.7324 452.0848,663.0942 C451.4822,660.9552 450.6292,658.5822 449.5276,656.6502 C448.5652,654.963 446.7028,654.123 445.5916,652.5582&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_BurkinaFaso&quot; id=&quot;Burkina_Faso&quot; class=&quot;land bf&quot; d=&quot;M214.6516,287.0852 C215.2924,285.4256 215.8696,283.504 215.4856,281.7292 C215.0656,279.7888 216.2342,280.9476 216.9746,279.4932 C217.4318,278.5932 218.4422,275.8552 217.3798,275.0332 C216.6648,274.48 218.0856,273.2306 215.9488,272.6576 C216.9484,272.7078 217.5744,271.9266 218.334,271.461 C219.5748,270.7028 221.3506,271.3252 222.6314,270.543 C224.1974,269.5866 226.0892,265.8732 224.7064,264.2408 C224.0472,263.4624 225.0074,262.943 225.8692,263.043 C227.178,263.1952 227.0728,262.011 226.8784,260.979 C226.75,260.3048 225.4156,259.3028 226.576,258.8984 C227.4688,258.5864 228.6976,256.0626 229.2556,255.2898 C229.1836,256.8092 232.7668,258.6234 234.0076,258.7472 C233.7148,257.306 234.6508,257.4968 235.8196,257.5376 C235.6624,256.22 236.32,254.4284 235.6396,253.2164 C236.6128,253.4022 237.622,253.4706 238.4956,253.994 C239.806,252.0284 239.6464,247.713 243.0484,247.3614 C244.7248,247.1886 246.8024,249.8468 247.1324,246.8756 C247.3088,245.282 249.0688,245.487 250.1596,244.9206 C251.5732,244.1876 252.6566,243.1174 254.1304,242.4174 C255.8988,241.5776 259.1284,237.2214 261.5992,239.45 C262.068,239.8726 263.2144,238.8896 263.9704,239.1186 C265.006,239.432 266.0478,239.7916 267.022,240.261 C268.5174,240.9818 265.766,244.7884 268.0588,246.0366 C269.475,246.8076 268.3632,249.2098 269.4256,250.2788 C270.0256,250.8822 271.2404,252.137 271.039,252.9338 C272.1662,253.3816 275.1286,255.3736 277.0276,256.8452 C276.1708,257.264 275.4004,257.2424 274.6156,256.6712 C273.446,259.6566 277.378,263.12 279.7516,264.249 C281.6582,265.1562 282.7306,262.8836 284.0878,263.2784 C285.2038,263.6024 285.4192,265.3674 285.8476,266.2614 C282.8118,267.3056 285.346,269.0444 286.4642,271.1322 C287.6558,273.357 284.7784,276.5852 282.598,276.7266 C282.0592,276.7614 279.964,277.3674 279.574,277.0554 C278.5,276.1988 278.2612,276.6354 277.3684,277.4396 C275.6056,279.026 274.6058,281.11 272.3452,281.4332 C268.8626,281.9306 268.2428,280.8278 266.1866,280.4444 C265.2022,280.2608 264.2702,279.9332 263.2444,279.9198 C262.3356,279.908 259.9806,282.2508 259.3084,281.9576 C257.6808,281.2472 261.2664,281.1844 249.0218,281.224 C244.9574,281.2372 242.5474,281.5126 239.2744,281.2088 C239.674,283.0816 237.872,284.0474 238.3804,285.1838 C239.0712,286.7268 239.4112,287.95 239.686,289.5624 C239.9198,290.9326 240.0526,292.6434 239.89,294.1842 C239.7474,295.535 240.7996,297.1614 239.8732,297.8838 C238.3612,296.756 236.9248,294.0462 235.9012,292.4418 C235.036,293.7294 231.55,292.1876 230.2012,292.7012 C228.7264,293.2626 225.6388,293.7152 225.6172,295.8114 C224.686,295.6518 221.4188,294.2836 220.847,293.5756 C220.313,292.9146 219.7512,292.5778 219.6496,292.0458 C219.4528,291.0164 218.5,289.0458 217.756,288.6402 C216.5032,287.9572 215.1088,288.956 214.6516,287.0852&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Burundi&quot; id=&quot;Burundi&quot; class=&quot;land bi&quot; d=&quot;M530.6956,423.9462 C531.8284,420.3028 533.7986,424.2866 534.0812,424.3196 C538.1104,424.7878 538.9164,423.4722 539.2516,419.4462 C541.466,421.3472 540.7598,418.5962 545.7546,420.3298 C544.9108,420.74 542.7674,423.0724 544.4344,422.9984 C543.028,426.6792 545.8186,426.823 547.3744,426.3582 C546.4234,427.8042 548.556,428.4118 546.528,429.8608 C545.2754,430.7558 545.316,430.2526 545.0312,431.8638 C544.961,432.2606 543.5036,432.0634 543.2588,432.5758 C542.9852,433.1458 544.1368,434.4518 543.9992,434.813 C543.9094,435.0482 543.2878,436.2934 542.2364,437.065 C540.5874,438.275 540.3556,439.7006 538.6002,440.83 C537.7362,441.3858 536.8518,441.5506 536.0818,441.5526 C535.7692,440.5034 533.9028,436.556 533.539,435.2618 C533.0142,433.3936 533.7544,431.4586 532.5076,429.836 C532.6544,428.9204 533.1044,427.8032 532.372,426.788 C531.7246,425.8904 530.9908,425.0456 530.6956,423.9462&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Cameroon&quot; id=&quot;Cameroon&quot; class=&quot;land cm&quot; d=&quot;M343.3876,345.4902 C344.5192,344.5244 345.2216,343.0994 345.2716,341.6648 C345.3182,340.3244 347.0726,337.7316 346.5776,336.8092 C346.0732,335.8696 345.868,335.494 347.26,333.9306 C348.6406,332.38 349.9974,330.8 351.5226,329.3828 C352.3974,328.568 353.5018,328.2206 353.9566,327.0914 C354.349,326.1182 355.8668,323.5374 356.9504,323.2314 C358.142,322.8942 358.8352,324.4734 360.2956,324.1544 C361.4524,323.9012 361.5196,322.293 361.7836,321.3848 C362.0008,322.3088 364.487,324.8328 365.3656,325.0674 C366.2444,325.3022 366.4834,326.5454 366.1402,327.489 C365.8924,328.171 367.1338,329.194 368.4782,328.8778 C368.8844,328.179 371.1232,326.1106 370.5724,324.8636 C370.19,323.998 371.998,322.8426 372.6244,322.3412 C373.666,321.5082 372.6236,320.2418 373.1864,319.1204 C374.2896,316.921 375.8486,314.9098 376.6012,312.1544 C376.9204,310.9862 376.4968,309.756 376.8304,308.6528 C377.0886,307.7986 378.4458,307.5044 378.3772,306.0844 C377.9702,305.9654 381.391,306.4238 382.0826,303.068 C382.2386,302.311 383.5504,298.5668 382.2688,298.3158 C383.7424,297.5648 385.9176,296.6094 386.1648,294.926 C386.3256,293.8278 386.262,292.919 386.262,291.8198 C386.262,290.675 387.4136,290.774 387.93,289.9892 C388.5586,289.0338 388.4864,287.6822 388.8752,286.4832 C389.2808,285.2326 389.647,284.0314 389.8084,283.274 C390.1222,281.801 390.956,279.039 392.4974,278.4168 C393.3016,278.0922 398.117,278.1278 398.7348,275.399 C398.9086,274.631 398.1104,274.033 398.2252,273.1386 C398.4238,271.5908 398.5244,270.7072 398.788,269.5326 C399.0962,268.159 396.5742,266.9752 395.764,267.23 C395.1008,267.476 394.2358,266.06 393.9194,264.2894 C393.6658,261.4756 393.8172,260.4202 393.4168,259.6098 C394.4608,259.6098 396.0812,259.5182 396.892,260.4232 C398.096,261.7672 396.854,263.1126 399.515,263.8472 C400.8872,264.226 401.0458,267.423 401.131,268.5284 C401.216,269.6324 401.0018,268.707 402.1424,269.7916 C404.4346,271.9716 401.9662,278.41 402.2836,281.2652 C402.7246,285.2324 404.6056,289.761 408.1864,291.7506 C406.742,292.9966 404.9126,292.4092 403.7308,291.8204 C402.527,291.9338 402.257,292.1232 400.9814,292.1718 C398.309,292.2734 395.5868,290.5414 394.2328,292.7456 C392.589,295.4208 392.7918,295.8838 394.9782,298.387 C397.1682,300.895 399.5758,303.0718 401.9854,305.3614 C402.7138,306.0526 403.6726,307.1124 404.1574,308.0156 C405.1012,309.7736 405.887,313.3642 406.9228,315.075 C407.9764,316.8152 405.8636,318.037 405.3368,318.7422 C404.497,319.8658 403.342,322.4664 402.5846,324.2872 C402.3336,324.8906 401.7348,325.8248 401.4876,326.438 C401.0316,327.5708 400.3364,328.4732 399.8112,329.578 C399.083,331.11 395.3332,332.6168 397.4896,333.4832 C399.0662,334.1168 398.9316,335.7272 398.7168,337.8212 C398.6196,338.768 398.5668,339.6194 398.0376,340.4318 C398.0976,340.3394 399.1862,341.8372 399.203,341.9452 C399.4706,343.7116 399.0476,346.4164 400.2224,347.8342 C400.9488,348.7108 401.921,349.0394 402.2496,350.4016 C402.4946,351.4168 402.9292,352.7804 403.8664,353.4402 C400.9074,353.5158 407.5704,361.3716 408.1372,361.8246 C409.5782,362.9764 411.5938,363.6568 411.852,364.6974 C412.046,365.4788 412.1978,365.908 412.2326,366.6676 C412.3202,368.59 412.762,370.587 413.1892,372.4472 C410.9356,373.5012 413.434,377.2516 411.9892,378.3224 C410.7028,377.0588 409.2808,375.9224 407.5408,375.3654 C406.786,375.123 404.5306,374.2084 403.9176,374.6186 C403.1282,375.1468 401.5586,375.0548 401.0676,373.8758 C401.0432,373.8172 398.4284,373.3182 398.1728,373.2174 C397.3592,372.8982 395.0548,373.1408 393.9928,373.0784 C392.0572,372.9668 390.0898,372.9906 388.1602,372.7182 C387.8326,372.6726 386.878,372.9776 386.5024,372.794 C385.7764,372.4376 386.8276,371.7054 385.4776,371.8398 C383.6944,372.0164 382.1356,372.3054 380.3188,371.9154 C378.1864,371.4582 376.4404,371.817 374.2984,371.7512 C372.9016,371.7078 370.3984,370.9136 369.0736,371.6442 C368.6956,371.8532 368.8384,372.968 368.4316,372.968 C367.1092,372.968 365.788,372.968 364.4656,372.968 C362.6224,372.968 360.7912,373.0364 358.9504,373.0772 C355,373.1658 354.1528,370.9952 354.9844,367.3304 C355.4584,365.2424 356.1784,362.9778 355.0504,360.9572 C354.5188,360.0044 352.6912,358.3914 354.6184,357.7604 C353.5324,358.3842 351.4276,357.3572 352.69,356.0994 C353.3548,355.437 354.8344,354.2876 352.8904,354.218 C353.2684,353.8002 353.4676,353.3108 353.4904,352.749 C352.882,354.2276 352.2364,353.0516 351.2464,353.0946 C351.6124,353.5842 351.8704,353.9348 351.2464,353.613 C351.2848,354.086 351.2284,354.5468 351.0784,354.9956 C350.284,354.9668 349.9,354.3522 350.1304,353.613 C349.4452,354.8624 347.4832,353.2962 347.23,352.3772 C346.8304,350.924 346.7464,348.4386 345.7132,347.306 C344.5264,348.7674 344.7556,347.0468 343.9852,347.0468 C344.1244,347.6154 344.212,348.1902 344.2492,348.7734 C341.7976,349.0806 343.132,346.7816 343.3876,345.4902&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_CanaryIslands&quot; id=&quot;Canary_Islands&quot; class=&quot;land coast es-cn&quot;&gt;
+   &lt;path d=&quot;M108.2116,108.4962 C106.9204,107.6382 107.9548,106.281 109.2436,106.6806 C108.9952,107.3406 108.6508,107.9454 108.2116,108.4962&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M110.6224,99.2514 C110.362,99.4242 110.1028,99.597 109.8424,99.7698 C109.7224,98.8878 108.1024,96.4722 109.7584,96.141 C111.6064,95.7726 111.2776,98.3238 110.6224,99.2514&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M115.1116,104.6946 C114.2356,104.1534 114.1912,102.5286 115.5436,102.7938 C116.9572,103.071 116.0848,104.5566 115.1116,104.6946&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M120.0436,104.9538 C119.3344,103.7358 118.9504,102.3642 118.2316,101.1522 C120.8344,100.5402 122.8132,99.7302 125.3116,98.733 C124.4128,100.659 122.1244,104.1762 120.0436,104.9538&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M129.5476,107.5458 C127.4176,107.2434 127.0528,103.7658 129.244,103.2798 C132.6328,102.5298 131.5996,106.593 129.5476,107.5458&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M140.8636,104.2626 C140.6032,104.0898 140.344,103.917 140.0836,103.7442 C142.6384,102.897 142.9744,98.979 144.82,97.215 C145.9864,96.1002 145.366,100.4658 145.1956,100.9062 C144.4096,102.921 142.252,102.8814 140.8636,104.2626&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M146.2276,96.0546 C145.9396,95.9394 145.6516,95.8242 145.3636,95.709 C145.7224,94.9266 148.51,91.287 149.1568,93.0786 C149.698,94.5822 146.9848,95.277 146.2276,96.0546&quot; id=&quot;Canary_Islands&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path id=&quot;Canary_Islands_circle&quot; class=&quot;circle es-cn&quot; d=&quot;M92.543,41.8956 C99.8574,41.8956 99.8574,30.92 92.543,30.92 C85.2232,30.92 85.2232,41.8956 92.543,41.8956&quot;&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_CapeVerde&quot; id=&quot;Cape_Verde&quot; class=&quot;land coast cv&quot;&gt;
+   &lt;path d=&quot;M36.8356,219.8658 C37.7176,219.9438 39.7228,218.631 39.3004,217.5654 C38.602,215.799 35.4352,218.1018 36.8356,219.8658&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M39.3436,221.2482 C41.8696,221.0322 38.392,218.9562 39.3436,221.2482&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M43.9264,241.725 C44.5864,241.4802 45.262,240.0186 44.4724,239.5386 C43.1068,238.7094 42.6148,240.9726 43.9264,241.725&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M45.3076,224.3586 C45.5524,222.3846 47.3788,224.325 47.9836,223.2342 C46.9504,222.7674 45.6016,222.1314 44.4436,222.5442 C44.7928,223.1202 45.0808,223.725 45.3076,224.3586&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M51.8704,240.7746 C53.2588,239.295 50.968,237.6498 50.3104,236.4546 C49.6324,238.2234 49.264,240.7014 51.8704,240.7746&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M55.1596,238.5282 C57.6532,235.9806 52.7164,236.967 55.1596,238.5282&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M58.8676,229.5426 C61.312,228.567 59.1904,227.3034 58.0036,226.8642 C58.0576,227.937 57.01,229.5618 58.8676,229.5426&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M58.0036,223.2354 C58.5712,222.4038 58.39,221.463 58.1836,220.5582 C57.2296,221.3286 57.9976,222.2802 58.0036,223.2354&quot; id=&quot;Cape_Verde&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path id=&quot;Cape_Verde_circle&quot; class=&quot;circle cv&quot; d=&quot;M10.4916,180.4136 C17.806,180.4136 17.806,169.438 10.4916,169.438 C3.1718,169.438 3.1718,180.4136 10.4916,180.4136&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_CentralAfricanRepublic&quot; id=&quot;Central_African_Republic&quot; class=&quot;land cf&quot; d=&quot;M396.6916,332.7044 C397.2796,331.749 398.1628,331.1142 399.0112,330.4148 C400.3288,329.33 400.4548,328.0832 401.3044,326.72 C402.7492,324.4016 403.7396,320.9308 405.3632,318.724 C407.3744,315.9868 407.6944,317.8584 410.2816,317.106 C411.6316,316.7136 412.6912,316.43 414.0004,316.011 C415.2928,315.5972 414.9424,314.1882 416.3116,313.6974 C416.686,315.1484 417.8212,315.9762 418.6396,317.1534 C419.3632,315.7148 421.5824,315.0142 422.2618,314.498 C424.4034,312.8708 427.7624,312.2162 430.3208,312.2102 C432.56,312.2054 434.7614,312.8406 435.8584,310.7684 C436.6318,309.307 439.7774,306.7142 439.6108,305.319 C439.5074,304.454 437.584,304.6768 437.4986,303.5672 C437.3678,301.864 442.5908,301.8188 443.9594,301.8416 C448.2328,301.913 452.9238,300.2362 455.7136,296.7762 C457.1806,294.9568 458.086,293.0012 459.9796,291.5946 C460.9384,290.8832 463.6188,288.46 463.0836,287.3456 C462.4106,285.9436 463.5154,284.5406 465.2056,284.1332 C467.1152,283.6726 468.5942,281.2718 470.8226,281.2192 C473.5148,281.1556 474.1358,282.9034 475.3262,284.3462 C477.1978,286.6142 479.2266,288.303 480.3344,290.7292 C481.4072,293.0792 481.4888,295.2098 481.346,297.687 C481.2038,300.1492 479.0614,300.4826 479.386,302.2926 C479.7028,302.1788 480.0172,302.0636 480.334,301.9484 C480.5896,302.9094 480.0616,303.7724 479.734,304.6256 C481.6516,304.9746 483.9088,304.479 485.6848,305.456 C487.606,306.512 484.4692,309.2502 488.0644,309.861 C489.2752,310.0674 490.9324,309.9366 491.9632,310.7142 C493.1644,311.6214 493.772,312.6252 495.0688,313.5896 C497.0916,315.0936 495.5402,316.2568 495.5156,317.0124 C495.4742,318.2848 497.2744,319.199 498.256,319.7798 C499.312,320.4062 500.4682,321.1 501.562,321.6594 C503.6966,322.7514 503.0462,323.3398 503.8312,324.5826 C504.386,325.4612 506.7546,325.9064 506.104,327.2094 C505.2376,328.9446 505.9486,329.2454 507.0158,330.2416 C507.9932,331.1536 506.896,331.917 508.5676,333.0152 C509.6336,333.7152 510.7,334.07 511.8712,334.6712 C513.7564,335.6382 514.4614,336.7798 514.3772,338.8304 C514.2982,340.7456 515.605,341.7968 516.1924,343.418 C514.6818,341.7746 512.6636,341.1068 511.3216,342.5032 C510.7528,343.0952 509.5756,342.9488 508.8784,342.8778 C508.54,342.764 508.2124,342.7866 507.8992,342.9462 C507.1156,343.3398 506.8368,342.6056 506.238,342.3716 C505.038,341.9036 504.054,340.9316 502.78,341.2952 C500.2322,342.022 500.147,340.3266 498.521,340.0762 C497.4862,339.9168 496.7612,340.5844 496.9628,341.6128 C497.2928,343.2964 495.3052,343.5536 494.1304,343.9232 C492.9592,344.2904 491.3544,344.8246 490.2648,344.029 C489.6804,343.603 488.4052,341.7692 488.0608,342.9152 C487.5868,344.4872 484.3738,345.5314 483.0146,345.7786 C480.5272,346.231 478.9268,348.5692 477.8728,347.4186 C476.6834,346.1202 475.3532,344.2418 473.3734,346.5506 C472.7714,347.2528 472.8346,348.3104 472.3726,349.0784 C471.7414,350.1272 471.6112,351.5502 470.4856,352.3196 C468.916,353.3924 465.2274,351.0482 463.2752,351.121 C462.1364,351.1636 461.9152,351.499 460.583,351.0562 C459.2158,350.602 458.7486,351.2652 457.799,350.0914 C456.846,348.9134 454.8534,349.9138 453.5166,349.6738 C451.8414,349.3726 451.8094,347.064 450.8758,346.1558 C449.2498,344.574 446.7966,343.48 445.2356,342.5304 C443.0368,341.1928 439.9036,343.9578 438.79,345.8766 C438.1564,346.9686 437.248,348.0594 436.8136,349.244 C436.4728,350.169 435.1468,350.0112 434.7988,350.538 C434.2408,351.3816 435.6492,353.1154 435.5452,354.093 C435.394,355.5124 435.255,356.1292 435.3268,359.318 C434.1292,357.3332 431.1052,359.0492 429.0652,358.7456 C428.1496,358.61 426.5764,357.8696 425.7316,357.4794 C424.1032,356.7284 422.7598,358.261 421.1014,358.5886 C418.6594,359.071 416.7112,358.2294 416.1736,361.2522 C415.8832,362.8842 416.0524,364.6614 415.7524,366.2418 C415.3516,368.3636 413.9212,370.4108 413.1976,372.4506 C412.6516,370.0746 412.216,367.9578 412.0444,365.5424 C411.8716,363.117 409.3096,363.2442 408.0364,361.8284 C407.4112,361.131 400.8904,353.5196 403.8736,353.444 C402.3304,352.3554 402.6484,349.9626 401.0668,348.7266 C399.0148,347.1246 399.3136,344.823 399.2236,342.4148 C399.19,341.5148 398.0236,340.899 398.056,340.2956 C398.104,339.405 398.62,338.4956 398.6812,337.5572 C398.7496,336.5322 398.7496,335.426 398.4628,334.4288 C398.1892,333.4914 397.0456,333.9284 396.6916,332.7044&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Chad&quot; id=&quot;Chad&quot; class=&quot;land td&quot; d=&quot;M387.7996,245.786 C388.12,244.9772 388.9216,245.1594 389.3356,244.5044 C389.7016,243.9246 389.8084,243.1098 390.3916,242.6766 C391.1236,242.132 391.2508,240.0654 391.564,239.2446 C393.2536,234.8072 397.0468,230.7512 400.0684,227.18 C402.8356,223.9088 405.982,221.1414 406.1932,216.7206 C406.4572,211.1816 406.5664,205.6304 406.9576,200.0972 C407.2588,195.8228 407.0428,190.1984 409.1656,186.4098 C410.3872,184.2284 409.5832,183.2094 408.1048,181.5054 C407.6848,181.0218 407.1556,180.6414 406.7296,180.1626 C405.9904,179.3348 406.9576,178.5918 406.6252,177.7386 C405.8572,175.7658 404.2478,174.2382 403.3358,172.3614 C402.5642,170.774 403.06,168.8442 402.8872,167.1414 C402.6016,164.3262 401.7616,161.6094 401.3188,158.8184 C401.2672,158.4942 400.7294,157.3454 401.177,157.1222 L411.055,152.4332 L482.5394,192.8998 L483.2728,232.4816 C480.91,231.7484 480.6958,232.0422 478.2214,232.4318 C476.584,232.6898 474.4648,232.4312 473.9402,233.9642 C473.5574,235.0822 474.6362,237.2088 473.8184,238.2906 C473.0486,239.3084 471.88,242.7956 470.2588,243.3594 C468.417,244 469.166,247.202 470.482,248.4668 C467.4928,250.862 465.5452,252.3638 467.8664,255.703 C469.4362,257.9616 465.7768,258.9164 464.77,260.816 C464.0788,262.1204 463.8084,262.5722 464.8584,263.6222 C465.7524,264.5162 467.2854,263.5576 468.248,263.566 C469.4572,263.5768 470.4684,264.1366 469.6916,265.0816 C468.5616,266.456 470.8552,268.0904 469.9672,270.5012 C470.278,270.344 470.5924,270.2 470.9152,270.069 C471.6088,271.1838 470.8216,272.4452 470.8312,273.6114 C470.8408,274.9446 471.0014,274.9624 471.8432,275.887 C472.607,276.7258 474.4424,276.269 474.5668,278.5494 C474.6222,279.565 473.6384,281.4084 473.9334,282.5654 C473.4142,281.6866 470.9244,280.8442 469.828,281.414 C469.177,281.752 468.2728,282.038 467.8444,282.674 C467.3164,283.4564 467.2056,282.9594 466.6128,283.6158 C465.6636,284.6682 463.3828,284.4078 463.0564,286.0544 C462.9232,286.7322 463.4606,287.305 463.2424,288.0054 C462.5126,290.3486 460.3994,291.3158 458.6984,292.862 C457.3428,294.0942 456.652,295.8326 455.4352,297.1832 C453.279,299.576 451.7824,300.1148 448.7374,301.2474 C447.0058,301.8914 442.69,302.1714 440.8672,301.9974 C440.2456,301.9386 436.4248,302.8364 437.788,303.8636 C438.3808,304.311 439.9588,304.611 439.6036,305.6718 C439.1956,306.8924 437.7724,308.6142 436.8268,309.4892 C436.084,310.1744 435.4324,311.888 434.494,312.1196 C432.7192,312.5598 430.5664,312.2202 428.7328,312.3836 C426.316,312.5984 424.5172,313.1972 422.4472,314.4776 C421.3096,315.1806 419.176,315.7974 418.6432,317.156 C417.8248,315.98 416.6896,315.1506 416.3152,313.7 C415.558,313.9724 415.2004,314.967 414.8392,315.6006 C414.5824,316.0494 413.1052,316.1706 412.6048,316.3902 C410.1232,317.481 409.2724,317.288 406.6312,317.3276 C408.0196,315.5804 406.4632,314.9408 405.9628,313.3028 C405.2812,311.0766 404.6932,308.5806 403.2244,306.717 C401.9728,305.1284 400.2472,304.0196 398.6932,302.7594 C397.15,301.5054 396.292,299.979 395.0452,298.4912 C394.1968,297.4784 392.0428,295.563 393.0652,294.0918 C394.1008,292.6016 394.6012,291.543 396.5368,291.6332 C398.6992,291.7338 400.8196,292.6124 402.9652,291.8826 C403.9084,291.5624 404.7436,292.0352 405.5872,292.3734 C406.3696,292.6854 407.464,291.9654 408.1912,291.7532 C403.8988,289.3686 401.8948,283.6184 402.1216,278.924 C402.1732,277.8512 402.7144,276.993 402.8236,275.973 C402.9364,274.9148 402.6652,273.849 402.6376,272.793 C402.6172,271.9952 402.7804,270.686 402.3124,269.9804 C401.944,269.426 400.9276,269.8376 400.9912,268.9016 C401.0752,267.6668 400.5784,266.0072 400.3264,264.7962 C400.144,263.9228 398.9038,263.7884 398.2792,263.4018 C396.286,262.1684 398.82,260.3032 394.8808,259.712 C393.9386,259.5704 394.2152,260.3086 393.2006,259.5306 C391.7926,257.8706 389.9216,254.6312 389.4348,253.7396 C388.1264,251.3418 388.318,248.3852 387.7996,245.786&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_ComoroIslands&quot; id=&quot;Comoro_Islands&quot; class=&quot;land coast km&quot;&gt;
+   &lt;path id=&quot;Comoro_Islands&quot; d=&quot;M661.1716,519.4182 C661.7032,518.931 661.3756,518.007 661.162,517.4742 C660.6184,516.1206 660.964,514.8702 660.5596,513.537 C658.9048,513.4866 659.6308,515.6706 659.2612,516.6174 C658.6816,518.1066 660.4552,518.5026 661.1716,519.4182&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;Comoro_Islands&quot; d=&quot;M664.6276,524.0862 C664.3396,523.2522 663.5704,522.5886 662.6356,522.777 C662.6356,523.9734 663.7744,523.905 664.6276,524.0862&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;Comoro_Islands&quot; d=&quot;M670.6756,523.9902 C671.692,521.3574 669.6748,522.339 668.0848,521.9142 C668.9776,522.5682 669.9448,523.1394 670.6756,523.9902&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path id=&quot;Comoro_Islands_circle&quot; class=&quot;circle km&quot; d=&quot;M664.4942,525.2116 C671.8084,525.2116 671.8084,514.2358 664.4942,514.2358 C657.1744,514.2358 657.1744,525.2116 664.4942,525.2116&quot;&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_CoteDIvoire&quot; id=&quot;Cote_d'Ivoire&quot; class=&quot;land ci&quot; d=&quot;M186.0556,327.8658 C186.5692,326.756 187.9036,326.5136 188.3704,325.3206 C188.6788,324.53 188.9188,323.2674 188.9716,322.424 C189.0688,320.894 188.4604,318.1136 187.3516,316.9794 C188.0608,316.2306 189.04,316.6158 189.7636,317.0658 C189.9196,316.1588 191.3752,315.17 190.8016,314.1714 C190.3372,313.364 191.098,311.6442 192.1876,312.2276 C191.362,311.0012 189.9208,310.2402 189.5488,308.7272 C188.848,305.8794 194.1688,308.1186 195.0316,308.5124 C194.4112,306.6212 194.644,304.5114 192.1876,304.106 C192.6352,302.8436 192.6412,301.4984 194.2636,301.2548 C192.9148,299.6576 192.6604,300.0032 193.1356,297.626 C190.204,299.5136 190.3284,293.0186 190.7116,291.5778 C191.0804,290.1912 192.065,289.8386 193.2886,289.4782 C193.9514,289.2832 193.9984,288.0426 194.5156,287.6034 C195.2776,286.9578 196.1752,287.3756 197.0236,286.9988 C196.8412,288.6836 200.2468,290.3658 201.6076,289.7636 C200.6896,288.243 202.2496,288.1566 203.3608,288.1746 C204.8452,288.1974 204.3208,285.7352 204.3664,284.7522 C204.9508,285.0776 205.558,286.179 206.3584,285.962 C207.1264,285.7518 207.2788,284.3082 208.0864,283.9746 C208.7476,285.1724 207.8066,289.2028 209.5336,289.6316 C211.0944,290.0188 209.8376,286.6226 214.5628,286.7648 C215.021,286.7786 213.561,288.128 217.3418,288.3668 C219.1208,288.479 219.4888,291.9946 219.73,292.2822 C220.9792,293.7714 223.299,295.3408 225.6184,295.8114 C225.64,293.7152 228.7276,293.2626 230.2024,292.7012 C231.5512,292.1876 235.0372,293.7294 235.9024,292.4418 C237.3492,294.1592 237.934,296.0296 239.8744,297.8838 C240.094,297.6066 240.298,297.3186 240.4864,297.02 C241.055,298.7348 239.726,300.3736 239.9728,301.2392 C240.3836,302.681 241.2352,303.3762 241.4296,305.043 C241.5904,306.423 242.4448,308.7522 241.9372,310.0518 C241.3648,311.5148 240.6274,312.2984 239.9122,313.6266 C238.9594,315.3956 237.3406,316.4242 237.3934,318.3848 C237.4622,320.9374 236.2022,322.7978 235.6828,324.6902 C235.1332,326.6924 235.3894,329.9212 236.6224,331.5452 C237.837,333.1446 238.3996,335.3034 237.934,337.023 C241.0072,336.1724 239.2072,340.8392 239.7076,342.2946 C239.0896,342.2838 238.4848,342.3702 237.8956,342.5538 C238.0732,342.224 238.2736,341.906 238.4956,341.6034 C237.0508,343.773 235.858,341.043 235.5556,339.962 C234.7744,340.826 234.4804,342.0234 233.1436,342.1218 C232.2784,342.1854 231.172,341.7762 230.5516,341.1714 C230.074,342.0512 228.9784,341.2184 228.5596,340.826 C229.312,340.6604 230.1496,341.3958 230.7196,340.5668 C230.4712,340.286 230.1844,340.0554 229.8556,339.8756 C230.2132,341.6012 229.5064,339.9942 228.3076,340.3076 C228.556,340.82 225.4648,340.5272 224.7136,340.6098 C224.3296,340.6532 220.492,341.3382 220.8016,341.505 C222.7264,342.5456 226.4992,339.218 228.0436,341.1714 C225.6508,341.3022 223.3612,341.6958 221.0176,342.1124 C220.4896,342.206 219.394,342.4316 219.0568,341.8088 C218.5792,340.9316 216.2632,341.331 215.4328,342.1218 C216.7936,341.5772 217.5472,341.7224 218.8888,342.2082 C215.9464,342.5456 212.8108,342.3848 210.0376,343.5822 C207.6424,344.6154 205.492,346.5582 202.8148,346.8306 C201.4516,346.97 198.5404,348.5108 197.5384,349.4756 C195.286,351.644 194.8912,347.6382 195.2416,345.9882 C195.658,344.025 196.3372,341.8578 196.8808,340.2342 C197.6032,338.0816 196.9864,335.732 195.2824,334.3016 C194.248,333.4338 192.7456,333.044 192.9148,331.226 C193.1092,329.1402 186.7468,330.9548 188.0356,328.5572 C187.2736,328.731 186.5848,328.3914 186.0556,327.8658&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_DemocraticRepublicOfTheCongo&quot; id=&quot;Democratic_Republic_of_the_Congo&quot; class=&quot;land cd&quot; d=&quot;M376.5676,455.3984 C377.3908,454.773 378.41,455.3024 378.7328,454.184 C378.9944,453.278 379.7412,449.7186 379.1052,448.9902 C377.4408,447.0848 383.8984,444.2048 385.1116,443.1212 C385.4392,444.4974 387.4552,444.6978 387.5356,446.1462 C388.1812,445.4756 389.0344,445.0784 389.752,444.5012 C390.7312,443.714 390.322,442.287 391.1716,441.3942 C392.6116,443.3034 394.768,439.6506 396.4684,440.5016 C398.0884,441.3126 396.5932,441.674 396.3436,442.6902 C396.064,443.8316 396.7876,445.082 396.7876,446.229 C397.5064,445.3028 399.094,446.4714 400.0636,445.7984 C401.4952,444.8034 402.3844,442.9136 403.474,441.579 C404.0392,440.888 406.3372,439.7778 406.4584,439.1502 C406.7812,437.4918 408.1612,437.0946 409.5316,436.5104 C412.72,435.1494 413.2912,429.1446 413.2144,426.2766 C413.1556,424.094 413.3548,422.1212 413.08,419.9418 C412.8172,417.8516 415.4484,417.3152 416.3312,415.6614 C418.4108,411.7656 418.252,409.3004 422.4784,406.431 C424.2568,405.2236 425.3404,403.8044 426.5212,402.1386 C427.6972,400.4804 426.8476,398.0588 427.3252,396.1566 C427.7452,394.4864 428.5624,387.3152 428.6344,385.4348 C428.716,383.3094 429.9472,381.4458 430.2964,379.3746 C430.6348,377.3696 430.0492,375.249 430.5004,373.2642 C431.3488,369.5276 433.5802,366.4704 434.8582,362.9172 C435.601,360.8532 435.244,358.6772 435.1864,356.5724 C435.16,355.6016 435.61,354.5838 435.4552,353.6348 C435.3184,352.7886 434.8144,352.0832 434.5828,351.2696 C434.2156,349.976 436.4728,350.0108 436.99,348.831 C437.7052,347.2028 438.4588,345.7724 439.6924,344.4548 C440.8732,343.1924 442.3504,342.1124 444.1588,342.1256 C445.69,342.1364 446.302,343.4598 447.28,343.6772 C449.5528,344.18 451.66,346.6364 452.5084,348.7244 C453.1996,350.4294 455.65,349.1564 457.0336,349.5728 C457.7836,349.7984 458.1544,350.8124 459.0172,350.7714 C459.7816,350.7342 459.9388,350.5974 460.7284,351.0006 C461.9176,351.6078 462.1552,350.9984 463.3228,350.924 C464.1028,350.8734 464.9608,351.2864 465.676,351.5502 C466.966,352.0278 468.7276,352.9578 470.1352,352.4624 C472.6516,351.5766 471.8788,345.5636 475.2328,345.4064 C477.1396,345.3152 477.6484,349.1766 480.1384,346.8186 C481.1908,345.8214 488.464,344.8592 488.0248,342.4686 C489.5308,342.4038 490.036,344.4714 491.482,344.3262 C493.2184,344.1512 496.1944,343.8896 496.9168,342.0366 C497.1868,341.3456 496.4908,340.6554 497.404,340.1972 C498.5236,339.638 499.4428,339.9714 500.3164,340.8306 C501.7156,342.2072 503.0128,340.587 504.5596,341.3202 C505.3252,341.6826 505.9588,342.2588 506.7088,342.6462 C507.5824,343.0974 508.2052,342.7136 509.1304,342.8528 C511.3264,343.1826 512.1784,340.7456 514.4944,342.0582 C515.3752,342.5576 518.4328,344.4836 518.4328,345.6224 C518.4328,346.1804 519.1564,347.5566 519.6976,347.7776 C521.9728,348.705 524.1412,352.0578 526.5712,349.7684 C527.9476,348.47 528.964,348.2108 530.7904,349.1022 C532.6672,350.0202 533.4134,349.649 534.5212,347.4668 C535.981,344.5908 539.7086,351.7958 539.8996,352.2668 C540.754,354.372 546.4404,354.6494 544.702,357.9342 C545.8072,357.675 547.144,357.6066 547.42,359.0142 C547.5592,359.3898 547.75,359.738 547.9948,360.0548 C548.1496,360.7772 547.164,362.128 547.2716,362.8808 C547.6172,365.2958 547.2072,367.699 546.8638,370.001 C546.6828,371.2138 547.583,371.0546 548.9436,370.8142 C549.5686,370.7038 551.9534,372.3688 551.5182,373.6902 C550.4796,376.8444 546.5644,379.9734 544.3132,382.311 C543.5686,383.0838 542.0696,385.1404 541.168,385.8994 C540.2666,386.6584 540.179,386.0116 539.6612,387.0016 C539.0132,388.2424 539.806,389.7572 539.02,391.0266 C538.1488,392.4354 537.2824,394.5582 537.0964,396.2168 C536.9296,397.7022 536.95,399.2034 536.8468,400.694 C536.7256,402.4376 536.4912,403.9604 536.3124,405.6164 C536.1828,406.8272 536.4928,408.5262 535.936,409.6352 C535.3036,410.8962 534.2804,411.3698 533.3576,412.391 C531.9296,413.9714 532.049,414.4806 531.9974,416.3348 C531.9638,417.5564 530.6546,418.9312 529.9934,419.8036 C528.5342,421.7272 530.5662,423.7366 531.6932,425.5696 C532.5418,426.95 533.1614,427.9204 532.5304,429.8222 C530.2366,431.8312 533.0178,438.1404 530.848,440.213 C532.4286,441.1208 532.1398,437.048 532.688,437.7376 C533.2312,440.9444 531.2242,443.2702 531.2086,446.4132 C531.1882,450.4962 534.6278,452.3764 533.1806,455.199 C532.345,456.829 531.4658,457.1876 532.1722,458.2382 C533.2528,459.8456 533.7116,462.4962 535.8462,466.6768 C537.2726,469.4706 541.3488,468.9466 541.5972,475.676 C541.6948,478.3176 543.756,476.8684 544.5484,480.9204 C538.9,482.208 534.7348,482.355 529.0708,483.567 C531.412,487.436 525.3364,489.044 524.2348,491.9418 C527.494,492.9474 526.4116,497.9838 526.192,500.4452 C526.0312,502.2366 526.7104,503.9288 526.606,505.7022 C526.5508,506.6322 526.3484,507.5162 525.9776,508.319 C525.4412,509.4804 525.0652,510.356 524.7676,511.5822 C524.1808,513.9896 523.3636,515.3668 524.8924,517.6948 C525.9556,519.3148 527.9142,521.3524 529.3194,522.6808 C529.9494,523.2772 533.2838,525.3212 533.5444,524.0804 C534.0074,521.8766 534.586,522.2886 536.752,521.6658 C536.752,525.1424 536.6356,528.632 536.542,532.1072 C536.5264,532.6436 536.9272,534.9342 536.0272,535.0244 C534.9736,535.13 534.7384,533.9108 535.4668,533.3288 C533.9092,531.417 530.416,537.3802 528.7708,533.7994 C528.2224,532.6066 527.7084,531.0942 526.9044,530.013 C526.4472,529.3988 525.2226,528.6078 525.081,527.882 C524.8038,526.4624 524.5228,524.8158 522.7348,524.7654 C521.2372,524.7234 520.5976,523.1576 519.1588,522.9848 C517.9564,522.8396 517.2196,523.747 516.388,522.4258 C515.7448,521.401 515.7254,519.9078 514.7858,519.0668 C513.4478,517.8668 512.4964,513.6956 511.33,517.4372 C510.1264,521.2964 508.02,519.2672 505.0092,519.374 C502.98,519.446 502.5002,518.8016 500.7878,518.0252 C500.6726,517.9736 498.8726,517.544 498.8222,517.5524 C496.091,518.0324 495.2752,513.8778 496.2388,511.9832 C494.5612,512.0778 492.8746,512.4334 491.308,513.0272 C489.3828,513.7566 488.9756,514.7076 486.82,513.8072 C487.6504,512.3216 487.6992,510.3614 486.9808,510.3956 C486.0454,510.4396 485.654,509.6436 485.005,509.0282 C483.4978,507.599 483.7054,509.2858 483.3484,509.4094 C482.0132,509.8714 481.4272,509.8028 480.2224,509.4918 C478.7752,509.1164 477.876,510.1288 476.5936,510.5818 C474.9462,511.1636 473.8982,510.0574 472.8312,510.2418 C472.448,510.308 470.9248,510.1412 470.8768,510.1664 C469.846,510.7218 469.318,512.2794 467.8984,512.2446 C468.2188,511.1778 467.5792,510.3402 467.3932,509.3382 C467.1364,507.962 468.0864,507.7156 468.3888,506.6572 C469.0884,504.2032 468.1288,499.9436 466.6384,497.9696 C464.8228,495.561 464.0452,494.0538 464.2732,490.9364 C464.5084,487.7142 465.6326,484.3338 464.795,481.1276 C464.4734,479.9022 463.6022,478.8392 463.6202,477.5396 C463.6418,476.0706 464.4508,474.6956 464.5624,473.2376 C464.7472,470.8352 463.192,471.1018 461.2456,471.0838 C459.3928,471.0682 457.5508,471.0352 455.7028,471.1136 C451.9072,471.2744 452.4862,470.4452 453.5572,467.2326 C452.7064,467.2326 451.8714,467.0168 451.0434,467.3408 C450.483,467.5592 450.8956,467.8028 450.5812,468.0714 C449.5768,468.932 444.9628,468.1806 443.6212,468.1806 C444.0688,469.3158 443.2376,470.6442 443.4308,471.8576 C443.588,472.838 443.6248,474.3942 442.0612,474.0608 C442.57,475.556 441.6652,477.0392 441.9772,478.5488 C441.3424,478.543 437.2126,478.6864 436.5424,478.2978 C434.5666,477.1526 431.0854,479.2914 430.4116,479.3516 C428.8402,479.0964 427.3628,479.1706 425.6452,479.1794 C423.4612,478.7234 422.5164,474.1832 421.4208,472.5822 C421.0344,472.0184 420.7348,471.614 420.3376,471.0534 C419.6032,470.0168 419.9388,469.2728 419.7852,468.1674 C419.5128,466.2006 417.4574,464.9092 417.7524,462.8204 C418.0174,460.9432 417.7464,459.3758 416.8654,458.2784 C415.6364,456.7468 415.6586,456.1826 413.7472,456.2744 C408.484,456.5268 403.2664,456.733 398.0116,456.4336 C393.7672,456.1916 388.798,456.8936 384.6304,456.0908 C381.2968,455.4474 378.5344,460.412 376.5676,455.3984&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Djibouti&quot; id=&quot;Djibouti&quot; class=&quot;land dj&quot; d=&quot;M646.3888,280.9506 C646.3888,278.1654 645.3088,275.3972 646.9972,272.8794 C648.268,270.986 649.432,269.2674 650.5336,267.279 C651.82,264.9572 652.468,266.2002 654.3088,266.6946 C655.2424,266.9442 655.192,265.4816 655.558,264.9978 C656.1256,264.249 657.106,263.9528 657.8848,263.499 C658.6876,265.2608 662.0548,268.544 660.4324,270.6018 C659.6008,271.6578 657.0028,272.8626 655.7608,273.3522 C654.4864,273.855 654.322,275.3624 652.8676,275.5962 C653.8216,276.825 656.6692,274.8006 658.0516,275.336 C660.5512,276.3044 658.06,278.75 657.3928,280.124 C656.3872,282.1974 654.7888,280.0352 653.2276,280.4456 C651.6316,280.8642 647.4532,282.9512 646.3888,280.9506&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Egypt&quot; id=&quot;Egypt&quot; class=&quot;land eg&quot; d=&quot;M486.4636,83.9588 C484.7536,81.2216 488.2756,78.3538 487.8424,75.5468 C487.3772,72.5332 484.6316,70.429 488.9704,66.8514 C489.0616,69.0476 491.6212,68.2614 492.9484,67.8666 C495.3736,67.1454 497.3608,67.9494 499.7704,68.1918 C502.4068,68.456 504.9364,69.0428 507.4888,69.7232 C508.5676,70.0112 508.7392,71.1848 509.8348,71.5232 C510.808,71.8232 511.5484,71.702 512.5132,71.5998 C513.1612,71.5302 513.4612,72.543 514.192,72.6944 C514.9924,72.8598 515.8096,72.8636 516.6172,72.9438 C519.2128,73.2006 520.9456,74.8292 523.3804,75.236 C525.7348,75.6294 527.986,74.0444 529.6744,72.6044 C530.5504,71.858 531.3664,71.0468 532.1692,70.2224 C532.8568,70.7588 533.3752,71.3106 534.2452,71.1726 C533.7484,70.9232 533.8564,70.7802 533.2012,70.8272 C534.052,70.3758 534.9016,69.5562 535.1092,68.5808 C536.5792,69.459 537.9616,67.881 539.4292,67.8918 C538.4428,68.3454 537.496,68.9096 536.7424,69.7052 C537.0028,69.5514 542.9572,67.7514 540.1144,67.5452 C542.218,66.8492 543.5836,69.2574 545.6044,68.9706 C546.5692,68.834 547.4788,67.88 548.5024,68.2376 C549.454,68.5688 549.9028,69.9476 550.7464,70.4826 C549.892,69.885 549.0172,68.5724 547.8904,68.4968 C548.224,69.3918 546.9904,71.085 548.4472,71.4332 C550.0312,71.8112 549.2896,72.2036 550.3144,73.1612 C550.3144,72.8082 553.1404,71.6156 551.0944,70.6554 C553.2712,71.162 553.9948,73.1706 556.5484,72.9476 C557.3764,72.8756 559.8208,71.3468 559.3864,73.1612 C560.9692,72.1554 562.7452,72.7424 564.4456,72.23 C565.9432,71.78 567.442,71.1934 568.6432,70.1506 L575.9386,89.4098 C574.0942,91.7558 574.5064,96.0944 573.3328,98.8734 C572.6464,100.4984 572.6752,101.511 572.6932,103.2284 C572.7088,104.6972 570.8416,106.118 571.3012,107.5494 C570.4096,106.725 569.2168,106.3532 568.2328,105.6642 C566.9836,104.7896 566.11,103.5152 565.2544,102.2826 C564.1708,100.7202 561.0016,99.7002 561.4612,97.3544 C561.9244,94.9902 559.6444,93.3512 558.4792,91.6854 C556.8676,89.385 555.718,86.7054 555.0652,83.9622 C553.9828,85.125 552.8308,87.662 553.96,88.9892 C555.8908,91.263 555.6904,94.0544 557.3092,96.4038 C558.7108,98.4392 560.1316,100.9304 561.8836,102.6668 C562.6588,103.4348 563.5432,104.0958 564.25,104.9322 C564.6196,105.3702 566.1424,107.8806 564.3064,106.5114 C565.792,107.6706 564.5632,109.1468 565.5052,110.1018 C566.77,111.3836 567.442,112.7418 568.1044,114.3572 C568.4296,115.1516 568.966,115.832 569.428,116.5458 C569.7808,117.0918 569.08,117.788 569.0488,118.3218 C569.0056,119.036 570.172,120.0956 570.49,120.711 C571.2208,122.12 572.0176,123.4952 572.7556,124.9016 C575.1784,129.5214 577.624,134.0598 579.9172,138.7506 C580.8148,140.5854 582.1336,141.8994 583.2604,143.5484 C584.3092,145.0832 586.1476,145.5582 587.1196,147.1196 C586.2004,147.1686 585.2728,147.0092 584.4448,146.6012 C583.8388,149.1078 584.1314,152.9354 585.4108,154.413 C586.6288,155.8198 583.8172,158.645 582.1024,158.7284 C581.2528,158.7694 580.93,158.151 580.0738,159.1062 C579.3992,159.8586 579.0436,161.1488 578.7364,162.1136 C578.3836,163.2284 577.8592,164.2136 576.628,164.5002 C575.632,164.732 573.8396,164.528 573.3104,165.6704 C572.3432,167.762 572.9334,170.203 569.985,169.9688 C566.55,169.6962 564.8036,166.911 562.9938,166.9868 C557.0316,167.2366 553.6094,167.7802 548.9356,166.9914 C549.07,166.5224 549.6124,165.53 549.2776,165.0474 C548.434,163.8272 547.7872,166.0398 547.5076,166.4396 C546.388,168.0402 540.7936,167.0778 539.0008,167.0778 L490.894,166.9738 L489.1792,101.9516 C488.9992,98.912 489.0736,95.7234 488.6536,92.7128 C488.2936,90.1232 487.6288,86.2928 486.4636,83.9588&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_EquatorialGuinea&quot; id=&quot;Equatorial_Guinea&quot; class=&quot;land coast gq&quot;&gt;
+   &lt;path d=&quot;M344.3356,362.253 C344.9704,361.503 347.926,355.9134 345.3112,356.4522 C344.3056,356.6586 343.8508,357.2742 343.5196,358.191 C343.126,359.2818 342.43,359.4222 341.77,360.2286 C341.0092,361.161 343.8556,361.9974 344.3356,362.253&quot; id=&quot;Equatorial_Guinea&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land gq&quot; d=&quot;M352.8916,379.0146 C353.2276,379.0926 353.5444,379.0362 353.8396,378.8418 C351.9472,379.7598 353.668,376.977 354.0016,376.443 C354.9652,374.9058 354.1904,372.6734 354.89,370.8266 C356.153,373.3142 356.9876,372.7016 358.6366,373.0504 L368.4848,372.9414 L368.5454,384.9558 L357.667,384.7166 C356.9674,384.815 353.6236,385.827 354.8836,384.2826 C353.7676,383.709 351.1492,384.9246 350.4676,383.5062 C349.8412,382.2042 352.3336,380.0406 352.8916,379.0146&quot; id=&quot;Equatorial_Guinea&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Eritrea&quot; id=&quot;Eritrea&quot; class=&quot;land coast er&quot;&gt;
+   &lt;path d=&quot;M628.3396,230.7522 C628.4056,231.4302 629.104,233.469 627.8968,232.479 C628.4188,234.0078 631.0672,233.8674 632.3128,233.775 C631.6972,232.4538 629.968,233.733 629.5192,232.3722 C629.3428,231.8442 629.326,230.1534 628.3396,230.7522&quot; id=&quot;Eritrea&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land er&quot; d=&quot;M596.3716,238.1826 C597.8188,236.8854 597.736,234.8502 598.2568,233.1294 C598.822,231.2622 599.6056,229.4466 600.2752,227.613 C600.8896,225.927 599.1496,218.9298 601.8448,218.5542 C602.3824,218.4786 604.3912,218.8854 604.714,218.3466 C605.5876,216.8886 604.9192,215.769 606.646,215.2218 C608.038,214.7814 609.6448,213.6882 611.098,213.1146 C613.2412,212.2674 613.3156,210.0642 614.8528,208.6362 C617.5396,213.9966 619.5124,219.1542 620.8252,225.0066 C621.1384,226.4022 621.118,227.7822 621.754,229.0986 C622.4428,230.5218 623.0968,231.651 623.3788,233.2146 C623.5708,234.2802 624.9124,234.3702 625.204,235.5018 C625.474,236.5458 625.6912,238.335 626.6128,239.049 C627.7636,238.2318 625.8784,235.1298 627.0808,234.9318 C628.258,234.7374 628.9576,236.2158 629.0368,237.0918 C629.128,238.1178 629.8612,239.8674 630.8452,240.3222 C632.236,240.9654 633.1132,239.0778 634.534,240.6618 C635.7112,241.971 635.848,242.9406 637.7452,243.201 C639.934,243.5022 640.7656,245.181 641.9308,246.9186 C643.0564,248.5938 644.0356,250.2978 645.79,251.403 C646.618,251.925 647.35,252.5658 648.046,253.2498 C648.3952,253.593 650.0896,255.9174 649.246,253.8222 C650.404,254.5626 650.3992,256.2006 650.764,257.3598 C651.0832,258.3702 652.2052,258.0942 652.858,258.7782 C653.4892,259.4394 655.9936,264.1134 656.9368,261.771 C657.8806,262.6566 658.3412,263.065 657.8058,263.7154 C656.4254,264.3656 655.3174,265.2578 655.294,266.0288 C655.213,268.697 653.1124,264.878 650.7394,266.7562 C651.029,266.0722 650.338,263.9512 647.752,262.1806 C645.4778,258.7522 644.0106,256.374 642.6212,256.0022 C640.1464,255.34 639.3532,252.2914 637.8716,250.2488 C636.2668,248.0366 633.87,247.9292 631.831,246.3578 C629.9222,244.8872 628.7882,246.1094 627.0204,245.5812 C625.6356,245.1674 623.233,243.869 621.8608,245.6142 C621.83,244.5394 619.6708,242.4016 620.1408,243.1468 C620.364,243.5006 618.6,245.4322 617.3068,245.5076 C616.4626,245.5568 614.6554,245.8082 613.774,244.4826 C612.162,242.0584 611.6358,244.0414 609.7516,240.9486 C609.0352,243.729 607.9768,246.411 606.9076,249.0702 C606.3304,248.247 604.8232,245.1732 603.412,245.9328 C602.5288,246.4092 602.636,247.2946 601.3924,247.1998 C597.967,246.938 598.0342,246.7938 597.1376,248.9426 C596.4988,245.886 596.3212,241.2304 596.3174,238.3988&quot; id=&quot;Eritrea&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Ethiopia&quot; id=&quot;Ethiopia&quot; class=&quot;land et&quot; d=&quot;M566.5516,313.6098 C566.7232,312.2108 568.0564,311.4702 568.0612,310.0484 C568.0708,307.6148 569.7832,307.3854 571.8316,307.7336 C573.6508,308.043 575.2276,308.6214 576.5776,306.6104 C577.5112,305.2218 576.898,302.8088 576.7132,301.2836 C576.4084,298.7382 576.0328,295.994 576.9868,293.5412 C577.3612,292.581 577.858,291.674 578.2084,290.7032 C578.7244,289.2776 578.1568,288.3224 578.1328,286.911 C578.1088,285.5 578.8708,284.0804 579.784,283.0206 C580.8352,281.8016 582.4024,283.2572 582.3688,284.5772 C582.976,283.9098 585.3916,280.2114 584.1868,279.0488 C583.5052,278.3886 584.6056,276.8276 584.8096,276.1626 C585.2092,274.8534 584.3284,273.1988 585.4924,272.132 C587.3584,270.4218 588.1036,268.1706 589.2592,265.8668 C589.7464,264.8924 590.0464,263.876 591.2368,263.8196 C591.7312,263.7956 594.0676,264.05 594.2812,263.4608 C594.9316,261.6668 594.7804,259.4348 595.06,257.5554 C595.2208,256.4864 595.6564,255.6534 596.1016,254.6684 C596.8972,252.9032 596.7004,251.2532 597.0556,249.4148 C597.7312,245.943 599.1904,247.2152 601.8196,247.1876 C602.8348,247.1766 603.0448,245.1092 604.4716,245.9348 C605.584,246.5778 606.1996,248.061 606.9088,249.069 C607.9792,246.4098 609.0364,243.729 609.7528,240.9474 C610.1632,241.581 610.6264,242.3838 611.3128,242.762 C612.0616,243.1734 612.9076,242.8424 613.36,243.7472 C614.2504,245.5256 615.34,245.7354 617.1988,245.3984 C617.8852,245.2734 618.6076,245.0876 619.15,244.6184 C619.474,244.3376 619.7548,243.2744 620.0944,243.1784 C620.7208,243.0006 621.7384,245.1462 621.8608,245.613 C623.632,243.3908 626.6188,245.9718 628.4356,245.4882 C630.9292,244.8246 633.49,247.4838 635.6164,248.3838 C638.4628,249.5886 639.2896,253.2714 641.608,255.1244 C643.0012,256.238 644.8336,257.1294 645.6976,258.77 C646.486,260.27 646.858,261.5276 648.2608,262.6016 C650.6176,264.4076 651.6364,265.7946 650.0776,268.5332 C648.2356,271.7696 645.7156,273.6114 646.3012,277.5642 C646.5916,279.5276 645.8212,281.919 648.6316,281.7272 C650.2756,281.6142 651.9064,280.8272 653.4976,280.4228 C654.7876,280.0952 655.2816,281.2298 656.4864,280.8302 C656.3568,282.8834 653.9896,284.6116 655.1282,286.9982 C656.4964,289.865 657.747,290.5966 659.5268,293.1506 C660.1188,293.9998 661.1716,296.829 661.8436,297.6092 C662.5168,298.388 663.0968,298.1448 663.878,298.7808 C665.0792,299.7612 666.9358,301.8476 668.461,302.396 C674.587,304.6028 680.098,306.9032 686.2072,309.1566 C689.1016,310.2246 691.4454,311.495 694.443,312.2018 C697.2222,312.857 700.7848,312.4002 703.5928,312.4002 L677.9332,342.8588 C676.3636,344.6936 675.121,344.8678 672.8958,344.5678 C669.2394,344.0748 664.1218,343.8662 659.3548,348.2494 C658.0936,349.4092 657.6592,350.8494 655.822,351.2142 C654.13,351.5516 652.3412,351.492 650.774,352.35 C649.0808,353.2778 649.1948,354.865 646.97,354.355 C645.1052,353.9266 642.4884,355.4644 640.842,353.6416 C640.1436,352.8664 639.5812,351.665 638.4148,351.5282 C637.2904,351.3962 635.7832,352.2152 634.8088,352.6614 C633.2788,353.3648 630.728,354.7178 629.7516,356.1588 C628.6946,357.7192 627.9398,358.8982 627.2128,360.0918 C626.0548,358.9784 623.4364,358.8078 621.9268,358.9458 C620.764,359.0516 619.944,358.1216 618.9024,357.8996 C617.8188,357.6704 616.608,358.1738 615.5194,358.0724 C611.1032,357.6604 614.8256,357.0928 603.196,350.0952 C601.214,348.9024 598.3296,350.2618 595.8944,349.4012 C594.7662,349.0026 593.0596,346.7876 592.5556,345.7674 C591.8524,344.3456 593.0548,342.464 592.5964,340.9028 C592.1836,339.4962 589.2952,338.643 588.3316,339.8744 C587.7448,339.3054 586.9252,337.6196 586.4416,336.8684 C585.3232,335.1342 584.926,332.805 584.1724,330.8838 C583.606,329.4414 583.324,327.8142 582.5452,326.462 C582.1864,325.838 581.7592,325.6158 581.152,325.311 C580.4788,324.975 580.4592,324.3068 579.9624,323.8628 C579.6528,323.6648 579.532,323.4908 579.1672,323.4462 C578.2156,323.181 578.1208,322.1588 577.6156,321.4712 C576.4864,319.9376 575.722,318.0654 574.216,316.8354 C573.1132,315.9354 571.7956,315.32 570.382,315.1484 C569.068,314.9912 567.2512,314.9804 566.5516,313.6098&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Gabon&quot; id=&quot;Gabon&quot; class=&quot;land coast ga&quot;&gt;
+   &lt;path d=&quot;M346.8436,402.7782 C346.96,403.0062 347.0752,403.2342 347.1916,403.4622 C347.5252,402.879 347.4376,402.363 346.9276,401.9142 C346.8988,402.2022 346.8712,402.4902 346.8436,402.7782&quot; id=&quot;Gabon&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land ga&quot; d=&quot;M345.6316,404.6742 C345.07,403.9134 344.6392,402.9294 345.1156,401.9994 C345.1444,402.7026 345.4048,403.3062 345.8956,403.8114 C346.0876,401.8518 347.2552,403.4706 347.1916,404.5914 C347.3848,402.1974 349.8208,400.8354 350.0872,398.4954 C350.2708,396.8778 349.2352,393.7326 350.6488,392.4954 C350.71,393.2838 351.2944,393.8514 351.6808,394.4874 C351.946,393.189 353.8516,393.9102 354.4408,395.0034 C354.286,393.8982 355.474,393.4914 356.3488,393.5274 C354.1612,393.5274 352.4788,393.0738 351.2296,391.1406 C350.7328,390.3702 349.12,389.391 350.9008,389.0358 C351.658,388.8846 352.6828,389.2686 352.7116,390.1686 C353.3548,388.7346 352.2736,386.8266 352.6852,385.2966 C352.912,384.4578 353.936,384.5416 354.56,384.88 C355.6796,385.4884 356.4672,384.743 357.6972,384.743 L368.4636,384.9168 L368.434,373.0456 C368.9162,370.2818 370.051,371.3486 372.118,371.4406 C373.8758,371.5192 376.027,371.7596 377.8816,371.6576 C379.6472,371.5604 381.443,372.1528 382.6246,372.0922 C385.429,371.9482 387.6548,370.4752 385.7548,374.9298 C384.572,377.703 386.4916,380.3358 385.5424,382.8186 C387.6112,382.4646 389.4764,381.3626 391.5256,380.9178 C395.3596,380.0858 394.8946,382.3586 396.0434,384.283 C397.1258,386.096 398.0566,388.7426 394.4044,389.5902 C392.3966,390.0562 392.2912,393.4782 392.4796,395.067 C392.5696,395.8218 390.9682,397.8962 392.7594,397.9918 C393.6328,398.0384 394.4986,398.7076 394.4006,399.3448 C394.2604,400.2546 396.3312,400.0888 397.0934,400.8498 C398.7706,402.5242 396.7274,404.6506 397.0282,406.4598 C397.2194,407.6112 398.582,411.043 396.5248,412.1046 C397.8292,412.9758 396.9184,415.2414 395.7136,415.7334 C395.3776,415.8702 394.8956,418.747 394.9928,418.8622 C395.7428,419.7442 393.6908,421.8936 392.6996,421.7916 C391.6508,421.6836 391.2952,418.0626 390.8236,417.2034 C390.5032,418.3182 389.1898,420.6158 387.9058,420.7706 C386.6122,420.9266 385.0984,419.3286 383.8276,420.0594 C384.7006,416.6662 378.2066,411.3038 379.125,416.9626 C379.6622,420.2726 378.3674,420.3158 375.2764,420.6084 C374.2856,420.7022 374.566,419.8724 373.5916,419.9436 C372.316,420.0366 372.0448,419.9206 370.7716,419.6262 C371.242,421.3374 371.5636,423.183 370.4356,424.7262 C371.6888,424.2824 372.5378,424.9826 372.478,426.231 C372.4264,427.307 372.2178,428.22 372.3622,428.7746 C372.8884,429.2918 373.5392,429.2938 373.8692,429.797 C374.6126,430.93 373.7542,431.087 373.8502,432.0578 C373.9282,432.8486 374.4292,433.9452 373.018,434.022 C371.5276,434.1024 371.4932,432.8282 370.418,432.1726 C369.3376,431.5138 366.9796,435.543 366.7144,436.2954 C364.7224,434.7342 362.9956,431.4834 361.6192,429.3834 C359.596,426.297 356.5444,423.825 353.9212,421.2702 C355.378,420.3702 355.8604,423.7014 357.2092,422.0382 C356.2384,422.1306 354.8452,420.9258 353.7904,420.6654 C352.096,420.2466 350.8648,416.3406 349.7812,414.9594 C350.8732,415.059 351.268,416.2566 352.2892,416.5194 C351.3628,415.0194 351.1888,415.3746 349.8616,414.5982 C349.2592,414.2466 349.4416,413.1786 349.2952,412.6482 C348.9364,411.3462 348.0028,410.3202 347.3572,409.1634 C348.1936,409.8594 349.8604,411.3822 349.6012,412.6314 C350.464,412.3338 351.37,412.1394 352.2892,412.2006 C351.79,411.8202 351.3868,411.3558 351.0772,410.8086 C350.8828,411.495 350.3716,411.849 349.6852,411.5046 C349.7992,410.5998 350.518,409.779 350.1292,408.8286 C348.772,412.7778 346.2808,405.1566 345.6316,404.6742&quot; id=&quot;Gabon&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Gambia&quot; id=&quot;Gambia&quot; class=&quot;land gm&quot; d=&quot;M112.3516,256.6724 C114.0508,255.3414 113.812,255.4158 114.6628,257.2902 C115.3072,258.7098 117.3124,256.8018 118.3144,257.5376 C116.164,256.4276 122.7532,255.7746 123.1504,255.5502 C121.45,255.4446 119.4076,255.512 117.826,256.2066 C116.4652,256.8044 115.6804,257.2002 114.8236,255.6234 C114.0604,254.2184 115.5928,254.1978 116.5672,254.2724 C119.1316,254.4654 121.7344,254.3418 124.3048,254.3418 C124.9684,254.3418 124.6888,252.2648 126.2116,252.6968 C127.4368,253.0446 128.632,251.5436 129.892,252.2048 C130.5292,252.5396 130.6756,253.364 131.3056,253.7382 C131.914,254.0994 132.4828,253.4442 133.1164,253.7456 C133.7872,254.0648 133.5784,255.0788 134.3236,255.3942 C135.1144,255.729 136.1176,255.099 136.8508,254.8784 C137.722,254.6168 139.8244,254.7942 139.6876,256.1382 C139.5628,257.373 137.5814,257.8124 136.6084,257.9528 C132.5144,258.5434 128.1764,253.8212 127.5782,254.948 C126.8842,256.2554 126.7194,256.6942 124.1798,256.6566 C123.2808,256.6432 120.802,257.1836 121.348,258.549 C121.4548,258.8154 113.3318,257.9014 112.9958,259.8274 C112.505,258.8722 112.162,257.7332 112.3516,256.6724&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Ghana&quot; id=&quot;Ghana&quot; class=&quot;land gh&quot; d=&quot;M235.8184,330.5442 C235.2664,327.6006 235.0696,325.2426 236.3596,322.4658 C237.4684,320.0778 236.7906,319.2428 237.6798,316.8488 C238.3386,315.0764 240.7204,312.6158 241.4284,311.0762 C242.3908,308.9834 241.6296,305.8774 240.9948,303.727 C240.7416,302.8702 240.376,302.3228 240.0268,301.5224 C239.6524,300.6642 240.2074,299.7608 240.2722,298.8812 C240.421,296.8616 239.4412,295.4396 239.8564,293.4942 C240.3004,291.4148 239.4412,289.1826 239.0572,287.1594 C238.876,286.1984 237.8632,285.1184 238.4536,284.1054 C238.918,283.3088 239.5696,282.1772 239.2756,281.211 C244.3092,281.6612 248.9426,280.888 254.2984,281.242 C255.379,281.3134 258.576,281.0358 258.8308,281.6598 C259.3034,282.8174 261.1892,280.974 262.1716,280.2608 C263.1708,279.535 266.0396,280.1398 265.41,281.4252 C264.4502,283.385 264.2294,285.3298 267.0442,287.4458 C269.3736,289.197 268.0604,288.481 268.4566,290.293 C268.6484,291.1702 268.7584,291.1012 268.675,292.1082 C268.5908,293.1286 268.5706,294.78 268.3036,296.0718 C267.0268,295.875 267.5668,296.7848 267.0076,297.5418 C267.7828,297.674 268.336,296.7942 269.0596,296.9958 C270.1108,297.2898 270.0974,298.8076 269.8504,299.5806 C269.3752,301.068 270.3964,304.903 268.3876,304.5402 C268.8916,305.8206 270.2464,306.6092 271.0252,307.7034 C271.9576,309.014 271.151,309.411 270.611,310.6278 C269.9546,312.1062 271.2118,314.0506 270.3792,315.444 C269.384,317.1096 269.2852,317.9342 270.6544,319.3538 C271.302,320.025 270.5816,321.706 270.2768,322.4764 C269.54,324.3388 269.3548,325.1714 270.4168,327.0266 C271.0864,328.199 272.5128,329.2316 273.5808,330.0608 C273.8724,330.2876 275.6992,331.364 275.7328,331.4958 C275.9896,332.4836 274.3708,332.961 274.1164,333.7926 C273.7696,334.9244 272.9884,335.8854 271.6324,335.732 C270.8752,335.6456 270.634,333.9512 270.2224,333.4458 C269.3344,332.3576 267.8344,332.774 266.6608,332.2724 C267.604,333.0354 269.1532,332.5652 270.1624,333.3066 C272.158,334.7718 269.104,335.7006 268.114,335.8746 C264.3472,336.536 261.964,338.6744 258.838,340.5392 C257.044,341.6082 255.0532,341.5832 253.1416,342.3642 C251.9848,342.8382 250.6696,343.0952 249.6784,343.8918 C248.8552,344.5544 248.1748,345.4352 247.2244,345.932 C246.244,346.4456 245.464,346.2728 244.7344,345.5094 C243.742,344.474 242.6596,344.3382 241.348,343.9458 C239.9752,343.5342 238.8688,343.858 238.018,342.4576 C239.1424,342.4252 238.5832,342.2636 239.7076,342.2958 C239.2072,340.8402 240.896,336.2116 237.8228,337.0624 C238.861,335.2228 236.9192,332.0648 235.8184,330.5442&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Guinea&quot; id=&quot;Guinea&quot; class=&quot;land coast gn&quot;&gt;
+   &lt;path d=&quot;M128.0836,281.7282 C127.5652,282.3858 127.6144,283.4682 128.5996,283.629 C128.3356,282.9294 128.4796,282.3246 129.0316,281.8146 C128.716,281.7858 128.3992,281.757 128.0836,281.7282&quot; id=&quot;Guinea&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land gn&quot; d=&quot;M128.2516,281.5554 C129.448,280.065 129.3292,277.623 130.8448,276.3522 C131.872,275.4918 133.8628,275.3166 135.0904,274.6758 C136.3144,274.0362 137.5816,274.8114 138.8368,274.1442 C139.6624,273.705 140.3606,272.915 140.242,271.935 C140.0652,270.4742 137.48,269.8948 137.9018,268.7632 C138.28,267.748 140.3376,268.0488 140.6146,267.0234 C140.9254,265.8734 140.0594,264.2218 140.3728,263.8652 L144.7116,263.8534 C145.3372,264.0154 146.0398,264.493 146.4938,264.5274 C146.8322,264.63 146.0682,266.5894 147.3938,265.7846 C148.3034,265.2322 150.188,266.501 150.6886,266.899 C150.758,266.9542 152.6966,267.5474 152.6474,267.5522 C153.911,267.431 154.8078,266.4676 156.1794,266.6174 C158.1758,266.8352 160.1584,265.9714 161.6008,266.6094 C160.904,268.0048 159.8678,269.036 161.7448,270.6136 C162.8108,271.5094 164.4038,268.0864 165.6462,268.559 C168.6418,269.698 166.7058,273.2906 169.335,270.2986 C172.7038,266.4652 174.7602,270.8564 176.0368,270.5334 C176.7992,270.3406 177.2982,269.6208 177.9916,269.0418 C178.5578,268.5692 179.9416,268.435 180.2102,267.9846 C180.7294,267.1134 178.6118,265.0538 181.546,265.809 C182.174,265.9706 183.6868,266.6876 183.568,267.8706 C183.5286,268.2624 184.066,270.2706 184.3432,270.5322 C185.7392,271.8506 184.0756,275.3138 185.794,274.3854 C186.0154,276.1092 189.2142,276.1896 188.8768,278.2434 C188.1136,278.2796 187.8066,278.2304 187.3168,278.823 C186.64,279.6418 186.2404,280.7214 185.9632,281.7294 C186.8572,281.583 187.3766,280.8452 188.4028,280.7346 C190.0686,280.555 189.5696,282.6886 189.531,283.8742 C189.5026,284.7464 189.1154,286.178 190.7248,287.0726 C191.028,287.2412 192.3726,288.1226 192.5816,288.9118 C192.8626,289.9736 191.845,290.4852 191.026,291.0928 C190.4966,291.4856 190.4912,293.2766 190.4986,294.0908 C190.5126,295.6008 191.0402,298.9682 193.1404,297.627 C192.6652,300.0042 192.9196,299.6586 194.2684,301.2558 C192.646,301.4994 192.64,302.8446 192.1924,304.107 C194.6488,304.5114 194.4172,306.6222 195.0364,308.5134 C193.7696,308.0746 190.0618,306.6248 189.6004,307.8574 C188.9952,309.4742 191.4232,311.0838 192.1924,312.2286 C191.2724,311.7564 190.6242,313.5138 190.6372,313.5764 C190.8368,314.533 191.1664,314.2208 190.9806,314.8106 C190.7918,315.41 189.7426,316.9396 189.7572,317.0666 C189.5034,316.8458 188.19,316.206 187.469,316.8412 C187.0834,317.1808 187.5672,316.165 186.4082,315.5878 C185.282,315.1898 184.9132,317.595 184.6374,318.1454 C183.8374,319.7414 183.2452,320.0742 181.4764,320.7822 C181.378,318.7674 179.7316,318.447 178.1044,319.0554 C178.5544,317.7366 178.8372,316.382 178.8842,314.9814 C178.9022,314.4476 178.7238,311.5282 178.5608,311.8004 C178.451,312.001 178.2344,312.5322 178.211,310.789 C178.2074,310.5216 177.5836,309.5594 178.1614,308.802 C175.386,305.6206 175.1852,307.3326 174.7452,307.1066 C173.8102,307.856 173.515,307.3768 172.2284,307.2452 C171.3418,307.1546 170.3848,307.3782 169.6444,307.8222 C169.1884,308.097 167.2504,309.1158 167.0524,309.5502 C166.864,307.807 169.2478,305.5558 168.8608,305.031 C167.341,302.9708 169.6676,302.3466 167.2982,300.8288 C166.5848,300.3718 167.5472,299.59 167.1958,298.9438 C164.6702,294.3026 163.7108,290.7024 158.0274,291.5584 C156.4968,291.789 156.1234,292.2674 154.7752,292.5748 C152.4044,293.1154 151.6634,291.9018 150.6484,294.2226 C149.8354,296.0812 149.1706,298.2356 147.9988,298.76 C146.9414,299.233 146.868,299.6184 146.3794,300.666 C145.799,301.9108 144.3136,300.9054 143.4604,301.6878 C143.3608,300.8826 143.8792,300.297 144.6724,300.219 C144.4972,299.8854 144.2656,299.5974 143.9764,299.355 C143.7628,299.6334 143.5624,299.9214 143.3764,300.219 C143.302,299.6442 143.2744,299.0694 143.2924,298.491 C142.9768,298.5198 142.66,298.5486 142.3444,298.5774 C142.6156,297.5082 141.0568,297.3054 141.7324,296.2458 C140.146,297.8454 140.9212,293.7054 140.3524,293.3082 C140.4364,294.0018 140.0488,294.255 139.4044,294.0846 C139.6804,293.475 139.8808,292.8414 140.0044,292.1838 C139.6324,293.4558 138.7948,293.0142 138.0124,292.4442 C136.9,291.633 137.4796,291.0582 137.0644,289.9386 C136.4728,290.151 136.0732,290.5542 135.8644,291.1482 C135.7324,288.9714 131.1292,289.1562 132.4084,286.3962 C132.016,286.5378 131.6116,286.6242 131.1964,286.6554 C131.8792,285.387 132.346,283.9734 132.7444,282.5934 C132.2212,283.1178 131.8204,283.7214 131.5444,284.409 C131.4016,283.0038 130.8436,283.725 130.4164,284.409 C130.2136,283.461 130.0792,281.4534 131.2804,281.0394 C130.3156,281.5722 129.3088,281.5458 128.2516,281.5554&quot; id=&quot;Guinea&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_GuineaBissau&quot; id=&quot;Guinea-Bissau&quot; class=&quot;land coast gw&quot;&gt;
+   &lt;path d=&quot;M116.4076,276.285 C116.38,276.0558 116.3512,275.8242 116.3236,275.595 C115.9996,275.7798 115.7116,276.0102 115.4596,276.285 C115.7752,276.285 116.092,276.285 116.4076,276.285&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M116.9356,272.5698 C117.7276,272.1762 117.6112,271.8882 116.5876,271.7058 C116.7028,271.9938 116.8192,272.2818 116.9356,272.5698&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M117.7156,281.037 C118.0324,280.7886 118.3768,280.587 118.7476,280.431 C118.0552,278.973 116.3008,279.9438 117.7156,281.037&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M119.1796,272.0514 C118.744,272.079 118.312,272.1366 117.8836,272.2242 C117.9628,273.489 119.5396,273.2862 119.1796,272.0514&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M119.0944,275.853 C118.978,276.141 118.8628,276.4278 118.7464,276.717 C119.47,277.0818 119.9272,276.6582 120.0424,275.9406 C119.7256,275.9238 119.41,275.8938 119.0944,275.853&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M121.3396,279.5682 C121.8184,279.1842 122.1352,278.6946 122.2876,278.0994 C121.66,278.3406 121.24,278.8698 121.3396,279.5682&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M125.5744,279.741 C125.8324,278.907 125.5444,278.6766 124.7104,279.0498 C124.9984,279.2814 125.2876,279.5106 125.5744,279.741&quot; id=&quot;Guinea-Bissau&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land gw&quot; d=&quot;M112.9636,267.5586 C113.8,266.9778 114.8932,267.4182 115.792,267.0138 C116.7568,266.5806 117.6532,266.0322 118.7476,266.0034 C121.0612,265.941 123.1612,266.553 125.0956,264.8802 C126.7972,263.4066 128.9392,263.8434 130.9936,263.8434 C134.1124,263.8434 137.23,263.8434 140.3488,263.8434 C140.0848,265.0554 141.4312,266.4618 140.3512,267.525 C139.7644,268.1022 138.1564,267.9702 137.9236,268.8534 C137.5936,270.1062 142.0576,271.0794 139.8412,273.5778 C138.6988,274.8642 137.0212,274.1742 135.5836,274.4178 C134.2336,274.6458 132.6232,275.715 131.236,276.1314 C128.8504,276.8466 129.994,281.0226 127.5568,281.901 C126.9724,279.651 126.6556,279.3558 124.6288,278.3586 C124.81,278.0298 125.0092,277.713 125.2288,277.4082 C123.4912,278.7078 125.146,273.387 127.6408,275.3334 C127.0396,273.6402 125.512,274.7694 124.6288,275.5074 C123.7792,273.9918 123.6292,272.9718 125.4928,272.3106 C127.0804,271.7478 127.6432,273.4494 129.1168,273.3474 C128.326,273.0294 127.8604,272.0202 128.6008,271.3602 C128.0236,271.1634 127.4776,271.2378 126.9628,271.581 C126.1156,272.043 125.4088,271.4742 124.5328,271.6194 C123.682,271.761 123.1384,272.4102 122.5048,272.9154 C121.6828,273.5706 120.5728,273.4686 119.6128,273.693 C119.6728,272.1246 120.9868,271.6194 122.0368,270.7554 C120.5452,270.609 119.3632,272.1618 117.8848,271.8402 C115.0036,271.2138 116.8528,268.6602 118.234,267.7302 C117.682,267.789 117.1336,267.8754 116.59,267.9894 C116.3032,268.3362 115.9876,268.653 115.642,268.941 C114.5728,268.9854 113.9776,267.723 112.9636,267.5586&quot; id=&quot;Guinea-Bissau&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Kenya&quot; id=&quot;Kenya&quot; class=&quot;land ke&quot; d=&quot;M576.9092,406.319 C578.7314,404.9912 574.1696,399.4644 580.4902,400.762 C580.5038,400.4176 580.8506,399.7048 580.4662,399.0516 L584.2206,398.5646 C581.728,394.7898 580.6568,397.7518 579.4712,398.7878 C578.4582,399.673 575.9786,395.7548 576.1072,393.367 C577.0682,391.6348 576.4314,390.847 578.2216,389.223 C579.55,388.0178 580.6056,384.0428 582.7624,383.0718 C583.7858,382.6112 583.6348,382.4538 583.5784,381.549 C583.492,380.1522 585.1192,379.4804 585.4756,378.237 C585.8992,376.7598 586.0208,375.3126 586.1672,373.8306 C586.298,372.4974 584.9572,371.554 584.6776,370.0592 C584.0502,366.7052 581.986,365.9766 581.6776,364.4994 C581.4352,363.3272 580.7824,362.3322 580.3888,361.2164 C580.126,360.7256 579.9784,360.2034 579.9448,359.6478 C579.9448,358.9002 580.7824,358.4756 580.5568,357.6728 C580.3564,356.9648 579.5812,356.7788 578.9836,356.5554 C577.6276,356.0502 578.62,355.0206 577.1848,355.167 C577.7714,353.8218 576.0976,352.5284 576.2582,351.5886 C576.4194,350.6464 577.5676,349.9088 578.2084,349.2366 C580.444,346.8908 583.1836,347.564 586.1164,347.564 C587.7988,347.564 589.4848,347.4246 591.1672,347.4066 C591.9916,347.3984 592.8496,347.3576 593.668,347.487 C594.376,347.5988 594.5932,348.8396 595.4428,349.1684 C598.06,350.1848 600.9808,348.944 603.652,350.1836 C606.4444,351.4806 609.4324,353.8686 611.6104,356.0022 C612.7204,357.0896 613.6024,357.8528 615.2032,358.0278 C616.2436,358.1418 618.6136,357.4962 619.4308,358.0184 C621.7156,359.48 625.2208,358.1816 627.2104,360.093 C627.4852,358.7336 629.356,356.7548 630.1984,355.5836 C631.696,353.5002 634.8988,352.6664 637.1116,351.6342 C639.4732,350.5338 639.8872,353.1246 641.6512,354.1554 C642.862,354.8636 644.1736,354.4016 645.4324,354.1734 C646.4524,353.9876 647.6704,354.6608 648.6292,354.1316 C647.1592,356.6528 645.8056,359.4078 644.0152,361.718 C642.124,364.1564 640.4284,365.5136 640.4344,368.7896 C640.4476,376.5284 640.516,384.2658 640.5088,392.006 C640.5016,397.8054 639.3472,403.305 643.2412,408.044 C644.5612,409.6506 646.5496,411.7256 645.1324,413.8316 C644.2984,415.0734 641.8132,417.3414 640.2544,415.9076 C640.1296,416.2196 640.012,416.5352 639.9064,416.8554 C639.6568,416.5554 639.4288,416.2386 639.2224,415.9076 C639.6304,416.8506 640.6744,418.5896 639.7384,419.5424 C639.5764,417.1926 638.6056,419.8842 638.3692,420.4256 C637.8856,421.5366 636.9544,421.7502 635.8936,421.9002 C633.5392,422.2316 632.59,424.311 633.34,426.2946 C633.6832,427.2032 632.0224,429.831 631.3384,430.3866 C630.172,431.3336 629.1928,437.7044 627.8944,437.1594 C628.4608,439.6266 625.9936,441.38 625.5664,443.6382 C624.562,442.9076 624.6772,444.1854 623.8384,443.9876 C622.78,443.738 621.4298,441.8914 620.6128,441.2696 C617.0018,438.521 612.4718,435.5306 610.249,432.5626 C609.6616,431.7784 608.5828,431.6528 609.8128,430.2942 C611.5516,428.3744 608.5088,426.0606 606.943,425.0812 L576.8552,406.2648&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;!-- Unfortunately Lesotho has to remain out of alphabetical order because of SVG with z-index, since it's entirely surrounded by South Africa, it has to be drawn later. --&gt;
+  &lt;!-- this is a placeholder SVG object in DOM order for the accessibility, the visible one is drawn immediately after South Africa. --&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Lesotho&quot; class=&quot;land ls&quot; d=&quot;M506.2516,703.2704 C507.3976,704.402 507.2956,706.0328 508.2232,707.2016 C509.0236,708.212 508.75,709.55 509.5924,710.3828 C510.6484,711.4292 513.4036,714.9548 515.23,713.474 C516.0292,712.8248 516.7048,710.6612 517.2664,709.7228 C518.1532,708.2384 519.6592,708.5372 521.1016,708.134 C522.1516,707.84 524.398,706.9604 524.8456,705.8528 C525.4156,704.4392 525.4792,703.6304 526.4836,702.3824 C526.8628,701.9108 528.0712,700.6328 527.8684,699.9392 C527.2372,697.7564 526.3264,697.6172 524.8792,696.104 C523.7476,694.9196 522.5416,693.8144 521.4232,692.6228 C520.4548,691.5932 518.7976,693.2204 517.9144,693.5996 C516.9388,694.0184 516.472,694.4732 515.5156,695 C514.3948,695.6168 513.2296,695.3948 512.3368,696.5432 C511.3744,697.7804 510.8956,699.3116 510.0364,700.6148 C509.05,702.1076 507.6124,702.2816 506.2516,703.2704&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Liberia&quot; id=&quot;Liberia&quot; class=&quot;land lr&quot; d=&quot;M159.7036,323.5458 C160.9504,323.0864 160.9934,321.1118 161.8814,320.2094 C163.5086,318.5558 165.4768,317.1392 167.0236,315.4016 C168.0376,314.2626 167.326,312.7424 168.1192,311.7332 C169.294,310.2402 170.036,311.0888 170.8204,308.8806 C171.1364,307.9908 170.821,307.8584 171.0328,307.6684 C169.3946,307.1226 172.6806,307.153 173.5084,307.4408 C174.3158,307.7212 174.784,306.7854 175.5604,306.831 C176.6296,306.8946 177.4324,308.162 178.1836,308.7714 C177.6784,309.417 177.9424,310.0472 178.2064,310.7082 C178.4008,311.1956 178.084,312.3332 178.6276,311.7968 C179.2072,314.3336 178.9324,316.611 178.0996,319.0544 C179.7268,318.4458 181.3732,318.7674 181.4716,320.781 C183.4288,319.9974 184.2436,319.4154 184.8748,317.3886 C185.0608,316.7912 185.23,315.6246 186.0268,315.5072 C186.9064,315.3762 187.6964,317.2642 188.0072,317.9446 C189.1292,320.4 189.13,321.7208 188.7256,324.355 C188.5462,325.5224 187.808,326.5288 187.2848,326.6764 C186.587,326.9226 186.1826,327.6568 186.0714,327.7544 C186.1524,328.0396 186.6394,328.526 188.0356,328.5582 C187.343,331.0884 192.4246,329.0276 192.9434,330.9104 C193.1282,331.5814 192.7784,332.5088 194.1736,333.427 C195.2746,334.1514 196.3626,335.0772 196.7692,336.225 C197.7134,338.891 196.7846,340.4066 196.4038,341.7916 C195.5546,344.8814 194.4144,347.0282 195.8194,349.9424 C194.3914,350.2112 193.2664,349.6278 192.1132,348.9702 C190.5928,348.1038 188.7436,347.9826 187.36,346.8452 C184.8412,344.7776 181.5652,343.8354 179.23,341.517 C176.6236,338.9276 174.5488,335.8398 171.8944,333.3018 C171.0604,332.5038 164.9056,330.3728 166.354,328.9892 C165.2344,329.1018 163.8544,327.375 162.898,326.9154 C160.9816,325.994 161.1484,324.9246 159.7036,323.5458&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Libya&quot; id=&quot;Libya&quot; class=&quot;land ly&quot; d=&quot;M350.8996,83.613 C349.744,82.6182 352.2184,81.447 352.858,81.1506 C354.7828,80.2568 355.8208,79.7444 356.9872,77.853 C357.9244,76.3326 358.8648,75.5912 358.4988,73.6328 C358.1832,71.9444 357.3832,70.2428 357.556,68.481 C357.7936,66.0656 360.7252,66.6844 361.1932,64.9526 C361.6976,63.086 363.2194,62.1242 364.78,61.3818 C365.976,60.8128 369.8608,59.7522 369.892,58.0986 C369.9076,57.2706 369.0964,56.7582 369.1828,55.8786 C369.3388,54.2682 369.4012,52.6506 369.5608,51.0402 C371.1124,52.1204 373.1944,52.6664 374.8612,53.691 C376.6108,54.7664 378.5968,55.1324 380.632,54.909 C382.6912,54.6834 384.2068,53.3792 386.3248,54.1446 C388.2112,54.8274 390.2092,54.8984 392.0452,55.6808 C393.6796,56.378 394.9984,57.6368 396.6472,58.2824 C398.0896,58.8476 400.0372,58.256 401.3236,59.1452 C402.8392,60.1928 403.1224,61.9902 403.414,63.6726 C403.7872,65.8256 404.632,67.5416 406.3096,68.9876 C409.3396,71.5986 413.0824,70.9868 416.7268,71.6478 C420.3856,72.3128 425.5936,73.9748 428.524,76.3484 C430.8664,78.2468 433.0336,81.452 436.3828,81.1506 C440.2528,80.8014 444.3904,77.39 445.2568,73.5044 C445.6564,71.7104 444.4432,70.3148 443.8936,68.6984 C443.2864,66.9164 442.8424,64.868 443.4532,63.0234 C444.574,59.6394 450.1456,55.4418 453.6784,55.3232 C455.5072,55.262 456.5752,53.9384 458.2672,53.8088 C459.9928,53.6766 461.8336,53.6454 463.5184,54.0582 C465.4888,54.5394 467.2072,55.4924 469.0756,56.2242 C471.2908,57.0918 470.704,57.393 470.8132,59.3324 C470.8996,60.903 473.4364,61.2354 474.568,61.3196 C476.764,61.485 478.1848,62.48 480.214,63.068 C482.2288,63.6522 484.3432,62.9766 486.388,63.3512 C487.5472,63.5622 489.2944,65.8734 488.8816,67.0878 C488.4472,68.3696 486.8836,68.696 486.6664,70.1384 C486.3652,72.1302 487.6372,73.6074 487.9876,75.4604 C488.3812,77.5446 487.0374,79.3914 486.3294,81.2034 C485.577,83.1258 487.547,85.4092 487.8746,87.3988 C488.4302,90.79 489.0346,93.9958 489.247,97.4734 L491.3872,187.8104 C488.3956,187.8104 485.4028,187.8104 482.4112,187.8104 C482.494,189.537 482.4292,191.27 482.5792,192.9942 L410.9976,152.4814 L394.7644,160.2594 C393.3892,160.6352 391.704,158.3912 390.9024,157.593 C387.552,154.2534 383.9152,153.5706 379.4536,152.5566 C377.86,152.1942 375.7756,152.0094 374.356,151.1288 C373.2316,150.4304 372.6996,148.4608 372.234,147.3208 C370.8672,143.9716 369.2028,143.0602 365.9244,141.8266 C364.836,141.4174 363.7948,140.493 362.6032,140.5244 C361.4368,140.5544 360.178,141.849 359.0836,140.6658 C358.1944,139.706 356.6584,137.2386 356.6356,135.9104 C356.5876,133.131 356.3188,132.1158 354.79,129.7494 C353.6128,127.9256 349.6984,124.6854 351.3832,122.2578 C353.3272,119.4572 356.3008,120.5288 355.0264,115.9352 C354.3892,113.637 353.9308,111.8718 354.718,109.5402 C355.3924,107.5424 355.792,105.8936 355.054,103.8284 C354.2788,101.6564 354.8812,99.482 355.0756,97.275 C355.306,94.659 354.9148,92.0204 354.046,89.5494 C353.2972,87.4302 352.2136,85.4348 350.8996,83.613&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Madagascar&quot; id=&quot;Madagascar&quot; class=&quot;land coast mg&quot;&gt;
+   &lt;path d=&quot;M654.5956,624.6462 C655.2796,627.5298 653.8228,631.0458 655.87,633.5646 C656.8696,634.797 656.8528,636.1806 657.3676,637.6062 C657.8404,638.919 659.1544,639.1254 657.8548,640.6158 C656.5804,642.0774 656.7796,646.8234 657.6124,648.5538 C658.3696,650.127 659.1316,651.2946 659.5516,653.0382 C660.0964,655.3038 661.5676,655.9386 663.2344,657.3102 C661.1332,656.091 662.9512,657.7218 663.4756,657.885 C664.2448,658.125 665.0644,658.0434 665.842,658.2414 C667.7284,658.7226 668.7532,660.8058 670.6312,661.221 C673.8844,661.9398 677.272,657.7878 680.266,656.9094 C681.3664,656.5866 682.5232,657.2418 683.5336,656.871 C684.3352,656.5758 685.0312,656.043 685.8844,655.8798 C687.082,655.6518 687.7996,654.2298 688.258,653.2422 C688.876,651.9126 689.2996,650.4978 689.6812,649.0854 C690.208,647.1294 691.414,645.5418 692.0188,643.6638 C693.1336,640.1958 694.3348,636.8442 695.2888,633.2862 C696.646,628.221 698.6872,623.697 700.4392,618.789 C701.86,614.811 702.6688,610.743 704.428,606.8922 C704.9416,605.7678 705.916,603.9882 705.4036,602.709 C706.0084,602.7078 706.6936,600.2742 706.8448,599.871 C707.8576,597.1782 708.4048,594.3318 709.5052,591.6774 C711.1132,587.799 712.5688,584.4978 713.4064,580.3398 C714.0316,577.2378 711.9112,572.7102 715.6828,570.6738 C716.422,570.2742 717.2368,567.9318 717.3268,567.0078 C717.4108,566.145 717.22,565.2954 717.3736,564.4326 C717.5812,563.2674 716.1472,563.4018 716.1652,562.2858 C716.1808,561.4386 715.3072,554.8686 717.412,555.7638 C719.218,556.5318 718.5976,560.2746 720.3424,560.8878 C722.2948,561.573 723.5716,556.3002 723.7888,555.1434 C724.1008,553.4742 722.9848,552.6414 722.5288,551.1594 C721.696,548.439 721.774,545.7954 721.6732,542.9934 C721.4872,537.8478 720.2572,532.3938 718.1824,527.7918 C717.8884,527.9826 717.6052,528.1866 717.3292,528.4038 C717.5584,527.7042 717.262,527.565 716.8348,527.1366 C716.1388,526.4394 717.2236,526.0002 716.6008,525.2382 C716.0056,524.5122 715.6252,521.7786 714.1252,522.6918 C714.0352,522.381 714.0064,522.0654 714.0424,521.7438 C716.6476,521.9934 712.8532,518.0526 713.284,521.3574 C713.4532,522.657 710.7736,525.057 709.5424,525.0306 C711.8584,526.1934 710.3572,529.6182 709.8904,531.1626 C709.2052,533.439 709.2388,534.8934 706.4332,534.9666 C706.7752,536.6142 706.2532,535.311 705.4684,536.2614 C704.8984,536.9514 704.8744,537.9402 704.6212,538.7586 C703.9204,538.7382 701.3416,533.4762 700.9732,537.1962 C700.84,538.5258 701.302,539.3922 701.7772,540.5838 C702.2044,541.6554 701.4424,544.5894 701.2504,542.4786 C701.0572,543.5094 697.8628,543.6318 699.1228,546.0042 C699.7924,547.263 702.3472,546.7698 701.3344,548.7906 C701.6824,547.2186 700.0552,547.0746 699.0844,547.8246 C697.726,548.8758 697.8424,551.2374 695.9836,551.8134 C695.7376,550.4826 697.024,549.4614 696.7624,548.0934 C695.4268,548.3862 695.7376,549.3042 695.2024,550.2534 C694.6828,551.1738 693.1756,551.673 692.9584,552.7614 C692.8072,553.5162 693.5992,554.3622 693.9136,554.9778 C694.5268,556.1802 692.3584,556.4334 691.6624,556.9986 C691.804,556.1682 693.322,553.7562 691.1884,553.8102 C689.9632,553.8414 688.978,555.3678 688.0468,556.005 C687.424,556.4298 685.75,557.3118 685.9216,558.2766 C686.008,558.7662 685.6072,559.383 685.7836,559.8438 C686.0308,560.4846 686.896,560.367 687.0916,561.1386 C686.1364,561.0774 685.1392,561.2718 684.9664,559.923 C684.7492,558.225 683.086,558.2538 683.0224,560.0226 C682.6216,559.3602 680.7076,559.1694 680.0392,559.497 C679.1956,559.911 679.5172,561.3294 678.8836,561.9186 C678.8836,560.1258 676.8292,561.537 676.7104,562.6146 C676.42,562.0602 676.0756,561.5394 675.6784,561.0546 C674.6452,561.771 673.8508,563.007 672.6496,563.4546 C671.5228,563.8746 669.5236,562.9626 668.608,563.8182 C668.1604,564.237 668.5408,567.6522 668.1676,567.2826 C668.4964,568.665 667.5076,570.2586 666.838,571.383 C665.7172,573.261 662.1244,576.7626 663.5032,579.0294 C664.4548,580.593 663.6256,583.4142 663.778,585.2358 C663.9532,587.3058 665.4376,589.0302 665.4292,591.0654 C665.422,592.9602 665.302,594.1614 666.3268,595.8426 C667.4284,597.6474 666.8008,598.4598 666.2584,600.2178 C665.8696,601.4814 667.4608,601.8726 666.7108,603.2298 C665.9116,604.6758 664.87,606.0534 664.0012,607.4682 C663.0688,608.9886 661.9156,610.5078 661.2484,612.1686 C660.7336,613.4538 661.156,615.597 659.5252,616.167 C657.5656,616.851 657.1024,616.8894 656.9128,619.1394 C656.7556,621.0114 655.0576,622.7274 654.5956,624.6462&quot; id=&quot;Madagascar&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M705.0556,534.7902 C705.4828,534.039 704.968,533.2398 704.4556,532.7142 C703.6072,533.4138 703.8028,534.8094 705.0556,534.7902&quot; id=&quot;Madagascar&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M718.6276,569.4342 C718.6276,569.2626 718.6276,569.0898 718.6276,568.9182 C718.1044,569.8806 716.7832,570.963 717.3316,572.2062 C717.88,571.3362 718.1212,570.3246 718.6276,569.4342&quot; id=&quot;Madagascar&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Madeira&quot; id=&quot;Madeira&quot; class=&quot;land coast pt-30&quot; d=&quot;M121.1596,56.5698 C120.2872,56.3946 119.5936,55.9458 118.972,55.3254 C118.4788,54.8334 119.3992,54.087 119.9128,54.6282 C120.5824,55.335 121.546,54.1986 122.3188,55.0662 C123.1672,56.0214 122.1424,56.8062 121.1596,56.5698&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Madeira_circle&quot; class=&quot;circle pt-30&quot; d=&quot;M120.7348,61.0138 C128.0492,61.0138 128.0492,50.0382 120.7348,50.0382 C113.415,50.0382 113.415,61.0138 120.7348,61.0138&quot;&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Malawi&quot; id=&quot;Malawi&quot; class=&quot;land mw&quot; d=&quot;M562.7284,537.7544 C563.0268,537.1654 564.6442,534.5614 565.2146,532.8446 C565.7882,531.1186 565.671,530.6482 565.3198,528.3918 C564.9976,526.3234 569.6656,525.014 570.6196,523.9914 C567.2366,522.963 568.6552,517.4062 568.6456,514.9592 C568.6376,512.918 569.956,512.055 568.8484,509.9946 C567.5572,507.5898 569.4764,508.131 570.7642,507.1752 C572.2766,506.0528 572.6456,503.7218 570.118,500.7868 C568.0868,498.4282 570.627,497.7146 568.7028,496.4336 C567.117,495.3782 566.4934,495.4228 566.122,495.0316 C565.9174,494.8162 566.5026,493.5092 565.9406,492.8344 C566.2214,493.0498 568.206,493.8038 569.1642,493.9302 C570.3586,494.0876 570.034,494.9888 571.031,495.129 C572.0068,495.2662 574.165,495.0872 574.7716,496.2594 C574.798,497.8298 574.8746,499.6816 576.7906,501.995 C578.517,504.0794 576.8734,504.503 577.13,506.1694 C577.3484,507.587 577.8728,514.2426 577.8964,515.0174 C577.9902,518.0818 574.0198,521.1248 575.0744,522.947 C579.1354,529.9636 577.8398,529.8616 577.6126,531.2716 C576.6676,537.1424 580.6522,535.8164 580.049,538.4686 C578.5586,545.0194 582.5012,543.9536 582.3214,540.836 L585.5786,545.027 C586.3406,545.4172 585.8932,539.6538 583.71,537.9362 C581.73,538.2364 582.5844,536.3752 582.331,535.8428 C583.8948,536.6036 584.0668,536.7116 585.9088,539.5002 C587.1282,541.3466 588.209,543.281 589.8558,545.1978 C591.685,547.3274 591.7292,549.3702 591.0434,552.069 C590.4408,554.4404 591.331,556.7626 590.9446,559.2226 C590.7778,560.2846 590.461,561.547 589.5478,562.2274 C588.5326,562.9846 587.0866,562.7422 586.123,563.569 C585.1772,564.3802 585.478,566.1306 584.0824,567.2518 C584.3914,567.6382 585.4228,569.6834 585.4972,570.8214 C585.5332,571.2896 585.513,572.7332 585.0724,573.2154 C584.6308,573.6988 582.9296,573.586 583.175,572.6956 C583.6936,570.8134 584.576,571.3374 582.5956,569.4366 C581.2536,568.1488 577.5728,564.5306 577.3886,563.0894 C577.0676,560.5776 576.397,561.1558 576.9014,559.1894 C577.1312,558.2938 577.6792,556.3712 578.326,555.5168 C579.352,554.1608 579.1758,553.7858 579.3388,552.0848 C579.5306,550.082 579.5414,547.4242 578.1666,545.4348 C577.6274,544.6544 576.0078,545.7298 574.5548,545.8996 C573.3742,546.0376 571.6144,545.6994 571.5664,546.8022 C570.8788,546.0582 566.3196,540.7328 566.0434,540.844 C564.8652,541.3184 562.421,538.7052 562.7284,537.7544&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Mali&quot; id=&quot;Mali&quot; class=&quot;land ml&quot; d=&quot;M154.2556,242.1572 C155.8768,241.767 156.6004,242.6442 157.9192,240.9534 C159.0316,239.5266 158.5324,236.4548 159.076,234.6762 C160.3096,230.6142 165.952,237.344 166.5316,238.6148 C167.6092,235.6604 169.4032,234.0414 172.8004,235.4202 C175.0336,236.3262 179.7676,236.1654 180.2596,233.0838 C181.5316,236.1654 187.8016,234.788 190.2556,234.6006 C196.258,234.1424 202.4164,234.4674 208.4344,234.4674 C210.5536,234.4674 213.1648,234.2206 215.2606,234.4346 C216.8002,234.5918 216.3538,232.0322 216.5032,230.7164 C216.6724,229.2262 218.123,226.356 216.5656,225.3668 C213.8756,223.6576 214.5956,222.1478 214.6132,219.9762 L208.3384,135.8852 L224.2352,135.893 C240.67,148.2094 256.0922,160.4718 271.6398,172.6862 C273.508,174.0372 277.0198,175.39 276.7588,178.2026 C276.677,179.083 276.5528,179.8674 278.129,180.4998 C278.8954,180.8072 279.7472,181.022 280.3976,181.4564 C281.4836,182.1812 281.3048,183.4844 282.1724,184.352 C282.998,185.1776 283.8598,185.291 284.9248,185.475 C285.6982,185.6088 285.1264,184.7638 286.5112,185.452 C287.5044,185.9454 287.9356,187.2608 289.0708,187.6184 C290.8396,188.1776 293.2094,188.326 294.8474,189.2944 C296.0426,190.0012 295.6954,193.3232 295.1866,194.48 C294.4786,196.0892 293.4466,197.6158 296.0074,197.9818 C298.7158,198.3706 301.7834,196.9284 304.4594,196.596 C304.1116,203.9676 305.1634,211.7968 304.2082,219.0986 C304.0984,219.9374 304.3572,220.5092 303.7264,224.505 C303.5202,225.8114 303.9818,224.1452 302.1514,227.9864 C301.589,229.166 301.6216,230.5926 301.1092,231.8094 C300.6148,232.982 299.4724,233.3396 298.5376,234.062 C297.388,234.9488 298.1716,236.1174 296.5948,235.8488 C296.2348,235.7876 293.0884,234.9474 292.9444,235.4924 C292.5664,236.918 282.7338,236.4358 281.2434,236.5546 C277.5942,236.845 277.6696,236.3972 275.0872,239.2206 C274.2772,240.1076 272.6836,240.4218 271.5472,240.1712 C270.8896,240.0512 269.3848,240.0364 268.7176,240.0532 C267.5296,240.0304 267.6064,239.1174 267.6064,240.6044 C266.7448,240.279 265.9222,239.8662 265.072,239.5098 C263.0268,238.6528 262.5358,240.0894 261.7606,239.5168 C261.006,238.9598 259.7146,238.2298 258.0184,239.7414 C256.251,241.3166 253.6862,242.6312 252.6768,243.3074 C250.9806,244.4434 249.7354,245.3384 248.0008,245.775 C246.5748,246.134 247.7356,249.1544 245.6236,248.229 C244.324,247.6604 243.139,246.8704 241.7614,247.8244 C240.5902,248.6368 239.9572,250.13 239.5288,251.4126 C239.284,252.1458 238.952,253.3224 238.6076,254.0174 C238.3088,253.8118 236.3968,253.3454 235.6384,253.22 C236.3176,254.432 235.6612,256.2234 235.8184,257.5412 C234.6496,257.5002 233.7136,257.3094 234.0064,258.7506 C232.7656,258.6272 229.1824,256.8126 229.2544,255.2936 C226.9796,260.742 225.2932,258.173 226.4428,260.1152 C227.0788,261.1898 227.1028,262.0042 226.8466,262.9306 C226.7422,263.3086 224.0102,262.8296 224.6738,263.9742 C225.8968,266.0842 225.357,268.3558 222.9884,270.3562 C221.8868,271.2866 220.5736,270.9092 219.2404,271.1516 C217.9948,271.3772 217.2964,272.7294 215.9464,272.6624 C218.344,273.2644 216.6064,274.5144 217.334,274.9372 C218.5682,275.6548 217.5158,278.8296 216.8344,279.964 C216.6098,280.3384 215.3242,280.4956 215.4016,280.856 C215.792,282.6728 216.0282,284.918 214.7764,286.5534 C214.2738,287.2102 212.8072,287.186 212.098,287.3826 C210.6136,287.7956 211.3828,289.767 209.5072,289.5956 C207.4288,289.4048 208.7932,285.261 208.0864,283.9794 C207.2788,284.313 207.1264,285.7566 206.3584,285.9668 C205.558,286.1852 204.9508,285.0822 204.3664,284.7572 C204.3196,285.7386 204.8452,288.2012 203.3608,288.1794 C202.2496,288.1614 200.6884,288.2478 201.6076,289.7684 C200.2468,290.3706 196.84,288.6896 197.0236,287.0034 C196.324,287.3142 195.1924,286.9554 194.6596,287.5962 C193.8244,288.6018 193.9336,289.7994 192.2716,289.9412 C193.498,287.6576 189.448,287.3202 189.4384,285.3776 C189.4324,284.1354 189.7504,282.686 189.4588,281.4776 C189.0424,279.7544 186.7552,281.769 185.9596,281.732 C186.2632,280.6256 187.1428,277.7034 188.8156,278.276 C189.4204,276.6092 185.9908,275.9936 185.7916,274.388 C184.702,275.0072 184.8004,273.782 184.9,273.0848 C185.1232,271.5104 184.4908,270.9044 183.8248,269.5854 C183.3004,268.5462 183.9604,267.074 182.74,266.4654 C182.2648,266.2278 180.6064,265.3088 180.1144,265.7718 C179.5732,266.2806 181.3168,267.561 180.1444,268.1142 C178.816,268.7408 177.7696,269.8038 176.428,270.4734 C175.498,270.938 174.4564,269.6 173.6956,269.2892 C172.0516,268.6184 170.7844,268.7382 169.6192,270.1266 C166.69,273.6186 168.2968,269.4594 165.7528,268.599 C164.1004,268.0412 162.3544,273.3246 160.7344,269.2484 C160.216,267.9452 162.37,266.7522 161.3272,265.281 C160.7272,264.4338 161.1976,262.4142 161.5228,261.5276 C161.9056,260.481 158.7196,254.5184 158.0608,257.1078 C157.312,256.8956 156.1204,254.576 155.7904,253.8714 C155.494,253.238 156.4516,251.9684 156.4156,250.7142 C156.3628,248.8304 156.5776,248.0288 155.2444,246.5468 C154.7812,246.032 154.2964,245.4174 154.6048,244.676 C155.1304,243.405 154.7644,243.4064 154.2556,242.1572&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Mauritania&quot; id=&quot;Mauritania&quot; class=&quot;land coast mr&quot;&gt;
+   &lt;path d=&quot;M118.0516,191.9586 C118.6612,191.1894 118.7824,190.2222 118.8316,189.2802 C118.1344,189.9438 117.5392,190.9854 118.0516,191.9586&quot; id=&quot;Mauritania&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land mr&quot; d=&quot;M112.9636,179.8626 C112.7188,178.2102 112.8604,177.0694 113.5206,175.4788 C113.7052,175.034 114.319,173.9614 115.4814,173.901 L148.9414,173.8628 C150.6432,172.9664 149.4742,165.5716 149.3608,162.7254 C149.1532,159.8646 148.864,158.0012 151.1574,155.8306 C153.078,154.013 153.0146,154.4762 159.1166,151.9814 L160.457,125.7826 L190.3118,125.4326 L190.7132,112.1476 C202.0796,119.7952 213.2338,127.6722 224.1982,135.8862 C218.9254,135.8862 213.6112,135.8862 208.3396,135.8862 L214.8478,223.3792 C215.3834,224.8104 216.857,225.4272 216.988,225.7616 C217.8596,227.9868 216.7124,228.6596 216.6302,230.3744 C216.5336,232.3838 216.3356,234.1936 215.75,234.4094 L196.6846,234.4322 C185.8552,234.8068 181.2166,236.2902 180.2596,233.0874 C179.7976,235.9866 175.5028,236.4606 173.3848,235.6194 C170.0396,234.2908 167.9038,234.8508 166.5328,238.617 C165.7542,237.3314 164.6206,236.235 163.4596,235.1154 C162.0838,233.7888 160.7576,233.0774 160.0268,233.4824 C157.2802,235.0054 161.1136,242.663 154.3676,242.1794 C154.403,242.302 152.548,240.8678 152.057,239.9288 C151.45,238.7684 150.7496,239.138 149.5852,238.1442 C148.324,237.0676 148.4126,235.3112 147.3782,234.6234 C144.608,232.782 145.706,232.759 145.4488,231.5102 C145.1318,229.9726 143.5668,228.0142 142.7836,228.003 C138.7078,227.9444 138.4158,224.6368 135.773,223.3636 C134.4396,222.721 133.2776,222.3818 131.48,222.323 C128.6806,222.2314 127.718,224.9672 121.2926,224.4874 C119.9382,224.3864 120.119,223.4816 118.9654,223.8092 C117.8454,224.2192 116.5286,227.8238 116.0822,228.7686 C116.0822,222.5262 120.1912,217.4346 120.784,211.3158 C121.1404,207.6318 120.6316,204.5166 120.1696,200.9094 C120.0028,199.6086 120.0448,198.1818 119.218,197.079 C118.4968,196.1166 117.2392,195.4326 117.106,194.1222 C118.0684,194.4222 119.128,193.7082 119.014,192.6534 C118.3636,192.8274 117.844,193.3158 117.622,193.9494 C117.8584,192.6966 118.8688,191.817 119.4184,190.7166 C119.7736,190.005 119.2588,188.8674 119.6752,188.391 C121.5532,186.2406 118.678,182.427 117.97,180.2982 C117.6772,180.8118 117.4768,181.359 117.37,181.9398 C115.4644,180.4974 115.9192,177.5142 113.998,176.0646 C113.692,177.339 113.2312,178.575 112.9636,179.8626&quot; id=&quot;Mauritania&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Mauritius&quot; id=&quot;Mauritius&quot; class=&quot;land coast mu&quot; d=&quot;M784.9756,603.1412 C784.3444,603.8072 781.3276,608.2554 783.4288,608.5088 C786.766,608.9108 787.1896,602.6636 784.9756,603.1412&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Mauritius_circle&quot; class=&quot;circle mu&quot; d=&quot;M780.8608,609.8798 C788.1752,609.8798 788.1752,598.9042 780.8608,598.9042 C773.5412,598.9042 773.5412,609.8798 780.8608,609.8798&quot;&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Mayotte&quot; id=&quot;Mayotte&quot; class=&quot;land coast yt&quot; d=&quot;M676.1116,530.3864 C676.6828,529.6148 677.4076,527.9648 676.1116,527.4462 C675.7852,528.1218 675.6184,529.7468 676.1116,530.3864&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Mayotte_circle&quot; class=&quot;circle yt&quot; d=&quot;M677.424,536.4728 C684.7384,536.4728 684.7384,525.4972 677.424,525.4972 C670.1042,525.4972 670.1042,536.4728 677.424,536.4728&quot;&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Morocco&quot; id=&quot;Morocco&quot;&gt;
+   &lt;path class=&quot;land ma&quot; d=&quot;M150.8836,108.237 C151.2988,107.78 152.6464,105.6414 153.1204,105.4686 C154.8184,104.8506 156.676,104.7714 158.4316,104.3852 C161.6896,103.6674 164.9932,102.638 167.452,100.281 C169.8628,97.9698 172.372,96.1544 174.8956,94.0122 C177.3136,91.9614 179.1604,89.2256 181.096,86.7354 C182.4088,85.046 185.4244,80.181 182.8804,78.3378 C181.8952,77.625 181.2028,77.6012 181.8328,76.28 C182.458,74.9682 182.392,73.6568 182.4628,72.2264 C182.6596,68.2436 184.0984,66.4664 186.5356,63.4986 C187.9288,61.802 187.546,60.075 188.1316,58.124 C188.5564,56.7114 189.7168,55.6172 190.7728,54.656 C193.0288,52.6004 194.8168,50.0696 197.6476,48.7902 C200.7292,47.397 204.0052,46.3088 206.95,44.6324 C212.776,41.3142 215.5792,33.2324 217.786,27.284 C217.9996,26.709 218.7736,23.7764 219.6616,23.8664 C220.7512,23.978 221.8504,23.5362 222.778,23.0384 C223.9504,22.4096 224.1748,23.9658 224.5168,24.8036 C225.1756,26.4212 226.054,27.5204 227.4796,28.5332 C230.4568,30.6476 232.9264,30.056 236.3308,29.6478 C239.1532,29.3106 242.7424,31.0266 244.4596,27.7112 C244.4344,28.791 244.7296,29.0598 244.8796,29.8794 C245.0404,30.758 246.6364,31.202 245.2396,29.7848 C245.9944,30.831 247.3444,31.365 248.5564,30.7614 C249.7912,30.146 250.5268,31.4142 251.2876,32.1174 C252.1036,32.8724 253.5604,33.2994 254.0476,34.3638 C254.6044,35.5808 253.3984,36.6954 255.0916,37.3878 C254.1748,38.1068 254.4724,39.4266 254.6464,40.3938 C254.9224,41.925 254.4124,43.2716 254.5864,44.7486 C254.7268,45.9354 255.496,46.6928 255.2008,47.9672 C254.7568,49.8834 254.9752,50.5638 255.8884,52.2498 C256.3528,53.108 255.9316,53.8724 256.396,54.6582 C257.086,55.8272 258.1672,56.2916 259.186,57.0968 C261.064,58.581 255.4456,61.046 258.4504,62.1848 C255.3484,62.9816 244.4728,59.2506 242.8768,63.4628 C242.044,65.6622 239.8756,66.4998 237.5272,66.303 C235.7512,66.153 233.566,68.691 235.9864,69.356 C233.9368,71.2302 237.6988,72.6188 236.8012,73.508 C235.7764,74.5242 233.98,74.1572 232.8724,74.9648 C231.7132,75.812 230.4412,77.0816 229.0684,77.5554 C228.0304,77.913 226.858,77.8818 225.8836,78.4266 C223.9948,79.4816 223.234,81.693 221.8492,83.241 C220.2628,85.0158 217.33,85.7096 215.0236,85.8006 C213.2908,85.868 211.426,85.1418 210.7264,87.2072 C209.98,89.4104 207.814,87.7604 206.08,87.8886 C204.8572,87.9786 204.1456,88.5894 203.3584,89.4392 C202.5592,90.303 201.616,90.1206 200.62,90.519 C199.4704,90.9786 198.7612,92.1164 197.8432,92.8818 C196.8676,93.6954 195.6592,94.202 194.662,95.0096 C192.7168,96.585 191.0116,96.8142 191.206,99.5408 C191.3992,102.2528 191.1124,105.2588 190.8088,107.955 C190.6792,109.0974 154.5736,108.237 150.8836,108.237&quot;&gt;
+    &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;&lt;/path&gt;
+   &lt;path class=&quot;land eh&quot; d=&quot;M112.9636,179.8626 C111.5428,177.3594 113.65,173.1126 114.082,170.517 C114.3784,168.7424 114.8356,167.0778 115.786,165.53 C116.9368,163.6532 119.0428,163.6494 119.7496,161.3034 C120.112,160.1012 120.0892,158.2494 121.2844,157.532 C121.9624,157.1262 121.5616,155.7642 122.0908,154.988 C122.9368,153.7458 126.3436,149.505 125.3956,147.8936 C124.7584,148.3038 124.222,148.8762 123.8476,149.5352 C125.3368,146.2592 129.1072,143.8484 131.584,141.32 C134.8828,137.9516 134.2456,134.4702 135.8512,130.3386 C137.1652,126.9608 138.184,123.2322 141.4684,121.3614 C145.0876,119.3 147.0556,117.6188 148.5544,113.6322 C149.507,111.0982 151.3102,107.5012 150.6848,108.239 L190.8838,107.9142 L190.3114,125.4288 L160.4836,125.7728 L159.1108,151.9724 C157.336,153.2528 154.8136,153.393 152.9596,154.5462 C150.1696,156.2804 149.0428,158.1354 149.2636,161.4306 C149.392,163.3458 150.862,173.324 148.828,173.9 L115.6492,173.9 C113.1028,173.9012 112.696,178.0604 112.9636,179.8626&quot;&gt;
+    &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;&lt;/path&gt;
+  &lt;/g&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Mozambique&quot; id=&quot;Mozambique&quot; class=&quot;land coast mz&quot;&gt;
+   &lt;path id=&quot;Mozambique&quot; class=&quot;&quot; d=&quot;M584.8756,621.7182 C585.1816,620.8578 585.3544,619.9458 585.3076,619.0302 C584.9332,619.8534 584.5228,620.8014 584.8756,621.7182&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;Mozambique&quot; class=&quot;&quot; d=&quot;M593.9476,591.5622 C594.6724,590.8734 594.5008,590.5854 593.4304,590.6982 C593.6032,590.9862 593.776,591.2742 593.9476,591.5622&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land mz&quot; d=&quot;M539.8636,551.2062 C546.508,548.709 553.1764,546.2694 559.8604,543.8814 C561.3544,543.3474 562.7616,542.6364 564.2424,542.064 C564.744,541.8708 566.0144,541.0462 566.5724,541.2214 L571.5676,546.8034 C571.6168,545.6838 574.0204,546.075 575.1508,545.7558 C576.1228,545.4822 577.5868,544.5714 578.3848,545.6058 C579.8596,547.5186 579.868,552.153 579.1012,554.2734 C578.128,556.9602 575.8648,559.3758 577.3012,562.1406 C577.6432,562.797 577.4464,563.5794 577.8436,564.2034 C578.2924,564.909 579.0892,565.293 579.5356,565.9974 C580.4104,567.3762 581.758,568.6662 582.9988,569.7258 C584.182,570.7362 584.1184,570.921 583.3072,572.2482 C582.4408,573.6654 585.2488,574.1994 585.4336,572.2914 C585.6112,570.4362 585.076,568.7958 584.0104,567.2886 C585.6976,566.0598 584.8204,563.5122 587.2996,562.9974 C590.6596,562.3002 590.9572,560.8338 590.968,557.4462 C590.9716,556.2138 590.7544,554.9562 590.8276,553.7262 C590.9476,551.7222 592,549.5094 591.1396,547.5438 C590.278,545.5746 588.4792,543.7194 587.3224,541.8858 C586.2472,540.1806 585.196,538.3458 583.834,536.8446 C582.8332,535.743 583.2104,536.7472 582.3104,535.7392 C582.0434,534.877 582.502,533.1852 581.9518,531.5132 C581.2312,529.3228 582.5186,527.9986 582.232,527.0278 C580.5696,521.415 581.5744,522.789 581.4952,522.0832 C582.145,520.6058 584.3102,520.8828 583.7842,515.6492 C585.5846,515.8182 587.2198,516.2158 589.3264,515.6058 C590.5174,515.261 591.6388,513.7938 592.942,514.6374 C593.8432,515.2206 594.28,516.3354 595.2376,516.8454 C595.9708,517.2366 598.4056,517.371 599.2132,517.1634 C600.556,516.8178 601.5232,514.5618 603.0388,516.207 C605.8516,519.2598 609.2296,515.6442 610.5916,513.4014 C611.3428,512.163 612.682,512.1294 613.8544,512.8722 C615.7648,514.083 616.2268,514.0722 618.0388,512.8002 C619.5532,511.7382 620.7412,510.9906 622.7152,511.3782 C623.8504,511.6026 626.0428,509.4246 627.1024,508.9422 C629.1928,507.9918 630.9388,506.655 632.7412,505.2642 C634.942,503.5638 636.376,506.409 634.4668,507.3222 C634.7584,507.459 635.0452,507.603 635.3308,507.7542 C634.4572,508.8798 634.9528,510.147 634.4668,511.3782 C634.2064,512.0406 632.5372,512.8986 633.5212,513.5982 C634.3372,514.1766 634.1464,517.2714 634.2628,518.469 C634.3492,519.3666 634.42,520.281 634.3396,521.1822 C634.2196,522.549 633.7936,522.2058 634.1752,523.4166 C634.2628,523.8678 634.2316,524.3118 634.0804,524.745 C633.9028,525.5826 634.4296,525.837 634.6456,526.5618 C634.9624,527.6154 634.564,529.1274 633.8548,529.9542 C636.2596,530.2962 633.13,535.575 634.072,535.8762 C635.7172,536.403 634.1104,541.8954 634.6348,543.1782 C636.4468,542.1042 634.372,545.607 634.9,546.4542 C635.0452,544.9266 636.5848,545.1894 636.3208,546.7038 C636.0352,548.3454 636.4288,549.5094 634.72,550.4382 C635.0308,550.6806 635.35,550.9086 635.6812,551.1222 C633.7036,550.6506 635.4088,551.3718 634.8412,552.0522 C634.4824,552.4818 633.9244,552.6438 633.6892,553.1982 C635.5984,552.519 633.9496,555.5478 633.6652,556.1466 C632.7088,558.1686 630.6724,559.2894 629.6896,561.2982 C628.714,563.2926 627.1204,564.4518 626.0356,566.3418 C625.2052,567.7914 619.5748,569.7486 619.7776,571.3254 C619.8712,572.055 615.526,572.8014 614.68,573.3222 C613.9312,573.783 613.0828,574.1514 612.2404,574.3974 C610.8808,574.7946 611.1148,574.275 610.1272,575.1882 C608.7064,576.5022 606.7156,577.1238 605.026,578.0022 C603.3448,578.877 600.6664,582.9666 598.78,581.3622 C602.3032,585.2274 593.7472,586.7118 594.544,590.6142 C593.8168,590.7138 593.3284,590.2386 593.164,589.5702 C593.3344,590.9418 592.0312,592.6806 592.216,590.7822 C590.5708,592.209 588.58,593.1882 587.242,594.9498 C586.0576,596.5086 584.98,597.9882 583.5544,599.349 C582.9772,599.8998 580.6828,602.3202 579.8584,601.3182 C579.3268,600.6726 578.6476,598.4586 577.444,599.1594 C579.5188,599.0346 578.794,601.6458 579.2032,602.2794 C579.5872,602.8758 579.5668,603.8442 579.2788,604.4706 C579.148,604.8006 578.908,604.9914 578.56,605.0394 C578.8264,605.5362 578.9152,606.0642 578.8264,606.6234 C578.6008,609.351 579.4972,608.5974 580.9012,610.3926 C581.6884,611.3994 581.9152,612.591 581.8984,613.839 C581.8912,614.3226 581.506,618.0846 582.1972,615.7566 C581.6716,617.7882 583.0228,619.9842 583.228,622.0566 C583.3528,623.2986 583.7968,624.5982 583.5916,625.8522 C583.4176,626.9094 582.9604,628.0842 584.0932,628.8018 C584.296,627.471 584.2384,626.2722 585.136,625.1658 C585.1144,625.5726 585.1396,628.4874 585.568,626.0406 C585.3268,627.4458 584.9752,628.8354 584.8504,630.2598 C584.7376,631.5378 585.6436,632.6742 585.4804,633.9174 C585.034,637.3098 582.5944,640.581 583.144,644.1846 C582.8296,642.2142 584.2744,644.2446 584.356,642.5406 C585.6556,644.7318 583.1344,648.0078 581.7856,649.5534 C579.556,652.1082 576.1732,653.2758 573.0592,654.3738 C569.5348,655.617 565.984,656.9106 562.84,658.9566 C561.4204,659.8806 559.9372,660.693 559.1476,662.2722 C558.4696,663.627 558.1264,665.2026 556.36,665.4354 C557.5384,665.4222 559.4224,669.6234 560.416,667.0794 C560.2048,669.2334 561.3316,674.8126 559.1068,674.6594 L553.7368,674.4516 C553.8168,672.6854 552.7198,670.6868 553.001,669.3186 C553.237,668.1686 552.6782,667.0564 551.8984,666.0276 C551.3246,665.2702 551.4544,663.4384 552.056,661.993 C552.398,661.1714 552.352,658.2258 552.388,657.381 C552.4744,655.3122 552.459,653.2446 552.615,651.1806 C552.7554,649.3182 552.328,648.0762 552.028,646.2978 C551.5768,643.6338 549.7624,641.4558 549.2092,638.8626 C548.9428,637.611 549.1424,636.291 548.9228,634.9998 C548.618,633.2058 548.2564,631.4814 547.768,629.7342 C547.4512,628.6014 546.9438,628.9376 547.5802,628.1012 C548.2166,627.5986 549.997,625.2794 550.7476,624.513 C551.8662,623.371 557.0668,616.0578 558.4348,617.0526 C557.056,615.273 558.436,614.2422 558.8668,612.4686 C559.132,611.3778 558.0748,609.855 559.2736,609.1398 C560.9416,608.145 561.3772,606.7902 562.2976,605.0754 C562.6912,604.3422 562.9054,603.7216 563.1898,602.9296 C563.641,601.6804 563.2948,600.7206 563.356,599.5086 C563.068,599.6238 562.7812,599.7402 562.492,599.8566 C561.8596,598.5992 561.4124,597.4688 561.6594,596.7712 C561.959,595.9256 563.0336,595.2258 562.629,594.0922 C562.282,593.1202 560.8812,593.4664 561.2758,591.9042 C561.5706,590.7378 563.6138,590.5478 563.4484,589.1274 C563.1638,586.6852 564.6832,587.6008 564.5344,586.0002 C564.4112,584.6776 563.668,583.4194 563.92,582.0862 C564.0964,581.149 564.7114,580.1084 564.4794,579.1734 C564.0172,577.3114 564.1724,576.0502 564.2138,574.0538 C564.2272,573.4052 563.879,572.9346 563.699,572.3034 C563.4374,571.3878 564.3304,569.8314 564.484,568.9206 C563.2176,569.2772 562.575,569.2652 561.9016,568.0194 C561.2648,566.8412 557.6284,566.7416 556.6816,566.1966 C553.7656,564.518 550.978,562.7682 547.8424,561.8814 C546.8386,561.5974 543.6992,561.6888 542.6026,561.4276 C540.8274,561.0046 541.5412,558.123 541.3768,556.8006 C541.1428,554.8782 539.692,553.1658 539.8636,551.2062&quot; id=&quot;Mozambique&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M626.5156,565.0302 C626.8036,564.8298 627.0904,564.6306 627.3796,564.4302 C627.3844,564.9342 627.3016,565.4226 627.1276,565.8954 C626.9236,565.6062 626.7196,565.3182 626.5156,565.0302&quot; id=&quot;Mozambique&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Namibia&quot; id=&quot;Namibia&quot; class=&quot;land na&quot; d=&quot;M372.1636,574.6182 C373.4332,574.4202 374.4364,573.3018 375.7936,573.543 C376.9492,573.7482 377.9944,574.6254 379.2184,574.3914 C381.7684,573.9042 383.5156,570.9306 386.4196,571.7226 C388.732,572.3538 389.962,574.9538 392.2832,575.7244 C393.6002,576.1616 397.6556,575.9918 399.8104,576.0102 C409.6686,576.0946 419.5412,576.2914 429.3868,575.895 C431.9924,575.7902 432.8752,575.5996 434.105,577.899 C435.6706,580.826 438.0134,580.1794 440.8264,580.4886 C444.514,580.894 448.4392,580.7254 451.8932,581.9372 C453.221,582.403 454.4158,582.5716 455.5892,581.8604 C456.6262,581.2316 457.615,581.4572 459.1134,581.8234 C460.6282,582.1938 461.5258,581.9426 462.5338,581.7088 C468.686,580.2812 475.6418,578.8374 482.1628,577.6038 C483.4264,577.3648 484.708,576.7854 486.0196,576.9858 C486.7948,577.1046 487.9684,577.851 488.7376,577.467 C491.1892,576.243 492.3224,578.833 493.94,579.9442 C492.7592,579.637 491.3884,580.3254 490.2688,580.761 C488.8768,581.3022 488.4676,583.3794 487.1332,582.1518 C484.9852,580.1766 480.7876,586.6482 479.206,587.409 C478.4356,585.9258 477.6052,582.6234 475.4092,582.4158 C472.5808,582.1482 469.0576,583.5762 466.3012,584.1606 C463.0576,584.8482 459.2232,584.9804 455.9928,585.5828 L454.8002,623.8622 L446.6408,623.7438 L444.8686,689.001 C445.0714,691.9828 442.5232,690.7276 441.1026,692.0792 C440.4012,692.7466 440.4522,693.3968 439.052,693.8794 C438.0956,694.2092 437.6512,694.611 438.4312,695.4942 C436.2772,696.1314 436.3802,695.3228 434.377,695.027 C432.2722,694.716 430.4748,695.8534 427.984,695.3178 C424.0414,694.4702 421.7032,693.0166 421.5224,692.2864 C421.0238,690.2756 421.4854,691.1068 421.5668,689.5082 C421.4924,688.8764 420.8036,689.0414 420.3242,688.543 C419.6398,687.8318 419.0434,686.3146 418.3192,686.7738 C416.0372,688.2206 416.6678,690.369 415.8712,690.9918 C414.739,691.877 413.3188,693.037 412.1368,691.5498 C410.575,689.5848 408.4876,688.0158 407.0944,685.9182 C405.856,684.0522 404.8684,682.0398 403.87,680.0394 C403.3396,678.9774 403.2904,677.835 403.1056,676.689 C402.9148,675.5058 402.1096,674.889 401.878,673.8114 C401.452,671.835 402.334,671.109 400.8712,669.2874 C400.2868,668.5602 400.4824,668.091 400.5028,667.1622 C400.5376,665.661 400.0168,664.3614 399.8548,662.8974 C399.7396,661.8546 399.8296,660.7986 399.5308,659.7786 C399.1096,658.3362 399.8308,656.9406 399.55,655.4982 C399.0664,653.0118 397.8844,650.7426 396.982,648.3966 C395.9632,645.7482 396.7252,643.5126 396.4588,640.8318 C396.2788,639.0126 396.0136,636.7352 396.178,635.7954 C396.2548,635.3552 397.3588,630.9366 396.8752,631.0434 C396.76,628.6638 395.5588,626.3334 394.2088,624.4242 C393.4492,623.3502 392.5816,622.3494 391.9432,621.1926 C391.3576,620.1294 391.2364,618.8286 390.4696,617.8602 C386.9356,613.3974 386.1772,607.9794 383.5672,603.1434 C381.1732,598.7106 380.3692,592.6218 376.4788,589.1346 C372.292,585.3846 371.8024,579.909 372.1636,574.6182&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Niger&quot; id=&quot;Niger&quot; class=&quot;land ne&quot; d=&quot;M267.5224,245.6994 C266.2516,244.1972 267.736,241.4588 267.6064,239.738 C269.1364,240.2744 271.0228,240.1218 272.6284,240.1398 C274.5208,240.1614 275.0008,239.1918 276.1228,237.8924 C277.4728,236.3276 279.0436,236.7174 280.972,236.5674 C283.4296,236.3756 285.88,236.1512 288.3472,236.1018 C289.5112,236.079 290.6512,236.079 291.808,236.2148 C294.0868,236.481 291.94,235.5164 293.0104,235.244 C294.7192,234.806 296.9572,237.111 297.7024,235.1588 C298.3564,233.4452 300.3652,233.2076 301.0408,231.6572 C301.732,230.067 301.7092,228.363 302.5876,226.8126 C304.4212,223.5788 304.012,219.9978 304.1956,216.3018 C304.4596,211.0338 304.3756,205.7576 304.3468,200.4848 C304.3288,197.2076 304.6156,196.3544 307.8712,195.5972 C310.7536,194.9262 313.7344,194.768 316.6084,194.061 C319.9996,193.2272 322.2328,189.8936 324.6364,187.5572 C328.1284,184.1624 331.4716,180.4652 335.32,177.47 C343.1632,171.3654 351.8632,165.837 360.2404,160.4936 C364.1872,157.976 367.9768,155.2196 371.9224,152.7006 C375.616,150.3426 380.5708,152.763 384.5032,153.836 C387.94,154.7756 390.7084,157.0124 393.0544,159.6272 C394.0672,160.7538 394.3792,160.8066 395.6176,159.956 C397.3732,158.7512 399.2596,157.7838 401.0932,156.7064 C401.9632,161.288 402.6784,165.7724 403.036,170.4114 C403.1788,172.256 404.2612,173.5266 405.214,175.0304 C405.7576,175.8882 406.2532,176.787 406.6216,177.7364 C406.9684,178.6256 405.9916,179.3456 406.7584,180.225 C407.746,181.3566 409.4044,182.3202 409.822,183.8502 C410.3332,185.7224 408.2032,187.6554 408.0292,189.5288 C407.5108,195.1158 406.624,200.6838 406.624,206.3082 C406.624,208.7322 406.3768,211.1456 406.306,213.567 C406.2496,215.5148 406.516,217.8956 405.8656,219.7626 C405.304,221.3718 403.6984,222.7436 402.6604,224.0576 C400.9768,226.1886 399.1432,228.1952 397.4356,230.3072 C394.63,233.78 392.248,237.7578 390.688,241.9278 C390.3124,242.9336 389.8624,243.9126 389.1748,244.7502 C388.846,245.15 388.1608,245.0382 387.9124,245.5256 C387.1336,247.0494 389.014,251.3684 389.2588,253.0458 C388.432,253.0458 387.3688,252.837 386.626,253.3218 C385.8376,253.8366 385.9696,254.3898 385.072,254.786 C383.0728,255.6668 381.6256,256.4804 380.1088,258.0776 C377.7736,260.5376 376.384,259.467 373.5484,258.3152 C370.2292,256.9674 367.2472,256.7876 363.7036,256.694 C360.6736,256.6148 358.06,257.168 355.7548,259.2512 C354.97,259.9604 354.394,260.774 353.7964,261.6332 C352.7644,263.12 352.1416,262.1756 350.65,262.3124 C347.158,262.6326 345.6592,260.8674 342.7432,259.7022 C340.6108,258.849 338.1724,255.8442 335.602,257.2038 C334.63,257.7174 333.8956,258.5696 332.9476,259.1202 C332.218,259.544 331.0672,258.9044 330.7396,259.611 C329.3908,262.5164 327.046,258.9164 326.4976,257.7066 C325.204,254.8544 323.2168,253.7624 320.3224,253.2402 C318.6748,252.944 317.4304,251.5506 315.748,251.3972 C314.2576,251.2604 313.666,252.8072 312.0796,252.7746 C309.2164,252.7184 306.6004,252.4784 304.5088,254.8578 C303.8212,255.6392 303.1,256.0206 303.0052,257.0936 C302.848,258.8718 302.794,260.367 301.7296,261.8648 C300.2944,263.8866 298.5412,265.2224 298.6396,267.9092 C298.6612,268.4744 298.3516,274.2114 298.0012,274.0148 C296.2972,273.0534 292.6276,266.5734 290.842,266.7908 C290.2804,266.8592 290.0476,267.543 289.5508,267.7326 C288.8908,267.9848 287.4172,267.8 286.9744,268.4756 C286.7464,268.8224 287.74,271.694 287.062,271.6724 C286.4548,271.6532 285.0604,269.0984 284.7736,268.6278 C283.8388,267.093 284.5624,266.7776 285.8428,266.2652 C285.4336,265.4108 285.3532,264.2228 284.5492,263.606 C283.096,262.4936 282.1996,264.8094 280.6924,264.543 C277.8868,264.0462 273.3088,259.6148 274.6108,256.6746 C275.3956,257.2446 276.166,257.2664 277.0228,256.8488 C276.604,256.4958 271.1596,252.674 270.9796,253.0436 C271.3768,252.231 269.362,250.7072 269.098,249.7988 C268.6468,248.2364 269.0092,246.7832 267.5224,245.6994&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Nigeria&quot; id=&quot;Nigeria&quot; class=&quot;land coast ng&quot;&gt;
+   &lt;path d=&quot;M330.4276,349.9842 C331.5244,349.911 331.9168,349.2354 331.0276,348.5154 C330.652,348.9342 330.4528,349.4226 330.4276,349.9842&quot; id=&quot;Nigeria&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M332.7556,349.4658 C333.0436,349.293 333.3316,349.1202 333.6196,348.9474 C333.01,348.9558 332.434,349.0998 331.8916,349.3782 C332.1796,349.4082 332.4676,349.4358 332.7556,349.4658&quot; id=&quot;Nigeria&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land ng&quot; d=&quot;M289.3876,313.5234 C290.4664,309.7794 288.9112,305.3238 290.5588,301.7862 C290.9608,300.921 292.4824,301.6866 293.2048,300.855 C294.4396,299.4306 293.3164,297.705 294.5836,296.2794 C295.4128,295.3458 295.366,293.8686 296.3776,293.2794 C297.4384,292.6602 299.0224,291.3402 298.504,289.833 C298.102,288.663 297.568,287.6934 299.1292,287.373 C301.3204,286.9242 299.5516,283.791 299.3248,282.8514 C299.092,281.8938 299.4244,281.0514 298.9228,280.125 C298.492,279.3294 297.8236,278.697 297.4096,277.8906 C296.5612,276.237 297.7936,274.8378 298.2832,273.3006 C298.8736,271.449 298.4584,269.475 298.5916,267.5538 C298.7524,265.233 299.3752,264.7542 301,263.157 C302.398,261.7818 303.004,259.707 302.9548,257.7942 C302.914,256.1802 304.0288,255.219 305.1856,254.2566 C306.5488,253.1238 308.224,252.8118 309.9472,252.7434 C312.202,252.6534 313.4164,251.8398 315.484,251.3166 C316.6948,251.0094 318.274,252.399 319.2748,252.9006 C320.998,253.7658 322.792,253.2606 324.2884,254.709 C325.6084,255.9882 326.236,257.5146 327.1324,259.0614 C327.472,259.6482 327.9328,260.271 328.6108,260.4918 C330.0352,260.9562 330.2368,259.3566 331.3732,259.2318 C335.1616,258.813 336.4048,255.417 340.3648,258.2286 C340.912,258.6162 341.5204,259.0734 341.8768,259.6542 C342.0496,259.9362 343.0876,259.7946 343.3888,259.9566 C345.04,260.841 345.6976,262.0734 347.8336,262.1538 C349.0828,262.2018 351.6868,262.8858 352.7716,262.4034 C354.3064,261.7206 354.832,259.731 356.1472,258.7386 C359.3128,256.3506 364.0972,256.1454 367.882,256.5042 C369.8668,256.6926 371.6416,257.2254 373.4008,258.153 C374.8744,258.9306 376.7296,260.0754 378.4612,259.4394 C380.1244,258.8286 380.986,256.9266 382.354,255.8958 C383.104,255.3306 383.8348,254.8026 384.8044,254.7498 C386.2816,254.6706 385.257,254.366 386.074,253.821 C389.2204,251.7222 390.2264,254.6986 391.3732,256.8334 C392.3478,258.6478 394.305,258.7948 393.8376,263.824 C393.786,264.3802 394.6492,266.5966 395.1412,266.9926 C395.7484,267.481 396.2086,267.0284 396.958,267.2994 C400.852,268.7072 397.3092,272.548 398.4892,274.3758 C399.9936,276.7064 395.168,278.4972 393.4198,278.3144 C390.7846,278.0386 389.8424,283.7838 389.156,285.8622 C388.766,287.043 388.5438,288.291 388.1862,289.4694 C387.7866,290.7858 386.3084,290.5848 386.2748,292.0716 C386.2448,293.4024 386.5696,295.0936 385.5448,296.2744 C384.6784,297.2728 383.434,297.7206 382.2688,298.3158 C383.5648,298.5702 382.2772,301.887 382.1848,302.637 C381.9172,304.7862 380.53,306.0126 378.3808,306.093 C378.5812,307.2174 377.7148,307.4658 377.116,308.1798 C376.3684,309.0702 376.9786,310.389 376.771,311.4498 C376.2898,313.911 375.0644,316.4998 373.5196,318.5274 C372.1902,320.272 374.647,321.3412 371.5792,323.3406 C370.286,324.1834 371.0596,325.0998 370.6048,326.3106 C370.3048,327.1086 369.257,327.8674 368.8496,328.6168 C368.4548,329.3428 367.1492,328.9132 366.5996,328.6936 C365.9248,328.4242 366.0796,326.4246 366.034,325.8258 C365.9824,325.1322 363.6062,324.5032 363.2798,323.704 C362.7602,322.432 362.1292,322.8594 361.7836,321.3846 C361.5196,322.293 361.4536,323.901 360.2956,324.1542 C358.8352,324.4734 358.2098,322.9042 357.0316,323.2854 C354.9088,323.972 354.4576,327.2838 353.0782,328.1908 C351.2864,329.3692 345.56,335.2226 346.3226,335.999 C347.5444,337.2428 345.3472,340.441 345.3412,341.337 C345.3308,342.8622 344.7556,344.12 342.9046,347.0734 C342.169,346.885 341.4868,345.8394 341.8264,345.1458 C341.0392,345.6558 340.4332,344.877 340.0984,344.2806 C340.8616,347.121 341.5732,347.7642 338.2756,348.243 C336.9712,348.4326 332.6788,349.2906 333.8812,346.6134 C333.3196,347.7006 333.2932,347.991 331.9852,347.9094 C330.5368,347.8194 330.7864,347.445 329.3812,346.527 C330.04,347.0082 330.8356,349.4898 329.2696,348.8634 C328.2208,348.4446 329.7736,345.9258 327.9172,346.8726 C328.4356,347.9142 328.882,348.903 328.4332,350.0694 C327.574,349.7058 326.5852,346.6086 326.8852,345.663 C325.8964,346.5186 327.5368,349.0158 327.0232,350.1846 C326.308,351.8142 326.314,347.9898 326.3572,347.6502 C326.194,348.1266 325.9348,350.745 325.8412,348.4266 C325.8184,349.1106 325.7236,349.8798 325.2412,350.4138 C325.216,349.7934 325.0444,349.2174 324.7252,348.6858 C325.0948,349.4286 325.0648,350.625 323.9272,350.523 C321.8752,350.3394 322.4392,350.8098 321.8692,348.8586 C321.8908,350.703 320.4544,352.305 320.1412,349.6362 C320.1628,351.3678 319.7116,350.2326 318.4504,349.6158 C317.206,349.0074 316.3684,347.7942 315.7372,346.6122 C315.1432,345.5022 314.4004,344.2914 314.7148,342.999 C314.9248,342.135 315.0388,341.343 313.8292,341.6862 C313.606,340.7478 313.7056,340.221 314.6656,340.0278 C316.5268,339.6534 314.7868,338.9838 316.168,338.145 C315.1828,338.2218 314.3116,339.5598 313.342,339.3402 C310.2484,338.6394 314.4808,337.5582 315.22,337.4538 C314.7196,336.8478 314.1436,336.7614 313.492,337.1946 C313.5184,336.819 313.546,336.4446 313.576,336.0702 C313.3876,337.149 312.0244,337.9278 311.5,336.5886 C311.0248,335.3766 312.4816,334.8414 313.144,334.1694 C312.3592,334.4886 311.6524,335.0346 311.068,335.6394 C309.8836,332.943 307.2628,329.9598 304.3168,329.2098 C302.8852,328.845 301.1704,328.6578 299.6932,328.7478 C298.54,328.8198 296.8576,329.3202 295.8652,328.4682 C297.1204,328.7142 298.9648,327.879 299.6692,326.8266 C298.3852,326.7666 297.4744,328.2786 296.2132,327.2586 C295.7632,327.801 295.6468,328.4058 295.8652,329.073 C293.7964,329.3442 291.6868,328.9482 289.6372,329.4186 C289.5688,328.1226 290.2984,326.9814 290.3332,325.7034 C290.3692,324.381 289.7776,323.4102 290.1064,322.0434 C290.6452,319.8174 290.6932,315.5394 289.3876,313.5234&quot; id=&quot;Nigeria&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_RepublicOfTheCongo&quot; id=&quot;Republic_of_the_Congo&quot; class=&quot;land cg&quot; d=&quot;M366.7156,436.2942 C367.4152,434.1788 367.8376,433.5522 369.5824,432.225 C371.128,431.0502 371.6728,434.9516 373.6984,433.712 C373.9888,433.5342 373.6144,431.7848 373.9288,431.1342 C374.6068,429.7364 373.156,429.423 372.3256,428.894 C371.5912,428.426 373.6684,423.8288 370.4356,424.7262 C371.5624,423.1832 371.2408,421.3376 370.7716,419.6262 C372.0784,419.9336 372.6196,419.7956 373.882,419.8148 C374.4388,419.823 374.7052,420.669 375.226,420.5418 C376.7824,420.1626 379.5292,420.5624 379.1764,418.2246 C378.934,416.625 378.3904,413.2244 381.4504,414.8706 C382.5688,415.4718 384.5536,418.8066 383.8288,420.0594 C385.2532,419.2412 386.6008,421.0098 388.0528,420.6594 C389.2996,420.3582 390.4972,418.3424 390.8248,417.2034 C391.2088,417.9032 391.8904,421.8174 392.7688,421.743 C393.4216,421.688 395.1232,419.9924 395.0128,419.2544 C394.9,418.5032 395.0776,415.917 395.8384,415.4744 C396.8524,414.8852 397.8076,412.9604 396.5248,412.1034 C398.2696,411.488 397.4128,408.1436 397.0372,406.9278 C396.4624,405.069 398.386,403.0098 397.4956,401.3658 C396.9676,400.3902 395.614,400.1022 394.6288,400.1022 C394.0912,399.7002 394.5724,398.3478 393.4168,398.2364 C390.4228,397.9472 392.752,396.3728 392.3872,394.526 C392.1364,393.255 392.5744,390.7518 393.7528,389.9022 C394.9876,389.0108 396.0652,389.463 396.8584,387.7806 C397.474,386.474 396.4928,385.4924 396.0076,384.3572 C395.1302,382.3036 394.843,380.3786 392.1808,380.8016 C389.875,381.1676 387.8332,382.424 385.546,382.8164 C386.1964,381.1124 385.4812,379.2548 385.3228,377.5326 C385.1488,375.643 386.3486,373.855 386.4074,372.8968 C386.4014,372.124 395.6404,373.1408 396.442,373.0544 C397.9876,372.8876 398.5312,373.2978 400.0024,373.4082 C401.2396,373.5018 401.4256,375.1626 403.0852,374.7092 C406.3468,373.8164 409.7608,376.1322 411.994,378.3246 C413.0488,376.8234 412,375.7098 412.0624,374.126 C412.114,372.8168 413.4184,372.0366 413.89,370.8942 C414.556,369.2864 415.3696,367.7202 415.762,366.014 C416.0776,364.6446 415.5772,363.3822 415.8772,362.0598 C416.104,361.0566 416.3776,359.564 417.3796,359.013 C418.6624,358.3076 420.2788,359.0072 421.6516,358.4202 C423.1384,357.7842 424.2928,356.7654 425.9548,357.5396 C427.5832,358.2978 428.6944,358.9784 430.5412,358.6794 C432.8032,358.3136 435.7612,357.471 435.448,360.645 C435.18,363.359 433.2636,367.1224 431.9676,369.448 C430.4436,372.1792 430.4612,373.9772 430.436,377.1414 C430.4216,378.8958 430.1154,380.6768 429.5848,382.3626 C429.0034,384.2094 428.5584,385.2152 428.5348,387.2276 C428.5196,388.528 428.4468,389.7942 428.3532,391.1168 C428.2608,392.4224 427.8838,394.078 427.5626,395.3486 C426.7446,398.5826 428.2944,400.6778 425.5988,403.6402 C423.185,406.2926 420.6358,407.0432 419.0078,410.012 C418.234,411.4224 417.5896,412.949 416.966,414.4972 C415.8086,417.3706 413.0412,417.8026 413.214,419.5564 C413.4976,422.4362 413.2592,425.2504 413.2492,428.444 C413.2394,431.5504 411.8762,436.3322 408.9166,436.8508 C407.8394,437.0396 406.7188,438.1754 406.3792,439.313 C406.198,439.9226 404.2484,440.7538 403.6748,441.4454 C402.643,442.689 401.8978,444.1502 400.7026,445.3784 C399.1842,446.939 397.678,445.0842 396.7888,446.2316 C396.7888,445.119 395.7812,443.1106 396.5528,442.197 C397.1686,441.4678 397.4742,440.8132 396.2116,440.4206 C394.6486,439.9342 392.5192,443.181 391.1728,441.3968 C390.502,442.1012 390.6184,442.9842 390.2692,443.8148 C389.8048,444.9186 388.3288,445.3266 387.538,446.1488 C387.4576,444.7016 385.4416,444.5 385.114,443.1234 C384.0364,445.1032 382.9364,439.1992 381.0806,442.093 C380.4444,443.0854 379.3926,443.002 378.61,443.6766 C377.8252,444.353 376.483,445.9154 375.6748,446.8126 C373.775,448.9216 373.198,444.9942 372.8932,443.8604 C372.0976,440.9034 368.8936,438.3284 366.7156,436.2942&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Reunion&quot; id=&quot;Reunion&quot; class=&quot;land coast re&quot; d=&quot;M767.3476,613.5104 C767.2204,611.1246 762.568,612.5382 763.0972,614.8184 C763.8952,618.2576 770.332,618.536 767.3476,613.5104&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Reunion_circle&quot; class=&quot;circle re&quot; d=&quot;M765.839,619.2088 C772.364,619.2088 772.364,609.0476 765.839,609.0476 C759.3092,609.0476 759.3092,619.2088 765.839,619.2088&quot;&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Rwanda&quot; id=&quot;Rwanda&quot; class=&quot;land rw&quot; d=&quot;M529.4116,421.3544 C528.7768,420.0452 532.076,417.8062 532.0424,416.0614 C531.9824,412.9954 533.3632,411.666 535.9768,410.1456 C536.302,409.956 537.8668,408.9654 538.276,409.2836 C538.8292,409.712 539.0344,411.1914 539.9236,410.2088 C540.622,409.437 542.9068,406.0398 544.1836,406.4864 C543.5884,408.2442 545.0986,410.4636 545.899,411.7668 C546.8998,413.3952 547.918,416.1956 547.6516,418.0652 C547.3156,420.417 545.9752,420.723 543.9892,419.9684 C541.7344,419.1114 541.1872,421.155 539.2516,419.4452 C538.9732,421.568 539.1532,423.8838 536.5852,424.4168 C535.2772,424.688 534.058,424.8582 533.416,423.549 C532.7104,422.1092 530.8444,422.2244 530.6944,423.9452 C529.8832,423.1842 529.4884,422.481 529.4116,421.3544&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_SaintHelena&quot; id=&quot;Saint_Helena&quot; class=&quot;land coast sh&quot; d=&quot;M204.3974,574.0302 C204.7706,573.4446 204.803,572.8398 204.4934,572.2158 C203.7722,572.7174 203.741,573.4542 204.3974,574.0302&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Saint_Helena_circle&quot; class=&quot;circle sh&quot; d=&quot;M204.3178,578.7414 C211.8062,578.7414 211.8062,567.5044 204.3178,567.5044 C196.8236,567.5044 196.8236,578.7414 204.3178,578.7414&quot;&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_SaoTomeAndPrincipe&quot; id=&quot;Sao_Tome_and_Principe&quot; class=&quot;land coast st&quot;&gt;
+   &lt;path id=&quot;Sao_Tome_and_Principe&quot; d=&quot;M324.3796,395.2542 C325.1944,394.8102 326.0608,394.1142 326.3488,393.1866 C326.4976,392.7078 326.422,391.1094 325.5208,391.359 C323.4412,391.9338 324.1408,393.765 324.3796,395.2542&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;Sao_Tome_and_Principe&quot; d=&quot;M332.4076,379.6194 C332.7808,379.0338 332.8132,378.429 332.5036,377.805 C331.7824,378.3066 331.7512,379.0434 332.4076,379.6194&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path id=&quot;Sao_Tome_circle&quot; class=&quot;circle st&quot; d=&quot;M327.4892,391.8128 C334.8952,391.8128 334.8952,380.6998 327.4892,380.6998 C320.078,380.6998 320.078,391.8128 327.4892,391.8128&quot;&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Senegal&quot; id=&quot;Senegal&quot; class=&quot;land sn&quot; d=&quot;M108.0316,242.5028 C107.5036,242.4896 107.044,242.6624 106.6516,243.0212 C106.4992,241.5488 109.2544,241.0866 110.1064,240.2382 C111.9628,238.3866 113.452,235.899 114.5392,233.5338 C115.06,232.4012 117.5692,221.606 120.2092,224.0838 C121.396,225.1988 127.7056,224.0766 128.716,222.8994 C130.276,221.0804 136.4032,223.1214 137.6956,224.6658 C139.4416,226.7516 139.66,227.5974 142.5208,227.8892 C144.0772,228.0474 145.8064,231.0918 145.4776,232.5978 C145.3252,233.2952 147.5908,234.524 147.9904,235.2608 C148.4896,236.181 148.7344,237.2516 149.458,238.0386 C150.1672,238.8104 151.6084,238.9038 152.0776,239.8532 C152.7628,241.2402 154.8448,242.0094 155.0356,243.6284 C155.122,244.3532 153.9232,245.2028 154.7548,245.9456 C155.4448,246.5624 155.9344,246.9642 156.04,248.024 C156.1528,249.1446 157.132,251.8578 156.22,252.705 C155.272,252.9114 155.1868,253.3724 155.9668,254.0886 C156.1576,254.6168 156.4612,255.0608 156.8776,255.4184 C157.7008,255.8816 156.9016,256.779 158.0596,257.1066 C158.6848,254.6538 160.6564,258.914 160.9984,259.587 C161.5084,260.5914 161.7868,261.3488 161.5012,262.514 C161.1784,263.8338 162.0544,265.5294 161.5996,266.6094 C160.1068,265.9674 158.4832,266.9718 156.9028,266.6958 C155.2576,266.4092 154.3076,267.3706 152.7532,267.5826 C151.1644,267.7994 148.612,264.9764 147.28,265.8608 C146.239,266.5518 146.6202,264.6022 146.3956,264.536 C144.9896,264.1202 145.4662,263.8738 144.2788,263.8718 L129.1072,263.8454 C127.1224,263.842 126.2906,263.9606 124.7944,265.1418 C123.4828,266.1776 121.6826,266.0816 119.7316,266.013 C118.0418,265.9538 116.8624,266.9618 115.2844,267.215 C114.4948,267.3422 113.6584,267.0776 112.9624,267.561 C112.8028,267.17 111.9736,266.3202 112.4068,265.8452 C113.4952,264.65 114.1156,264.0582 115.5544,264.9714 C116.6404,265.6614 117.9904,264.5912 119.1448,264.5684 C119.9896,264.5516 120.4084,265.2018 121.27,264.9284 C121.9384,264.7158 122.2528,264.8576 122.8732,265.0592 C123.976,265.418 123.8968,262.6376 125.1424,262.2044 C123.2908,262.3376 124.3648,263.9072 123.2344,264.7098 C122.2624,265.4012 119.6632,264.4794 119.3464,263.3276 C118.672,266.2278 112.8856,264.117 114.1624,262.6364 C113.62,263.4152 113.6584,264.717 112.5304,264.969 C112.336,264.2576 112.5364,263.6826 113.1304,263.2424 C111.5884,263.582 112.4452,261.2648 112.7836,260.2316 C113.2912,258.6848 115.043,258.592 116.4262,258.5884 L121.3678,258.5754 C122.2792,259.082 120.3166,258.2494 121.9264,257.1908 C123.3316,256.2664 124.786,256.8978 126.1672,256.5066 C127.702,256.0712 126.8846,253.8856 128.9188,255.1522 C131.7652,256.9246 134.6174,258.7766 137.9116,257.6804 C139.1708,257.2614 140.5786,256.0316 138.9652,255.1708 C136.9472,254.094 136.5382,255.633 134.9596,255.5588 C133.3556,255.4832 133.7728,253.088 131.9296,253.8234 C131.2324,254.1018 130.594,253.1354 130.3672,252.669 C129.8992,251.7076 128.4066,252.0418 127.5088,252.594 C126.2294,253.3808 125.9486,252.141 125.276,252.8396 C124.7846,253.3496 124.9598,253.9994 124.333,254.3488 L115.3318,254.3026 C115.6978,253.561 114.982,253.0592 114.0784,252.963 C114.226,252.2468 114.6892,251.9576 115.3744,252.2718 C115.2148,251.5352 115.2712,250.8152 115.5424,250.112 C115.0192,251.1018 114.3784,251.8412 113.2144,252.0126 C112.9024,251.0516 115.6996,248.5842 116.6704,248.4702 C115.6132,248.0228 112.7752,250.581 112.7824,251.5806 C112.7836,248.7414 111.046,243.5994 108.0316,242.5028&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Seychelles&quot; id=&quot;Seychelles&quot; class=&quot;land coast sc&quot; d=&quot;M773.3956,445.1984 C773.4916,444.3582 773.1688,443.3108 772.0996,443.5544 C772.7404,443.8902 773.2432,444.4832 773.3956,445.1984&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path id=&quot;Seychelles_circle&quot; class=&quot;circle sc&quot; d=&quot;M774.1876,443.8798 C781.502,443.8798 781.502,432.9042 774.1876,432.9042 C766.8678,432.9042 766.8678,443.8798 774.1876,443.8798&quot;&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_SierraLeone&quot; id=&quot;Sierra_Leone&quot; class=&quot;land coast sl&quot;&gt;
+   &lt;path d=&quot;M146.9944,316.3746 C146.9104,316.5762 146.8264,316.7778 146.7424,316.9794 C147.9136,317.3442 149.0584,317.8446 150.2824,318.0162 C150.4948,317.5554 150.6532,316.917 150.1324,316.587 C149.2432,316.0194 147.9736,316.4346 146.9944,316.3746&quot; id=&quot;Sierra_Leone&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path class=&quot;land sl&quot; d=&quot;M143.4556,301.6854 C144.1948,301.0074 145.144,301.6002 145.9636,301.0806 C146.758,300.5778 146.5444,299.205 147.514,298.9206 C149.1124,298.4514 150.1924,295.3626 150.6928,293.9682 C151.5304,291.639 153.9976,293.3538 155.7352,292.191 C157.222,291.195 161.3848,291.1182 162.8716,292.2174 C164.3008,293.2734 164.9968,295.077 165.9256,296.5398 C166.4104,297.303 166.942,298.083 167.2648,298.9338 C167.5012,299.5566 166.8028,300.3138 167.236,300.759 C167.77,301.3086 168.364,301.1814 168.4192,302.1078 C168.4624,302.8326 168.1888,304.0902 168.7444,304.6734 C169.5232,305.493 166.9,308.1462 167.0476,309.549 C167.2456,309.1146 169.1824,308.0946 169.6396,307.821 C171.4168,306.753 171.1262,308.2172 170.6956,309.5562 C170.2036,311.086 167.9594,310.6684 167.7584,312.8878 C167.566,315.015 167.4946,314.9124 166.3216,316.1538 C165.3878,317.1418 164.4718,318.1238 163.138,319.095 C161.342,320.4028 160.5346,323.7278 159.7432,323.4874 C158.8988,323.2312 151.9156,319.4742 150.8008,318.5346 C152.7496,319.0878 151.2184,318.1674 150.7168,317.8446 C151.5496,317.2638 152.632,317.2602 153.3928,316.5486 C151.7896,316.7478 149.4556,316.9938 150.8008,314.6478 C149.746,317.0658 148.4344,314.3478 147.5308,314.4726 C146.8912,314.5614 146.3344,310.3194 146.3128,309.8082 C144.9916,310.1154 142.9204,309.0174 143.8888,307.3026 C144.4612,307.7538 145.0648,308.157 145.7008,308.5122 C144.1888,307.7526 146.4112,306.459 147.2608,306.525 C146.9152,305.9502 147.0748,306.0978 147.1768,305.4018 C146.3968,306.9702 145.636,306.165 144.6688,305.5746 C144.5356,305.8854 144.4192,306.201 144.3208,306.525 C143.1928,304.6218 144.1348,303.891 145.7848,303.501 C145.1476,302.6586 143.8876,302.733 143.4556,301.6854&quot; id=&quot;Sierra_Leone&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Somalia&quot; id=&quot;Somalia&quot; class=&quot;land so&quot; d=&quot;M640.4356,371.4114 C640.4356,369.723 640,367.388 640.7284,365.8076 C641.422,364.3028 642.8376,363.1408 643.7892,361.7848 C645.6948,359.0752 647.3476,354.225 650.236,352.4816 C652.8724,350.8892 655.9576,351.9186 658.2652,349.4408 C660.886,346.6266 663.3664,344.7882 667.3324,344.2148 C670.2988,343.7864 675.5128,345.8958 677.5624,343.179 L703.5904,312.4016 C700.444,312.4016 697.18,312.9366 694.0864,312.1424 C690.58,311.2424 687.232,309.5528 683.8432,308.2902 C680.35,306.9896 676.8748,305.6396 673.3888,304.3196 C670.162,303.0978 667.33,302.2446 664.8532,299.762 C664.0252,298.9304 663.7564,298.4936 662.608,298.1886 C661.4392,297.8778 660.9844,296.0658 660.4384,295.1072 C659.512,293.48 658.8952,292.1636 657.5824,290.7284 C656.0176,289.0158 654.1768,286.82 654.8896,284.2724 C655.672,281.4762 658.1208,279.022 659.2128,276.2656 C662.0952,277.8736 663.6832,281.7152 665.6548,284.2028 C668.1172,287.3082 671.8696,288.17 675.6772,286.9148 C677.1352,286.4348 679.0228,285.1338 680.2684,284.2148 C682.468,282.5898 683.0896,282.8636 685.7968,283.3088 C688.594,283.7696 689.8528,284.355 692.4652,282.7256 C693.784,281.9022 696.8104,278.8326 698.5096,279.4376 C700.3816,280.1022 701.6728,280.1852 703.6852,279.4926 C704.8984,279.075 706.048,278.4608 707.308,278.181 C708.7504,277.8594 709.7152,278.487 711.0904,278.624 C713.344,278.8494 715.0696,277.5126 717.0184,276.7196 C719.05,275.8926 721.3612,276.2588 723.4096,275.2184 C725.1148,274.3518 725.2876,272.1246 726.7372,271.412 C728.1424,270.7196 732.6808,271.923 732.1228,273.9512 C731.3992,276.5778 730.912,278.18 731.3956,280.9652 C731.7304,282.9054 732.2368,285.687 730.5412,287.175 C731.6692,287.5988 732.6016,287.336 732.3532,286.1382 C732.9124,286.5114 733.5208,286.7706 734.1772,286.9158 C733.8028,288.7772 729.5824,286.2272 729.5668,289.4946 C729.5548,292.1636 729.7792,294.8946 729.0364,297.5108 C728.4028,299.7452 727.0588,301.455 725.7952,303.3306 C724.324,305.5196 724.4956,308.762 722.6932,310.8702 C721.9936,311.6886 721.0288,311.8974 720.544,312.9776 C720.0616,314.0516 720.4792,315.2636 720.0772,316.4 C719.158,318.9918 717.304,321.05 716.0128,323.438 C714.2932,326.6154 714.154,330.1136 712.8112,333.399 C711.4468,336.7386 709.3204,339.6896 707.362,342.6956 C705.4624,345.6126 704.2036,348.9918 702.0292,351.7158 C699.6148,354.7412 697.1944,357.7578 694.7332,360.7446 C689.7856,366.7494 684.7552,371.63 678.1984,375.849 C675.4516,377.618 672.718,379.455 670.4236,381.8022 C667.84,384.4436 664.8856,387.0512 662.5504,389.9048 C660.2392,392.7294 657.8092,395.4788 655.5256,398.3142 C654.4132,399.6956 653.44,401.18 652.3576,402.5852 C651.688,403.4538 649.6828,406.5896 649.3264,404.7608 C649.3264,407.732 647.3858,410.5878 645.5942,412.8306 C645.748,410.5 643.4986,408.5726 641.8994,406.2714 C640.0736,403.6442 640.3644,401.8348 640.3344,398.7916 C640.2564,389.5912 640.4356,380.6082 640.4356,371.4114&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_SouthAfrica&quot; id=&quot;South_Africa&quot; class=&quot;land sa&quot; d=&quot;M413.7184,692.2184 C414.6184,691.37 415.9876,691.5428 416.1616,690.206 C416.3092,689.0756 417.1012,687.1136 418.3,686.7308 C419.8792,686.2256 419.6812,688.4336 420.7612,688.7444 C422.6212,689.2784 420.7228,691.136 421.6276,692.27 C423.214,694.2584 425.662,694.4408 427.9984,695.1836 C430.126,695.8604 431.8348,694.9076 433.9156,694.9592 C435.7816,695.0072 436.504,696.0644 438.4264,695.4956 C437.272,694.1864 438.7048,693.9788 439.4788,693.6752 C440.5468,693.2576 440.626,691.8752 441.9772,691.4816 C442.8484,691.2272 444.6532,691.1036 444.76,689.8964 L445.5892,652.5582 C446.6116,653.9984 448.3732,654.68 449.3248,656.18 C450.4096,657.8924 451.0772,660.1696 451.784,662.0668 C452.4968,663.982 453.1288,666.063 452.1988,668.037 C451.0084,670.563 450.1372,671.9442 451.3012,674.7594 C453.3592,672.3836 458.458,675.9942 460.6948,673.8212 C461.0656,673.461 460.7812,672.5396 461.326,672.3822 C461.9356,672.206 462.4672,672.332 463.0612,671.9924 C464.6128,671.1066 464.9368,669.0728 466.5484,668.114 C468.3208,667.0604 469.4548,665.9012 469.8616,663.7866 C470.2156,661.9458 470.1556,660.4158 471.6724,659.0408 C472.9936,657.843 474.7036,657.6018 476.3164,658.329 C477.6448,658.929 479.5612,661.7516 480.826,661.7168 C483.6664,661.6412 487.0024,665.0648 489.6928,662.937 C490.8976,661.9842 492.6988,663.3092 494.2,662.1918 C495.8032,660.9978 496.3864,659.0034 497.074,657.2022 C497.4388,656.2484 497.7628,655.2654 497.9212,654.2528 C498.1804,652.6064 497.3896,652.7276 499.06,652.2534 C500.0296,651.9788 502.8652,651.4962 503.398,650.5866 C504.3496,648.9608 506.2348,648.231 507.028,646.5114 C507.8932,644.6382 507.5236,642.7028 508.804,640.9376 C509.8996,639.4266 511.1296,639.2924 512.548,638.3034 C514.0012,637.2896 515.8552,635.7284 516.964,634.3304 C517.9084,633.1386 518.536,631.311 519.9568,630.5886 C521.3788,629.8664 523.0588,629.8002 524.5468,629.2578 C525.9724,628.7382 525.9316,628.1082 526.6288,627.0054 C527.2192,626.0696 528.8296,625.7658 529.8124,625.5608 C533.8216,624.7206 536.2696,627.3594 540.1696,627.387 C543.6412,627.4124 546.7972,626.073 547.9384,630.3342 C548.5744,632.7114 549.1204,635.1354 549.184,637.6064 C549.2428,639.855 550.618,641.786 551.4316,643.8054 C553.1752,648.1304 552.7496,652.2376 552.521,656.8028 C552.433,658.5584 552.531,660.709 551.8996,662.564 C551.5912,663.4696 551.4542,663.4136 551.7794,666.0202 C551.926,666.0874 550.7268,664.729 549.5284,664.3184 C548.3922,663.929 547.3814,664.0756 546.457,664.0858 C545.6936,665.578 544.5308,665.2712 543.659,667.162 C542.6088,669.4398 541.6662,672.9422 541.3402,672.6892 C543.0324,674.2148 543.607,675.4354 544.655,676.6364 C546.3616,678.5918 548.8186,679.6308 550.6842,677.78 C551.1938,677.2744 550.4298,677.001 552.2824,674.4116 L553.8322,674.4528 L559.2724,674.641 C558.244,679.1902 556.9432,683.2028 555.7276,687.7088 C555.0988,690.0404 553.8688,694.7768 550.6588,694.5476 C551.1664,695.6888 549.6748,695.648 548.9884,695.786 C548.128,695.96 547.3972,697.0412 546.8512,697.6484 C544.9204,699.7988 542.9464,702.3548 542.0596,705.0944 C541.5616,706.6328 540.2008,707.6048 539.4268,708.9824 C538.2352,711.1028 536.9884,713.204 535.594,715.1972 C533.0836,718.7876 530.3956,721.2092 527.0512,723.9656 C524.26,726.2672 522.6136,729.6092 519.826,731.9012 C516.2788,734.8172 512.8072,737.8268 509.1508,740.606 C506.2768,742.7888 502.9828,745.4024 499.282,745.9016 C497.5036,746.1428 495.742,745.1648 493.984,745.7024 C492.7108,746.0912 490.9372,747.6272 492.688,748.7264 C490.606,749.6516 488.296,746.9984 486.3448,748.3364 C484.0684,749.8976 483.5848,750.818 480.4612,749.6276 C478.1164,748.7348 475.1116,747.782 472.636,748.7264 C471.5272,749.15 472.0852,749.864 470.4052,749.2628 C469.4164,748.9088 467.6908,749.5208 467.188,748.3784 C467.1556,748.5224 467.1556,748.6664 467.188,748.8104 C464.6512,748.3988 460.5892,749.5676 459.2884,751.9292 C458.1544,753.9908 452.4844,751.862 450.6808,752.6396 C449.5984,753.1076 448.4572,752.7956 447.442,753.2756 C446.212,753.8564 444.8476,755.036 443.7664,755.876 C442.402,756.9392 442.942,756.728 441.364,756.3224 C440.6788,756.1472 439.906,756.5396 439.294,756.0368 C438.5968,755.462 437.938,754.7792 437.044,754.5116 C438.6148,752.3564 433.7896,752.2736 432.724,752.0876 C433.3792,750.4088 432.6952,748.9088 430.6972,749.2772 C429.3412,749.528 429.8356,751.1336 429.868,752.0876 C427.4032,751.1288 429.3532,748.1996 429.592,746.7044 C429.7996,745.4024 429.0892,744.0596 428.4376,742.9904 C428.062,742.3748 424.9912,738.1208 427.024,740.0876 C426.1552,739.2152 426.5332,738.2528 425.2384,738.2624 C424.1428,738.2696 425.3464,735.536 425.464,735.1556 C428.2588,736.796 428.9764,733.586 429.0268,731.4344 C429.1144,727.7516 428.0992,724.6436 426.1936,721.4864 C423.358,716.7884 420.8476,712.136 419.2204,706.8584 C418.4608,704.3936 417.9724,701.8508 417.0592,699.4328 C416.1472,697.0112 413.9488,694.8572 413.7184,692.2184&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;!-- Unfortunately Lesotho has to remain out of alphabetical order because of SVG lameness with z-index, since it's entirely surrounded by South Africa, it has to be drawn later. --&gt;
+  &lt;!-- this object is for drawing; the accessible object is listed in alphabetical order with the rest --&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Lesotho&quot; id=&quot;Lesotho&quot; class=&quot;land ls&quot; d=&quot;M506.2516,703.2704 C507.3976,704.402 507.2956,706.0328 508.2232,707.2016 C509.0236,708.212 508.75,709.55 509.5924,710.3828 C510.6484,711.4292 513.4036,714.9548 515.23,713.474 C516.0292,712.8248 516.7048,710.6612 517.2664,709.7228 C518.1532,708.2384 519.6592,708.5372 521.1016,708.134 C522.1516,707.84 524.398,706.9604 524.8456,705.8528 C525.4156,704.4392 525.4792,703.6304 526.4836,702.3824 C526.8628,701.9108 528.0712,700.6328 527.8684,699.9392 C527.2372,697.7564 526.3264,697.6172 524.8792,696.104 C523.7476,694.9196 522.5416,693.8144 521.4232,692.6228 C520.4548,691.5932 518.7976,693.2204 517.9144,693.5996 C516.9388,694.0184 516.472,694.4732 515.5156,695 C514.3948,695.6168 513.2296,695.3948 512.3368,696.5432 C511.3744,697.7804 510.8956,699.3116 510.0364,700.6148 C509.05,702.1076 507.6124,702.2816 506.2516,703.2704&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Sudan&quot; id=&quot;Sudan&quot; class=&quot;land sd&quot; d=&quot;M463.9996,262.5474 C464.6068,261.08 464.8456,259.8488 466.2004,258.8924 C467.4688,257.9972 468.4984,257.3418 467.6728,255.7866 C465.5044,251.7018 467.4568,250.881 470.4796,248.463 C469.6648,247.6832 468.3076,244.3892 469.6348,243.686 C471.7432,242.5664 472.0024,240.5502 473.458,238.6974 C475.2736,236.3838 472.2136,234.2072 475.1188,232.7696 C476.3644,232.1528 477.5356,232.8668 478.7584,232.226 C480.2404,231.4518 481.7884,232.0196 483.2728,232.4804 L482.4088,187.8114 C485.4004,187.8114 488.3932,187.8114 491.3848,187.8114 C491.272,180.8984 491.0234,173.8768 490.7906,166.9672 C502.379,166.9672 514.1308,167.0756 525.7204,167.0756 C531.4072,167.0756 537.0952,167.0756 542.7832,167.0756 C545.0104,167.0756 546.7208,167.46 548.0368,165.35 C549.3676,163.216 549.8402,166.1572 548.9368,166.9892 C551.6692,167.4594 554.4664,167.3924 557.2252,167.2784 C559.3372,167.1908 562.726,166.3866 564.6604,167.4402 C566.8912,168.656 571.4944,172.25 572.4676,167.5398 C572.9128,165.386 573.4696,164.936 575.6128,164.5674 C577.7764,164.1968 578.3704,163.0652 579.07,161.079 C579.4324,160.0484 579.9736,157.8066 581.668,158.6946 C582.9604,159.3714 585.1,156.1436 585.9088,155.325 C586.5208,157.988 588.334,158.9048 590.5768,160.0772 C592.5844,161.126 593.8132,163.6674 595.7344,165.0104 C598.2808,166.7898 597.0976,167.8532 597.9208,170.618 C598.6024,172.9064 601.4332,174.4592 601.546,176.925 C601.132,175.0484 599.4436,175.9088 600.2788,177.812 C600.8824,179.187 601.3924,180.9174 601.1908,182.4342 C600.7372,185.8604 601.7848,189.0018 601.9648,192.4866 C602.0908,194.9336 602.9584,200.5806 605.8744,201.0762 C607.5592,201.363 610.7092,206.618 611.83,205.6098 C611.9092,207.0882 614.649,206.9086 614.8494,208.5262 C614.5258,208.878 613.1482,211.2592 612.6036,212.1428 C611.8876,213.3044 608.9268,214.3656 607.626,214.8588 C605.2716,215.7504 605.5826,215.9782 604.9754,218.1142 C604.6634,219.2134 602.406,218.3062 601.5936,218.7862 C600.474,219.4474 600.6548,221.949 600.4292,223.167 C600.2084,224.3634 600.856,225.3126 600.5896,226.5272 C600.346,227.6418 599.7906,228.8134 599.3968,229.881 C598.3836,232.6276 598.0202,235.6542 596.8312,237.8816 C595.9822,239.4716 596.7034,242.332 596.8186,244.673 C596.926,246.8548 597.4262,250.2898 596.7628,253.406 C596.3038,255.5614 594.9812,257.223 594.926,259.4886 C594.9056,260.2914 595.1128,263.713 593.9716,263.8726 C592.2556,264.1114 590.8192,263.3012 589.7092,265.0626 C588.622,266.7896 587.9296,270.59 586.2052,271.725 C584.4128,272.905 585.6524,276.2836 584.005,278.2284 C583.3298,279.0256 585.4304,278.9846 584.0044,281.9516 C583.4396,283.1266 583.0996,283.7756 582.37,284.5784 C582.406,283.119 580.6372,282.0246 579.6004,283.3338 C578.236,285.0594 578.4344,286.4904 578.5112,288.599 C578.5796,290.4744 577.7456,291.7266 577.1792,293.4668 C576.4796,295.611 576.494,297.8082 576.6668,300.0342 C576.8792,302.7642 578.5598,307.654 574.4006,308.0992 C573.1322,308.2348 571.567,307.6744 570.2218,307.7332 C568.1674,307.822 568.4992,309.02 568.2064,310.713 C567.9688,312.086 565.3094,313.0238 567.5666,314.333 C569.045,315.191 570.8202,314.851 572.3716,315.6542 C574.0888,316.5434 574.9204,317.5694 575.944,318.8006 C577.0864,320.1746 578.2162,322.8826 579.0652,323.2726 C580.1054,323.7504 580.7638,324.7946 582.0796,325.7906 C583.5152,326.8774 583.4384,329.18 584.1656,330.5936 C585.0308,332.2734 585.0904,334.179 585.9772,335.8784 C586.3048,336.5082 586.5364,337.4528 587.1964,337.8234 C587.9776,338.2614 587.68,339.2408 588.334,339.873 C589.3526,338.5594 590.5288,338.7826 591.5934,339.6942 C592.6262,340.5784 592.3036,340.2234 592.6564,341.1342 C593.0596,342.1664 592.39,343.419 592.39,344.4728 C592.39,345.7988 593.1856,346.5104 593.95,347.4762 C589.708,347.706 584.6996,347.3234 580.5692,347.947 C577.9174,348.3474 575.6912,352.6256 573.9752,354.656 C573.6572,355.0316 571.5686,356.5694 570.921,356.5604 C569.1736,356.5358 567.728,354.8984 566.395,355.5956 C564.0074,356.8446 558.6996,356.5074 559.738,358.9674 C558.13,358.388 557.4764,357.807 556.5812,356.5734 C555.908,355.6446 554.7168,357.0344 554.0352,357.3404 C552.8496,357.8744 552.394,356.521 551.362,356.2882 C549.6652,355.9042 547.9936,357.92 547.462,359.2266 C547.276,357.7002 545.9104,357.6474 544.702,357.9306 C546.0448,355.005 541.6986,354.4018 540.195,352.7578 C539.5194,352.021 539.036,350.9744 538.4348,350.1762 C537.7904,349.3206 537.6532,348.3224 536.7556,347.5494 C534.0232,345.1952 534.6748,349.792 532.3954,349.6034 C530.1322,349.416 529.7558,347.6128 527.1304,349.2978 C525.3992,350.4088 524.9948,351.1864 523.1492,350.026 C522.662,349.7224 521.6976,349.3956 521.3452,348.9382 C520.625,348.0034 518.6936,347.8382 518.4848,346.3682 C518.2858,344.9682 517.8614,344.5108 516.6818,343.8136 C515.8322,343.312 515.5048,341.9816 514.8592,341.205 C513.9724,340.137 514.3408,338.775 514.234,337.5234 C514.0708,335.6214 512.02,335.2518 510.7216,334.3136 C509.2408,333.243 507.2656,332.9108 507.274,331.0458 C507.2776,330.2528 506.266,329.817 505.864,329.2484 C505.1416,328.2284 506.4688,327.4532 506.0896,326.4728 C505.7536,325.6028 504.3808,325.3364 503.8288,324.5804 C503.0656,323.5376 503.4244,322.8272 502.174,322.1072 C499.7512,320.7126 497.3824,319.743 495.5032,317.6396 C494.8408,316.899 496.0506,316.0386 496.0528,315.249 C496.0552,314.387 495.5408,313.9086 494.5796,313.2942 C493.6112,312.6752 493.312,311.9636 492.5836,311.2424 C491.902,310.5668 490.8772,310.3578 489.9652,310.2152 C488.638,310.0076 486.062,310.1708 486.062,308.2052 C486.062,307.6472 486.508,306.164 486.082,305.7066 C484.9072,304.443 481.3072,304.9088 479.7316,304.6218 C480.0592,303.7686 480.5872,302.9048 480.3316,301.9446 C480.0148,302.0598 479.7004,302.175 479.3836,302.2892 C479.1064,300.861 479.8528,300.567 480.5836,299.5674 C481.4284,298.412 481.2964,296.5494 481.2892,295.2006 C481.2724,292.0002 479.416,288.6714 477.1804,286.436 C475.93,285.1866 474.6244,283.9544 473.8804,282.3164 C473.1604,280.7348 475.2052,279.2408 474.2344,277.6136 C473.5732,276.506 471.6172,276.3018 470.8564,274.7778 C470.0884,273.2468 471.8536,271.5728 470.9128,270.0608 C470.59,270.1914 470.2756,270.3354 469.9648,270.4926 C470.3272,269.2098 469.9732,267.7218 469.318,266.6012 C468.7828,265.6832 470.5528,264.5636 469.3828,263.882 C467.4052,262.736 465.1756,265.7228 463.9996,262.5474&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Swaziland&quot; id=&quot;Swaziland&quot; class=&quot;land sz&quot; d=&quot;M541.1636,672.7946 C541.1636,672.7946 541.3858,672.7902 541.3858,672.7902 C542.5318,673.9218 542.4026,673.7108 543.3302,674.8794 C544.1306,675.8898 544.2278,676.3484 545.0702,677.1814 C546.1262,678.2278 548.445,679.6828 550.2714,678.202 C551.0706,677.5528 550.695,677.522 551.1934,676.5484 L552.2756,674.4352 L553.8154,674.4394 L553.7788,673.8256 C551.9198,666.421 554.2076,671.4324 552.4642,666.618 C551.497,665.5874 550.2628,664.4522 549.3872,664.0562 L546.4978,663.9406 C545.5354,665.1778 544.7786,665.3186 543.9194,666.6218 C543.4262,667.368 543.2374,667.9468 543.0018,668.4628 C542.7662,668.9788 541.844,672.3 541.1636,672.7946&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Togo&quot; id=&quot;Togo&quot; class=&quot;land tg&quot; d=&quot;M263.7316,279.8276 C265.5088,280.2956 267.3292,280.4706 269.0188,281.2278 C270.391,281.843 272.542,281.4712 273.564,280.9904 C272.8572,282.98 271.3516,286.37 272.956,288.2936 C273.8644,289.3832 277.1896,290.6168 277.3336,292.0952 C277.5472,294.3054 277.0516,296.8674 278.1784,298.886 C279.4408,301.1478 280.05,302.6924 280.002,305.3778 C279.9192,310.0532 279.9472,314.7018 280.072,319.3806 C280.0912,320.1114 280.3108,322.8942 279.0208,322.8548 C279.4564,324.2082 279.2104,325.7442 279.8572,327.0366 C280.3828,328.0892 281.1616,329.0648 281.2648,330.2838 C279.3604,330.4614 277.4572,331.3196 275.7328,332.0994 C275.7232,331.2114 273.5068,330.0956 272.9164,329.5652 C271.6516,328.4276 270.6718,327.6488 269.8726,326.1836 C268.7878,324.1916 270.8968,322.238 270.832,320.2088 C270.7888,318.8564 269.2864,318.7158 269.56,317.4114 C269.8888,315.8382 270.7756,314.9576 270.5704,313.226 C270.4612,312.3092 270.2764,311.3588 270.5632,310.4502 C270.742,309.8816 271.5484,309.3582 271.3576,308.7224 C270.8236,306.9426 269.0296,306.1664 268.3876,304.5392 C270.4,304.3458 269.062,301.4972 269.6644,300.206 C269.9956,299.4968 270.0676,298.305 269.7112,297.5912 C269.0236,296.2158 268.012,297.7124 267.0076,297.5408 C267.5668,296.7848 267.0268,295.874 268.3036,296.0706 C268.0324,294.6462 269.0416,292.1994 268.5616,291.0078 C267.736,288.9572 269.2036,288.7364 267.0904,287.5338 C265.99,286.9076 264.4456,284.7668 264.5836,283.4564 C264.6916,282.4266 265.6588,281.781 265.2496,280.6686 C265.0852,280.2246 264.0832,280.2032 263.7316,279.8276&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_Tunisia&quot; id=&quot;Tunisia&quot; class=&quot;land coast tn&quot;&gt;
+   &lt;path class=&quot;land tn&quot; d=&quot;M334.7476,41.8818 C334.954,40.8642 335.9068,40.4766 336.646,39.9138 C337.7968,39.0378 337.8926,38.2534 339.166,37.287 C340.1826,36.5156 340.9484,35.072 341.3414,33.7926 C342.1304,31.2244 341.9102,29.2256 342.0374,26.762 C342.1176,25.2104 341.14,23.8614 341.3476,22.3052 C341.5828,20.5376 343.5448,17.1774 340.7116,16.5666 C341.7304,15.3918 343.3888,14.7884 344.1748,13.3952 C344.4652,12.8802 344.2792,11.9984 344.986,11.7954 C345.7624,11.5734 346.2484,11.793 346.8652,11.1402 C348.2068,9.7196 349.6048,9.0894 351.4888,8.5506 C352.3636,8.3012 353.5648,7.6436 354.496,8.0156 C355.6012,8.4582 354.4984,8.9936 354.6196,9.8264 C355.54,9.8264 355.7584,9.368 355.2196,8.6166 C356.908,8.984 357.3916,8.7272 358.0756,10.2582 C358.3768,10.9316 357.4396,10.9962 358.3492,11.637 C359.0452,12.128 359.158,12.981 358.5088,13.5416 C358.5616,13.4862 359.2852,14.337 360.0232,14.0334 C361.0264,13.6196 361.8736,12.8012 362.692,12.1112 C363.0112,11.8424 364.1176,10.652 364.6348,10.887 C365.872,11.4512 365.7076,12.6704 365.1472,13.6854 C364.072,15.6332 360.3952,17.5014 360.2716,19.7166 C360.1804,21.38 361.1632,23.384 362.6656,24.1952 C364.9396,25.4204 364.864,25.478 365.4052,28.0868 C366.0868,31.3724 363.7912,34.7876 361.2676,36.7808 C358.7584,38.762 354.9208,39.878 357.4084,43.725 C357.9544,44.5712 358.684,45.368 359.6176,45.7928 C360.6568,46.2656 361.0792,45.615 362.0356,45.7484 C362.35,45.7916 362.5492,47.331 362.7412,47.6562 C363.2104,48.4494 364.5244,46.1106 365.2408,46.3712 C366.22,46.7274 365.5588,47.5232 365.8528,48.1854 C366.262,49.106 367.672,49.94 366.2008,50.0862 C366.9748,50.913 368.662,50.0036 369.3844,50.9538 C369.988,51.7494 368.9908,54.8418 369.208,56.0036 C369.5332,57.7446 370.8052,58.4872 368.8964,59.6298 C367.0086,60.7598 363.1454,62.0132 362.0224,63.5682 C361.3804,64.0794 361.605,65.5522 360.7082,65.9158 C358.8014,66.6892 356.99,67.3186 357.7444,70.2248 C358.3474,72.548 359.242,74.3742 357.8968,76.653 C356.3284,79.3112 354.9496,80.3274 352.1956,81.536 C351.5368,77.1992 350.2948,73.023 349.4416,68.7318 C348.5584,64.2898 348.1106,61.728 344.363,59.6454 C342.6118,58.6724 341.826,57.496 341.3856,55.552 C340.9992,53.842 340.2252,52.6304 338.6712,51.7172 C337.8948,51.26 337.1464,50.8892 336.6304,50.0732 C336.1024,49.2368 336.2838,48.1036 335.7552,47.2578 C334.6572,45.5006 334.0528,43.637 334.7476,41.8818&quot; id=&quot;Tunisia&quot;&gt;&lt;/path&gt;
+   &lt;path d=&quot;M363.8596,46.202 C363.718,45.0522 362.9236,45.986 362.6596,45.4242 C362.014,44.0504 362.6488,43.6098 363.8068,43.6256 C366.346,43.659 364.7584,45.1748 363.8596,46.202&quot; id=&quot;Tunisia&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Uganda&quot; id=&quot;Uganda&quot; class=&quot;land ug&quot; d=&quot;M535.7956,407.5304 C536.3836,405.9054 536.1952,403.718 536.4364,401.9946 C536.74,399.8262 536.9422,397.6758 537.2248,395.4942 C537.5688,392.8374 539.106,391.3182 539.3656,389.9336 C539.5238,389.0898 539.1964,388.232 539.3596,387.38 C539.6164,386.0396 540.8824,386.3838 541.4944,385.4142 C543.358,382.4648 546.3406,380.3636 548.863,377.756 C549.841,376.7432 551.1568,374.9826 551.5684,373.617 C551.9068,372.494 549.8188,371.3168 549.01,370.8848 C548.362,370.538 547.3852,371.5926 546.904,370.5284 C546.5236,369.6848 546.832,368.529 547.0072,367.6746 C547.5412,365.0564 546.5608,362.9408 547.8856,360.537 C548.2732,359.8364 547.3204,359.6512 547.5592,358.912 C547.8112,358.1296 548.5252,357.4724 549.1324,356.9706 C549.73,356.4788 550.4368,356.03 551.254,356.1776 C551.9224,356.2988 553.1788,357.6882 553.8388,357.3896 C554.6836,357.0078 555.922,355.4516 556.822,356.6382 C557.7868,357.9078 558.0472,358.3626 559.7332,358.97 C558.7874,357.3988 561.3976,356.799 562.6228,356.6276 C564.1408,356.4148 565.8728,355.1952 567.3584,355.368 C569.3924,355.6044 570.0196,357.4002 572.2396,355.8608 C573.832,354.7578 574.9384,353.1006 576.1504,351.6246 C576.8572,352.5788 577.6096,353.937 577.1824,355.167 C578.614,355.0218 577.6634,356.0654 579.0144,356.4718 C580.4084,356.891 580.9412,357.1602 580.3588,358.9472 C579.6008,361.2728 581.9246,363.7724 583.1344,366.53 C583.3716,367.0708 584.7688,368.8902 584.7424,369.3608 C584.6848,370.3554 585.8596,371.8316 586.102,372.8 C586.528,374.5196 586.1036,376.8628 585.3584,378.58 C584.7236,380.0452 583.504,380.2604 583.8148,381.9654 C583.9756,382.85 582.544,383.4044 581.89,383.7332 C580.6084,384.38 580.5544,386.1054 579.7876,387.3822 C579.214,388.3364 578.2628,388.8508 577.8656,389.8372 C577.3268,391.1728 576.8326,392.1518 576.2134,393.4478 C575.6172,393.408 573.4196,394.1386 573.776,392.2208 C572.381,392.7486 572.8192,393.1474 572.245,393.236 C570.5432,393.4986 570.5192,392.4754 571.7952,392.5556 C571.4676,391.8704 570.323,391.0148 570.7094,390.5248 C569.759,390.8728 570.3868,390.6232 569.0834,391.1104 L569.4968,391.8 C568.36,392.1038 569.2322,393.2156 567.7994,393.14 C567.9832,395.3738 564.6224,394.2232 564.2386,394.3004 C564.1706,394.3398 564.4184,392.2956 564.1684,392.636 C562.5428,396.4228 561.95,394.412 561.6448,394.6112 C561.7042,395.4152 561.0986,395.4666 559.6988,395.6048 C559.04,396.5392 557.485,396.5164 557.6138,396.8456 C558.839,399.9794 556.2626,400.4974 555.8588,402.6984 C555.5098,404.6022 556.2064,404.704 556.423,405.9604 C547.7962,405.9604 558.2958,406.3348 549.6928,405.6918 C546.7224,405.47 543.2316,406.078 541.4932,408.2306 C540.8892,408.9782 540.0426,411.075 538.987,410.3818 C538.7074,410.1982 538.5446,409.1896 538.054,409.2284 C537.214,409.2944 535.879,410.224 535.4824,410.5058 C535.6802,409.7232 536.781,408.3662 535.7956,407.5304&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;g role=&quot;img&quot; aria-labelledby=&quot;label_UnitedRepublicOfTanzania&quot; id=&quot;United_Republic_of_Tanzania&quot; class=&quot;land coast tz&quot;&gt;
+   &lt;path id=&quot;United_Republic_of_Tanzania&quot; d=&quot;M623.5888,457.9902 C623.9272,460.149 624.2356,460.9194 625.9432,462.4026 C627.1276,463.431 627.4708,458.217 625.5676,459.8022 C625.8784,458.4762 625.4764,456.3018 624.7888,455.133 C624.5044,456.0642 623.3032,456.9186 623.5888,457.9902&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;United_Republic_of_Tanzania&quot; d=&quot;M627.4756,478.4622 C628.4032,477.6258 629.944,477.0798 629.3716,475.5222 C628.8448,476.775 627.2704,476.8374 627.4756,478.4622&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;United_Republic_of_Tanzania&quot; d=&quot;M628.0756,447.3582 C628.2172,448.4586 629.164,449.3814 627.8968,449.5182 C628.198,449.7054 628.4896,449.9046 628.7716,450.1182 C626.9872,451.1322 628.588,452.6814 629.3356,451.047 C630.2212,449.109 629.9728,447.225 628.1608,446.4954 C628.132,446.7822 628.1032,447.0702 628.0756,447.3582&quot; class=&quot;&quot;&gt;&lt;/path&gt;
+   &lt;path id=&quot;United_Republic_of_Tanzania&quot; class=&quot;land tz&quot; d=&quot;M537.1916,451.526 C537.8836,446.4438 538.0766,449.9802 535.9302,445.4192 C535.5212,444.55 536.467,442.9956 536.0076,441.5434 C538.1076,441.3214 538.4536,441.1442 539.8144,439.5858 C540.9034,438.3388 542.675,436.6342 543.7766,435.2846 C544.5746,434.3072 542.8854,433.3542 543.2286,432.6378 C543.6414,431.7762 545.3632,432.472 545.0608,431.4508 C544.8616,430.7752 546.5704,429.8022 546.9304,429.4554 C547.96,428.4642 546.478,427.299 547.3756,426.3582 C544.618,427.1346 542.8876,425.475 544.4356,422.9982 C542.9356,423.1422 543.9904,422.0418 544.54,421.1694 C545.2384,420.0618 546.5914,420.5 547.177,419.3696 C548.2678,417.2624 546.5902,413.4824 545.6434,411.4558 C544.981,410.0384 542.6722,406.7942 544.8678,406.0758 C547.5722,405.191 553.5998,405.8768 556.5058,405.9626 C557.7148,410.5026 555.6118,410.5976 555.7704,411.1246 C556.3174,412.9426 554.7344,415.1026 554.7952,415.5484 C555.7424,416.8208 554.706,418.0382 554.9022,418.6954 C555.5592,420.896 556.1046,419.1506 556.3704,424.5186 C556.5106,423.3814 557.3456,422.7714 558.0258,424.0088 C557.7562,421.805 558.0518,421.5934 559.421,421.7692 C558.3876,421.2068 559.0664,419.9392 560.682,419.0382 C560.9968,419.3544 562.5722,422.7254 564.2294,420.5716 C564.014,421.0876 565.2244,421.267 565.4304,421.9518 C565.8364,423.3022 565.8232,425.7362 564.6416,425.201 L565.3372,426.1088 C565.925,425.425 564.8716,425.1798 567.2014,424.991 C565.8004,425.245 563.686,417.3296 570.9658,421.861 C571.2844,419.9198 576.2096,417.7184 574.718,417.5672 C572.9116,417.3838 573.1354,418.1428 572.1382,418.0096 C569.13,417.6074 569.269,417.0212 569.1034,417.1526 C569.8162,416.337 569.1512,416.3384 572.288,416.1178 C572.0114,414.9716 569.187,415.5956 569.8568,415.4052 C570.1642,415.1264 568.8964,414.6458 572.3612,414.1808 C572.7418,414.1298 573.269,413.5144 573.1082,412.818 C573.0106,412.3954 573.5258,412.7436 573.6928,412.526 C572.3272,411.0864 573.2894,410.9146 573.6148,410.729 C573.9342,410.547 574.2774,410.9116 575.8056,411.2144 C575.504,411.249 574.6434,409.9212 575.3386,409.1468 C575.7622,408.5896 575.3426,409.756 575.7364,409.2382 C575.2626,408.8942 575.4262,408.094 575.7796,407.6746 C576.1362,407.2218 576.6414,406.7262 576.9952,406.2718 L604.4038,423.4568 C606.7246,424.9292 609.6158,425.9882 610.307,428.8142 C610.6022,430.0262 609.6448,429.9834 609.3928,431.0226 C609.2068,431.7894 610.5328,432.6558 610.9684,433.2942 C612.4672,435.4938 615.4432,436.9638 617.4028,438.7326 C618.5692,439.7862 624.0962,443.348 623.8898,444.884 C623.5598,447.3488 622.6648,450.1194 621.6436,452.3898 C621.124,453.5454 620.5672,454.6902 620.1952,455.9046 C620.0116,456.4782 619.8952,457.0638 619.8484,457.6638 C619.7968,458.4846 620.554,459.2346 620.4244,459.963 C619.8712,463.0722 624.8968,463.3122 624.2716,466.629 C626.9872,465.7686 626.6248,468.9834 625.606,470.2722 C623.9836,472.3218 624.934,474.7446 623.8384,476.733 C625.7212,475.0194 625.6024,478.5738 625.1632,479.4834 C624.5176,480.819 624.004,482.4342 624.1984,483.9354 C624.3784,485.325 626.41,487.665 624.8824,487.965 C626.0416,488.1858 625.3636,490.3398 626.2612,490.251 C627.724,490.1082 626.974,491.7246 626.656,492.429 C626.0704,493.7322 627.592,494.211 627.8572,495.4014 C628.0048,496.0638 627.502,496.4562 627.8572,497.1234 C628.3228,497.997 628.534,498.5262 627.6412,499.281 C629.1604,498.999 629.758,500.2926 630.0532,501.525 C629.9206,499.3722 635.1954,502.4762 633.5094,504.857 C629.879,507.661 626.683,509.3062 623.3296,511.372 C622.1116,511.798 621.9388,511.0286 620.71,511.4498 C619.4188,511.8914 617.4664,513.4422 616.1548,513.873 C614.8588,514.2978 613.2918,511.7654 611.8252,512.5002 C610.1308,513.3492 609.4054,515.9226 607.6002,516.7208 C604.5864,518.0534 603.998,517.034 603.0432,516.2148 C601.1736,514.6108 600.4916,517.5578 598.434,517.3188 C596.069,517.0442 595.2656,517.366 593.9656,515.727 C592.9538,514.4516 591.7906,513.8616 590.3134,515.2278 C589.2702,516.1926 585.6538,516.0206 583.7944,515.6352 C583.621,515.4672 583.5302,514.504 583.2914,514.1488 C582.6352,513.173 581.9696,512.1912 581.426,511.11 C580.6688,509.6064 581.1874,507.9718 580.873,506.377 C580.4518,504.2482 580.8136,502.2786 580.2808,500.1846 C579.7252,498.0018 578.3642,495.98 576.6306,494.631 C574.942,493.3172 574.612,495.8662 574.768,496.257 C573.0448,494.4018 571.4248,496.1346 569.8072,494.3634 C569.2996,493.8066 567.3846,493.663 566.644,493.233 C565.3876,492.5036 564.2584,491.9058 562.3746,491.6298 C562.0762,491.5862 561.8182,491.1238 561.6778,490.8586 C561.0802,490.1206 560.593,490.2976 559.8286,489.915 C559.1122,489.5572 558.16,489.6786 557.452,489.303 C556.7992,488.9562 556.6456,488.1426 556.0468,487.8474 C555.556,487.605 554.9858,488.1926 554.4674,488.0414 C553.6226,487.7942 553.505,486.8958 553.0574,486.2714 C552.178,485.045 551.0616,484.819 549.8648,484.9026 C549.3018,483.6376 546.3276,477.5668 544.9534,473.9086 C543.6854,470.533 544.6338,464.2612 539.9072,462.4724 C539.194,462.2026 539.775,463.0148 538.9552,462.6362 C537.2218,461.836 535.4846,459.884 538.5602,456.8578 C539.7464,455.6908 537.7336,453.47 537.1916,451.4878&quot;&gt;&lt;/path&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/g&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Zambia&quot; id=&quot;Zambia&quot; class=&quot;land zm&quot; d=&quot;M465.1276,563.3984 C465.1276,553.5776 465.1618,543.7258 465.2878,533.9062 C465.301,532.8538 464.9212,530.6876 466.3852,530.367 C467.6668,530.0876 469.2484,530.45 470.5528,530.4848 C474.9148,530.5988 479.5492,531.3548 483.7864,529.9544 C482.4124,528.4386 483.1108,527.0816 483.7576,525.4424 C484.5412,523.4502 483.4888,521.8926 483.5932,519.9054 C483.7876,516.2276 485.3656,512.013 483.8704,508.3544 C485.248,508.3772 485.1126,509.877 486.5452,510.1724 C488.1302,510.499 487.4248,512.8522 486.8104,513.8022 C488.716,514.2212 488.5408,514.173 490.3972,513.3654 C492.202,512.5806 494.2672,512.0886 496.2292,511.9784 C495.5236,513.3654 495.8704,515.8914 496.9708,516.9942 C497.8348,517.8594 499.2472,517.3266 500.3176,517.8174 C501.8728,518.5316 503.0026,519.213 504.775,519.237 C507.6334,519.2756 510.286,521.162 511.2976,517.5234 C512.3992,513.5588 513.5704,517.9902 514.9468,519.194 C515.8888,520.0158 515.7616,521.336 516.4444,522.3354 C517.534,523.9316 518.7314,522.4192 519.6812,523.0436 C521.1182,523.9884 521.6734,524.8494 523.2314,524.8234 C525.065,524.7928 524.6356,527.7918 525.8584,528.9234 C527.6524,530.5842 527.9908,531.9788 529.0096,534.1038 C530.2948,536.786 534.0412,531.5886 535.4584,533.3276 C534.8404,533.8196 534.8152,534.6402 535.6036,534.9548 C536.9872,535.5078 536.5168,532.7048 536.5324,532.1048 C536.626,528.6294 536.7424,525.1398 536.7424,521.6636 C536.116,521.9 535.426,521.9636 534.7864,522.1626 C533.6884,522.5034 534.0094,523.4496 533.5354,524.1966 C532.714,525.4916 529.0768,522.5206 528.2416,521.649 C525.7194,519.0172 522.8274,516.8616 524.3134,512.4938 C525.1174,510.1304 525.7996,508.1768 526.4596,506.168 C526.915,504.7816 525.9956,502.4706 526.124,500.9082 C526.3304,498.362 527.5892,492.9896 524.1836,491.9382 C525.2852,489.0392 531.4036,487.4322 529.0624,483.5636 C534.11,482.4848 538.5976,482.1702 544.3504,480.8886 C544.3482,481.8618 543.1484,483.1014 543.1852,483.3464 C543.263,483.8662 544.8962,483.1346 544.0768,484.4912 C544.2476,484.816 544.8706,483.079 547.0088,485.2088 C549.2182,487.4094 550.0322,485.9528 549.8072,484.858 C552.2696,484.8828 552.895,485.753 553.9144,487.5582 C554.36,488.3476 554.8618,488.0254 555.5374,487.783 C556.4122,487.4686 556.7196,488.924 557.437,489.2254 C558.8878,489.835 561.5622,489.6328 562.0336,491.3478 C562.1746,491.8606 563.146,491.6708 563.7448,491.8578 C564.7408,492.169 565.6136,492.4906 565.9784,492.9148 C566.3432,493.3388 566.3284,493.8652 566.1484,494.4152 C565.674,495.863 569.0008,495.314 569.5864,497.4728 C569.782,498.194 569.2108,498.6152 569.3212,499.2848 C569.4904,500.3214 570.2776,500.6936 570.994,501.3294 C571.6156,501.8838 571.8484,503.7582 572.1136,504.5322 C572.6092,505.9806 570.9136,507.3572 569.5156,507.7842 C567.9928,508.2488 568.8724,509.4224 569.2468,510.5864 C569.8312,512.4066 568.7596,513.374 568.6996,515.1284 C568.6156,517.6484 567.4588,523.0424 570.6184,523.994 C569.332,525.3728 565.3984,526.0244 565.4236,528.3392 C565.4392,529.8522 565.8224,530.4134 565.5148,532.124 C565.0668,534.614 563.4566,536.077 562.8654,537.818 C562.5248,538.8212 563.6548,539.6266 564.4206,540.1672 C565.527,540.9484 566.0446,540.3736 566.4844,541.1384 C557.9332,545.1242 548.7848,547.545 540.0844,551.0912 C538.969,551.8724 541.9856,555.8358 541.4246,557.8284 C540.5918,557.9256 538.2868,558.2718 537.478,557.9468 C535.894,557.312 534.016,558.2924 532.5268,558.794 C530.4016,559.5092 527.6608,560.768 527.2012,563.2364 C527.0044,564.2876 527.2696,565.4336 526.7896,566.4294 C526.1104,567.8442 524.2348,568.0158 522.9412,568.526 C520.6936,569.4104 517.6576,571.2474 516.4144,573.369 C515.1532,575.5206 510.1996,584.9396 506.4748,582.7124 C505.6624,582.2262 504.7972,581.7714 503.8924,581.4848 C502.5724,581.0648 501.2596,582.8108 500.2192,582.2348 C499.4008,581.78 499.0798,580.2556 498.0436,580.5034 C497.8114,580.5588 495.1654,581.222 493.8496,579.9814 C492.3586,578.5756 491.6822,577.603 490.502,577.2858 C489.2398,577.0212 488.3896,578.344 486.0908,576.9814 C484.268,576.7006 483.0038,577.6666 481.2112,577.8054 C480.2866,577.877 478.516,578.5872 477.9256,578.361 C474.8104,577.1678 472.7288,573.5948 470.5292,571.1444 C469.3232,569.8016 468.3958,568.7144 467.0956,567.4712 C465.8752,566.304 465.5306,565.1374 465.1276,563.3984&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+  &lt;path role=&quot;img&quot; aria-labelledby=&quot;label_Zimbabwe&quot; id=&quot;Zimbabwe&quot; class=&quot;land zw&quot; d=&quot;M494.3236,580.4142 C495.4864,580.6854 496.6324,580.9326 497.7988,580.5044 C498.9328,580.088 499.4824,581.7788 500.2108,582.2478 C501.0136,582.7652 502.397,581.4968 503.1734,581.3768 C504.1754,581.222 505.6744,582.3514 506.542,582.7234 C509.0632,583.8034 510.5762,581.5038 511.9336,579.6728 C513.7456,577.2284 515.5384,574.9394 516.832,572.762 C517.4554,571.7124 518.318,571.295 519.25,570.562 C520.514,569.5682 521.9054,568.9454 523.4236,568.3136 C526.3802,567.083 526.918,566.7294 527.0908,563.373 C527.1748,561.7278 529.93,559.694 531.4204,559.1034 C532.8184,558.5502 534.5248,557.7896 536.0296,557.732 C537.8524,557.661 539.6908,558.2382 541.4992,557.78 C541.4992,561.2154 541.204,561.5468 545.0128,561.5468 C547.3864,561.5468 548.7112,562.1314 551.0488,563.072 C552.3514,563.596 555.355,565.3452 556.5792,566.0012 C558.351,566.9508 561.3188,566.5458 562.0264,568.0426 C562.5482,569.1464 563.4484,569.2278 564.4924,568.917 C564.2224,570.513 563.2828,571.4288 564.0316,573.075 C564.91,575.0094 563.8228,576.4278 564.4204,578.2412 C565.0012,580.0002 563.6884,581.9576 564.058,583.869 C564.316,585.194 565.1212,586.2836 563.9464,587.336 C563.0872,588.105 563.8732,589.905 563.3668,590.1918 C562.1284,590.8902 561.8152,590.7848 561.3352,592.3364 C561.1228,593.025 562.264,593.2746 562.6024,593.582 C562.8892,593.8436 562.648,594.8624 562.6,595.1576 C562.4836,595.863 561.9136,596.2436 561.7168,596.8952 C561.5644,597.4016 562.3456,599.288 562.5004,599.8544 C562.7884,599.738 563.0752,599.6214 563.3644,599.5064 C563.272,601.3914 564.0232,602.1354 562.8832,604.0506 C561.9652,605.5902 561.3736,608.1462 559.666,608.949 C557.7988,609.8262 559.228,611.0154 558.8764,612.4674 C558.4456,614.2424 557.0644,615.2718 558.4444,617.0516 C557.0104,616.0088 550.5142,625.6034 549.3172,626.3696 C548.1874,627.0926 547.611,628.6898 547.1354,628.6786 C546.1188,626.5712 542.1022,627.4454 540.0726,627.4506 C538.305,627.4552 536.6802,626.7706 535.039,626.204 C531.283,624.9076 530.1344,625.8324 529.9314,625.5892 C528.9394,624.4008 528.8132,624.9856 527.6764,624.362 C526.4162,623.6704 527.68,622.556 527.2768,622.0338 C525.4696,619.694 518.7644,621.1928 517.756,618.7266 C516.7714,616.3186 514.8516,614.0188 515.6716,611.6154 C516.7986,608.3122 515.176,607.556 511.8724,608.2326 C512.464,605.1092 511.6456,603.836 508.7536,602.9766 C506.464,602.2974 503.4016,599.738 502.1164,597.7398 C500.1556,594.6942 500.1292,590.8854 497.7844,587.9288 C496.7584,586.6386 493.4896,582.1364 494.3236,580.4142&quot;&gt;
+   &lt;set attributeName=&quot;opacity&quot; from=&quot;1&quot; to=&quot;0.5&quot; begin=&quot;mouseover&quot; end=&quot;mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/path&gt;
+ &lt;/g&gt;
+ &lt;g id=&quot;country_names&quot; aria-hidden=&quot;true&quot;&gt;&lt;!-- hidden because these are already spoken as labels --&gt;
+  &lt;text id=&quot;label_SaintHelena&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Saint Helena 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Saint_Helena.mouseover&quot; end=&quot;Saint_Helena.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Reunion&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Reunion 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Reunion.mouseover&quot; end=&quot;Reunion.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Mayotte&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Mayotte 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Mayotte.mouseover&quot; end=&quot;Mayotte.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_CanaryIslands&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Canary Islands 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Canary_Islands.mouseover&quot; end=&quot;Canary_Islands.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Madeira&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Madeira 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Madeira.mouseover&quot; end=&quot;Madeira.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Seychelles&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Seychelles 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Seychelles.mouseover&quot; end=&quot;Seychelles.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_SaoTomeAndPrincipe&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Sao Tome and Principe
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Sao_Tome_and_Principe.mouseover&quot; end=&quot;Sao_Tome_and_Principe.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Mauritius&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Mauritius
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Mauritius.mouseover&quot; end=&quot;Mauritius.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_ComoroIslands&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Comoro Islands 
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Comoro_Islands.mouseover&quot; end=&quot;Comoro_Islands.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_CapeVerde&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Cape Verde
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Cape_Verde.mouseover&quot; end=&quot;Cape_Verde.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Gambia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Gambia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Gambia.mouseover&quot; end=&quot;Gambia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Swaziland&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Swaziland
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Swaziland.mouseover&quot; end=&quot;Swaziland.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Eritrea&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Eritrea
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Eritrea.mouseover&quot; end=&quot;Eritrea.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Benin&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Benin
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Benin.mouseover&quot; end=&quot;Benin.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Zimbabwe&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Zimbabwe
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Zimbabwe.mouseover&quot; end=&quot;Zimbabwe.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_CentralAfricanRepublic&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Central African Republic
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Central_African_Republic.mouseover&quot; end=&quot;Central_African_Republic.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Liberia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Liberia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Liberia.mouseover&quot; end=&quot;Liberia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Malawi&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Malawi
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Malawi.mouseover&quot; end=&quot;Malawi.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Gabon&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Gabon
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Gabon.mouseover&quot; end=&quot;Gabon.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Togo&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Togo
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Togo.mouseover&quot; end=&quot;Togo.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Senegal&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Senegal
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Senegal.mouseover&quot; end=&quot;Senegal.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Rwanda&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Rwanda
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Rwanda.mouseover&quot; end=&quot;Rwanda.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_RepublicOfTheCongo&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Republic of the Congo
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Republic_of_the_Congo.mouseover&quot; end=&quot;Republic_of_the_Congo.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Djibouti&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Djibouti
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Djibouti.mouseover&quot; end=&quot;Djibouti.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Burundi&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Burundi
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Burundi.mouseover&quot; end=&quot;Burundi.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Lesotho&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Lesotho
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Lesotho.mouseover&quot; end=&quot;Lesotho.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_EquatorialGuinea&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Equatorial Guinea
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Equatorial_Guinea.mouseover&quot; end=&quot;Equatorial_Guinea.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_UnitedRepublicOfTanzania&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   United Republic of Tanzania
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;United_Republic_of_Tanzania.mouseover&quot; end=&quot;United_Republic_of_Tanzania.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Egypt&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Egypt
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Egypt.mouseover&quot; end=&quot;Egypt.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_SouthAfrica&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   South Africa
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;South_Africa.mouseover&quot; end=&quot;South_Africa.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Namibia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Namibia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Namibia.mouseover&quot; end=&quot;Namibia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Tunisia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Tunisia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Tunisia.mouseover&quot; end=&quot;Tunisia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Nigeria&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Nigeria
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Nigeria.mouseover&quot; end=&quot;Nigeria.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Guinea&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Guinea
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Guinea.mouseover&quot; end=&quot;Guinea.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Chad&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Chad
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Chad.mouseover&quot; end=&quot;Chad.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Morocco&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Morocco
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Morocco.mouseover&quot; end=&quot;Morocco.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Ethiopia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Ethiopia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Ethiopia.mouseover&quot; end=&quot;Ethiopia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Zambia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Zambia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Zambia.mouseover&quot; end=&quot;Zambia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Niger&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Niger
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Niger.mouseover&quot; end=&quot;Niger.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Sudan&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Sudan
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Sudan.mouseover&quot; end=&quot;Sudan.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Mauritania&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Mauritania
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Mauritania.mouseover&quot; end=&quot;Mauritania.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Mozambique&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Mozambique
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Mozambique.mouseover&quot; end=&quot;Mozambique.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Uganda&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Uganda
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Uganda.mouseover&quot; end=&quot;Uganda.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Ghana&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Ghana
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Ghana.mouseover&quot; end=&quot;Ghana.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_GuineaBissau&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Guinea-Bissau
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Guinea-Bissau.mouseover&quot; end=&quot;Guinea-Bissau.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Somalia&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Somalia
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Somalia.mouseover&quot; end=&quot;Somalia.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Mali&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Mali
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Mali.mouseover&quot; end=&quot;Mali.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_SierraLeone&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Sierra Leone
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Sierra_Leone.mouseover&quot; end=&quot;Sierra_Leone.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Madagascar&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Madagascar
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Madagascar.mouseover&quot; end=&quot;Madagascar.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Kenya&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Kenya
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Kenya.mouseover&quot; end=&quot;Kenya.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Libya&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Libya
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Libya.mouseover&quot; end=&quot;Libya.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_DemocraticRepublicOfTheCongo&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Democratic Republic of the Congo
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Democratic_Republic_of_the_Congo.mouseover&quot; end=&quot;Democratic_Republic_of_the_Congo.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_CoteDIvoire&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Cote d'Ivoire
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Cote_d'Ivoire.mouseover&quot; end=&quot;Cote_d'Ivoire.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Cameroon&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Cameroon
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Cameroon.mouseover&quot; end=&quot;Cameroon.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_BurkinaFaso&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Burkina Faso
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Burkina_Faso.mouseover&quot; end=&quot;Burkina_Faso.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Botswana&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Botswana
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Botswana.mouseover&quot; end=&quot;Botswana.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Angola&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Angola
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Angola.mouseover&quot; end=&quot;Angola.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+  &lt;text id=&quot;label_Algeria&quot; x=&quot;80&quot; y=&quot;790&quot; font-size=&quot;24&quot; visibility=&quot;hidden&quot;&gt;
+   Algeria
+   &lt;set attributeName=&quot;visibility&quot; from=&quot;hidden&quot; to=&quot;visible&quot; begin=&quot;Algeria.mouseover&quot; end=&quot;Algeria.mouseout&quot;&gt;&lt;/set&gt;
+  &lt;/text&gt;
+ &lt;/g&gt;
+
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10combobox_with_live_region_statushtml"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/combobox_with_live_region_status.html (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/combobox_with_live_region_status.html                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/combobox_with_live_region_status.html        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,350 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html lang=&quot;en&quot;&gt;
+&lt;head&gt;
+    &lt;title&gt;ARIA Combobox Example&lt;/title&gt;
+    &lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+    &lt;meta name=&quot;viewport&quot; content=&quot;width=480&quot;&gt;
+    &lt;style type=&quot;text/css&quot;&gt;
+        html, body {
+            color: #000;
+            background-color: #fff;
+            font-size: 100%;
+            font-family: sans-serif;
+        }
+        [hidden] {
+            display: none !important;
+        }
+        .pc {
+            /* pc is positioning context */ 
+            position: relative;
+            width: 30em;
+            max-width: 400px;
+        }
+        .pc input[role=&quot;combobox&quot;] {
+            font-size: 12px;
+            height: 1.5em;
+            width: 100%; /* of pc */
+            border: solid 1px #000;
+            min-height: 1em;
+            padding: 0.9em 0.5em;
+            box-sizing: border-box;
+        }
+        .pc [role=&quot;status&quot;] {
+            position: absolute;
+            top: 0.3em;
+            right: 0.5em;
+            font-size: 0.8em;
+            color: #777;
+        }
+        .pc ul[role=&quot;listbox&quot;] {
+            position: absolute;
+            margin: 0;
+            padding: 0;
+            list-style: none;
+            top: 1.5em;
+            left: 0;
+            background-color: #fff;
+            border: solid 1px #ccc;
+            width: 100%; /* of pc */
+            box-sizing: border-box;
+        }
+        .pc li[role=&quot;option&quot;] {
+            display: block;
+            margin: 0;
+            padding: 0.3em 0.5em;
+            list-style: none;
+            font-size: 12px;
+            cursor: pointer;
+        }
+        .pc li[role=&quot;option&quot;]:hover {
+            color: #000;
+            background-color: #ccc;
+        }
+        [aria-selected=&quot;true&quot;] {
+            color: #fff;
+            background-color: #666;
+        }
+    &lt;/style&gt;
+    &lt;script type=&quot;text/javascript&quot;&gt;
+
+    function $(id) {
+        return document.getElementById(id);
+    }
+        
+    var initComboBoxes = (function() {
+        
+        var field=null, status=null, list=null, options=null, selectedOption=null, hideAll=false, kRETURN=13, kESC=27, kUP=38, kDOWN=40;
+        
+        var submitHandler = function (e) {
+            updateMenuDisplay();
+            e.preventDefault();
+        };    
+
+        var keyUpHandler = function (e){
+            switch(e.keyCode) {
+                case kRETURN: return;
+                case kESC:    handleEscape(e);  break;
+                case kUP:     return;
+                case kDOWN:   return;
+            }
+            updateMenuDisplay();
+        };
+        
+        var keyDownHandler = function (e){
+            switch(e.keyCode) {
+                case kRETURN: handleReturn(e);    break; // Catch Return on keyDown, b/c keyUp fires after submit.
+                case kUP:     handleUpArrow(e);   break;
+                case kDOWN:   handleDownArrow(e); break;
+            }
+        };
+        
+        var handleEscape = function (e){
+            e.preventDefault();
+            clearField();
+        };
+
+        var handleUpArrow = function (e){
+            selectPreviousOption();
+            e.preventDefault();
+        };
+
+        var handleDownArrow = function (e){
+            selectNextOption();
+            e.preventDefault();
+        };
+
+        var handleReturn = function (e){
+            insertValue();
+            e.preventDefault();
+        };
+
+        var blurHandler = function (e){
+            hideMenu();
+        };
+
+        var focusHandler = function (e){
+            if (field.value) {
+                updateMenuDisplay();
+            } else {
+                hideMenu();
+            }
+        };
+
+        var mouseDownHandler = function (e) {
+            if (e.target.tagName.toLowerCase() === &quot;li&quot;) {
+                updateSelectedOption(e.target);
+                field.focus();
+                insertValue();
+            }
+        };
+
+        var updateMenuDisplay = function () {
+            filter();
+            list.hidden = hideAll ? true : false;
+            updateStatus();
+        };
+
+        var hideMenu = function () {
+            list.hidden = true;
+            updateStatus();
+        };
+
+        var clearField = function (){
+            if (field.value) field.value = '';
+            else if (field.textContent) field.textContent = '';
+            clearSelectedOption();
+        };
+
+        var clearSelectedOption = function (){
+            if (selectedOption) {
+                field.removeAttribute('aria-activedescendant');
+                selectedOption.removeAttribute('aria-selected');
+            }
+            selectedOption = null;
+            hideMenu();
+        };
+
+        var updateSelectedOption = function (el){
+            if (!el) {
+                return;
+            }
+            if (selectedOption) selectedOption.removeAttribute('aria-selected');
+            selectedOption = el;
+            el.setAttribute('aria-selected', 'true');
+            field.setAttribute('aria-activedescendant', el.id);
+        };
+
+        var selectNextOption = function () {
+            var so = shownOptions();
+            for (var i=0, c=so.length; i&lt;c; i++) {
+                var o = so[i];
+                if (o == selectedOption) {
+                    if (so[i+1]) updateSelectedOption(so[i+1]);
+                    return;
+                }
+            }
+            // otherwise, select the first option
+            if (!selectedOption &amp;&amp; so.length) {
+                updateSelectedOption(so[0]);
+            }
+        };
+
+        var selectPreviousOption = function () {
+            var so = shownOptions();
+            for (var i=so.length-1; i&gt;0; i--) {
+                var o = so[i];
+                if (o == selectedOption) {
+                    if (so[i-1]) updateSelectedOption(so[i-1]);
+                    return;
+                }
+            }
+            // otherwise, select the last option
+            if (!selectedOption &amp;&amp; so.length) {
+                updateSelectedOption(so[so.length-1]);
+            }
+        };
+        
+        var shownOptions = function () {
+            // It's possible this selector will fail on some Windows browsers. May need to make it a simple classname.
+            return list.querySelectorAll('li:not([hidden])');
+        };
+
+        var updateStatus = function () {
+            var itemCount = shownOptions().length;
+            var statusContent = &quot;&quot;;
+            if (!list.hidden &amp;&amp; itemCount) {
+                if (itemCount === 1) {
+                    statusContent = &quot;%@ item&quot;.replace(&quot;%@&quot;, itemCount);
+                } else {
+                    statusContent = &quot;%@ items&quot;.replace(&quot;%@&quot;, itemCount);
+                }
+            }
+            status.textContent = statusContent;
+        };
+
+        var insertValue = function (){
+            if (selectedOption) {
+                if (field.value) {
+                    field.value = selectedOption.textContent;
+                } else if (field.textContent) {
+                    field.textContent = selectedOption.textContent;
+                }
+                clearSelectedOption();
+            }
+        };
+
+        var filter = function () {
+            var s = field.value || field.textContent;
+            s = s.toUpperCase();
+            hideAll = true;
+            if (s=='') return;
+            for (var i=0, c=options.length; i&lt;c; i++) {
+                var o = options[i];
+                var t = o.textContent.toUpperCase();
+                // if typed string is not substring of state name or code (case insensitive), and is not exact match for state
+                if ((t.indexOf(s)==-1 &amp;&amp; o.id.indexOf(s)==-1) || t==s) { 
+                    o.hidden = true;
+                } else {
+                    o.hidden = false;
+                    hideAll = false;
+                }
+            }
+            clearSelectedOption();
+        };
+
+        var initCombo = function (){
+            // TODO: If time allows, update example to account for multiple comboboxes.
+            form = document.querySelector('form');
+            field = document.querySelector('[role=&quot;combobox&quot;]');
+            status = document.querySelector('[role=&quot;status&quot;]');
+            list = $(field.getAttribute('aria-owns'));
+            options = list.getElementsByTagName('li');
+            form.addEventListener('submit', submitHandler); // Search on iOS &quot;Go&quot; button.
+            field.addEventListener('keyup', keyUpHandler);
+            field.addEventListener('keydown', keyDownHandler);
+            field.addEventListener('blur', blurHandler);
+            field.addEventListener('focus', focusHandler);
+            list.addEventListener('mousedown', mouseDownHandler);
+        };
+
+        return initCombo;
+    }());
+
+    window.addEventListener('load', function () {
+        initComboBoxes()
+    });
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;p&gt;Focus the accessible combobox, type a few letters of a US state or territory (e.g. 'New'), then arrow down on a desktop browser, or submit the form on mobile browsers. You'll get a filtered autocomplete list as well as status update listing the total number of filtered results.&lt;/p&gt;
+    &lt;p&gt;Some &lt;a href=&quot;#&quot;&gt;focusable content&lt;/a&gt; before the combobox.&lt;/p&gt;
+    &lt;form class=&quot;pc&quot;&gt;
+        &lt;!-- Note that this field is labelled by itself, which in this case, is an explicit pointer to use the placeholder attribute value. --&gt;
+        &lt;input type=&quot;text&quot; tabindex=&quot;0&quot; id=&quot;state&quot; aria-labelledby=&quot;state&quot; role=&quot;combobox&quot; aria-autocomplete=&quot;list&quot; aria-owns=&quot;statelist&quot; placeholder=&quot;US State or Territory&quot; autocomplete=&quot;off&quot; autocorrect=&quot;off&quot; autocapitalize=&quot;off&quot;&gt;
+        &lt;div role=&quot;status&quot; aria-live=&quot;polite&quot;&gt;
+            &lt;!-- This is the list status live region: e.g. &quot;4 items.&quot; --&gt;
+            &lt;!-- The attribute value, aria-live=&quot;polite&quot; is the default for role=&quot;status&quot;. --&gt;
+            &lt;!-- It's just included here for demo clarity. --&gt;
+        &lt;/div&gt;
+        &lt;ul role=&quot;listbox&quot; id=&quot;statelist&quot; hidden&gt;
+            &lt;li id=&quot;AL&quot; role=&quot;option&quot;&gt;Alabama&lt;/li&gt;
+            &lt;li id=&quot;AK&quot; role=&quot;option&quot;&gt;Alaska&lt;/li&gt;
+            &lt;li id=&quot;AS&quot; role=&quot;option&quot;&gt;American Samoa&lt;/li&gt;
+            &lt;li id=&quot;AZ&quot; role=&quot;option&quot;&gt;Arizona&lt;/li&gt;
+            &lt;li id=&quot;AR&quot; role=&quot;option&quot;&gt;Arkansas&lt;/li&gt;
+            &lt;li id=&quot;CA&quot; role=&quot;option&quot;&gt;California&lt;/li&gt;
+            &lt;li id=&quot;CO&quot; role=&quot;option&quot;&gt;Colorado&lt;/li&gt;
+            &lt;li id=&quot;CT&quot; role=&quot;option&quot;&gt;Connecticut&lt;/li&gt;
+            &lt;li id=&quot;DE&quot; role=&quot;option&quot;&gt;Delaware&lt;/li&gt;
+            &lt;li id=&quot;DC&quot; role=&quot;option&quot;&gt;District of Columbia&lt;/li&gt;
+            &lt;li id=&quot;FL&quot; role=&quot;option&quot;&gt;Florida&lt;/li&gt;
+            &lt;li id=&quot;GA&quot; role=&quot;option&quot;&gt;Georgia&lt;/li&gt;
+            &lt;li id=&quot;GU&quot; role=&quot;option&quot;&gt;Guam&lt;/li&gt;
+            &lt;li id=&quot;HI&quot; role=&quot;option&quot;&gt;Hawaii&lt;/li&gt;
+            &lt;li id=&quot;ID&quot; role=&quot;option&quot;&gt;Idaho&lt;/li&gt;
+            &lt;li id=&quot;IL&quot; role=&quot;option&quot;&gt;Illinois&lt;/li&gt;
+            &lt;li id=&quot;IN&quot; role=&quot;option&quot;&gt;Indiana&lt;/li&gt;
+            &lt;li id=&quot;IA&quot; role=&quot;option&quot;&gt;Iowa&lt;/li&gt;
+            &lt;li id=&quot;KS&quot; role=&quot;option&quot;&gt;Kansas&lt;/li&gt;
+            &lt;li id=&quot;KY&quot; role=&quot;option&quot;&gt;Kentucky&lt;/li&gt;
+            &lt;li id=&quot;LA&quot; role=&quot;option&quot;&gt;Louisiana&lt;/li&gt;
+            &lt;li id=&quot;ME&quot; role=&quot;option&quot;&gt;Maine&lt;/li&gt;
+            &lt;li id=&quot;MD&quot; role=&quot;option&quot;&gt;Maryland&lt;/li&gt;
+            &lt;li id=&quot;MA&quot; role=&quot;option&quot;&gt;Massachusetts&lt;/li&gt;
+            &lt;li id=&quot;MI&quot; role=&quot;option&quot;&gt;Michigan&lt;/li&gt;
+            &lt;li id=&quot;MN&quot; role=&quot;option&quot;&gt;Minnesota&lt;/li&gt;
+            &lt;li id=&quot;MS&quot; role=&quot;option&quot;&gt;Mississippi&lt;/li&gt;
+            &lt;li id=&quot;MO&quot; role=&quot;option&quot;&gt;Missouri&lt;/li&gt;
+            &lt;li id=&quot;MT&quot; role=&quot;option&quot;&gt;Montana&lt;/li&gt;
+            &lt;li id=&quot;NE&quot; role=&quot;option&quot;&gt;Nebraska&lt;/li&gt;
+            &lt;li id=&quot;NV&quot; role=&quot;option&quot;&gt;Nevada&lt;/li&gt;
+            &lt;li id=&quot;NH&quot; role=&quot;option&quot;&gt;New Hampshire&lt;/li&gt;
+            &lt;li id=&quot;NJ&quot; role=&quot;option&quot;&gt;New Jersey&lt;/li&gt;
+            &lt;li id=&quot;NM&quot; role=&quot;option&quot;&gt;New Mexico&lt;/li&gt;
+            &lt;li id=&quot;NY&quot; role=&quot;option&quot;&gt;New York&lt;/li&gt;
+            &lt;li id=&quot;NC&quot; role=&quot;option&quot;&gt;North Carolina&lt;/li&gt;
+            &lt;li id=&quot;ND&quot; role=&quot;option&quot;&gt;North Dakota&lt;/li&gt;
+            &lt;li id=&quot;MP&quot; role=&quot;option&quot;&gt;Northern Marianas Islands&lt;/li&gt;
+            &lt;li id=&quot;OH&quot; role=&quot;option&quot;&gt;Ohio&lt;/li&gt;
+            &lt;li id=&quot;OK&quot; role=&quot;option&quot;&gt;Oklahoma&lt;/li&gt;
+            &lt;li id=&quot;OR&quot; role=&quot;option&quot;&gt;Oregon&lt;/li&gt;
+            &lt;li id=&quot;PA&quot; role=&quot;option&quot;&gt;Pennsylvania&lt;/li&gt;
+            &lt;li id=&quot;PR&quot; role=&quot;option&quot;&gt;Puerto Rico&lt;/li&gt;
+            &lt;li id=&quot;RI&quot; role=&quot;option&quot;&gt;Rhode Island&lt;/li&gt;
+            &lt;li id=&quot;SC&quot; role=&quot;option&quot;&gt;South Carolina&lt;/li&gt;
+            &lt;li id=&quot;SD&quot; role=&quot;option&quot;&gt;South Dakota&lt;/li&gt;
+            &lt;li id=&quot;TN&quot; role=&quot;option&quot;&gt;Tennessee&lt;/li&gt;
+            &lt;li id=&quot;TX&quot; role=&quot;option&quot;&gt;Texas&lt;/li&gt;
+            &lt;li id=&quot;UT&quot; role=&quot;option&quot;&gt;Utah&lt;/li&gt;
+            &lt;li id=&quot;VT&quot; role=&quot;option&quot;&gt;Vermont&lt;/li&gt;
+            &lt;li id=&quot;VA&quot; role=&quot;option&quot;&gt;Virginia&lt;/li&gt;
+            &lt;li id=&quot;VI&quot; role=&quot;option&quot;&gt;Virgin Islands&lt;/li&gt;
+            &lt;li id=&quot;WA&quot; role=&quot;option&quot;&gt;Washington&lt;/li&gt;
+            &lt;li id=&quot;WV&quot; role=&quot;option&quot;&gt;West Virginia&lt;/li&gt;
+            &lt;li id=&quot;WI&quot; role=&quot;option&quot;&gt;Wisconsin&lt;/li&gt;
+            &lt;li id=&quot;WY&quot; role=&quot;option&quot;&gt;Wyoming&lt;/li&gt;
+        &lt;/ul&gt;
+    &lt;/form&gt;
+    &lt;p&gt;Some &lt;a href=&quot;#&quot;&gt;focusable content&lt;/a&gt; after the combobox.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssimgbuttonspng"></a>
<div class="binary"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/buttons.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/buttons.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssimgiconspng"></a>
<div class="binary"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/icons.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/img/icons.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexcssscreencss"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/screen.css (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/screen.css                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/css/screen.css        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,199 @@
</span><ins>+html, body {
+  font-family: &quot;helvetica neue&quot;, arial, helvetica, sans-serif;
+  font-size:24px;
+  color:#333;
+  background-color:#fff;
+  margin:30px;
+  padding:0;
+}
+.toolbar{
+  margin:0 0 -1px 0;
+  padding:19px;
+  height:51px;
+  background-color:#7c8992; /* to #5e6a75 */
+  border:solid 1px #181b1e;
+}
+
+/* standard push buttons */
+.buttons {
+  margin:0;
+  padding:0;
+  list-style-type:none;
+  display:inline;
+}
+.buttons li {
+  margin:0;
+  padding:0;
+  list-style-type:none;
+  display:inline;
+}
+.buttons a {
+  color:#fff;
+  display:block;
+  position:relative;
+  float:left;
+  width:102px;
+  height:52px;
+  margin:0 -1px 0 0;
+  padding:0;
+  text-indent:-9999px;
+  overflow:hidden;
+  background:transparent url(./img/buttons.png) 0 0 no-repeat;
+  /*outline:0;*/
+}
+#btn_del { margin-left:10px; background-position: -222px 0;}
+#btn_get { background-position:0 0; }
+#btn_com { background-position:-101px 0; }
+
+.buttons a:active, .buttons a:focus {
+  z-index:2; /* raise z-index when focused, so focus ring shows higher than sibling elements that appear later in the DOM */
+}
+
+#btn_del:hover, #btn_del:focus { background-position:-222px -52px; }
+#btn_get:hover, #btn_get:focus { background-position:   0px -52px; }
+#btn_com:hover, #btn_com:focus { background-position:-101px -52px; }
+#btn_del:active { background-position:-222px -104px; }
+#btn_get:active { background-position:   0px -104px; }
+#btn_com:active { background-position:-101px -104px; }
+
+.buttons a span {
+  display:block;
+  position:absolute;
+  top:50%;
+  left:50%;
+  margin:-16px 0 0 -16px;
+  height:32px;
+  width:32px;
+  background:transparent url(./img/icons.png) 0 0 no-repeat;
+}
+#btn_del span { background-position:-64px 0; }
+#btn_get span { background-position:0 0; }
+#btn_com span { background-position:-32px 0; }
+
+
+/* segmented control (view selector like radio buttons, not like tabs) */
+.segmentedcontrol{
+  margin:0;
+  padding:0;
+  list-style-type:none;
+  display:inline;
+}
+.segmentedcontrol li {
+  margin:0;
+  padding:0 -1px 0 0;
+  list-style-type:none;
+  display:block;
+  position:relative;
+  float:left;
+  width:102px;
+  height:52px;
+  text-indent:-9999px;
+  overflow:hidden;
+  background:transparent url(./img/buttons.png) 0 0 no-repeat;
+  cursor:pointer;
+  /*outline:0;*/
+}
+.segmentedcontrol li:active, .segmentedcontrol li:focus {
+  z-index:2; /* raise z-index when focused, so focus ring shows higher than sibling elements that appear later in the DOM */
+}
+#radio_list { background-position:   0px  0; margin-left:10px; }
+#radio_ico1 { background-position:-446px  0; width:99px; }
+#radio_ico2 { background-position:-101px 0; }
+
+#radio_list:hover, #radio_list:focus { background-position:   0px -52px; }
+#radio_ico1:hover, #radio_ico1:focus { background-position:-446px -52px; }
+#radio_ico2:hover, #radio_ico2:focus { background-position:-101px -52px; }
+
+#radio_list.active, #radio_list:active { background-position:   0px -104px; }
+#radio_ico1.active, #radio_ico1:active { background-position:-446px -104px; }
+#radio_ico2.active, #radio_ico2:active { background-position:-101px -104px; }
+
+.segmentedcontrol li span {
+  display:block;
+  position:absolute;
+  top:50%;
+  left:50%;
+  margin:-16px 0 0 -16px;
+  height:32px;
+  width:32px;
+  background:transparent url(./img/icons.png) 0 0 no-repeat;
+}
+#radio_list span { background-position: -96px 0; }
+#radio_ico1 span { background-position:-128px 0; }
+#radio_ico2 span { background-position:-160px 0; }
+#radio_list.active span, #radio_list:active span, #radio_list:hover span, #radio_list:focus span { background-position: -96px -32px; }
+#radio_ico1.active span, #radio_ico1:active span, #radio_ico1:hover span, #radio_ico1:focus span { background-position:-128px -32px; }
+#radio_ico2.active span, #radio_ico2:active span, #radio_ico2:hover span, #radio_ico2:focus span { background-position:-160px -32px; }
+
+
+/* selectable item list */
+.itemlist {
+  font-weight:bold;
+  display:block;
+  margin:0;
+  padding:0;
+  list-style-type:none;
+  border:solid 1px #181b1e;
+  height:1%;
+  overflow:auto;
+}
+.itemlist li {
+  display:block;
+  margin:0;
+  padding:5px 10px;
+  list-style-type:none;
+  border-bottom:solid 1px #eee;
+  outline:0;
+  position:relative;
+}
+.itemlist.style_ico1 li, .itemlist.style_ico2 li {
+  display:block;
+  float:left;
+  margin:10px;
+  width:80px;
+  padding:85px 5px 5px 5px;
+  list-style-type:none;
+  border-bottom:0;
+  font-size:11px;
+  text-align:center;
+  border-radius:8px;
+  -o-border-radius:8px;
+  -ie-border-radius:8px;
+  -moz-border-radius:8px;
+  -webkit-border-radius:8px;
+}
+.itemlist.style_ico2 li {
+  width:180px;
+  padding:190px 5px 10px 5px;
+  font-size:16px;
+}
+.style_ico1 span, .style_ico2 span {
+  display:block;
+  position:absolute;
+  top:12px;
+  left:50%;
+  margin-left:-33px;
+  background:#999;
+  width:66px;
+  height:66px;
+  border-radius:2px;
+  -o-border-radius:2px;
+  -ie-border-radius:2px;
+  -moz-border-radius:2px;
+  -webkit-border-radius:2px;
+}
+.style_ico2 span {
+  margin-left:-83px;
+  width:166px;
+  height:166px;
+}
+.itemlist li.active {
+  background-color:#d0d1d3;
+}
+.itemlist li:focus, .itemlist li.active:focus {
+  color:#000;
+  background-color:#9bbbdb;
+}
+.itemlist li:last-child {
+  border-bottom:0;
+}
</ins></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexfinalhtml"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/final.html (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/final.html                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/final.html        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+&lt;!DOCTYPE HTML&gt;&lt;!-- HTML 5 --&gt;
+&lt;html lang=&quot;en&quot;&gt;
+&lt;head&gt;
+  &lt;title&gt;WWDC Demo&lt;/title&gt;
+  &lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+  &lt;link rel=&quot;stylesheet&quot; href=&quot;./css/screen.css&quot; type=&quot;text/css&quot;&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;p&gt;Some &lt;a href=&quot;#&quot;&gt;focusable content&lt;/a&gt; before the application widgets.&lt;/p&gt;
+
+
+&lt;div class=&quot;toolbar&quot;&gt;
+
+  &lt;ul class=&quot;buttons&quot; role=&quot;toolbar&quot;&gt;
+    &lt;li&gt;&lt;a href=&quot;#&quot; role=&quot;button&quot; id=&quot;btn_get&quot;&gt;&lt;span&gt;Get New Mail&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;#&quot; role=&quot;button&quot; id=&quot;btn_com&quot;&gt;&lt;span&gt;Compose New Message&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;#&quot; role=&quot;button&quot; id=&quot;btn_del&quot;&gt;&lt;span&gt;Delete&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+  &lt;/ul&gt;
+  
+  &lt;!-- js transforms this control into managed-focus radiogroup --&gt;
+  &lt;ul class=&quot;segmentedcontrol&quot;&gt;
+    &lt;li id=&quot;radio_list&quot;&gt;&lt;span&gt;List View&lt;/span&gt;&lt;/li&gt;
+    &lt;li id=&quot;radio_ico1&quot;&gt;&lt;span&gt;Small Icon View&lt;/span&gt;&lt;/li&gt;
+    &lt;li id=&quot;radio_ico2&quot;&gt;&lt;span&gt;Large Icon View&lt;/span&gt;&lt;/li&gt;
+  &lt;/ul&gt;
+
+&lt;/div&gt;
+
+&lt;!-- js transforms this control into managed-focus listbox --&gt;
+&lt;ul class=&quot;itemlist&quot;&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item One&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Two&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Three&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Four&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Five&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Six&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Seven&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Eight&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Nine&lt;/li&gt;
+  &lt;li&gt;&lt;span&gt;&lt;/span&gt;Item Ten&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;More &lt;a href=&quot;#&quot;&gt;focusable content&lt;/a&gt; after the application widgets.&lt;/p&gt;
+
+
+&lt;script type=&quot;text/javascript&quot; src=&quot;./js/prototype.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot; src=&quot;./js/aria.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot; src=&quot;./js/init.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsariajs"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/aria.js (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/aria.js                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/aria.js        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,126 @@
</span><ins>+
+/* Aria Singleton */
+var Aria = {
+  ManagedWidgets: new Array() // instances of Aria.ManagedWidget Class
+};
+
+Aria.ManagedWidget = Class.create();
+Aria.ManagedWidget.prototype = {
+  initialize: function(inNode, inRole, inChildSelector, inChildRole, inAttributes, inFunctionOnSelect){
+    if(!$(inNode) &amp;&amp; console.error) console.error('Error from aria.js: Aria.ManagedWidget instance initialized with invalid element, '+ inNode);
+    
+    this.el = $(inNode);
+    this.role = inRole;
+    this.childSelector = inChildSelector;
+    this.childRole = inChildRole;
+    this.attributes = inAttributes;
+    this.selectFunction = inFunctionOnSelect;
+    
+    this.index = Aria.ManagedWidgets.length; // each ManagedWidget can know its index in the Aria singleton's instance array
+    
+    this.el.setAttribute('role', this.role); // set container role (e.g. radiogroup) on the el
+    this.childItems = this.el.select(this.childSelector);
+    for (var i=0, c=this.childItems.length; i&lt;c; i++) {
+      var item = this.childItems[i]; // sets the child role (e.g. radio) on each child
+      //item.setAttribute('title', item.innerHTML.stripTags()); // set @title for mouse hover tooltip
+      item.setAttribute('role', this.childRole);
+      item.setAttribute('tabindex','-1'); // make rest of the items non-focusable
+    }
+    this.setSelectedItem(false, true); // make the first item selected, but don't focus it
+    
+    // set up event delegation on the parent node instead of tracking events on all the childItems
+    Event.observe(this.el, 'click', this.handleClick.bindAsEventListener(this));
+    Event.observe(this.el, 'keydown', this.handleKeyPress.bindAsEventListener(this)); // keypress events inconsistent for arrow keys, so use keydown instead
+    
+  },
+  getNextItem: function(inNode) {
+    var el = $(inNode);
+    if(el.next()) el = el.next(); // todo: fix this so the items don't have to be DOM siblings
+    return el;
+  },
+  getPreviousItem: function(inNode) {
+    var el = $(inNode);
+    if(el.previous()) el = el.previous(); // todo: fix this so the items don't have to be DOM siblings
+    return el;
+  },
+  getSelectedItem: function(inNode){
+    if(inNode){ // if inNode (from event target), sets the active item to nearest ancestor item
+      var el = $(inNode);
+      while (el != this.el) {
+        if (this.isChildItem(el)) break; // exit the loop; we have the item
+        el = el.parentNode;
+      }
+      if (el != this.el) {
+        return this.setSelectedItem(el);
+      }
+    }
+    return this.setSelectedItem(); // set to default
+  },
+  handleClick: function(inEvent) {
+    var target = inEvent.target; // get the click target
+    var el = this.getSelectedItem(target);
+    this.setSelectedItem(el);
+    Event.stop(inEvent); // and stop the event
+  },
+  handleKeyPress: function(inEvent) {
+    switch (inEvent.keyCode) {
+      case Event.KEY_DOWN:  this.keyDown();  break;
+      case Event.KEY_LEFT:  this.keyLeft();  break;
+      case Event.KEY_RIGHT: this.keyRight(); break;
+      case Event.KEY_UP:    this.keyUp();    break;
+      default: return; // don't cancel keypress unless intercepted successfully
+    }
+    Event.stop(inEvent);
+  },
+  isChildItem: function(inNode){
+    if (inNode.getAttribute('role') &amp;&amp; inNode.getAttribute('role').toLowerCase() == this.childRole) return true;
+    else return false;
+  },
+  keyDown: function() {
+    var el = this.selectedItem;
+    this.setSelectedItem(this.getNextItem(el));
+  },
+  keyLeft: function() {
+    var el = this.selectedItem;
+    this.setSelectedItem(this.getPreviousItem(el));
+  },
+  keyRight: function() {
+    var el = this.selectedItem;
+    this.setSelectedItem(this.getNextItem(el));
+  },
+  keyUp: function() {
+    var el = this.selectedItem;
+    this.setSelectedItem(this.getPreviousItem(el));
+  },
+  setSelectedItem: function(inNode, inOptDoNotFocus) {
+    if (this.selectedItem){
+      this.selectedItem.tabIndex = -1;
+      Element.removeClassName(this.selectedItem, 'active');
+      // remove the additional attribute assignments on the active item
+      for (var i=0, c=this.attributes.length; i&lt;c; i++){
+        var attr = this.attributes[i];
+        if (attr.falseValue) {
+          this.selectedItem.setAttribute(attr.attribute, attr.falseValue); // set each to false
+        } else {
+          this.selectedItem.removeAttribute(attr.attribute); // or remove it completely
+        }
+      }
+    }
+    this.selectedItem = $(inNode) || this.childItems[0];
+    Element.addClassName(this.selectedItem, 'active');
+    this.selectedItem.tabIndex = 0;
+    
+    if (this.selectFunction) {
+      this.selectFunction(this.childItems);
+    }
+    
+    // add the additional attribute assignments on the active item
+    for (var i=0, c=this.attributes.length; i&lt;c; i++){
+      var attr = this.attributes[i];
+      this.selectedItem.setAttribute(attr.attribute, attr.value);
+    }
+    
+    if (!inOptDoNotFocus) this.selectedItem.focus();
+    return this.selectedItem;
+  }
+};
</ins></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsinitjs"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/init.js (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/init.js                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/init.js        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+
+function loadWidgets(){
+  
+  // init the radiogroup
+  $$('.segmentedcontrol').each(function(elm){
+    Aria.ManagedWidgets.push(
+      new Aria.ManagedWidget(
+        elm, 'radiogroup', 'li', 'radio', [
+          { 'attribute':'aria-checked', 'value':'true', 'falseValue':'false' } // mark the active item as 'checked' (attribute toggles between value and falseValue)
+        ],
+        // one-off function to switch list className when view selection changes
+        function (inChildItems) {
+          var list = $$('.itemlist')[0];
+          for (var i=0, c=inChildItems.length; i&lt;c; i++) {
+            var activeItem = inChildItems[i];
+            if (Element.hasClassName(activeItem, 'active')) {
+              list.className = 'itemlist ' + activeItem.id.replace('radio_','style_');
+              break;
+            }
+          }
+        }
+      )
+    );
+  });
+  
+  // init the listbox
+  $$('.itemlist').each(function(elm){
+    Aria.ManagedWidgets.push(
+      new Aria.ManagedWidget(
+        elm, 'listbox', 'li', 'option', [
+          { 'attribute':'aria-selected', 'value':'true' } // mark the active item as 'selected' (no falseValue, so attribute toggles between being set to value or removed entirely)
+        ]
+      )
+    );
+  });
+  
+}
+
+Event.observe(window, 'load', loadWidgets); // may want to use DOMContentLoaded instead of load
+
</ins></span></pre></div>
<a id="trunkWebsiteswebkitorgblogfilesaria10roaming_tabindexjsprototypejs"></a>
<div class="addfile"><h4>Added: trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/prototype.js (0 => 166033)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/prototype.js                                (rev 0)
+++ trunk/Websites/webkit.org/blog-files/aria1.0/roaming_tabindex/js/prototype.js        2014-03-21 01:29:36 UTC (rev 166033)
</span><span class="lines">@@ -0,0 +1,4184 @@
</span><ins>+/*  Prototype JavaScript framework, version 1.6.0
+ *  (c) 2005-2007 Sam Stephenson
+ *
+ *  Prototype is freely distributable under the terms of an MIT-style license.
+ *  For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+  Version: '1.6.0',
+
+  Browser: {
+    IE:     !!(window.attachEvent &amp;&amp; !window.opera),
+    Opera:  !!window.opera,
+    WebKit: navigator.userAgent.indexOf('AppleWebKit/') &gt; -1,
+    Gecko:  navigator.userAgent.indexOf('Gecko') &gt; -1 &amp;&amp; navigator.userAgent.indexOf('KHTML') == -1,
+    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+  },
+
+  BrowserFeatures: {
+    XPath: !!document.evaluate,
+    ElementExtensions: !!window.HTMLElement,
+    SpecificElementExtensions:
+      document.createElement('div').__proto__ &amp;&amp;
+      document.createElement('div').__proto__ !==
+        document.createElement('form').__proto__
+  },
+
+  ScriptFragment: '&lt;script[^&gt;]*&gt;([\\S\\s]*?)&lt;\/script&gt;',
+  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+  emptyFunction: function() { },
+  K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+  Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+if (Prototype.Browser.WebKit)
+  Prototype.BrowserFeatures.XPath = false;
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+  create: function() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      var subclass = function() { };
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0; i &lt; properties.length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+
+    return klass;
+  }
+};
+
+Class.Methods = {
+  addMethods: function(source) {
+    var ancestor   = this.superclass &amp;&amp; this.superclass.prototype;
+    var properties = Object.keys(source);
+
+    if (!Object.keys({ toString: true }).length)
+      properties.push(&quot;toString&quot;, &quot;valueOf&quot;);
+
+    for (var i = 0, length = properties.length; i &lt; length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor &amp;&amp; Object.isFunction(value) &amp;&amp;
+          value.argumentNames().first() == &quot;$super&quot;) {
+        var method = value, value = Object.extend((function(m) {
+          return function() { return ancestor[m].apply(this, arguments) };
+        })(property).wrap(method), {
+          valueOf:  function() { return method },
+          toString: function() { return method.toString() }
+        });
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+  for (var property in source)
+    destination[property] = source[property];
+  return destination;
+};
+
+Object.extend(Object, {
+  inspect: function(object) {
+    try {
+      if (object === undefined) return 'undefined';
+      if (object === null) return 'null';
+      return object.inspect ? object.inspect() : object.toString();
+    } catch (e) {
+      if (e instanceof RangeError) return '...';
+      throw e;
+    }
+  },
+
+  toJSON: function(object) {
+    var type = typeof object;
+    switch (type) {
+      case 'undefined':
+      case 'function':
+      case 'unknown': return;
+      case 'boolean': return object.toString();
+    }
+
+    if (object === null) return 'null';
+    if (object.toJSON) return object.toJSON();
+    if (Object.isElement(object)) return;
+
+    var results = [];
+    for (var property in object) {
+      var value = Object.toJSON(object[property]);
+      if (value !== undefined)
+        results.push(property.toJSON() + ': ' + value);
+    }
+
+    return '{' + results.join(', ') + '}';
+  },
+
+  toQueryString: function(object) {
+    return $H(object).toQueryString();
+  },
+
+  toHTML: function(object) {
+    return object &amp;&amp; object.toHTML ? object.toHTML() : String.interpret(object);
+  },
+
+  keys: function(object) {
+    var keys = [];
+    for (var property in object)
+      keys.push(property);
+    return keys;
+  },
+
+  values: function(object) {
+    var values = [];
+    for (var property in object)
+      values.push(object[property]);
+    return values;
+  },
+
+  clone: function(object) {
+    return Object.extend({ }, object);
+  },
+
+  isElement: function(object) {
+    return object &amp;&amp; object.nodeType == 1;
+  },
+
+  isArray: function(object) {
+    return object &amp;&amp; object.constructor === Array;
+  },
+
+  isHash: function(object) {
+    return object instanceof Hash;
+  },
+
+  isFunction: function(object) {
+    return typeof object == &quot;function&quot;;
+  },
+
+  isString: function(object) {
+    return typeof object == &quot;string&quot;;
+  },
+
+  isNumber: function(object) {
+    return typeof object == &quot;number&quot;;
+  },
+
+  isUndefined: function(object) {
+    return typeof object == &quot;undefined&quot;;
+  }
+});
+
+Object.extend(Function.prototype, {
+  argumentNames: function() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(&quot;,&quot;).invoke(&quot;strip&quot;);
+    return names.length == 1 &amp;&amp; !names[0] ? [] : names;
+  },
+
+  bind: function() {
+    if (arguments.length &lt; 2 &amp;&amp; arguments[0] === undefined) return this;
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function() {
+      return __method.apply(object, args.concat($A(arguments)));
+    }
+  },
+
+  bindAsEventListener: function() {
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function(event) {
+      return __method.apply(object, [event || window.event].concat(args));
+    }
+  },
+
+  curry: function() {
+    if (!arguments.length) return this;
+    var __method = this, args = $A(arguments);
+    return function() {
+      return __method.apply(this, args.concat($A(arguments)));
+    }
+  },
+
+  delay: function() {
+    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  },
+
+  wrap: function(wrapper) {
+    var __method = this;
+    return function() {
+      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+    }
+  },
+
+  methodize: function() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      return __method.apply(null, [this].concat($A(arguments)));
+    };
+  }
+});
+
+Function.prototype.defer = Function.prototype.delay.curry(0.01);
+
+Date.prototype.toJSON = function() {
+  return '&quot;' + this.getUTCFullYear() + '-' +
+    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+    this.getUTCDate().toPaddedString(2) + 'T' +
+    this.getUTCHours().toPaddedString(2) + ':' +
+    this.getUTCMinutes().toPaddedString(2) + ':' +
+    this.getUTCSeconds().toPaddedString(2) + 'Z&quot;';
+};
+
+var Try = {
+  these: function() {
+    var returnValue;
+
+    for (var i = 0, length = arguments.length; i &lt; length; i++) {
+      var lambda = arguments[i];
+      try {
+        returnValue = lambda();
+        break;
+      } catch (e) { }
+    }
+
+    return returnValue;
+  }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+  initialize: function(callback, frequency) {
+    this.callback = callback;
+    this.frequency = frequency;
+    this.currentlyExecuting = false;
+
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  execute: function() {
+    this.callback(this);
+  },
+
+  stop: function() {
+    if (!this.timer) return;
+    clearInterval(this.timer);
+    this.timer = null;
+  },
+
+  onTimerEvent: function() {
+    if (!this.currentlyExecuting) {
+      try {
+        this.currentlyExecuting = true;
+        this.execute();
+      } finally {
+        this.currentlyExecuting = false;
+      }
+    }
+  }
+});
+Object.extend(String, {
+  interpret: function(value) {
+    return value == null ? '' : String(value);
+  },
+  specialChar: {
+    '\b': '\\b',
+    '\t': '\\t',
+    '\n': '\\n',
+    '\f': '\\f',
+    '\r': '\\r',
+    '\\': '\\\\'
+  }
+});
+
+Object.extend(String.prototype, {
+  gsub: function(pattern, replacement) {
+    var result = '', source = this, match;
+    replacement = arguments.callee.prepareReplacement(replacement);
+
+    while (source.length &gt; 0) {
+      if (match = source.match(pattern)) {
+        result += source.slice(0, match.index);
+        result += String.interpret(replacement(match));
+        source  = source.slice(match.index + match[0].length);
+      } else {
+        result += source, source = '';
+      }
+    }
+    return result;
+  },
+
+  sub: function(pattern, replacement, count) {
+    replacement = this.gsub.prepareReplacement(replacement);
+    count = count === undefined ? 1 : count;
+
+    return this.gsub(pattern, function(match) {
+      if (--count &lt; 0) return match[0];
+      return replacement(match);
+    });
+  },
+
+  scan: function(pattern, iterator) {
+    this.gsub(pattern, iterator);
+    return String(this);
+  },
+
+  truncate: function(length, truncation) {
+    length = length || 30;
+    truncation = truncation === undefined ? '...' : truncation;
+    return this.length &gt; length ?
+      this.slice(0, length - truncation.length) + truncation : String(this);
+  },
+
+  strip: function() {
+    return this.replace(/^\s+/, '').replace(/\s+$/, '');
+  },
+
+  stripTags: function() {
+    return this.replace(/&lt;\/?[^&gt;]+&gt;/gi, '');
+  },
+
+  stripScripts: function() {
+    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+  },
+
+  extractScripts: function() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+    return (this.match(matchAll) || []).map(function(scriptTag) {
+      return (scriptTag.match(matchOne) || ['', ''])[1];
+    });
+  },
+
+  evalScripts: function() {
+    return this.extractScripts().map(function(script) { return eval(script) });
+  },
+
+  escapeHTML: function() {
+    var self = arguments.callee;
+    self.text.data = this;
+    return self.div.innerHTML;
+  },
+
+  unescapeHTML: function() {
+    var div = new Element('div');
+    div.innerHTML = this.stripTags();
+    return div.childNodes[0] ? (div.childNodes.length &gt; 1 ?
+      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+      div.childNodes[0].nodeValue) : '';
+  },
+
+  toQueryParams: function(separator) {
+    var match = this.strip().match(/([^?#]*)(#.*)?$/);
+    if (!match) return { };
+
+    return match[1].split(separator || '&amp;').inject({ }, function(hash, pair) {
+      if ((pair = pair.split('='))[0]) {
+        var key = decodeURIComponent(pair.shift());
+        var value = pair.length &gt; 1 ? pair.join('=') : pair[0];
+        if (value != undefined) value = decodeURIComponent(value);
+
+        if (key in hash) {
+          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+          hash[key].push(value);
+        }
+        else hash[key] = value;
+      }
+      return hash;
+    });
+  },
+
+  toArray: function() {
+    return this.split('');
+  },
+
+  succ: function() {
+    return this.slice(0, this.length - 1) +
+      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+  },
+
+  times: function(count) {
+    return count &lt; 1 ? '' : new Array(count + 1).join(this);
+  },
+
+  camelize: function() {
+    var parts = this.split('-'), len = parts.length;
+    if (len == 1) return parts[0];
+
+    var camelized = this.charAt(0) == '-'
+      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+      : parts[0];
+
+    for (var i = 1; i &lt; len; i++)
+      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+    return camelized;
+  },
+
+  capitalize: function() {
+    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+  },
+
+  underscore: function() {
+    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+  },
+
+  dasherize: function() {
+    return this.gsub(/_/,'-');
+  },
+
+  inspect: function(useDoubleQuotes) {
+    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+      var character = String.specialChar[match[0]];
+      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+    });
+    if (useDoubleQuotes) return '&quot;' + escapedString.replace(/&quot;/g, '\\&quot;') + '&quot;';
+    return &quot;'&quot; + escapedString.replace(/'/g, '\\\'') + &quot;'&quot;;
+  },
+
+  toJSON: function() {
+    return this.inspect(true);
+  },
+
+  unfilterJSON: function(filter) {
+    return this.sub(filter || Prototype.JSONFilter, '#{1}');
+  },
+
+  isJSON: function() {
+    var str = this.replace(/\\./g, '@').replace(/&quot;[^&quot;\\\n\r]*&quot;/g, '');
+    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+  },
+
+  evalJSON: function(sanitize) {
+    var json = this.unfilterJSON();
+    try {
+      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+    } catch (e) { }
+    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+  },
+
+  include: function(pattern) {
+    return this.indexOf(pattern) &gt; -1;
+  },
+
+  startsWith: function(pattern) {
+    return this.indexOf(pattern) === 0;
+  },
+
+  endsWith: function(pattern) {
+    var d = this.length - pattern.length;
+    return d &gt;= 0 &amp;&amp; this.lastIndexOf(pattern) === d;
+  },
+
+  empty: function() {
+    return this == '';
+  },
+
+  blank: function() {
+    return /^\s*$/.test(this);
+  },
+
+  interpolate: function(object, pattern) {
+    return new Template(this, pattern).evaluate(object);
+  }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+  escapeHTML: function() {
+    return this.replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');
+  },
+  unescapeHTML: function() {
+    return this.replace(/&amp;amp;/g,'&amp;').replace(/&amp;lt;/g,'&lt;').replace(/&amp;gt;/g,'&gt;');
+  }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+  if (Object.isFunction(replacement)) return replacement;
+  var template = new Template(replacement);
+  return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+  div:  document.createElement('div'),
+  text: document.createTextNode('')
+});
+
+with (String.prototype.escapeHTML) div.appendChild(text);
+
+var Template = Class.create({
+  initialize: function(template, pattern) {
+    this.template = template.toString();
+    this.pattern = pattern || Template.Pattern;
+  },
+
+  evaluate: function(object) {
+    if (Object.isFunction(object.toTemplateReplacements))
+      object = object.toTemplateReplacements();
+
+    return this.template.gsub(this.pattern, function(match) {
+      if (object == null) return '';
+
+      var before = match[1] || '';
+      if (before == '\\') return match[2];
+
+      var ctx = object, expr = match[3];
+      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
+      if (match == null) return before;
+
+      while (match != null) {
+        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+        ctx = ctx[comp];
+        if (null == ctx || '' == match[3]) break;
+        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+        match = pattern.exec(expr);
+      }
+
+      return before + String.interpret(ctx);
+    }.bind(this));
+  }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+  each: function(iterator, context) {
+    var index = 0;
+    iterator = iterator.bind(context);
+    try {
+      this._each(function(value) {
+        iterator(value, index++);
+      });
+    } catch (e) {
+      if (e != $break) throw e;
+    }
+    return this;
+  },
+
+  eachSlice: function(number, iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var index = -number, slices = [], array = this.toArray();
+    while ((index += number) &lt; array.length)
+      slices.push(array.slice(index, index+number));
+    return slices.collect(iterator, context);
+  },
+
+  all: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var result = true;
+    this.each(function(value, index) {
+      result = result &amp;&amp; !!iterator(value, index);
+      if (!result) throw $break;
+    });
+    return result;
+  },
+
+  any: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var result = false;
+    this.each(function(value, index) {
+      if (result = !!iterator(value, index))
+        throw $break;
+    });
+    return result;
+  },
+
+  collect: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var results = [];
+    this.each(function(value, index) {
+      results.push(iterator(value, index));
+    });
+    return results;
+  },
+
+  detect: function(iterator, context) {
+    iterator = iterator.bind(context);
+    var result;
+    this.each(function(value, index) {
+      if (iterator(value, index)) {
+        result = value;
+        throw $break;
+      }
+    });
+    return result;
+  },
+
+  findAll: function(iterator, context) {
+    iterator = iterator.bind(context);
+    var results = [];
+    this.each(function(value, index) {
+      if (iterator(value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  grep: function(filter, iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var results = [];
+
+    if (Object.isString(filter))
+      filter = new RegExp(filter);
+
+    this.each(function(value, index) {
+      if (filter.match(value))
+        results.push(iterator(value, index));
+    });
+    return results;
+  },
+
+  include: function(object) {
+    if (Object.isFunction(this.indexOf))
+      if (this.indexOf(object) != -1) return true;
+
+    var found = false;
+    this.each(function(value) {
+      if (value == object) {
+        found = true;
+        throw $break;
+      }
+    });
+    return found;
+  },
+
+  inGroupsOf: function(number, fillWith) {
+    fillWith = fillWith === undefined ? null : fillWith;
+    return this.eachSlice(number, function(slice) {
+      while(slice.length &lt; number) slice.push(fillWith);
+      return slice;
+    });
+  },
+
+  inject: function(memo, iterator, context) {
+    iterator = iterator.bind(context);
+    this.each(function(value, index) {
+      memo = iterator(memo, value, index);
+    });
+    return memo;
+  },
+
+  invoke: function(method) {
+    var args = $A(arguments).slice(1);
+    return this.map(function(value) {
+      return value[method].apply(value, args);
+    });
+  },
+
+  max: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator(value, index);
+      if (result == undefined || value &gt;= result)
+        result = value;
+    });
+    return result;
+  },
+
+  min: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator(value, index);
+      if (result == undefined || value &lt; result)
+        result = value;
+    });
+    return result;
+  },
+
+  partition: function(iterator, context) {
+    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    var trues = [], falses = [];
+    this.each(function(value, index) {
+      (iterator(value, index) ?
+        trues : falses).push(value);
+    });
+    return [trues, falses];
+  },
+
+  pluck: function(property) {
+    var results = [];
+    this.each(function(value) {
+      results.push(value[property]);
+    });
+    return results;
+  },
+
+  reject: function(iterator, context) {
+    iterator = iterator.bind(context);
+    var results = [];
+    this.each(function(value, index) {
+      if (!iterator(value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  sortBy: function(iterator, context) {
+    iterator = iterator.bind(context);
+    return this.map(function(value, index) {
+      return {value: value, criteria: iterator(value, index)};
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a &lt; b ? -1 : a &gt; b ? 1 : 0;
+    }).pluck('value');
+  },
+
+  toArray: function() {
+    return this.map();
+  },
+
+  zip: function() {
+    var iterator = Prototype.K, args = $A(arguments);
+    if (Object.isFunction(args.last()))
+      iterator = args.pop();
+
+    var collections = [this].concat(args).map($A);
+    return this.map(function(value, index) {
+      return iterator(collections.pluck(index));
+    });
+  },
+
+  size: function() {
+    return this.toArray().length;
+  },
+
+  inspect: function() {
+    return '#&lt;Enumerable:' + this.toArray().inspect() + '&gt;';
+  }
+};
+
+Object.extend(Enumerable, {
+  map:     Enumerable.collect,
+  find:    Enumerable.detect,
+  select:  Enumerable.findAll,
+  filter:  Enumerable.findAll,
+  member:  Enumerable.include,
+  entries: Enumerable.toArray,
+  every:   Enumerable.all,
+  some:    Enumerable.any
+});
+function $A(iterable) {
+  if (!iterable) return [];
+  if (iterable.toArray) return iterable.toArray();
+  var length = iterable.length, results = new Array(length);
+  while (length--) results[length] = iterable[length];
+  return results;
+}
+
+if (Prototype.Browser.WebKit) {
+  function $A(iterable) {
+    if (!iterable) return [];
+    if (!(Object.isFunction(iterable) &amp;&amp; iterable == '[object NodeList]') &amp;&amp;
+        iterable.toArray) return iterable.toArray();
+    var length = iterable.length, results = new Array(length);
+    while (length--) results[length] = iterable[length];
+    return results;
+  }
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+  _each: function(iterator) {
+    for (var i = 0, length = this.length; i &lt; length; i++)
+      iterator(this[i]);
+  },
+
+  clear: function() {
+    this.length = 0;
+    return this;
+  },
+
+  first: function() {
+    return this[0];
+  },
+
+  last: function() {
+    return this[this.length - 1];
+  },
+
+  compact: function() {
+    return this.select(function(value) {
+      return value != null;
+    });
+  },
+
+  flatten: function() {
+    return this.inject([], function(array, value) {
+      return array.concat(Object.isArray(value) ?
+        value.flatten() : [value]);
+    });
+  },
+
+  without: function() {
+    var values = $A(arguments);
+    return this.select(function(value) {
+      return !values.include(value);
+    });
+  },
+
+  reverse: function(inline) {
+    return (inline !== false ? this : this.toArray())._reverse();
+  },
+
+  reduce: function() {
+    return this.length &gt; 1 ? this : this[0];
+  },
+
+  uniq: function(sorted) {
+    return this.inject([], function(array, value, index) {
+      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+        array.push(value);
+      return array;
+    });
+  },
+
+  intersect: function(array) {
+    return this.uniq().findAll(function(item) {
+      return array.detect(function(value) { return item === value });
+    });
+  },
+
+  clone: function() {
+    return [].concat(this);
+  },
+
+  size: function() {
+    return this.length;
+  },
+
+  inspect: function() {
+    return '[' + this.map(Object.inspect).join(', ') + ']';
+  },
+
+  toJSON: function() {
+    var results = [];
+    this.each(function(object) {
+      var value = Object.toJSON(object);
+      if (value !== undefined) results.push(value);
+    });
+    return '[' + results.join(', ') + ']';
+  }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+  Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+  i || (i = 0);
+  var length = this.length;
+  if (i &lt; 0) i = length + i;
+  for (; i &lt; length; i++)
+    if (this[i] === item) return i;
+  return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+  i = isNaN(i) ? this.length : (i &lt; 0 ? this.length + i : i) + 1;
+  var n = this.slice(0, i).reverse().indexOf(item);
+  return (n &lt; 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+  Array.prototype.concat = function() {
+    var array = [];
+    for (var i = 0, length = this.length; i &lt; length; i++) array.push(this[i]);
+    for (var i = 0, length = arguments.length; i &lt; length; i++) {
+      if (Object.isArray(arguments[i])) {
+        for (var j = 0, arrayLength = arguments[i].length; j &lt; arrayLength; j++)
+          array.push(arguments[i][j]);
+      } else {
+        array.push(arguments[i]);
+      }
+    }
+    return array;
+  };
+}
+Object.extend(Number.prototype, {
+  toColorPart: function() {
+    return this.toPaddedString(2, 16);
+  },
+
+  succ: function() {
+    return this + 1;
+  },
+
+  times: function(iterator) {
+    $R(0, this, true).each(iterator);
+    return this;
+  },
+
+  toPaddedString: function(length, radix) {
+    var string = this.toString(radix || 10);
+    return '0'.times(length - string.length) + string;
+  },
+
+  toJSON: function() {
+    return isFinite(this) ? this.toString() : 'null';
+  }
+});
+
+$w('abs round ceil floor').each(function(method){
+  Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+  return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+  if (function() {
+    var i = 0, Test = function(value) { this.key = value };
+    Test.prototype.key = 'foo';
+    for (var property in new Test('bar')) i++;
+    return i &gt; 1;
+  }()) {
+    function each(iterator) {
+      var cache = [];
+      for (var key in this._object) {
+        var value = this._object[key];
+        if (cache.include(key)) continue;
+        cache.push(key);
+        var pair = [key, value];
+        pair.key = key;
+        pair.value = value;
+        iterator(pair);
+      }
+    }
+  } else {
+    function each(iterator) {
+      for (var key in this._object) {
+        var value = this._object[key], pair = [key, value];
+        pair.key = key;
+        pair.value = value;
+        iterator(pair);
+      }
+    }
+  }
+
+  function toQueryPair(key, value) {
+    if (Object.isUndefined(value)) return key;
+    return key + '=' + encodeURIComponent(String.interpret(value));
+  }
+
+  return {
+    initialize: function(object) {
+      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+    },
+
+    _each: each,
+
+    set: function(key, value) {
+      return this._object[key] = value;
+    },
+
+    get: function(key) {
+      return this._object[key];
+    },
+
+    unset: function(key) {
+      var value = this._object[key];
+      delete this._object[key];
+      return value;
+    },
+
+    toObject: function() {
+      return Object.clone(this._object);
+    },
+
+    keys: function() {
+      return this.pluck('key');
+    },
+
+    values: function() {
+      return this.pluck('value');
+    },
+
+    index: function(value) {
+      var match = this.detect(function(pair) {
+        return pair.value === value;
+      });
+      return match &amp;&amp; match.key;
+    },
+
+    merge: function(object) {
+      return this.clone().update(object);
+    },
+
+    update: function(object) {
+      return new Hash(object).inject(this, function(result, pair) {
+        result.set(pair.key, pair.value);
+        return result;
+      });
+    },
+
+    toQueryString: function() {
+      return this.map(function(pair) {
+        var key = encodeURIComponent(pair.key), values = pair.value;
+
+        if (values &amp;&amp; typeof values == 'object') {
+          if (Object.isArray(values))
+            return values.map(toQueryPair.curry(key)).join('&amp;');
+        }
+        return toQueryPair(key, values);
+      }).join('&amp;');
+    },
+
+    inspect: function() {
+      return '#&lt;Hash:{' + this.map(function(pair) {
+        return pair.map(Object.inspect).join(': ');
+      }).join(', ') + '}&gt;';
+    },
+
+    toJSON: function() {
+      return Object.toJSON(this.toObject());
+    },
+
+    clone: function() {
+      return new Hash(this);
+    }
+  }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+  initialize: function(start, end, exclusive) {
+    this.start = start;
+    this.end = end;
+    this.exclusive = exclusive;
+  },
+
+  _each: function(iterator) {
+    var value = this.start;
+    while (this.include(value)) {
+      iterator(value);
+      value = value.succ();
+    }
+  },
+
+  include: function(value) {
+    if (value &lt; this.start)
+      return false;
+    if (this.exclusive)
+      return value &lt; this.end;
+    return value &lt;= this.end;
+  }
+});
+
+var $R = function(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+  getTransport: function() {
+    return Try.these(
+      function() {return new XMLHttpRequest()},
+      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+    ) || false;
+  },
+
+  activeRequestCount: 0
+};
+
+Ajax.Responders = {
+  responders: [],
+
+  _each: function(iterator) {
+    this.responders._each(iterator);
+  },
+
+  register: function(responder) {
+    if (!this.include(responder))
+      this.responders.push(responder);
+  },
+
+  unregister: function(responder) {
+    this.responders = this.responders.without(responder);
+  },
+
+  dispatch: function(callback, request, transport, json) {
+    this.each(function(responder) {
+      if (Object.isFunction(responder[callback])) {
+        try {
+          responder[callback].apply(responder, [request, transport, json]);
+        } catch (e) { }
+      }
+    });
+  }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+  onCreate:   function() { Ajax.activeRequestCount++ },
+  onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+  initialize: function(options) {
+    this.options = {
+      method:       'post',
+      asynchronous: true,
+      contentType:  'application/x-www-form-urlencoded',
+      encoding:     'UTF-8',
+      parameters:   '',
+      evalJSON:     true,
+      evalJS:       true
+    };
+    Object.extend(this.options, options || { });
+
+    this.options.method = this.options.method.toLowerCase();
+    if (Object.isString(this.options.parameters))
+      this.options.parameters = this.options.parameters.toQueryParams();
+  }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+  _complete: false,
+
+  initialize: function($super, url, options) {
+    $super(options);
+    this.transport = Ajax.getTransport();
+    this.request(url);
+  },
+
+  request: function(url) {
+    this.url = url;
+    this.method = this.options.method;
+    var params = Object.clone(this.options.parameters);
+
+    if (!['get', 'post'].include(this.method)) {
+      // simulate other verbs over post
+      params['_method'] = this.method;
+      this.method = 'post';
+    }
+
+    this.parameters = params;
+
+    if (params = Object.toQueryString(params)) {
+      // when GET, append parameters to URL
+      if (this.method == 'get')
+        this.url += (this.url.include('?') ? '&amp;' : '?') + params;
+      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+        params += '&amp;_=';
+    }
+
+    try {
+      var response = new Ajax.Response(this);
+      if (this.options.onCreate) this.options.onCreate(response);
+      Ajax.Responders.dispatch('onCreate', this, response);
+
+      this.transport.open(this.method.toUpperCase(), this.url,
+        this.options.asynchronous);
+
+      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+      this.transport.onreadystatechange = this.onStateChange.bind(this);
+      this.setRequestHeaders();
+
+      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+      this.transport.send(this.body);
+
+      /* Force Firefox to handle ready state 4 for synchronous requests */
+      if (!this.options.asynchronous &amp;&amp; this.transport.overrideMimeType)
+        this.onStateChange();
+
+    }
+    catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  onStateChange: function() {
+    var readyState = this.transport.readyState;
+    if (readyState &gt; 1 &amp;&amp; !((readyState == 4) &amp;&amp; this._complete))
+      this.respondToReadyState(this.transport.readyState);
+  },
+
+  setRequestHeaders: function() {
+    var headers = {
+      'X-Requested-With': 'XMLHttpRequest',
+      'X-Prototype-Version': Prototype.Version,
+      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+    };
+
+    if (this.method == 'post') {
+      headers['Content-type'] = this.options.contentType +
+        (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+      /* Force &quot;Connection: close&quot; for older Mozilla browsers to work
+       * around a bug where XMLHttpRequest sends an incorrect
+       * Content-length header. See Mozilla Bugzilla #246651.
+       */
+      if (this.transport.overrideMimeType &amp;&amp;
+          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] &lt; 2005)
+            headers['Connection'] = 'close';
+    }
+
+    // user-defined headers
+    if (typeof this.options.requestHeaders == 'object') {
+      var extras = this.options.requestHeaders;
+
+      if (Object.isFunction(extras.push))
+        for (var i = 0, length = extras.length; i &lt; length; i += 2)
+          headers[extras[i]] = extras[i+1];
+      else
+        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+    }
+
+    for (var name in headers)
+      this.transport.setRequestHeader(name, headers[name]);
+  },
+
+  success: function() {
+    var status = this.getStatus();
+    return !status || (status &gt;= 200 &amp;&amp; status &lt; 300);
+  },
+
+  getStatus: function() {
+    try {
+      return this.transport.status || 0;
+    } catch (e) { return 0 }
+  },
+
+  respondToReadyState: function(readyState) {
+    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+    if (state == 'Complete') {
+      try {
+        this._complete = true;
+        (this.options['on' + response.status]
+         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+         || Prototype.emptyFunction)(response, response.headerJSON);
+      } catch (e) {
+        this.dispatchException(e);
+      }
+
+      var contentType = response.getHeader('Content-type');
+      if (this.options.evalJS == 'force'
+          || (this.options.evalJS &amp;&amp; contentType
+          &amp;&amp; contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+        this.evalResponse();
+    }
+
+    try {
+      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+
+    if (state == 'Complete') {
+      // avoid memory leak in MSIE: clean up
+      this.transport.onreadystatechange = Prototype.emptyFunction;
+    }
+  },
+
+  getHeader: function(name) {
+    try {
+      return this.transport.getResponseHeader(name);
+    } catch (e) { return null }
+  },
+
+  evalResponse: function() {
+    try {
+      return eval((this.transport.responseText || '').unfilterJSON());
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  dispatchException: function(exception) {
+    (this.options.onException || Prototype.emptyFunction)(this, exception);
+    Ajax.Responders.dispatch('onException', this, exception);
+  }
+});
+
+Ajax.Request.Events =
+  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+  initialize: function(request){
+    this.request = request;
+    var transport  = this.transport  = request.transport,
+        readyState = this.readyState = transport.readyState;
+
+    if((readyState &gt; 2 &amp;&amp; !Prototype.Browser.IE) || readyState == 4) {
+      this.status       = this.getStatus();
+      this.statusText   = this.getStatusText();
+      this.responseText = String.interpret(transport.responseText);
+      this.headerJSON   = this._getHeaderJSON();
+    }
+
+    if(readyState == 4) {
+      var xml = transport.responseXML;
+      this.responseXML  = xml === undefined ? null : xml;
+      this.responseJSON = this._getResponseJSON();
+    }
+  },
+
+  status:      0,
+  statusText: '',
+
+  getStatus: Ajax.Request.prototype.getStatus,
+
+  getStatusText: function() {
+    try {
+      return this.transport.statusText || '';
+    } catch (e) { return '' }
+  },
+
+  getHeader: Ajax.Request.prototype.getHeader,
+
+  getAllHeaders: function() {
+    try {
+      return this.getAllResponseHeaders();
+    } catch (e) { return null }
+  },
+
+  getResponseHeader: function(name) {
+    return this.transport.getResponseHeader(name);
+  },
+
+  getAllResponseHeaders: function() {
+    return this.transport.getAllResponseHeaders();
+  },
+
+  _getHeaderJSON: function() {
+    var json = this.getHeader('X-JSON');
+    if (!json) return null;
+    json = decodeURIComponent(escape(json));
+    try {
+      return json.evalJSON(this.request.options.sanitizeJSON);
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  },
+
+  _getResponseJSON: function() {
+    var options = this.request.options;
+    if (!options.evalJSON || (options.evalJSON != 'force' &amp;&amp;
+      !(this.getHeader('Content-type') || '').include('application/json')))
+        return null;
+    try {
+      return this.transport.responseText.evalJSON(options.sanitizeJSON);
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+  initialize: function($super, container, url, options) {
+    this.container = {
+      success: (container.success || container),
+      failure: (container.failure || (container.success ? null : container))
+    };
+
+    options = options || { };
+    var onComplete = options.onComplete;
+    options.onComplete = (function(response, param) {
+      this.updateContent(response.responseText);
+      if (Object.isFunction(onComplete)) onComplete(response, param);
+    }).bind(this);
+
+    $super(url, options);
+  },
+
+  updateContent: function(responseText) {
+    var receiver = this.container[this.success() ? 'success' : 'failure'],
+        options = this.options;
+
+    if (!options.evalScripts) responseText = responseText.stripScripts();
+
+    if (receiver = $(receiver)) {
+      if (options.insertion) {
+        if (Object.isString(options.insertion)) {
+          var insertion = { }; insertion[options.insertion] = responseText;
+          receiver.insert(insertion);
+        }
+        else options.insertion(receiver, responseText);
+      }
+      else receiver.update(responseText);
+    }
+
+    if (this.success()) {
+      if (this.onComplete) this.onComplete.bind(this).defer();
+    }
+  }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+  initialize: function($super, container, url, options) {
+    $super(options);
+    this.onComplete = this.options.onComplete;
+
+    this.frequency = (this.options.frequency || 2);
+    this.decay = (this.options.decay || 1);
+
+    this.updater = { };
+    this.container = container;
+    this.url = url;
+
+    this.start();
+  },
+
+  start: function() {
+    this.options.onComplete = this.updateComplete.bind(this);
+    this.onTimerEvent();
+  },
+
+  stop: function() {
+    this.updater.options.onComplete = undefined;
+    clearTimeout(this.timer);
+    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+  },
+
+  updateComplete: function(response) {
+    if (this.options.decay) {
+      this.decay = (response.responseText == this.lastText ?
+        this.decay * this.options.decay : 1);
+
+      this.lastText = response.responseText;
+    }
+    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+  },
+
+  onTimerEvent: function() {
+    this.updater = new Ajax.Updater(this.container, this.url, this.options);
+  }
+});
+function $(element) {
+  if (arguments.length &gt; 1) {
+    for (var i = 0, elements = [], length = arguments.length; i &lt; length; i++)
+      elements.push($(arguments[i]));
+    return elements;
+  }
+  if (Object.isString(element))
+    element = document.getElementById(element);
+  return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+  document._getElementsByXPath = function(expression, parentElement) {
+    var results = [];
+    var query = document.evaluate(expression, $(parentElement) || document,
+      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+    for (var i = 0, length = query.snapshotLength; i &lt; length; i++)
+      results.push(Element.extend(query.snapshotItem(i)));
+    return results;
+  };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+  // DOM level 2 ECMAScript Language Binding
+  Object.extend(Node, {
+    ELEMENT_NODE: 1,
+    ATTRIBUTE_NODE: 2,
+    TEXT_NODE: 3,
+    CDATA_SECTION_NODE: 4,
+    ENTITY_REFERENCE_NODE: 5,
+    ENTITY_NODE: 6,
+    PROCESSING_INSTRUCTION_NODE: 7,
+    COMMENT_NODE: 8,
+    DOCUMENT_NODE: 9,
+    DOCUMENT_TYPE_NODE: 10,
+    DOCUMENT_FRAGMENT_NODE: 11,
+    NOTATION_NODE: 12
+  });
+}
+
+(function() {
+  var element = this.Element;
+  this.Element = function(tagName, attributes) {
+    attributes = attributes || { };
+    tagName = tagName.toLowerCase();
+    var cache = Element.cache;
+    if (Prototype.Browser.IE &amp;&amp; attributes.name) {
+      tagName = '&lt;' + tagName + ' name=&quot;' + attributes.name + '&quot;&gt;';
+      delete attributes.name;
+      return Element.writeAttribute(document.createElement(tagName), attributes);
+    }
+    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+  };
+  Object.extend(this.Element, element || { });
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+  visible: function(element) {
+    return $(element).style.display != 'none';
+  },
+
+  toggle: function(element) {
+    element = $(element);
+    Element[Element.visible(element) ? 'hide' : 'show'](element);
+    return element;
+  },
+
+  hide: function(element) {
+    $(element).style.display = 'none';
+    return element;
+  },
+
+  show: function(element) {
+    $(element).style.display = '';
+    return element;
+  },
+
+  remove: function(element) {
+    element = $(element);
+    element.parentNode.removeChild(element);
+    return element;
+  },
+
+  update: function(element, content) {
+    element = $(element);
+    if (content &amp;&amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+    content = Object.toHTML(content);
+    element.innerHTML = content.stripScripts();
+    content.evalScripts.bind(content).defer();
+    return element;
+  },
+
+  replace: function(element, content) {
+    element = $(element);
+    if (content &amp;&amp; content.toElement) content = content.toElement();
+    else if (!Object.isElement(content)) {
+      content = Object.toHTML(content);
+      var range = element.ownerDocument.createRange();
+      range.selectNode(element);
+      content.evalScripts.bind(content).defer();
+      content = range.createContextualFragment(content.stripScripts());
+    }
+    element.parentNode.replaceChild(content, element);
+    return element;
+  },
+
+  insert: function(element, insertions) {
+    element = $(element);
+
+    if (Object.isString(insertions) || Object.isNumber(insertions) ||
+        Object.isElement(insertions) || (insertions &amp;&amp; (insertions.toElement || insertions.toHTML)))
+          insertions = {bottom:insertions};
+
+    var content, t, range;
+
+    for (position in insertions) {
+      content  = insertions[position];
+      position = position.toLowerCase();
+      t = Element._insertionTranslations[position];
+
+      if (content &amp;&amp; content.toElement) content = content.toElement();
+      if (Object.isElement(content)) {
+        t.insert(element, content);
+        continue;
+      }
+
+      content = Object.toHTML(content);
+
+      range = element.ownerDocument.createRange();
+      t.initializeRange(element, range);
+      t.insert(element, range.createContextualFragment(content.stripScripts()));
+
+      content.evalScripts.bind(content).defer();
+    }
+
+    return element;
+  },
+
+  wrap: function(element, wrapper, attributes) {
+    element = $(element);
+    if (Object.isElement(wrapper))
+      $(wrapper).writeAttribute(attributes || { });
+    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+    else wrapper = new Element('div', wrapper);
+    if (element.parentNode)
+      element.parentNode.replaceChild(wrapper, element);
+    wrapper.appendChild(element);
+    return wrapper;
+  },
+
+  inspect: function(element) {
+    element = $(element);
+    var result = '&lt;' + element.tagName.toLowerCase();
+    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+      var property = pair.first(), attribute = pair.last();
+      var value = (element[property] || '').toString();
+      if (value) result += ' ' + attribute + '=' + value.inspect(true);
+    });
+    return result + '&gt;';
+  },
+
+  recursivelyCollect: function(element, property) {
+    element = $(element);
+    var elements = [];
+    while (element = element[property])
+      if (element.nodeType == 1)
+        elements.push(Element.extend(element));
+    return elements;
+  },
+
+  ancestors: function(element) {
+    return $(element).recursivelyCollect('parentNode');
+  },
+
+  descendants: function(element) {
+    return $A($(element).getElementsByTagName('*')).each(Element.extend);
+  },
+
+  firstDescendant: function(element) {
+    element = $(element).firstChild;
+    while (element &amp;&amp; element.nodeType != 1) element = element.nextSibling;
+    return $(element);
+  },
+
+  immediateDescendants: function(element) {
+    if (!(element = $(element).firstChild)) return [];
+    while (element &amp;&amp; element.nodeType != 1) element = element.nextSibling;
+    if (element) return [element].concat($(element).nextSiblings());
+    return [];
+  },
+
+  previousSiblings: function(element) {
+    return $(element).recursivelyCollect('previousSibling');
+  },
+
+  nextSiblings: function(element) {
+    return $(element).recursivelyCollect('nextSibling');
+  },
+
+  siblings: function(element) {
+    element = $(element);
+    return element.previousSiblings().reverse().concat(element.nextSiblings());
+  },
+
+  match: function(element, selector) {
+    if (Object.isString(selector))
+      selector = new Selector(selector);
+    return selector.match($(element));
+  },
+
+  up: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(element.parentNode);
+    var ancestors = element.ancestors();
+    return expression ? Selector.findElement(ancestors, expression, index) :
+      ancestors[index || 0];
+  },
+
+  down: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return element.firstDescendant();
+    var descendants = element.descendants();
+    return expression ? Selector.findElement(descendants, expression, index) :
+      descendants[index || 0];
+  },
+
+  previous: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+    var previousSiblings = element.previousSiblings();
+    return expression ? Selector.findElement(previousSiblings, expression, index) :
+      previousSiblings[index || 0];
+  },
+
+  next: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+    var nextSiblings = element.nextSiblings();
+    return expression ? Selector.findElement(nextSiblings, expression, index) :
+      nextSiblings[index || 0];
+  },
+
+  select: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element, args);
+  },
+
+  adjacent: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element.parentNode, args).without(element);
+  },
+
+  identify: function(element) {
+    element = $(element);
+    var id = element.readAttribute('id'), self = arguments.callee;
+    if (id) return id;
+    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+    element.writeAttribute('id', id);
+    return id;
+  },
+
+  readAttribute: function(element, name) {
+    element = $(element);
+    if (Prototype.Browser.IE) {
+      var t = Element._attributeTranslations.read;
+      if (t.values[name]) return t.values[name](element, name);
+      if (t.names[name]) name = t.names[name];
+      if (name.include(':')) {
+        return (!element.attributes || !element.attributes[name]) ? null :
+         element.attributes[name].value;
+      }
+    }
+    return element.getAttribute(name);
+  },
+
+  writeAttribute: function(element, name, value) {
+    element = $(element);
+    var attributes = { }, t = Element._attributeTranslations.write;
+
+    if (typeof name == 'object') attributes = name;
+    else attributes[name] = value === undefined ? true : value;
+
+    for (var attr in attributes) {
+      var name = t.names[attr] || attr, value = attributes[attr];
+      if (t.values[attr]) name = t.values[attr](element, value);
+      if (value === false || value === null)
+        element.removeAttribute(name);
+      else if (value === true)
+        element.setAttribute(name, name);
+      else element.setAttribute(name, value);
+    }
+    return element;
+  },
+
+  getHeight: function(element) {
+    return $(element).getDimensions().height;
+  },
+
+  getWidth: function(element) {
+    return $(element).getDimensions().width;
+  },
+
+  classNames: function(element) {
+    return new Element.ClassNames(element);
+  },
+
+  hasClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    var elementClassName = element.className;
+    return (elementClassName.length &gt; 0 &amp;&amp; (elementClassName == className ||
+      new RegExp(&quot;(^|\\s)&quot; + className + &quot;(\\s|$)&quot;).test(elementClassName)));
+  },
+
+  addClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    if (!element.hasClassName(className))
+      element.className += (element.className ? ' ' : '') + className;
+    return element;
+  },
+
+  removeClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    element.className = element.className.replace(
+      new RegExp(&quot;(^|\\s+)&quot; + className + &quot;(\\s+|$)&quot;), ' ').strip();
+    return element;
+  },
+
+  toggleClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return element[element.hasClassName(className) ?
+      'removeClassName' : 'addClassName'](className);
+  },
+
+  // removes whitespace-only text node children
+  cleanWhitespace: function(element) {
+    element = $(element);
+    var node = element.firstChild;
+    while (node) {
+      var nextNode = node.nextSibling;
+      if (node.nodeType == 3 &amp;&amp; !/\S/.test(node.nodeValue))
+        element.removeChild(node);
+      node = nextNode;
+    }
+    return element;
+  },
+
+  empty: function(element) {
+    return $(element).innerHTML.blank();
+  },
+
+  descendantOf: function(element, ancestor) {
+    element = $(element), ancestor = $(ancestor);
+
+    if (element.compareDocumentPosition)
+      return (element.compareDocumentPosition(ancestor) &amp; 8) === 8;
+
+    if (element.sourceIndex &amp;&amp; !Prototype.Browser.Opera) {
+      var e = element.sourceIndex, a = ancestor.sourceIndex,
+       nextAncestor = ancestor.nextSibling;
+      if (!nextAncestor) {
+        do { ancestor = ancestor.parentNode; }
+        while (!(nextAncestor = ancestor.nextSibling) &amp;&amp; ancestor.parentNode);
+      }
+      if (nextAncestor) return (e &gt; a &amp;&amp; e &lt; nextAncestor.sourceIndex);
+    }
+
+    while (element = element.parentNode)
+      if (element == ancestor) return true;
+    return false;
+  },
+
+  scrollTo: function(element) {
+    element = $(element);
+    var pos = element.cumulativeOffset();
+    window.scrollTo(pos[0], pos[1]);
+    return element;
+  },
+
+  getStyle: function(element, style) {
+    element = $(element);
+    style = style == 'float' ? 'cssFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value) {
+      var css = document.defaultView.getComputedStyle(element, null);
+      value = css ? css[style] : null;
+    }
+    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+    return value == 'auto' ? null : value;
+  },
+
+  getOpacity: function(element) {
+    return $(element).getStyle('opacity');
+  },
+
+  setStyle: function(element, styles) {
+    element = $(element);
+    var elementStyle = element.style, match;
+    if (Object.isString(styles)) {
+      element.style.cssText += ';' + styles;
+      return styles.include('opacity') ?
+        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+    }
+    for (var property in styles)
+      if (property == 'opacity') element.setOpacity(styles[property]);
+      else
+        elementStyle[(property == 'float' || property == 'cssFloat') ?
+          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
+            property] = styles[property];
+
+    return element;
+  },
+
+  setOpacity: function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value &lt; 0.00001) ? 0 : value;
+    return element;
+  },
+
+  getDimensions: function(element) {
+    element = $(element);
+    var display = $(element).getStyle('display');
+    if (display != 'none' &amp;&amp; display != null) // Safari bug
+      return {width: element.offsetWidth, height: element.offsetHeight};
+
+    // All *Width and *Height properties give 0 on elements with display none,
+    // so enable the element temporarily
+    var els = element.style;
+    var originalVisibility = els.visibility;
+    var originalPosition = els.position;
+    var originalDisplay = els.display;
+    els.visibility = 'hidden';
+    els.position = 'absolute';
+    els.display = 'block';
+    var originalWidth = element.clientWidth;
+    var originalHeight = element.clientHeight;
+    els.display = originalDisplay;
+    els.position = originalPosition;
+    els.visibility = originalVisibility;
+    return {width: originalWidth, height: originalHeight};
+  },
+
+  makePositioned: function(element) {
+    element = $(element);
+    var pos = Element.getStyle(element, 'position');
+    if (pos == 'static' || !pos) {
+      element._madePositioned = true;
+      element.style.position = 'relative';
+      // Opera returns the offset relative to the positioning context, when an
+      // element is position relative but top and left have not been defined
+      if (window.opera) {
+        element.style.top = 0;
+        element.style.left = 0;
+      }
+    }
+    return element;
+  },
+
+  undoPositioned: function(element) {
+    element = $(element);
+    if (element._madePositioned) {
+      element._madePositioned = undefined;
+      element.style.position =
+        element.style.top =
+        element.style.left =
+        element.style.bottom =
+        element.style.right = '';
+    }
+    return element;
+  },
+
+  makeClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return element;
+    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+    if (element._overflow !== 'hidden')
+      element.style.overflow = 'hidden';
+    return element;
+  },
+
+  undoClipping: function(element) {
+    element = $(element);
+    if (!element._overflow) return element;
+    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+    element._overflow = null;
+    return element;
+  },
+
+  cumulativeOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  positionedOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (element.tagName == 'BODY') break;
+        var p = Element.getStyle(element, 'position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  absolutize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'absolute') return;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    var offsets = element.positionedOffset();
+    var top     = offsets[1];
+    var left    = offsets[0];
+    var width   = element.clientWidth;
+    var height  = element.clientHeight;
+
+    element._originalLeft   = left - parseFloat(element.style.left  || 0);
+    element._originalTop    = top  - parseFloat(element.style.top || 0);
+    element._originalWidth  = element.style.width;
+    element._originalHeight = element.style.height;
+
+    element.style.position = 'absolute';
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.width  = width + 'px';
+    element.style.height = height + 'px';
+    return element;
+  },
+
+  relativize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'relative') return;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    element.style.position = 'relative';
+    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
+    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.height = element._originalHeight;
+    element.style.width  = element._originalWidth;
+    return element;
+  },
+
+  cumulativeScrollOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  getOffsetParent: function(element) {
+    if (element.offsetParent) return $(element.offsetParent);
+    if (element == document.body) return $(element);
+
+    while ((element = element.parentNode) &amp;&amp; element != document.body)
+      if (Element.getStyle(element, 'position') != 'static')
+        return $(element);
+
+    return $(document.body);
+  },
+
+  viewportOffset: function(forElement) {
+    var valueT = 0, valueL = 0;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+
+      // Safari fix
+      if (element.offsetParent == document.body &amp;&amp;
+        Element.getStyle(element, 'position') == 'absolute') break;
+
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  clonePosition: function(element, source) {
+    var options = Object.extend({
+      setLeft:    true,
+      setTop:     true,
+      setWidth:   true,
+      setHeight:  true,
+      offsetTop:  0,
+      offsetLeft: 0
+    }, arguments[2] || { });
+
+    // find page position of source
+    source = $(source);
+    var p = source.viewportOffset();
+
+    // find coordinate system to use
+    element = $(element);
+    var delta = [0, 0];
+    var parent = null;
+    // delta [0,0] will do fine with position: fixed elements,
+    // position:absolute needs offsetParent deltas
+    if (Element.getStyle(element, 'position') == 'absolute') {
+      parent = element.getOffsetParent();
+      delta = parent.viewportOffset();
+    }
+
+    // correct by body offsets (fixes Safari)
+    if (parent == document.body) {
+      delta[0] -= document.body.offsetLeft;
+      delta[1] -= document.body.offsetTop;
+    }
+
+    // set position
+    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
+    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
+    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
+    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+    return element;
+  }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+  getElementsBySelector: Element.Methods.select,
+  childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+  write: {
+    names: {
+      className: 'class',
+      htmlFor:   'for'
+    },
+    values: { }
+  }
+};
+
+
+if (!document.createRange || Prototype.Browser.Opera) {
+  Element.Methods.insert = function(element, insertions) {
+    element = $(element);
+
+    if (Object.isString(insertions) || Object.isNumber(insertions) ||
+        Object.isElement(insertions) || (insertions &amp;&amp; (insertions.toElement || insertions.toHTML)))
+          insertions = { bottom: insertions };
+
+    var t = Element._insertionTranslations, content, position, pos, tagName;
+
+    for (position in insertions) {
+      content  = insertions[position];
+      position = position.toLowerCase();
+      pos      = t[position];
+
+      if (content &amp;&amp; content.toElement) content = content.toElement();
+      if (Object.isElement(content)) {
+        pos.insert(element, content);
+        continue;
+      }
+
+      content = Object.toHTML(content);
+      tagName = ((position == 'before' || position == 'after')
+        ? element.parentNode : element).tagName.toUpperCase();
+
+      if (t.tags[tagName]) {
+        var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+        if (position == 'top' || position == 'after') fragments.reverse();
+        fragments.each(pos.insert.curry(element));
+      }
+      else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
+
+      content.evalScripts.bind(content).defer();
+    }
+
+    return element;
+  };
+}
+
+if (Prototype.Browser.Opera) {
+  Element.Methods._getStyle = Element.Methods.getStyle;
+  Element.Methods.getStyle = function(element, style) {
+    switch(style) {
+      case 'left':
+      case 'top':
+      case 'right':
+      case 'bottom':
+        if (Element._getStyle(element, 'position') == 'static') return null;
+      default: return Element._getStyle(element, style);
+    }
+  };
+  Element.Methods._readAttribute = Element.Methods.readAttribute;
+  Element.Methods.readAttribute = function(element, attribute) {
+    if (attribute == 'title') return element.title;
+    return Element._readAttribute(element, attribute);
+  };
+}
+
+else if (Prototype.Browser.IE) {
+  $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
+    Element.Methods[method] = Element.Methods[method].wrap(
+      function(proceed, element) {
+        element = $(element);
+        var position = element.getStyle('position');
+        if (position != 'static') return proceed(element);
+        element.setStyle({ position: 'relative' });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+  });
+
+  Element.Methods.getStyle = function(element, style) {
+    element = $(element);
+    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value &amp;&amp; element.currentStyle) value = element.currentStyle[style];
+
+    if (style == 'opacity') {
+      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+        if (value[1]) return parseFloat(value[1]) / 100;
+      return 1.0;
+    }
+
+    if (value == 'auto') {
+      if ((style == 'width' || style == 'height') &amp;&amp; (element.getStyle('display') != 'none'))
+        return element['offset' + style.capitalize()] + 'px';
+      return null;
+    }
+    return value;
+  };
+
+  Element.Methods.setOpacity = function(element, value) {
+    function stripAlpha(filter){
+      return filter.replace(/alpha\([^\)]*\)/gi,'');
+    }
+    element = $(element);
+    var currentStyle = element.currentStyle;
+    if ((currentStyle &amp;&amp; !currentStyle.hasLayout) ||
+      (!currentStyle &amp;&amp; element.style.zoom == 'normal'))
+        element.style.zoom = 1;
+
+    var filter = element.getStyle('filter'), style = element.style;
+    if (value == 1 || value === '') {
+      (filter = stripAlpha(filter)) ?
+        style.filter = filter : style.removeAttribute('filter');
+      return element;
+    } else if (value &lt; 0.00001) value = 0;
+    style.filter = stripAlpha(filter) +
+      'alpha(opacity=' + (value * 100) + ')';
+    return element;
+  };
+
+  Element._attributeTranslations = {
+    read: {
+      names: {
+        'class': 'className',
+        'for':   'htmlFor'
+      },
+      values: {
+        _getAttr: function(element, attribute) {
+          return element.getAttribute(attribute, 2);
+        },
+        _getAttrNode: function(element, attribute) {
+          var node = element.getAttributeNode(attribute);
+          return node ? node.value : &quot;&quot;;
+        },
+        _getEv: function(element, attribute) {
+          var attribute = element.getAttribute(attribute);
+          return attribute ? attribute.toString().slice(23, -2) : null;
+        },
+        _flag: function(element, attribute) {
+          return $(element).hasAttribute(attribute) ? attribute : null;
+        },
+        style: function(element) {
+          return element.style.cssText.toLowerCase();
+        },
+        title: function(element) {
+          return element.title;
+        }
+      }
+    }
+  };
+
+  Element._attributeTranslations.write = {
+    names: Object.clone(Element._attributeTranslations.read.names),
+    values: {
+      checked: function(element, value) {
+        element.checked = !!value;
+      },
+
+      style: function(element, value) {
+        element.style.cssText = value ? value : '';
+      }
+    }
+  };
+
+  Element._attributeTranslations.has = {};
+
+  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+      'encType maxLength readOnly longDesc').each(function(attr) {
+    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+  });
+
+  (function(v) {
+    Object.extend(v, {
+      href:        v._getAttr,
+      src:         v._getAttr,
+      type:        v._getAttr,
+      action:      v._getAttrNode,
+      disabled:    v._flag,
+      checked:     v._flag,
+      readonly:    v._flag,
+      multiple:    v._flag,
+      onload:      v._getEv,
+      onunload:    v._getEv,
+      onclick:     v._getEv,
+      ondblclick:  v._getEv,
+      onmousedown: v._getEv,
+      onmouseup:   v._getEv,
+      onmouseover: v._getEv,
+      onmousemove: v._getEv,
+      onmouseout:  v._getEv,
+      onfocus:     v._getEv,
+      onblur:      v._getEv,
+      onkeypress:  v._getEv,
+      onkeydown:   v._getEv,
+      onkeyup:     v._getEv,
+      onsubmit:    v._getEv,
+      onreset:     v._getEv,
+      onselect:    v._getEv,
+      onchange:    v._getEv
+    });
+  })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko &amp;&amp; /rv:1\.8\.0/.test(navigator.userAgent)) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1) ? 0.999999 :
+      (value === '') ? '' : (value &lt; 0.00001) ? 0 : value;
+    return element;
+  };
+}
+
+else if (Prototype.Browser.WebKit) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value &lt; 0.00001) ? 0 : value;
+
+    if (value == 1)
+      if(element.tagName == 'IMG' &amp;&amp; element.width) {
+        element.width++; element.width--;
+      } else try {
+        var n = document.createTextNode(' ');
+        element.appendChild(n);
+        element.removeChild(n);
+      } catch (e) { }
+
+    return element;
+  };
+
+  // Safari returns margins on body which is incorrect if the child is absolutely
+  // positioned.  For performance reasons, redefine Position.cumulativeOffset for
+  // KHTML/WebKit only.
+  Element.Methods.cumulativeOffset = function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == document.body)
+        if (Element.getStyle(element, 'position') == 'absolute') break;
+
+      element = element.offsetParent;
+    } while (element);
+
+    return Element._returnOffset(valueL, valueT);
+  };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+  Element.Methods.update = function(element, content) {
+    element = $(element);
+
+    if (content &amp;&amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+
+    content = Object.toHTML(content);
+    var tagName = element.tagName.toUpperCase();
+
+    if (tagName in Element._insertionTranslations.tags) {
+      $A(element.childNodes).each(function(node) { element.removeChild(node) });
+      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+        .each(function(node) { element.appendChild(node) });
+    }
+    else element.innerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+if (document.createElement('div').outerHTML) {
+  Element.Methods.replace = function(element, content) {
+    element = $(element);
+
+    if (content &amp;&amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) {
+      element.parentNode.replaceChild(content, element);
+      return element;
+    }
+
+    content = Object.toHTML(content);
+    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+    if (Element._insertionTranslations.tags[tagName]) {
+      var nextSibling = element.next();
+      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      parent.removeChild(element);
+      if (nextSibling)
+        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+      else
+        fragments.each(function(node) { parent.appendChild(node) });
+    }
+    else element.outerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+Element._returnOffset = function(l, t) {
+  var result = [l, t];
+  result.left = l;
+  result.top = t;
+  return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+  div.innerHTML = t[0] + html + t[1];
+  t[2].times(function() { div = div.firstChild });
+  return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+  before: {
+    adjacency: 'beforeBegin',
+    insert: function(element, node) {
+      element.parentNode.insertBefore(node, element);
+    },
+    initializeRange: function(element, range) {
+      range.setStartBefore(element);
+    }
+  },
+  top: {
+    adjacency: 'afterBegin',
+    insert: function(element, node) {
+      element.insertBefore(node, element.firstChild);
+    },
+    initializeRange: function(element, range) {
+      range.selectNodeContents(element);
+      range.collapse(true);
+    }
+  },
+  bottom: {
+    adjacency: 'beforeEnd',
+    insert: function(element, node) {
+      element.appendChild(node);
+    }
+  },
+  after: {
+    adjacency: 'afterEnd',
+    insert: function(element, node) {
+      element.parentNode.insertBefore(node, element.nextSibling);
+    },
+    initializeRange: function(element, range) {
+      range.setStartAfter(element);
+    }
+  },
+  tags: {
+    TABLE:  ['&lt;table&gt;',                '&lt;/table&gt;',                   1],
+    TBODY:  ['&lt;table&gt;&lt;tbody&gt;',         '&lt;/tbody&gt;&lt;/table&gt;',           2],
+    TR:     ['&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;',     '&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;',      3],
+    TD:     ['&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;', '&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;', 4],
+    SELECT: ['&lt;select&gt;',               '&lt;/select&gt;',                  1]
+  }
+};
+
+(function() {
+  this.bottom.initializeRange = this.top.initializeRange;
+  Object.extend(this.tags, {
+    THEAD: this.tags.TBODY,
+    TFOOT: this.tags.TBODY,
+    TH:    this.tags.TD
+  });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    attribute = Element._attributeTranslations.has[attribute] || attribute;
+    var node = $(element).getAttributeNode(attribute);
+    return node &amp;&amp; node.specified;
+  }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &amp;&amp;
+    document.createElement('div').__proto__) {
+  window.HTMLElement = { };
+  window.HTMLElement.prototype = document.createElement('div').__proto__;
+  Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+  if (Prototype.BrowserFeatures.SpecificElementExtensions)
+    return Prototype.K;
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || element._extendedByPrototype ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+      tagName = element.tagName, property, value;
+
+    // extend methods for specific tags
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    for (property in methods) {
+      value = methods[property];
+      if (Object.isFunction(value) &amp;&amp; !(property in element))
+        element[property] = value.methodize();
+    }
+
+    element._extendedByPrototype = Prototype.emptyFunction;
+    return element;
+
+  }, {
+    refresh: function() {
+      // extend methods for all tags (Safari doesn't need this)
+      if (!Prototype.BrowserFeatures.ElementExtensions) {
+        Object.extend(Methods, Element.Methods);
+        Object.extend(Methods, Element.Methods.Simulated);
+      }
+    }
+  });
+
+  extend.refresh();
+  return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+  if (element.hasAttribute) return element.hasAttribute(attribute);
+  return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+  if (!methods) {
+    Object.extend(Form, Form.Methods);
+    Object.extend(Form.Element, Form.Element.Methods);
+    Object.extend(Element.Methods.ByTag, {
+      &quot;FORM&quot;:     Object.clone(Form.Methods),
+      &quot;INPUT&quot;:    Object.clone(Form.Element.Methods),
+      &quot;SELECT&quot;:   Object.clone(Form.Element.Methods),
+      &quot;TEXTAREA&quot;: Object.clone(Form.Element.Methods)
+    });
+  }
+
+  if (arguments.length == 2) {
+    var tagName = methods;
+    methods = arguments[1];
+  }
+
+  if (!tagName) Object.extend(Element.Methods, methods || { });
+  else {
+    if (Object.isArray(tagName)) tagName.each(extend);
+    else extend(tagName);
+  }
+
+  function extend(tagName) {
+    tagName = tagName.toUpperCase();
+    if (!Element.Methods.ByTag[tagName])
+      Element.Methods.ByTag[tagName] = { };
+    Object.extend(Element.Methods.ByTag[tagName], methods);
+  }
+
+  function copy(methods, destination, onlyIfAbsent) {
+    onlyIfAbsent = onlyIfAbsent || false;
+    for (var property in methods) {
+      var value = methods[property];
+      if (!Object.isFunction(value)) continue;
+      if (!onlyIfAbsent || !(property in destination))
+        destination[property] = value.methodize();
+    }
+  }
+
+  function findDOMClass(tagName) {
+    var klass;
+    var trans = {
+      &quot;OPTGROUP&quot;: &quot;OptGroup&quot;, &quot;TEXTAREA&quot;: &quot;TextArea&quot;, &quot;P&quot;: &quot;Paragraph&quot;,
+      &quot;FIELDSET&quot;: &quot;FieldSet&quot;, &quot;UL&quot;: &quot;UList&quot;, &quot;OL&quot;: &quot;OList&quot;, &quot;DL&quot;: &quot;DList&quot;,
+      &quot;DIR&quot;: &quot;Directory&quot;, &quot;H1&quot;: &quot;Heading&quot;, &quot;H2&quot;: &quot;Heading&quot;, &quot;H3&quot;: &quot;Heading&quot;,
+      &quot;H4&quot;: &quot;Heading&quot;, &quot;H5&quot;: &quot;Heading&quot;, &quot;H6&quot;: &quot;Heading&quot;, &quot;Q&quot;: &quot;Quote&quot;,
+      &quot;INS&quot;: &quot;Mod&quot;, &quot;DEL&quot;: &quot;Mod&quot;, &quot;A&quot;: &quot;Anchor&quot;, &quot;IMG&quot;: &quot;Image&quot;, &quot;CAPTION&quot;:
+      &quot;TableCaption&quot;, &quot;COL&quot;: &quot;TableCol&quot;, &quot;COLGROUP&quot;: &quot;TableCol&quot;, &quot;THEAD&quot;:
+      &quot;TableSection&quot;, &quot;TFOOT&quot;: &quot;TableSection&quot;, &quot;TBODY&quot;: &quot;TableSection&quot;, &quot;TR&quot;:
+      &quot;TableRow&quot;, &quot;TH&quot;: &quot;TableCell&quot;, &quot;TD&quot;: &quot;TableCell&quot;, &quot;FRAMESET&quot;:
+      &quot;FrameSet&quot;, &quot;IFRAME&quot;: &quot;IFrame&quot;
+    };
+    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName.capitalize() + 'Element';
+    if (window[klass]) return window[klass];
+
+    window[klass] = { };
+    window[klass].prototype = document.createElement(tagName).__proto__;
+    return window[klass];
+  }
+
+  if (F.ElementExtensions) {
+    copy(Element.Methods, HTMLElement.prototype);
+    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+  }
+
+  if (F.SpecificElementExtensions) {
+    for (var tag in Element.Methods.ByTag) {
+      var klass = findDOMClass(tag);
+      if (Object.isUndefined(klass)) continue;
+      copy(T[tag], klass.prototype);
+    }
+  }
+
+  Object.extend(Element, Element.Methods);
+  delete Element.ByTag;
+
+  if (Element.extend.refresh) Element.extend.refresh();
+  Element.cache = { };
+};
+
+document.viewport = {
+  getDimensions: function() {
+    var dimensions = { };
+    $w('width height').each(function(d) {
+      var D = d.capitalize();
+      dimensions[d] = self['inner' + D] ||
+       (document.documentElement['client' + D] || document.body['client' + D]);
+    });
+    return dimensions;
+  },
+
+  getWidth: function() {
+    return this.getDimensions().width;
+  },
+
+  getHeight: function() {
+    return this.getDimensions().height;
+  },
+
+  getScrollOffsets: function() {
+    return Element._returnOffset(
+      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+  }
+};
+/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license.  Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+  initialize: function(expression) {
+    this.expression = expression.strip();
+    this.compileMatcher();
+  },
+
+  compileMatcher: function() {
+    // Selectors with namespaced attributes can't use the XPath version
+    if (Prototype.BrowserFeatures.XPath &amp;&amp; !(/(\[[\w-]*?:|:checked)/).test(this.expression))
+      return this.compileXPathMatcher();
+
+    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+        c = Selector.criteria, le, p, m;
+
+    if (Selector._cache[e]) {
+      this.matcher = Selector._cache[e];
+      return;
+    }
+
+    this.matcher = [&quot;this.matcher = function(root) {&quot;,
+                    &quot;var r = root, h = Selector.handlers, c = false, n;&quot;];
+
+    while (e &amp;&amp; le != e &amp;&amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+            new Template(c[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.matcher.push(&quot;return h.unique(n);\n}&quot;);
+    eval(this.matcher.join('\n'));
+    Selector._cache[this.expression] = this.matcher;
+  },
+
+  compileXPathMatcher: function() {
+    var e = this.expression, ps = Selector.patterns,
+        x = Selector.xpath, le, m;
+
+    if (Selector._cache[e]) {
+      this.xpath = Selector._cache[e]; return;
+    }
+
+    this.matcher = ['.//*'];
+    while (e &amp;&amp; le != e &amp;&amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        if (m = e.match(ps[i])) {
+          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+            new Template(x[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.xpath = this.matcher.join('');
+    Selector._cache[this.expression] = this.xpath;
+  },
+
+  findElements: function(root) {
+    root = root || document;
+    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
+    return this.matcher(root);
+  },
+
+  match: function(element) {
+    this.tokens = [];
+
+    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+    var le, p, m;
+
+    while (e &amp;&amp; le !== e &amp;&amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          // use the Selector.assertions methods unless the selector
+          // is too complex.
+          if (as[i]) {
+            this.tokens.push([i, Object.clone(m)]);
+            e = e.replace(m[0], '');
+          } else {
+            // reluctantly do a document-wide search
+            // and look for a match in the array
+            return this.findElements(document).include(element);
+          }
+        }
+      }
+    }
+
+    var match = true, name, matches;
+    for (var i = 0, token; token = this.tokens[i]; i++) {
+      name = token[0], matches = token[1];
+      if (!Selector.assertions[name](element, matches)) {
+        match = false; break;
+      }
+    }
+
+    return match;
+  },
+
+  toString: function() {
+    return this.expression;
+  },
+
+  inspect: function() {
+    return &quot;#&lt;Selector:&quot; + this.expression.inspect() + &quot;&gt;&quot;;
+  }
+});
+
+Object.extend(Selector, {
+  _cache: { },
+
+  xpath: {
+    descendant:   &quot;//*&quot;,
+    child:        &quot;/*&quot;,
+    adjacent:     &quot;/following-sibling::*[1]&quot;,
+    laterSibling: '/following-sibling::*',
+    tagName:      function(m) {
+      if (m[1] == '*') return '';
+      return &quot;[local-name()='&quot; + m[1].toLowerCase() +
+             &quot;' or local-name()='&quot; + m[1].toUpperCase() + &quot;']&quot;;
+    },
+    className:    &quot;[contains(concat(' ', @class, ' '), ' #{1} ')]&quot;,
+    id:           &quot;[@id='#{1}']&quot;,
+    attrPresence: &quot;[@#{1}]&quot;,
+    attr: function(m) {
+      m[3] = m[5] || m[6];
+      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+    },
+    pseudo: function(m) {
+      var h = Selector.xpath.pseudos[m[1]];
+      if (!h) return '';
+      if (Object.isFunction(h)) return h(m);
+      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+    },
+    operators: {
+      '=':  &quot;[@#{1}='#{3}']&quot;,
+      '!=': &quot;[@#{1}!='#{3}']&quot;,
+      '^=': &quot;[starts-with(@#{1}, '#{3}')]&quot;,
+      '$=': &quot;[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']&quot;,
+      '*=': &quot;[contains(@#{1}, '#{3}')]&quot;,
+      '~=': &quot;[contains(concat(' ', @#{1}, ' '), ' #{3} ')]&quot;,
+      '|=': &quot;[contains(concat('-', @#{1}, '-'), '-#{3}-')]&quot;
+    },
+    pseudos: {
+      'first-child': '[not(preceding-sibling::*)]',
+      'last-child':  '[not(following-sibling::*)]',
+      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
+      'empty':       &quot;[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]&quot;,
+      'checked':     &quot;[@checked]&quot;,
+      'disabled':    &quot;[@disabled]&quot;,
+      'enabled':     &quot;[not(@disabled)]&quot;,
+      'not': function(m) {
+        var e = m[6], p = Selector.patterns,
+            x = Selector.xpath, le, m, v;
+
+        var exclusion = [];
+        while (e &amp;&amp; le != e &amp;&amp; (/\S/).test(e)) {
+          le = e;
+          for (var i in p) {
+            if (m = e.match(p[i])) {
+              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+              exclusion.push(&quot;(&quot; + v.substring(1, v.length - 1) + &quot;)&quot;);
+              e = e.replace(m[0], '');
+              break;
+            }
+          }
+        }
+        return &quot;[not(&quot; + exclusion.join(&quot; and &quot;) + &quot;)]&quot;;
+      },
+      'nth-child':      function(m) {
+        return Selector.xpath.pseudos.nth(&quot;(count(./preceding-sibling::*) + 1) &quot;, m);
+      },
+      'nth-last-child': function(m) {
+        return Selector.xpath.pseudos.nth(&quot;(count(./following-sibling::*) + 1) &quot;, m);
+      },
+      'nth-of-type':    function(m) {
+        return Selector.xpath.pseudos.nth(&quot;position() &quot;, m);
+      },
+      'nth-last-of-type': function(m) {
+        return Selector.xpath.pseudos.nth(&quot;(last() + 1 - position()) &quot;, m);
+      },
+      'first-of-type':  function(m) {
+        m[6] = &quot;1&quot;; return Selector.xpath.pseudos['nth-of-type'](m);
+      },
+      'last-of-type':   function(m) {
+        m[6] = &quot;1&quot;; return Selector.xpath.pseudos['nth-last-of-type'](m);
+      },
+      'only-of-type':   function(m) {
+        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+      },
+      nth: function(fragment, m) {
+        var mm, formula = m[6], predicate;
+        if (formula == 'even') formula = '2n+0';
+        if (formula == 'odd')  formula = '2n+1';
+        if (mm = formula.match(/^(\d+)$/)) // digit only
+          return '[' + fragment + &quot;= &quot; + mm[1] + ']';
+        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+          if (mm[1] == &quot;-&quot;) mm[1] = -1;
+          var a = mm[1] ? Number(mm[1]) : 1;
+          var b = mm[2] ? Number(mm[2]) : 0;
+          predicate = &quot;[((#{fragment} - #{b}) mod #{a} = 0) and &quot; +
+          &quot;((#{fragment} - #{b}) div #{a} &gt;= 0)]&quot;;
+          return new Template(predicate).evaluate({
+            fragment: fragment, a: a, b: b });
+        }
+      }
+    }
+  },
+
+  criteria: {
+    tagName:      'n = h.tagName(n, r, &quot;#{1}&quot;, c);   c = false;',
+    className:    'n = h.className(n, r, &quot;#{1}&quot;, c); c = false;',
+    id:           'n = h.id(n, r, &quot;#{1}&quot;, c);        c = false;',
+    attrPresence: 'n = h.attrPresence(n, r, &quot;#{1}&quot;); c = false;',
+    attr: function(m) {
+      m[3] = (m[5] || m[6]);
+      return new Template('n = h.attr(n, r, &quot;#{1}&quot;, &quot;#{3}&quot;, &quot;#{2}&quot;); c = false;').evaluate(m);
+    },
+    pseudo: function(m) {
+      if (m[6]) m[6] = m[6].replace(/&quot;/g, '\\&quot;');
+      return new Template('n = h.pseudo(n, &quot;#{1}&quot;, &quot;#{6}&quot;, r, c); c = false;').evaluate(m);
+    },
+    descendant:   'c = &quot;descendant&quot;;',
+    child:        'c = &quot;child&quot;;',
+    adjacent:     'c = &quot;adjacent&quot;;',
+    laterSibling: 'c = &quot;laterSibling&quot;;'
+  },
+
+  patterns: {
+    // combinators must be listed first
+    // (and descendant needs to be last combinator)
+    laterSibling: /^\s*~\s*/,
+    child:        /^\s*&gt;\s*/,
+    adjacent:     /^\s*\+\s*/,
+    descendant:   /^\s/,
+
+    // selectors follow
+    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
+    id:           /^#([\w\-\*]+)(\b|$)/,
+    className:    /^\.([\w\-\*]+)(\b|$)/,
+    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
+    attrPresence: /^\[([\w]+)\]/,
+    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['&quot;])([^\4]*?)\4|([^'&quot;][^\]]*?)))?\]/
+  },
+
+  // for Selector.match and Element#match
+  assertions: {
+    tagName: function(element, matches) {
+      return matches[1].toUpperCase() == element.tagName.toUpperCase();
+    },
+
+    className: function(element, matches) {
+      return Element.hasClassName(element, matches[1]);
+    },
+
+    id: function(element, matches) {
+      return element.id === matches[1];
+    },
+
+    attrPresence: function(element, matches) {
+      return Element.hasAttribute(element, matches[1]);
+    },
+
+    attr: function(element, matches) {
+      var nodeValue = Element.readAttribute(element, matches[1]);
+      return Selector.operators[matches[2]](nodeValue, matches[3]);
+    }
+  },
+
+  handlers: {
+    // UTILITY FUNCTIONS
+    // joins two collections
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        a.push(node);
+      return a;
+    },
+
+    // marks an array of nodes for counting
+    mark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._counted = true;
+      return nodes;
+    },
+
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._counted = undefined;
+      return nodes;
+    },
+
+    // mark each child node with its position (for nth calls)
+    // &quot;ofType&quot; flag indicates whether we're indexing for nth-of-type
+    // rather than nth-child
+    index: function(parentNode, reverse, ofType) {
+      parentNode._counted = true;
+      if (reverse) {
+        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i &gt;= 0; i--) {
+          var node = nodes[i];
+          if (node.nodeType == 1 &amp;&amp; (!ofType || node._counted)) node.nodeIndex = j++;
+        }
+      } else {
+        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+          if (node.nodeType == 1 &amp;&amp; (!ofType || node._counted)) node.nodeIndex = j++;
+      }
+    },
+
+    // filters out duplicates and extends all nodes
+    unique: function(nodes) {
+      if (nodes.length == 0) return nodes;
+      var results = [], n;
+      for (var i = 0, l = nodes.length; i &lt; l; i++)
+        if (!(n = nodes[i])._counted) {
+          n._counted = true;
+          results.push(Element.extend(n));
+        }
+      return Selector.handlers.unmark(results);
+    },
+
+    // COMBINATOR FUNCTIONS
+    descendant: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, node.getElementsByTagName('*'));
+      return results;
+    },
+
+    child: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
+          if (child.nodeType == 1 &amp;&amp; child.tagName != '!') results.push(child);
+      }
+      return results;
+    },
+
+    adjacent: function(nodes) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        var next = this.nextElementSibling(node);
+        if (next) results.push(next);
+      }
+      return results;
+    },
+
+    laterSibling: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, Element.nextSiblings(node));
+      return results;
+    },
+
+    nextElementSibling: function(node) {
+      while (node = node.nextSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    previousElementSibling: function(node) {
+      while (node = node.previousSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    // TOKEN FUNCTIONS
+    tagName: function(nodes, root, tagName, combinator) {
+      tagName = tagName.toUpperCase();
+      var results = [], h = Selector.handlers;
+      if (nodes) {
+        if (combinator) {
+          // fastlane for ordinary descendant combinators
+          if (combinator == &quot;descendant&quot;) {
+            for (var i = 0, node; node = nodes[i]; i++)
+              h.concat(results, node.getElementsByTagName(tagName));
+            return results;
+          } else nodes = this[combinator](nodes);
+          if (tagName == &quot;*&quot;) return nodes;
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName.toUpperCase() == tagName) results.push(node);
+        return results;
+      } else return root.getElementsByTagName(tagName);
+    },
+
+    id: function(nodes, root, id, combinator) {
+      var targetNode = $(id), h = Selector.handlers;
+      if (!targetNode) return [];
+      if (!nodes &amp;&amp; root == document) return [targetNode];
+      if (nodes) {
+        if (combinator) {
+          if (combinator == 'child') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (targetNode.parentNode == node) return [targetNode];
+          } else if (combinator == 'descendant') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Element.descendantOf(targetNode, node)) return [targetNode];
+          } else if (combinator == 'adjacent') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Selector.handlers.previousElementSibling(targetNode) == node)
+                return [targetNode];
+          } else nodes = h[combinator](nodes);
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node == targetNode) return [targetNode];
+        return [];
+      }
+      return (targetNode &amp;&amp; Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+    },
+
+    className: function(nodes, root, className, combinator) {
+      if (nodes &amp;&amp; combinator) nodes = this[combinator](nodes);
+      return Selector.handlers.byClassName(nodes, root, className);
+    },
+
+    byClassName: function(nodes, root, className) {
+      if (!nodes) nodes = Selector.handlers.descendant([root]);
+      var needle = ' ' + className + ' ';
+      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+        nodeClassName = node.className;
+        if (nodeClassName.length == 0) continue;
+        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+          results.push(node);
+      }
+      return results;
+    },
+
+    attrPresence: function(nodes, root, attr) {
+      if (!nodes) nodes = root.getElementsByTagName(&quot;*&quot;);
+      var results = [];
+      for (var i = 0, node; node = nodes[i]; i++)
+        if (Element.hasAttribute(node, attr)) results.push(node);
+      return results;
+    },
+
+    attr: function(nodes, root, attr, value, operator) {
+      if (!nodes) nodes = root.getElementsByTagName(&quot;*&quot;);
+      var handler = Selector.operators[operator], results = [];
+      for (var i = 0, node; node = nodes[i]; i++) {
+        var nodeValue = Element.readAttribute(node, attr);
+        if (nodeValue === null) continue;
+        if (handler(nodeValue, value)) results.push(node);
+      }
+      return results;
+    },
+
+    pseudo: function(nodes, name, value, root, combinator) {
+      if (nodes &amp;&amp; combinator) nodes = this[combinator](nodes);
+      if (!nodes) nodes = root.getElementsByTagName(&quot;*&quot;);
+      return Selector.pseudos[name](nodes, value, root);
+    }
+  },
+
+  pseudos: {
+    'first-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.previousElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'last-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.nextElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'only-child': function(nodes, value, root) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!h.previousElementSibling(node) &amp;&amp; !h.nextElementSibling(node))
+          results.push(node);
+      return results;
+    },
+    'nth-child':        function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root);
+    },
+    'nth-last-child':   function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true);
+    },
+    'nth-of-type':      function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, false, true);
+    },
+    'nth-last-of-type': function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true, true);
+    },
+    'first-of-type':    function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, &quot;1&quot;, root, false, true);
+    },
+    'last-of-type':     function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, &quot;1&quot;, root, true, true);
+    },
+    'only-of-type':     function(nodes, formula, root) {
+      var p = Selector.pseudos;
+      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+    },
+
+    // handles the an+b logic
+    getIndices: function(a, b, total) {
+      if (a == 0) return b &gt; 0 ? [b] : [];
+      return $R(1, total).inject([], function(memo, i) {
+        if (0 == (i - b) % a &amp;&amp; (i - b) / a &gt;= 0) memo.push(i);
+        return memo;
+      });
+    },
+
+    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+    nth: function(nodes, formula, root, reverse, ofType) {
+      if (nodes.length == 0) return [];
+      if (formula == 'even') formula = '2n+0';
+      if (formula == 'odd')  formula = '2n+1';
+      var h = Selector.handlers, results = [], indexed = [], m;
+      h.mark(nodes);
+      for (var i = 0, node; node = nodes[i]; i++) {
+        if (!node.parentNode._counted) {
+          h.index(node.parentNode, reverse, ofType);
+          indexed.push(node.parentNode);
+        }
+      }
+      if (formula.match(/^\d+$/)) { // just a number
+        formula = Number(formula);
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.nodeIndex == formula) results.push(node);
+      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+        if (m[1] == &quot;-&quot;) m[1] = -1;
+        var a = m[1] ? Number(m[1]) : 1;
+        var b = m[2] ? Number(m[2]) : 0;
+        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+          for (var j = 0; j &lt; l; j++)
+            if (node.nodeIndex == indices[j]) results.push(node);
+        }
+      }
+      h.unmark(nodes);
+      h.unmark(indexed);
+      return results;
+    },
+
+    'empty': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        // IE treats comments as element nodes
+        if (node.tagName == '!' || (node.firstChild &amp;&amp; !node.innerHTML.match(/^\s*$/))) continue;
+        results.push(node);
+      }
+      return results;
+    },
+
+    'not': function(nodes, selector, root) {
+      var h = Selector.handlers, selectorType, m;
+      var exclusions = new Selector(selector).findElements(root);
+      h.mark(exclusions);
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node._counted) results.push(node);
+      h.unmark(exclusions);
+      return results;
+    },
+
+    'enabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node.disabled) results.push(node);
+      return results;
+    },
+
+    'disabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.disabled) results.push(node);
+      return results;
+    },
+
+    'checked': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.checked) results.push(node);
+      return results;
+    }
+  },
+
+  operators: {
+    '=':  function(nv, v) { return nv == v; },
+    '!=': function(nv, v) { return nv != v; },
+    '^=': function(nv, v) { return nv.startsWith(v); },
+    '$=': function(nv, v) { return nv.endsWith(v); },
+    '*=': function(nv, v) { return nv.include(v); },
+    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
+  },
+
+  matchElements: function(elements, expression) {
+    var matches = new Selector(expression).findElements(), h = Selector.handlers;
+    h.mark(matches);
+    for (var i = 0, results = [], element; element = elements[i]; i++)
+      if (element._counted) results.push(element);
+    h.unmark(matches);
+    return results;
+  },
+
+  findElement: function(elements, expression, index) {
+    if (Object.isNumber(expression)) {
+      index = expression; expression = false;
+    }
+    return Selector.matchElements(elements, expression || '*')[index || 0];
+  },
+
+  findChildElements: function(element, expressions) {
+    var exprs = expressions.join(','), expressions = [];
+    exprs.scan(/(([\w#:.~&gt;+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+      expressions.push(m[1].strip());
+    });
+    var results = [], h = Selector.handlers;
+    for (var i = 0, l = expressions.length, selector; i &lt; l; i++) {
+      selector = new Selector(expressions[i].strip());
+      h.concat(results, selector.findElements(element));
+    }
+    return (l &gt; 1) ? h.unique(results) : results;
+  }
+});
+
+function $$() {
+  return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+  reset: function(form) {
+    $(form).reset();
+    return form;
+  },
+
+  serializeElements: function(elements, options) {
+    if (typeof options != 'object') options = { hash: !!options };
+    else if (options.hash === undefined) options.hash = true;
+    var key, value, submitted = false, submit = options.submit;
+
+    var data = elements.inject({ }, function(result, element) {
+      if (!element.disabled &amp;&amp; element.name) {
+        key = element.name; value = $(element).getValue();
+        if (value != null &amp;&amp; (element.type != 'submit' || (!submitted &amp;&amp;
+            submit !== false &amp;&amp; (!submit || key == submit) &amp;&amp; (submitted = true)))) {
+          if (key in result) {
+            // a key is already present; construct an array of values
+            if (!Object.isArray(result[key])) result[key] = [result[key]];
+            result[key].push(value);
+          }
+          else result[key] = value;
+        }
+      }
+      return result;
+    });
+
+    return options.hash ? data : Object.toQueryString(data);
+  }
+};
+
+Form.Methods = {
+  serialize: function(form, options) {
+    return Form.serializeElements(Form.getElements(form), options);
+  },
+
+  getElements: function(form) {
+    return $A($(form).getElementsByTagName('*')).inject([],
+      function(elements, child) {
+        if (Form.Element.Serializers[child.tagName.toLowerCase()])
+          elements.push(Element.extend(child));
+        return elements;
+      }
+    );
+  },
+
+  getInputs: function(form, typeName, name) {
+    form = $(form);
+    var inputs = form.getElementsByTagName('input');
+
+    if (!typeName &amp;&amp; !name) return $A(inputs).map(Element.extend);
+
+    for (var i = 0, matchingInputs = [], length = inputs.length; i &lt; length; i++) {
+      var input = inputs[i];
+      if ((typeName &amp;&amp; input.type != typeName) || (name &amp;&amp; input.name != name))
+        continue;
+      matchingInputs.push(Element.extend(input));
+    }
+
+    return matchingInputs;
+  },
+
+  disable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('disable');
+    return form;
+  },
+
+  enable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('enable');
+    return form;
+  },
+
+  findFirstElement: function(form) {
+    var elements = $(form).getElements().findAll(function(element) {
+      return 'hidden' != element.type &amp;&amp; !element.disabled;
+    });
+    var firstByIndex = elements.findAll(function(element) {
+      return element.hasAttribute('tabIndex') &amp;&amp; element.tabIndex &gt;= 0;
+    }).sortBy(function(element) { return element.tabIndex }).first();
+
+    return firstByIndex ? firstByIndex : elements.find(function(element) {
+      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+    });
+  },
+
+  focusFirstElement: function(form) {
+    form = $(form);
+    form.findFirstElement().activate();
+    return form;
+  },
+
+  request: function(form, options) {
+    form = $(form), options = Object.clone(options || { });
+
+    var params = options.parameters, action = form.readAttribute('action') || '';
+    if (action.blank()) action = window.location.href;
+    options.parameters = form.serialize(true);
+
+    if (params) {
+      if (Object.isString(params)) params = params.toQueryParams();
+      Object.extend(options.parameters, params);
+    }
+
+    if (form.hasAttribute('method') &amp;&amp; !options.method)
+      options.method = form.method;
+
+    return new Ajax.Request(action, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+  focus: function(element) {
+    $(element).focus();
+    return element;
+  },
+
+  select: function(element) {
+    $(element).select();
+    return element;
+  }
+};
+
+Form.Element.Methods = {
+  serialize: function(element) {
+    element = $(element);
+    if (!element.disabled &amp;&amp; element.name) {
+      var value = element.getValue();
+      if (value != undefined) {
+        var pair = { };
+        pair[element.name] = value;
+        return Object.toQueryString(pair);
+      }
+    }
+    return '';
+  },
+
+  getValue: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    return Form.Element.Serializers[method](element);
+  },
+
+  setValue: function(element, value) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    Form.Element.Serializers[method](element, value);
+    return element;
+  },
+
+  clear: function(element) {
+    $(element).value = '';
+    return element;
+  },
+
+  present: function(element) {
+    return $(element).value != '';
+  },
+
+  activate: function(element) {
+    element = $(element);
+    try {
+      element.focus();
+      if (element.select &amp;&amp; (element.tagName.toLowerCase() != 'input' ||
+          !['button', 'reset', 'submit'].include(element.type)))
+        element.select();
+    } catch (e) { }
+    return element;
+  },
+
+  disable: function(element) {
+    element = $(element);
+    element.blur();
+    element.disabled = true;
+    return element;
+  },
+
+  enable: function(element) {
+    element = $(element);
+    element.disabled = false;
+    return element;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+  input: function(element, value) {
+    switch (element.type.toLowerCase()) {
+      case 'checkbox':
+      case 'radio':
+        return Form.Element.Serializers.inputSelector(element, value);
+      default:
+        return Form.Element.Serializers.textarea(element, value);
+    }
+  },
+
+  inputSelector: function(element, value) {
+    if (value === undefined) return element.checked ? element.value : null;
+    else element.checked = !!value;
+  },
+
+  textarea: function(element, value) {
+    if (value === undefined) return element.value;
+    else element.value = value;
+  },
+
+  select: function(element, index) {
+    if (index === undefined)
+      return this[element.type == 'select-one' ?
+        'selectOne' : 'selectMany'](element);
+    else {
+      var opt, value, single = !Object.isArray(index);
+      for (var i = 0, length = element.length; i &lt; length; i++) {
+        opt = element.options[i];
+        value = this.optionValue(opt);
+        if (single) {
+          if (value == index) {
+            opt.selected = true;
+            return;
+          }
+        }
+        else opt.selected = index.include(value);
+      }
+    }
+  },
+
+  selectOne: function(element) {
+    var index = element.selectedIndex;
+    return index &gt;= 0 ? this.optionValue(element.options[index]) : null;
+  },
+
+  selectMany: function(element) {
+    var values, length = element.length;
+    if (!length) return null;
+
+    for (var i = 0, values = []; i &lt; length; i++) {
+      var opt = element.options[i];
+      if (opt.selected) values.push(this.optionValue(opt));
+    }
+    return values;
+  },
+
+  optionValue: function(opt) {
+    // extend element because hasAttribute may not be native
+    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+  initialize: function($super, element, frequency, callback) {
+    $super(callback, frequency);
+    this.element   = $(element);
+    this.lastValue = this.getValue();
+  },
+
+  execute: function() {
+    var value = this.getValue();
+    if (Object.isString(this.lastValue) &amp;&amp; Object.isString(value) ?
+        this.lastValue != value : String(this.lastValue) != String(value)) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+  initialize: function(element, callback) {
+    this.element  = $(element);
+    this.callback = callback;
+
+    this.lastValue = this.getValue();
+    if (this.element.tagName.toLowerCase() == 'form')
+      this.registerFormCallbacks();
+    else
+      this.registerCallback(this.element);
+  },
+
+  onElementEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  },
+
+  registerFormCallbacks: function() {
+    Form.getElements(this.element).each(this.registerCallback, this);
+  },
+
+  registerCallback: function(element) {
+    if (element.type) {
+      switch (element.type.toLowerCase()) {
+        case 'checkbox':
+        case 'radio':
+          Event.observe(element, 'click', this.onElementEvent.bind(this));
+          break;
+        default:
+          Event.observe(element, 'change', this.onElementEvent.bind(this));
+          break;
+      }
+    }
+  }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+  KEY_BACKSPACE: 8,
+  KEY_TAB:       9,
+  KEY_RETURN:   13,
+  KEY_ESC:      27,
+  KEY_LEFT:     37,
+  KEY_UP:       38,
+  KEY_RIGHT:    39,
+  KEY_DOWN:     40,
+  KEY_DELETE:   46,
+  KEY_HOME:     36,
+  KEY_END:      35,
+  KEY_PAGEUP:   33,
+  KEY_PAGEDOWN: 34,
+  KEY_INSERT:   45,
+
+  cache: { },
+
+  relatedTarget: function(event) {
+    var element;
+    switch(event.type) {
+      case 'mouseover': element = event.fromElement; break;
+      case 'mouseout':  element = event.toElement;   break;
+      default: return null;
+    }
+    return Element.extend(element);
+  }
+});
+
+Event.Methods = (function() {
+  var isButton;
+
+  if (Prototype.Browser.IE) {
+    var buttonMap = { 0: 1, 1: 4, 2: 2 };
+    isButton = function(event, code) {
+      return event.button == buttonMap[code];
+    };
+
+  } else if (Prototype.Browser.WebKit) {
+    isButton = function(event, code) {
+      switch (code) {
+        case 0: return event.which == 1 &amp;&amp; !event.metaKey;
+        case 1: return event.which == 1 &amp;&amp; event.metaKey;
+        default: return false;
+      }
+    };
+
+  } else {
+    isButton = function(event, code) {
+      return event.which ? (event.which === code + 1) : (event.button === code);
+    };
+  }
+
+  return {
+    isLeftClick:   function(event) { return isButton(event, 0) },
+    isMiddleClick: function(event) { return isButton(event, 1) },
+    isRightClick:  function(event) { return isButton(event, 2) },
+
+    element: function(event) {
+      var node = Event.extend(event).target;
+      return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
+    },
+
+    findElement: function(event, expression) {
+      var element = Event.element(event);
+      return element.match(expression) ? element : element.up(expression);
+    },
+
+    pointer: function(event) {
+      return {
+        x: event.pageX || (event.clientX +
+          (document.documentElement.scrollLeft || document.body.scrollLeft)),
+        y: event.pageY || (event.clientY +
+          (document.documentElement.scrollTop || document.body.scrollTop))
+      };
+    },
+
+    pointerX: function(event) { return Event.pointer(event).x },
+    pointerY: function(event) { return Event.pointer(event).y },
+
+    stop: function(event) {
+      Event.extend(event);
+      event.preventDefault();
+      event.stopPropagation();
+      event.stopped = true;
+    }
+  };
+})();
+
+Event.extend = (function() {
+  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+    m[name] = Event.Methods[name].methodize();
+    return m;
+  });
+
+  if (Prototype.Browser.IE) {
+    Object.extend(methods, {
+      stopPropagation: function() { this.cancelBubble = true },
+      preventDefault:  function() { this.returnValue = false },
+      inspect: function() { return &quot;[object Event]&quot; }
+    });
+
+    return function(event) {
+      if (!event) return false;
+      if (event._extendedByPrototype) return event;
+
+      event._extendedByPrototype = Prototype.emptyFunction;
+      var pointer = Event.pointer(event);
+      Object.extend(event, {
+        target: event.srcElement,
+        relatedTarget: Event.relatedTarget(event),
+        pageX:  pointer.x,
+        pageY:  pointer.y
+      });
+      return Object.extend(event, methods);
+    };
+
+  } else {
+    Event.prototype = Event.prototype || document.createEvent(&quot;HTMLEvents&quot;).__proto__;
+    Object.extend(Event.prototype, methods);
+    return Prototype.K;
+  }
+})();
+
+Object.extend(Event, (function() {
+  var cache = Event.cache;
+
+  function getEventID(element) {
+    if (element._eventID) return element._eventID;
+    arguments.callee.id = arguments.callee.id || 1;
+    return element._eventID = ++arguments.callee.id;
+  }
+
+  function getDOMEventName(eventName) {
+    if (eventName &amp;&amp; eventName.include(':')) return &quot;dataavailable&quot;;
+    return eventName;
+  }
+
+  function getCacheForID(id) {
+    return cache[id] = cache[id] || { };
+  }
+
+  function getWrappersForEventName(id, eventName) {
+    var c = getCacheForID(id);
+    return c[eventName] = c[eventName] || [];
+  }
+
+  function createWrapper(element, eventName, handler) {
+    var id = getEventID(element);
+    var c = getWrappersForEventName(id, eventName);
+    if (c.pluck(&quot;handler&quot;).include(handler)) return false;
+
+    var wrapper = function(event) {
+      if (!Event || !Event.extend ||
+        (event.eventName &amp;&amp; event.eventName != eventName))
+          return false;
+
+      Event.extend(event);
+      handler.call(element, event)
+    };
+
+    wrapper.handler = handler;
+    c.push(wrapper);
+    return wrapper;
+  }
+
+  function findWrapper(id, eventName, handler) {
+    var c = getWrappersForEventName(id, eventName);
+    return c.find(function(wrapper) { return wrapper.handler == handler });
+  }
+
+  function destroyWrapper(id, eventName, handler) {
+    var c = getCacheForID(id);
+    if (!c[eventName]) return false;
+    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+  }
+
+  function destroyCache() {
+    for (var id in cache)
+      for (var eventName in cache[id])
+        cache[id][eventName] = null;
+  }
+
+  if (window.attachEvent) {
+    window.attachEvent(&quot;onunload&quot;, destroyCache);
+  }
+
+  return {
+    observe: function(element, eventName, handler) {
+      element = $(element);
+      var name = getDOMEventName(eventName);
+
+      var wrapper = createWrapper(element, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.addEventListener) {
+        element.addEventListener(name, wrapper, false);
+      } else {
+        element.attachEvent(&quot;on&quot; + name, wrapper);
+      }
+
+      return element;
+    },
+
+    stopObserving: function(element, eventName, handler) {
+      element = $(element);
+      var id = getEventID(element), name = getDOMEventName(eventName);
+
+      if (!handler &amp;&amp; eventName) {
+        getWrappersForEventName(id, eventName).each(function(wrapper) {
+          element.stopObserving(eventName, wrapper.handler);
+        });
+        return element;
+
+      } else if (!eventName) {
+        Object.keys(getCacheForID(id)).each(function(eventName) {
+          element.stopObserving(eventName);
+        });
+        return element;
+      }
+
+      var wrapper = findWrapper(id, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.removeEventListener) {
+        element.removeEventListener(name, wrapper, false);
+      } else {
+        element.detachEvent(&quot;on&quot; + name, wrapper);
+      }
+
+      destroyWrapper(id, eventName, handler);
+
+      return element;
+    },
+
+    fire: function(element, eventName, memo) {
+      element = $(element);
+      if (element == document &amp;&amp; document.createEvent &amp;&amp; !element.dispatchEvent)
+        element = document.documentElement;
+
+      if (document.createEvent) {
+        var event = document.createEvent(&quot;HTMLEvents&quot;);
+        event.initEvent(&quot;dataavailable&quot;, true, true);
+      } else {
+        var event = document.createEventObject();
+        event.eventType = &quot;ondataavailable&quot;;
+      }
+
+      event.eventName = eventName;
+      event.memo = memo || { };
+
+      if (document.createEvent) {
+        element.dispatchEvent(event);
+      } else {
+        element.fireEvent(event.eventType, event);
+      }
+
+      return event;
+    }
+  };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+  fire:          Event.fire,
+  observe:       Event.observe,
+  stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+  fire:          Element.Methods.fire.methodize(),
+  observe:       Element.Methods.observe.methodize(),
+  stopObserving: Element.Methods.stopObserving.methodize()
+});
+
+(function() {
+  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+     Matthias Miller, Dean Edwards and John Resig. */
+
+  var timer, fired = false;
+
+  function fireContentLoadedEvent() {
+    if (fired) return;
+    if (timer) window.clearInterval(timer);
+    document.fire(&quot;dom:loaded&quot;);
+    fired = true;
+  }
+
+  if (document.addEventListener) {
+    if (Prototype.Browser.WebKit) {
+      timer = window.setInterval(function() {
+        if (/loaded|complete/.test(document.readyState))
+          fireContentLoadedEvent();
+      }, 0);
+
+      Event.observe(window, &quot;load&quot;, fireContentLoadedEvent);
+
+    } else {
+      document.addEventListener(&quot;DOMContentLoaded&quot;,
+        fireContentLoadedEvent, false);
+    }
+
+  } else {
+    document.write(&quot;&lt;script id=__onDOMContentLoaded defer src=//:&gt;&lt;\/script&gt;&quot;);
+    $(&quot;__onDOMContentLoaded&quot;).onreadystatechange = function() {
+      if (this.readyState == &quot;complete&quot;) {
+        this.onreadystatechange = null;
+        fireContentLoadedEvent();
+      }
+    };
+  }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+  Before: function(element, content) {
+    return Element.insert(element, {before:content});
+  },
+
+  Top: function(element, content) {
+    return Element.insert(element, {top:content});
+  },
+
+  Bottom: function(element, content) {
+    return Element.insert(element, {bottom:content});
+  },
+
+  After: function(element, content) {
+    return Element.insert(element, {after:content});
+  }
+};
+
+var $continue = new Error('&quot;throw $continue&quot; is deprecated, use &quot;return&quot; instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+  // set to true if needed, warning: firefox performance problems
+  // NOT neeeded for page scrolling, only if draggable contained in
+  // scrollable elements
+  includeScrollOffsets: false,
+
+  // must be called before calling withinIncludingScrolloffset, every time the
+  // page is scrolled
+  prepare: function() {
+    this.deltaX =  window.pageXOffset
+                || document.documentElement.scrollLeft
+                || document.body.scrollLeft
+                || 0;
+    this.deltaY =  window.pageYOffset
+                || document.documentElement.scrollTop
+                || document.body.scrollTop
+                || 0;
+  },
+
+  // caches x/y coordinate pair to use with overlap
+  within: function(element, x, y) {
+    if (this.includeScrollOffsets)
+      return this.withinIncludingScrolloffsets(element, x, y);
+    this.xcomp = x;
+    this.ycomp = y;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (y &gt;= this.offset[1] &amp;&amp;
+            y &lt;  this.offset[1] + element.offsetHeight &amp;&amp;
+            x &gt;= this.offset[0] &amp;&amp;
+            x &lt;  this.offset[0] + element.offsetWidth);
+  },
+
+  withinIncludingScrolloffsets: function(element, x, y) {
+    var offsetcache = Element.cumulativeScrollOffset(element);
+
+    this.xcomp = x + offsetcache[0] - this.deltaX;
+    this.ycomp = y + offsetcache[1] - this.deltaY;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (this.ycomp &gt;= this.offset[1] &amp;&amp;
+            this.ycomp &lt;  this.offset[1] + element.offsetHeight &amp;&amp;
+            this.xcomp &gt;= this.offset[0] &amp;&amp;
+            this.xcomp &lt;  this.offset[0] + element.offsetWidth);
+  },
+
+  // within must be called directly before
+  overlap: function(mode, element) {
+    if (!mode) return 0;
+    if (mode == 'vertical')
+      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+        element.offsetHeight;
+    if (mode == 'horizontal')
+      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+        element.offsetWidth;
+  },
+
+  // Deprecation layer -- use newer Element methods now (1.5.2).
+
+  cumulativeOffset: Element.Methods.cumulativeOffset,
+
+  positionedOffset: Element.Methods.positionedOffset,
+
+  absolutize: function(element) {
+    Position.prepare();
+    return Element.absolutize(element);
+  },
+
+  relativize: function(element) {
+    Position.prepare();
+    return Element.relativize(element);
+  },
+
+  realOffset: Element.Methods.cumulativeScrollOffset,
+
+  offsetParent: Element.Methods.getOffsetParent,
+
+  page: Element.Methods.viewportOffset,
+
+  clone: function(source, target, options) {
+    options = options || { };
+    return Element.clonePosition(target, source, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+  function iter(name) {
+    return name.blank() ? null : &quot;[contains(concat(' ', @class, ' '), ' &quot; + name + &quot; ')]&quot;;
+  }
+
+  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+  function(element, className) {
+    className = className.toString().strip();
+    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+  } : function(element, className) {
+    className = className.toString().strip();
+    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+    if (!classNames &amp;&amp; !className) return elements;
+
+    var nodes = $(element).getElementsByTagName('*');
+    className = ' ' + className + ' ';
+
+    for (var i = 0, child, cn; child = nodes[i]; i++) {
+      if (child.className &amp;&amp; (cn = ' ' + child.className + ' ') &amp;&amp; (cn.include(className) ||
+          (classNames &amp;&amp; classNames.all(function(name) {
+            return !name.toString().blank() &amp;&amp; cn.include(' ' + name + ' ');
+          }))))
+        elements.push(Element.extend(child));
+    }
+    return elements;
+  };
+
+  return function(className, parentElement) {
+    return $(parentElement || document.body).getElementsByClassName(className);
+  };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+  initialize: function(element) {
+    this.element = $(element);
+  },
+
+  _each: function(iterator) {
+    this.element.className.split(/\s+/).select(function(name) {
+      return name.length &gt; 0;
+    })._each(iterator);
+  },
+
+  set: function(className) {
+    this.element.className = className;
+  },
+
+  add: function(classNameToAdd) {
+    if (this.include(classNameToAdd)) return;
+    this.set($A(this).concat(classNameToAdd).join(' '));
+  },
+
+  remove: function(classNameToRemove) {
+    if (!this.include(classNameToRemove)) return;
+    this.set($A(this).without(classNameToRemove).join(' '));
+  },
+
+  toString: function() {
+    return $A(this).join(' ');
+  }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods();
</ins></span></pre>
</div>
</div>

</body>
</html>