Return-Path: Delivered-To: apmail-ws-axis-c-dev-archive@www.apache.org Received: (qmail 71801 invoked from network); 21 Mar 2005 17:23:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 21 Mar 2005 17:23:46 -0000 Received: (qmail 56566 invoked by uid 500); 21 Mar 2005 17:23:46 -0000 Delivered-To: apmail-ws-axis-c-dev-archive@ws.apache.org Received: (qmail 56537 invoked by uid 500); 21 Mar 2005 17:23:45 -0000 Mailing-List: contact axis-c-dev-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: "Apache AXIS C Developers List" Reply-To: "Apache AXIS C Developers List" Delivered-To: mailing list axis-c-dev@ws.apache.org Received: (qmail 56523 invoked by uid 99); 21 Mar 2005 17:23:45 -0000 X-ASF-Spam-Status: No, hits=0.4 required=10.0 tests=DNS_FROM_RFC_ABUSE X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy) Received: from mtagate4.uk.ibm.com (HELO mtagate4.uk.ibm.com) (195.212.29.137) by apache.org (qpsmtpd/0.28) with ESMTP; Mon, 21 Mar 2005 09:23:43 -0800 Received: from d06nrmr1407.portsmouth.uk.ibm.com (d06nrmr1407.portsmouth.uk.ibm.com [9.149.38.185]) by mtagate4.uk.ibm.com (8.12.10/8.12.10) with ESMTP id j2LHNdAv339798 for ; Mon, 21 Mar 2005 17:23:39 GMT Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by d06nrmr1407.portsmouth.uk.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id j2LHNdwS171796 for ; Mon, 21 Mar 2005 17:23:39 GMT Received: from d06av02.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.12.11/8.12.11) with ESMTP id j2LHNd4G003857 for ; Mon, 21 Mar 2005 17:23:39 GMT Received: from d06ml062.portsmouth.uk.ibm.com (d06ml062.portsmouth.uk.ibm.com [9.149.38.82]) by d06av02.portsmouth.uk.ibm.com (8.12.11/8.12.11) with ESMTP id j2LHNdTd003854 for ; Mon, 21 Mar 2005 17:23:39 GMT In-Reply-To: <1111398560.2318.55.camel@Samisa> Subject: Re: Samisa - please help me To: "Apache AXIS C Developers List" X-Mailer: Lotus Notes Release 6.0.2CF1 June 9, 2003 Message-ID: From: Adrian Dick Date: Mon, 21 Mar 2005 17:23:41 +0000 X-MIMETrack: Serialize by Router on D06ML062/06/M/IBM(Release 6.53HF247 | January 6, 2005) at 21/03/2005 17:23:38 MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=0FBBE558DFCF12388f9e8a93df938690918c0FBBE558DFCF1238" Content-Disposition: inline X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N --0__=0FBBE558DFCF12388f9e8a93df938690918c0FBBE558DFCF1238 Content-type: text/plain; charset=US-ASCII Hi Samisa, I've been delving deeper into this problem for Mark. We've found that it was not ClientStubWriter.java that introduced the problem, we have been able to determine it was an update made to PlatformSpecificUnix.hpp, and was only seen when trace is enabled. Apologies for wasting your time trying to find a fault in your code. I have just backed out the change and AxisBench is now passing. The same fix also resolves problems we're seeing with ExceptionTestDoc and FaultMappingDoc, which I believe may be the same as the problem you report in http://issues.apache.org/jira/browse/AXISCPP-555 Regards, Adrian _______________________________________ Adrian Dick (adrian.dick@uk.ibm.com) Samisa Abeysinghe To Apache AXIS C Developers List 21/03/2005 09:49 cc Please respond to Subject "Apache AXIS C Re: Samisa - please help me Developers List" Hi Mark, Fortunately I had a backup of the file prior to making changes. PFA. One of the problems of identifying the changes is because I did some indentation fixes. Sorry about that. I ran the test on Linux and Chinthana helped me to test this on Windows. On both platforms, with the changes in place, AxisBench client does not crash. However, the output we get is different from the formatting in the expected out file (but the outputs seem correct) When you say fail does it mean that it segfaults? Are there any other tests that segfault? Thanks, Samisa... On Fri, 2005-03-18 at 17:27, Mark Whitlock wrote: > > > Hi Samisa, > I am investigating AxisBench failing on linux. It appears to fail when > deleting the last (i=99) output BenchBasicDataType. This test succeeded on > the 14th March but failed on the 15th (and all builds subsequently). So I > looked through all the changes that were made on the 14th and 15th March > and I have eliminated all but your change to > cpp/literal/ClientStubWriter.java. Unfortunately the file got formatted for > this change so it is hard to see exactly which lines you really changed. In > your JIRA comment you said you had to make large changes. > > I apologise if I am unfairly accusing your fix. I just need some help > sorting this problem. I will try (privately) backing off your change and > see if that fixes AxisBench but that may be difficult since code has been > added since. > > Please could you help? > Thanks, > Mark > Mark Whitlock > IBM -- Samisa Abeysinghe Virtusa Corporation (See attached file: ClientStubWriter.java.0.ind) --0__=0FBBE558DFCF12388f9e8a93df938690918c0FBBE558DFCF1238 Content-type: application/octet-stream; name="ClientStubWriter.java.0.ind" Content-Disposition: attachment; filename="ClientStubWriter.java.0.ind" Content-transfer-encoding: base64 LyoNCiAqICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRp b24uDQogKg0KICogICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g Mi4wICh0aGUgIkxpY2Vuc2UiKTsNCiAqICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KICogICBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqDQogKiAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiAqDQogKiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBs aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCiAqICAgZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywNCiAqICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp dGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogKiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCiAqICAgbGltaXRhdGlv bnMgdW5kZXIgdGhlIExpY2Vuc2UuDQogKi8NCg0KLyoqDQogKiBAYXV0aG9yIFN1c2FudGhhIEt1 bWFyYShzdXNhbnRoYUBvcGVuc291cmNlLmxrLCBza3VtYXJhQHZpcnR1c2EuY29tKQ0KICogQGF1 dGhvciBTYW1pc2EgQWJleXNpbmdoZSAoc2FiZXlzaW5naGVAdmlydHVzYS5jb20pDQogKi8NCg0K LyoNCiAqIFJldmlzaW9uIDEuMSAgMjAwNC8wNS8yNiBzYW1pc2ENCiAqIEFkZGVkIFN0dWIgYmFz ZSBjbGFzcyBpbnRvIGNvZGUgZ2VuZXJhdGlvbg0KICovDQoNCnBhY2thZ2Ugb3JnLmFwYWNoZS5h eGlzLndzZGwud3NkbDJ3cy5jcHAubGl0ZXJhbDsNCg0KaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRp b247DQppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCmltcG9ydCBqYXZhLnV0aWwuQ29sbGVj dGlvbjsNCmltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCmltcG9ydCBqYXZhLnV0aWwuSXRlcmF0 b3I7DQoNCmltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOw0KDQppbXBvcnQgb3JnLmFw YWNoZS5heGlzLndzZGwud3NkbDJ3cy5DVXRpbHM7DQppbXBvcnQgb3JnLmFwYWNoZS5heGlzLndz ZGwud3NkbDJ3cy5XcmFwcGVyRmF1bHQ7DQppbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwud3Nk bDJ3cy5XcmFwcGVyVXRpbHM7DQppbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwud3NkbDJ3cy5p bmZvLkZhdWx0SW5mbzsNCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmluZm8u TWV0aG9kSW5mbzsNCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmluZm8uUGFy YW1ldGVySW5mbzsNCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmluZm8uVHlw ZTsNCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmluZm8uV2ViU2VydmljZUNv bnRleHQ7DQoNCnB1YmxpYyBjbGFzcyBDbGllbnRTdHViV3JpdGVyDQogICAgZXh0ZW5kcyBvcmcu YXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmNwcC5DbGllbnRTdHViV3JpdGVyDQp7DQogICAgcHVi bGljIENsaWVudFN0dWJXcml0ZXIgKFdlYlNlcnZpY2VDb250ZXh0IHdzY29udGV4dCkgdGhyb3dz IFdyYXBwZXJGYXVsdA0KICAgIHsNCglzdXBlciAod3Njb250ZXh0KTsNCiAgICB9DQoNCiAgICAv KiAobm9uLUphdmFkb2MpDQogICAgICogQHNlZSBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndz LmNwcC5IZWFkZXJGaWxlV3JpdGVyI3dyaXRlQ29uc3RydWN0b3JzKCkNCiAgICAgKi8NCiAgICBw cm90ZWN0ZWQgdm9pZCB3cml0ZUNvbnN0cnVjdG9ycyAoKSB0aHJvd3MgV3JhcHBlckZhdWx0DQog ICAgew0KCXRyeQ0KCXsNCgkgICAgd3JpdGVyLndyaXRlIChjbGFzc25hbWUNCgkJCSAgKyAiOjoi DQoJCQkgICsgY2xhc3NuYW1lDQoJCQkgICsNCgkJCSAgIihjb25zdCBjaGFyKiBwY0VuZHBvaW50 VXJpLCBBWElTX1BST1RPQ09MX1RZUEUgZVByb3RvY29sKTpTdHViKHBjRW5kcG9pbnRVcmksIGVQ cm90b2NvbClcbntcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJ9XG5cbiIpOw0KCSAgICB3cml0 ZXIud3JpdGUgKGNsYXNzbmFtZQ0KCQkJICArICI6OiINCgkJCSAgKyBjbGFzc25hbWUgKyAiKClc bjpTdHViKFwiIFwiLCBBUFRIVFRQMV8xKVxue1xuIik7DQoJICAgIC8vVE9ETyBnZXQgVHJhbnNw b3J0VVJJIGZyb20gV3JhcEluZm8gYW5kIGNoZWNrIHdoYXQgdGhlIHRyYW5zcG9ydCBpcyBhbmQg ZG8gdGhlIGZvbGxvd2luZyBsaW5lIGFjY29yZGluZ2x5DQoJICAgIHdyaXRlci53cml0ZSAoIlx0 bV9wQ2FsbC0+c2V0RW5kcG9pbnRVUkkoXCIiDQoJCQkgICsgd3Njb250ZXh0LmdldFdyYXBJbmZv ICgpLmdldFRhcmdldEVuZHBvaW50VVJJICgpDQoJCQkgICsgIlwiKTtcbiIpOw0KCSAgICB3cml0 ZXIud3JpdGUgKCJ9XG5cbiIpOw0KCX0NCgljYXRjaCAoSU9FeGNlcHRpb24gZSkNCgl7DQoJICAg IHRocm93IG5ldyBXcmFwcGVyRmF1bHQgKGUpOw0KCX0NCiAgICB9DQoNCiAgICAvKiAobm9uLUph dmFkb2MpDQogICAgICogQHNlZSBvcmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmNwcC5IZWFk ZXJGaWxlV3JpdGVyI3dyaXRlTWV0aG9kcygpDQogICAgICovDQogICAgcHJvdGVjdGVkIHZvaWQg d3JpdGVNZXRob2RzICgpIHRocm93cyBXcmFwcGVyRmF1bHQNCiAgICB7DQoJdHJ5DQoJew0KCSAg ICB3cml0ZXIuDQoJCXdyaXRlDQoJCSgiXG4vKk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byB0aGUg d2ViIHNlcnZpY2UgbWV0aG9kcyovXG4iKTsNCgkgICAgTWV0aG9kSW5mbyBtaW5mbzsNCgkgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBtZXRob2RzLnNpemUgKCk7IGkrKykNCgkgICAgew0KCQltaW5m byA9IChNZXRob2RJbmZvKSBtZXRob2RzLmdldCAoaSk7DQoJCXRoaXMud3JpdGVNZXRob2RJbldy YXBwZXIgKG1pbmZvKTsNCgkJd3JpdGVyLndyaXRlICgiXG4iKTsNCgkgICAgfQ0KDQoJICAgIHdy aXRlci53cml0ZSAoIi8qTWV0aG9kcyBmb3Igc3VwcG9ydGluZyBTZWN1cmVDaGFubmVsKi9cblxu Iik7DQoJICAgIC8vIEZKUCAtIFNlY3VyZUNoYW5uZWwNCgkgICAgd3JpdGVyLndyaXRlICgidm9p ZCAiDQoJCQkgICsgY2xhc3NuYW1lDQoJCQkgICsgIjo6U2V0U2VjdXJlKCBjaGFyICogcHN6QXJn dW1lbnRzLCAuLi4pXG4iKTsNCgkgICAgLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0KCSAgICB3cml0 ZXIud3JpdGUgKCJ7XG4iKTsJLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0KCSAgICB3cml0ZXIud3Jp dGUgKCJcdGNoYXIgKipcdHBwc3pBcmdQdHIgPSAmcHN6QXJndW1lbnRzO1xuIik7DQoJICAgIC8v IEZKUCAtIFNlY3VyZUNoYW5uZWwNCgkgICAgd3JpdGVyLndyaXRlICgiXHRpbnRcdFx0aUFyZ0lu ZGV4ID0gMDtcblxuIik7CS8vIEZKUCAtIFNlY3VyZUNoYW5uZWwNCgkgICAgd3JpdGVyLndyaXRl ICgiXHR3aGlsZSggKnBwc3pBcmdQdHIgIT0gTlVMTClcbiIpOw0KCSAgICAvLyBGSlAgLSBTZWN1 cmVDaGFubmVsDQoJICAgIHdyaXRlci53cml0ZSAoIlx0e1xuIik7CS8vIEZKUCAtIFNlY3VyZUNo YW5uZWwNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdHNBcmd1bWVudHNbaUFyZ0luZGV4XSA9ICpw cHN6QXJnUHRyO1xuXG4iKTsNCgkgICAgLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0KCSAgICB3cml0 ZXIud3JpdGUgKCJcdFx0aUFyZ0luZGV4Kys7XG4iKTsJLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0K CSAgICB3cml0ZXIud3JpdGUgKCJcdFx0cHBzekFyZ1B0cisrO1xuIik7CS8vIEZKUCAtIFNlY3Vy ZUNoYW5uZWwNCgkgICAgd3JpdGVyLndyaXRlICgiXHR9XG4iKTsJLy8gRkpQIC0gU2VjdXJlQ2hh bm5lbA0KCSAgICB3cml0ZXIud3JpdGUgKCJ9XG5cbiIpOwkvLyBGSlAgLSBTZWN1cmVDaGFubmVs DQoJICAgIHdyaXRlci53cml0ZSAoInZvaWQgIiArIGNsYXNzbmFtZSArICI6OmluY2x1ZGVTZWN1 cmUoKVxuIik7DQoJICAgIC8vIEZKUCAtIFNlY3VyZUNoYW5uZWwNCgkgICAgd3JpdGVyLndyaXRl ICgie1xuIik7CS8vIEZKUCAtIFNlY3VyZUNoYW5uZWwNCgkgICAgd3JpdGVyLg0KCQl3cml0ZQ0K CQkoIlx0bV9wQ2FsbC0+c2V0VHJhbnNwb3J0UHJvcGVydHkoIFNFQ1VSRV9QUk9QRVJUSUVTLCAo Y29uc3QgY2hhciAqKSAmc0FyZ3VtZW50cyk7XG4iKTsNCgkgICAgLy8gRkpQIC0gU2VjdXJlQ2hh bm5lbA0KCSAgICB3cml0ZXIud3JpdGUgKCJ9XG4iKTsJLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0K CX0NCgljYXRjaCAoSU9FeGNlcHRpb24gZSkNCgl7DQoJICAgIHRocm93IG5ldyBXcmFwcGVyRmF1 bHQgKGUpOw0KCX0NCiAgICB9DQoNCiAgICAvKiAobm9uLUphdmFkb2MpDQogICAgICogQHNlZSBv cmcuYXBhY2hlLmF4aXMud3NkbC53c2RsMndzLmNwcC5IZWFkZXJGaWxlV3JpdGVyI3dyaXRlUHJl cHJvY3Nzb3JTdGF0ZW1lbnRzKCkNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVBy ZXByb2Nlc3NvclN0YXRlbWVudHMgKCkgdGhyb3dzIFdyYXBwZXJGYXVsdA0KICAgIHsNCgl0cnkN Cgl7DQoJICAgIGlmICgiQXhpc0NsaWVudEV4Y2VwdGlvbiIuZXF1YWxzIChjbGFzc25hbWUpKQ0K CSAgICB7DQoJCXdyaXRlci53cml0ZSAoIiNpbmNsdWRlIFwiIg0KCQkJICAgICAgKyBnZXRTZXJ2 aWNlTmFtZSAoKQ0KCQkJICAgICAgKyAiXyINCgkJCSAgICAgICsgY2xhc3NuYW1lDQoJCQkgICAg ICArIENVdGlscy5DUFBfSEVBREVSX1NVRkZJWCArICJcIlxuXG4iKTsNCgkgICAgfQ0KCSAgICBl bHNlDQoJICAgIHsNCgkJd3JpdGVyLndyaXRlICgiI2luY2x1ZGUgXCIiDQoJCQkgICAgICArIGNs YXNzbmFtZQ0KCQkJICAgICAgKyBDVXRpbHMuQ1BQX0hFQURFUl9TVUZGSVggKyAiXCJcblxuIik7 DQoJICAgIH0NCgkgICAgd3JpdGVyLndyaXRlICgiI2luY2x1ZGUgPGF4aXMvQXhpc1dyYXBwZXJB UEkuaHBwPlxuXG4iKTsNCgl9DQoJY2F0Y2ggKElPRXhjZXB0aW9uIGUpDQoJew0KCSAgICB0aHJv dyBuZXcgV3JhcHBlckZhdWx0IChlKTsNCgl9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVGhp cyBtZXRob2QgZ2VuYXJhdGUgbWV0aG9kcyB0aGF0IHdyYXBzIHRoZSBlYWNoIG1ldGhvZCBvZiB0 aGUgc2VydmljZQ0KICAgICAqIEBwYXJhbSBtZXRob2ROYW1lDQogICAgICogQHBhcmFtIHBhcmFt cw0KICAgICAqIEBwYXJhbSBvdXRwYXJhbQ0KICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCiAg ICAgKi8NCg0KICAgIHB1YmxpYyB2b2lkIHdyaXRlTWV0aG9kSW5XcmFwcGVyIChNZXRob2RJbmZv IG1pbmZvKQ0KCXRocm93cyBXcmFwcGVyRmF1bHQsIElPRXhjZXB0aW9uDQogICAgew0KCWJvb2xl YW4gaXNBbGxUcmVhdGVkQXNPdXRQYXJhbXMgPSBmYWxzZTsNCglQYXJhbWV0ZXJJbmZvIHJldHVy bnR5cGUgPSBudWxsOw0KCWludCBub09mT3V0UGFyYW1zID0gbWluZm8uZ2V0T3V0cHV0UGFyYW1l dGVyVHlwZXMgKCkuc2l6ZSAoKTsNCglpZiAoMCA9PSBub09mT3V0UGFyYW1zKQ0KCXsNCgkgICAg cmV0dXJudHlwZSA9IG51bGw7DQoJfQ0KCWVsc2UNCgl7DQoNCgkgICAgaWYgKDEgPT0gbm9PZk91 dFBhcmFtcykNCgkgICAgew0KCQlyZXR1cm50eXBlID0NCgkJICAgIChQYXJhbWV0ZXJJbmZvKSBt aW5mby5nZXRPdXRwdXRQYXJhbWV0ZXJUeXBlcyAoKS4NCgkJICAgIGl0ZXJhdG9yICgpLm5leHQg KCk7DQoJICAgIH0NCgkgICAgZWxzZQ0KCSAgICB7DQoJCWlzQWxsVHJlYXRlZEFzT3V0UGFyYW1z ID0gdHJ1ZTsNCgkgICAgfQ0KCX0NCglDb2xsZWN0aW9uIHBhcmFtcyA9IG1pbmZvLmdldElucHV0 UGFyYW1ldGVyVHlwZXMgKCk7DQoJU3RyaW5nIG1ldGhvZE5hbWUgPSBtaW5mby5nZXRNZXRob2Ru YW1lICgpOw0KCVR5cGUgcmV0VHlwZSA9IG51bGw7DQoJYm9vbGVhbiByZXR1cm50eXBlaXNzaW1w bGUgPSBmYWxzZTsNCglib29sZWFuIHJldHVybnR5cGVpc2FycmF5ID0gZmFsc2U7DQoJU3RyaW5n IG91dHBhcmFtVHlwZSA9IG51bGw7DQoJaWYgKHJldHVybnR5cGUgIT0gbnVsbCkNCgl7DQoJICAg IHJldFR5cGUgPQ0KCQl3c2NvbnRleHQuZ2V0VHlwZW1hcCAoKS5nZXRUeXBlIChyZXR1cm50eXBl LmdldFNjaGVtYU5hbWUgKCkpOw0KCX0NCglpZiAocmV0VHlwZSAhPSBudWxsKQ0KCXsNCgkgICAg aWYgKHJldFR5cGUuaXNTaW1wbGVUeXBlICgpKQ0KCSAgICB7DQoJCW91dHBhcmFtVHlwZSA9IENV dGlscy5nZXRjbGFzczRxbmFtZSAocmV0VHlwZS5nZXRCYXNlVHlwZSAoKSk7DQoJICAgIH0NCgkg ICAgZWxzZQ0KCSAgICB7DQoJCW91dHBhcmFtVHlwZSA9IHJldFR5cGUuZ2V0TGFuZ3VhZ2VTcGVj aWZpY05hbWUgKCk7DQoJICAgIH0NCgkgICAgcmV0dXJudHlwZWlzYXJyYXkgPSByZXRUeXBlLmlz QXJyYXkgKCk7DQoJfQ0KCWVsc2UNCgl7DQoNCgkgICAgaWYgKHJldHVybnR5cGUgIT0gbnVsbCkN CgkgICAgew0KCQlvdXRwYXJhbVR5cGUgPSByZXR1cm50eXBlLmdldExhbmdOYW1lICgpOw0KCSAg ICB9DQoJfQ0KCWlmIChyZXR1cm50eXBlICE9IG51bGwpDQoJew0KCSAgICByZXR1cm50eXBlaXNz aW1wbGUgPSBDVXRpbHMuaXNTaW1wbGVUeXBlIChvdXRwYXJhbVR5cGUpOw0KCX0NCgl3cml0ZXIu d3JpdGUgKCJcbi8qXG4iKTsNCgl3cml0ZXIud3JpdGUgKCIgKiBUaGlzIG1ldGhvZCB3cmFwIHRo ZSBzZXJ2aWNlIG1ldGhvZCIgKyBtZXRob2ROYW1lICsNCgkJICAgICAgIlxuIik7DQoJd3JpdGVy LndyaXRlICgiICovXG4iKTsNCgkvL21ldGhvZCBzaWduYXR1cmUNCglTdHJpbmcgcGFyYVR5cGVO YW1lOw0KCWJvb2xlYW4gdHlwZWlzYXJyYXkgPSBmYWxzZTsNCglib29sZWFuIHR5cGVpc3NpbXBs ZSA9IGZhbHNlOw0KCVR5cGUgdHlwZTsNCglpZiAocmV0dXJudHlwZSA9PSBudWxsKQ0KCXsNCgkg ICAgd3JpdGVyLndyaXRlICgidm9pZCIpOw0KCX0NCgllbHNlDQoJew0KCSAgICBpZiAocmV0dXJu dHlwZWlzYXJyYXkNCgkJfHwgKHJldHVybnR5cGVpc3NpbXBsZQ0KCQkgICAgJiYgKCFyZXR1cm50 eXBlLmlzTmlsbGFibGUgKCkNCgkJCXx8IG91dHBhcmFtVHlwZS5lcXVhbHMgKCJ4c2RfX3N0cmlu ZyIpDQoJCQl8fCBvdXRwYXJhbVR5cGUuZXF1YWxzICgieHNkX19hbnlVUkkiKQ0KCQkJfHwgb3V0 cGFyYW1UeXBlLmVxdWFscyAoInhzZF9fUU5hbWUiKQ0KCQkJfHwgb3V0cGFyYW1UeXBlLmVxdWFs cyAoInhzZF9fbm90YXRpb24iKSkpKQ0KCSAgICB7DQoJCXdyaXRlci53cml0ZSAob3V0cGFyYW1U eXBlKTsNCgkgICAgfQ0KCSAgICBlbHNlDQoJICAgIHsJCQkvL2ZvciBBbnlUeXBlIHRvbw0KCQl3 cml0ZXIud3JpdGUgKG91dHBhcmFtVHlwZSArICIqIik7DQoJICAgIH0NCgl9DQoJd3JpdGVyLndy aXRlICgiICIgKyBjbGFzc25hbWUgKyAiOjoiICsgbWV0aG9kTmFtZSArICIoIik7DQoJQXJyYXlM aXN0IHBhcmFtc0IgPSAoQXJyYXlMaXN0KSBwYXJhbXM7DQoJaWYgKDAgPCBwYXJhbXNCLnNpemUg KCkpDQoJew0KCSAgICB0eXBlID0NCgkJd3Njb250ZXh0LmdldFR5cGVtYXAgKCkuZ2V0VHlwZSAo KChQYXJhbWV0ZXJJbmZvKSBwYXJhbXNCLg0KCQkJCQkJICBnZXQgKDApKS5nZXRTY2hlbWFOYW1l ICgpKTsNCgkgICAgaWYgKHR5cGUgIT0gbnVsbCkNCgkgICAgew0KCQlpZiAodHlwZS5pc1NpbXBs ZVR5cGUgKCkpDQoJCXsJCS8vc2NoZW1hIGRlZmluZWQgc2ltcGxlVHlwZQ0KCQkgICAgcGFyYVR5 cGVOYW1lID0NCgkJCUNVdGlscy5nZXRjbGFzczRxbmFtZSAodHlwZS5nZXRCYXNlVHlwZSAoKSk7 DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCSAgICBwYXJhVHlwZU5hbWUgPSB0eXBlLmdldExhbmd1YWdl U3BlY2lmaWNOYW1lICgpOw0KCQl9DQoJCXR5cGVpc2FycmF5ID0gdHlwZS5pc0FycmF5ICgpOw0K CSAgICB9DQoJICAgIGVsc2UNCgkgICAgew0KCQlwYXJhVHlwZU5hbWUgPQ0KCQkgICAgKChQYXJh bWV0ZXJJbmZvKSBwYXJhbXNCLmdldCAoMCkpLmdldExhbmdOYW1lICgpOw0KCQl0eXBlaXNhcnJh eSA9IGZhbHNlOw0KCSAgICB9DQoJICAgIHR5cGVpc3NpbXBsZSA9IENVdGlscy5pc1NpbXBsZVR5 cGUgKHBhcmFUeXBlTmFtZSk7DQoJICAgIGlmICh0eXBlaXNhcnJheQ0KCQl8fCAodHlwZWlzc2lt cGxlDQoJCSAgICAmJiAoISgoUGFyYW1ldGVySW5mbykgcGFyYW1zQi5nZXQgKDApKS5pc05pbGxh YmxlICgpDQoJCQl8fCBwYXJhVHlwZU5hbWUuZXF1YWxzICgieHNkX19zdHJpbmciKQ0KCQkJfHwg cGFyYVR5cGVOYW1lLmVxdWFscyAoInhzZF9fYW55VVJJIikNCgkJCXx8IHBhcmFUeXBlTmFtZS5l cXVhbHMgKCJ4c2RfX1FOYW1lIikNCgkJCXx8IHBhcmFUeXBlTmFtZS5lcXVhbHMgKCJ4c2RfX25v dGF0aW9uIikpKSkNCgkgICAgew0KCQl3cml0ZXIud3JpdGUgKHBhcmFUeXBlTmFtZSArICIgVmFs dWUwIik7DQoJICAgIH0NCgkgICAgZWxzZQ0KCSAgICB7CQkJLy9mb3IgQW55VHlwZSB0b28NCgkJ d3JpdGVyLndyaXRlIChwYXJhVHlwZU5hbWUgKyAiKiBWYWx1ZTAiKTsNCgkgICAgfQ0KCSAgICBm b3IgKGludCBpID0gMTsgaSA8IHBhcmFtc0Iuc2l6ZSAoKTsgaSsrKQ0KCSAgICB7DQoJCXR5cGUg PQ0KCQkgICAgd3Njb250ZXh0LmdldFR5cGVtYXAgKCkuZ2V0VHlwZSAoKChQYXJhbWV0ZXJJbmZv KSBwYXJhbXNCLg0KCQkJCQkJICAgICAgZ2V0IChpKSkuDQoJCQkJCQkgICAgIGdldFNjaGVtYU5h bWUgKCkpOw0KCQlpZiAodHlwZSAhPSBudWxsKQ0KCQl7DQoJCSAgICBpZiAodHlwZS5pc1NpbXBs ZVR5cGUgKCkpDQoJCSAgICB7CQkvL3NjaGVtYSBkZWZpbmVkIHNpbXBsZVR5cGUNCgkJCXBhcmFU eXBlTmFtZSA9DQoJCQkgICAgQ1V0aWxzLmdldGNsYXNzNHFuYW1lICh0eXBlLmdldEJhc2VUeXBl ICgpKTsNCgkJICAgIH0NCgkJICAgIGVsc2UNCgkJICAgIHsNCgkJCXBhcmFUeXBlTmFtZSA9IHR5 cGUuZ2V0TGFuZ3VhZ2VTcGVjaWZpY05hbWUgKCk7DQoJCSAgICB9DQoJCSAgICB0eXBlaXNhcnJh eSA9IHR5cGUuaXNBcnJheSAoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJICAgIHBhcmFUeXBlTmFt ZSA9DQoJCQkoKFBhcmFtZXRlckluZm8pIHBhcmFtc0IuZ2V0IChpKSkuZ2V0TGFuZ05hbWUgKCk7 DQoJCSAgICB0eXBlaXNhcnJheSA9IGZhbHNlOw0KCQl9DQoJCXR5cGVpc3NpbXBsZSA9IENVdGls cy5pc1NpbXBsZVR5cGUgKHBhcmFUeXBlTmFtZSk7DQoJCWlmICh0eXBlaXNhcnJheQ0KCQkgICAg fHwgKHR5cGVpc3NpbXBsZQ0KCQkJJiYgKCEoKFBhcmFtZXRlckluZm8pIHBhcmFtc0IuZ2V0IChp KSkuaXNOaWxsYWJsZSAoKQ0KCQkJICAgIHx8IHBhcmFUeXBlTmFtZS5lcXVhbHMgKCJ4c2RfX3N0 cmluZyIpDQoJCQkgICAgfHwgcGFyYVR5cGVOYW1lLmVxdWFscyAoInhzZF9fYW55VVJJIikNCgkJ CSAgICB8fCBwYXJhVHlwZU5hbWUuZXF1YWxzICgieHNkX19RTmFtZSIpDQoJCQkgICAgfHwgcGFy YVR5cGVOYW1lLmVxdWFscyAoInhzZF9fbm90YXRpb24iKSkpKQ0KCQl7DQoJCSAgICB3cml0ZXIu d3JpdGUgKCIsICIgKyBwYXJhVHlwZU5hbWUgKyAiIFZhbHVlIiArIGkpOw0KCQl9DQoJCWVsc2UN CgkJewkJLy9mb3IgQW55VHlwZSB0b28NCgkJICAgIHdyaXRlci53cml0ZSAoIiwgIiArIHBhcmFU eXBlTmFtZSArICIqIFZhbHVlIiArIGkpOw0KCQl9DQoJICAgIH0NCgl9DQoNCgkvLyBNdWx0aXBs ZXMgcGFyYW1ldGVycyBzbyBmaWxsIHRoZSBtZXRob2RzIHByb3RvdHlwZQ0KCUFycmF5TGlzdCBw YXJhbXNDID0gKEFycmF5TGlzdCkgbWluZm8uZ2V0T3V0cHV0UGFyYW1ldGVyVHlwZXMgKCk7DQoJ aWYgKGlzQWxsVHJlYXRlZEFzT3V0UGFyYW1zKQ0KCXsNCgkgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBwYXJhbXNDLnNpemUgKCk7IGkrKykNCgkgICAgew0KCQl0eXBlID0NCgkJICAgIHdzY29udGV4 dC5nZXRUeXBlbWFwICgpLmdldFR5cGUgKCgoUGFyYW1ldGVySW5mbykgcGFyYW1zQy4NCgkJCQkJ CSAgICAgIGdldCAoaSkpLg0KCQkJCQkJICAgICBnZXRTY2hlbWFOYW1lICgpKTsNCgkJd3JpdGVy LndyaXRlICgiLCBBWElTX09VVF9QQVJBTSAgIiArDQoJCQkgICAgICBXcmFwcGVyVXRpbHMuDQoJ CQkgICAgICBnZXRDbGFzc05hbWVGcm9tUGFyYW1JbmZvQ29uc2lkZXJpbmdBcnJheXMgKChQYXJh bWV0ZXJJbmZvKSBwYXJhbXNDLmdldCAoaSksIHdzY29udGV4dCkgKyAiKiBPdXRWYWx1ZSIgKyBp KTsNCgkgICAgfQ0KCX0NCg0KCXdyaXRlci53cml0ZSAoIilcbntcbiIpOw0KCWlmIChyZXR1cm50 eXBlICE9IG51bGwpDQoJew0KCSAgICB3cml0ZXIud3JpdGUgKCJcdCIpOw0KCSAgICBpZiAocmV0 dXJudHlwZWlzYXJyYXkpDQoJICAgIHsNCgkJLy9mb3IgYXJyYXlzDQoJCXdyaXRlci53cml0ZSAo b3V0cGFyYW1UeXBlICsgIiBSZXRBcnJheSA9IHtOVUxMLCAwfTtcbiIpOw0KCSAgICB9DQoJICAg IGVsc2UNCgkgICAgew0KDQoJCWlmICghcmV0dXJudHlwZWlzc2ltcGxlKQ0KCQl7CQkvL2ZvciBB bnlUeXBlIHRvbw0KCQkgICAgd3JpdGVyLndyaXRlIChvdXRwYXJhbVR5cGUgKyAiKiBwUmV0dXJu ID0gTlVMTDtcbiIpOw0KCQkgICAgLy9mb3IgY29tcGxleCB0eXBlcw0KCQl9DQoJCWVsc2UNCgkJ ew0KCQkgICAgLy9mb3Igc2ltcGxlIHR5cGVzDQoJCSAgICBpZiAocmV0dXJudHlwZS5pc05pbGxh YmxlICgpDQoJCQkmJiAhKG91dHBhcmFtVHlwZS5lcXVhbHMgKCJ4c2RfX3N0cmluZyIpDQoJCQkg ICAgIHx8IG91dHBhcmFtVHlwZS5lcXVhbHMgKCJ4c2RfX2FueVVSSSIpDQoJCQkgICAgIHx8IG91 dHBhcmFtVHlwZS5lcXVhbHMgKCJ4c2RfX1FOYW1lIikNCgkJCSAgICAgfHwgb3V0cGFyYW1UeXBl LmVxdWFscyAoInhzZF9fbm90YXRpb24iKSkpDQoJCSAgICB7DQoJCQl3cml0ZXIud3JpdGUgKG91 dHBhcmFtVHlwZSArICIqIFJldCA9IE5VTEw7XG4iKTsNCgkJICAgIH0NCgkJICAgIGVsc2UNCgkJ ICAgIHsNCgkJCVN0cmluZyBpbml0VmFsdWUgPSBDVXRpbHMuZ2V0SW5pdFZhbHVlIChvdXRwYXJh bVR5cGUpOw0KCQkJaWYgKGluaXRWYWx1ZSAhPSBudWxsKQ0KCQkJew0KCQkJICAgIHdyaXRlci53 cml0ZSAob3V0cGFyYW1UeXBlICsgIiBSZXQgPSAiICsNCgkJCQkJICBpbml0VmFsdWUgKyAiO1xu Iik7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoNCgkJCSAgICBpZiAob3V0cGFyYW1UeXBlLmVxdWFs cyAoInhzZF9fYmFzZTY0QmluYXJ5IikNCgkJCQl8fCBvdXRwYXJhbVR5cGUuZXF1YWxzICgieHNk X19oZXhCaW5hcnkiKSkNCgkJCSAgICB7DQoJCQkJd3JpdGVyLndyaXRlIChvdXRwYXJhbVR5cGUg KyAiIFJldDtcbiIpOw0KCQkJCXdyaXRlci53cml0ZSAoIlx0UmV0Ll9fcHRyID0gTlVMTDtcbiIp Ow0KCQkJCXdyaXRlci53cml0ZSAoIlx0UmV0Ll9fc2l6ZSA9IDA7XG4iKTsNCgkJCSAgICB9DQoJ CQkgICAgZWxzZQ0KCQkJICAgIHsNCgkJCQlpZiAob3V0cGFyYW1UeXBlLmVxdWFscyAoInhzZF9f ZGF0ZVRpbWUiKQ0KCQkJCSAgICB8fCBvdXRwYXJhbVR5cGUuZXF1YWxzICgieHNkX19kYXRlIikN CgkJCQkgICAgfHwgb3V0cGFyYW1UeXBlLmVxdWFscyAoInhzZF9fdGltZSIpKQ0KCQkJCXsNCgkJ CQkgICAgd3JpdGVyLndyaXRlIChvdXRwYXJhbVR5cGUgKyAiIFJldDtcbiIpOw0KCQkJCSAgICB3 cml0ZXIud3JpdGUgKCJcdG1lbXNldCgmUmV0LDAsc2l6ZW9mKCIgKw0KCQkJCQkJICBvdXRwYXJh bVR5cGUgKyAiKSk7XG4iKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkgICAgd3JpdGVy LndyaXRlIChvdXRwYXJhbVR5cGUgKyAiIFJldDtcbiIpOw0KCQkJCX0NCgkJCSAgICB9DQoJCQl9 DQoJCSAgICB9DQoJCX0NCgkJLy9UT0RPIGluaXRpYWxpemUgcmV0dXJuIHBhcmFtZXRlciBhcHBy b3ByaWF0ZWx5Lg0KCSAgICB9DQoJfQ0KCXdyaXRlci53cml0ZSAoIlx0Y29uc3QgY2hhciogcGND bXBseEZhdWx0TmFtZTtcbiIpOw0KCXdyaXRlci53cml0ZSAoIlx0dHJ5XG5cdHsiKTsNCg0KCXdy aXRlci4NCgkgICAgd3JpdGUNCgkgICAgKCJcdGlmIChBWElTX1NVQ0NFU1MgIT0gbV9wQ2FsbC0+ aW5pdGlhbGl6ZShDUFBfRE9DX1BST1ZJREVSIiArDQoJICAgICAiKSkgcmV0dXJuICIpOw0KCWlm IChyZXR1cm50eXBlICE9IG51bGwpDQoJew0KCSAgICB3cml0ZXIud3JpdGUgKChyZXR1cm50eXBl aXNhcnJheQ0KCQkJICAgPyAiUmV0QXJyYXkiDQoJCQkgICA6IHJldHVybnR5cGVpc3NpbXBsZQ0K CQkJICAgPyAiUmV0IiA6ICJwUmV0dXJuIikgKyAiO1xuXHQiKTsNCgl9DQoJZWxzZQ0KCXsNCgkg ICAgd3JpdGVyLndyaXRlICgiO1xuIik7DQoJfQ0KCXdyaXRlci4NCgkgICAgd3JpdGUNCgkgICAg KCJcdGlmIChOVUxMPT1tX3BDYWxsLT5nZXRUcmFuc3BvcnRQcm9wZXJ0eShcIlNPQVBBY3Rpb25c IixmYWxzZSkpXG4iKTsNCgl3cml0ZXIud3JpdGUgKCJcdHtcbiIpOw0KCXdyaXRlci4NCgkgICAg d3JpdGUgKCJcdFx0bV9wQ2FsbC0+c2V0VHJhbnNwb3J0UHJvcGVydHkoU09BUEFDVElPTl9IRUFE RVIgLCBcIiINCgkJICAgKyBtaW5mby5nZXRTb2FwQWN0aW9uICgpICsgIlwiKTtcbiIpOw0KCXdy aXRlci53cml0ZSAoIlx0fVxuIik7DQoJd3JpdGVyLndyaXRlICgiXHRtX3BDYWxsLT5zZXRTT0FQ VmVyc2lvbihTT0FQX1ZFUl8xXzEpO1xuIik7DQoJLy9UT0RPIGNoZWNrIHdoaWNoIHZlcnNpb24g aXMgaXQgcmVhbGx5Lg0KCXdyaXRlci53cml0ZSAoIlx0bV9wQ2FsbC0+c2V0T3BlcmF0aW9uKFwi Ig0KCQkgICAgICArIG1pbmZvLmdldElucHV0TWVzc2FnZSAoKS5nZXRMb2NhbFBhcnQgKCkNCgkJ ICAgICAgKyAiXCIsIFwiIg0KCQkgICAgICArIG1pbmZvLmdldElucHV0TWVzc2FnZSAoKS5nZXRO YW1lc3BhY2VVUkkgKCkNCgkJICAgICAgKyAiXCIpO1xuIik7DQoNCgkvLyBBZGQgYXR0cmlidXRl cyB0byBzb2FwIG1ldGhvZA0KCWZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zQi5zaXplICgpOyBp KyspDQoJew0KCSAgICBQYXJhbWV0ZXJJbmZvIHBhcmFtID0gKFBhcmFtZXRlckluZm8pIHBhcmFt c0IuZ2V0IChpKTsNCgkgICAgaWYgKHBhcmFtLmlzQXR0cmlidXRlICgpKQ0KCSAgICB7DQoJCVN0 cmluZyBlbGVtZW50VHlwZSA9IHBhcmFtLmdldEVsZW1lbnROYW1lICgpLmdldExvY2FsUGFydCAo KTsNCg0KCQlpZiAoInN0cmluZyIuZXF1YWxzIChlbGVtZW50VHlwZSkpDQoJCXsNCgkJICAgIHdy aXRlci53cml0ZSAoIlx0bV9wQ2FsbC0+c2V0U09BUE1ldGhvZEF0dHJpYnV0ZShcIiINCgkJCQkg ICsgcGFyYW0uZ2V0UGFyYW1OYW1lICgpDQoJCQkJICArICJcIiwgXCJcIiwgVmFsdWUiICsgaSAr ICIpO1xuIik7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCSAgICBpZiAoImludCIuZXF1YWxzIChlbGVt ZW50VHlwZSkpDQoJCSAgICB7DQoJCQl3cml0ZXIud3JpdGUgKCJcdHtcbiIpOw0KCQkJd3JpdGVy LndyaXRlICgiXHRcdGNoYXIgYnVmZmVyWzIwXTtcbiIpOw0KCQkJd3JpdGVyLndyaXRlICgiXHRc dHNwcmludGYoYnVmZmVyLFwiJWRcIiwgVmFsdWUiICsgaSArDQoJCQkJICAgICAgIik7XG4iKTsN CgkJCXdyaXRlci4NCgkJCSAgICB3cml0ZSAoIlx0XHRtX3BDYWxsLT5zZXRTT0FQTWV0aG9kQXR0 cmlidXRlKFwiIiArDQoJCQkJICAgcGFyYW0uZ2V0UGFyYW1OYW1lICgpICsNCgkJCQkgICAiXCIs IFwiXCIsIGJ1ZmZlcik7XG4iKTsNCgkJCXdyaXRlci53cml0ZSAoIlx0fVxuIik7DQoJCSAgICB9 DQoJCX0NCgkgICAgfQ0KCX0NCg0KCS8vbmV3IGNhbGxzIGZyb20gc3R1YiBiYXNlDQoJd3JpdGVy LndyaXRlICgiXHRpbmNsdWRlU2VjdXJlKCk7XG4iKTsJLy8gRkpQIC0gU2VjdXJlQ2hhbm5lbA0K CXdyaXRlci53cml0ZSAoIlx0YXBwbHlVc2VyUHJlZmVyZW5jZXMoKTtcbiIpOw0KDQoJZm9yIChp bnQgaSA9IDA7IGkgPCBwYXJhbXNCLnNpemUgKCk7IGkrKykNCgl7DQoJICAgIFBhcmFtZXRlcklu Zm8gcGFyYW0gPSAoUGFyYW1ldGVySW5mbykgcGFyYW1zQi5nZXQgKGkpOw0KDQoJICAgIC8vIEln bm9yZSBhdHRyaWJ1dGVzLCB3aGlsZSBhZGRpbmcgZWxlbWVudHMNCgkgICAgaWYgKCFwYXJhbS5p c0F0dHJpYnV0ZSAoKSkNCgkgICAgew0KCQl0eXBlID0NCgkJICAgIHdzY29udGV4dC5nZXRUeXBl bWFwICgpLmdldFR5cGUgKHBhcmFtLmdldFNjaGVtYU5hbWUgKCkpOw0KCQlpZiAodHlwZSAhPSBu dWxsKQ0KCQl7DQoJCSAgICBpZiAodHlwZS5pc1NpbXBsZVR5cGUgKCkpDQoJCSAgICB7CQkvL3Nj aGVtYSBkZWZpbmVkIHNpbXBsZVR5cGUgcG9zc2libHkgd2l0aCByZXN0cmljdGlvbnMNCgkJCXBh cmFUeXBlTmFtZSA9DQoJCQkgICAgQ1V0aWxzLmdldGNsYXNzNHFuYW1lICh0eXBlLmdldEJhc2VU eXBlICgpKTsNCgkJICAgIH0NCgkJICAgIGVsc2UNCgkJICAgIHsNCgkJCXBhcmFUeXBlTmFtZSA9 IHR5cGUuZ2V0TGFuZ3VhZ2VTcGVjaWZpY05hbWUgKCk7DQoJCSAgICB9DQoJCSAgICB0eXBlaXNh cnJheSA9IHR5cGUuaXNBcnJheSAoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJICAgIHBhcmFUeXBl TmFtZSA9DQoJCQkoKFBhcmFtZXRlckluZm8pIHBhcmFtc0IuZ2V0IChpKSkuZ2V0TGFuZ05hbWUg KCk7DQoJCSAgICB0eXBlaXNhcnJheSA9IGZhbHNlOw0KCQl9DQoNCgkJaWYgKHBhcmFtLmlzQW55 VHlwZSAoKSkNCgkJew0KCQkgICAgLy9mb3IgYW55VHlwZQ0KCQkgICAgd3JpdGVyLndyaXRlICgi XHRtX3BDYWxsLT5hZGRBbnlPYmplY3QoVmFsdWUiICsgaSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJ CSAgICAvL1N0cmluZyBwYXJhbWV0ZXJOYW1lID0gKChQYXJhbWV0ZXJJbmZvKXBhcmFtc0IuZ2V0 KGkpKS5nZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpOw0KCQkgICAgLy9TYW1pc2EgMjIv MDgvMjAwNA0KCQkgICAgU3RyaW5nIHBhcmFtZXRlck5hbWUgPQ0KCQkJKChQYXJhbWV0ZXJJbmZv KSBwYXJhbXNCLmdldCAoaSkpLg0KCQkJZ2V0RWxlbWVudE5hbWVBc1N0cmluZyAoKTsNCgkJICAg IC8vU2FtaXNhDQoJCSAgICBTdHJpbmcgbmFtZXNwYWNlID0NCgkJCSgoUGFyYW1ldGVySW5mbykg cGFyYW1zQi5nZXQgKGkpKS5nZXRFbGVtZW50TmFtZSAoKS4NCgkJCWdldE5hbWVzcGFjZVVSSSAo KTsNCg0KCQkgICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggKCkgPT0gMCkNCgkJICAgIHsNCgkJCXdy aXRlci53cml0ZSAoIlx0Y2hhciBjUHJlZml4QW5kUGFyYW1OYW1lIg0KCQkJCSAgICAgICsgaQ0K CQkJCSAgICAgICsgIlsiDQoJCQkJICAgICAgKyAiXSA9IFwiIiArIHBhcmFtZXRlck5hbWUgKyAi XCI7XG4iKTsNCgkJICAgIH0NCgkJICAgIGVsc2UNCgkJICAgIHsNCgkJCWludCBzdHJpbmdMZW5n dGggPQ0KCQkJICAgIDggKyAxICsgcGFyYW1ldGVyTmFtZS5sZW5ndGggKCkgKyAxOw0KCQkJd3Jp dGVyLndyaXRlICgiXHRjaGFyIGNQcmVmaXhBbmRQYXJhbU5hbWUiICsgaSArICJbIiArDQoJCQkJ ICAgICAgc3RyaW5nTGVuZ3RoICsgIl07XG4iKTsNCgkJCXdyaXRlci53cml0ZSAoIlx0c3ByaW50 ZiggY1ByZWZpeEFuZFBhcmFtTmFtZSIgKyBpICsNCgkJCQkgICAgICAiLCBcIiVzOiIgKyBwYXJh bWV0ZXJOYW1lICsNCgkJCQkgICAgICAiXCIsIG1fcENhbGwtPmdldE5hbWVzcGFjZVByZWZpeChc IiIgKw0KCQkJCSAgICAgIG5hbWVzcGFjZSArICJcIikpO1xuIik7DQoJCSAgICB9DQoNCgkJICAg IGlmICh0eXBlaXNhcnJheSkNCgkJICAgIHsNCgkJCS8vIEFycmF5DQoJCQlUeXBlIGFycmF5VHlw ZSA9IFdyYXBwZXJVdGlscy5nZXRBcnJheVR5cGUgKHR5cGUpOw0KCQkJUU5hbWUgcW5hbWUgPSBh cnJheVR5cGUuZ2V0TmFtZSAoKTsNCgkJCWlmIChDVXRpbHMuaXNTaW1wbGVUeXBlIChxbmFtZSkp DQoJCQl7DQoJCQkgICAgLy8gQXJyYXkgb2Ygc2ltcGxlIHR5cGUNCgkJCSAgICBTdHJpbmcgY29u dGFpbmVkVHlwZSA9DQoJCQkJQ1V0aWxzLmdldGNsYXNzNHFuYW1lIChxbmFtZSk7DQoJCQkgICAg d3JpdGVyLg0KCQkJCXdyaXRlICgiXHRtX3BDYWxsLT5hZGRCYXNpY0FycmF5UGFyYW1ldGVyKCIp Ow0KCQkJICAgIHdyaXRlci53cml0ZSAoIihBeGlzX0FycmF5KikoJlZhbHVlIiArIGkgKyAiKSwg IiArDQoJCQkJCSAgQ1V0aWxzLg0KCQkJCQkgIGdldFhTRFR5cGVGb3JCYXNpY1R5cGUNCgkJCQkJ ICAoY29udGFpbmVkVHlwZSkgKw0KCQkJCQkgICIsIGNQcmVmaXhBbmRQYXJhbU5hbWUiICsgaSk7 DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkgICAgaWYgKGFycmF5VHlwZS5pc1NpbXBsZVR5cGUg KCkpDQoJCQkgICAgew0KCQkJCS8vIFNpbXBsZSB0eXBlIGluIHRoZSBzY2hlbWENCgkJCQlTdHJp bmcgY29udGFpbmVkVHlwZSA9DQoJCQkJICAgIENVdGlscy5nZXRjbGFzczRxbmFtZSAoYXJyYXlU eXBlLg0KCQkJCQkJCSAgIGdldEJhc2VUeXBlICgpKTsNCgkJCQl3cml0ZXIuDQoJCQkJICAgIHdy aXRlDQoJCQkJICAgICgiXHRtX3BDYWxsLT5hZGRCYXNpY0FycmF5UGFyYW1ldGVyKCIpOw0KCQkJ CXdyaXRlci53cml0ZSAoIihBeGlzX0FycmF5KikoJlZhbHVlIiArIGkgKw0KCQkJCQkgICAgICAi KSwgIiArDQoJCQkJCSAgICAgIENVdGlscy4NCgkJCQkJICAgICAgZ2V0WFNEVHlwZUZvckJhc2lj VHlwZQ0KCQkJCQkgICAgICAoY29udGFpbmVkVHlwZSkgKw0KCQkJCQkgICAgICAiLCBjUHJlZml4 QW5kUGFyYW1OYW1lIiArIGkpOw0KCQkJICAgIH0NCgkJCSAgICBlbHNlDQoJCQkgICAgew0KCQkJ CS8vIEFycmF5IG9mIGNvbXBsZXggdHlwZQ0KCQkJCVN0cmluZyBjb250YWluZWRUeXBlID0gcW5h bWUuZ2V0TG9jYWxQYXJ0ICgpOw0KCQkJCXdyaXRlci4NCgkJCQkgICAgd3JpdGUNCgkJCQkgICAg KCJcdG1fcENhbGwtPmFkZENtcGx4QXJyYXlQYXJhbWV0ZXIoIik7DQoJCQkJd3JpdGVyLndyaXRl ICgiKEF4aXNfQXJyYXkqKSgmVmFsdWUiICsgaSArDQoJCQkJCSAgICAgICIpLCAodm9pZCopQXhp c19TZXJpYWxpemVfIiArDQoJCQkJCSAgICAgIGNvbnRhaW5lZFR5cGUgKw0KCQkJCQkgICAgICAi LCAodm9pZCopQXhpc19EZWxldGVfIiArDQoJCQkJCSAgICAgIGNvbnRhaW5lZFR5cGUgKw0KCQkJ CQkgICAgICAiLCAodm9pZCopIEF4aXNfR2V0U2l6ZV8iICsNCgkJCQkJICAgICAgY29udGFpbmVk VHlwZSArICIsIFwiIiArDQoJCQkJCSAgICAgIHBhcmFtZXRlck5hbWUgKyAiXCIiICsgIiwgIik7 DQoJCQkJaWYgKG5hbWVzcGFjZS5sZW5ndGggKCkgPT0gMCkNCgkJCQl7DQoJCQkJICAgIHdyaXRl ci53cml0ZSAoIk5VTEwiKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkgICAgd3JpdGVy LndyaXRlICgiQXhpc19VUklfIg0KCQkJCQkJICArIGNvbnRhaW5lZFR5cGUpOw0KCQkJCX0NCgkJ CSAgICB9DQoJCQl9DQoJCSAgICB9DQoJCSAgICBlbHNlDQoJCSAgICB7DQoJCQlpZiAoQ1V0aWxz LmlzU2ltcGxlVHlwZSAocGFyYVR5cGVOYW1lKSkNCgkJCXsNCg0KCQkJICAgIC8vIFNpbXBsZSBU eXBlDQoJCQkgICAgaWYgKHBhcmFtLmlzTmlsbGFibGUgKCkNCgkJCQl8fCBwYXJhVHlwZU5hbWUu ZXF1YWxzICgieHNkX19zdHJpbmciKQ0KCQkJCXx8IHBhcmFUeXBlTmFtZS5lcXVhbHMgKCJ4c2Rf X2FueVVSSSIpDQoJCQkJfHwgcGFyYVR5cGVOYW1lLmVxdWFscyAoInhzZF9fUU5hbWUiKQ0KCQkJ CXx8IHBhcmFUeXBlTmFtZS5lcXVhbHMgKCJ4c2RfX25vdGF0aW9uIikpDQoJCQkgICAgew0KCQkJ CXdyaXRlci53cml0ZSAoIlx0bV9wQ2FsbC0+YWRkUGFyYW1ldGVyKCIpOw0KCQkJCXdyaXRlci53 cml0ZSAoIih2b2lkKilWYWx1ZSINCgkJCQkJICAgICAgKyBpDQoJCQkJCSAgICAgICsgIiwgY1By ZWZpeEFuZFBhcmFtTmFtZSINCgkJCQkJICAgICAgKyBpDQoJCQkJCSAgICAgICsgIiwgIg0KCQkJ CQkgICAgICArDQoJCQkJCSAgICAgIENVdGlscy4NCgkJCQkJICAgICAgZ2V0WFNEVHlwZUZvckJh c2ljVHlwZQ0KCQkJCQkgICAgICAocGFyYVR5cGVOYW1lKSk7DQoJCQkgICAgfQ0KCQkJICAgIGVs c2UNCgkJCSAgICB7DQoJCQkJd3JpdGVyLndyaXRlICgiXHRtX3BDYWxsLT5hZGRQYXJhbWV0ZXIo Iik7DQoJCQkJd3JpdGVyLndyaXRlICgiKHZvaWQqKSZWYWx1ZSINCgkJCQkJICAgICAgKyBpDQoJ CQkJCSAgICAgICsgIiwgY1ByZWZpeEFuZFBhcmFtTmFtZSINCgkJCQkJICAgICAgKyBpDQoJCQkJ CSAgICAgICsgIiwgIg0KCQkJCQkgICAgICArDQoJCQkJCSAgICAgIENVdGlscy4NCgkJCQkJICAg ICAgZ2V0WFNEVHlwZUZvckJhc2ljVHlwZQ0KCQkJCQkgICAgICAocGFyYVR5cGVOYW1lKSk7DQoJ CQkgICAgfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJICAgIC8vIENvbXBsZXggVHlwZQ0KCQkJ ICAgIHdyaXRlci53cml0ZSAoIlx0bV9wQ2FsbC0+YWRkQ21wbHhQYXJhbWV0ZXIoIik7DQoJCQkg ICAgd3JpdGVyLndyaXRlICgiVmFsdWUiDQoJCQkJCSAgKyBpDQoJCQkJCSAgKyAiLCAodm9pZCop QXhpc19TZXJpYWxpemVfIg0KCQkJCQkgICsgcGFyYVR5cGVOYW1lDQoJCQkJCSAgKyAiLCAodm9p ZCopQXhpc19EZWxldGVfIg0KCQkJCQkgICsgcGFyYVR5cGVOYW1lDQoJCQkJCSAgKyAiLCBjUHJl Zml4QW5kUGFyYW1OYW1lIg0KCQkJCQkgICsgaSArICIsIEF4aXNfVVJJXyIgKyBwYXJhVHlwZU5h bWUpOw0KCQkJfQ0KCQkgICAgfQ0KCQl9DQoJCS8vIEFkcmlhbiAtIGVuZCBvZiBuYW1lc3BhY2Ug Y29ycmVjdGlvbg0KCQl3cml0ZXIud3JpdGUgKCIpO1xuIik7DQoJICAgIH0NCgl9DQoJd3JpdGVy LndyaXRlICgiXHRpZiAoQVhJU19TVUNDRVNTID09IG1fcENhbGwtPmludm9rZSgpKVxuXHR7XG4i KTsNCglpZiAobWluZm8uZ2V0T3V0cHV0TWVzc2FnZSAoKSAhPSBudWxsKQ0KCXsNCgkgICAgd3Jp dGVyLndyaXRlICgiXHRcdGlmKEFYSVNfU1VDQ0VTUyA9PSBtX3BDYWxsLT5jaGVja01lc3NhZ2Uo XCIiDQoJCQkgICsgbWluZm8uZ2V0T3V0cHV0TWVzc2FnZSAoKS5nZXRMb2NhbFBhcnQgKCkNCgkJ CSAgKyAiXCIsIFwiIg0KCQkJICArIG1pbmZvLmdldE91dHB1dE1lc3NhZ2UgKCkuZ2V0TmFtZXNw YWNlVVJJICgpDQoJCQkgICsgIlwiKSlcblx0XHR7XG4iKTsNCgl9DQoJaWYgKGlzQWxsVHJlYXRl ZEFzT3V0UGFyYW1zKQ0KCXsNCgkgICAgU3RyaW5nIGN1cnJlbnRQYXJhbU5hbWU7DQoJICAgIFN0 cmluZyBjdXJyZW50UGFyYVR5cGU7DQoJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zQy5z aXplICgpOyBpKyspDQoJICAgIHsNCgkJUGFyYW1ldGVySW5mbyBjdXJyZW50VHlwZSA9IChQYXJh bWV0ZXJJbmZvKSBwYXJhbXNDLmdldCAoaSk7DQoJCXR5cGUgPQ0KCQkgICAgd3Njb250ZXh0Lmdl dFR5cGVtYXAgKCkuZ2V0VHlwZSAoY3VycmVudFR5cGUuDQoJCQkJCQkgICAgIGdldFNjaGVtYU5h bWUgKCkpOw0KCQlpZiAodHlwZSAhPSBudWxsKQ0KCQl7DQoJCSAgICBpZiAodHlwZS5pc1NpbXBs ZVR5cGUgKCkpDQoJCSAgICB7DQoJCQljdXJyZW50UGFyYVR5cGUgPQ0KCQkJICAgIENVdGlscy5n ZXRjbGFzczRxbmFtZSAodHlwZS5nZXRCYXNlVHlwZSAoKSk7DQoJCSAgICB9DQoJCSAgICBlbHNl DQoJCSAgICB7DQoJCQljdXJyZW50UGFyYVR5cGUgPSB0eXBlLmdldExhbmd1YWdlU3BlY2lmaWNO YW1lICgpOw0KCQkgICAgfQ0KCQkgICAgdHlwZWlzYXJyYXkgPSB0eXBlLmlzQXJyYXkgKCk7DQoJ CX0NCgkJZWxzZQ0KCQl7DQoJCSAgICBjdXJyZW50UGFyYVR5cGUgPQ0KCQkJKChQYXJhbWV0ZXJJ bmZvKSBwYXJhbXNDLmdldCAoaSkpLmdldExhbmdOYW1lICgpOw0KCQkgICAgdHlwZWlzYXJyYXkg PSBmYWxzZTsNCgkJfQ0KCQl0eXBlaXNzaW1wbGUgPSBDVXRpbHMuaXNTaW1wbGVUeXBlIChjdXJy ZW50UGFyYVR5cGUpOw0KDQoJCWN1cnJlbnRQYXJhbU5hbWUgPSAiKk91dFZhbHVlIiArIGk7DQoJ CS8vIFNvbWUgY29kZSBuZWVkIHRvIGJlIG1lcmdlZCBhcyB3ZSBoYXZlIHNvbWUgZHVwbGljYXRl ZCBpbiBjb2RpbmcgaGVyZS4NCgkJaWYgKHR5cGVpc2FycmF5KQ0KCQl7DQoJCSAgICBUeXBlIGFy cmF5VHlwZSA9IFdyYXBwZXJVdGlscy5nZXRBcnJheVR5cGUgKHR5cGUpOw0KCQkgICAgUU5hbWUg cW5hbWUgPSBhcnJheVR5cGUuZ2V0TmFtZSAoKTsNCgkJICAgIFN0cmluZyBjb250YWluZWRUeXBl ID0gbnVsbDsNCgkJICAgIGlmIChDVXRpbHMuaXNTaW1wbGVUeXBlIChxbmFtZSkpDQoJCSAgICB7 DQoJCQljb250YWluZWRUeXBlID0gQ1V0aWxzLmdldGNsYXNzNHFuYW1lIChxbmFtZSk7DQoJCQl3 cml0ZXIud3JpdGUgKCJcdFx0XHQiDQoJCQkJICAgICAgKyBjdXJyZW50UGFyYW1OYW1lDQoJCQkJ ICAgICAgKyAiID0gKCINCgkJCQkgICAgICArIGN1cnJlbnRQYXJhVHlwZQ0KCQkJCSAgICAgICsg IiYpbV9wQ2FsbC0+Z2V0QmFzaWNBcnJheSgiDQoJCQkJICAgICAgKw0KCQkJCSAgICAgIENVdGls cy4NCgkJCQkgICAgICBnZXRYU0RUeXBlRm9yQmFzaWNUeXBlIChjb250YWluZWRUeXBlKSArDQoJ CQkJICAgICAgIiwgXCIiICsNCgkJCQkgICAgICBjdXJyZW50VHlwZS5nZXRFbGVtZW50TmFtZSAo KS4NCgkJCQkgICAgICBnZXRMb2NhbFBhcnQgKCkgKyAiXCIsIDApO1xuIik7DQoJCSAgICB9DQoJ CSAgICBlbHNlDQoJCSAgICB7DQoNCgkJCWlmIChhcnJheVR5cGUuaXNTaW1wbGVUeXBlICgpKQ0K CQkJewkvL1NpbXBsZVR5cGUgaW4gdGhlIHNjaGVtYSANCgkJCSAgICBjb250YWluZWRUeXBlID0N CgkJCQlDVXRpbHMuZ2V0Y2xhc3M0cW5hbWUgKGFycmF5VHlwZS4NCgkJCQkJCSAgICAgICBnZXRC YXNlVHlwZSAoKSk7DQoJCQkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0IiArIGN1cnJlbnRQYXJh bU5hbWUgKw0KCQkJCQkgICIgPSAoIiArIGN1cnJlbnRQYXJhVHlwZSArDQoJCQkJCSAgIiYpbV9w Q2FsbC0+Z2V0QmFzaWNBcnJheSgiICsNCgkJCQkJICBDVXRpbHMuDQoJCQkJCSAgZ2V0WFNEVHlw ZUZvckJhc2ljVHlwZQ0KCQkJCQkgIChjb250YWluZWRUeXBlKSArICIsIFwiIiArDQoJCQkJCSAg Y3VycmVudFR5cGUuZ2V0RWxlbWVudE5hbWUgKCkuDQoJCQkJCSAgZ2V0TG9jYWxQYXJ0ICgpICsg IlwiLCAwKTtcbiIpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJICAgIGNvbnRhaW5lZFR5cGUg PSBxbmFtZS5nZXRMb2NhbFBhcnQgKCk7DQoJCQkgICAgd3JpdGVyLg0KCQkJCXdyaXRlDQoJCQkJ KCJcdFx0XHRBeGlzX0FycmF5IGFycjIgPSBtX3BDYWxsLT5nZXRDbXBseEFycmF5KCh2b2lkKikg QXhpc19EZVNlcmlhbGl6ZV8iDQoJCQkJICsgY29udGFpbmVkVHlwZSk7DQoJCQkgICAgLy93cml0 ZXIud3JpdGUoIiwgKHZvaWQqKSBBeGlzX0NyZWF0ZV8iK2NvbnRhaW5lZFR5cGUrIiwgKHZvaWQq KSBBeGlzX0RlbGV0ZV8iK2NvbnRhaW5lZFR5cGUrIiwgKHZvaWQqKSBBeGlzX0dldFNpemVfIitj b250YWluZWRUeXBlKyIsIFwiIitjdXJyZW50VHlwZS5nZXRFbGVtZW50TmFtZSgpLmdldExvY2Fs UGFydCgpKyJcIiwgQXhpc19VUklfIitjb250YWluZWRUeXBlKyIpO1xuIik7DQoJCQkgICAgd3Jp dGVyLndyaXRlICgiLCAodm9pZCopIEF4aXNfQ3JlYXRlXyINCgkJCQkJICArIGNvbnRhaW5lZFR5 cGUNCgkJCQkJICArICIsICh2b2lkKikgQXhpc19EZWxldGVfIg0KCQkJCQkgICsgY29udGFpbmVk VHlwZQ0KCQkJCQkgICsgIiwgKHZvaWQqKSBBeGlzX0dldFNpemVfIg0KCQkJCQkgICsgY29udGFp bmVkVHlwZQ0KCQkJCQkgICsgIiwgXCIiDQoJCQkJCSAgKw0KCQkJCQkgIGN1cnJlbnRUeXBlLg0K CQkJCQkgIGdldEVsZW1lbnROYW1lQXNTdHJpbmcgKCkgKw0KCQkJCQkgICJcIiwgQXhpc19VUklf IiArIGNvbnRhaW5lZFR5cGUgKw0KCQkJCQkgICIpO1xuXHRcdFx0IiArIGN1cnJlbnRQYXJhbU5h bWUgKw0KCQkJCQkgICIgPSAoIiArIGN1cnJlbnRQYXJhVHlwZSArDQoJCQkJCSAgIiYpYXJyMjtc biIpOw0KCQkJfQ0KCQkgICAgfQ0KCQl9DQoJCWVsc2UNCgkJew0KDQoJCSAgICBpZiAodHlwZWlz c2ltcGxlKQ0KCQkgICAgew0KCQkJd3JpdGVyLndyaXRlICgiXHRcdFx0Ig0KCQkJCSAgICAgICsg Y3VycmVudFBhcmFtTmFtZQ0KCQkJCSAgICAgICsgIiA9IG1fcENhbGwtPiINCgkJCQkgICAgICAr DQoJCQkJICAgICAgQ1V0aWxzLg0KCQkJCSAgICAgIGdldFBhcmFtZXRlckdldFZhbHVlTWV0aG9k TmFtZQ0KCQkJCSAgICAgIChjdXJyZW50UGFyYVR5cGUsDQoJCQkJICAgICAgIGZhbHNlKSArICIo XCIiICsNCgkJCQkgICAgICBjdXJyZW50VHlwZS5nZXRQYXJhbU5hbWUgKCkgKw0KCQkJCSAgICAg ICJcIiwgMCk7XG4iKTsNCgkJICAgIH0NCgkJICAgIGVsc2UNCgkJICAgIHsNCg0KCQkJaWYgKGN1 cnJlbnRUeXBlLmlzQW55VHlwZSAoKSkNCgkJCXsNCgkJCSAgICAvL2ZvciBhbnlUdHlwZSANCgkJ CSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHQiDQoJCQkJCSAgKyBjdXJyZW50UGFyYW1OYW1lDQoJ CQkJCSAgKyAiID0gKCINCgkJCQkJICArIGN1cnJlbnRQYXJhVHlwZQ0KCQkJCQkgICsgIiopbV9w Q2FsbC0+Z2V0QW55T2JqZWN0KCk7XG4iKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCSAgICAv L3dyaXRlci53cml0ZSgiXHRcdFx0IiArIGN1cnJlbnRQYXJhbU5hbWUgKyAiID0gKCIrY3VycmVu dFBhcmFUeXBlKyIqKW1fcENhbGwtPmdldENtcGx4T2JqZWN0KCh2b2lkKikgQXhpc19EZVNlcmlh bGl6ZV8iK2N1cnJlbnRQYXJhVHlwZSsiLCAodm9pZCopIEF4aXNfQ3JlYXRlXyIrY3VycmVudFBh cmFUeXBlKyIsICh2b2lkKikgQXhpc19EZWxldGVfIitjdXJyZW50UGFyYVR5cGUrIixcIiIrY3Vy cmVudFR5cGUuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKSsiXCIsIDApO1xuIik7IA0K CQkJICAgIC8vU2FtaXNhIDIyLzA4LzIwMDQNCgkJCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHQi DQoJCQkJCSAgKyBjdXJyZW50UGFyYW1OYW1lDQoJCQkJCSAgKyAiID0gKCINCgkJCQkJICArIGN1 cnJlbnRQYXJhVHlwZQ0KCQkJCQkgICsNCgkJCQkJICAiKiltX3BDYWxsLT5nZXRDbXBseE9iamVj dCgodm9pZCopIEF4aXNfRGVTZXJpYWxpemVfIg0KCQkJCQkgICsgY3VycmVudFBhcmFUeXBlICsN CgkJCQkJICAiLCAodm9pZCopIEF4aXNfQ3JlYXRlXyIgKw0KCQkJCQkgIGN1cnJlbnRQYXJhVHlw ZSArDQoJCQkJCSAgIiwgKHZvaWQqKSBBeGlzX0RlbGV0ZV8iICsNCgkJCQkJICBjdXJyZW50UGFy YVR5cGUgKyAiLFwiIiArDQoJCQkJCSAgY3VycmVudFR5cGUuDQoJCQkJCSAgZ2V0RWxlbWVudE5h bWVBc1N0cmluZyAoKSArDQoJCQkJCSAgIlwiLCAwKTtcbiIpOw0KCQkJICAgIC8vU2FtaXNhDQoJ CQl9DQoJCSAgICB9DQoJCX0NCgkgICAgfQ0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0fVxuIik7 DQoJICAgIHdyaXRlci53cml0ZSAoIlx0fVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0bV9w Q2FsbC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgl9DQoJZWxzZQ0KCXsNCgkgICAgaWYgKHJldHVy bnR5cGUgPT0gbnVsbCkNCgkgICAgew0KCQlpZiAobWluZm8uZ2V0T3V0cHV0TWVzc2FnZSAoKSAh PSBudWxsKQ0KCQl7DQoJCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHQvKm5vdCBzdWNjZXNzZnVs Ki9cblx0XHR9XG4iKTsNCgkJfQ0KCQl3cml0ZXIud3JpdGUgKCJcdH1cbiIpOw0KCQl3cml0ZXIu d3JpdGUgKCJcdG1fcENhbGwtPnVuSW5pdGlhbGl6ZSgpO1xuIik7DQoJCS8vd3JpdGVyLndyaXRl KCJcdH1cblx0bV9wQ2FsbC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgkgICAgfQ0KCSAgICBlbHNl DQoJICAgIHsNCg0KCQlpZiAocmV0dXJudHlwZWlzYXJyYXkpDQoJCXsNCgkJICAgIFFOYW1lIHFu YW1lID0NCgkJCVdyYXBwZXJVdGlscy5nZXRBcnJheVR5cGUgKHJldFR5cGUpLmdldE5hbWUgKCk7 DQoJCSAgICBTdHJpbmcgY29udGFpbmVkVHlwZSA9IG51bGw7DQoJCSAgICBpZiAoQ1V0aWxzLmlz U2ltcGxlVHlwZSAocW5hbWUpKQ0KCQkgICAgew0KCQkJY29udGFpbmVkVHlwZSA9IENVdGlscy5n ZXRjbGFzczRxbmFtZSAocW5hbWUpOw0KCQkJd3JpdGVyLndyaXRlICgiXHRSZXRBcnJheSA9ICgi DQoJCQkJICAgICAgKyBvdXRwYXJhbVR5cGUNCgkJCQkgICAgICArICImKW1fcENhbGwtPmdldEJh c2ljQXJyYXkoIg0KCQkJCSAgICAgICsNCgkJCQkgICAgICBDVXRpbHMuDQoJCQkJICAgICAgZ2V0 WFNEVHlwZUZvckJhc2ljVHlwZSAoY29udGFpbmVkVHlwZSkgKw0KCQkJCSAgICAgICIsIFwiIiAr DQoJCQkJICAgICAgcmV0dXJudHlwZS5nZXRFbGVtZW50TmFtZSAoKS4NCgkJCQkgICAgICBnZXRM b2NhbFBhcnQgKCkgKyAiXCIsIDApO1xuXHRcdH1cbiIpOw0KCQkgICAgfQ0KCQkgICAgZWxzZQ0K CQkgICAgew0KCQkJY29udGFpbmVkVHlwZSA9IHFuYW1lLmdldExvY2FsUGFydCAoKTsNCgkJCXdy aXRlci4NCgkJCSAgICB3cml0ZQ0KCQkJICAgICgiXHRBeGlzX0FycmF5IGFycjIgPSBtX3BDYWxs LT5nZXRDbXBseEFycmF5KCh2b2lkKikgQXhpc19EZVNlcmlhbGl6ZV8iDQoJCQkgICAgICsgY29u dGFpbmVkVHlwZSk7DQoJCQkvL3dyaXRlci53cml0ZSgiLCAodm9pZCopIEF4aXNfQ3JlYXRlXyIr Y29udGFpbmVkVHlwZSsiLCAodm9pZCopIEF4aXNfRGVsZXRlXyIrY29udGFpbmVkVHlwZSsiLCAo dm9pZCopIEF4aXNfR2V0U2l6ZV8iK2NvbnRhaW5lZFR5cGUrIiwgXCIiK3JldHVybnR5cGUuZ2V0 RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKSsiXCIsIEF4aXNfVVJJXyIrY29udGFpbmVkVHlw ZSsiKTtcblx0XHR9XG4iKTsNCgkJCXdyaXRlci53cml0ZSAoIiwgKHZvaWQqKSBBeGlzX0NyZWF0 ZV8iDQoJCQkJICAgICAgKyBjb250YWluZWRUeXBlDQoJCQkJICAgICAgKyAiLCAodm9pZCopIEF4 aXNfRGVsZXRlXyINCgkJCQkgICAgICArIGNvbnRhaW5lZFR5cGUNCgkJCQkgICAgICArICIsICh2 b2lkKikgQXhpc19HZXRTaXplXyINCgkJCQkgICAgICArIGNvbnRhaW5lZFR5cGUNCgkJCQkgICAg ICArICIsIFwiIg0KCQkJCSAgICAgICsgcmV0dXJudHlwZS5nZXRFbGVtZW50TmFtZUFzU3RyaW5n ICgpDQoJCQkJICAgICAgKyAiXCIsIEF4aXNfVVJJXyINCgkJCQkgICAgICArIGNvbnRhaW5lZFR5 cGUNCgkJCQkgICAgICArICIpO1xuXHRcdFx0UmV0QXJyYXkgPSAoIg0KCQkJCSAgICAgICsgb3V0 cGFyYW1UeXBlICsgIiYpYXJyMjtcblx0XHR9XG4iKTsNCgkJICAgIH0NCgkJICAgIHdyaXRlci53 cml0ZSAoIlx0fVxuIik7DQoJCSAgICB3cml0ZXIud3JpdGUgKCJcdG1fcENhbGwtPnVuSW5pdGlh bGl6ZSgpO1xuIik7DQoJCSAgICAvLyAgICAgICAgd3JpdGVyLndyaXRlKCJcdH1cblx0bV9wQ2Fs bC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgkJICAgIHdyaXRlci53cml0ZSAoIlx0cmV0dXJuIFJl dEFycmF5O1xuIik7DQoJCX0NCgkJZWxzZQ0KCQl7DQoNCgkJICAgIGlmIChyZXR1cm50eXBlaXNz aW1wbGUpDQoJCSAgICB7DQoJCQlpZiAocmV0dXJudHlwZS5pc05pbGxhYmxlICgpKQ0KCQkJew0K CQkJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFJldCA9IG1fcENhbGwtPiINCgkJCQkJICArDQoJ CQkJCSAgQ1V0aWxzLg0KCQkJCQkgIGdldFBhcmFtZXRlckdldFZhbHVlTWV0aG9kTmFtZQ0KCQkJ CQkgIChvdXRwYXJhbVR5cGUsDQoJCQkJCSAgIGZhbHNlKSArICIoXCIiICsNCgkJCQkJICByZXR1 cm50eXBlLmdldFBhcmFtTmFtZSAoKSArDQoJCQkJCSAgIlwiLCAwKTtcblx0XHR9XG4iKTsNCgkJ CX0NCgkJCWVsc2UNCgkJCXsNCgkJCSAgICBpZiAob3V0cGFyYW1UeXBlLmVxdWFscyAoInhzZF9f c3RyaW5nIikNCgkJCQl8fCBvdXRwYXJhbVR5cGUuZXF1YWxzICgieHNkX19hbnlVUkkiKQ0KCQkJ CXx8IG91dHBhcmFtVHlwZS5lcXVhbHMgKCJ4c2RfX1FOYW1lIikNCgkJCQl8fCBvdXRwYXJhbVR5 cGUuZXF1YWxzICgieHNkX19ub3RhdGlvbiIpKQ0KCQkJICAgIHsNCgkJCQl3cml0ZXIud3JpdGUg KCJcdFx0XHQiICsgb3V0cGFyYW1UeXBlICsNCgkJCQkJICAgICAgIiBwUmV0dXJuID0gbV9wQ2Fs bC0+IiArDQoJCQkJCSAgICAgIENVdGlscy4NCgkJCQkJICAgICAgZ2V0UGFyYW1ldGVyR2V0VmFs dWVNZXRob2ROYW1lDQoJCQkJCSAgICAgIChvdXRwYXJhbVR5cGUsDQoJCQkJCSAgICAgICBmYWxz ZSkgKyAiKFwiIiArDQoJCQkJCSAgICAgIHJldHVybnR5cGUuZ2V0UGFyYW1OYW1lICgpICsNCgkJ CQkJICAgICAgIlwiLCAwKTtcbiIpOw0KCQkJCXdyaXRlci53cml0ZSAoIlx0XHRcdGlmKHBSZXR1 cm4pXG4iKTsNCgkJCQl3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFJldCA9IHBSZXR1cm47XG4iKTsN CgkJCSAgICB9DQoJCQkgICAgZWxzZQ0KCQkJICAgIHsNCgkJCQl3cml0ZXIud3JpdGUgKCJcdFx0 XHQiICsgb3V0cGFyYW1UeXBlICsNCgkJCQkJICAgICAgIiAqIHBSZXR1cm4gPSBtX3BDYWxsLT4i ICsNCgkJCQkJICAgICAgQ1V0aWxzLg0KCQkJCQkgICAgICBnZXRQYXJhbWV0ZXJHZXRWYWx1ZU1l dGhvZE5hbWUNCgkJCQkJICAgICAgKG91dHBhcmFtVHlwZSwNCgkJCQkJICAgICAgIGZhbHNlKSAr ICIoXCIiICsNCgkJCQkJICAgICAgcmV0dXJudHlwZS5nZXRQYXJhbU5hbWUgKCkgKw0KCQkJCQkg ICAgICAiXCIsIDApO1xuIik7DQoJCQkJd3JpdGVyLndyaXRlICgiXHRcdFx0aWYocFJldHVybilc biIpOw0KCQkJCXdyaXRlci53cml0ZSAoIlx0XHRcdFx0UmV0ID0gKnBSZXR1cm47XG4iKTsNCgkJ CSAgICB9DQoJCQkgICAgLy8gVE9ETyBJZiB3ZSB1bmV4cGVjdGVkbHkgcmVjZWl2ZSBhIG5pbGwg dmFsdWUsIHdoZW4gbmlsbGFibGU9ImZhbHNlIiB3ZSBzaG91bGQgZG8gc29tZXRoaW5nIGFwcHJv cHJpYXRlLCBwZXJoYXBzIGFzIGJlbG93Og0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3cml0ZXIud3JpdGUoIlx0XHRcdGVsc2UiKTsNCi8vICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd3JpdGVyLndyaXRlKCJcdFx0XHRcdHRocm93IG5ldyBFeGNlcHRpb24oXCJVbmV4cGVj dGVkIHVzZSBvZiBuaWxsXCIpOyIpOw0KCQkJICAgIHdyaXRlci53cml0ZSAoIlx0XHR9XG4iKTsN Cg0KCQkJfQ0KCQkJd3JpdGVyLndyaXRlICgiXHR9XG4iKTsNCgkJCXdyaXRlci53cml0ZSAoIlx0 bV9wQ2FsbC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgkJCS8vICAgICAgICAgICAgd3JpdGVyLndy aXRlKCJcdH1cblx0bV9wQ2FsbC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgkJCXdyaXRlci53cml0 ZSAoIlx0cmV0dXJuIFJldDtcbiIpOw0KCQkgICAgfQ0KCQkgICAgZWxzZQ0KCQkgICAgew0KDQoJ CQlpZiAocmV0dXJudHlwZS5pc0FueVR5cGUgKCkpDQoJCQl7DQoJCQkgICAgLy9mb3IgYW55VHR5 cGUgDQoJCQkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0cFJldHVybiA9ICgiDQoJCQkJCSAgKyBv dXRwYXJhbVR5cGUNCgkJCQkJICArDQoJCQkJCSAgIiopbV9wQ2FsbC0+Z2V0QW55T2JqZWN0KCk7 XG5cdFx0fVxuIik7DQoJCQkgICAgd3JpdGVyLndyaXRlICgiXHR9XG4iKTsNCgkJCSAgICB3cml0 ZXIud3JpdGUgKCJcdG1fcENhbGwtPnVuSW5pdGlhbGl6ZSgpO1xuIik7DQoJCQkgICAgLy8gICAg ICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJcdH1cblx0bV9wQ2FsbC0+dW5Jbml0aWFsaXplKCk7 XG4iKTsNCgkJCSAgICB3cml0ZXIud3JpdGUgKCJcdHJldHVybiBwUmV0dXJuO1xuIik7DQoJCQl9 DQoJCQllbHNlDQoJCQl7DQoJCQkgICAgLy93cml0ZXIud3JpdGUoIlx0XHRcdHBSZXR1cm4gPSAo IitvdXRwYXJhbVR5cGUrIiopbV9wQ2FsbC0+Z2V0Q21wbHhPYmplY3QoKHZvaWQqKSBBeGlzX0Rl U2VyaWFsaXplXyIrb3V0cGFyYW1UeXBlKyIsICh2b2lkKikgQXhpc19DcmVhdGVfIitvdXRwYXJh bVR5cGUrIiwgKHZvaWQqKSBBeGlzX0RlbGV0ZV8iK291dHBhcmFtVHlwZSsiLFwiIityZXR1cm50 eXBlLmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkrIlwiLCAwKTtcblx0XHR9XG4iKTsg DQoJCQkgICAgLy9TYW1pc2EgMjIvMDgvMjAwNA0KCQkJICAgIHdyaXRlci53cml0ZSAoIlx0XHRc dHBSZXR1cm4gPSAoIg0KCQkJCQkgICsgb3V0cGFyYW1UeXBlDQoJCQkJCSAgKw0KCQkJCQkgICIq KW1fcENhbGwtPmdldENtcGx4T2JqZWN0KCh2b2lkKikgQXhpc19EZVNlcmlhbGl6ZV8iDQoJCQkJ CSAgKyBvdXRwYXJhbVR5cGUgKw0KCQkJCQkgICIsICh2b2lkKikgQXhpc19DcmVhdGVfIiArDQoJ CQkJCSAgb3V0cGFyYW1UeXBlICsNCgkJCQkJICAiLCAodm9pZCopIEF4aXNfRGVsZXRlXyIgKw0K CQkJCQkgIG91dHBhcmFtVHlwZSArICIsXCIiICsNCgkJCQkJICByZXR1cm50eXBlLg0KCQkJCQkg IGdldEVsZW1lbnROYW1lQXNTdHJpbmcgKCkgKw0KCQkJCQkgICJcIiwgMCk7XG5cdFx0fVxuIik7 DQoJCQkgICAgLy9TYW1pc2ENCgkJCSAgICB3cml0ZXIud3JpdGUgKCJcdH1cbiIpOw0KCQkJICAg IHdyaXRlci53cml0ZSAoIlx0bV9wQ2FsbC0+dW5Jbml0aWFsaXplKCk7XG4iKTsNCgkJCSAgICAv LyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIlx0fVxuXHRtX3BDYWxsLT51bkluaXRpYWxp emUoKTtcbiIpOw0KCQkJICAgIHdyaXRlci53cml0ZSAoIlx0cmV0dXJuIHBSZXR1cm47XG4iKTsN CgkJCX0NCgkJICAgIH0NCgkJfQ0KCSAgICB9DQoJfQ0KCS8vYWRkZWQgYnkgbml0aHlhDQoNCgl3 cml0ZXIud3JpdGUgKCJcdH1cbiIpOw0KCXdyaXRlci53cml0ZSAoIlx0Y2F0Y2goQXhpc0V4Y2Vw dGlvbiYgZSlcblx0e1xuIik7DQoJd3JpdGVyLndyaXRlICgiXHRcdGludCBpRXhjZXB0aW9uQ29k ZSA9IGUuZ2V0RXhjZXB0aW9uQ29kZSgpO1xuIik7DQoJd3JpdGVyLg0KCSAgICB3cml0ZQ0KCSAg ICAoIlx0XHRpZihBWElTQ19OT0RFX1ZBTFVFX01JU01BVENIX0VYQ0VQVElPTiAhPSBpRXhjZXB0 aW9uQ29kZSlcbiIpOw0KCXdyaXRlci53cml0ZSAoIlx0XHR7XG4iKTsNCgl3cml0ZXIud3JpdGUg KCJcdFx0XHR0aHJvdztcbiIpOw0KCXdyaXRlci53cml0ZSAoIlx0XHR9XG4iKTsNCgl3cml0ZXIu d3JpdGUgKCJcdFx0SVNvYXBGYXVsdCogcFNvYXBGYXVsdCA9IChJU29hcEZhdWx0KilcbiIpOw0K CXdyaXRlci53cml0ZSAoIlx0XHRcdG1fcENhbGwtPmNoZWNrRmF1bHQoXCJGYXVsdFwiLFwiIg0K CQkgICAgICArIHdzY29udGV4dC5nZXRXcmFwSW5mbyAoKS5nZXRUYXJnZXRFbmRwb2ludFVSSSAo KQ0KCQkgICAgICArICJcIiApO1xuIik7DQoJd3JpdGVyLndyaXRlICgiXHRcdGlmKHBTb2FwRmF1 bHQpXG4iKTsNCgl3cml0ZXIud3JpdGUgKCJcdFx0e1xuIik7DQoNCgkvL3RvIGdldCBmYXVsdCBp bmZvICAgICAgICAgICAgIA0KCUl0ZXJhdG9yIHBhcmFtc0ZhdWx0ID0gbWluZm8uZ2V0RmF1bHRU eXBlICgpLml0ZXJhdG9yICgpOw0KCVN0cmluZyBmYXVsdEluZm9OYW1lID0gbnVsbDsNCglTdHJp bmcgZmF1bHRUeXBlID0gbnVsbDsNCglTdHJpbmcgbGFuZ05hbWUgPSBudWxsOw0KCVN0cmluZyBw YXJhbU5hbWUgPSBudWxsOw0KCWJvb2xlYW4gZmxhZyA9IGZhbHNlOw0KCWludCBqID0gMDsNCglp ZiAoIXBhcmFtc0ZhdWx0Lmhhc05leHQgKCkpDQoJew0KCSAgICB3cml0ZXIuDQoJCXdyaXRlDQoJ CSgiXHRcdFx0XHRjb25zdCBjaGFyICpkZXRhaWwgPSBwU29hcEZhdWx0LT5nZXRTaW1wbGVGYXVs dERldGFpbCgpO1xuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0Ym9vbCBkZWxldGVE ZXRhaWw9ZmFsc2U7XG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0XHRpZiAoTlVMTD09 ZGV0YWlsIHx8IDA9PXN0cmxlbihkZXRhaWwpKVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0 XHRcdFx0e1xuIik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUgKCJcdFx0XHRcdFx0ZGV0YWlsPW1f cENhbGwtPmdldEZhdWx0QXNYTUxTdHJpbmcoKTtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJc dFx0XHRcdFx0aWYgKE5VTEw9PWRldGFpbClcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0 XHRcdFx0XHRkZXRhaWw9XCJcIjtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFx0 ZWxzZVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0XHRcdGRlbGV0ZURldGFpbD10 cnVlO1xuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0fVxuIik7DQoJICAgIHdyaXRl ci4NCgkJd3JpdGUNCgkJKCJcdFx0XHRcdE90aGVyRmF1bHRFeGNlcHRpb24gb2ZlKHBTb2FwRmF1 bHQtPmdldEZhdWx0Y29kZSgpLFxuIik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUNCgkJKCJcdFx0 XHRcdFx0cFNvYXBGYXVsdC0+Z2V0RmF1bHRzdHJpbmcoKSwgcFNvYXBGYXVsdC0+Z2V0RmF1bHRh Y3RvcigpLFxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0XHRkZXRhaWwsIGlFeGNl cHRpb25Db2RlKTtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdGlmIChkZWxldGVE ZXRhaWwgJiYgTlVMTCE9ZGV0YWlsKVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0 XHRkZWxldGUgW10gY29uc3RfY2FzdDxjaGFyKj4oZGV0YWlsKTtcbiIpOw0KCSAgICB3cml0ZXIu d3JpdGUgKCJcdFx0XHRcdG1fcENhbGwtPnVuSW5pdGlhbGl6ZSgpO1xuIik7DQoJICAgIHdyaXRl ci53cml0ZSAoIlx0XHRcdFx0dGhyb3cgb2ZlO1xuIik7DQoJfQ0KCWVsc2UNCgl7DQoJICAgIGZs YWcgPSB0cnVlOw0KCSAgICB3cml0ZXIuDQoJCXdyaXRlDQoJCSgiXHRcdFx0cGNDbXBseEZhdWx0 TmFtZSA9IHBTb2FwRmF1bHQtPmdldENtcGx4RmF1bHRPYmplY3ROYW1lKCk7XG4iKTsNCgl9DQoJ d2hpbGUgKHBhcmFtc0ZhdWx0Lmhhc05leHQgKCkpDQoJew0KCSAgICBqID0gaiArIDE7DQoJICAg IEZhdWx0SW5mbyBpbmZvID0gKEZhdWx0SW5mbykgcGFyYW1zRmF1bHQubmV4dCAoKTsNCgkgICAg ZmF1bHRJbmZvTmFtZSA9IGluZm8uZ2V0RmF1bHRJbmZvICgpOw0KDQoJICAgIC8vIEZKUCAtIEQw MDA0ID4gTG9va2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSAnZXJy b3InIHBhcnQgb2YNCgkgICAgLy8gICAgICAgICAgICAgICB0aGUgZmF1bHQgbWVzc2FnZS4gIElm IGZvdW5kLCB1cGRhdGUgdGhlIGZhdWx0SW5mb05hbWUgd2l0aCB0aGUNCgkgICAgLy8gICAgICAg ICAgICAgICAnbG9jYWxuYW1lJyBvZiB0aGUgcW5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4gICAgICAg ICAgICAgICAgICAgICAgICAgDQoJICAgIEl0ZXJhdG9yIGluZm9BcnJheUxpc3RJdGVyYXRvciA9 IGluZm8uZ2V0UGFyYW1zICgpLml0ZXJhdG9yICgpOw0KCSAgICBib29sZWFuIGZvdW5kID0gZmFs c2U7DQoNCgkgICAgd2hpbGUgKGluZm9BcnJheUxpc3RJdGVyYXRvci5oYXNOZXh0ICgpICYmICFm b3VuZCkNCgkgICAgew0KCQlQYXJhbWV0ZXJJbmZvIHBhcmFtSW5mbyA9DQoJCSAgICAoUGFyYW1l dGVySW5mbykgaW5mb0FycmF5TGlzdEl0ZXJhdG9yLm5leHQgKCk7DQoNCgkJaWYgKHBhcmFtSW5m byAhPSBudWxsKQ0KCQl7DQoJCSAgICBpZiAoImVycm9yIi5lcXVhbHMgKHBhcmFtSW5mby5nZXRQ YXJhbU5hbWUgKCkpKQ0KCQkgICAgew0KCQkJZmF1bHRJbmZvTmFtZSA9DQoJCQkgICAgcGFyYW1J bmZvLmdldEVsZW1lbnROYW1lICgpLmdldExvY2FsUGFydCAoKTsNCg0KCQkJZm91bmQgPSB0cnVl Ow0KCQkgICAgfQ0KCQl9DQoJICAgIH0NCgkgICAgLy8gRkpQIC0gRDAwMDQgPCAgICAgICAgICAg ICAgICAgICAgICAgICAgICANCg0KCSAgICBBcnJheUxpc3QgcGFyYW1JbmZvID0gaW5mby5nZXRQ YXJhbXMgKCk7DQoJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1JbmZvLnNpemUgKCk7IGkr KykNCgkgICAgew0KCQlQYXJhbWV0ZXJJbmZvIHBhciA9IChQYXJhbWV0ZXJJbmZvKSBwYXJhbUlu Zm8uZ2V0IChpKTsNCgkJcGFyYW1OYW1lID0gcGFyLmdldFBhcmFtTmFtZSAoKTsNCgkJbGFuZ05h bWUgPSBwYXIuZ2V0TGFuZ05hbWUgKCk7DQoJCWZhdWx0VHlwZSA9DQoJCSAgICBXcmFwcGVyVXRp bHMuDQoJCSAgICBnZXRDbGFzc05hbWVGcm9tUGFyYW1JbmZvQ29uc2lkZXJpbmdBcnJheXMgKHBh ciwNCgkJCQkJCQkJd3Njb250ZXh0KTsNCgkJaWYgKGogPiAxKQ0KCQl7DQoJCSAgICB3cml0ZXIu d3JpdGUgKCJcdFx0XHRlbHNlIGlmIik7DQoJCSAgICB3cml0ZUV4Y2VwdGlvbnMgKGZhdWx0VHlw ZSwNCgkJCQkgICAgIGZhdWx0SW5mb05hbWUsIHBhcmFtTmFtZSwgbGFuZ05hbWUpOw0KCQl9DQoJ CWVsc2UNCgkJew0KCQkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0aWYiKTsNCgkJICAgIHdyaXRl RXhjZXB0aW9ucyAoZmF1bHRUeXBlLA0KCQkJCSAgICAgZmF1bHRJbmZvTmFtZSwgcGFyYW1OYW1l LCBsYW5nTmFtZSk7DQoJCX0NCgkgICAgfQ0KCX0NCglpZiAoZmxhZyA9PSB0cnVlKQ0KCXsNCgkg ICAgd3JpdGVyLndyaXRlICgiXHRcdFx0ZWxzZVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0 XHRcdHtcbiIpOw0KCSAgICB3cml0ZXIuDQoJCXdyaXRlDQoJCSgiXHRcdFx0XHRjb25zdCBjaGFy ICpkZXRhaWwgPSBwU29hcEZhdWx0LT5nZXRTaW1wbGVGYXVsdERldGFpbCgpO1xuIik7DQoJICAg IHdyaXRlci53cml0ZSAoIlx0XHRcdFx0Ym9vbCBkZWxldGVEZXRhaWw9ZmFsc2U7XG4iKTsNCgkg ICAgd3JpdGVyLndyaXRlICgiXHRcdFx0XHRpZiAoTlVMTD09ZGV0YWlsIHx8IDA9PXN0cmxlbihk ZXRhaWwpKVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0e1xuIik7DQoJICAgIHdy aXRlci4NCgkJd3JpdGUgKCJcdFx0XHRcdFx0ZGV0YWlsPW1fcENhbGwtPmdldEZhdWx0QXNYTUxT dHJpbmcoKTtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFx0aWYgKE5VTEw9PWRl dGFpbClcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFx0XHRkZXRhaWw9XCJcIjtc biIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFx0ZWxzZVxuIik7DQoJICAgIHdyaXRl ci53cml0ZSAoIlx0XHRcdFx0XHRcdGRlbGV0ZURldGFpbD10cnVlO1xuIik7DQoJICAgIHdyaXRl ci53cml0ZSAoIlx0XHRcdFx0fVxuIik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUNCgkJKCJcdFx0 XHRcdE90aGVyRmF1bHRFeGNlcHRpb24gb2ZlKHBTb2FwRmF1bHQtPmdldEZhdWx0Y29kZSgpLFxu Iik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUNCgkJKCJcdFx0XHRcdFx0cFNvYXBGYXVsdC0+Z2V0 RmF1bHRzdHJpbmcoKSwgcFNvYXBGYXVsdC0+Z2V0RmF1bHRhY3RvcigpLFxuIik7DQoJICAgIHdy aXRlci53cml0ZSAoIlx0XHRcdFx0XHRkZXRhaWwsIGlFeGNlcHRpb25Db2RlKTtcbiIpOw0KCSAg ICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdGlmIChkZWxldGVEZXRhaWwgJiYgTlVMTCE9ZGV0YWls KVxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0XHRkZWxldGUgW10gY29uc3RfY2Fz dDxjaGFyKj4oZGV0YWlsKTtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdG1fcENh bGwtPnVuSW5pdGlhbGl6ZSgpO1xuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0dGhy b3cgb2ZlO1xuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdH1cbiIpOw0KCX0NCgl3cml0 ZXIud3JpdGUgKCJcdFx0fVxuIik7DQoJd3JpdGVyLndyaXRlICgiXHRcdGVsc2UgdGhyb3c7XG4i KTsNCgl3cml0ZXIud3JpdGUgKCJcdH1cbiIpOw0KCXdyaXRlci53cml0ZSAoIn1cbiIpOw0KICAg IH0NCg0KICAgIHByaXZhdGUgdm9pZCB3cml0ZUV4Y2VwdGlvbnMgKFN0cmluZyBmYXVsdHR5cGUs DQoJCQkJICBTdHJpbmcgZmF1bHRJbmZvTmFtZSwNCgkJCQkgIFN0cmluZyBwYXJhbU5hbWUsDQoJ CQkJICBTdHJpbmcgbGFuZ05hbWUpIHRocm93cyBXcmFwcGVyRmF1bHQNCiAgICB7DQoJdHJ5DQoJ ew0KCSAgICB3cml0ZXIud3JpdGUgKCIoMCA9PSBzdHJjbXAoXCIiICsgZmF1bHRJbmZvTmFtZSAr DQoJCQkgICJcIiwgcGNDbXBseEZhdWx0TmFtZSkpXG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgi XHRcdFx0e1xuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0IiArIGZhdWx0dHlwZSAr ICIgcEZhdWx0RGV0YWlsID0gXG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0XHRcdCgi ICsgZmF1bHR0eXBlICsNCgkJCSAgIilwU29hcEZhdWx0LT5nZXRDbXBseEZhdWx0T2JqZWN0KFxu Iik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0XHRcdFx0XHRcdCh2b2lkKikgQXhpc19EZVNlcmlh bGl6ZV8iICsgbGFuZ05hbWUgKw0KCQkJICAiLFxuIik7DQoJICAgIHdyaXRlci53cml0ZSAoIlx0 XHRcdFx0XHRcdCh2b2lkKikgQXhpc19DcmVhdGVfIiArIGxhbmdOYW1lICsNCgkJCSAgIixcbiIp Ow0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdFx0XHQodm9pZCopIEF4aXNfRGVsZXRlXyIg KyBsYW5nTmFtZSArDQoJCQkgICIsXG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0XHRc dFx0XCIiICsgZmF1bHRJbmZvTmFtZSArICJcIixcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJc dFx0XHRcdFx0XHQwKTtcblxuIik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUNCgkJKCJcdFx0XHRc dHBGYXVsdERldGFpbC0+c2V0RmF1bHRDb2RlKHBTb2FwRmF1bHQtPmdldEZhdWx0Y29kZSgpKTtc biIpOw0KCSAgICB3cml0ZXIuDQoJCXdyaXRlDQoJCSgiXHRcdFx0XHRwRmF1bHREZXRhaWwtPnNl dEZhdWx0U3RyaW5nKHBTb2FwRmF1bHQtPmdldEZhdWx0c3RyaW5nKCkpO1xuIik7DQoJICAgIHdy aXRlci4NCgkJd3JpdGUNCgkJKCJcdFx0XHRcdHBGYXVsdERldGFpbC0+c2V0RmF1bHRBY3Rvcihw U29hcEZhdWx0LT5nZXRGYXVsdGFjdG9yKCkpO1xuIik7DQoJICAgIHdyaXRlci4NCgkJd3JpdGUN CgkJKCJcdFx0XHRcdHBGYXVsdERldGFpbC0+c2V0RXhjZXB0aW9uQ29kZShlLmdldEV4Y2VwdGlv bkNvZGUoKSk7XG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0XHRtX3BDYWxsLT51bklu aXRpYWxpemUoKTtcbiIpOw0KCSAgICB3cml0ZXIud3JpdGUgKCJcdFx0XHRcdHRocm93ICpwRmF1 bHREZXRhaWw7XG4iKTsNCgkgICAgd3JpdGVyLndyaXRlICgiXHRcdFx0fVxuIik7DQoJfQ0KCWNh dGNoIChJT0V4Y2VwdGlvbiBlKQ0KCXsNCgkgICAgdGhyb3cgbmV3IFdyYXBwZXJGYXVsdCAoZSk7 DQoJfQ0KICAgIH0NCg0KICAgIC8qIChub24tSmF2YWRvYykNCiAgICAgKiBAc2VlIG9yZy5hcGFj aGUuYXhpcy53c2RsLndzZGwyd3MuY3BwLkNQUENsYXNzV3JpdGVyI3dyaXRlR2xvYmFsQ29kZXMo KQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlR2xvYmFsQ29kZXMgKCkgdGhyb3dz IFdyYXBwZXJGYXVsdA0KICAgIHsNCglJdGVyYXRvciB0eXBlcyA9IHdzY29udGV4dC5nZXRUeXBl bWFwICgpLmdldFR5cGVzICgpLml0ZXJhdG9yICgpOw0KCUhhc2hTZXQgdHlwZVNldCA9IG5ldyBI YXNoU2V0ICgpOw0KCVN0cmluZyB0eXBlTmFtZTsNCglUeXBlIHR5cGU7DQoJICB0cnkNCgl7DQoJ ICAgIHdoaWxlICh0eXBlcy5oYXNOZXh0ICgpKQ0KCSAgICB7DQoJCXR5cGUgPSAoVHlwZSkgdHlw ZXMubmV4dCAoKTsNCgkJaWYgKHR5cGUuaXNTaW1wbGVUeXBlICgpKQ0KCQl7DQoJCSAgICBjb250 aW51ZTsNCgkJfQ0KCQlpZiAodHlwZS5pc0FycmF5ICgpKQ0KCQl7DQoJCSAgICBjb250aW51ZTsN CgkJfQ0KCQl0eXBlTmFtZSA9IHR5cGUuZ2V0TGFuZ3VhZ2VTcGVjaWZpY05hbWUgKCk7DQoJCWlm ICh0eXBlTmFtZS5zdGFydHNXaXRoICgiPiIpKQ0KCQl7DQoJCSAgICBjb250aW51ZTsNCgkJfQ0K CQl0eXBlU2V0LmFkZCAodHlwZU5hbWUpOw0KCSAgICB9DQoJICAgIEl0ZXJhdG9yIGl0ciA9IHR5 cGVTZXQuaXRlcmF0b3IgKCk7DQoJICAgIHdoaWxlIChpdHIuaGFzTmV4dCAoKSkNCgkgICAgew0K CQl0eXBlTmFtZSA9IGl0ci5uZXh0ICgpLnRvU3RyaW5nICgpOw0KCQl3cml0ZXIud3JpdGUgKCJl eHRlcm4gaW50IEF4aXNfRGVTZXJpYWxpemVfIg0KCQkJICAgICAgKyB0eXBlTmFtZQ0KCQkJICAg ICAgKyAiKCINCgkJCSAgICAgICsgdHlwZU5hbWUNCgkJCSAgICAgICsgIiogcGFyYW0sIElXcmFw cGVyU29hcERlU2VyaWFsaXplciogcERaKTtcbiIpOw0KCQl3cml0ZXIud3JpdGUgKCJleHRlcm4g dm9pZCogQXhpc19DcmVhdGVfIg0KCQkJICAgICAgKyB0eXBlTmFtZQ0KCQkJICAgICAgKyAiKCIN CgkJCSAgICAgICsgdHlwZU5hbWUNCgkJCSAgICAgICsNCgkJCSAgICAgICIgKk9iaiwgYm9vbCBi QXJyYXkgPSBmYWxzZSwgaW50IG5TaXplPTApO1xuIik7DQoJCXdyaXRlci53cml0ZSAoImV4dGVy biB2b2lkIEF4aXNfRGVsZXRlXyIgKyB0eXBlTmFtZSArICIoIiArDQoJCQkgICAgICB0eXBlTmFt ZSArDQoJCQkgICAgICAiKiBwYXJhbSwgYm9vbCBiQXJyYXkgPSBmYWxzZSwgaW50IG5TaXplPTAp O1xuIik7DQoJCXdyaXRlci53cml0ZSAoImV4dGVybiBpbnQgQXhpc19TZXJpYWxpemVfIiArIHR5 cGVOYW1lICsgIigiICsNCgkJCSAgICAgIHR5cGVOYW1lICsNCgkJCSAgICAgICIqIHBhcmFtLCBJ V3JhcHBlclNvYXBTZXJpYWxpemVyKiBwU1osIGJvb2wgYkFycmF5ID0gZmFsc2UpO1xuIik7DQoJ CXdyaXRlci53cml0ZSAoImV4dGVybiBpbnQgQXhpc19HZXRTaXplXyIgKyB0eXBlTmFtZSArDQoJ CQkgICAgICAiKCk7XG5cbiIpOw0KCSAgICB9DQoJfQ0KCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQ0K CXsNCgkgICAgdGhyb3cgbmV3IFdyYXBwZXJGYXVsdCAoZSk7DQoJfQ0KICAgIH0NCn0NCg== --0__=0FBBE558DFCF12388f9e8a93df938690918c0FBBE558DFCF1238--