<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2750056258813010897</id><updated>2024-10-25T09:18:13.646+05:30</updated><title type='text'>ctrlf1</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://altctrlf1.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2750056258813010897/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://altctrlf1.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Narendra Chennupati</name><uri>http://www.blogger.com/profile/07486009655028686556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyEbjb77K-zovv-fGzceP_05iVTR4tBybzx-r1CXiZtRaSvW4klE0yY47G-dx2M63M4f72EHw87zHn79_y5BG2WPkkVMBry9J-3riGEM1dGVvtd4A0XeZbRGjwSNmhg/s220/MyImage.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2750056258813010897.post-8390624616830377596</id><published>2009-11-30T19:22:00.000+05:30</published><updated>2009-12-04T17:05:43.083+05:30</updated><title type='text'>How to read streams from MS Office file</title><content type='html'>&lt;b style=&quot;&quot;&gt;Purpose&lt;/b&gt; of this article / post is to explain how to read streams from MSoffice files.&lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;&quot;&gt;Introduction:&lt;/b&gt;To understand how to read streams from an office file it is essential to understand the storage structure of it. &lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot;&gt; &lt;/span&gt;MS-office file is not a general NTFS file but it is a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa378938%28VS.85%29.aspx&quot;&gt;Compound File&lt;/a&gt;. &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa378938%28VS.85%29.aspx&quot;&gt;Compound File&lt;/a&gt; is Microsoft’s implementation of &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa378734%28VS.85%29.aspx&quot;&gt;structure storage&lt;/a&gt;.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;&quot;&gt;Structured Storage:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;/b&gt;One liner for it is &lt;i style=&quot;&quot;&gt;a file system with in a file. &lt;/i&gt;What does that mean? Structured storage allows hierarchical storage of information within a single file. Elements of a structured storage object are storages and streams. Storages are analogous to directories, and streams are analogous to files. Within a structured storage there will be a primary storage object that may contain substorages, possibly nested, and streams. Storages provide the structure of the object, and streams contain the data. &lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot;&gt;                      &lt;/span&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id=&quot;_x0000_t75&quot; coordsize=&quot;21600,21600&quot; spt=&quot;75&quot; preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;  &lt;v:stroke joinstyle=&quot;miter&quot;&gt;  &lt;v:formulas&gt;   &lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;   &lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;   &lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;   &lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;   &lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;   &lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;   &lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;   &lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;   &lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;   &lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;   &lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;   &lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; connecttype=&quot;rect&quot;&gt;  &lt;o:lock ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt; &lt;/v:shapetype&gt;&lt;v:shape id=&quot;_x0000_i1025&quot; type=&quot;#_x0000_t75&quot; style=&quot;&#39;width:245.25pt;&quot;&gt;  &lt;v:imagedata src=&quot;file:///C:\DOCUME~1\NCHENN~1\LOCALS~1\Temp\msohtml1\06\clip_image001.png&quot; title=&quot;&quot;&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCl9dChu-EHxSwrPU2N30Kfu8syZ1UUI7pEo6phVJnDXUIb1HvcPBq_Omz_N99-doH_RYJgVb22HSqxncG13-JDKWCrM7LQje6mpLgwiFvpPVgdWY1TAXm5T3UmjsCRYLZcIPSDQaY2jQ/s1600/Storage+Structure.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 152px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCl9dChu-EHxSwrPU2N30Kfu8syZ1UUI7pEo6phVJnDXUIb1HvcPBq_Omz_N99-doH_RYJgVb22HSqxncG13-JDKWCrM7LQje6mpLgwiFvpPVgdWY1TAXm5T3UmjsCRYLZcIPSDQaY2jQ/s200/Storage+Structure.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5409894713337319810&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p style=&quot;text-align: center;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot;&gt;                        &lt;/span&gt;Pic-1: Structured Storage&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;To read further about storage structure of an office file, go through the below links.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380363%28VS.85%29.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/aa380363%28VS.85%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa378938%28VS.85%29.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/aa378938%28VS.85%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/COM_Structured_Storage&quot;&gt;http://en.wikipedia.org/wiki/COM_Structured_Storage&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;For example I have a utility s/w called &lt;b style=&quot;&quot;&gt;stg&lt;/b&gt; with me that shows the structured storage. Take a look at the sample document Test.doc’s storage structure.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVpo7G63sHdYSF7_1WO9nmiA5tXMjqpq18Bnvl8-dCiZ4-iBvlgG91BNlGn-Bbmi1HXfHSY-jTOyr5fQwWePmOcT54sg2YYajXwhGionLgTc-DhHI9lm3abguYpIscCUWxuAf0c-sBS-U/s1600/stg.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 329px; height: 96px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVpo7G63sHdYSF7_1WO9nmiA5tXMjqpq18Bnvl8-dCiZ4-iBvlgG91BNlGn-Bbmi1HXfHSY-jTOyr5fQwWePmOcT54sg2YYajXwhGionLgTc-DhHI9lm3abguYpIscCUWxuAf0c-sBS-U/s200/stg.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5409902225007560210&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Pic-2: Test.doc’s storage structure   &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;br /&gt;1. Here is the sample code snippet for how to open a compound storage object.&lt;br /&gt;&lt;div style=&quot;background:#DDF0D0&quot;&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    const WCHAR *inFilePtr = L&quot;C:\\Test.doc&quot;;&lt;br /&gt;    HRESULT hr = S_OK;&lt;br /&gt;    IStorage *pStg = NULL;&lt;br /&gt;    hr = StgOpenStorageEx(&lt;br /&gt;                 inFilePtr,&lt;br /&gt;                 STGM_READ |STGM_SHARE_DENY_WRITE,&lt;br /&gt;                 STGFMT_ANY,&lt;br /&gt;                 0,&lt;br /&gt;                 NULL,&lt;br /&gt;                 NULL,&lt;br /&gt;                ID_IStorage,&lt;br /&gt;                reinterpret_cast&lt;void**&gt;(&amp;pStg) );&lt;br /&gt;    if( FAILED(hr) ) {&lt;br /&gt;            throw( &quot;couldn&#39;t open storage because of Invalid\&lt;br /&gt;                    file type or file doesnot exist&quot;);&lt;br /&gt;            return 1;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;span style=&quot;;font-family:&amp;quot;;font-size:10pt;&quot;  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;Read more about StgOpenStorageEx from &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380342%28VS.85%29.aspx&quot;&gt;MSDN&lt;/a&gt;.&lt;/p&gt;2. Here is the sample code snippet for how to check whether the child storage object is a stream or storage.  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 39pt; text-indent: -0.25in;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;font-family:Symbol;&quot;&gt;&lt;span style=&quot;&quot;&gt;·&lt;span style=&quot;;font-family:&amp;quot;;font-size:7pt;&quot;  &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Get the pointer to an enumerator object that can be used to enumerate storage and stream objects with in the storage object. &lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 39pt; text-indent: -0.25in;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;font-family:Symbol;&quot;&gt;&lt;span style=&quot;&quot;&gt; ·&lt;span style=&quot;;font-family:&amp;quot;;font-size:7pt;&quot;  &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Iterate through the enumerator object and check each element type. If the element type is stream then get the name of the stream and open the stream using the function &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380025%28VS.85%29.aspx&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;IStorage::OpenStream&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background:#DDF0D0&quot;&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   // Get the pointer to an enumerator object of&lt;br /&gt;   // root storage.&lt;br /&gt;   hr = pStg-&gt;EnumElements( NULL, NULL, NULL, &amp;penum );&lt;br /&gt; &lt;br /&gt;   if( FAILED(hr) ){ throw &quot;failed to IStorage::Enum&quot;;}&lt;br /&gt;      // iterate through the emuerator object.&lt;br /&gt;      hr = penum-&gt;Next( 1, &amp;statstg, 0 );&lt;br /&gt;      while( S_OK == hr )&lt;br /&gt;      {&lt;br /&gt;      if(statstg.type == 2) // child object is a stream&lt;br /&gt;      {&lt;br /&gt;            IStream *pStm = NULL;&lt;br /&gt;            HRESULT hrInn = S_OK;&lt;br /&gt;            hrInn = pStg-&gt;OpenStream(&lt;br /&gt;                        statstg.pwcsName,&lt;br /&gt;                        NULL,&lt;br /&gt;                        STGM_READ|STGM_SHARE_EXCLUSIVE,&lt;br /&gt;                        0,&lt;br /&gt;                        &amp;pStm);&lt;br /&gt;            if(S_OK != hrInn)&lt;br /&gt;                  throw(&quot;Unable to open the Stream&quot;);&lt;br /&gt;            // Read the data from stream&lt;br /&gt;            char temp[1000];&lt;br /&gt;            ULONG readBytes;&lt;br /&gt;            memset(&amp;temp,0,sizeof(temp));&lt;br /&gt;            pStm-&gt;Read(&amp;temp,1000,&amp;readBytes);&lt;br /&gt;            while(readBytes)&lt;br /&gt;            {&lt;br /&gt;                  printf(temp);&lt;br /&gt;                  memset(&amp;temp,0,sizeof(temp));&lt;br /&gt;                  pStm-&gt;Read(&amp;temp,1000,&amp;readBytes);&lt;br /&gt;            }&lt;br /&gt;      }&lt;br /&gt;      hr = penum-&gt;Next( 1, &amp;statstg, 0);&lt;br /&gt;      } //End of processing current stream&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 0.75in;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;Read further about &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380022%28VS.85%29.aspx&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;IStorage::EnumElements&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380319%28VS.85%29.aspx&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;STATSTG&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; structure, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380025%28VS.85%29.aspx&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;IStorage::OpenStream&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa380011%28VS.85%29.aspx&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;IStream::Read&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; from &lt;a href=&quot;http://msdn.microsoft.com/&quot;&gt;MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b style=&quot;&quot;&gt;References:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/&quot;&gt;http://msdn.microsoft.com/&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx&quot; target=&quot;_blank&quot;&gt;http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;a href=&quot;http://www.securityfocus.com/infocus/1822&quot;&gt;http://www.securityfocus.com/infocus/1822&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;a href=&quot;http://support.microsoft.com/kb/105763&quot;&gt;http://support.microsoft.com/kb/105763&lt;/a&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify; text-indent: 0.5in;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://altctrlf1.blogspot.com/feeds/8390624616830377596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://altctrlf1.blogspot.com/2009/11/how-to-read-streams-from-ms-office-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2750056258813010897/posts/default/8390624616830377596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2750056258813010897/posts/default/8390624616830377596'/><link rel='alternate' type='text/html' href='http://altctrlf1.blogspot.com/2009/11/how-to-read-streams-from-ms-office-file.html' title='How to read streams from MS Office file'/><author><name>Narendra Chennupati</name><uri>http://www.blogger.com/profile/07486009655028686556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyEbjb77K-zovv-fGzceP_05iVTR4tBybzx-r1CXiZtRaSvW4klE0yY47G-dx2M63M4f72EHw87zHn79_y5BG2WPkkVMBry9J-3riGEM1dGVvtd4A0XeZbRGjwSNmhg/s220/MyImage.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCl9dChu-EHxSwrPU2N30Kfu8syZ1UUI7pEo6phVJnDXUIb1HvcPBq_Omz_N99-doH_RYJgVb22HSqxncG13-JDKWCrM7LQje6mpLgwiFvpPVgdWY1TAXm5T3UmjsCRYLZcIPSDQaY2jQ/s72-c/Storage+Structure.JPG" height="72" width="72"/><thr:total>0</thr:total></entry></feed>