<div dir="ltr">Robert,<div><br></div><div>Thanks for the information.  I cleaned up the references to allow smart pointers to work for the model and viewer as intended.  The explicit deletion and cleanup code was added years ago in an attempt to address a memory leak issue.  Unfortunately osgDB::readRefFile() wasn't available when the original code was written years ago, and the loading code was taken directly the first sample that loaded a model file - osganimationhardware.  We've never had an issue but I did make the changes you suggested.</div><div><br></div><div>After the changes I found the problem persisted.  It ended up being a change to the OpenFlight plugin.  The older version had its own caches for textures and external references (3.4.0).  The newer version (3.6.3/4) uses the osgDB ObjectCache class.  The problem with that is Texture2D.cpp deletes the texture image data on the first render (line 285) so the cached data is null right after the file is loaded, thus the black textures. In reality, the osgDB cache is useless since (at least) the texture data is overwritten almost immediately.  I found that after the cache expiration timed out all the cached data was deleted and the model will load correctly since it is not getting corrupted data from the cache but loading the files.</div><div><br></div><div>Will there be a fix coming for the cache issue or should I do a workaround (perhaps re-using the 3.4.0 OpenFlight cache code)?</div><div><br></div><div>Thanks.</div><div><br></div><div><br></div><div><br></div><div><br><br>On Friday, December 6, 2019 at 1:35:45 PM UTC-6, Greg D wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir="ltr"><p class="MsoNormal">I have been using OSG for a number of years for a commercial
product. 
Our product loads various models and earth views as the user requires them (for
security monitoring – buildings and campuses mostly).  I have a problem
with 3.6.3/4 that wasn't there in 3.4.0.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">I have an OpenFlight model (sample/demo model) that uses textures for terrain
and on buildings.  The first time I load it all is fine.  However, if
I load another model (or another graphics file – the application supports AutoCAD, raster, OSG
Earth, and ArcGIS formats as well) then reload the model the terrain is black and the
textures are corrupted if they are not black.  This worked fine with 3.4.0 and 3.4.1
but does not work with 3.6.3 or 3.6.4.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">I have debugged into the code and it appears that the model and textures are always reloaded from the cache and I cannot override this (setting
Options::CACHE_NONE doesn’t affect it - in 3.4.0 the model always loaded from files with Options set to CACHE_NONE).  If I look at the model graph in memory (after the first load), the textures appear to be erased or over-written during the
traversals in one of the classes called in ViewerBase::runOperations() (though it’s a little confusing to me at that
point, it appears to be when GlobalObjectVisitor::compile() calls node.accept(*this)).  During the traversals where the textures appear to be
over-written, I noticed the context ID is always 0, so the textures appear to
be reloaded, over-writing the original data in the process (though I could be
quite confused as to what I am seeing and it may all be irrelevant to the
issue). </p><p class="MsoNormal"><br></p><p class="MsoNormal">Below is a short snippet from my initialization and cleanup code
between model loads.  I load the model, add a clip node to peel down
through the models vertically.  I also add other nodes to hold embedded bitmaps (Billboards) representing security devices – cameras, doors, alarm points, etc. 
Those details are omitted from the code below.  After the model is loaded
I set up the graphics context and render the image to an offscreen window
(which is then copied to a memory bitmap).  The application is a Windows console
app (with hidden window) that streams bitmap images to the client app via named
pipe on the same machine (I know, it’s complicated, but it’s a complex
environment, including live video windows).</p>

<p class="MsoNormal"> </p><p class="MsoNormal">As I said, it has worked fine with previous versions of OSG (back to 3.0.1, if not earlier).  This may be specific to Open Flight models, as I can load FBX models, OSG earth files, or the cessnafire.osg model and the textures appear correct.</p><p class="MsoNormal"><br></p><p class="MsoNormal">Any help would be appreciated.  If the model would always be loaded from the file when Options::CACHE_NONE were set it would solve my problem.</p><p class="MsoNormal"><br></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OSGLoadResult</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OpenSceneGraphBitmap</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::<wbr>LoadModel(std::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">string</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:gray">fileName</span><span style="font-size:9.5pt;font-family:Consolas;color:black">, osgDB::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Options</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* </span><span style="font-size:9.5pt;font-family:Consolas;color:gray">dbOptions</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">{</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">      
CleanupModel();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (m_Root == </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)</span><br></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root </span><span style="font-size:9.5pt;font-family:Consolas;color:teal">=</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">new</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Group</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;         
</span><span style="font-size:9.5pt;font-family:Consolas;color:green">// Init
the main Root Node/Group</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// Load the Model from
the model name</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Group</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* model = </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">dynamic_cast</span><span style="font-size:9.5pt;font-family:Consolas;color:black"><osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Group</span><span style="font-size:9.5pt;font-family:Consolas;color:black">*>(<wbr>osgDB::readNodeFile(</span><span style="font-size:9.5pt;font-family:Consolas;color:gray">fileName</span><span style="font-size:9.5pt;font-family:Consolas;color:black">, </span><span style="font-size:9.5pt;font-family:Consolas;color:gray">dbOptions</span><span style="font-size:9.5pt;font-family:Consolas;color:black">));</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (model != </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       {</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:green">//
Optimize the model</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
osgUtil::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Optimizer</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> optimizer;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
optimizer.optimize(model);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
optimizer.reset();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:green">// Create
the clip node and add to scene</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ComputeBoundsVisitor</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> cbbv;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
model->accept(cbbv);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">BoundingBox</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> bb =
cbbv.getBoundingBox();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ref_ptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black"><osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ClipPlane</span><span style="font-size:9.5pt;font-family:Consolas;color:black">> clipPlane = </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">new</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ClipPlane</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
clipPlane</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">setClipPlane(0.0, 0.0,
-1.0, bb.zMin() + (bb.zMax() - bb.zMin()));</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
clipPlane</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">setClipPlaneNum(0);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ref_ptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black"><osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ClipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:black">> clipNode = </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">new</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ClipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
clipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">setName(</span><span style="font-size:9.5pt;font-family:Consolas;color:#a31515">"CLIP_NODE"</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)<wbr>;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
clipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">addClipPlane(<wbr>clipPlane.get());</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
clipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">setCullingActive(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">fal<wbr>se</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
model->setStateSet(clipNode</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">g<wbr>etStateSet());</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">addChild(clipNode);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">addChild(model);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">setDataVariance(osg::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">O<wbr>bject</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span style="font-size:9.5pt;font-family:Consolas;color:darkslategray">DYNAMIC</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">return</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OSGLoadResult</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span style="font-size:9.5pt;font-family:Consolas;color:darkslategray">Sucess</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       }</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// since load failed,
reset the wait event so the render thread resumes</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">return</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OSGLoadResult</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span style="font-size:9.5pt;font-family:Consolas;color:darkslategray">FileLoadError</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">}</span></p>

<p class="MsoNormal"> </p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:blue">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OpenSceneGraphBitmap</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::<wbr>CleanupModel()</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">{</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">      
RemoveViews();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (m_Root != </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)    
</span><span style="font-size:9.5pt;font-family:Consolas;color:green">// if
root already exists (already loaded previous scene) remove children to clean up</span><span style="font-size:9.5pt;font-family:Consolas;color:black"></span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       {</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">releaseGLObjects();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">removeChildren(0,
m_Root</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">getNumChildren());</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* ptr =
m_Root.release();</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">delete</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> ptr;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_Root </span><span style="font-size:9.5pt;font-family:Consolas;color:teal">=</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       }</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">}</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:blue">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">OpenSceneGraphBitmap</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::<wbr>RemoveViews()</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">{</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (m_nhiCompositeViewer
!= </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       {</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_nhiCompositeViewer->setDone(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue"><wbr>true</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">delete</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> m_nhiCompositeViewer;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
m_nhiCompositeViewer = </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:9.5pt;font-family:Consolas;color:black">;</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">       }</span></p>

<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">}</span></p>

<p class="MsoNormal"> </p></div></blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:osg-users+unsubscribe@googlegroups.com">osg-users+unsubscribe@googlegroups.com</a>.<br />
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/osg-users/8ab9bfc5-c4c2-4787-bb53-a60d39bd47b2%40googlegroups.com?utm_medium=email&utm_source=footer">https://groups.google.com/d/msgid/osg-users/8ab9bfc5-c4c2-4787-bb53-a60d39bd47b2%40googlegroups.com</a>.<br />