<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#993366;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle26
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle27
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle28
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle29
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle30
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle31
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#003300;}
span.EmailStyle32
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle33
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle34
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:olive;}
span.EmailStyle35
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='color:#1F497D'>I had a look into SqlServer2008
documentation for inspiration. It has a number of interesting functions:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><strong><span style='font-size:8.0pt;font-family:"Verdana","sans-serif";
color:black'>STStartPoint()</span></strong><span style='color:#1F497D'><o:p></o:p></span></p>
<p style='line-height:140%;vertical-align:top'><strong><span style='font-size:
8.0pt;line-height:140%;font-family:"Verdana","sans-serif";color:black'>STEndPoint()</span></strong><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'> is the equivalent of <a
href="http://msdn.microsoft.com/en-us/library/bb933844.aspx"
id="ctl00_rs1_mainContentContainer_ctl10">STPointN</a></span><code><span
style='font-size:10.0pt;line-height:140%;color:black'>(x.STNumPoints())</span></code><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>.<o:p></o:p></span></p>
<p class=MsoNormal><strong><span style='font-size:8.0pt;font-family:"Verdana","sans-serif";
color:black'>STNumPoints() </span></strong><span style='font-size:8.0pt;
font-family:"Verdana","sans-serif";color:black'>This method counts the points
in the description of a </span><b><span style='font-size:8.0pt;font-family:
"Verdana","sans-serif";color:black'>geography</span></b><span style='font-size:
8.0pt;font-family:"Verdana","sans-serif";color:black'> instance. Duplicate
points are counted. If this instance is a </span><b><span style='font-size:
8.0pt;font-family:"Verdana","sans-serif";color:black'>geometry</span></b><span
style='font-size:8.0pt;font-family:"Verdana","sans-serif";color:black'>
collection, this method returns of the total number of points in each of the
elements in the collection.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-bottom:7.5pt;line-height:140%;vertical-align:
top'><b><span style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>STPointN()</span></b><span style='font-size:8.0pt;line-height:
140%;font-family:"Verdana","sans-serif";color:black'> returns the point
specified by </span><i><span style='font-size:8.0pt;line-height:140%;
font-family:"Verdana","sans-serif";color:black'>expression</span></i><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'> by ordering all the points in the same order they would be
output: </span><span style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:red'>first by </span><b><span style='font-size:8.0pt;line-height:140%;
font-family:"Verdana","sans-serif";color:red'>geography</span></b><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:red'> instance, then by ring within the instance (if appropriate), and
then by point within the ring. </span><span style='font-size:8.0pt;line-height:
140%;font-family:"Verdana","sans-serif";color:black'>This order is
deterministic.<br>
If this method is called with a value less than 1, it throws an </span><b><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>ArgumentOutOfRangeException</span></b><span style='font-size:8.0pt;
line-height:140%;font-family:"Verdana","sans-serif";color:black'>.<br>
If this method is called with a value greater than the number of points in the
instance, it returns null.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>I hope this clarifies a little
the desired behavior for polygons and multi part geometries (</span><span
style='color:red'>see in red</span><span style='color:#1F497D'>).<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>As a minimal number of
functions, I guess these ones will suffice:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>NumPoints(geom)<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
N) etc.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Note the expression engine
supports embedded functions, therefore for getting the Start/End points we
can say:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
1) etc.<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
NumPoints(geom)) etc.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Dan.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Robert
Fortin<br>
<b>Sent:</b> Tuesday, November 04, 2008 4:41 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:olive'>Guys,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>Unless there is standard out
there, we can come up with whatever definition we want as long as it is
consistant and it makes sense.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>The RFC proposes the following:<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a point geometry, the result of the
Start/End functions is the x, y, z values of the point.<br>
If the provided geometry is a multi-point geometry, the result of the Start/End
functions is the x, y, z values of the first point.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> I think Start should be referencing the first point and
End the last point in case of multi-point. <o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a line geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
first line.<br>
If the provided geometry is a multi-line geometry, the result of the Start/End
functions is the x, y, z values of the start and end points of the first line.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> Same here. Start – first point of first line,
End – last point of last line.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a polygon geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
exterior ring of the polygon.<br>
If the provided geometry is a multi-polygon geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
exterior ring of the first polygon.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> Same again. Start – first point of first
ring, End – last point of last ring.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'>But we all know that it is not
valuable to use those on polygon or circle (which is just an arc) but I
don’t want the function to throw an error because a polygon geometry is
passed as input. <o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'>Let’s agree on what it
should be and return it.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Traian
Stanev<br>
<b>Sent:</b> Tuesday, November 04, 2008 3:15 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Moreover, what if the geometry
is a circle? </span><span style='font-family:Wingdings;color:#1F497D'>J</span><span
style='color:#1F497D'><o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org [mailto:fdo-internals-bounces@lists.osgeo.org]
<b>On Behalf Of </b>Dan Stoica<br>
<b>Sent:</b> Tuesday, November 04, 2008 3:14 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>Robert, returning to the
original issue: what is the meaning of PointX(geometry,
‘end’) for a polygon?<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Dan.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Robert
Fortin<br>
<b>Sent:</b> Tuesday, November 04, 2008 2:46 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#003300'>I think there was plenty of good
idea of how far we can go with these kind of functions. But, trying to go
back to the original issue we were trying to resolve by RFC-28 which is simply
to get the coordinates values for the first and last point…<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>I think Romy has an interesting
proposal that makes the function evolutive over time and avoid over populating
the list of functions with new names each time we think of a new possibility.
It also makes it clear that it is about the points on the geometry and not
computed point as other functions like MidX or CentroidX would be (but
that a matter for another debate).<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>I was thinking of even
rationalizing it further (by adding another enumeration parameter to indicate
x,y and z – we forgot about “m” by the way!) but I think the
name of the function PointX, PointY and PointZ are just clear enough.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>Can we go for that as far as the
RFC is concerned?<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Romica
Dascalescu<br>
<b>Sent:</b> Tuesday, November 04, 2008 11:27 AM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>Hi,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>A different approach is to
create functions which takes a geometry and an enumeration, this way each
provider can implement all cases or just a few of them, e.g.:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointX(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointY(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointZ(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Where enum can be:
‘start’, ‘end’, ‘min’, ‘max’,
‘centroid’, …<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>For now we may implement just a
few of them (start, end) and in the future we could implement more cases.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Romy.<o:p></o:p></span></p>
</div>
</div>
</div>
</body>
</html>