maxGraph/java/docs/com/mxgraph/analysis/mxTraversal.html

518 lines
22 KiB
HTML

<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.3) on Fri Jul 26 16:05:09 UTC 2019 -->
<title>mxTraversal (mxGraph 4.0.3 API Specification)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2019-07-26">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
<script type="text/javascript" src="../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="mxTraversal (mxGraph 4.0.3 API Specification)";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/mxTraversal.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><p><b>mxGraph 4.0.3</b></p></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.mxgraph.analysis</a></div>
<h2 title="Class mxTraversal" class="title">Class mxTraversal</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>com.mxgraph.analysis.mxTraversal</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">mxTraversal</span>
extends java.lang.Object</pre>
<div class="block">Implements a collection of utility methods for traversing the
graph structure. This does not include tree traversal methods.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">mxTraversal</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static java.util.List&lt;java.util.Map&lt;java.lang.Object,&#8203;java.lang.Object&gt;&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#bellmanFord(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object)">bellmanFord</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex)</code></th>
<td class="colLast">
<div class="block">Implements the Bellman-Ford shortest path from startVertex to all vertices.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#bfs(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">bfs</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)</code></th>
<td class="colLast">
<div class="block">Implements a recursive breadth first search starting from the specified
cell.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dfs(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">dfs</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)</code></th>
<td class="colLast">
<div class="block">Implements a recursive depth first search starting from the specified
cell.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dijkstra(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">dijkstra</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
java.lang.Object&nbsp;endVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)</code></th>
<td class="colLast">
<div class="block">Implements the Dijkstra's shortest path from startVertex to endVertex.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static java.util.ArrayList&lt;java.lang.Object[][]&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#floydRoyWarshall(com.mxgraph.analysis.mxAnalysisGraph)">floydRoyWarshall</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph)</code></th>
<td class="colLast">
<div class="block">Implements the Floyd-Roy-Warshall (aka WFI) shortest path algorithm between all vertices.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static java.lang.Object[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getWFIPath(com.mxgraph.analysis.mxAnalysisGraph,java.util.ArrayList,java.lang.Object,java.lang.Object)">getWFIPath</a></span>&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.util.ArrayList&lt;java.lang.Object[][]&gt;&nbsp;FWIresult,
java.lang.Object&nbsp;startVertex,
java.lang.Object&nbsp;targetVertex)</code></th>
<td class="colLast">
<div class="block">This method helps the user to get the desired data from the result of the Floyd-Roy-Warshall algorithm.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>mxTraversal</h4>
<pre>public&nbsp;mxTraversal()</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="dfs(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dfs</h4>
<pre class="methodSignature">public static&nbsp;void&nbsp;dfs&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)</pre>
<div class="block">Implements a recursive depth first search starting from the specified
cell. Process on the cell is performing by the visitor class passed in.
The visitor has access to the current cell and the edge traversed to
find this cell. Every cell is processed once only.
<pre>
mxTraversal.bfs(analysisGraph, startVertex, new mxICellVisitor()
{
public boolean visit(Object vertex, Object edge)
{
// perform your processing on each cell here
return false;
}
});
</pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - the graph</dd>
<dd><code>startVertex</code> - </dd>
<dd><code>visitor</code> - </dd>
</dl>
</li>
</ul>
<a id="bfs(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>bfs</h4>
<pre class="methodSignature">public static&nbsp;void&nbsp;bfs&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)</pre>
<div class="block">Implements a recursive breadth first search starting from the specified
cell. Process on the cell is performing by the visitor class passed in.
The visitor has access to the current cell and the edge traversed to
find this cell. Every cell is processed once only.
<pre>
mxTraversal.bfs(analysisGraph, startVertex, new mxICellVisitor()
{
public boolean visit(Object vertex, Object edge)
{
// perform your processing on each cell here
return false;
}
});
</pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - the graph</dd>
<dd><code>startVertex</code> - </dd>
<dd><code>visitor</code> - </dd>
</dl>
</li>
</ul>
<a id="dijkstra(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object,java.lang.Object,com.mxgraph.view.mxGraph.mxICellVisitor)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dijkstra</h4>
<pre class="methodSignature">public static&nbsp;void&nbsp;dijkstra&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex,
java.lang.Object&nbsp;endVertex,
<a href="../view/mxGraph.mxICellVisitor.html" title="interface in com.mxgraph.view">mxGraph.mxICellVisitor</a>&nbsp;visitor)
throws <a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></pre>
<div class="block">Implements the Dijkstra's shortest path from startVertex to endVertex.
Process on the cell is performing by the visitor class passed in.
The visitor has access to the current cell and the edge traversed to
find this cell. Every cell is processed once only.
<pre>
mxTraversal.dijkstra(analysisGraph, startVertex, endVertex, new mxICellVisitor()
{
public boolean visit(Object vertex, Object edge)
{
// perform your processing on each cell here
return false;
}
});
</pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - </dd>
<dd><code>startVertex</code> - </dd>
<dd><code>endVertex</code> - </dd>
<dd><code>visitor</code> - </dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></code> - - The current Dijkstra algorithm only works for connected graphs</dd>
</dl>
</li>
</ul>
<a id="bellmanFord(com.mxgraph.analysis.mxAnalysisGraph,java.lang.Object)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>bellmanFord</h4>
<pre class="methodSignature">public static&nbsp;java.util.List&lt;java.util.Map&lt;java.lang.Object,&#8203;java.lang.Object&gt;&gt;&nbsp;bellmanFord&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.lang.Object&nbsp;startVertex)
throws <a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></pre>
<div class="block">Implements the Bellman-Ford shortest path from startVertex to all vertices.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - </dd>
<dd><code>startVertex</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a List where List(0) is the distance map and List(1) is the parent map. See the example in GraphConfigDialog.java</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></code> - - The Bellman-Ford algorithm only works for graphs without negative cycles</dd>
</dl>
</li>
</ul>
<a id="floydRoyWarshall(com.mxgraph.analysis.mxAnalysisGraph)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>floydRoyWarshall</h4>
<pre class="methodSignature">public static&nbsp;java.util.ArrayList&lt;java.lang.Object[][]&gt;&nbsp;floydRoyWarshall&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph)
throws <a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></pre>
<div class="block">Implements the Floyd-Roy-Warshall (aka WFI) shortest path algorithm between all vertices.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an ArrayList where ArrayList(0) is the distance map and List(1) is the path map. See the example in GraphConfigDialog.java</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></code> - - The Floyd-Roy-Warshall algorithm only works for graphs without negative cycles</dd>
</dl>
</li>
</ul>
<a id="getWFIPath(com.mxgraph.analysis.mxAnalysisGraph,java.util.ArrayList,java.lang.Object,java.lang.Object)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getWFIPath</h4>
<pre class="methodSignature">public static&nbsp;java.lang.Object[]&nbsp;getWFIPath&#8203;(<a href="mxAnalysisGraph.html" title="class in com.mxgraph.analysis">mxAnalysisGraph</a>&nbsp;aGraph,
java.util.ArrayList&lt;java.lang.Object[][]&gt;&nbsp;FWIresult,
java.lang.Object&nbsp;startVertex,
java.lang.Object&nbsp;targetVertex)
throws <a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></pre>
<div class="block">This method helps the user to get the desired data from the result of the Floyd-Roy-Warshall algorithm.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>aGraph</code> - </dd>
<dd><code>FWIresult</code> - - the result of the Floyd-Roy-Warhall algorithm</dd>
<dd><code>startVertex</code> - </dd>
<dd><code>targetVertex</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>returns the shortest path from <b>startVertex</b> to <b>endVertex</b></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="StructuralException.html" title="class in com.mxgraph.analysis">StructuralException</a></code> - - The Floyd-Roy-Warshall algorithm only works for graphs without negative cycles</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/mxTraversal.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><p><b>mxGraph 4.0.3</b></p></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small><font size=1>Copyright (c) 2010-2017 <a href="http://www.jgraph.com/"
target="_blank">Gaudenz Alder, JGraph Ltd</a>. All rights reserved.</font></small></p>
</footer>
</body>
</html>