Re: Strange wait time in my application - Tomcat 7.0.67

2016-10-03 Thread Martijn Bos
On 2016-10-03 07:56:34, Tullio Bettinazzi wrote:
> I've an application under tomcat.
> When only a one or two users works on it everithing is ok.
> When the number of users grows the application slows down.
> Is not a memory nor a cpu problem : using top I see the system resources 
> quite free.
> I don't see relevant garbage collection : heap size and permgen have correct 
> dimentions.
> No other applications are running on the system.
> I log more or less every relevant operation in my system (db query and so on) 
> and I see that every slowdown is concentered in a single operation.
> I mean all operations take "normal" time but one or two of them take 4 
> seconds more.
> The "slowing" operations are not the same in different executions, and theydo 
> not have a specific type (not only DB query, not only DB stored procedures, 
> not only.).
> It seems like if the thread is frozen for a fixed amount fo time (4 seconds 
> more or less) and then it restarts.
> I don't think it's a "queue" problem because otherwise the wait time would be 
> unperdictable and not a "fixed" 4 seconds time.
> I don't know any parameter impacting on that behaviour.
> I use Tomcat 7.0.32 with JVM 1.7.0.67 on a Linux server.
> Could someone suggest a solution for my problem or, at least, an 
> investigation strategy.
> Tks
> 
> Tullio
> 


The few examples that you mention are all database related (query/stored 
procedure).
Can it be that your connection pool (if used) combined with not closing 
connections is part of the problem.

I can imagine :
1)
Maybe you run out of conenctions, because connections are not properly closed.
And also the connection pool teminates connections when they are not used for 4 
seconds.
After 4 seconds the pool can recreate connections again.

or 2)
Maybe your connection pool has very limited connections.
With one or two users this limited number of connections in the pool will 
suffice.
If there are more users, the max. number of connections isn't enough.
The pool then has to wait for connections to become fee again.


(uhhI'm not an expert at all, but the above came immediately to my mind)

-- 
Met vriendelijke groet,

Martijn Bos
+31 6 39477001

(Public pgp-key : http://maboc.nl/pubkey.maboc.asc)


signature.asc
Description: Digital signature


Re: pgp-keys jsp taglibs

2016-04-20 Thread Martijn Bos
Hi Konstantin,

On 2016-04-20 01:25:25, Konstantin Kolinko wrote:
> 2016-04-19 23:00 GMT+03:00 Martijn Bos <mart...@maboc.nl>:
> > Hi all,
> >
> > (I post in this list since I downloaded from tomcat.apache.org. If there is 
> > a more appropriate list, off course I will try overthere)
> >
> > 1 - Downloaded the taglibs from 
> > http://tomcat.apache.org/download-taglibs.cgi#Standard-1.2.5
> 
> The "verify" word on above page links to a detailed instruction,
> https://www.apache.org/info/verification.html
> 
> > 2 - Downloaded the PGP signatures for the files
> > 2 - Downloaded KEYS. (The pgp public keys from the releaser(s)  of the 
> > files)
> > 3 - Imported the keys into gpg:
> > martijn@radijs:~/external_documents/Downloads$ gpg --import KEYS
> > gpg: sleutel A7A0233C: publieke sleutel "Jeremy Boynes 
> > <jboy...@apache.org>" geïmporteerd
> > gpg:   Totaal aantal verwerkt: 1
> > gpg: geïmporteerd: 1  (RSA: 1)
> > martijn@radijs:~/external_documents/Downloads$
> >
> > 4 - checked the signature of the downloaded files:
> > martijn@radijs:~/external_documents/Downloads$ gpg 
> > taglibs-standard-impl-1.2.5.jar.asc
> 
> The above verification command is wrong. You must specify 2 file
> arguments to gpg --verify.  See the verification.html page that I
> mentioned above.
> 

Thank you. I didn't read the page in the first place, because I thought I know 
it all :-(
(Once again I'm proven wrong)

However (call me stuborn), as far as I understand, in this case my way is not 
wrong per se.
The verify is with a detached signature. gpg can deduct (and find) the name of 
the file, which was signed, from the name of the detached signature.

Below I copy/pasted the same verification with 1 and with 2 arguments. To me 
the results looks the same

(If the signature and the file name do not match, then my approach will not 
work at all, ofcourse)

> > gpg: gegevens in `taglibs-standard-impl-1.2.5.jar' worden verondersteld 
> > ondertekend te zijn
> > gpg: Ondertekening gemaakt op di 10 mrt 2015 17:11:32 CET met RSA 
> > sleutel-ID A7A0233C
> > gpg: Goede handtekening van "Jeremy Boynes <jboy...@apache.org>"
> > gpg: Noot: Deze sleutel is vervallen!
> > Vingerafdruk van de primaire sleutel: 8B46 CA49 EF48 37B8 C7F2  92DA A54A 
> > D08E A7A0 233C
> >
> > It's in dutch :-)
> 
> Executing the below command before the above one should switch it to English.
> LANG=C
> 
> Maybe it also needs  export LANG, I do not remember.
> 

The moment I read your comment I thought:"Could've done that myself"

So ... now in enlish, so everyone can read it:


martijn@radijs:~/external_documents/Downloads$ export LANG=C

martijn@radijs:~/external_documents/Downloads$ gpg --verify 
taglibs-standard-compat-1.2.5.jar.asc   
gpg: assuming signed data in `taglibs-standard-compat-1.2.5.jar'

gpg: Signature made Tue Mar 10 17:11:38 2015 CET using RSA key ID A7A0233C  

gpg: Good signature from "Jeremy Boynes <jboy...@apache.org>"   

gpg: Note: This key has expired!

Primary key fingerprint: 8B46 CA49 EF48 37B8 C7F2  92DA A54A D08E A7A0 233C 

martijn@radijs:~/external_documents/Downloads$


And with the signed file as a second argument:

martijn@radijs:~/external_documents/Downloads$ gpg --verify 
taglibs-standard-compat-1.2.5.jar.asc taglibs-standard-compat-1.2.5.jar
gpg: Signature made Tue Mar 10 17:11:38 2015 CET using RSA key ID A7A0233C  

gpg: Good signature from "Jeremy Boynes <jboy...@apache.org>"   

gpg: Note: This key has expired!

 
Primary key fingerprint: 8B46 CA49 EF48 37B8 C7F2  92DA A54A D08E A7A0 233C 

 
martijn@radijs:~/external_documents/Downloads$

> > The message is telling me that the file is signed by key A7A0233C
> > (I never did sign this key myself..there is no trust..so gpg also tells me 
> > that)
> > Then gpg tells me "This key is expired"!!!
>

pgp-keys jsp taglibs

2016-04-19 Thread Martijn Bos
Hi all,

(I post in this list since I downloaded from tomcat.apache.org. If there is a 
more appropriate list, off course I will try overthere)

1 - Downloaded the taglibs from 
http://tomcat.apache.org/download-taglibs.cgi#Standard-1.2.5
2 - Downloaded the PGP signatures for the files
2 - Downloaded KEYS. (The pgp public keys from the releaser(s)  of the files)
3 - Imported the keys into gpg:
martijn@radijs:~/external_documents/Downloads$ gpg --import KEYS
gpg: sleutel A7A0233C: publieke sleutel "Jeremy Boynes <jboy...@apache.org>" 
geïmporteerd
gpg:   Totaal aantal verwerkt: 1
gpg: geïmporteerd: 1  (RSA: 1)
martijn@radijs:~/external_documents/Downloads$ 

4 - checked the signature of the downloaded files:
martijn@radijs:~/external_documents/Downloads$ gpg 
taglibs-standard-impl-1.2.5.jar.asc 
gpg: gegevens in `taglibs-standard-impl-1.2.5.jar' worden verondersteld 
ondertekend te zijn
gpg: Ondertekening gemaakt op di 10 mrt 2015 17:11:32 CET met RSA sleutel-ID 
A7A0233C
gpg: Goede handtekening van "Jeremy Boynes <jboy...@apache.org>"
gpg: Noot: Deze sleutel is vervallen!
Vingerafdruk van de primaire sleutel: 8B46 CA49 EF48 37B8 C7F2  92DA A54A D08E 
A7A0 233C

It's in dutch :-)
The message is telling me that the file is signed by key A7A0233C
(I never did sign this key myself..there is no trust..so gpg also tells me that)
Then gpg tells me "This key is expired"!!!

I'm not sure what to think of this...Is this a problem, or am I just to 
paranoid?

Can anyone shine his/her light on this.

-- 
Met vriendelijke groet,

Martijn Bos

(Public pgp-key : http://maboc.nl/pubkey.maboc.asc)


signature.asc
Description: Digital signature


Re: Today's Tomcat 9 HTTP/2 webinar is now available on YouTube

2015-11-25 Thread Martijn Bos
Mark,

On 2015-11-24 23:11:34, Mark Thomas wrote:
> All,
> 
> As promised, today's webinar "Apache Tomcat 9: HTTP/2 Quick Start" is
> now available on the Apache Tomcat YouTube channel:
> 
> https://www.youtube.com/channel/UCpqpJ0-G1lYfUBQ6_36Au_g
> 
> Mark
> 
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 

I think I gonna like these series.
For now I just quickly scanned through the video, but I will definetly watch 
the whole video soon.

Thanks for your efforts...keep 'm coming.

-- 
Met vriendelijke groet,

Martijn Bos
+31 6 39477001

(Public pgp-key : http://maboc.nl/pubkey.maboc.asc)


signature.asc
Description: Digital signature


Re: Intermittent failure while deploying war file on Tomcat 8.0.24

2015-09-11 Thread Martijn Bos
What happens if you do not use a symbolic link?
Are you deploying with the manager web-app?

Best regards,
Martijn



On 11-09-15 03:31, prashant gothi wrote:
> Tomcat version: 8.0.24
> OS RHEL 6.6
> 
> 
> Just one war file (ascws.war) is deployed under it. We are seeing
> intermittent failure while deploying war file, tomcat logs indicates (zip
> file is empty) exception is mentioned below.
> 
> We have verified file is correct (non zero), and only way to recover from
> error is manually delete ascws folder (from webapp folder) and restart
> tomcat.
> 
> FYI.. ascws.war is a symbolic link to other location.
> 
> ascws is a spring boot based application.
> 
> We are not able to figure out what is wrong, any help is much appreciated.
> 
> ==
> 10-Sep-2015 09:47:32.488 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployWAR Deploying web application
> archive /opt/apache-tomcat/webapps/ascws.war
> 10-Sep-2015 09:47:32.628 SEVERE [localhost-startStop-1]
> org.apache.catalina.core.ContainerBase.addChildInternal
> ContainerBase.addChild: start:
>  org.apache.catalina.LifecycleException: Failed to start component
> [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ascws]]
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
> at
> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768)
> at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.catalina.LifecycleException: Failed to start
> component [org.apache.catalina.webresources.StandardRoot@1690212]
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
> at
> org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4845)
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4975)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> ... 10 more
> Caused by: org.apache.catalina.LifecycleException: Failed to initialize
> component [org.apache.catalina.webresources.JarResourceSet@5dd3221b]
> at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
> at
> org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:699)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> ... 13 more
> Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException:
> zip file is empty
> at
> org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:96)
> at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
> ... 16 more
> Caused by: java.util.zip.ZipException: zip file is empty
> at java.util.zip.ZipFile.open(Native Method)
> at java.util.zip.ZipFile.(Unknown Source)
> at java.util.zip.ZipFile.(Unknown Source)
> at java.util.jar.JarFile.(Unknown Source)
> at java.util.jar.JarFile.(Unknown Source)
> at
> org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:88)
> ... 17 more
> 
> 10-Sep-2015 09:47:32.630 SEVERE [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployWAR Error deploying web
> application archive /opt/apache-tomcat/webapps/ascws.war
>  java.lang.IllegalStateException: ContainerBase.addChild: start:
> org.apache.catalina.LifecycleException: Failed to start component
> [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ascws]]
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:729)
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
> at
> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768)
> at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> 
> 10-Sep-2015 09:47:32.631 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployWAR Deployment of web
> application archive /opt/apache-tomcat/webapps/ascws.war has finished in
> 142 ms
> 
> 
> 
> ==
> 
> 
> 
> 
> 

cluster isn't deploying apps to all members

2015-09-10 Thread Martijn Bos
Hi all,

I think I "solved" it myself.

My problem was that when I deployed a webaap on one of the
cluster-members it didn't get deployed on the other member.
I did this with the manager web-application.

However when I drop a war-file in the watchDir of the farmWarDeployer it
gets deployed to the other member. (Apperantly by memory or so. Since I
do not see the war file appearing on in the tmpDir, deployDir or
watchDir on the other cluster member)

Can somone confirm that deploying through the manager-webapp will not
deploy to all the cluster members? Otherwise there is still something
wrong with my setup.

btw. I see that the farmWarDeployer is not completely stable. A few
times I noticed that the app is not deployed on the other member, trying
one more time, and it does succeed.

Anyway...thanks for listening,

Best regards,
Martijn



On 08-09-15 13:28, Martijn Bos wrote:
> Hi all,
> 
> I tried to create a cluster two hosts. At which I did not succeeded
> completely.
> 
> OS(both systems):
> SMP Debian 3.16.7
> 
> java (both systems):
> martijn@bloemkool:~/apache-tomcat-8.0.26/conf$ java -version
> java version "1.8.0_05"
> Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
> 
> Tomcat (both systems):
> Apache Tomcat/8.0.26
> 
> I installed 2 tomcat's
> One on host bloemkool.bos.
> The server.xml:
> -
> 
> 
> 
>   
>SSLEngine="on" />
>className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
>className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
>className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
> 
>   
>type="org.apache.catalina.UserDatabase"
>   description="User database that can be updated and saved"
>   factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
>   pathname="conf/tomcat-users.xml" />
>   
> 
>   
>  redirectPort="8443" />
>  jvmRoute="bloemkoolRoute">
>   
>  resourceName="UserDatabase"/>
>   
>autoDeploy="true">
>channelSendOptions="8">
>  expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
>className="org.apache.catalina.tribes.group.GroupChannel">
>  className="org.apache.catalina.tribes.membership.McastService"
> address="228.0.0.4"
> port="45564"
> frequency="500"
> dropTime="3000"/>
>  className="org.apache.catalina.tribes.transport.nio.NioReceiver"
>   address="192.168.2.123"
>   port="4000"
>   autoBind="100"
>   selectorTimeout="5000"
>   maxThreads="6"/>
>  className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
>className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
> 
>  className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
>  className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
> 
>   
>filter=""/>
>className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
>className="org.apache.catalina.ha.deploy.FarmWarDeployer"
> tempDir="/tmp/war-temp/"
> deployDir="${catalina.base}/webapps"
> watchDir="/tmp/war-listen/"
> watchEnabled="true"/>
>className="org.apache.catalina.ha.session.ClusterSessionListener"/>
> 
>  directory="logs"
>prefix="localhost_access_log" suffix=".txt"
>pattern="%h %l %u %t %r %s %b" />
>   
> 
>   
> 
> -
> 
> And one on broccoli.bos.
> The server.xml:
> -
> 
> 
>   
>SSLEngine="on" />
>className="org.apache.catalina.core.JreMemoryLeakPreven

Re: cluster isn't deploying apps to all members

2015-09-10 Thread Martijn Bos


On 10-09-15 17:43, Christopher Schultz wrote:
> Martijn,
> 
> On 9/10/15 7:39 AM, Martijn Bos wrote:
>> I think I "solved" it myself.
> 
>> My problem was that when I deployed a webaap on one of the 
>> cluster-members it didn't get deployed on the other member. I did
>> this with the manager web-application.
> 
>> However when I drop a war-file in the watchDir of the
>> farmWarDeployer it gets deployed to the other member. (Apperantly
>> by memory or so. Since I do not see the war file appearing on in
>> the tmpDir, deployDir or watchDir on the other cluster member)
> 
>> Can somone confirm that deploying through the manager-webapp will
>> not deploy to all the cluster members? Otherwise there is still
>> something wrong with my setup.
> 
> Yes, the manager web application has no knowledge of the existence of
> the cluster. You need to use FarmWebDeployer if you want to push the
> WAR file to multiple cluster members.
> 

Ah great. Then I'm not going insane afterall:-)


>> btw. I see that the farmWarDeployer is not completely stable. A
>> few times I noticed that the app is not deployed on the other
>> member, trying one more time, and it does succeed.
> 
> I believe the FWD doesn't get a huge amount of use in the wild. If
> you're willing to instrument the FWD and make suggestions for
> improvement, I'm sure we can get any bugs worked-out.
> 

That is actually very tempting. However my JAVA skills are moderate at
best, so I'm not to sure whether I should proceed in that direction.
On the other hand it doesn't hurt to have a look at the code, and
see what I can do.

Best Regards,
Martijn


> -chris
> 
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 
> 



signature.asc
Description: OpenPGP digital signature


WARNING [Tribes-Task-Receiver-3] org.apache.catalina.ha.session.ClusterSessionListener.messageReceived Context manager doesn't exist

2015-09-08 Thread Martijn Bos
Hi all,

I tried to create a cluster two hosts. At which I did not succeeded
completely.

OS(both systems):
SMP Debian 3.16.7

java (both systems):
martijn@bloemkool:~/apache-tomcat-8.0.26/conf$ java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

Tomcat (both systems):
Apache Tomcat/8.0.26

I installed 2 tomcat's
One on host bloemkool.bos.
The server.xml:
-



  
  
  
  
  

  

  

  


  

  
  
  

  



  




  
  
  
  
  


  

  

-

And one on broccoli.bos.
The server.xml:
-


  
  
  
  
  

  

  
  


  

  
  

  

  
  
  

  
  
  






  

  

  

-

I see some communication between the nodes, which indicates to me that a
lot is going OK.

However, if I deploy a webapp on one host, I'll get a warning on the
other host and the webapp will not be deployed:

Logging from the host on which I deploy:
-
08-Sep-2015 12:55:35.144 INFO [http-nio-8080-exec-9]
org.apache.catalina.startup.HostConfig.deployWAR Deploying web
application archive /home/martijn/apache-tomcat-8.0.26/webapps/hw2.war
08-Sep-2015 12:55:35.291 WARNING [http-nio-8080-exec-9]
org.apache.catalina.startup.SetContextPropertiesRule.begin
[SetContextPropertiesRule]{Context} Setting property 'antiJARLocking' to
'true' did not find a matching property.
08-Sep-2015 12:55:35.576 INFO [http-nio-8080-exec-9]
org.apache.catalina.ha.session.DeltaManager.startInternal Register
manager /hw2 to cluster element Host with name bloemkool.bos
08-Sep-2015 12:55:35.577 INFO [http-nio-8080-exec-9]
org.apache.catalina.ha.session.DeltaManager.startInternal Starting
clustering manager at /hw2
08-Sep-2015 12:55:35.736 INFO [http-nio-8080-exec-9]
org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions
Manager [/hw2], requesting session state from
org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 2,
124}:4000,{192, 168, 2, 124},4000, alive=210612, securePort=-1, UDP
Port=-1, id={-43 -36 -16 -70 71 113 74 112 -79 39 -47 -84 51 -124 72 -70
}, payload={}, command={}, domain={}, ]. This operation will timeout if
no session state has been received within 60 seconds.
08-Sep-2015 12:55:35.857 WARNING [http-nio-8080-exec-9]
org.apache.catalina.ha.session.DeltaManager.waitForSendAllSessions
Manager [/hw2]: No context manager send at 9/8/15 12:55 PM received in
260 ms.
08-Sep-2015 12:55:35.867 INFO [http-nio-8080-exec-9]
org.apache.catalina.startup.HostConfig.deployWAR Deployment of web
application archive /home/martijn/apache-tomcat-8.0.26/webapps/hw2.war
has finished in 722 ms
08-Sep-2015 12:55:35.867 INFO [http-nio-8080-exec-9]
org.apache.catalina.core.ApplicationContext.log HTMLManager: list:
Listing contexts for virtual host 'bloemkool.bos'
-

And logging from the host which fails:
-
08-Sep-2015 12:55:35.789 WARNING [Tribes-Task-Receiver-3]
org.apache.catalina.ha.session.ClusterSessionListener.messageReceived
Context manager doesn't exist:/hw2
-

I'm a bit out of options. Google did not came up with a solution (at
least not for me).

Can someone point me in the right direction (or is there a solution
available?).

Any pointers or advice are greatly appreciated.


Best Regards,
Martijn



signature.asc
Description: OpenPGP digital signature