# Get the shape coreponding to a specific row from dbf file

**URL:** <https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051>\
**Category:** Services\
**Created:** [September 23, 2008, 3:01am UTC](https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051 "2008-09-23T03:01:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![cmoldovan](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/c/439d5e/32.png) [@cmoldovan](https://community.thinkgeo.com/u/cmoldovan)\
**Post date:** [September 23, 2008, 3:01am UTC](https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051/1 "2008-09-23T03:01:01Z")

</div>

Hi,

I&nbsp;have&nbsp;a&nbsp;shapefile&nbsp;and&nbsp;I&nbsp;want&nbsp;to&nbsp;find&nbsp;the&nbsp;Feature&nbsp;having&nbsp;a&nbsp;specific&nbsp;value&nbsp;on&nbsp;a&nbsp;column&nbsp;from&nbsp;the&nbsp;dbf&nbsp;file&nbsp;(for&nbsp;example&nbsp;to&nbsp;get&nbsp;the&nbsp;shape&nbsp;coreponding&nbsp;to&nbsp;the&nbsp;row&nbsp;having&nbsp;the&nbsp;value&nbsp;'92154'&nbsp;on&nbsp;first&nbsp;column).&nbsp;I&nbsp;am&nbsp;searching&nbsp;for&nbsp;the&nbsp;fastest&nbsp;way&nbsp;to&nbsp;do&nbsp;that.&nbsp;One&nbsp;way&nbsp;is&nbsp;to&nbsp;call&nbsp;QueryTools.GetFeaturesContaining()&nbsp;because&nbsp;I&nbsp;know&nbsp;the&nbsp;central&nbsp;point&nbsp;of&nbsp;the&nbsp;shape&nbsp;(LAT,&nbsp;LON),&nbsp;but&nbsp;this&nbsp;is&nbsp;very&nbsp;slow.&nbsp;I&nbsp;can&nbsp;perform&nbsp;a&nbsp;query&nbsp;ShapeFileLayer.ExecuteSqlQuery,&nbsp;but&nbsp;this&nbsp;will&nbsp;return&nbsp;me&nbsp;just&nbsp;the&nbsp;row&nbsp;from&nbsp;dbf,&nbsp;not&nbsp;the&nbsp;shape.&nbsp;So&nbsp;what&nbsp;i&nbsp;want&nbsp;is&nbsp;to&nbsp;get&nbsp;the&nbsp;shape&nbsp;coresponding&nbsp;to&nbsp;that&nbsp;specific&nbsp;row,&nbsp;but&nbsp;I&nbsp;don't&nbsp;know&nbsp;how.&nbsp;Can&nbsp;you&nbsp;please&nbsp;help&nbsp;me?&nbsp;

Best&nbsp;Regards,&nbsp;Cristian.

---

<div class="post-metadata">

**Author:** ![David](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@David](https://community.thinkgeo.com/u/David)\
**Post date:** [September 23, 2008, 7:38am UTC](https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051/2 "2008-09-23T07:38:21Z")

</div>

Christian,&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;an&nbsp;old&nbsp;problem&nbsp;with&nbsp;shape&nbsp;files.&nbsp;&nbsp;The&nbsp;records&nbsp;in&nbsp;the&nbsp;DBF&nbsp;rows&nbsp;correspond&nbsp;to&nbsp;the&nbsp;position&nbsp;of&nbsp;the&nbsp;record&nbsp;in&nbsp;the&nbsp;shape&nbsp;file&nbsp;itself.&nbsp;&nbsp;This&nbsp;means&nbsp;that&nbsp;the&nbsp;third&nbsp;record&nbsp;in&nbsp;the&nbsp;shape&nbsp;file&nbsp;is&nbsp;the&nbsp;third&nbsp;row&nbsp;in&nbsp;the&nbsp;DBF.&nbsp;&nbsp;The&nbsp;problem&nbsp;is&nbsp;that&nbsp;SQL&nbsp;by&nbsp;nature&nbsp;doesn’t&nbsp;return&nbsp;the&nbsp;absolute&nbsp;record&nbsp;position&nbsp;in&nbsp;the&nbsp;table&nbsp;so&nbsp;you&nbsp;never&nbsp;know&nbsp;what&nbsp;record&nbsp;to&nbsp;fetch.&nbsp;&nbsp;What&nbsp;you&nbsp;need&nbsp;to&nbsp;is&nbsp;add&nbsp;a&nbsp;new&nbsp;column&nbsp;to&nbsp;the&nbsp;DBF&nbsp;and&nbsp;sequentially&nbsp;number&nbsp;it&nbsp;from&nbsp;1&nbsp;to&nbsp;n&nbsp;number&nbsp;of&nbsp;records.&nbsp;&nbsp;That&nbsp;way&nbsp;when&nbsp;you&nbsp;do&nbsp;the&nbsp;SQL&nbsp;query&nbsp;you&nbsp;can&nbsp;return&nbsp;that&nbsp;row&nbsp;as&nbsp;well.&nbsp;&nbsp;With&nbsp;this&nbsp;record&nbsp;number&nbsp;you&nbsp;can&nbsp;use&nbsp;the&nbsp;QueryById&nbsp;method&nbsp;on&nbsp;the&nbsp;QueryTools&nbsp;to&nbsp;quickly&nbsp;find&nbsp;the&nbsp;shape.&nbsp;&nbsp;In&nbsp;the&nbsp;2.0&nbsp;version&nbsp;we&nbsp;had&nbsp;an&nbsp;API&nbsp;called&nbsp;something&nbsp;like&nbsp;BuildIndexColumn&nbsp;where&nbsp;we&nbsp;added&nbsp;the&nbsp;column&nbsp;called&nbsp;RecId&nbsp;or&nbsp;something&nbsp;and&nbsp;did&nbsp;the&nbsp;numbering&nbsp;for&nbsp;you.&nbsp;&nbsp;I&nbsp;didn’t&nbsp;find&nbsp;it&nbsp;on&nbsp;the&nbsp;3.0&nbsp;stuff&nbsp;so&nbsp;I&nbsp;will&nbsp;add&nbsp;a&nbsp;ticket&nbsp;to&nbsp;add&nbsp;that&nbsp;API&nbsp;in&nbsp;the&nbsp;future.&nbsp;&nbsp;If&nbsp;you&nbsp;need&nbsp;help&nbsp;adding&nbsp;the&nbsp;column&nbsp;and&nbsp;updating&nbsp;it&nbsp;let&nbsp;me&nbsp;know&nbsp;and&nbsp;maybe&nbsp;I&nbsp;can&nbsp;get&nbsp;you&nbsp;some&nbsp;code&nbsp;for&nbsp;this.&nbsp;  
&nbsp;&nbsp;  
&nbsp;David

---

<div class="post-metadata">

**Author:** ![cmoldovan](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/c/439d5e/32.png) [@cmoldovan](https://community.thinkgeo.com/u/cmoldovan)\
**Post date:** [September 24, 2008, 2:40am UTC](https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051/3 "2008-09-24T02:40:03Z")

</div>

If&nbsp;you&nbsp;have&nbsp;some&nbsp;code&nbsp;for&nbsp;it&nbsp;please&nbsp;put&nbsp;it&nbsp;here,&nbsp;as&nbsp;I&nbsp;can't&nbsp;find&nbsp;a&nbsp;way&nbsp;to&nbsp;add&nbsp;a&nbsp;column&nbsp;to&nbsp;an&nbsp;existing&nbsp;shapefile.&nbsp;The&nbsp;only&nbsp;way&nbsp;it&nbsp;seemns&nbsp;to&nbsp;be&nbsp;by&nbsp;creating&nbsp;a&nbsp;new&nbsp;shapefile&nbsp;and&nbsp;copying&nbsp;everething&nbsp;in&nbsp;it,&nbsp;including&nbsp;the&nbsp;new&nbsp;column.

---

<div class="post-metadata">

**Author:** ![David](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@David](https://community.thinkgeo.com/u/David)\
**Post date:** [September 24, 2008, 6:49am UTC](https://community.thinkgeo.com/t/get-the-shape-coreponding-to-a-specific-row-from-dbf-file/7051/4 "2008-09-24T06:49:10Z")

</div>

&nbsp;

Cristian,

&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;would&nbsp;be&nbsp;happy&nbsp;to&nbsp;show&nbsp;you&nbsp;a&nbsp;sample.&nbsp;&nbsp;Just&nbsp;to&nbsp;explain&nbsp;a&nbsp;little&nbsp;bit&nbsp;about&nbsp;how&nbsp;our&nbsp;API&nbsp;works.&nbsp;&nbsp;The&nbsp;layers&nbsp;that&nbsp;you&nbsp;typically&nbsp;use&nbsp;are&nbsp;a&nbsp;wrapper&nbsp;for&nbsp;a&nbsp;FeatureSource&nbsp;which&nbsp;supplies&nbsp;the&nbsp;data.&nbsp;&nbsp;The&nbsp;Layer&nbsp;itself&nbsp;like&nbsp;a&nbsp;ShapeFileLayer&nbsp;provides&nbsp;the&nbsp;zoom&nbsp;levels&nbsp;etc&nbsp;but&nbsp;it&nbsp;is&nbsp;the&nbsp;FeatureSource&nbsp;contained&nbsp;in&nbsp;it&nbsp;that&nbsp;is&nbsp;the&nbsp;heart&nbsp;of&nbsp;working&nbsp;with&nbsp;the&nbsp;data.&nbsp;&nbsp;The&nbsp;FeatureSource&nbsp;is&nbsp;a&nbsp;property&nbsp;of&nbsp;all&nbsp;vector&nbsp;oriented&nbsp;layers&nbsp;and&nbsp;you&nbsp;can&nbsp;get&nbsp;it&nbsp;by&nbsp;code&nbsp;like&nbsp;myShapeFileLayer.FeatureSource.

&nbsp;&nbsp;One&nbsp;important&nbsp;note&nbsp;is&nbsp;that&nbsp;FeatureSource&nbsp;is&nbsp;really&nbsp;an&nbsp;abstract&nbsp;class&nbsp;so&nbsp;the&nbsp;important&nbsp;APIs&nbsp;that&nbsp;are&nbsp;specific&nbsp;to&nbsp;that&nbsp;type&nbsp;of&nbsp;layer&nbsp;are&nbsp;on&nbsp;the&nbsp;specific&nbsp;FeatureSource.&nbsp;&nbsp;For&nbsp;example&nbsp;on&nbsp;a&nbsp;ShapefileLayer&nbsp;there&nbsp;&nbsp;is&nbsp;a&nbsp;FeatureSource&nbsp;but&nbsp;the&nbsp;FeatureSource&nbsp;it&nbsp;returns&nbsp;is&nbsp;really&nbsp;a&nbsp;ShapeFileFeatureSource&nbsp;so&nbsp;to&nbsp;get&nbsp;to&nbsp;the&nbsp;shape&nbsp;file&nbsp;specific&nbsp;stuff&nbsp;you&nbsp;need&nbsp;to&nbsp;cast&nbsp;it&nbsp;as&nbsp;below.&nbsp;&nbsp;Once&nbsp;you&nbsp;cast&nbsp;it&nbsp;you&nbsp;will&nbsp;find&nbsp;all&nbsp;kinds&nbsp;of&nbsp;useful&nbsp;functions&nbsp;that&nbsp;are&nbsp;shape&nbsp;file&nbsp;related.&nbsp;&nbsp;We&nbsp;didn't&nbsp;want&nbsp;to&nbsp;full&nbsp;expose&nbsp;them&nbsp;on&nbsp;the&nbsp;ShapeFileLayer&nbsp;as&nbsp;it&nbsp;would&nbsp;have&nbsp;added&nbsp;too&nbsp;many&nbsp;members&nbsp;to&nbsp;the&nbsp;object&nbsp;and&nbsp;we&nbsp;wanted&nbsp;the&nbsp;Layer&nbsp;itself&nbsp;to&nbsp;be&nbsp;easy&nbsp;to&nbsp;use&nbsp;and&nbsp;not&nbsp;so&nbsp;technical.

BuildRecId(@"C:\SomeShapefile.shp","RecId");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;BuildRecId(string&nbsp;shapeFileName,&nbsp;string&nbsp;recIdColumnName)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShapeFileFeatureSource&nbsp;featureSource&nbsp;=&nbsp;null;  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Open&nbsp;the&nbsp;shape&nbsp;file  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;featureSource&nbsp;=&nbsp;new&nbsp;ShapeFileFeatureSource(shapeFileName,&nbsp;ShapeFileReadWriteMode.ReadWrite);  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;featureSource.Open();  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Check&nbsp;to&nbsp;see&nbsp;if&nbsp;the&nbsp;RecId&nbsp;column&nbsp;exists  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collection\<FeatureSourceColumn\>&nbsp;columns&nbsp;=&nbsp;featureSource.GetColumns();  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;foundRecIdColumn&nbsp;=&nbsp;false;  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(FeatureSourceColumn&nbsp;column&nbsp;in&nbsp;columns)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(string.Compare(column.ColumnName,&nbsp;recIdColumnName,&nbsp;true)&nbsp;==&nbsp;0)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foundRecIdColumn&nbsp;=&nbsp;true;  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;RecId&nbsp;column&nbsp;is&nbsp;not&nbsp;found&nbsp;then&nbsp;we&nbsp;need&nbsp;to&nbsp;add&nbsp;it.  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!foundRecIdColumn)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;featureSource.AddColumnInteger(recIdColumnName.ToUpperInvariant(),&nbsp;7);  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Loop&nbsp;through&nbsp;all&nbsp;of&nbsp;the&nbsp;records&nbsp;and&nbsp;update&nbsp;RecId&nbsp;column  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;recordCount&nbsp;=&nbsp;featureSource.GetCount();  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;\<&nbsp;recordCount;&nbsp;i++)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;featureSource.UpdateDbfData(i.ToString(),&nbsp;recIdColumnName.ToUpperInvariant(),&nbsp;(i&nbsp;+&nbsp;1).ToString());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(featureSource&nbsp;!=&nbsp;null&nbsp;&&&nbsp;featureSource.IsOpen)  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;featureSource.Close();  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

David
