Return-Path: Delivered-To: apmail-ws-wss4j-dev-archive@www.apache.org Received: (qmail 58014 invoked from network); 16 Nov 2005 09:16:23 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 16 Nov 2005 09:16:23 -0000 Received: (qmail 4338 invoked by uid 500); 16 Nov 2005 09:16:21 -0000 Delivered-To: apmail-ws-wss4j-dev-archive@ws.apache.org Received: (qmail 4278 invoked by uid 500); 16 Nov 2005 09:16:20 -0000 Mailing-List: contact wss4j-dev-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list wss4j-dev@ws.apache.org Received: (qmail 4266 invoked by uid 99); 16 Nov 2005 09:16:20 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Nov 2005 01:16:20 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: 194.138.37.39 is neither permitted nor denied by domain of werner.dittmann@siemens.com) Received: from [194.138.37.39] (HELO lizzard.sbs.de) (194.138.37.39) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Nov 2005 01:17:54 -0800 Received: from mail1.sbs.de (localhost [127.0.0.1]) by lizzard.sbs.de (8.12.6/8.12.6) with ESMTP id jAG9FTAD011277; Wed, 16 Nov 2005 10:15:29 +0100 Received: from fthw9xpa.ww002.siemens.net (fthw9xpa.ww002.siemens.net [157.163.133.222]) by mail1.sbs.de (8.12.6/8.12.6) with ESMTP id jAG9FSVK017094; Wed, 16 Nov 2005 10:15:28 +0100 Received: from MCHP7I5A.ww002.siemens.net ([139.25.131.136]) by fthw9xpa.ww002.siemens.net with Microsoft SMTPSVC(6.0.3790.0); Wed, 16 Nov 2005 10:15:28 +0100 X-MimeOLE: Produced By Microsoft Exchange V6.5.7226.0 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C5EA8E.48B7749D" Subject: AW: WSS4J and Kerberos signatures Date: Wed, 16 Nov 2005 10:15:26 +0100 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: WSS4J and Kerberos signatures Thread-Index: AcXqJcliu1coVGJuQLCnTVzGRp/wnwAA8k7gABRzUIAABHpioA== From: "Dittmann, Werner" To: "Laurence Brockman" , , X-OriginalArrivalTime: 16 Nov 2005 09:15:28.0208 (UTC) FILETIME=[4911B500:01C5EA8E] X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N ------_=_NextPart_001_01C5EA8E.48B7749D Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Laurence, it is a problem of BC together with JDK1.5. I tested the whole setup but without using BC for encryption the elements. If you are using the SVN version then you are able to switch off the usage of BC during encryption of an element. Plaese have a look at the attached WSEncryptBody, doEncryption() method. As a hack I forced to used the first provider that implements the required algo - usually this is the Sun provider as this is the first in the security provider list. I'll have a look at the BC mailing list archive to see if this is a known problem. Regards, Werner > -----Urspr=FCngliche Nachricht----- > Von: Dittmann, Werner=20 > Gesendet: Mittwoch, 16. November 2005 08:02 > An: Laurence Brockman; dims@apache.org; wss4j-dev@ws.apache.org > Betreff: AW: WSS4J and Kerberos signatures >=20 > Laurence, >=20 > I've the same problem here with jdk1.5, runing on a > XP box, no problems with jdk1.4 . I'm starting to investigate > the problem, but it seems to be burried somewhere in > the crypto code ... I'm not really sure what is wrong. >=20 > Regards, > Werner >=20 > > -----Urspr=FCngliche Nachricht----- > > Von: Laurence Brockman [mailto:laurence.brockman@sjrb.ca]=20 > > Gesendet: Dienstag, 15. November 2005 22:18 > > An: dims@apache.org; wss4j-dev@ws.apache.org > > Betreff: RE: WSS4J and Kerberos signatures > >=20 > > Ok, I've done all that and it is processing more tests then before, > > however, it is still failing with the following (Again, I am using > > jdk1.5 and have added the provider to java.security as well as > > downloading the unlimited strength crypto stuff from sun). > >=20 > > Any ideas would be awesome! > >=20 > > org.apache.ws.security.WSSecurityException: Cannot=20 > > encrypt/decrypt data; > > nested exception is:=20 > > org.apache.xml.security.encryption.XMLEncryptionException: pad > > block corrupted > > Original Exception was javax.crypto.BadPaddingException: pad block > > corrupted > > at > > org.apache.ws.security.processor.EncryptedKeyProcessor.decrypt > > DataRef(En > > cryptedKeyProcessor.java:388) > > at > > org.apache.ws.security.processor.EncryptedKeyProcessor.handleE > > ncryptedKe > > y(EncryptedKeyProcessor.java:313) > > at > > org.apache.ws.security.processor.EncryptedKeyProcessor.handleE > > ncryptedKe > > y(EncryptedKeyProcessor.java:81) > > at > > org.apache.ws.security.processor.EncryptedKeyProcessor.handleT > > oken(Encry > > ptedKeyProcessor.java:75) > > at > > org.apache.ws.security.WSSecurityEngine.processSecurityHeader( > > WSSecurity > > Engine.java:252) > > at > > org.apache.ws.security.WSSecurityEngine.processSecurityHeader( > > WSSecurity > > Engine.java:179) > > at > > org.apache.ws.security.WSSecurityEngine.processSecurityHeader( > > WSSecurity > > Engine.java:132) > > at wssec.TestWSSecurity2.verify(TestWSSecurity2.java:234) > > at > > wssec.TestWSSecurity2.testEncryptionDecryptionRSA15(TestWSSecu > > rity2.java > > :162) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess > > orImpl.jav > > a:39) > > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth > > odAccessor > > Impl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:585) > > at junit.framework.TestCase.runTest(TestCase.java:154) > > at junit.framework.TestCase.runBare(TestCase.java:127) > > at junit.framework.TestResult$1.protect(TestResult.java:106) > > at junit.framework.TestResult.runProtected(TestResult.java:124) > > at junit.framework.TestResult.run(TestResult.java:109) > > at junit.framework.TestCase.run(TestCase.java:118) > > at junit.framework.TestSuite.runTest(TestSuite.java:208) > > at junit.framework.TestSuite.run(TestSuite.java:203) > > at junit.framework.TestSuite.runTest(TestSuite.java:208) > > at junit.framework.TestSuite.run(TestSuite.java:203) > > at > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTest > > s(RemoteTe > > stRunner.java:478) > > at > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(Rem > > oteTestRun > > ner.java:344) > > at > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(Re > > moteTestRu > > nner.java:196) > > Caused by:=20 > org.apache.xml.security.encryption.XMLEncryptionException: > > pad block corrupted > > Original Exception was javax.crypto.BadPaddingException: pad block > > corrupted > > at > > org.apache.xml.security.encryption.XMLCipher.decryptToByteArra > > y(Unknown > > Source) > > at > > org.apache.xml.security.encryption.XMLCipher.decryptElement(Unknown > > Source) > > at > > org.apache.xml.security.encryption.XMLCipher.decryptElementCon > > tent(Unkno > > wn Source) > > at org.apache.xml.security.encryption.XMLCipher.doFinal(Unknown > > Source) > > at > > org.apache.ws.security.processor.EncryptedKeyProcessor.decrypt > > DataRef(En > > cryptedKeyProcessor.java:386) > > ... 25 more > >=20 > >=20 > > -----Original Message----- > > From: Davanum Srinivas [mailto:davanum@gmail.com]=20 > > Sent: November 15, 2005 1:47 PM > > To: Laurence Brockman; wss4j-dev@ws.apache.org > > Subject: Re: WSS4J and Kerberos signatures > >=20 > > http://www.bouncycastle.org/documentation.html > > http://www.bouncycastle.org/specifications.html#install > >=20 > > scroll down a bit on the second link and look for java.security > >=20 > > -- dims > >=20 > > PS: Please post directly to the list. So that others may=20 > > answer as well > > :) > >=20 > > On 11/15/05, Laurence Brockman wrote: > > > Thanks for such a quick reply! I think the problem is that=20 > > I am using > > > jdk1.5... Does the bouncycastle.org site have information about > > > installing the bouncycastle provider or is there any other=20 > > sites I can > > > get documentation about this? > > > > > > Thanks again! > > > Laurence > > > > > > -----Original Message----- > > > From: Davanum Srinivas [mailto:davanum@gmail.com] > > > Sent: November 15, 2005 1:40 PM > > > To: Laurence Brockman; wss4j-dev@ws.apache.org > > > Subject: Re: WSS4J and Kerberos signatures > > > > > > All the code needed is in the svn itself. you should not need any > > > additional jars. just get the stuff from SVN. make sure=20 > you have the > > > strong crypto stuff installed in your JDK (check the=20 > > download site for > > > the jdk and it is available as a separate download) and=20 > > then run "ant > > > test". Are u using JDK1.4? (better to use that version, there is > > > additional steps for jdk1.5 - namely installing the boucnycastle > > > provider) > > > > > > NOTE: don't use the maven build :) > > > > > > thanks, > > > dims > > > > > > On 11/15/05, Laurence Brockman wrote: > > > > Sounds good. > > > > > > > > Quick question... I've checked out the latest source=20 > from SVN and > > I'm > > > > trying to run the Ant JUnit tests and they keep failing.=20 > > When I run > > > the > > > > JUnit tests through eclipse directly they are throwing a=20 > > connection > > > > denied exception. I have installed Axis 1.2.1 here but=20 > I have not > > > > deployed any test web services so even if I start that up=20 > > they still > > > > fail with service not found exceptions. Is there a way to easily > > > either > > > > test this stuff without deploying the test web services=20 > > or to bypass > > > > these tests? I've also installed maven and tried to compile that > > way, > > > > but it is failing as well. > > > > > > > > I also noticed in the project.xml file that you have=20 > excluded the > > > > wssec/PackageTests.java and the=20 > interop/PackageTests.java. Is that > > > > because of the above mentioned errors? > > > > > > > > After looking through the source code, I believe what I=20 > would want > > to > > > do > > > > would be to create Kerberos token processor and action=20 > classes and > > add > > > a > > > > case into both getAction and getProcessor to point to these new > > > classes. > > > > > > > > Sorry for the barrage of questions. > > > > > > > > Thanks, > > > > Laurence > > > > > > > > -----Original Message----- > > > > From: Davanum Srinivas [mailto:davanum@gmail.com] > > > > Sent: November 14, 2005 3:02 PM > > > > To: Laurence Brockman > > > > Cc: wss4j-dev@ws.apache.org > > > > Subject: Re: WSS4J and Kerberos signatures > > > > > > > > Please see what is being done for SAML and use that as=20 > a template > > for > > > > Kerberos. > > > > > > > > thanks, > > > > dims > > > > > > > > On 11/14/05, Laurence Brockman=20 > wrote: > > > > > Correct me if I'm wrong here, but this is what I'm thinking: > > > > > > > > > > After grabbing the source from SVN and looking at the > > documentation, > > > I > > > > > believe the right place for me to start would be to extend the > > > > > org.apache.ws.axis.security class to handle the Kerberos > > > requirements > > > > > specified in the OASIS document. > > > > > > > > > > Forgive me for so many questions, but I'm new to=20 > > Axis/WSS4J and I > > > want > > > > > to make sure that I'm heading down the right path. > > > > > > > > > > Specifically, what we are looking to implement is just the > > > > > authentication portion of Kerberos and not the=20 > > encryption portion > > > (We > > > > > want to authenticate incoming SOAP requests against a=20 > KDC). Down > > the > > > > > road we will likely look at the encryption portion, but=20 > > that won't > > > > > likely be for a few months at least. > > > > > > > > > > Thanks again!! > > > > > Laurence > > > > > > > > > > -----Original Message----- > > > > > From: Davanum Srinivas [mailto:davanum@gmail.com] > > > > > Sent: November 11, 2005 8:18 PM > > > > > To: Laurence Brockman > > > > > Cc: wss4j-dev@ws.apache.org > > > > > Subject: Re: WSS4J and Kerberos signatures > > > > > > > > > > Laurence, > > > > > > > > > > I believe you start with taking a look at the Kerberos Token > > Profile > > > > > at the OASIS WSS TC web site: > > > > > > > > > > = http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=3Dwss > > > > > > > > > > There's lots of refactoring in the latest SVN, which=20 > > makes it easy > > > to > > > > > plugin a new token profile. So please get the latest=20 > > SVN code and > > > > > start asking more questions :) > > > > > > > > > > thanks, > > > > > dims > > > > > > > > > > On 11/10/05, Laurence Brockman=20 > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > Hello, > > > > > > > > > > > > > > > > > > > > > > > > Sorry if this is a FAQ but I have been looking for=20 > answers to > > this > > > > > high and > > > > > > low and have not seen this on the list. > > > > > > > > > > > > > > > > > > > > > > > > We are going to try and use Kerberos to=20 > authenticate users on > > our > > > > SOAP > > > > > > server. What we envision is having the client send=20 > > down the SOAP > > > > > request > > > > > > with a service ticket from a KDC. The server (Axis=20 > using WSS4J > > on > > > > > Tomcat) > > > > > > would then authenticate this user against said KDC. After > > briefly > > > > > looking at > > > > > > the documentation within the WSS4J code I think=20 > what we would > > want > > > > to > > > > > do is > > > > > > extend the WSDoAllHandler class (From the > > > > > > org.apache.axis.security.handler package). Is this the > > > > > > right direction to be going in? Has anybody looked at=20 > > this? I'm > > > > > relatively > > > > > > new to Axis/WSS4J and some guidance would be awesome! > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > Laurence > > > > > > > > > > > > > > > > > > > > > > > > Laurence Brockman > > > > > > Server Specialist, Shaw Operations Centre > > > > > > Shaw Communications Inc. > > > > > > Phone : (403) 303-4805 > > > > > > E-mail : laurence.brockman@sjrb.ca > > > > > > > > > > > > > > > > > > > > > > > > ACCOUNTABLE BALANCE CUSTOMER FOCUSED INTEGRITY > > LOYALTY > > > > > > POSITIVE, CAN DO ATTITUDE TEAM PLAYER > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Davanum Srinivas : http://wso2.com/blogs/ > > > > > > > > > > > > >=20 > >=20 > --------------------------------------------------------------------- > > > > > To unsubscribe, e-mail: wss4j-dev-unsubscribe@ws.apache.org > > > > > For additional commands, e-mail: wss4j-dev-help@ws.apache.org > > > > > > > > > > > > > > > > > > > > > > -- > > > > Davanum Srinivas : http://wso2.com/blogs/ > > > > > > > > > > > > > -- > > > Davanum Srinivas : http://wso2.com/blogs/ > > > > >=20 > >=20 > > -- > > Davanum Srinivas : http://wso2.com/blogs/ > >=20 > >=20 > --------------------------------------------------------------------- > > To unsubscribe, e-mail: wss4j-dev-unsubscribe@ws.apache.org > > For additional commands, e-mail: wss4j-dev-help@ws.apache.org > >=20 > >=20 >=20 > --------------------------------------------------------------------- > To unsubscribe, e-mail: wss4j-dev-unsubscribe@ws.apache.org > For additional commands, e-mail: wss4j-dev-help@ws.apache.org >=20 >=20 ------_=_NextPart_001_01C5EA8E.48B7749D Content-Type: application/octet-stream; name="WSEncryptBody.java" Content-Transfer-Encoding: base64 Content-Description: WSEncryptBody.java Content-Disposition: attachment; filename="WSEncryptBody.java" LyoNCiAqIENvcHlyaWdodCAgMjAwMy0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlv bi4NCiAqDQogKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu MCAodGhlICJMaWNlbnNlIik7DQogKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KICogIFlvdSBtYXkgb2J0YWluIGEgY29w eSBvZiB0aGUgTGljZW5zZSBhdA0KICoNCiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp Y2Vuc2VzL0xJQ0VOU0UtMi4wDQogKg0KICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCiAqICBkaXN0cmlidXRlZCB1 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICog IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw cmVzcyBvciBpbXBsaWVkLg0KICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCiAqICBsaW1pdGF0aW9ucyB1bmRlciB0 aGUgTGljZW5zZS4NCiAqDQogKi8NCg0KcGFja2FnZSBvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1l c3NhZ2U7DQoNCmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7DQppbXBvcnQg b3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsNCmltcG9ydCBvcmcuYXBhY2hl LndzLnNlY3VyaXR5LlNPQVBDb25zdGFudHM7DQppbXBvcnQgb3JnLmFwYWNoZS53cy5zZWN1cml0 eS5XU0NvbnN0YW50czsNCmltcG9ydCBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LldTRW5jcnlwdGlv blBhcnQ7DQppbXBvcnQgb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1NlY3VyaXR5RXhjZXB0aW9u Ow0KaW1wb3J0IG9yZy5hcGFjaGUud3Muc2VjdXJpdHkuY29tcG9uZW50cy5jcnlwdG8uQ3J5cHRv Ow0KaW1wb3J0IG9yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS50b2tlbi5CaW5hcnlTZWN1 cml0eTsNCmltcG9ydCBvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UudG9rZW4uUmVmZXJl bmNlOw0KaW1wb3J0IG9yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS50b2tlbi5TZWN1cml0 eVRva2VuUmVmZXJlbmNlOw0KaW1wb3J0IG9yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS50 b2tlbi5YNTA5U2VjdXJpdHk7DQppbXBvcnQgb3JnLmFwYWNoZS53cy5zZWN1cml0eS51dGlsLldT U2VjdXJpdHlVdGlsOw0KaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlY3VyaXR5LmVuY3J5cHRpb24u RW5jcnlwdGVkRGF0YTsNCmltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZWN1cml0eS5lbmNyeXB0aW9u LlhNTENpcGhlcjsNCmltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZWN1cml0eS5lbmNyeXB0aW9uLlhN TEVuY3J5cHRpb25FeGNlcHRpb247DQppbXBvcnQgb3JnLmFwYWNoZS54bWwuc2VjdXJpdHkua2V5 cy5LZXlJbmZvOw0KaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlY3VyaXR5LmtleXMuY29udGVudC5Y NTA5RGF0YTsNCmltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZWN1cml0eS5rZXlzLmNvbnRlbnQueDUw OS5YTUxYNTA5SXNzdWVyU2VyaWFsOw0KaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KaW1w b3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQppbXBvcnQgb3JnLnczYy5kb20uVGV4dDsNCg0KaW1w b3J0IGphdmF4LmNyeXB0by5CYWRQYWRkaW5nRXhjZXB0aW9uOw0KaW1wb3J0IGphdmF4LmNyeXB0 by5DaXBoZXI7DQppbXBvcnQgamF2YXguY3J5cHRvLklsbGVnYWxCbG9ja1NpemVFeGNlcHRpb247 DQppbXBvcnQgamF2YXguY3J5cHRvLktleUdlbmVyYXRvcjsNCmltcG9ydCBqYXZheC5jcnlwdG8u U2VjcmV0S2V5Ow0KaW1wb3J0IGphdmEuc2VjdXJpdHkuSW52YWxpZEtleUV4Y2VwdGlvbjsNCmlt cG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsNCmltcG9ydCBqYXZh LnNlY3VyaXR5Lk5vU3VjaFByb3ZpZGVyRXhjZXB0aW9uOw0KaW1wb3J0IGphdmEuc2VjdXJpdHku Y2VydC5YNTA5Q2VydGlmaWNhdGU7DQppbXBvcnQgamF2YS51dGlsLlZlY3RvcjsNCg0KLyoqDQog KiBFbmNyeXB0cyBhIFNPQVAgYm9keSBpbnNpZGUgYSBTT0FQIGVudmVsb3BlIGFjY29yZGluZyB0 byBXUyBTcGVjaWZpY2F0aW9uLA0KICogWDUwOSBwcm9maWxlLCBhbmQgYWRkcyB0aGUgZW5jcnlw dGlvbiBkYXRhLg0KICogPHAvPg0KICoNCiAqIEBhdXRob3IgRGF2YW51bSBTcmluaXZhcyAoZGlt c0B5YWhvby5jb20pLg0KICogQGF1dGhvciBXZXJuZXIgRGl0dG1hbm4gKFdlcm5lci5EaXR0bWFu bkBzaWVtZW5zLmNvbSkuDQogKi8NCnB1YmxpYyBjbGFzcyBXU0VuY3J5cHRCb2R5IGV4dGVuZHMg V1NCYXNlTWVzc2FnZSB7DQogICAgcHJpdmF0ZSBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3Rvcnku Z2V0TG9nKFdTRW5jcnlwdEJvZHkuY2xhc3MuZ2V0TmFtZSgpKTsNCiAgICBwcml2YXRlIHN0YXRp YyBMb2cgdGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKCJvcmcuYXBhY2hlLndzLnNlY3VyaXR5LlRJ TUUiKTsNCg0KICAgIHByb3RlY3RlZCBTdHJpbmcgc3ltRW5jQWxnbyA9IFdTQ29uc3RhbnRzLkFF U18xMjg7DQogICAgcHJvdGVjdGVkIFN0cmluZyBrZXlFbmNBbGdvID0gV1NDb25zdGFudHMuS0VZ VFJBTlNQT1JUX1JTQTE1Ow0KICAgIHByb3RlY3RlZCBTdHJpbmcgZW5jQ2Fub25BbGdvID0gbnVs bDsNCiAgICBwcm90ZWN0ZWQgYnl0ZVtdIGVtYmVkZGVkS2V5ID0gbnVsbDsNCiAgICBwcm90ZWN0 ZWQgU3RyaW5nIGVtYmVkZGVkS2V5TmFtZSA9IG51bGw7DQogICAgcHJvdGVjdGVkIFg1MDlDZXJ0 aWZpY2F0ZSB1c2VUaGlzQ2VydCA9IG51bGw7DQoNCiAgICAvKioNCiAgICAgKiBTeW1tZXRyaWMg a2V5IHVzZWQgaW4gdGhlIEVuY3J5dHBlZEtleS4NCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgU2Vj cmV0S2V5IHN5bW1ldHJpY0tleSA9IG51bGw7DQoNCiAgICAvKioNCiAgICAgKiBTeW1tZXRyaWMg a2V5IHRoYXQncyBhY3R1YWxseSB1c2VkLg0KICAgICAqLw0KICAgIHByb3RlY3RlZCBTZWNyZXRL ZXkgZW5jcnlwdGlvbktleSA9IG51bGw7DQoNCiAgICAvKioNCiAgICAgKiBQYXJlbnQgbm9kZSB0 byB3aGljaCB0aGUgRW5jcnlwdGVkS2V5RWxlbWVudCBzaG91bGQgYmUgYWRkZWQuDQogICAgICov DQogICAgcHJvdGVjdGVkIEVsZW1lbnQgcGFyZW50Tm9kZSA9IG51bGw7DQoNCiAgICAvKioNCiAg ICAgKiBTZWN1cml0eVRva2VuUmVmZXJlbmNlIHRvIGJlIGluc2VydGVkIGludG8gRW5jcnlwdGVk RGF0YS9rZXlJbmZvIGVsZW1lbnQuDQogICAgICovDQogICAgcHJvdGVjdGVkIFNlY3VyaXR5VG9r ZW5SZWZlcmVuY2Ugc2VjdXJpdHlUb2tlblJlZmVyZW5jZSA9IG51bGw7DQoNCiAgICAvKioNCiAg ICAgKiBDb25zdHJ1Y3Rvci4NCiAgICAgKi8NCiAgICBwdWJsaWMgV1NFbmNyeXB0Qm9keSgpIHsN CiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDb25zdHJ1Y3Rvci4NCiAgICAgKiA8cC8+DQogICAg ICoNCiAgICAgKiBAcGFyYW0gYWN0b3IgVGhlIGFjdG9yIG5hbWUgb2YgdGhlIDxjb2RlPndzc2U6 U2VjdXJpdHk8L2NvZGU+DQogICAgICogICAgICAgICAgICAgIGhlYWRlcg0KICAgICAqLw0KICAg IHB1YmxpYyBXU0VuY3J5cHRCb2R5KFN0cmluZyBhY3Rvcikgew0KICAgICAgICBzdXBlcihhY3Rv cik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29uc3RydWN0b3IuDQogICAgICogPHAvPg0K ICAgICAqDQogICAgICogQHBhcmFtIGFjdG9yIFRoZSBhY3RvciBuYW1lIG9mIHRoZSA8Y29kZT53 c3NlOlNlY3VyaXR5PC9jb2RlPiBoZWFkZXINCiAgICAgKiBAcGFyYW0gbXUgICAgU2V0IDxjb2Rl Pm11c3RVbmRlcnN0YW5kPC9jb2RlPiB0byB0cnVlIG9yIGZhbHNlDQogICAgICovDQogICAgcHVi bGljIFdTRW5jcnlwdEJvZHkoU3RyaW5nIGFjdG9yLCBib29sZWFuIG11KSB7DQogICAgICAgIHN1 cGVyKGFjdG9yLCBtdSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0cyB0aGUga2V5IHRv IHVzZSBkdXJpbmcgZW1iZWRkZWQgZW5jcnlwdGlvbi4NCiAgICAgKiA8cC8+DQogICAgICoNCiAg ICAgKiBAcGFyYW0ga2V5IHRvIHVzZSBkdXJpbmcgZW5jcnlwdGlvbi4gVGhlIGtleSBtdXN0IGZp dCB0aGUNCiAgICAgKiAgICAgICAgICAgIHNlbGVjdGVkIHN5bW1ldHJpY2FsIGVuY3J5cHRpb24g YWxnb3JpdGhtDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0S2V5KGJ5dGVbXSBrZXkpIHsN CiAgICAgICAgdGhpcy5lbWJlZGRlZEtleSA9IGtleTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAg KiBTZXRzIHRoZSBhbGdvcml0aG0gdG8gZW5jb2RlIHRoZSBzeW1tZXRyaWMga2V5Lg0KICAgICAq IDxwLz4NCiAgICAgKiBEZWZhdWx0IGlzIHRoZSA8Y29kZT5XU0NvbnN0YW50cy5LRVlUUkFOU1BP UlRfUlNBMTU8L2NvZGU+DQogICAgICogYWxnb3JpdGhtLg0KICAgICAqDQogICAgICogQHBhcmFt IGtleUVuYyBzcGVjaWZpZXMgdGhlIGtleSBlbmNvZGluZyBhbGdvcml0aG0uDQogICAgICogQHNl ZSBXU0NvbnN0YW50cyNLRVlUUkFOU1BPUlRfUlNBMTUNCiAgICAgKiBAc2VlIFdTQ29uc3RhbnRz I0tFWVRSQU5TUE9SVF9SU0FPRVANCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRLZXlFbmMo U3RyaW5nIGtleUVuYykgew0KICAgICAgICBrZXlFbmNBbGdvID0ga2V5RW5jOw0KICAgIH0NCg0K ICAgIC8qKg0KICAgICAqIFNldCB0aGUgdXNlciBuYW1lIHRvIGdldCB0aGUgZW5jcnlwdGlvbiBj ZXJ0aWZpY2F0ZS4gVGhlIHB1YmxpYw0KICAgICAqIGtleSBvZiB0aGlzIGNlcnRpZmljYXRlIGlz IHVzZWQsIHRodXMgbm8gcGFzc3dvcmQgbmVjZXNzYXJ5Lg0KICAgICAqIFRoZSB1c2VyIG5hbWUg aXMgYSBrZXlzdG9yZSBhbGlhcyB1c3VhbGx5Lg0KICAgICAqIDxwLz4NCiAgICAgKg0KICAgICAq IEBwYXJhbSB1c2VyDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0VXNlckluZm8oU3RyaW5n IHVzZXIpIHsNCiAgICAgICAgdGhpcy51c2VyID0gdXNlcjsNCiAgICB9DQoNCiAgICAvKioNCiAg ICAgKiBTZXQgdGhlIGtleSBuYW1lIGZvciBFTUJFRERFRF9LRVlOQU1FDQogICAgICoNCiAgICAg KiBAcGFyYW0gZW1iZWRkZWRLZXlOYW1lDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0RW1i ZWRkZWRLZXlOYW1lKFN0cmluZyBlbWJlZGRlZEtleU5hbWUpIHsNCiAgICAgICAgdGhpcy5lbWJl ZGRlZEtleU5hbWUgPSBlbWJlZGRlZEtleU5hbWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog U2V0IHRoZSBYNTA5IENlcnRpZmljYXRlIHRvIHVzZSBmb3IgZW5jcnlwdGlvbi4NCiAgICAgKiBJ ZiB0aGlzIGlzIHNldCA8Yj5hbmQ8L2I+IHRoZSBrZXkgaWRlbnRpZmllciBpcyBzZXQNCiAgICAg KiB0byA8Y29kZT5EaXJlY3RSZWZlcmVuY2U8L2NvZGU+IHRoZW4gdXNlIHRoaXMgY2VydGlmaWNh dGUNCiAgICAgKiB0byBnZXQgdGhlIHB1YmxpYyBrZXkgZm9yIGVuY3J5cHRpb24uDQogICAgICoN CiAgICAgKiBAcGFyYW0gY2VydCBpcyB0aGUgWDUwOSBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIGVu Y3J5cHRpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRVc2VUaGlzQ2VydChYNTA5Q2Vy dGlmaWNhdGUgY2VydCkgew0KICAgICAgICB1c2VUaGlzQ2VydCA9IGNlcnQ7DQogICAgfQ0KDQog ICAgLyoqDQogICAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBh bGdvcml0aG0gdG8gdXNlLg0KICAgICAqIDxwLz4NCiAgICAgKiBUaGlzIGVuY3J5cHRpb24gYWxv Z3JpdGhtIGlzIHVzZWQgdG8gZW5jcnlwdA0KICAgICAqIHRoZSBkYXRhLCBpLmUuIHRoZSBTT0FQ IEJvZHkuIElmIHRoZSBhbGdvcml0aG0NCiAgICAgKiBpcyBub3Qgc2V0IHRoZW4gVHJpcGxlIERF UyBpcyB1c2VkLiBSZWZlciB0bw0KICAgICAqIFdTQ29uc3RhbnRzIHdoaWNoIGFsZ29yaXRobXMg YXJlIHN1cHBvcnRlZC4NCiAgICAgKiA8cC8+DQogICAgICoNCiAgICAgKiBAcGFyYW0gYWxnbyBJ cyB0aGUgbmFtZSBvZiB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0NCiAgICAgKiBAc2VlIFdTQ29u c3RhbnRzI1RSSVBMRV9ERVMNCiAgICAgKiBAc2VlIFdTQ29uc3RhbnRzI0FFU18xMjgNCiAgICAg KiBAc2VlIFdTQ29uc3RhbnRzI0FFU18xOTINCiAgICAgKiBAc2VlIFdTQ29uc3RhbnRzI0FFU18y NTYNCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRTeW1tZXRyaWNFbmNBbGdvcml0aG0oU3Ry aW5nIGFsZ28pIHsNCiAgICAgICAgc3ltRW5jQWxnbyA9IGFsZ287DQogICAgfQ0KDQogICAgLyoq DQogICAgICogU2V0IHRoZSBuYW1lIG9mIGFuIG9wdGlvbmFsIGNhbm9uaWNhbGl6YXRpb24gYWxn b3JpdGhtIHRvIHVzZQ0KICAgICAqIGJlZm9yZSBlbmNyeXB0aW9uLg0KICAgICAqIDxwLz4NCiAg ICAgKiBUaGlzIGMxNG4gYWxvZ3JpdGhtIGlzIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBkYXRhIGJl Zm9yZQ0KICAgICAqIGVuY3J5cHRpb24sIGkuZS4gdGhlIFNPQVAgQm9keS4gSWYgdGhlIGFsZ29y aXRobQ0KICAgICAqIGlzIG5vdCBzZXQgdGhlbiBhIHN0YW5kYXJkIHNlcmlhbGl6YXRpb24gaXMg dXNlZCAocHJvdmlkZWQNCiAgICAgKiBieSBYTUxDaXBoZXIsIHVzdWFsbHkgYSBYTUxTZXJpYWxp emVyIGFjY29yZGluZyB0byBET00gMw0KICAgICAqIHNwZWNpZmljYXRpb24pLg0KICAgICAqIDxw Lz4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBhbGdvIElzIHRoZSBuYW1lIG9mIHRoZSBjYW5vbmlj YWxpemF0aW9uIGFsZ29yaXRobQ0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldEVuY0Nhbm9u aWNhbGl6YXRpb24oU3RyaW5nIGFsZ28pIHsNCiAgICAgICAgZW5jQ2Fub25BbGdvID0gYWxnbzsN CiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXQgdGhlIG5hbWUgb2Ygc3ltbWV0cmljIGVuY3J5 cHRpb24gYWxnb3JpdGhtIHRvIHVzZS4NCiAgICAgKiA8cC8+DQogICAgICogVGhlIG5hbWUgb2Yg dGhlIGVuY3J5cHRpb24gYWxvZ3JpdGhtIHRvIGVuY3J5cHQNCiAgICAgKiB0aGUgZGF0YSwgaS5l LiB0aGUgU09BUCBCb2R5LiBSZWZlciB0bw0KICAgICAqIFdTQ29uc3RhbnRzIHdoaWNoIGFsZ29y aXRobXMgYXJlIHN1cHBvcnRlZC4NCiAgICAgKiA8cC8+DQogICAgICoNCiAgICAgKiBAcmV0dXJu IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3ltbWV0cmljIGVuY3J5cHRpb24N CiAgICAgKiAgICAgICAgIGFsZ29yaXRobQ0KICAgICAqIEBzZWUgV1NDb25zdGFudHMjVFJJUExF X0RFUw0KICAgICAqIEBzZWUgV1NDb25zdGFudHMjQUVTXzEyOA0KICAgICAqIEBzZWUgV1NDb25z dGFudHMjQUVTXzE5Mg0KICAgICAqIEBzZWUgV1NDb25zdGFudHMjQUVTXzI1Ng0KICAgICAqLw0K ICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3ltbWV0cmljRW5jQWxnb3JpdGhtKCkgew0KICAgICAgICBy ZXR1cm4gc3ltRW5jQWxnbzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBCdWlsZHMgdGhlIFNP QVAgZW52ZWxvcGUgd2l0aCBlbmNyeXB0ZWQgQm9keSBhbmQgYWRkcyBlbmNyeXB0ZWQga2V5Lg0K ICAgICAqIDxwLz4NCiAgICAgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHNldmVyYWwgc3RlcHM6 DQogICAgICogPHAvPg0KICAgICAqIDx1bD4NCiAgICAgKiA8bGk+ICAgIEZpcnN0IHN0ZXA6IHNl dCB0aGUgZW5jb2RpbmcgbmFtZXNwYWNlIGluIHRoZSBTT0FQOkVudmVsb3BlIDwvbGk+DQogICAg ICogPGxpPiAgICBTZWNvbmQgc3RlcDogZ2VuZXJhdGUgYSBzeW1tZXRyaWMga2V5IChzZXNzaW9u IGtleSkgZm9yDQogICAgICogdGhlIHNlbGVjdGVkIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsb2dy aXRobSwgYW5kIHNldCB0aGUgY2lwaGVyDQogICAgICogaW50byBlbmNyeXB0aW9uIG1vZGUuDQog ICAgICogPC9saT4NCiAgICAgKiA8bGk+IFRoaXJkIHN0ZXA6IGdldCB0aGUgZGF0YSB0byBlbmNy eXB0Lg0KICAgICAqIFdlIGFsd2F5cyBlbmNyeXB0IHRoZSBjb21wbGV0ZSBmaXJzdCBjaGlsZCBl bGVtZW50IG9mDQogICAgICogdGhlIFNPQVAgQm9keSBlbGVtZW50DQogICAgICogPC9saT4NCiAg ICAgKiA8bGk+ICAgIEZvcnRoIHN0ZXA6IGVuY3J5cHQgZGF0YSwgYW5kIHNldCBuZWNjZXNzYXJ5 IGF0dHJpYnV0ZXMgaW4NCiAgICAgKiA8Y29kZT54ZW5jOkVuY3J5cHRlZERhdGE8L2NvZGU+DQog ICAgICogPC9saT4NCiAgICAgKiA8bGk+ICAgIEZpZnRoIHN0ZXA6IGdldCB0aGUgY2VydGlmaWNh dGUgdGhhdCBjb250YWlucyB0aGUgcHVibGljIGtleSBmb3INCiAgICAgKiB0aGUgICAgcHVibGlj IGtleSBhbGdvcml0aG0gdGhhdCB3aWxsIGVuY3J5cHQgdGhlIGdlbmVyYXRlZCBzeW1tZXRyaWMN CiAgICAgKiAoc2Vzc2lvbikga2V5LiBVcCB0byBub3cgd2Ugc3VwcG9ydCBSU0EgMS01IGFzIHB1 YmxpYyBrZXkNCiAgICAgKiBhbGdvcml0aG0uDQogICAgICogPC9saT4NCiAgICAgKiA8bGk+ICAg IFNpeHRoIHN0ZXA6IHNldHVwIHRoZSA8Y29kZT53c3NlOlNlY3VyaXR5PC9jb2RlPiBoZWFkZXIg YmxvY2sgPC9saT4NCiAgICAgKiA8L3VsPg0KICAgICAqDQogICAgICogQHBhcmFtIGRvYyAgICB0 aGUgU09BUCBlbnZlbG9wZSBhcyA8Y29kZT5Eb2N1bWVudDwvY29kZT4gd2l0aA0KICAgICAqICAg ICAgICAgICAgICAgcGxhaW50ZXh0IEJvZHkNCiAgICAgKiBAcGFyYW0gY3J5cHRvIGFuIGluc3Rh bmNlIG9mIHRoZSBDcnlwdG8gQVBJIHRvIGhhbmRsZSBrZXlzdG9yZSBhbmQNCiAgICAgKiAgICAg ICAgICAgICAgIENlcnRpZmljYXRlcw0KICAgICAqIEByZXR1cm4gdGhlIFNPQVAgZW52ZWxvcGUg d2l0aCBlbmNyeXB0ZWQgQm9keSBhcyA8Y29kZT5Eb2N1bWVudA0KICAgICAqICAgICAgICAgPC9j b2RlPg0KICAgICAqIEB0aHJvd3MgV1NTZWN1cml0eUV4Y2VwdGlvbg0KICAgICAqLw0KICAgIHB1 YmxpYyBEb2N1bWVudCBidWlsZChEb2N1bWVudCBkb2MsIENyeXB0byBjcnlwdG8pIHRocm93cyBX U1NlY3VyaXR5RXhjZXB0aW9uIHsNCiAgICAgICAgZG9EZWJ1ZyA9IGxvZy5pc0RlYnVnRW5hYmxl ZCgpOw0KDQogICAgICAgIGlmIChrZXlJZGVudGlmaWVyVHlwZSA9PSBXU0NvbnN0YW50cy5FTUJF RERFRF9LRVlOQU1FIHx8DQogICAgICAgICAgICBrZXlJZGVudGlmaWVyVHlwZSA9PSBXU0NvbnN0 YW50cy5FTUJFRF9TRUNVUklUWV9UT0tFTl9SRUYpIHsNCiAgICAgICAgICAgIHJldHVybiBidWls ZEVtYmVkZGVkKGRvYywgY3J5cHRvKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGxvbmcgdDAgPSAw LCB0MSA9IDAsIHQyID0gMCwgdDMgPSAwOw0KICAgICAgICBpZiAodGxvZy5pc0RlYnVnRW5hYmxl ZCgpKSB7DQogICAgICAgICAgICB0MCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KICAg ICAgICB9DQogICAgICAgIGlmIChkb0RlYnVnKSB7DQogICAgICAgICAgICBsb2cuZGVidWcoIkJl Z2lubmluZyBFbmNyeXB0aW9uLi4uIik7DQogICAgICAgIH0NCg0KICAgICAgICAvKg0KICAgICAg ICAgKiBTZWNvbmQgc3RlcDogZ2VuZXJhdGUgYSBzeW1tZXRyaWMga2V5IChzZXNzaW9uIGtleSkg Zm9yDQogICAgICAgICAqIHRoaXMgYWxvZ3JpdGhtLCBhbmQgc2V0IHRoZSBjaXBoZXIgaW50byBl bmNyeXB0aW9uIG1vZGUuDQogICAgICAgICAqLw0KICAgICAgICAvLyBUaGlzIHZhcmlhYmxlIGlz IG1hZGUgYSBjbGFzc3MgYXR0cmlidXRlIDo6IFNlY3JldEtleSBzeW1tZXRyaWNLZXkgPSBudWxs Ow0KICAgICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSB0aGlzLnN5bW1ldHJpY0tleTsNCiAgICAg ICAgaWYgKGVuY3J5cHRpb25LZXkgPT0gbnVsbCkgew0KICAgICAgICAgICAgS2V5R2VuZXJhdG9y IGtleUdlbiA9IGdldEtleUdlbmVyYXRvcigpOw0KICAgICAgICAgICAgdGhpcy5lbmNyeXB0aW9u S2V5ID0ga2V5R2VuLmdlbmVyYXRlS2V5KCk7DQogICAgICAgIH0NCiAgICAgICAgVmVjdG9yIGVu Y0RhdGFSZWZzID0gZG9FbmNyeXB0aW9uKGRvYywgdGhpcy5lbmNyeXB0aW9uS2V5KTsNCg0KICAg ICAgICBpZiAodGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7DQogICAgICAgICAgICB0MSA9IFN5c3Rl bS5jdXJyZW50VGltZU1pbGxpcygpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAg ICogQXQgdGhpcyBwb2ludCBkYXRhIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBzeW1tZXRyaWMga2V5 IGFuZCBjYW4gYmUNCiAgICAgICAgICogcmVmZXJlbmNlZCB2aWEgdGhlIGFib3ZlIElkDQogICAg ICAgICAqLw0KDQogICAgICAgIC8qDQogICAgICAgICAqIEZpZnRoIHN0ZXA6IGdldCB0aGUgY2Vy dGlmaWNhdGUgdGhhdCBjb250YWlucyB0aGUgcHVibGljIGtleSBmb3IgdGhlDQogICAgICAgICAq IHB1YmxpYyBrZXkgYWxnb3JpdGhtIHRoYXQgd2lsbCBlbmNyeXB0DQogICAgICAgICAqIHRoZSBn ZW5lcmF0ZWQgc3ltbWV0cmljIChzZXNzaW9uKSBrZXkuDQogICAgICAgICAqIFVwIHRvIG5vdyB3 ZSBzdXBwb3J0IFJTQSAxLTUgYXMgcHVibGljIGtleSBhbGdvcml0aG0NCiAgICAgICAgICovDQog ICAgICAgIFg1MDlDZXJ0aWZpY2F0ZSByZW1vdGVDZXJ0ID0gbnVsbDsNCiAgICAgICAgaWYgKHVz ZVRoaXNDZXJ0ICE9IG51bGwpIHsNCiAgICAgICAgICAgIHJlbW90ZUNlcnQgPSB1c2VUaGlzQ2Vy dDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIFg1MDlDZXJ0aWZpY2F0ZVtdIGNlcnRz ID0gY3J5cHRvLmdldENlcnRpZmljYXRlcyh1c2VyKTsNCiAgICAgICAgICAgIGlmIChjZXJ0cyA9 PSBudWxsIHx8IGNlcnRzLmxlbmd0aCA8PSAwKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3 IFdTU2VjdXJpdHlFeGNlcHRpb24oV1NTZWN1cml0eUV4Y2VwdGlvbi5GQUlMVVJFLA0KICAgICAg ICAgICAgICAgICAgICAgICAgImludmFsaWRYNTA5RGF0YSIsDQogICAgICAgICAgICAgICAgICAg ICAgICBuZXcgT2JqZWN0W117ImZvciBFbmNyeXB0aW9uIn0pOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgcmVtb3RlQ2VydCA9IGNlcnRzWzBdOw0KICAgICAgICB9DQogICAgICAgIFN0cmlu ZyBjZXJ0VXJpID0gIkVuY0NlcnRJZC0iICsgcmVtb3RlQ2VydC5oYXNoQ29kZSgpOw0KICAgICAg ICBpZiAodGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7DQogICAgICAgICAgICB0MiA9IFN5c3RlbS5j dXJyZW50VGltZU1pbGxpcygpOw0KICAgICAgICB9DQogICAgICAgIENpcGhlciBjaXBoZXIgPSBX U1NlY3VyaXR5VXRpbC5nZXRDaXBoZXJJbnN0YW5jZShrZXlFbmNBbGdvLCB3c3NDb25maWcuZ2V0 SmNlUHJvdmlkZXJJZCgpKTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNpcGhlci5pbml0 KENpcGhlci5FTkNSWVBUX01PREUsIHJlbW90ZUNlcnQpOw0KICAgICAgICB9IGNhdGNoIChJbnZh bGlkS2V5RXhjZXB0aW9uIGUpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBXU1NlY3VyaXR5RXhj ZXB0aW9uKFdTU2VjdXJpdHlFeGNlcHRpb24uRkFJTEVEX0VOQ19ERUMsIG51bGwsIG51bGwsIGUp Ow0KICAgICAgICB9DQogICAgICAgIGJ5dGVbXSBlbmNLZXkgPSB0aGlzLmVuY3J5cHRpb25LZXku Z2V0RW5jb2RlZCgpOw0KICAgICAgICBpZiAoZG9EZWJ1Zykgew0KICAgICAgICAgICAgbG9nLmRl YnVnKCJjaXBoZXIgYmxrc2l6ZTogIg0KICAgICAgICAgICAgICAgICAgICArIGNpcGhlci5nZXRC bG9ja1NpemUoKQ0KICAgICAgICAgICAgICAgICAgICArICIsIHN5bW0ga2V5IGxlbmd0aDogIg0K ICAgICAgICAgICAgICAgICAgICArIGVuY0tleS5sZW5ndGgpOw0KICAgICAgICB9DQogICAgICAg IGlmIChjaXBoZXIuZ2V0QmxvY2tTaXplKCkgPCBlbmNLZXkubGVuZ3RoKSB7DQogICAgICAgICAg ICB0aHJvdyBuZXcgV1NTZWN1cml0eUV4Y2VwdGlvbihXU1NlY3VyaXR5RXhjZXB0aW9uLkZBSUxV UkUsDQogICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZEtleVRyYW5zcCIsDQogICAgICAg ICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsicHVibGljIGtleSBhbGdvcml0aG0gdG9vIHdlYWsg dG8gZW5jcnlwdCBzeW1tZXRyaWMga2V5In0pOw0KICAgICAgICB9DQogICAgICAgIGJ5dGVbXSBl bmNyeXB0ZWRLZXkgPSBudWxsOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgZW5jcnlwdGVk S2V5ID0gY2lwaGVyLmRvRmluYWwoZW5jS2V5KTsNCiAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0 YXRlRXhjZXB0aW9uIGUxKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgV1NTZWN1cml0eUV4Y2Vw dGlvbihXU1NlY3VyaXR5RXhjZXB0aW9uLkZBSUxFRF9FTkNfREVDLCBudWxsLCBudWxsLCBlMSk7 DQogICAgICAgIH0gY2F0Y2ggKElsbGVnYWxCbG9ja1NpemVFeGNlcHRpb24gZTEpIHsNCiAgICAg ICAgICAgIHRocm93IG5ldyBXU1NlY3VyaXR5RXhjZXB0aW9uKFdTU2VjdXJpdHlFeGNlcHRpb24u RkFJTEVEX0VOQ19ERUMsIG51bGwsIG51bGwsIGUxKTsNCiAgICAgICAgfSBjYXRjaCAoQmFkUGFk ZGluZ0V4Y2VwdGlvbiBlMSkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFdTU2VjdXJpdHlFeGNl cHRpb24oV1NTZWN1cml0eUV4Y2VwdGlvbi5GQUlMRURfRU5DX0RFQywgbnVsbCwgbnVsbCwgZTEp Ow0KICAgICAgICB9DQogICAgICAgIFRleHQga2V5VGV4dCA9DQogICAgICAgICAgICAgICAgV1NT ZWN1cml0eVV0aWwuY3JlYXRlQmFzZTY0RW5jb2RlZFRleHROb2RlKGRvYywgZW5jcnlwdGVkS2V5 KTsNCg0KICAgICAgICAvKg0KICAgICAgICAgKiBOb3cgd2UgbmVlZCB0byBzZXR1cCB0aGUgd3Nz ZTpTZWN1cml0eSBoZWFkZXIgYmxvY2sNCiAgICAgICAgICogMSkgZ2V0IChvciBjcmVhdGUpIHRo ZSB3c3NlOlNlY3VyaXR5IGhlYWRlciBibG9jaw0KICAgICAgICAgKiAyKSBjcmVhdGUgdGhlIHhl bmM6RW5jcnlwdGVkS2V5IGVsZW1lbnQuIFRoaXMgYWxyZWFkeSBpbmNsdWRlcw0KICAgICAgICAg KiAgICB0aGUgRXhjcnB5dGlvbk1ldGhvZCBlbGVtZW50IHdpdGggYXR0cmlidXRlcyB0aGF0IGRl ZmluZQ0KICAgICAgICAgKiAgICB0aGUga2V5IHRyYW5zcG9ydCBlbmNyeXB0aW9uIGFsZ29yaXRo bQ0KICAgICAgICAgKiAzKSBHZW5lcmF0ZSBkczpLZXlJbmZvIGVsZW1lbnQsIHRoaXMgd3JhcHMg dGhlIHdzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZQ0KICAgICAgICAgKiA0KSBzZXQgdXAgdGhl IFNlY3VyaXR5VG9rZW5SZWZlcmVuY2UsIGVpdGhlciB3aXRoIEtleUlkZW50aWZpZXIgb3INCiAg ICAgICAgICogICAgWDUwOUlzc3VlclNlcmlhbC4gVGhlIFNlY1Rva2VuUmVmIGRlZmluZXMgaG93 IHRvIGdldCB0byBzZWN1cml0eQ0KICAgICAgICAgKiAgICB0b2tlbiB1c2VkIHRvIGVuY3J5cHQg dGhlIHNlc3Npb24ga2V5ICh0aGlzIHNlY3VyaXR5IHRva2VuIHVzdWFsbHkNCiAgICAgICAgICog ICAgY29udGFpbnMgYSBwdWJsaWMga2V5KQ0KICAgICAgICAgKiA1KSBDcmVhdGUgdGhlIENpcGhl clZhbHVlIGVsZW1lbnQgc3RydWN0dXJlIGFuZCBpbnNlcnQgdGhlIGVuY3J5cHRlZA0KICAgICAg ICAgKiAgICBzZXNzaW9uIGtleQ0KICAgICAgICAgKiA2KSBUaGUgbGFzdCBzdGVwIHNldHMgdXAg dGhlIHJlZmVyZW5jZSBsaXN0IHRoYXQgcGludHMgdG8gdGhlIGVuY3J5cHRlZA0KICAgICAgICAg KiAgICBkYXRhIHRoYXQgd2FzIGVuY3J5cHRlZCB3aXRoIHRoaXMgZW5jcnlwdGVkIHNlc3Npb24g a2V5IDotKQ0KICAgICAgICAgKi8NCiAgICAgICAgRWxlbWVudCB3c3NlU2VjdXJpdHkgPSBpbnNl cnRTZWN1cml0eUhlYWRlcihkb2MpOw0KICAgICAgICBFbGVtZW50IHhlbmNFbmNyeXB0ZWRLZXkg PSBjcmVhdGVFbnJjeXB0ZWRLZXkoZG9jLCBrZXlFbmNBbGdvKTsNCiAgICAgICAgaWYgKHBhcmVu dE5vZGUgPT0gbnVsbCkgew0KICAgICAgICAgICAgV1NTZWN1cml0eVV0aWwucHJlcGVuZENoaWxk RWxlbWVudChkb2MsDQogICAgICAgICAgICAgICAgICAgIHdzc2VTZWN1cml0eSwNCiAgICAgICAg ICAgICAgICAgICAgeGVuY0VuY3J5cHRlZEtleSwNCiAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7 DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBXU1NlY3VyaXR5VXRpbC5wcmVwZW5kQ2hp bGRFbGVtZW50KGRvYywNCiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSwNCiAgICAgICAg ICAgICAgICAgICAgeGVuY0VuY3J5cHRlZEtleSwNCiAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7 DQogICAgICAgIH0NCiAgICAgICAgU2VjdXJpdHlUb2tlblJlZmVyZW5jZSBzZWNUb2tlbiA9IG5l dyBTZWN1cml0eVRva2VuUmVmZXJlbmNlKGRvYyk7DQoNCiAgICAgICAgc3dpdGNoIChrZXlJZGVu dGlmaWVyVHlwZSkgew0KICAgICAgICAgICAgY2FzZSBXU0NvbnN0YW50cy5YNTA5X0tFWV9JREVO VElGSUVSOg0KICAgICAgICAgICAgICAgIHNlY1Rva2VuLnNldEtleUlkZW50aWZpZXIocmVtb3Rl Q2VydCk7DQogICAgICAgICAgICAgICAgLy8gYnVpbGQgYSBrZXkgaWQgY2xhc3M/Pw0KICAgICAg ICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlIFdTQ29uc3RhbnRzLlNLSV9LRVlf SURFTlRJRklFUjoNCiAgICAgICAgICAgICAgICBzZWNUb2tlbi5zZXRLZXlJZGVudGlmaWVyU0tJ KHJlbW90ZUNlcnQsIGNyeXB0byk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg ICAgICAgDQogICAgICAgICAgICBjYXNlIFdTQ29uc3RhbnRzLlRIVU1CUFJJTlRfSURFTlRJRklF UjoNCiAgICAgICAgICAgICAgICBzZWNUb2tlbi5zZXRLZXlJZGVudGlmaWVyVGh1bWIocmVtb3Rl Q2VydCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgV1NDb25z dGFudHMuSVNTVUVSX1NFUklBTDoNCiAgICAgICAgICAgICAgICBYTUxYNTA5SXNzdWVyU2VyaWFs IGRhdGEgPSBuZXcgWE1MWDUwOUlzc3VlclNlcmlhbChkb2MsIHJlbW90ZUNlcnQpOw0KICAgICAg ICAgICAgICAgIFg1MDlEYXRhIHg1MDlEYXRhID0gbmV3IFg1MDlEYXRhKGRvYyk7IA0KICAgICAg ICAgICAgICAgIHg1MDlEYXRhLmFkZChkYXRhKTsNCiAgICAgICAgICAgICAgICBzZWNUb2tlbi5z ZXRYNTA5SXNzdWVyU2VyaWFsKHg1MDlEYXRhKTsgICAgICAgICAgICAgICAgDQogICAgICAgICAg ICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgV1NDb25zdGFudHMuQlNUX0RJUkVDVF9S RUZFUkVOQ0U6DQogICAgICAgICAgICAgICAgUmVmZXJlbmNlIHJlZiA9IG5ldyBSZWZlcmVuY2Uo ZG9jKTsNCiAgICAgICAgICAgICAgICByZWYuc2V0VVJJKCIjIiArIGNlcnRVcmkpOw0KICAgICAg ICAgICAgICAgIEJpbmFyeVNlY3VyaXR5IGJzdFRva2VuID0gbnVsbDsNCiAgICAgICAgICAgICAg ICBic3RUb2tlbiA9IG5ldyBYNTA5U2VjdXJpdHkoZG9jKTsNCiAgICAgICAgICAgICAgICAoKFg1 MDlTZWN1cml0eSkgYnN0VG9rZW4pLnNldFg1MDlDZXJ0aWZpY2F0ZShyZW1vdGVDZXJ0KTsNCiAg ICAgICAgICAgICAgICBic3RUb2tlbi5zZXRJRChjZXJ0VXJpKTsNCiAgICAgICAgICAgICAgICBy ZWYuc2V0VmFsdWVUeXBlKGJzdFRva2VuLmdldFZhbHVlVHlwZSgpKTsNCiAgICAgICAgICAgICAg ICBzZWNUb2tlbi5zZXRSZWZlcmVuY2UocmVmKTsNCiAgICAgICAgICAgICAgICBXU1NlY3VyaXR5 VXRpbC5wcmVwZW5kQ2hpbGRFbGVtZW50KGRvYywNCiAgICAgICAgICAgICAgICAgICAgICAgIHdz c2VTZWN1cml0eSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGJzdFRva2VuLmdldEVsZW1lbnQo KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsNCiAgICAgICAgICAgICAgICBicmVh azsNCg0KICAgICAgICAgICAgZGVmYXVsdCA6DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdT U2VjdXJpdHlFeGNlcHRpb24oV1NTZWN1cml0eUV4Y2VwdGlvbi5GQUlMVVJFLA0KICAgICAgICAg ICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkS2V5SWQiKTsNCiAgICAgICAgfQ0KICAgICAgICBL ZXlJbmZvIGtleUluZm8gPSBuZXcgS2V5SW5mbyhkb2MpOw0KICAgICAgICBrZXlJbmZvLmFkZFVu a25vd25FbGVtZW50KHNlY1Rva2VuLmdldEVsZW1lbnQoKSk7DQogICAgICAgIFdTU2VjdXJpdHlV dGlsLmFwcGVuZENoaWxkRWxlbWVudCgNCiAgICAgICAgICAgICAgICBkb2MsIHhlbmNFbmNyeXB0 ZWRLZXksIGtleUluZm8uZ2V0RWxlbWVudCgpKTsNCg0KICAgICAgICBFbGVtZW50IHhlbmNDaXBo ZXJWYWx1ZSA9IGNyZWF0ZUNpcGhlclZhbHVlKGRvYywgeGVuY0VuY3J5cHRlZEtleSk7DQogICAg ICAgIHhlbmNDaXBoZXJWYWx1ZS5hcHBlbmRDaGlsZChrZXlUZXh0KTsNCiAgICAgICAgY3JlYXRl RGF0YVJlZkxpc3QoZG9jLCB4ZW5jRW5jcnlwdGVkS2V5LCBlbmNEYXRhUmVmcyk7DQogICAgICAg IGxvZy5kZWJ1ZygiRW5jcnlwdGlvbiBjb21wbGV0ZS4iKTsNCiAgICAgICAgaWYgKHRsb2cuaXNE ZWJ1Z0VuYWJsZWQoKSkgew0KICAgICAgICAgICAgdDMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxs aXMoKTsNCiAgICAgICAgICAgIHRsb2cuZGVidWcoIkVuY3J5cHRCb2R5OiBzeW1tLWVuYyAiDQog ICAgICAgICAgICAgICAgICAgICsgKHQxIC0gdDApDQogICAgICAgICAgICAgICAgICAgICsgIiBj ZXJ0ICINCiAgICAgICAgICAgICAgICAgICAgKyAodDIgLSB0MSkNCiAgICAgICAgICAgICAgICAg ICAgKyAiIGtleS1lbmNyeXB0ICINCiAgICAgICAgICAgICAgICAgICAgKyAodDMgLSB0MikpOw0K ICAgICAgICB9DQogICAgICAgIHJldHVybiBkb2M7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBWZWN0 b3IgZG9FbmNyeXB0aW9uKERvY3VtZW50IGRvYywgU2VjcmV0S2V5IGVuY3J5cHRpb25LZXkpDQog ICAgICAgIHRocm93cyBXU1NlY3VyaXR5RXhjZXB0aW9uIHsNCiAgICAgICAgcmV0dXJuIGRvRW5j cnlwdGlvbihkb2MsIGVuY3J5cHRpb25LZXksIG51bGwpOw0KICAgIH0NCg0KICAgIHByaXZhdGUg VmVjdG9yIGRvRW5jcnlwdGlvbihEb2N1bWVudCBkb2MsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNlY3JldEtleSBlbmNyeXB0aW9uS2V5LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBLZXlJbmZvIGtleUluZm8pDQogICAgICAgICAgICB0aHJvd3MgV1NTZWN1cml0 eUV4Y2VwdGlvbiB7DQogICAgICAgIC8qDQogICAgICAgICAqIEZpcnN0IHN0ZXA6IHNldCB0aGUg ZW5jcnlwdGlvbiBlbmNvZGluZyBuYW1lc3BhY2UgaW4gdGhlIFNPQVA6RW52ZWxvcGUNCiAgICAg ICAgICovDQogICAgICAgIEVsZW1lbnQgZW52ZWxvcGUgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50 KCk7DQogICAgICAgIGVudmVsb3BlLnNldEF0dHJpYnV0ZU5TKFdTQ29uc3RhbnRzLlhNTE5TX05T LA0KICAgICAgICAgICAgICAgICJ4bWxuczoiICsgV1NDb25zdGFudHMuRU5DX1BSRUZJWCwNCiAg ICAgICAgICAgICAgICBXU0NvbnN0YW50cy5FTkNfTlMpOw0KDQogICAgICAgIFNPQVBDb25zdGFu dHMgc29hcENvbnN0YW50cyA9IFdTU2VjdXJpdHlVdGlsLmdldFNPQVBDb25zdGFudHMoZW52ZWxv cGUpOw0KDQogICAgICAgIFhNTENpcGhlciB4bWxDaXBoZXIgPSBudWxsOw0KICAgICAgICB0cnkg ew0KLy8gICAgICAgICAgICBTdHJpbmcgcHJvdmlkZXIgPSB3c3NDb25maWcuZ2V0SmNlUHJvdmlk ZXJJZCgpOw0KICAgICAgICAgICAgU3RyaW5nIHByb3ZpZGVyID0gbnVsbDsNCiAgICAgICAgICAg IGlmIChwcm92aWRlciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgeG1sQ2lwaGVyID0gWE1M Q2lwaGVyLmdldEluc3RhbmNlKHN5bUVuY0FsZ28pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgZWxzZSB7DQogICAgICAgICAgICAgICAgeG1sQ2lwaGVyID0gWE1MQ2lwaGVyLmdldFByb3Zp ZGVySW5zdGFuY2Uoc3ltRW5jQWxnbywgcHJvdmlkZXIpOw0KICAgICAgICAgICAgfQ0KICAgICAg ICB9IGNhdGNoIChYTUxFbmNyeXB0aW9uRXhjZXB0aW9uIGUzKSB7DQogICAgICAgICAgICB0aHJv dyBuZXcgV1NTZWN1cml0eUV4Y2VwdGlvbihXU1NlY3VyaXR5RXhjZXB0aW9uLlVOU1VQUE9SVEVE X0FMR09SSVRITSwgbnVsbCwgbnVsbCwgZTMpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gaWYg bm8gZW5jcnlwdGlvbiBwYXJ0cyBzZXQgLSB1c2UgdGhlIGRlZmF1bHQNCiAgICAgICAgaWYgKHBh cnRzID09IG51bGwpIHsNCiAgICAgICAgICAgIHBhcnRzID0gbmV3IFZlY3RvcigpOw0KICAgICAg ICAgICAgV1NFbmNyeXB0aW9uUGFydCBlbmNQID0NCiAgICAgICAgICAgICAgICAgICAgbmV3IFdT RW5jcnlwdGlvblBhcnQoc29hcENvbnN0YW50cy5nZXRCb2R5UU5hbWUoKS5nZXRMb2NhbFBhcnQo KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2FwQ29uc3RhbnRzLmdldEVudmVsb3Bl VVJJKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQiKTsNCiAgICAgICAg ICAgIHBhcnRzLmFkZChlbmNQKTsNCiAgICAgICAgfQ0KDQogICAgICAgIFZlY3RvciBlbmNEYXRh UmVmcyA9IG5ldyBWZWN0b3IoKTsNCg0KICAgICAgICBmb3IgKGludCBwYXJ0ID0gMDsgcGFydCA8 IHBhcnRzLnNpemUoKTsgcGFydCsrKSB7DQogICAgICAgICAgICBXU0VuY3J5cHRpb25QYXJ0IGVu Y1BhcnQgPSAoV1NFbmNyeXB0aW9uUGFydCkgcGFydHMuZ2V0KHBhcnQpOw0KICAgICAgICAgICAg U3RyaW5nIGVsZW1OYW1lID0gZW5jUGFydC5nZXROYW1lKCk7DQogICAgICAgICAgICBTdHJpbmcg bm1TcGFjZSA9IGVuY1BhcnQuZ2V0TmFtZXNwYWNlKCk7DQogICAgICAgICAgICBTdHJpbmcgbW9k aWZpZXIgPSBlbmNQYXJ0LmdldEVuY01vZGlmaWVyKCk7DQogICAgICAgICAgICAvKg0KICAgICAg ICAgICAgICogVGhpcmQgc3RlcDogZ2V0IHRoZSBkYXRhIHRvIGVuY3J5cHQuDQogICAgICAgICAg ICAgKi8NCiAgICAgICAgICAgIEVsZW1lbnQgYm9keSA9DQogICAgICAgICAgICAgICAgICAgIChF bGVtZW50KSBXU1NlY3VyaXR5VXRpbC5maW5kRWxlbWVudChlbnZlbG9wZSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbGVtTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu bVNwYWNlKTsNCiAgICAgICAgICAgIGlmIChib2R5ID09IG51bGwpIHsNCiAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgV1NTZWN1cml0eUV4Y2VwdGlvbihXU1NlY3VyaXR5RXhjZXB0aW9uLkZBSUxV UkUsDQogICAgICAgICAgICAgICAgICAgICAgICAibm9FbmNFbGVtZW50IiwNCiAgICAgICAgICAg ICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsieyIgKyBubVNwYWNlICsgIn0iICsgZWxlbU5hbWV9 KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgYm9vbGVhbiBjb250ZW50ID0gbW9kaWZp ZXIuZXF1YWxzKCJDb250ZW50IikgPyB0cnVlIDogZmFsc2U7DQogICAgICAgICAgICBTdHJpbmcg eGVuY0VuY3J5cHRlZERhdGFJZCA9ICJFbmNEYXRhSWQtIiArIGJvZHkuaGFzaENvZGUoKTsNCg0K ICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAqIEZvcnRoIHN0ZXA6IGVuY3J5cHQgZGF0YSwg YW5kIHNldCBuZWNjZXNzYXJ5IGF0dHJpYnV0ZXMgaW4NCiAgICAgICAgICAgICAqIHhlbmM6RW5j cnlwdGVkRGF0YQ0KICAgICAgICAgICAgICovDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAg ICAgICAgIHhtbENpcGhlci5pbml0KFhNTENpcGhlci5FTkNSWVBUX01PREUsIGVuY3J5cHRpb25L ZXkpOw0KICAgICAgICAgICAgICAgIEVuY3J5cHRlZERhdGEgZW5jRGF0YSA9IHhtbENpcGhlci5n ZXRFbmNyeXB0ZWREYXRhKCk7DQogICAgICAgICAgICAgICAgZW5jRGF0YS5zZXRJZCh4ZW5jRW5j cnlwdGVkRGF0YUlkKTsNCiAgICAgICAgICAgICAgICBlbmNEYXRhLnNldEtleUluZm8oa2V5SW5m byk7DQogICAgICAgICAgICAgICAgeG1sQ2lwaGVyLmRvRmluYWwoZG9jLCBib2R5LCBjb250ZW50 KTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMikgew0KICAgICAgICAgICAgICAg IHRocm93IG5ldyBXU1NlY3VyaXR5RXhjZXB0aW9uKFdTU2VjdXJpdHlFeGNlcHRpb24uRkFJTEVE X0VOQ19ERUMsIG51bGwsIG51bGwsIGUyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVu Y0RhdGFSZWZzLmFkZChuZXcgU3RyaW5nKCIjIiArIHhlbmNFbmNyeXB0ZWREYXRhSWQpKTsNCiAg ICAgICAgfQ0KICAgICAgICByZXR1cm4gZW5jRGF0YVJlZnM7DQogICAgfQ0KDQogICAgcHJpdmF0 ZSBEb2N1bWVudCBidWlsZEVtYmVkZGVkKERvY3VtZW50IGRvYywgQ3J5cHRvIGNyeXB0bykNCiAg ICAgICAgICAgIHRocm93cyBXU1NlY3VyaXR5RXhjZXB0aW9uIHsNCiAgICAgICAgZG9EZWJ1ZyA9 IGxvZy5pc0RlYnVnRW5hYmxlZCgpOw0KDQogICAgICAgIGxvbmcgdDAgPSAwLCB0MSA9IDA7DQog ICAgICAgIGlmICh0bG9nLmlzRGVidWdFbmFibGVkKCkpIHsNCiAgICAgICAgICAgIHQwID0gU3lz dGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvRGVidWcp IHsNCiAgICAgICAgICAgIGxvZy5kZWJ1ZygiQmVnaW5uaW5nIEVuY3J5cHRpb24gZW1iZWRkZWQu Li4iKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChlbWJlZGRlZEtleSA9PSBudWxsKSB7DQog ICAgICAgICAgICB0aHJvdyBuZXcgV1NTZWN1cml0eUV4Y2VwdGlvbihXU1NlY3VyaXR5RXhjZXB0 aW9uLkZBSUxVUkUsDQogICAgICAgICAgICAgICAgICAgICJub0tleVN1cHBsaWVkIik7DQogICAg ICAgIH0NCg0KICAgICAgICAvKg0KICAgICAgICAgKiBTZWNvbmQgc3RlcDogZ2VuZXJhdGUgYSBz eW1tZXRyaWMga2V5IGZyb20gdGhlIHNwZWNpZmllZA0KICAgICAgICAgKiBrZXkgKHBhc3N3b3Jk KSBmb3IgdGhpcyBhbG9ncml0aG0sIGFuZCBzZXQgdGhlIGNpcGhlciBpbnRvDQogICAgICAgICAq IGVuY3J5cHRpb24gbW9kZS4NCiAgICAgICAgICovDQogICAgICAgIHRoaXMuZW5jcnlwdGlvbktl eSA9IHRoaXMuc3ltbWV0cmljS2V5Ow0KICAgICAgICBpZiAodGhpcy5lbmNyeXB0aW9uS2V5ID09 IG51bGwpIHsNCiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IFdTU2VjdXJpdHlVdGls LnByZXBhcmVTZWNyZXRLZXkoDQogICAgICAgICAgICAgICAgICAgIHN5bUVuY0FsZ28sDQogICAg ICAgICAgICAgICAgICAgIGVtYmVkZGVkS2V5KTsNCiAgICAgICAgfQ0KDQogICAgICAgIEtleUlu Zm8ga2V5SW5mbyA9IG51bGw7DQogICAgICAgIGlmICh0aGlzLmtleUlkZW50aWZpZXJUeXBlID09 IFdTQ29uc3RhbnRzLkVNQkVEREVEX0tFWU5BTUUpIHsNCiAgICAgICAgICAgIGtleUluZm8gPSBu ZXcgS2V5SW5mbyhkb2MpOw0KICAgICAgICAgICAga2V5SW5mby5hZGRLZXlOYW1lKGVtYmVkZGVk S2V5TmFtZSA9PSBudWxsID8gdXNlciA6IGVtYmVkZGVkS2V5TmFtZSk7DQogICAgICAgIH0gZWxz ZSBpZiAodGhpcy5rZXlJZGVudGlmaWVyVHlwZSA9PSBXU0NvbnN0YW50cy5FTUJFRF9TRUNVUklU WV9UT0tFTl9SRUYpIHsNCiAgICAgICAgICAgIC8qIFRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRv IGVtYmVkIGEgPHdzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZT4NCiAgICAgICAgICAgICogaW50 byBrZXlJbmZvIGVsZW1lbnQuDQogICAgICAgICAgICAqIElmIHdlIG5lZWQgdGhpcyBmdW5jdGlv bmFsaXR5LCB0aGlzLnNlY1JlZiBNVVNUIGJlIHNldCBiZWZvcmUNCiAgICAgICAgICAgICogY2Fs bGluZyB0aGUgYnVpbGQoZG9jLCBjcnlwdG8pIG1ldGhvZC4NCiAgICAgICAgICAgICogU28gaWYg c2VjUmVmIGlzIG51bGwgdGhlbiB0aHJvdyBhbiBleGNlcHRpb24uDQogICAgICAgICAgICAqLw0K ICAgICAgICAgICAgaWYgKHRoaXMuc2VjdXJpdHlUb2tlblJlZmVyZW5jZSA9PSBudWxsKSB7DQog ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTU2VjdXJpdHlFeGNlcHRpb24oDQogICAgICAgICAg ICAgICAgICAgICAgICBXU1NlY3VyaXR5RXhjZXB0aW9uLlNFQ1VSSVRZX1RPS0VOX1VOQVZBSUxB QkxFLA0KICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHNldCBrZXlJbmZvIGVsZW1l bnQsIGlmIHRoZSBrZXlJZGVudGlmaWVyICIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgIj09 IEVNQkVEX1NFQ1VSSVRZX1RPS0VOX1JFRiIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg ICAgICAgICAgICBrZXlJbmZvID0gbmV3IEtleUluZm8oZG9jKTsNCiAgICAgICAgICAgICAgICBF bGVtZW50IHRtcEUgPSBzZWN1cml0eVRva2VuUmVmZXJlbmNlLmdldEVsZW1lbnQoKTsNCiAgICAg ICAgICAgICAgICB0bXBFLnNldEF0dHJpYnV0ZU5TKFdTQ29uc3RhbnRzLlhNTE5TX05TLA0KICAg ICAgICAgICAgICAgICAgICAgICAgInhtbG5zOiIgKyB0bXBFLmdldFByZWZpeCgpLA0KICAgICAg ICAgICAgICAgICAgICAgICAgdG1wRS5nZXROYW1lc3BhY2VVUkkoKSk7DQogICAgICAgICAgICAg ICAga2V5SW5mby5hZGRVbmtub3duRWxlbWVudChzZWN1cml0eVRva2VuUmVmZXJlbmNlLmdldEVs ZW1lbnQoKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBWZWN0b3IgZW5j RGF0YVJlZnMgPSBkb0VuY3J5cHRpb24oZG9jLCB0aGlzLmVuY3J5cHRpb25LZXksIGtleUluZm8p Ow0KDQogICAgICAgIC8qDQogICAgICAgICAqIEF0IHRoaXMgcG9pbnQgZGF0YSBpcyBlbmNyeXB0 ZWQgd2l0aCB0aGUgc3ltbWV0cmljIGtleSBhbmQgY2FuIGJlDQogICAgICAgICAqIHJlZmVyZW5j ZWQgdmlhIHRoZSBhYm92ZSBJZA0KICAgICAgICAgKi8NCg0KICAgICAgICAvKg0KICAgICAgICAg KiBOb3cgd2UgbmVlZCB0byBzZXR1cCB0aGUgd3NzZTpTZWN1cml0eSBoZWFkZXIgYmxvY2sNCiAg ICAgICAgICogMSkgZ2V0IChvciBjcmVhdGUpIHRoZSB3c3NlOlNlY3VyaXR5IGhlYWRlciBibG9j aw0KICAgICAgICAgKiAyKSBUaGUgbGFzdCBzdGVwIHNldHMgdXAgdGhlIHJlZmVyZW5jZSBsaXN0 IHRoYXQgcGludHMgdG8gdGhlIGVuY3J5cHRlZA0KICAgICAgICAgKiAgICBkYXRhIHRoYXQgd2Fz IGVuY3J5cHRlZCB3aXRoIHRoaXMgZW5jcnlwdGVkIHNlc3Npb24ga2V5IDotKQ0KICAgICAgICAg Ki8NCiAgICAgICAgRWxlbWVudCB3c3NlU2VjdXJpdHkgPSBpbnNlcnRTZWN1cml0eUhlYWRlcihk b2MpOw0KDQogICAgICAgIEVsZW1lbnQgdG1wRSA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZW1wIik7 DQogICAgICAgIEVsZW1lbnQgcmVmTGlzdCA9IGNyZWF0ZURhdGFSZWZMaXN0KGRvYywgdG1wRSwg ZW5jRGF0YVJlZnMpOw0KICAgICAgICBXU1NlY3VyaXR5VXRpbC5wcmVwZW5kQ2hpbGRFbGVtZW50 KGRvYywgd3NzZVNlY3VyaXR5LCByZWZMaXN0LCB0cnVlKTsNCg0KICAgICAgICBpZiAodGxvZy5p c0RlYnVnRW5hYmxlZCgpKSB7DQogICAgICAgICAgICB0bG9nLmRlYnVnKCJFbmNyeXB0Qm9keSBl bWJlZGRlZDogc3ltbS1lbmMgIiArICh0MSAtIHQwKSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0 dXJuIGRvYzsNCiAgICB9DQoNCiAgICBwcml2YXRlIEtleUdlbmVyYXRvciBnZXRLZXlHZW5lcmF0 b3IoKSB0aHJvd3MgV1NTZWN1cml0eUV4Y2VwdGlvbiB7DQoJCUtleUdlbmVyYXRvciBrZXlHZW4g PSBudWxsOw0KCQlTdHJpbmcgaWQgPSB3c3NDb25maWcuZ2V0SmNlUHJvdmlkZXJJZCgpOw0KCQl0 cnkgew0KCQkJLyoNCgkJCSAqIEFzc3VtZSBBRVMgYXMgZGVmYXVsdCwgc28gaW5pdGlhbGl6ZSBp dA0KCQkJICovDQoJCQlpZiAoaWQgPT0gbnVsbCkgew0KCQkJCWtleUdlbiA9IEtleUdlbmVyYXRv ci5nZXRJbnN0YW5jZSgiQUVTIik7DQoJCQl9IGVsc2Ugew0KCQkJCWtleUdlbiA9IEtleUdlbmVy YXRvci5nZXRJbnN0YW5jZSgiQUVTIiwgaWQpOw0KCQkJfQ0KCQkJaWYgKHN5bUVuY0FsZ28uZXF1 YWxzSWdub3JlQ2FzZShXU0NvbnN0YW50cy5UUklQTEVfREVTKSkgew0KCQkJCWlmIChpZCA9PSBu dWxsKSB7DQoJCQkJCWtleUdlbiA9IEtleUdlbmVyYXRvci5nZXRJbnN0YW5jZSgiREVTZWRlIik7 DQoJCQkJfSBlbHNlIHsNCgkJCQkJa2V5R2VuID0gS2V5R2VuZXJhdG9yLmdldEluc3RhbmNlKCJE RVNlZGUiLCBpZCk7DQoJCQkJfQ0KCQkJfSBlbHNlIGlmIChzeW1FbmNBbGdvLmVxdWFsc0lnbm9y ZUNhc2UoV1NDb25zdGFudHMuQUVTXzEyOCkpIHsNCgkJCQlrZXlHZW4uaW5pdCgxMjgpOw0KCQkJ fSBlbHNlIGlmIChzeW1FbmNBbGdvLmVxdWFsc0lnbm9yZUNhc2UoV1NDb25zdGFudHMuQUVTXzE5 MikpIHsNCgkJCQlrZXlHZW4uaW5pdCgxOTIpOw0KCQkJfSBlbHNlIGlmIChzeW1FbmNBbGdvLmVx dWFsc0lnbm9yZUNhc2UoV1NDb25zdGFudHMuQUVTXzI1NikpIHsNCgkJCQlrZXlHZW4uaW5pdCgy NTYpOw0KCQkJfSBlbHNlIHsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCgkJfSBjYXRjaCAoTm9T dWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUpIHsNCgkJCXRocm93IG5ldyBXU1NlY3VyaXR5RXhjZXB0 aW9uKA0KCQkJCQlXU1NlY3VyaXR5RXhjZXB0aW9uLlVOU1VQUE9SVEVEX0FMR09SSVRITSwgbnVs bCwgbnVsbCwgZSk7DQoJCX0gY2F0Y2ggKE5vU3VjaFByb3ZpZGVyRXhjZXB0aW9uIGUpIHsNCgkJ CXRocm93IG5ldyBXU1NlY3VyaXR5RXhjZXB0aW9uKA0KCQkJCQlXU1NlY3VyaXR5RXhjZXB0aW9u LlVOU1VQUE9SVEVEX0FMR09SSVRITSwgbnVsbCwgbnVsbCwgZSk7DQoJCX0NCgkJcmV0dXJuIGtl eUdlbjsNCgl9DQoNCiAgICAvKioNCgkgKiBDcmVhdGUgRE9NIHN1YnRyZWUgZm9yIDxjb2RlPnhl bmM6RW5jcnlwdGVkS2V5PC9jb2RlPg0KCSAqIA0KCSAqIEBwYXJhbSBkb2MNCgkgKiAgICAgICAg ICAgIHRoZSBTT0FQIGVuZXZlbG9wZSBwYXJlbnQgZG9jdW1lbnQNCgkgKiBAcGFyYW0ga2V5VHJh bnNwb3J0QWxnbw0KCSAqICAgICAgICAgICAgc3BlY2lmaWVzIHdoaWNoIGFsb2dyaXRobSB0byB1 c2UgdG8gZW5jcnlwdCB0aGUgc3ltbWV0cmljIGtleQ0KCSAqIEByZXR1cm4gYW4gPGNvZGU+eGVu YzpFbmNyeXB0ZWRLZXk8L2NvZGU+IGVsZW1lbnQNCgkgKi8NCiAgICBwdWJsaWMgc3RhdGljIEVs ZW1lbnQgY3JlYXRlRW5yY3lwdGVkS2V5KERvY3VtZW50IGRvYywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXlUcmFuc3BvcnRBbGdvKSB7DQog ICAgICAgIEVsZW1lbnQgZW5jcnlwdGVkS2V5ID0NCiAgICAgICAgICAgICAgICBkb2MuY3JlYXRl RWxlbWVudE5TKFdTQ29uc3RhbnRzLkVOQ19OUywNCiAgICAgICAgICAgICAgICAgICAgICAgIFdT Q29uc3RhbnRzLkVOQ19QUkVGSVggKyAiOkVuY3J5cHRlZEtleSIpOw0KDQogICAgICAgIFdTU2Vj dXJpdHlVdGlsLnNldE5hbWVzcGFjZShlbmNyeXB0ZWRLZXksDQogICAgICAgICAgICAgICAgV1ND b25zdGFudHMuRU5DX05TLA0KICAgICAgICAgICAgICAgIFdTQ29uc3RhbnRzLkVOQ19QUkVGSVgp Ow0KICAgICAgICBFbGVtZW50IGVuY3J5cHRpb25NZXRob2QgPQ0KICAgICAgICAgICAgICAgIGRv Yy5jcmVhdGVFbGVtZW50TlMoV1NDb25zdGFudHMuRU5DX05TLA0KICAgICAgICAgICAgICAgICAg ICAgICAgV1NDb25zdGFudHMuRU5DX1BSRUZJWCArICI6RW5jcnlwdGlvbk1ldGhvZCIpOw0KICAg ICAgICBlbmNyeXB0aW9uTWV0aG9kLnNldEF0dHJpYnV0ZU5TKG51bGwsICJBbGdvcml0aG0iLCBr ZXlUcmFuc3BvcnRBbGdvKTsNCiAgICAgICAgV1NTZWN1cml0eVV0aWwuYXBwZW5kQ2hpbGRFbGVt ZW50KGRvYywgZW5jcnlwdGVkS2V5LCBlbmNyeXB0aW9uTWV0aG9kKTsNCiAgICAgICAgcmV0dXJu IGVuY3J5cHRlZEtleTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRl Q2lwaGVyVmFsdWUoRG9jdW1lbnQgZG9jLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFbGVtZW50IGVuY3J5cHRlZEtleSkgew0KICAgICAgICBFbGVtZW50IGNp cGhlckRhdGEgPQ0KICAgICAgICAgICAgICAgIGRvYy5jcmVhdGVFbGVtZW50TlMoV1NDb25zdGFu dHMuRU5DX05TLA0KICAgICAgICAgICAgICAgICAgICAgICAgV1NDb25zdGFudHMuRU5DX1BSRUZJ WCArICI6Q2lwaGVyRGF0YSIpOw0KICAgICAgICBFbGVtZW50IGNpcGhlclZhbHVlID0NCiAgICAg ICAgICAgICAgICBkb2MuY3JlYXRlRWxlbWVudE5TKFdTQ29uc3RhbnRzLkVOQ19OUywNCiAgICAg ICAgICAgICAgICAgICAgICAgIFdTQ29uc3RhbnRzLkVOQ19QUkVGSVggKyAiOkNpcGhlclZhbHVl Iik7DQogICAgICAgIGNpcGhlckRhdGEuYXBwZW5kQ2hpbGQoY2lwaGVyVmFsdWUpOw0KICAgICAg ICBXU1NlY3VyaXR5VXRpbC5hcHBlbmRDaGlsZEVsZW1lbnQoZG9jLCBlbmNyeXB0ZWRLZXksIGNp cGhlckRhdGEpOw0KICAgICAgICByZXR1cm4gY2lwaGVyVmFsdWU7DQogICAgfQ0KDQogICAgcHVi bGljIHN0YXRpYyBFbGVtZW50IGNyZWF0ZURhdGFSZWZMaXN0KERvY3VtZW50IGRvYywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCBlbmNyeXB0ZWRL ZXksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciBl bmNEYXRhUmVmcykgew0KICAgICAgICBFbGVtZW50IHJlZmVyZW5jZUxpc3QgPQ0KICAgICAgICAg ICAgICAgIGRvYy5jcmVhdGVFbGVtZW50TlMoV1NDb25zdGFudHMuRU5DX05TLA0KICAgICAgICAg ICAgICAgICAgICAgICAgV1NDb25zdGFudHMuRU5DX1BSRUZJWCArICI6UmVmZXJlbmNlTGlzdCIp Ow0KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuY0RhdGFSZWZzLnNpemUoKTsgaSsrKSB7 DQogICAgICAgICAgICBTdHJpbmcgZGF0YVJlZmVyZW5jZVVyaSA9IChTdHJpbmcpIGVuY0RhdGFS ZWZzLmdldChpKTsNCiAgICAgICAgICAgIEVsZW1lbnQgZGF0YVJlZmVyZW5jZSA9DQogICAgICAg ICAgICAgICAgICAgIGRvYy5jcmVhdGVFbGVtZW50TlMoV1NDb25zdGFudHMuRU5DX05TLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFdTQ29uc3RhbnRzLkVOQ19QUkVGSVggKyAiOkRhdGFS ZWZlcmVuY2UiKTsNCiAgICAgICAgICAgIGRhdGFSZWZlcmVuY2Uuc2V0QXR0cmlidXRlTlMobnVs bCwgIlVSSSIsIGRhdGFSZWZlcmVuY2VVcmkpOw0KICAgICAgICAgICAgcmVmZXJlbmNlTGlzdC5h cHBlbmRDaGlsZChkYXRhUmVmZXJlbmNlKTsNCiAgICAgICAgfQ0KICAgICAgICBXU1NlY3VyaXR5 VXRpbC5hcHBlbmRDaGlsZEVsZW1lbnQoZG9jLCBlbmNyeXB0ZWRLZXksIHJlZmVyZW5jZUxpc3Qp Ow0KICAgICAgICByZXR1cm4gcmVmZXJlbmNlTGlzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAg KiBTZXRzIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgRW5jcnlwdGVkS2V5RWxlbWVudA0KICAgICAq DQogICAgICogQHBhcmFtIGVsZW1lbnQNCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRQYXJl bnROb2RlKEVsZW1lbnQgZWxlbWVudCkgew0KICAgICAgICBwYXJlbnROb2RlID0gZWxlbWVudDsN CiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAcmV0dXJuIFRPRE8NCiAgICAgKi8NCiAgICBwdWJs aWMgU2VjcmV0S2V5IGdldFN5bW1ldHJpY0tleSgpIHsNCiAgICAgICAgcmV0dXJuIHN5bW1ldHJp Y0tleTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIHN5bW1ldHJpYyBrZXkgdG8g YmUgdXNlZCBmb3IgZW5jcnlwdGlvbg0KICAgICAqIEBwYXJhbSBrZXkNCiAgICAgKi8NCiAgICBw dWJsaWMgdm9pZCBzZXRTeW1tZXRyaWNLZXkoU2VjcmV0S2V5IGtleSkgew0KICAgICAgICB0aGlz LnN5bW1ldHJpY0tleSA9IGtleTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXQgdGhlIHN5 bW1ldHJpYyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi4gVGhpcyBtYXkgYmUgdGhlIHNhbWUgYXMN CiAgICAgKiB0aGUgc3ltbWV0cmljIGtleSBmaWVsZC4NCiAgICAgKg0KICAgICAqIEByZXR1cm4g VGhlIHN5bW1ldHJpYyBrZXkNCiAgICAgKi8NCiAgICBwdWJsaWMgU2VjcmV0S2V5IGdldEVuY3J5 cHRpb25LZXkoKSB7DQogICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRpb25LZXk7DQogICAgfQ0K DQogICAgLyoqDQogICAgICogQHJldHVybiBUT0RPDQogICAgICovDQogICAgcHVibGljIFNlY3Vy aXR5VG9rZW5SZWZlcmVuY2UgZ2V0U2VjdXJpdHlUb2tlblJlZmVyZW5jZSgpIHsNCiAgICAgICAg cmV0dXJuIHNlY3VyaXR5VG9rZW5SZWZlcmVuY2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog QHBhcmFtIHJlZmVyZW5jZQ0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldFNlY3VyaXR5VG9r ZW5SZWZlcmVuY2UoU2VjdXJpdHlUb2tlblJlZmVyZW5jZSByZWZlcmVuY2UpIHsNCiAgICAgICAg c2VjdXJpdHlUb2tlblJlZmVyZW5jZSA9IHJlZmVyZW5jZTsNCiAgICB9DQoNCn0NCg== ------_=_NextPart_001_01C5EA8E.48B7749D Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: wss4j-dev-unsubscribe@ws.apache.org For additional commands, e-mail: wss4j-dev-help@ws.apache.org ------_=_NextPart_001_01C5EA8E.48B7749D--