<div dir="ltr">[It seems that the mail archive at <a href="http://sourceforge.net">sourceforge.net</a> doesn't like zip archives and has messed up the message.  So here the same message once again without attachment.  The latter, however, can be downloaded from  <a href="http://sourceforge.net/mailarchive/attachment.php?list_name=ecls-list&message_id=CAMCvb%3DDKBE%3DEoej0vbZ6D9AxJCurD3aVjVA%2BWOu6tdVFw8snjw%40mail.gmail.com&counter=2">http://sourceforge.net/mailarchive/attachment.php?list_name=ecls-list&message_id=CAMCvb%3DDKBE%3DEoej0vbZ6D9AxJCurD3aVjVA%2BWOu6tdVFw8snjw%40mail.gmail.com&counter=2</a> ]<div>
<br></div><div><div>Hi Juanjo,<br></div><div><br></div><div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">On Mon, Jul 22, 2013 at 5:12 AM, Juan Jose Garcia-Ripoll </span><span dir="ltr" style="font-family:arial,sans-serif;font-size:12.800000190734863px"><<a href="mailto:juanjose.garciaripoll@gmail.com" target="_blank">juanjose.garciaripoll@gmail.com</a>></span><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> wrote:</span><div class="im" style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><br><div class="gmail_quote">
On Wed, Jul 17, 2013 at 11:32 AM, Dietrich Bollmann <span dir="ltr"><<a href="mailto:dietrich@formgames.org" target="_blank">dietrich@formgames.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="gmail_extra">Is my explanation more understandable this time?</div><div class="gmail_extra"></div></blockquote></div><br></div>I am afraid I am more confused now. Apart from the fact that your message appears full of markup (yellow word for some reason), the fact is that I do not see in this code the version that fails to work. You show me what works (and what you call a workaround), but I am not able to see what code fails for you.<br>
</div></div></blockquote><div><br></div></div><div class="im" style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div>Sorry for creating even more confusion - and thank you for putting this amount of work into solving my problems!</div>
<div><br></div></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">The yellow markup probably results from using the "check spelling" functionality in google mail...  I am pretty sure that I exited the spelling mode before sending the mail - but for some reason the yellow markup remained...  Sorry for that!</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">The reason that it is not possible to see problems in the code is that it actually works: I found a different way to solve the problem and posted it for reference.  Sorry for not making this clear enough.</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">Beside wanting to provide a working solution to my first question, I also wondered if there was a better way to pack the pointer into a cl_object as done in the function 'setRhinoCommandContext()'. Matthew answered to this by telling me about 'ecl_make_pointer()' and 'ecl_to_pointer()' as alternatives to my complicated approach.  </div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">So, rather than using</div><div class="im" style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<div><br></div><div>  union cl_lispunion cl_context_object;</div><div>  cl_context_object.foreign.t    = t_foreign;</div><div>  cl_context_object.foreign.tag  = ECL_SYM(":POINTER-VOID",1377);</div><div>  cl_context_object.foreign.size = 0;</div>
<div>  cl_context_object.foreign.data = (char*) &context;</div><div>  cl_object cl_context = &cl_context_object;</div><div><br></div></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">  cl_funcall(2, c_string_to_object("set-context"), cl_context);</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">I now simply use </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">  cl_funcall(2, c_string_to_object("set-context"), ecl_make_pointer(&context));</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">Much better!</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
Thank you, Matthew!</div><div class="im" style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"></div><div class="gmail_extra">See for instance the example I attach. It consists on three different files all referring to the same constant. The code is working as it should according to your description, even when the lisp code is evaluated.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">I really believe you have some problem with "extern" or "static" declarations, or something more subtle, such as using lisp constants (defconstant) that the lisp is allowed to optimize away (assuming that they remain constant through execution).</div>
</div></blockquote><div><br></div></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">I think the same.  The problem is, that I am still not clear about how COMPILE-FILE and ASDF:MAKE-BUILD work in detail.  Also my main file is written in C++ and not compiled from lisp.  But as the second approach which is based on compiling the lisp code to a library and using a static variable which only is accessed from the lisp setter and getter is more elegant anyway, I just will continue with this solution.</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">For reference I attach two failing attempts based on a global variable (v001, v002), the first working solution (v003) and the approach currently used based on Matthew's advice (v004).  See the protocol at the end of the mail for their usage.</div>
<div class="im" style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div><br></div><div>Thanks again for your help!</div></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">Dietrich</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">===</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
Here, just for reference, a protocol showing the use of the attached sources:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
In a cygwin xterm:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">unzip versions.zip</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># Version 1</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# - Based on an external global variable 'global_int'</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Using COMPILE-FILE to build the object files and linking to them directly</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Cannot call the lisp function TEST</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
cd versions/v001</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># Preparations:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">#   - Makefile : adapt 'ECL_INSTALL_DIR' to the local installation dir of ECL</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
#   - vsenv    : adapt 'vcvars64bat' to the location of vcvars64.bat</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
chmod 755 vsenv</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./vsenv nmake</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./main.exe</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> global_int=123</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
> Condition of type: UNDEFINED-FUNCTION</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> The function TEST is undefined.</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
> No restarts available.</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> ...</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
./vsenv nmake clean</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># Version 2</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Based on an external global variable 'global_int'</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# - Using ASDF:MAKE-BUILD to build a library</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Cannot access the external symbol global_int</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">cd ../v002</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# Preparations:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">#   - Makefile : adapt 'ECL_INSTALL_DIR' to the local installation dir of ECL</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px">#   - vsenv    : adapt 'vcvars64bat' to the location of vcvars64.bat</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">chmod 755 vsenv</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./vsenv nmake</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> ...</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> main.obj : error LNK2001: unresolved external symbol global_int</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> main.exe : fatal error LNK1120: 1 unresolved externals</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> ...</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./vsenv nmake clean</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># version 3</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# - Based on a static variable 'global_context' only accessed from inside the library</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - 'global_context' is set from C++ by calling a compiled lisp setter function</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Using ASDF:MAKE-BUILD to build a library</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Works - but uses a complicated approach to wrap the pointer into a cl_object</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">cd ../v003</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># Preparations:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
#   - Makefile : adapt 'ECL_INSTALL_DIR' to the local installation dir of ECL</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">#   - vsenv    : adapt 'vcvars64bat' to the location of vcvars64.bat</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">chmod 755 vsenv</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
./vsenv nmake</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./main.exe</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
> global_context = NULL</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> *global_context = 123</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
./vsenv nmake clean</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># version 4</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Based on a static variable 'global_context' only accessed from inside the library</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# - 'global_context' is set from C++ by calling a compiled lisp setter function</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># - Using ASDF:MAKE-BUILD to build a library</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
# - Works - version currently used</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">cd ../v004</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># Preparations:</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># </div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
#   - Makefile : adapt 'ECL_INSTALL_DIR' to the local installation dir of ECL</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">#   - vsenv    : adapt 'vcvars64bat' to the location of vcvars64.bat</div>
<div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">chmod 755 vsenv</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
./vsenv nmake</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">./main.exe</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
> global_context = NULL</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">> *global_context = 123</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px">
./vsenv nmake clean</div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></div><div style="font-family:arial,sans-serif;font-size:12.800000190734863px"># fin.</div><div><br></div></div><div><br>
</div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 24, 2013 at 11:08 AM, Dietrich Bollmann <span dir="ltr"><<a href="mailto:dietrich@formgames.org" target="_blank">dietrich@formgames.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Hi Matt,</div><div><br></div><div>Thanks for your answer - and sorry for my late reply!</div></div>
<div><br></div>On Thu, Jul 18, 2013 at 2:39 AM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net" target="_blank">mm_lists@pulsar-zone.net</a>></span> wrote:<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On Sun, 14 Jul 2013 00:31:27 +0900<br>Dietrich Bollmann <<a href="mailto:dietrich@formgames.org" target="_blank">dietrich@formgames.org</a>> wrote:<br>

<br>> I compiled my ECL lisp functions with asdf:make-build into a library.<br>><br>> Some functions depend on the value of a global variable which has to be set<br>> in the code using the library.<br>><br>

> But when changing the value of the global variable in the code using the<br>> library, the library functions still use the old value...<br><br></div>I don't really understand why in your example code only the original<br>

value is obtained, possibly that the scope of the variable is not the<br>expected one (that there are two such variables or such)?  I recommend<br>to use (setf c::*delete-files* nil) and to inspect the resulting C code.<br>

</blockquote><div><br></div></div><div>I seem to be unable to understand myself.  </div><div><br></div><div>But approaching the problem by </div><div><br></div><div>  - using a static variable together with a lisp setter and getter and</div>

<div>  - compiling the lisp files to a library with ASDF:MAKE-BUILD</div><div><br></div><div>results in a working solution.  This one is more elegant anyway, so I will just continue with this one.</div><div><br></div><div>

Just for reference I'll send the sources of two failing attempts as well as those of two working solutions to the list.  See the attachment to the next email responding to Juanjo's answer.</div><div class="im"><div>
 </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Note also that for handling foreign pointers (other than :pointer-void<br>with C-INLINE which it handles implicitely), there are the public<br>interfaces ecl_make_pointer() and ecl_to_pointer().<br></blockquote><div><br>
</div>
</div><div>Thanks!</div><div><br></div><div>These are the functions I was looking for!</div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

In your next message I see that you seem to be doing it right to store<br>the context in a C variable (although I didn't test your code).  If<br>it's to store a unique global context on which the Lisp code should<br>

have no control, it might not matter, but otherwise, it might be best<br>to have interface functions require the context parameter or to obtain<br>it from a dynamic/special variable, which would allow Lisp code to<br>handle multiple objects more elegantly than is generally possible from<br>

C/C++ because of the power of dynamic scope...<br></blockquote><div><br></div></div><div>What do you mean by "dynamic/special variable"?</div><div><br></div><div>But anyway, I rewrote my solution as mentioned before and now use 'ecl_make_pointer()' rather than my own complicated way to wrap the pointer (See the forth version in the code attached to the answer to Juanjo).  This looks good enough to me and I will use this one from now on!</div>

<div><br></div><div>Thanks again for your help!</div><div><br></div><div>Cheers,</div><div>Dietrich</div><span class="HOEnZb"><font color="#888888"><div>  </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

--<br>Matt</blockquote></font></span><div><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jul 18, 2013 at 2:39 AM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net" target="_blank">mm_lists@pulsar-zone.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On Sun, 14 Jul 2013 00:31:27 +0900<br>
Dietrich Bollmann <<a href="mailto:dietrich@formgames.org" target="_blank">dietrich@formgames.org</a>> wrote:<br>
<br>
> I compiled my ECL lisp functions with asdf:make-build into a library.<br>
><br>
> Some functions depend on the value of a global variable which has to be set<br>
> in the code using the library.<br>
><br>
> But when changing the value of the global variable in the code using the<br>
> library, the library functions still use the old value...<br>
<br>
</div>I don't really understand why in your example code only the original<br>
value is obtained, possibly that the scope of the variable is not the<br>
expected one (that there are two such variables or such)?  I recommend<br>
to use (setf c::*delete-files* nil) and to inspect the resulting C code.<br>
<br>
Note also that for handling foreign pointers (other than :pointer-void<br>
with C-INLINE which it handles implicitely), there are the public<br>
interfaces ecl_make_pointer() and ecl_to_pointer().<br>
<br>
In your next message I see that you seem to be doing it right to store<br>
the context in a C variable (although I didn't test your code).  If<br>
it's to store a unique global context on which the Lisp code should<br>
have no control, it might not matter, but otherwise, it might be best<br>
to have interface functions require the context parameter or to obtain<br>
it from a dynamic/special variable, which would allow Lisp code to<br>
handle multiple objects more elegantly than is generally possible from<br>
C/C++ because of the power of dynamic scope...<br>
--<br>
Matt<br>
<br>
------------------------------------------------------------------------------<br>
See everything from the browser to the database with AppDynamics<br>
Get end-to-end visibility with application monitoring from AppDynamics<br>
Isolate bottlenecks and diagnose root cause in seconds.<br>
Start your free trial of AppDynamics Pro today!<br>
<a href="http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk" target="_blank">http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk</a><br>
_______________________________________________<br>
Ecls-list mailing list<br>
<a href="mailto:Ecls-list@lists.sourceforge.net" target="_blank">Ecls-list@lists.sourceforge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/ecls-list" target="_blank">https://lists.sourceforge.net/lists/listinfo/ecls-list</a><br>
</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>