Re: xalan usage in taglibs

Matthew Broadhead <[email protected]> Fri, 8 Dec 2017 12:58:22 +0100
Newsgroups gmane.comp.jakarta.taglibs.user
Message-ID <[email protected]>
--------------08DDA4133019168B3DB4F9BE
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

here is a patch which removes the xalan dependency.  but it breaks the 
ForEachTagTest.
i notice that every constructor generates a JSTLXPathCompiler. could it 
not be a singleton?

On 07/12/2017 15:08, Matthew Broadhead wrote:
> is there any other way to rewrite it so that it doesn't use 
> DTMManager?  that would also keep the speed?  is it a matter of 
> keeping the object in memory so that it doesn't have to keep building 
> fragments?
> also could i build the old version that doesn't need DTMManager and 
> drop it in my system to see what effect it has?
>
> On 06/12/2017 14:30, Romain Manni-Bucau wrote:
>> requires a classloader hack, no other trivial way, and that's why we
>> removed it from tomee
>>
>> 2017-12-06 14:27 GMT+01:00 Matthew Broadhead 
>> <[email protected]>:
>>> is there any way that i can get the correct xalan at runtime?
>>>
>>> to recap this is the code that is blowing up for me:
>>> Reader xsl = new InputStreamReader(filepath.openStream());
>>> TransformerFactory transformerfactory = 
>>> TransformerFactory.newInstance();
>>> StreamSource ssXsl = new StreamSource(xsl);
>>> ssXsl.setSystemId(filepath.toExternalForm());
>>> Templates templates = transformerfactory.newTemplates(ssXsl);
>>> Transformer transformer = templates.newTransformer();
>>>
>>> last line causes:
>>> java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault
>>> cannot be cast to org.apache.xml.dtm.DTMManager
>>>      at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:137)
>>>      at org.apache.xpath.XPathContext.<init>(XPathContext.java:102)
>>>      at org.apache.xpath.XPathContext.<init>(XPathContext.java:349)
>>>      at org.apache.xpath.XPathContext.<init>(XPathContext.java:337)
>>>      at
>>> org.apache.xalan.transformer.TransformerImpl.<init>(TransformerImpl.java:397) 
>>>
>>>      at
>>> org.apache.xalan.templates.StylesheetRoot.newTransformer(StylesheetRoot.java:200) 
>>>
>>>
>>> maybe you know some way to find the Impl with the correct DTMManager?
>>>
>>>
>>> On 30/11/2017 17:30, Romain Manni-Bucau wrote:
>>>> 2017-11-30 16:51 GMT+01:00 Jeremy Boynes <[email protected]>:
>>>>>> On Nov 30, 2017, at 3:14 AM, Matthew Broadhead
>>>>>> <[email protected]> wrote:
>>>>>>
>>>>>> has anything been decided?  if i try to redeploy a context in 
>>>>>> production
>>>>>> all my xslt processors blow up.  there should be a solution that 
>>>>>> fits all?
>>>>> Taglibs (both Apache and Glassfish) has always had a dependency on 
>>>>> Xalan.
>>>>> My understanding is that TomEE did not include it and so broke 
>>>>> users that
>>>>> use the XML tags. If so, TomEE should fix that.
>>>> Sadly this is not a bug on tomee but the best solution we went through
>>>> after having delivered xalan for some releases. Xalan dependency
>>>> breaks 80% of apps so no way to include it - and this is the issue of
>>>> Matthew. Note it also affects simple apps in tomcat including taglib
>>>> and other libs.
>>>>
>>>>> You can probably add Xalan to your TomEE installation somehow to work
>>>>> around it but how to do that is really a question for the TomEE 
>>>>> users list.
>>>>>
>>>>> A patch for Taglibs that removes the Xalan dependency and doesn't 
>>>>> regress
>>>>> the #27717 performance fix would be great. A patch that removed the
>>>>> dependency but regressed performance would have to be evaluated at 
>>>>> the time.
>>>>> The previous decision was not to do that.
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>


--------------08DDA4133019168B3DB4F9BE
Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
 name="apache-taglibs-trunk.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="apache-taglibs-trunk.patch"

SW5kZXg6IGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvcG9tLnhtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3BvbS54bWwJKHJldmlzaW9uIDE4MTU4
OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3BvbS54bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDEzICs5MSwxMyBAQAogICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJz
aW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9k
ZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSA8ZGVwZW5k
ZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPnhhbGFuPC9ncm91cElkPgogICAgICAgICAg
ICAgPGFydGlmYWN0SWQ+eGFsYW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lv
bj4yLjcuMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+
CiAgICAgICAgICAgICA8b3B0aW9uYWw+dHJ1ZTwvb3B0aW9uYWw+Ci0gICAgICAgIDwvZGVw
ZW5kZW5jeT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAtLT4KIAogICAgICAgICA8ZGVwZW5k
ZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgpJbmRleDogYXBh
Y2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGFnbGli
cy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9FeHByU3VwcG9ydC5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21haW4vamF2YS9vcmcvYXBh
Y2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvRXhwclN1cHBvcnQuamF2YQko
cmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21h
aW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvRXhw
clN1cHBvcnQuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMjIsNTIgKzIyLDU1IEBACiBpbXBv
cnQgamF2YXguc2VydmxldC5qc3AuSnNwRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnNlcnZs
ZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdl
eHQuVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVy
RXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4
Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC51dGlsLkVz
Y2FwZVhNTDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0IG9yZy5h
cGFjaGUueHBhdGguWFBhdGhDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5z
dGFuZGFyZC54cGF0aC5KU1RMWFBhdGhDb21waWxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRh
Z2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcu
YXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRmFjdG9yeTsKKy8vaW1w
b3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGg7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRo
LlhQYXRoQ29udGV4dDsKIAogLyoqCi0gKiBUYWcgaGFuZGxlciBmb3IgJmx0O291dCZndDsg
aW4gSlNUTCdzIFhNTCBsaWJyYXJ5LgotICogVE9ETzogc2hvdWxkIHdlIHJlbmFtZSB0aGlz
IHRvIE91dFN1cHBvcnQgdG8gbWF0Y2ggdGhlIHRhZyBuYW1lPworICogVGFnIGhhbmRsZXIg
Zm9yICZsdDtvdXQmZ3Q7IGluIEpTVEwncyBYTUwgbGlicmFyeS4gVE9ETzogc2hvdWxkIHdl
IHJlbmFtZQorICogdGhpcyB0byBPdXRTdXBwb3J0IHRvIG1hdGNoIHRoZSB0YWcgbmFtZT8K
ICAqCiAgKiBAYXV0aG9yIFNoYXduIEJheWVybgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xh
c3MgRXhwclN1cHBvcnQgZXh0ZW5kcyBUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBh
dGggc2VsZWN0OwotICAgIHByb3RlY3RlZCBib29sZWFuIGVzY2FwZVhtbCA9IHRydWU7ICAv
LyB0YWcgYXR0cmlidXRlCisJcHJpdmF0ZSBKU1RMWFBhdGhDb21waWxlciBjb21waWxlcjsK
Kwlwcml2YXRlIEpTVExYUGF0aEV4cHJlc3Npb24gc2VsZWN0OworCXByb3RlY3RlZCBib29s
ZWFuIGVzY2FwZVhtbCA9IHRydWU7IC8vIHRhZyBhdHRyaWJ1dGUKIAotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2Uo
KTsKLSAgICAgICAgc2VsZWN0ID0gbnVsbDsKLSAgICB9CisJcHVibGljIEV4cHJTdXBwb3J0
KCkgeworCQlKU1RMWFBhdGhGYWN0b3J5IHhwZiA9IEpTVExYUGF0aEZhY3RvcnkuZ2V0RmFj
dG9yeSgpOworCQljb21waWxlciA9IHhwZi5uZXdDb21waWxlcigpOworCX0KIAotICAgIC8v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0gICAgLy8gVGFnIGxvZ2ljCisJQE92ZXJyaWRlCisJcHVibGlj
IHZvaWQgcmVsZWFzZSgpIHsKKwkJc3VwZXIucmVsZWFzZSgpOworCQljb21waWxlciA9IG51
bGw7CisJCXNlbGVjdCA9IG51bGw7CisJfQogCi0gICAgLy8gYXBwbGllcyBYUGF0aCBleHBy
ZXNzaW9uIGZyb20gJ3NlbGVjdCcgYW5kIHByaW50cyB0aGUgcmVzdWx0Ci0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGludCBkb1N0YXJ0VGFnKCkgdGhyb3dzIEpzcEV4Y2VwdGlvbiB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBYUGF0aENvbnRleHQgY29udGV4dCA9IFhh
bGFuVXRpbC5nZXRDb250ZXh0KHRoaXMsIHBhZ2VDb250ZXh0KTsKLSAgICAgICAgICAgIFN0
cmluZyByZXN1bHQgPSBzZWxlY3QuZXhlY3V0ZShjb250ZXh0LCBjb250ZXh0LmdldEN1cnJl
bnROb2RlKCksIG51bGwpLnN0cigpOwotICAgICAgICAgICAgRXNjYXBlWE1MLmVtaXQocmVz
dWx0LCBlc2NhcGVYbWwsIHBhZ2VDb250ZXh0LmdldE91dCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBTS0lQX0JPRFk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCksIGV4
KTsKLSAgICAgICAgfSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0K
KwkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKwkvLyBUYWcgbG9naWMKIAotICAgIHB1YmxpYyB2b2lk
IHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICB0aGlzLnNlbGVjdCA9IG5ldyBYUGF0aChzZWxlY3QsIG51bGwsIG51bGwsIFhQYXRoLlNF
TEVDVCk7Ci0gICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICB9Ci0gICAg
fQorCS8vIGFwcGxpZXMgWFBhdGggZXhwcmVzc2lvbiBmcm9tICdzZWxlY3QnIGFuZCBwcmlu
dHMgdGhlIHJlc3VsdAorCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRo
cm93cyBKc3BFeGNlcHRpb24geworCQl0cnkgeworCQkJU3RyaW5nIHJlc3VsdCA9IHNlbGVj
dC5ldmFsdWF0ZVN0cmluZyhGb3JFYWNoVGFnLmdldENvbnRleHQodGhpcyksIHBhZ2VDb250
ZXh0KTsKKwkJCUVzY2FwZVhNTC5lbWl0KHJlc3VsdCwgZXNjYXBlWG1sLCBwYWdlQ29udGV4
dC5nZXRPdXQoKSk7CisJCQlyZXR1cm4gU0tJUF9CT0RZOworCQl9IGNhdGNoIChJT0V4Y2Vw
dGlvbiBleCkgeworCQkJdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihleC50b1N0cmluZygp
LCBleCk7CisJCX0KKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3QoU3RyaW5nIHNlbGVj
dCkgeworCQl0aGlzLnNlbGVjdCA9IGNvbXBpbGVyLmNvbXBpbGUoc2VsZWN0KTsKKwl9CiB9
CkluZGV4OiBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2Fw
YWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWcuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2ph
dmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hU
YWcuamF2YQkocmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2lt
cGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1v
bi94bWwvRm9yRWFjaFRhZy5qYXZhCSh3b3JraW5nIGNvcHkpCkBAIC0xNywxNiArMTcsMjMg
QEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQudGFnLmNvbW1vbi54
bWw7CiAKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb247CisvL2ltcG9y
dCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb247CiBpbXBvcnQgamF2YXguc2Vydmxl
dC5qc3AuSnNwVGFnRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLmpzdGwu
Y29yZS5Mb29wVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5z
Zm9ybWVyRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5UYWc7
CitpbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0LlRhZ1N1cHBvcnQ7CisvL2ltcG9y
dCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwogCi1pbXBvcnQg
b3JnLmFwYWNoZS54bWwuZHRtLkRUTUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueHBh
dGguWFBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENvbnRleHQ7Ci1pbXBv
cnQgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q7CitpbXBvcnQgb3JnLmFwYWNo
ZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExYUGF0aENvbXBpbGVyOworaW1wb3J0IG9y
Zy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBhdGhDb250ZXh0OworaW1w
b3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBhdGhFeHByZXNz
aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBh
dGhGYWN0b3J5OwogCisvL2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5kdG0uRFRNSXRlcmF0b3I7
CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOworLy9pbXBvcnQgb3JnLmFwYWNo
ZS54cGF0aC5YUGF0aENvbnRleHQ7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVj
dHMuWE9iamVjdDsKKwogLyoqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiAmbHQ7eDpmb3JFYWNo
Jmd0OyB0YWcgdXNpbmcgbG93LWxldmVsIFhhbGFuIEFQSS4KICAqCkBAIC0zNSw5NSArNDIs
ODUgQEAKICAqLwogcHVibGljIGNsYXNzIEZvckVhY2hUYWcgZXh0ZW5kcyBMb29wVGFnU3Vw
cG9ydCB7CiAKLSAgICBwcml2YXRlIFhQYXRoIHNlbGVjdDsKLSAgICBwcml2YXRlIFhQYXRo
Q29udGV4dCBjb250ZXh0OworCXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7
CisJcHJpdmF0ZSBKU1RMWFBhdGhFeHByZXNzaW9uIHNlbGVjdDsKKwlwcml2YXRlIEpTVExY
UGF0aENvbnRleHQgY29udGV4dDsKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2UoKTsKLSAgICAgICAgc2VsZWN0
ID0gbnVsbDsKLSAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgfQorCXB1YmxpYyBGb3JF
YWNoVGFnKCkgeworCQlKU1RMWFBhdGhGYWN0b3J5IHhwZiA9IEpTVExYUGF0aEZhY3Rvcnku
Z2V0RmFjdG9yeSgpOworCQljb21waWxlciA9IHhwZi5uZXdDb21waWxlcigpOworCX0KIAot
ICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHByZXBhcmUoKSB0aHJvd3MgSnNw
VGFnRXhjZXB0aW9uIHsKLSAgICAgICAgY29udGV4dCA9IFhhbGFuVXRpbC5nZXRDb250ZXh0
KHRoaXMsIHBhZ2VDb250ZXh0KTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFhPYmpl
Y3Qgbm9kZXMgPSBzZWxlY3QuZXhlY3V0ZShjb250ZXh0LCBjb250ZXh0LmdldEN1cnJlbnRO
b2RlKCksIG51bGwpOworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7CisJ
CXN1cGVyLnJlbGVhc2UoKTsKKwkJY29tcGlsZXIgPSBudWxsOworCQlzZWxlY3QgPSBudWxs
OworCQljb250ZXh0ID0gbnVsbDsKKwl9CiAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBp
dGVyYXRvciBvdmVyIHRoZSByZXR1cm5lZCBub2RlcyBhbmQgcHVzaCBpbnRvIHRoZSBjb250
ZXh0Ci0gICAgICAgICAgICBEVE1JdGVyYXRvciBpdGVyYXRvciA9IG5vZGVzLml0ZXIoKTsK
LSAgICAgICAgICAgIGNvbnRleHQucHVzaENvbnRleHROb2RlTGlzdChpdGVyYXRvcik7Ci0g
ICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAg
IHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJQE92
ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcHJlcGFyZSgpIHRocm93cyBKc3BUYWdFeGNlcHRp
b24geworCQljb250ZXh0ID0gc2VsZWN0Lml0ZXJhdGUoZ2V0Q29udGV4dCh0aGlzKSwgcGFn
ZUNvbnRleHQpOworCX0KIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29sZWFu
IGhhc05leHQoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKLSAgICAgICAgRFRNSXRlcmF0
b3IgaXRlcmF0b3IgPSBjb250ZXh0LmdldENvbnRleHROb2RlTGlzdCgpOwotICAgICAgICBy
ZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVudFBvcygpIDwgaXRlcmF0b3IuZ2V0TGVuZ3RoKCk7
Ci0gICAgfQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGhhc05leHQoKSB0aHJv
d3MgSnNwVGFnRXhjZXB0aW9uIHsKKwkJcmV0dXJuIGNvbnRleHQuaGFzTmV4dCgpOworCX0K
IAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBPYmplY3QgbmV4dCgpIHRocm93cyBK
c3BUYWdFeGNlcHRpb24gewotICAgICAgICBEVE1JdGVyYXRvciBpdGVyYXRvciA9IGNvbnRl
eHQuZ2V0Q29udGV4dE5vZGVMaXN0KCk7Ci0gICAgICAgIGludCBuZXh0ID0gaXRlcmF0b3Iu
bmV4dE5vZGUoKTsKLSAgICAgICAgY29udGV4dC5wdXNoQ3VycmVudE5vZGUobmV4dCk7Ci0g
ICAgICAgIHJldHVybiBpdGVyYXRvci5nZXREVE0obmV4dCkuZ2V0Tm9kZShuZXh0KTsKLSAg
ICB9CisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE9iamVjdCBuZXh0KCkgdGhyb3dzIEpzcFRh
Z0V4Y2VwdGlvbiB7CisJCXJldHVybiBjb250ZXh0Lm5leHQoKTsKKwl9CiAKLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgaW50IGRvQWZ0ZXJCb2R5KCkgdGhyb3dzIEpzcEV4Y2VwdGlv
biB7Ci0gICAgICAgIC8vIHBvcCB0aGUgY29udGV4dCBub2RlIGFmdGVyIGV4ZWN1dGluZyB0
aGUgYm9keQotICAgICAgICBjb250ZXh0LnBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJl
dHVybiBzdXBlci5kb0FmdGVyQm9keSgpOwotICAgIH0KKwkvLyBAT3ZlcnJpZGUKKwkvLyBw
dWJsaWMgaW50IGRvQWZ0ZXJCb2R5KCkgdGhyb3dzIEpzcEV4Y2VwdGlvbiB7CisJLy8gLy8g
cG9wIHRoZSBjb250ZXh0IG5vZGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBib2R5CisJLy8gY29u
dGV4dC5wb3BDdXJyZW50Tm9kZSgpOworCS8vIHJldHVybiBzdXBlci5kb0FmdGVyQm9keSgp
OworCS8vIH0KKwkvLworCS8vIEBPdmVycmlkZQorCS8vIHB1YmxpYyB2b2lkIGRvRmluYWxs
eSgpIHsKKwkvLyAvLyBjb250ZXh0IG1pZ2h0IGJlIG51bGwgYXMgcHJlcGFyZSBpcyBub3Qg
Y2FsbGVkIGlmIGVuZCA8IGJlZ2luCisJLy8gaWYgKGNvbnRleHQgIT0gbnVsbCkgeworCS8v
IC8vIHBvcCB0aGUgbGlzdCBvZiBub2RlcyBiZWluZyBpdGVyYXRlZAorCS8vIGNvbnRleHQu
cG9wQ29udGV4dE5vZGVMaXN0KCk7CisJLy8gY29udGV4dCA9IG51bGw7CisJLy8gfQorCS8v
IHN1cGVyLmRvRmluYWxseSgpOworCS8vIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIGRvRmluYWxseSgpIHsKLSAgICAgICAgLy8gY29udGV4dCBtaWdodCBiZSBudWxs
IGFzIHByZXBhcmUgaXMgbm90IGNhbGxlZCBpZiBlbmQgPCBiZWdpbgotICAgICAgICBpZiAo
Y29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBwb3AgdGhlIGxpc3Qgb2Ygbm9k
ZXMgYmVpbmcgaXRlcmF0ZWQKLSAgICAgICAgICAgIGNvbnRleHQucG9wQ29udGV4dE5vZGVM
aXN0KCk7Ci0gICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAg
ICBzdXBlci5kb0ZpbmFsbHkoKTsKLSAgICB9CisJcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0
cmluZyBzZWxlY3QpIHsKKwkJdGhpcy5zZWxlY3QgPSBjb21waWxlci5jb21waWxlKHNlbGVj
dCk7CisJfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0cmluZyBzZWxlY3QpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gbmV3IFhQYXRoKHNl
bGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VMRUNUKTsKLSAgICAgICAgfSBjYXRjaCAoVHJh
bnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlv
bkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9CisJcHVibGljIHZvaWQgc2V0QmVnaW4oaW50
IGJlZ2luKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKKwkJdGhpcy5iZWdpblNwZWNpZmll
ZCA9IHRydWU7CisJCXRoaXMuYmVnaW4gPSBiZWdpbjsKKwkJdmFsaWRhdGVCZWdpbigpOwor
CX0KIAotICAgIHB1YmxpYyB2b2lkIHNldEJlZ2luKGludCBiZWdpbikgdGhyb3dzIEpzcFRh
Z0V4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuYmVnaW5TcGVjaWZpZWQgPSB0cnVlOwotICAg
ICAgICB0aGlzLmJlZ2luID0gYmVnaW47Ci0gICAgICAgIHZhbGlkYXRlQmVnaW4oKTsKLSAg
ICB9CisJcHVibGljIHZvaWQgc2V0RW5kKGludCBlbmQpIHRocm93cyBKc3BUYWdFeGNlcHRp
b24geworCQl0aGlzLmVuZFNwZWNpZmllZCA9IHRydWU7CisJCXRoaXMuZW5kID0gZW5kOwor
CQl2YWxpZGF0ZUVuZCgpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNldEVuZChpbnQgZW5k
KSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5lbmRTcGVjaWZpZWQg
PSB0cnVlOwotICAgICAgICB0aGlzLmVuZCA9IGVuZDsKLSAgICAgICAgdmFsaWRhdGVFbmQo
KTsKLSAgICB9CisJcHVibGljIHZvaWQgc2V0U3RlcChpbnQgc3RlcCkgdGhyb3dzIEpzcFRh
Z0V4Y2VwdGlvbiB7CisJCXRoaXMuc3RlcFNwZWNpZmllZCA9IHRydWU7CisJCXRoaXMuc3Rl
cCA9IHN0ZXA7CisJCXZhbGlkYXRlU3RlcCgpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNl
dFN0ZXAoaW50IHN0ZXApIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewotICAgICAgICB0aGlz
LnN0ZXBTcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwOwotICAg
ICAgICB2YWxpZGF0ZVN0ZXAoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4g
dGhlIGN1cnJlbnQgWFBhdGggY29udGV4dCB0byBzdXBwb3J0IGV4cHJlc3Npb24gZXZhbHVh
dGlvbiBpbiBuZXN0ZWQgdGFncy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGN1cnJl
bnQgWFBhdGggY29udGV4dAotICAgICAqLwotICAgIFhQYXRoQ29udGV4dCBnZXRDb250ZXh0
KCkgewotICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICB9CisJLyogUmV0cmlldmVzIHRo
ZSBjdXJyZW50IGNvbnRleHQuICovCisJcHVibGljIHN0YXRpYyBKU1RMWFBhdGhDb250ZXh0
IGdldENvbnRleHQoVGFnIGNoaWxkKSB7CisJCUZvckVhY2hUYWcgZm9yRWFjaFRhZyA9IChG
b3JFYWNoVGFnKSBUYWdTdXBwb3J0LmZpbmRBbmNlc3RvcldpdGhDbGFzcyhjaGlsZCwgRm9y
RWFjaFRhZy5jbGFzcyk7CisJCWlmIChmb3JFYWNoVGFnID09IG51bGwpIHsKKwkJCXJldHVy
biBudWxsOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGZvckVhY2hUYWcuY29udGV4dDsKKwkJ
fQorCX0KIH0KLQpJbmRleDogYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9q
YXZhL29yZy9hcGFjaGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9JZlRhZy5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21h
aW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvSWZU
YWcuamF2YQkocmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2lt
cGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1v
bi94bWwvSWZUYWcuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMTksMTMgKzE5LDE4IEBACiAK
IGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BUYWdFeGNlcHRpb247CiBpbXBvcnQgamF2
YXguc2VydmxldC5qc3AuanN0bC5jb3JlLkNvbmRpdGlvbmFsVGFnU3VwcG9ydDsKLWltcG9y
dCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOworLy9pbXBvcnQg
amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKIAotaW1wb3J0IG9y
Zy5hcGFjaGUueHBhdGguWFBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENv
bnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExY
UGF0aENvbXBpbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0
aC5KU1RMWFBhdGhFeHByZXNzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFu
ZGFyZC54cGF0aC5KU1RMWFBhdGhGYWN0b3J5OworLy9pbXBvcnQgb3JnLmFwYWNoZS54cGF0
aC5YUGF0aDsKKy8vaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGhDb250ZXh0OwogCiAv
KioKLSAqIDxwPlRhZyBoYW5kbGVyIGZvciAmbHQ7aWYmZ3Q7IGluIEpTVEwncyBYTUwgbGli
cmFyeS48L3A+CisgKiA8cD4KKyAqIFRhZyBoYW5kbGVyIGZvciAmbHQ7aWYmZ3Q7IGluIEpT
VEwncyBYTUwgbGlicmFyeS4KKyAqIDwvcD4KICAqCiAgKiBAYXV0aG9yIFNoYXduIEJheWVy
bgogICovCkBAIC0zMiwzMCArMzcsMjcgQEAKIAogcHVibGljIGNsYXNzIElmVGFnIGV4dGVu
ZHMgQ29uZGl0aW9uYWxUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0
OworCXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7CisJcHJpdmF0ZSBKU1RM
WFBhdGhFeHByZXNzaW9uIHNlbGVjdDsKIAorCXB1YmxpYyBJZlRhZygpIHsKKwkJSlNUTFhQ
YXRoRmFjdG9yeSB4cGYgPSBKU1RMWFBhdGhGYWN0b3J5LmdldEZhY3RvcnkoKTsKKwkJY29t
cGlsZXIgPSB4cGYubmV3Q29tcGlsZXIoKTsKKwl9CiAKLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBzdXBlci5yZWxlYXNlKCk7Ci0gICAg
ICAgIHNlbGVjdCA9IG51bGw7Ci0gICAgfQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJl
bGVhc2UoKSB7CisJCXN1cGVyLnJlbGVhc2UoKTsKKwkJY29tcGlsZXIgPSBudWxsOworCQlz
ZWxlY3QgPSBudWxsOworCX0KIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29s
ZWFuIGNvbmRpdGlvbigpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewotICAgICAgICBYUGF0
aENvbnRleHQgY29udGV4dCA9IFhhbGFuVXRpbC5nZXRDb250ZXh0KHRoaXMsIHBhZ2VDb250
ZXh0KTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBzZWxlY3QuYm9vbChj
b250ZXh0LCBjb250ZXh0LmdldEN1cnJlbnROb2RlKCksIG51bGwpOwotICAgICAgICB9IGNh
dGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
SnNwVGFnRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQorCUBPdmVycmlkZQorCXBy
b3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewor
CQlyZXR1cm4gc2VsZWN0LmV2YWx1YXRlQm9vbGVhbihGb3JFYWNoVGFnLmdldENvbnRleHQo
dGhpcyksIHBhZ2VDb250ZXh0KTsKKwl9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Qo
U3RyaW5nIHNlbGVjdCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5zZWxl
Y3QgPSBuZXcgWFBhdGgoc2VsZWN0LCBudWxsLCBudWxsLCBYUGF0aC5TRUxFQ1QpOwotICAg
ICAgICB9IGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0
aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoKTsKLSAgICAgICAgfQotICAgIH0KKwlwdWJsaWMg
dm9pZCBzZXRTZWxlY3QoU3RyaW5nIHNlbGVjdCkgeworCQl0aGlzLnNlbGVjdCA9IGNvbXBp
bGVyLmNvbXBpbGUoc2VsZWN0KTsKKwl9CiB9CkluZGV4OiBhcGFjaGUtdGFnbGlicy10cnVu
ay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9j
b21tb24veG1sL1NldFRhZy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFwYWNoZS10YWdsaWJz
LXRydW5rL2ltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQv
dGFnL2NvbW1vbi94bWwvU2V0VGFnLmphdmEJKHJldmlzaW9uIDE4MTU4OTMpCisrKyBhcGFj
aGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJz
L3N0YW5kYXJkL3RhZy9jb21tb24veG1sL1NldFRhZy5qYXZhCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw3MCArMTgsNzMgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJk
LnRhZy5jb21tb24ueG1sOwogCiBpbXBvcnQgamF2YXguc2VydmxldC5qc3AuSnNwRXhjZXB0
aW9uOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKKy8vaW1w
b3J0IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5z
ZXJ2bGV0LmpzcC5QYWdlQ29udGV4dDsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdl
eHQuVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVy
RXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4
Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC50YWcuY29t
bW9uLmNvcmUuVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0
IG9yZy5hcGFjaGUueHBhdGguWFBhdGhDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueHBh
dGgub2JqZWN0cy5YT2JqZWN0OworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFy
ZC54cGF0aC5KU1RMWFBhdGhDb21waWxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRhZ2xpYnMu
c3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hl
LnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRmFjdG9yeTsKKy8vaW1wb3J0IG9y
Zy5hcGFjaGUueHBhdGguWFBhdGg7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRo
Q29udGV4dDsKKy8vaW1wb3J0IG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0Owog
CiAvKioKLSAqIDxwPlRhZyBoYW5kbGVyIGZvciAmbHQ7c2V0Jmd0OyBpbiBKU1RMJ3MgWE1M
IGxpYnJhcnkuPC9wPgorICogPHA+CisgKiBUYWcgaGFuZGxlciBmb3IgJmx0O3NldCZndDsg
aW4gSlNUTCdzIFhNTCBsaWJyYXJ5LgorICogPC9wPgogICoKICAqIEBhdXRob3IgU2hhd24g
QmF5ZXJuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXRUYWcgZXh0ZW5kcyBUYWdTdXBwb3J0IHsK
IAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0OwotICAgIHByaXZhdGUgU3RyaW5nIHZhcjsK
LSAgICBwcml2YXRlIGludCBzY29wZSA9IFBhZ2VDb250ZXh0LlBBR0VfU0NPUEU7CisJcHJp
dmF0ZSBKU1RMWFBhdGhDb21waWxlciBjb21waWxlcjsKKwlwcml2YXRlIEpTVExYUGF0aEV4
cHJlc3Npb24gc2VsZWN0OworCXByaXZhdGUgU3RyaW5nIHZhcjsKKwlwcml2YXRlIGludCBz
Y29wZSA9IFBhZ2VDb250ZXh0LlBBR0VfU0NPUEU7CiAKLSAgICAvLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgotICAgIC8vIENvbnN0cnVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KKwkvLyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKKwkvLyBDb25zdHJ1Y3Rpb24gYW5kIGluaXRpYWxpemF0aW9uCiAKLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBzdXBlci5y
ZWxlYXNlKCk7Ci0gICAgICAgIHNlbGVjdCA9IG51bGw7Ci0gICAgICAgIHZhciA9IG51bGw7
Ci0gICAgfQorCXB1YmxpYyBTZXRUYWcoKSB7CisJCUpTVExYUGF0aEZhY3RvcnkgeHBmID0g
SlNUTFhQYXRoRmFjdG9yeS5nZXRGYWN0b3J5KCk7CisJCWNvbXBpbGVyID0geHBmLm5ld0Nv
bXBpbGVyKCk7CisJfQogCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAvLyBUYWcgbG9n
aWMKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWxlYXNlKCkgeworCQlzdXBlci5yZWxl
YXNlKCk7CisJCWNvbXBpbGVyID0gbnVsbDsKKwkJc2VsZWN0ID0gbnVsbDsKKwkJdmFyID0g
bnVsbDsKKwl9CiAKLSAgICAvLyBhcHBsaWVzIFhQYXRoIGV4cHJlc3Npb24gZnJvbSAnc2Vs
ZWN0JyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gJ3ZhcicKKwkvLyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKKwkvLyBUYWcgbG9naWMKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZG9T
dGFydFRhZygpIHRocm93cyBKc3BFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgWFBhdGhDb250ZXh0IGNvbnRleHQgPSBYYWxhblV0aWwuZ2V0Q29udGV4dCh0aGlz
LCBwYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICBYT2JqZWN0IHJlc3VsdCA9IHNlbGVjdC5l
eGVjdXRlKGNvbnRleHQsIGNvbnRleHQuZ2V0Q3VycmVudE5vZGUoKSwgbnVsbCk7Ci0gICAg
ICAgICAgICBwYWdlQ29udGV4dC5zZXRBdHRyaWJ1dGUodmFyLCBYYWxhblV0aWwuY29lcmNl
VG9KYXZhKHJlc3VsdCksIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBTS0lQX0JPRFk7
Ci0gICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
ICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJ
Ly8gYXBwbGllcyBYUGF0aCBleHByZXNzaW9uIGZyb20gJ3NlbGVjdCcgYW5kIHN0b3JlcyB0
aGUgcmVzdWx0IGluICd2YXInCiAKLSAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIC8vIEF0
dHJpYnV0ZSBhY2Nlc3NvcnMKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGRvU3RhcnRUYWco
KSB0aHJvd3MgSnNwRXhjZXB0aW9uIHsKKwkJT2JqZWN0IHJlc3VsdCA9IHNlbGVjdC5ldmFs
dWF0ZU9iamVjdChGb3JFYWNoVGFnLmdldENvbnRleHQodGhpcyksIHBhZ2VDb250ZXh0KTsK
KwkJcGFnZUNvbnRleHQuc2V0QXR0cmlidXRlKHZhciwgcmVzdWx0LCBzY29wZSk7CisJCXJl
dHVybiBTS0lQX0JPRFk7CisJfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0cmlu
ZyBzZWxlY3QpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0g
bmV3IFhQYXRoKHNlbGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VMRUNUKTsKLSAgICAgICAg
fSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cg
bmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9CisJLy8gKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisJLy8gQXR0cmlidXRlIGFjY2Vzc29ycwogCi0gICAgcHVibGljIHZvaWQgc2V0
VmFyKFN0cmluZyB2YXIpIHsKLSAgICAgICAgdGhpcy52YXIgPSB2YXI7Ci0gICAgfQorCXB1
YmxpYyB2b2lkIHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7CisJCXRoaXMuc2VsZWN0ID0g
Y29tcGlsZXIuY29tcGlsZShzZWxlY3QpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNldFNj
b3BlKFN0cmluZyBzY29wZSkgewotICAgICAgICB0aGlzLnNjb3BlID0gVXRpbC5nZXRTY29w
ZShzY29wZSk7Ci0gICAgfQorCXB1YmxpYyB2b2lkIHNldFZhcihTdHJpbmcgdmFyKSB7CisJ
CXRoaXMudmFyID0gdmFyOworCX0KKworCXB1YmxpYyB2b2lkIHNldFNjb3BlKFN0cmluZyBz
Y29wZSkgeworCQl0aGlzLnNjb3BlID0gVXRpbC5nZXRTY29wZShzY29wZSk7CisJfQogfQpJ
bmRleDogYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFj
aGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9XaGVuVGFnLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29y
Zy9hcGFjaGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9XaGVuVGFnLmphdmEJ
KHJldmlzaW9uIDE4MTU4OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9t
YWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL1do
ZW5UYWcuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMTgsMTQgKzE4LDE5IEBACiBwYWNrYWdl
IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC50YWcuY29tbW9uLnhtbDsKIAogaW1wb3J0
IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwu
dHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRy
YW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFn
bGlicy5zdGFuZGFyZC50YWcuY29tbW9uLmNvcmUuV2hlblRhZ1N1cHBvcnQ7Ci1pbXBvcnQg
b3JnLmFwYWNoZS54cGF0aC5YUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRo
Q29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNU
TFhQYXRoQ29tcGlsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhw
YXRoLkpTVExYUGF0aEV4cHJlc3Npb247CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0
YW5kYXJkLnhwYXRoLkpTVExYUGF0aEZhY3Rvcnk7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhw
YXRoLlhQYXRoOworLy9pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENvbnRleHQ7CiAK
IC8qKgotICogPHA+VGFnIGhhbmRsZXIgZm9yICZsdDtpZiZndDsgaW4gSlNUTCdzIFhNTCBs
aWJyYXJ5LjwvcD4KKyAqIDxwPgorICogVGFnIGhhbmRsZXIgZm9yICZsdDtpZiZndDsgaW4g
SlNUTCdzIFhNTCBsaWJyYXJ5LgorICogPC9wPgogICoKICAqIEBhdXRob3IgU2hhd24gQmF5
ZXJuCiAgKi8KQEAgLTMyLDI5ICszNywyNyBAQAogCiBwdWJsaWMgY2xhc3MgV2hlblRhZyBl
eHRlbmRzIFdoZW5UYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0Owor
CXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7CisJcHJpdmF0ZSBKU1RMWFBh
dGhFeHByZXNzaW9uIHNlbGVjdDsKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2UoKTsKLSAgICAgICAgc2VsZWN0
ID0gbnVsbDsKLSAgICB9CisJcHVibGljIFdoZW5UYWcoKSB7CisJCUpTVExYUGF0aEZhY3Rv
cnkgeHBmID0gSlNUTFhQYXRoRmFjdG9yeS5nZXRGYWN0b3J5KCk7CisJCWNvbXBpbGVyID0g
eHBmLm5ld0NvbXBpbGVyKCk7CisJfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVk
IGJvb2xlYW4gY29uZGl0aW9uKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7Ci0gICAgICAg
IFhQYXRoQ29udGV4dCBjb250ZXh0ID0gWGFsYW5VdGlsLmdldENvbnRleHQodGhpcywgcGFn
ZUNvbnRleHQpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5i
b29sKGNvbnRleHQsIGNvbnRleHQuZ2V0Q3VycmVudE5vZGUoKSwgbnVsbCk7Ci0gICAgICAg
IH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJQE92ZXJyaWRl
CisJcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKKwkJc3VwZXIucmVsZWFzZSgpOworCQljb21w
aWxlciA9IG51bGw7CisJCXNlbGVjdCA9IG51bGw7CisJfQogCi0gICAgcHVibGljIHZvaWQg
c2V0U2VsZWN0KFN0cmluZyBzZWxlY3QpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHRoaXMuc2VsZWN0ID0gbmV3IFhQYXRoKHNlbGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VM
RUNUKTsKLSAgICAgICAgfSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAg
ICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9
CisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgdGhyb3dzIEpz
cFRhZ0V4Y2VwdGlvbiB7CisJCXJldHVybiBzZWxlY3QuZXZhbHVhdGVCb29sZWFuKEZvckVh
Y2hUYWcuZ2V0Q29udGV4dCh0aGlzKSwgcGFnZUNvbnRleHQpOworCX0KKworCXB1YmxpYyB2
b2lkIHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7CisJCXRoaXMuc2VsZWN0ID0gY29tcGls
ZXIuY29tcGlsZShzZWxlY3QpOworCX0KIH0KSW5kZXg6IGFwYWNoZS10YWdsaWJzLXRydW5r
L2ltcGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2Nv
bW1vbi94bWwvRm9yRWFjaFRhZ1Rlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcGFjaGUt
dGFnbGlicy10cnVuay9pbXBsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0
YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWdUZXN0LmphdmEJKHJldmlzaW9uIDE4
MTU4OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy90ZXN0L2phdmEvb3Jn
L2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWdUZXN0
LmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIGltcG9ydCBvcmcuanVu
aXQuVGVzdDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC51dGlsLlht
bFV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExY
UGF0aENvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS54bWwuZHRtLkRUTUl0ZXJhdG9yOwog
aW1wb3J0IG9yZy5hcGFjaGUueHBhdGguQ2FjaGVkWFBhdGhBUEk7CiBpbXBvcnQgb3JnLmFw
YWNoZS54cGF0aC5YUGF0aDsKQEAgLTgyLDcgKzgzLDcgQEAKICAgICAgICAgdGFnLnNldFNl
bGVjdCgiJGRvYy9yb290L2EvbnVtIik7CiAgICAgICAgIHJlcGxheShwYWdlQ29udGV4dCk7
CiAgICAgICAgIHRhZy5wcmVwYXJlKCk7Ci0gICAgICAgIFhQYXRoQ29udGV4dCBjb250ZXh0
ID0gdGFnLmdldENvbnRleHQoKTsKKyAgICAgICAgSlNUTFhQYXRoQ29udGV4dCBjb250ZXh0
ID0gdGFnLmdldENvbnRleHQoKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodGFnLmhh
c05leHQoKSk7CiAgICAgICAgIE5vZGUgb25lID0gKE5vZGUpIHRhZy5uZXh0KCk7CiAgICAg
ICAgIGFzc2VydEVxdWFscygib25lIiwgb25lLmdldFRleHRDb250ZW50KCkpOwo=

--------------08DDA4133019168B3DB4F9BE
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--------------08DDA4133019168B3DB4F9BE--