Hi James,

Again I use VM connector so no failure should happen.
But anyway that's not a problem with the failure, the big question is why the connection is cleaned up when a transport error occur and what's the approach here, is not clear for me in case of transport failures, the connection release the sessions and next time I will get "Session close" when I'm trying to create a consumer.
What should I do? in case of an error first try to recreate the session?

James Strachan wrote:
It sounds like for some reason your transport is being closed due to
some kind of network issue. Generally if your code is not doing it
then the only time a session is closed is if the transport fails with
a serious exception.

So I'd

* enable debugging logging to watch the networking code and look for
errors/reconnections

Does your application run in a single JVM? i.e. there is just 1 JVM
with all the code inside and no TCP is being used at all? If not it
sounds like networking is failing such as a socket or inactivity
timeout or something - so either change your failover: configuration
or disable the inactivity timeout

http://incubator.apache.org/activemq/configuring-wire-formats.html

On 7/18/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
Anybody, please  :) I don't know how to continue with this issue ...

Adrian Tarau wrote:
> Any thoughts  ???
>
> Adrian Tarau wrote:
>> I think I found the cause???? :)
>>
>> Look at this stack trace(which seems to be the source of our
>> problems, after this exceptions we got "Session close"), which at
>> some moment in time I got it(see bellow -  I will mark with bold the
>> what's important). Look at the bold stack entry, in
>> ActiveMQConnection.onException.
>> Un unrecoverable error in transport close the sessions, consumers,
>> listeners , etc but doesn't close the connection.
>>
>> My question is how can I avoid getting the "Session close" message?
>> How can I test if the session is closed? It is this the right way to
>> handle a transport error, cleaning up the connection?
>>
>> I cannot test if the session is closed(ActiveMQSession.closed field
>> is private), eventually I can try to do something with the session
>> and in case of failure, I will recreate the session. Is this the
>> right way to do it?
>>
>> Thanks.
>>
>> /**
>>     * An unrecoverable exception has occured on the transport
>>     * @param error
>>     */
>> public void onException(final IOException error) {
>>        onAsyncException(error);
>>        asyncConnectionThread.execute(new Runnable(){
>>            public void run() {
>>                *transportFailed(error);*
>>
>> ServiceSupport.dispose(ActiveMQConnection.this.transport);
>>                brokerInfoReceived.countDown();
>>                      for (Iterator iter =
>> transportListeners.iterator(); iter.hasNext();) {
>>                    TransportListener listener = (TransportListener)
>> iter.next();
>>                    listener.onException(error);
>>                }
>>            }
>>        });
>>    }
>>
>> and then transportFailed
>>
>> protected void transportFailed(IOException error){
>>        transportFailed.set(true);
>>        if (firstFailureError == null) {
>>            firstFailureError = error;
>>        }
>>        if (!closed.get() && !closing.get()) {
>>            try{
>>                *cleanup();*
>>            }catch(JMSException e){
>>               log.warn("Cleanup failed",e);
>>            }
>>        }
>>    }
>>
>> and then cleanup
>>
>> public void cleanup() throws JMSException {
>>              if( advisoryConsumer!=null ) {
>>            advisoryConsumer.dispose();
>>            advisoryConsumer=null;
>>        }
>> for (Iterator i = this.sessions.iterator(); i.hasNext();) {
>>            *ActiveMQSession s = (ActiveMQSession) i.next();
>>            s.dispose();*
>>        }
>>        for (Iterator i = this.connectionConsumers.iterator();
>> i.hasNext();) {
>>            ActiveMQConnectionConsumer c =
>> (ActiveMQConnectionConsumer) i.next();
>>            c.dispose();
>>        }
>> for (Iterator i = this.inputStreams.iterator(); i.hasNext();) {
>>            ActiveMQInputStream c = (ActiveMQInputStream) i.next();
>>            c.dispose();
>>        }
>> for (Iterator i = this.outputStreams.iterator(); i.hasNext();) {
>>            ActiveMQOutputStream c = (ActiveMQOutputStream) i.next();
>>            c.dispose();
>>        }
>>
>>        if(isConnectionInfoSentToBroker){
>>            if(!transportFailed.get() && !closing.get()){
>>                asyncSendPacket(info.createRemoveCommand());
>>            }
>>            isConnectionInfoSentToBroker=false;
>>        }              if( userSpecifiedClientID ) {
>>            info.setClientId(null);
>>            userSpecifiedClientID=false;
>>        }
>>        clientIDSet = false;
>>
>>        started.set(false);
>>    }
>>
>> *Stack trace*
>>
>>    at
>> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:45)
>>
>>    at
>> org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1462)
>>
>>    *at
>> org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1478)*
>>
>>    at
>> org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:94)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:120)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:94)
>>
>>    at
>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
>>
>>    at
>> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
>>    at
>> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
>>
>>    at
>> org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:211)
>>
>>    at
>> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:64)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97)
>>
>>    at
>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
>>
>>    at
>> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
>>    at
>> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:68)
>>
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:73)
>>
>>    at
>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1131)
>>
>>    at
>> org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1667)
>>
>>    at
>> org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:196)
>>
>>    at
>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:840)
>>
>>    at
>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:800)
>>
>>    at
>> com.daxtechnologies.sams.manager.JmsSessionWrapper.createConsumer(JmsSessionWrapper.java:106)
>>
>>    at
>> com.daxtechnologies.sams.manager.AbstractSamsManagerQueue.consume(AbstractSamsManagerQueue.java:133)
>>
>>    at
>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.consume(SamsManagerQueues.java:602)
>>
>>    at
>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.throttleQueue(SamsManagerQueues.java:571)
>>
>>    at
>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.run(SamsManagerQueues.java:622)
>>
>>    at
>> com.daxtechnologies.sams.manager.SamsManagerThreadPool$WorkerThead.run(SamsManagerThreadPool.java:188)
>>
>> Caused by: java.io.InterruptedIOException: Interrupted.
>>    at
>> org.apache.activemq.transport.FutureResponse.set(FutureResponse.java:56)
>>    at
>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:89)
>>
>>
>> Adrian Tarau wrote:
>>> Even more :)
>>>
>>> As I told you I created a a Session wrapper over the ActiveMQ
>>> session in order to catch the close call.
>>>
>>> you can see down bellow the close method :
>>>
>>> public void close() throws JMSException {
>>>        try {
>>>            IllegalAccessError illegalAccessError = new
>>> IllegalAccessError("I don't want to close");
>>>            StringWriter sw = new StringWriter();
>>>            illegalAccessError.printStackTrace(new PrintWriter(sw));
>>>            LOG.error("Somebody closed the session, let's see
>>> who\n\n" + sw.toString());
>>>            System.out.println("Somebody closed the session, let's
>>> see who\n\n" + sw.toString());
>>>        } finally {
>>>            session.close();
>>>        }
>>>    }
>>>
>>> Well, I looked in the error log, also looked in the container
>>> log(JBoss) and didn't find any of theses  strings "Somebody ...".
>>> The conclusion is that nobody called close explicit on the session.
>>> I placed that on 3 systems and over the weekend I got on all this
>>> problem. One common thing between the systems is that are all
>>> loaded(are test machines) and on all everything start to get
>>> "Session close" after I got this exception(see bellow).
>>>
>>> I don't know why we got java.io.InterruptedIOException:, it could be
>>> possible because of me :). We interrupt the current thread(which
>>> consume the message) if didn't respond after 60 secs(some kind of
>>> watchdog) so it is possible to be because I call explicit
>>> Thread.interrupt().
>>>
>>> Anyway, I thinkg, this should affect the sessions state(the close
>>> field should not be turned false by any other piece of code, except
>>> close() function, right?) should not be affected by am interrupt
>>> exception in a consumer.
>>>
>>> Thats all I could get about this problem with session close, anyway
>>> I think I will create all the time the session, to avoid this problem.
>>>
>>> Thanks.
>>>
>>>
>>> 2006-07-15 03:24:54,628 [AcitveMQ Connection Worker:
>>> vm://localhost#0] ERROR
>>> com.daxtechnologies.sams.manager.SamsManagerJMS - JMS Error
>>> javax.jms.JMSException: Interrupted.
>>>    at
>>> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:45)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1462)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1478)
>>>
>>>    at
>>> org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:94)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:120)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:94)
>>>
>>>    at
>>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
>>>
>>>    at
>>> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
>>>
>>>    at
>>> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
>>>
>>>    at
>>> org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:211)
>>>
>>>    at
>>> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:64)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97)
>>>
>>>    at
>>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
>>>
>>>    at
>>> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
>>>
>>>    at
>>> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:68)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:73)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1131)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1667)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:196)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:840)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:800)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.JmsSessionWrapper.createConsumer(JmsSessionWrapper.java:106)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.AbstractSamsManagerQueue.consume(AbstractSamsManagerQueue.java:133)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.consume(SamsManagerQueues.java:602)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.throttleQueue(SamsManagerQueues.java:571)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.run(SamsManagerQueues.java:622)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerThreadPool$WorkerThead.run(SamsManagerThreadPool.java:188)
>>>
>>> Caused by: java.io.InterruptedIOException: Interrupted.
>>>    at
>>> org.apache.activemq.transport.FutureResponse.set(FutureResponse.java:56)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:89)
>>>
>>>    ... 23 more
>>> 2006-07-15 03:24:54,805 [SAMS-Worker-queue.contact_type-3] ERROR
>>> com.daxtechnologies.sams.manager.AbstractSamsManagerQueue - Cannot
>>> consume message from queue queue 'Contact Queue
>>> <system/[EMAIL PROTECTED]>' javax.jms.JMSException: Interrupted.
>>>    at
>>> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:57)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1141)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1667)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQMessageConsumer.close(ActiveMQMessageConsumer.java:516)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.AbstractSamsManagerQueue.consume(AbstractSamsManagerQueue.java:145)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.consume(SamsManagerQueues.java:602)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.throttleQueue(SamsManagerQueues.java:571)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.run(SamsManagerQueues.java:622)
>>>
>>>    at
>>> com.daxtechnologies.sams.manager.SamsManagerThreadPool$WorkerThead.run(SamsManagerThreadPool.java:188)
>>>
>>> Caused by: java.io.InterruptedIOException: Interrupted.
>>>    at
>>> org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:40)
>>>
>>>    at
>>> org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:74)
>>>
>>>    at
>>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1131)
>>>
>>>    ... 7 more
>>>
>>> Adrian Tarau wrote:
>>>> More about closed session :)
>>>>
>>>> Could be possible that the closing problem could occur because the
>>>> Session is not per Thread, even if it is accessed by only on thread
>>>> at the time(or it should be accessed, but sometime is not -
>>>> backport-concurent problems)?
>>>>
>>>> The code look like that :
>>>> class MyStorageQueue {
>>>>   private  Session session;
>>>>   private Queue queue;
>>>>   protected final Semaphore lock = new Semaphore(1, true);
>>>>     ....
>>>>  public Object consume() {
>>>>     ....
>>>>  }
>>>>
>>>>  public void publish(Object object) {
>>>>     ....
>>>>  }
>>>> }
>>>>
>>>> and usage in different threads
>>>> MyStorageQueue queue = getNextQueue(...);
>>>> if (queue.lock.tryAcquire()) {
>>>>                try {
>>>>                       Object value = consume(queue);
>>>>                        .....
>>>>                } finally {
>>>>                    queue.lock.release();
>>>>                }
>>>> }
>>>>
>>>> Anyway I created a wrapper over an ActiveMQ session, and dump the
>>>> stack trace to see who calls the close method.
>>>>
>>>>
>>>>
>>>> Adrian Tarau wrote:
>>>>> Debugging remove is not a problem, the problem is that I need to
>>>>> start the application in debug mode and keep the IDE with a
>>>>> breakpoint for days until it happens.
>>>>>
>>>>> I think I will recompile the ActiveMQ and dump the thread stack
>>>>> trace :)
>>>>>
>>>>> Sanjiv Jivan wrote:
>>>>>> You can attach your debugger to the Java process on the remote
>>>>>> machine and
>>>>>> set the breakpoint on the session.close() call. Once the
>>>>>> breakpoint it hit,
>>>>>> you can examine the call stack in your debugger.
>>>>>>
>>>>>> Use the JPDA socket JVM args when starting your Java process. Eg
>>>>>> :  -Xdebug
>>>>>> -Xnoagent
>>>>>> -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 7/13/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
>>>>>>>
>>>>>>> That's great but this usually happens on the remote machine,
>>>>>>> after a few
>>>>>>> days :)
>>>>>>>
>>>>>>> James Strachan wrote:
>>>>>>> > Maybe try run your code in a debugger and set breakpoints in the
>>>>>>> > ActiveMQSession class to see where & why the session gets
>>>>>>> closed? (The
>>>>>>> > code's pretty easy to follow, its a relatively simple class).
>>>>>>> >
>>>>>>> >
>>>>>>> > On 7/13/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
>>>>>>> >> James, do you want the sources or can you recommend me some
>>>>>>> actions? To
>>>>>>> >> create the session all the time, not to cache it?
>>>>>>> >>
>>>>>>> >> Adrian Tarau wrote:
>>>>>>> >> > Ok, so who close the session? :)
>>>>>>> >> >
>>>>>>> >> > James Strachan wrote:
>>>>>>> >> >> Sorry I forgot about that :)
>>>>>>> >> >>
>>>>>>> >> >> The only time a VM broker is shut down is explicitly via
>>>>>>> application
>>>>>>> >> >> code or a shutdown handler.
>>>>>>> >> >>
>>>>>>> >> >> On 7/13/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
>>>>>>> >> >>> I use vm connector so no connection problems should be
>>>>>>> involved,
>>>>>>> >> right?
>>>>>>> >> >>>
>>>>>>> >> >>> James Strachan wrote:
>>>>>>> >> >>> > BTW are you using auto-reconnect? It could be that the
>>>>>>> socket is
>>>>>>> >> >>> > terminated due to some network issue?
>>>>>>> >> >>> >
>>>>>>> >> >>> >
>>>>>>> >> >>>
>>>>>>> >>
>>>>>>> http://incubator.apache.org/activemq/how-can-i-support-auto-reconnection.html
>>>>>>>
>>>>>>> >>
>>>>>>> >> >>>
>>>>>>> >> >>> >
>>>>>>> >> >>> >
>>>>>>> >> >>> > On 7/13/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
>>>>>>> >> >>> >> I made a search for "close" in the source code and
>>>>>>> except from
>>>>>>> >> >>> produces,
>>>>>>> >> >>> >> consumers and inputstream and outputstream I don't
>>>>>>> close the
>>>>>>> >> >>> connection
>>>>>>> >> >>> >> or session, except on the JVM shutdown(Thread hook).
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> I can provide you(private - not on the mailing list) the
>>>>>>> >> source code
>>>>>>> >> >>> >> because this is very annoying.
>>>>>>> >> >>> >> Thanks.
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> James Strachan wrote:
>>>>>>> >> >>> >> > Apart from inactivity timeouts on the transport
>>>>>>> layer, we
>>>>>>> >> >>> generally
>>>>>>> >> >>> >> > don't close sessions. Are you sure nothing in your
>>>>>>> application
>>>>>>> >> >>> code is
>>>>>>> >> >>> >> > trying to close the session?
>>>>>>> >> >>> >> >
>>>>>>> >> >>> >> > On 7/13/06, Adrian Tarau <[EMAIL PROTECTED]>
>>>>>>> wrote:
>>>>>>> >> >>> >> >> I have this issue for some time with ActiveMQ 4.0
>>>>>>> and 4.0.1.
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >> I use vm transport and create one session used to
>>>>>>> produce and
>>>>>>> >> >>> consume
>>>>>>> >> >>> >> >> messages. Everything works fine, days in a row,
>>>>>>> until it
>>>>>>> >> start to
>>>>>>> >> >>> >> throw
>>>>>>> >> >>> >> >> exception that "Session is closed". There are any
>>>>>>> watch
>>>>>>> >> dogs that
>>>>>>> >> >>> >> close
>>>>>>> >> >>> >> >> sessions after a while, based on some criteria?
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >> I couldn't find any rule, when or why it happens.
>>>>>>> >> >>> >> >> Should I create the session all the time - I
>>>>>>> understood  is
>>>>>>> >> time
>>>>>>> >> >>> >> >> consuming and it should be safe to cache it.
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >> Thanks.
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >> *javax.jms.IllegalStateException: The Session is
>>>>>>> closed
>>>>>>> >> >>> >> >>     at
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >>
>>>>>>> >> >>>
>>>>>>> >>
>>>>>>> org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java
>>>>>>>
>>>>>>> :577)
>>>>>>> >>
>>>>>>> >> >>>
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >>     at
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >>
>>>>>>> >> >>>
>>>>>>> >>
>>>>>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java
>>>>>>>
>>>>>>> :799)*
>>>>>>> >>
>>>>>>> >> >>>
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >>
>>>>>>> >> >>> >> >
>>>>>>> >> >>> >> >
>>>>>>> >> >>> >>
>>>>>>> >> >>> >>
>>>>>>> >> >>> >
>>>>>>> >> >>> >
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >
>>>>>>> >>
>>>>>>> >>
>>>>>>> >
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>>
>





Reply via email to