------=_Part_14184520_1243635383.1346090320191
Content-Type: multipart/alternative;
boundary="----=_Part_14184521_321545830.1346090320191"
------=_Part_14184521_321545830.1346090320191
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hi guys,
here comes the most recent revision of UI Plugins proof-of-concept patch (please find it
attached).
There's only one significant change on top of previous revision: the possibility to
add custom main tabs :)
* MainTabCustomPresenter is the (non-singleton) presenter of the custom tab component
* MainTabCustomView is the (non-singleton) view of the custom tab component, could be
improved to actually show the content of the given URL (e.g. through an iframe)
* MainTabCustomProxy is the (non-singleton) presenter proxy implementation
Here's what happens when a plugin adds a new custom main tab (the process starts at
PluginManager.addMainTab method):
* MainTabCustomProxyFactory creates new presenter proxy ( MainTabCustomProxy )
* MainTabCustomProxy binds itself to the given place (so that it will be able to
respond to GWTP PlaceRequestInternalEvent ), creates the "actual" proxy (
WrappedProxy ) providing actual tab data, and also connects with WebAdmin default
gatekeeper (user must be signed into WebAdmin in order to access the place of this custom
tab)
* From that point on, the presenter proxy for custom tab component is bound and ready
for use
In GWTP, when main tab panel (e.g. MainTabPanelPresenter ) renders its tabs, it fires an
event ( RequestTabsEvent ) saying "any tab which belongs to me, report in".
Besides the standard main tab proxies, MainTabCustomProxy instance(s) report in as well,
registering themselves into main tab panel through TabContainerPresenter.addTab method. In
effect, main tab panel will contain clickable tab headers for all tabs that belong to it.
When the custom tab gets activated, or more precisely, when the custom tab presenter gets
revealed (e.g. by clicking custom tab header, or programatically using PlaceManager ),
GWTP will first ask all proxies "which one handles #custom-tab place", and
MainTabCustomProxy indeed responds and hands over its presenter. GWTP presenter reveal
flow and view composition gets triggered (bottom-up, from MainTabCustomPresenter right up
to RootPresenter ), and after reaching the top of presenter hierarchy ( RootPresenter ),
presenter life-cycle methods (such as onReveal , onReset , etc.) are called in a top-down
fashion.
I've tested this patch using following plugin code ( myPlugin.js ):
pluginApi.plugins['myPlugin'] = {
UiInit: function() {
pluginApi.ui.addMainTab('Custom Tab', 'custom-tab',
'http://www.google.com/');
}
};
pluginApi.ready('myPlugin');
As a side note, this PoC patch only adds one kind of custom main tab (the one that is
supposed to have its content rendered from the given URL). We could also implement other
kinds of custom main tabs, two of which come to my mind right now (this is just an idea
for future improvement):
* custom table-based main tab, with API for adding columns, buttons and actual row
data
* custom form-based main tab, with API for adding key-value data pairs
Let me know what you think.
Cheers,
Vojtech
------=_Part_14184521_321545830.1346090320191
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<html><head><style type=3D'text/css'>p { margin: 0;
}</style></head><body><=
div style=3D'font-family: times new roman,new york,times,serif; font-size: =
12pt; color: #000000'>Hi guys,<br><br>here comes the most recent
revision o=
f UI Plugins proof-of-concept patch (please find it attached).<br><br>There=
's only one significant change on top of previous revision: the possibility=
to add custom main tabs
:)<br><ul><li><em>MainTabCustomPresenter</em> is t=
he (non-singleton) presenter of the custom tab
component<br></li><li><span =
style=3D"font-style: italic;">MainTabCustomView</span> is the
(non-singleto=
n) view of the custom tab component, could be improved to actually show the=
content of the given URL (e.g. through an iframe)</li><li><span
style=3D"f=
ont-style: italic;">MainTabCustomProxy</span> is the (non-singleton)
presen=
ter proxy implementation<br></li></ul>Here's what happens when a
plugin add=
s a new custom main tab (the process starts at <span style=3D"font-style: i=
talic;">PluginManager.addMainTab</span>
method):<br><ul><li><span style=3D"=
font-style: italic;">MainTabCustomProxyFactory</span> creates new
presenter=
proxy (<span style=3D"font-style:
italic;">MainTabCustomProxy</span>)<br><=
/li><li><span style=3D"font-style:
italic;">MainTabCustomProxy</span> binds=
itself to the given place (so that it will be able to respond to GWTP <spa=
n style=3D"font-style: italic;">PlaceRequestInternalEvent</span>),
creates =
the "actual" proxy (<span style=3D"font-style:
italic;">WrappedProxy</span>=
) providing actual tab data, and also connects with WebAdmin default gateke=
eper (user must be signed into WebAdmin in order to access the place of thi=
s custom tab)</li><li>From that point on, the presenter proxy for custom ta=
b component is bound and ready for use</li></ul><p>In GWTP, when main
tab p=
anel (e.g. <span style=3D"font-style:
italic;">MainTabPanelPresenter</span>=
) renders its tabs, it fires an event (<span style=3D"font-style:
italic;">=
RequestTabsEvent</span>) saying "any tab which belongs to me, report in".
B=
esides the standard main tab proxies, <span style=3D"font-style:
italic;">M=
ainTabCustomProxy</span> instance(s) report in as well, registering themsel=
ves into main tab panel through <span style=3D"font-style:
italic;">TabCont=
ainerPresenter.addTab</span> method. In effect, main tab panel will contain=
clickable tab headers for all tabs that belong to
it.<br></p><p><br></p><p=
When the custom tab gets activated, or more precisely, when the custom
tab=
presenter gets revealed (e.g. by clicking custom tab header, or programati=
cally using <span style=3D"font-style:
italic;">PlaceManager</span>), GWTP =
will first ask all proxies "which one handles #custom-tab place", and <span=
style=3D"font-style: italic;">MainTabCustomProxy </span>indeed
responds an=
d hands over its presenter. GWTP presenter reveal flow and view composition=
gets triggered (bottom-up, from <span style=3D"font-style:
italic;">MainTa=
bCustomPresenter</span> right up to <span style=3D"font-style:
italic;">Roo=
tPresenter</span>), and after reaching the top of presenter hierarchy (<spa=
n style=3D"font-style: italic;">RootPresenter</span>), presenter
life-cycle=
methods (such as <span style=3D"font-style:
italic;">onReveal</span>, <spa=
n style=3D"font-style: italic;">onReset</span>, etc.) are called in a
top-d=
own
fashion.<br></p><p><br></p><p></p><p></p><p>I've
tested this patch usin=
g following plugin code (<span style=3D"font-style:
italic;">myPlugin.js</s=
pan>):</p><p><br></p><p><span
style=3D"font-family: courier new,courier,mon=
aco,monospace,sans-serif;">pluginApi.plugins['myPlugin'] =3D
{</span><br st=
yle=3D"font-family: courier
new,courier,monaco,monospace,sans-serif;"><span=
style=3D"font-family: courier
new,courier,monaco,monospace,sans-serif;">&n=
bsp; UiInit: function()
{</span><br sty=
le=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span
=
style=3D"font-family: courier
new,courier,monaco,monospace,sans-serif;">&nb=
sp; =
pluginApi.ui.addMainTab('Custom Tab', 'custom-tab',
'http://ww=
w.google.com/');</span><br style=3D"font-family: courier
new,courier,monaco=
,monospace,sans-serif;"><span style=3D"font-family: courier
new,courier,mon=
aco,monospace,sans-serif;">
}</sp=
an><br style=3D"font-family: courier new,courier,monaco,monospace,sans-seri=
f;"><span style=3D"font-family: courier
new,courier,monaco,monospace,sans-s=
erif;">};</span><br style=3D"font-family: courier
new,courier,monaco,monosp=
ace,sans-serif;"><span style=3D"font-family: courier
new,courier,monaco,mon=
ospace,sans-serif;">pluginApi.ready('myPlugin');</span><br></p><p><br></p><=
p>As a side note, this PoC patch only adds one kind of custom main tab (the=
one that is supposed to have its content rendered from the given URL). We =
could also implement other kinds of custom main tabs, two of which come to =
my mind right now (this is just an idea for future
improvement):</p><ul><li=
custom table-based main tab, with API for adding columns, buttons and
actu=
al row data</li><li>custom form-based main tab, with API for
adding key-val=
ue data pairs<br></li></ul><p>Let me know what you
think.</p><p><br></p><p>=
Cheers,<br></p><p>Vojtech<br></p><p><br></p></div></body></html>
------=_Part_14184521_321545830.1346090320191--
------=_Part_14184520_1243635383.1346090320191
Content-Type: text/x-patch; name=WIP-UI-Plugins-PoC-revision-3.patch
Content-Disposition: attachment; filename=WIP-UI-Plugins-PoC-revision-3.patch
Content-Transfer-Encoding: base64
RnJvbSBiYjVlMDIxMWEwZWY1NGM5ODBjOTY5YTBkYTg4MjJjOTVhZjkyNDExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBWb2p0ZWNoIFN6b2NzIDx2c3pvY3NAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCAxOSBKdWwgMjAxMiAxNDo0ODo0MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFdJUDog
VUkgUGx1Z2lucyBQb0MsIHJldmlzaW9uIDMKCkNoYW5nZS1JZDogSWVhODliMWFiNDg3Y2NmZTc5
YThmMzgyOGY2N2I4NGRmNDVhMzg5MjAKU2lnbmVkLW9mZi1ieTogVm9qdGVjaCBTem9jcyA8dnN6
b2NzQHJlZGhhdC5jb20+Ci0tLQogLi4uL3NlcnZlci9nd3QvR3d0RHluYW1pY0hvc3RQYWdlU2Vy
dmxldC5qYXZhICAgICAgfCAgICAxICsKIC4uLi9zZXJ2ZXIvZ3d0L1BsdWdpblNvdXJjZVBhZ2VT
ZXJ2bGV0LmphdmEgICAgICAgIHwgIDExMSArKysrKysrKysKIC4uLi9zZXJ2ZXIvZ3d0L1dlYmFk
bWluRHluYW1pY0hvc3RpbmdTZXJ2bGV0LmphdmEgIHwgICAgNCArCiAuLi4vZW5naW5lL3VpL3dl
YmFkbWluL2dpbi9DbGllbnRHaW5qZWN0b3IuamF2YSAgICB8ICAgIDIgKy0KIC4uLi9vdmlydC9l
bmdpbmUvdWkvd2ViYWRtaW4vZ2luL1BsdWdpbk1vZHVsZS5qYXZhIHwgICAyOCArKysKIC4uLi91
aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRGVmaW5pdGlvbnMuamF2YSAgICAgIHwgICAzMCArKysK
IC4uLi91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRXZlbnRIYW5kbGVyLmphdmEgICAgIHwgICAy
MyArKwogLi4uL2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWFuYWdlci5qYXZhICAg
fCAgMjM1ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbWFpbi9wcmVzZW50ZXIvTWFpblNlY3Rp
b25QcmVzZW50ZXIuamF2YSAgICAgICB8ICAgMTcgKystCiAuLi4vbWFpbi9wcmVzZW50ZXIvTWFp
blRhYlBhbmVsUHJlc2VudGVyLmphdmEgICAgICB8ICAgMTAgKwogLi4uL21haW4vcHJlc2VudGVy
L3RhYi9NYWluVGFiQ3VzdG9tUHJlc2VudGVyLmphdmEgfCAgIDQzICsrKysKIC4uLi90YWIvTWFp
blRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyLmphdmEgICAgICAgIHwgICA0NyArKysrCiAuLi4v
bWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21Qcm94eS5qYXZhICAgICB8ICAgNDUgKysr
KwogLi4uL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeS5qYXZhICAgfCAg
IDM0ICsrKwogLi4uL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmlldy5qYXZh
ICAgfCAgIDMyICsrKwogLi4uL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmll
dy51aS54bWwgfCAgIDEwICsKIC4uLi93ZWJhZG1pbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93
ZWIueG1sICAgICAgIHwgICAxMCArCiAxNyBmaWxlcyBjaGFuZ2VkLCA2ODAgaW5zZXJ0aW9ucygr
KSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9t
b2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS9mcm9udGVu
ZC9zZXJ2ZXIvZ3d0L1BsdWdpblNvdXJjZVBhZ2VTZXJ2bGV0LmphdmEKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3Jn
L292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9naW4vUGx1Z2luTW9kdWxlLmphdmEKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2ph
dmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRGVmaW5pdGlvbnMu
amF2YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRt
aW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVn
aW5FdmVudEhhbmRsZXIuamF2YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWlu
L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFk
bWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmphdmEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVu
ZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2lu
ZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJl
c2VudGVyLmphdmEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVz
L3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0
aW9uL21haW4vcHJlc2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIuamF2
YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4v
c3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9w
cmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21Qcm94eS5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmly
dC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1
c3RvbVByb3h5RmFjdG9yeS5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRt
aW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2Vi
YWRtaW4vc2VjdGlvbi9tYWluL3ZpZXcvdGFiL01haW5UYWJDdXN0b21WaWV3LmphdmEKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWlu
L2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vdmlldy90YWIv
TWFpblRhYkN1c3RvbVZpZXcudWkueG1sCgpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4v
bW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRl
bmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0LmphdmEgYi9mcm9udGVuZC93
ZWJhZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91
aS9mcm9udGVuZC9zZXJ2ZXIvZ3d0L0d3dER5bmFtaWNIb3N0UGFnZVNlcnZsZXQuamF2YQppbmRl
eCBmMTk3MzlhLi42ODVlNjg1IDEwMDY0NAotLS0gYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVz
L2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS9mcm9udGVuZC9zZXJ2
ZXIvZ3d0L0d3dER5bmFtaWNIb3N0UGFnZVNlcnZsZXQuamF2YQorKysgYi9mcm9udGVuZC93ZWJh
ZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS9m
cm9udGVuZC9zZXJ2ZXIvZ3d0L0d3dER5bmFtaWNIb3N0UGFnZVNlcnZsZXQuamF2YQpAQCAtNDYs
NiArNDYsNyBAQCBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3d0RHluYW1pY0hvc3RQYWdlU2Vydmxl
dCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2Vy
dmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0
V3JpdGVyKCk7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9VVRGLTgiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIo
IkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIk
CiAKICAgICAgICAgd3JpdGVyLmFwcGVuZCgiPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+Iik7
IC8vJE5PTi1OTFMtMSQKICAgICAgICAgd3JpdGVyLmFwcGVuZCgiPG1ldGEgaHR0cC1lcXVpdj1c
ImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIj4iKTsg
Ly8kTk9OLU5MUy0xJApkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9u
dGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3
dC9QbHVnaW5Tb3VyY2VQYWdlU2VydmxldC5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxl
cy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRlbmQvc2Vy
dmVyL2d3dC9QbHVnaW5Tb3VyY2VQYWdlU2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmIwMzQyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJh
ZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS9m
cm9udGVuZC9zZXJ2ZXIvZ3d0L1BsdWdpblNvdXJjZVBhZ2VTZXJ2bGV0LmphdmEKQEAgLTAsMCAr
MSwxMTEgQEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS5mcm9udGVuZC5zZXJ2ZXIuZ3d0
OworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZl
cmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1
dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5w
dXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CitpbXBv
cnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51
dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmF4LnNlcnZs
ZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZs
ZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNl
OworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5h
cGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CisKKy8qKgorICogUmVuZGVycyB0aGUg
SFRNTCBzb3VyY2UgcGFnZSBmb3IgdGhlIGdpdmVuIFVJIHBsdWdpbi4KKyAqLworcHVibGljIGNs
YXNzIFBsdWdpblNvdXJjZVBhZ2VTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCisgICAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKyAgICBw
cml2YXRlIHN0YXRpYyBMb2cgbG9nZ2VyID0gTG9nRmFjdG9yeS5nZXRMb2coUGx1Z2luU291cmNl
UGFnZVNlcnZsZXQuY2xhc3MpOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQg
ZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVz
cG9uc2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIFJlYWQgcGx1Z2luIG5hbWUg
YXMgSFRUUCByZXF1ZXN0IHBhcmFtZXRlcgorICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IHJl
cXVlc3QuZ2V0UGFyYW1ldGVyKCJwbHVnaW4iKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICBpZiAo
cGx1Z2luTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1pc3Npbmcg
cGx1Z2luIG5hbWUgcmVxdWVzdCBwYXJhbWV0ZXIiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICAg
ICAgcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfQkFEX1JFUVVFU1Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jYXRlIHBs
dWdpbiBjb2RlIGluIGxvY2FsIGZpbGUgc3lzdGVtCisgICAgICAgIC8vIFRPRE8gaGFyZC1jb2Rl
ZCBwbHVnaW4gbG9jYXRpb24KKyAgICAgICAgRmlsZSBwbHVnaW5Db2RlTG9jYXRpb24gPSBuZXcg
RmlsZSgiL2hvbWUvdnN6b2NzL0Rvd25sb2FkcyIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIEZp
bGUgcGx1Z2luQ29kZUZpbGUgPSBuZXcgRmlsZShwbHVnaW5Db2RlTG9jYXRpb24sIHBsdWdpbk5h
bWUgKyAiLmpzIik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgaWYgKCFwbHVnaW5Db2RlRmlsZS5p
c0ZpbGUoKSB8fCAhcGx1Z2luQ29kZUZpbGUuY2FuUmVhZCgpKSB7CisgICAgICAgICAgICBsb2dn
ZXIuZXJyb3IoIkNhbm5vdCByZWFkIHBsdWdpbiBjb2RlOiAiICsgcGx1Z2luQ29kZUZpbGUuZ2V0
QWJzb2x1dGVQYXRoKCkpOyAvLyROT04tTkxTLTEkCisgICAgICAgICAgICByZXNwb25zZS5zZW5k
RXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19OT1RfRk9VTkQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETyBzaW11bGF0ZSBwbHVnaW4gZGVwZW5k
ZW5jaWVzCisgICAgICAgIExpc3Q8U3RyaW5nPiBwbHVnaW5EZXBlbmRlbmN5TGlzdCA9CisgICAg
ICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgiaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2Fq
YXgvbGlicy9qcXVlcnkvMS43LjIvanF1ZXJ5Lm1pbi5qcyIpOyAvLyROT04tTkxTLTEkCisKKyAg
ICAgICAgLy8gVE9ETyBzaW11bGF0ZSBwbHVnaW4gY29uZmlndXJhdGlvbgorICAgICAgICBTdHJp
bmcgcGx1Z2luQ29uZmlndXJhdGlvbk9iamVjdCA9ICJ7IFwiZm9vXCI6IDEyMyB9IjsgLy8kTk9O
LU5MUy0xJAorCisgICAgICAgIC8vIFJlbmRlciBIVE1MIHNvdXJjZSBwYWdlIHRvIHRoZSBvdXRw
dXQKKyAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD1V
VEYtOCIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiQ2FjaGUt
Q29udHJvbCIsICJuby1jYWNoZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworICAg
ICAgICBSZWFkZXIgaW4gPSBudWxsOworICAgICAgICBXcml0ZXIgb3V0ID0gbnVsbDsKKworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0
U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0ocGx1Z2luQ29kZUZpbGUpLCAiVVRGLTgi
KSk7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgICAgIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihu
ZXcgT3V0cHV0U3RyZWFtV3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLCAiVVRGLTgi
KSk7IC8vJE5PTi1OTFMtMSQKKworICAgICAgICAgICAgcmVuZGVyUGx1Z2luU291cmNlUGFnZShp
biwgcGx1Z2luRGVwZW5kZW5jeUxpc3QsIHBsdWdpbkNvbmZpZ3VyYXRpb25PYmplY3QsIG91dCk7
CisgICAgICAgICAgICBvdXQuZmx1c2goKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAg
ICAgIGlmIChpbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaW4uY2xvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVuZGVyUGx1Z2luU291cmNl
UGFnZShSZWFkZXIgcGx1Z2luQ29kZUlucHV0LCBMaXN0PFN0cmluZz4gcGx1Z2luRGVwZW5kZW5j
eUxpc3QsCisgICAgICAgICAgICBTdHJpbmcgcGx1Z2luQ29uZmlndXJhdGlvbk9iamVjdCwgV3Jp
dGVyIG91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgb3V0cHV0LndyaXRlKCI8
IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD4iKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICBvdXRw
dXQud3JpdGUoIjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4
dC9odG1sOyBjaGFyc2V0PVVURi04XCI+Iik7IC8vJE5PTi1OTFMtMSQKKworICAgICAgICBmb3Ig
KFN0cmluZyBkZXBlbmRlbmN5IDogcGx1Z2luRGVwZW5kZW5jeUxpc3QpIHsKKyAgICAgICAgICAg
IG91dHB1dC53cml0ZSgiPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiIik7
IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShkZXBlbmRlbmN5KTsKKyAg
ICAgICAgICAgIG91dHB1dC53cml0ZSgiXCI+PC9zY3JpcHQ+Iik7IC8vJE5PTi1OTFMtMSQKKyAg
ICAgICAgfQorCisgICAgICAgIG91dHB1dC53cml0ZSgiPC9oZWFkPjxib2R5PiIpOyAvLyROT04t
TkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgiPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2Ny
aXB0XCI+Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgb3V0cHV0LndyaXRlKCIoZnVuY3Rpb24o
IHBsdWdpbkFwaSwgcGx1Z2luQ29uZmlnICkgeyIpOyAvLyROT04tTkxTLTEkCisKKyAgICAgICAg
Y29weUNoYXJzKHBsdWdpbkNvZGVJbnB1dCwgb3V0cHV0KTsKKworICAgICAgICBvdXRwdXQud3Jp
dGUoIn0pICggcGFyZW50LnBsdWdpbkFwaSwgIik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgb3V0
cHV0LndyaXRlKHBsdWdpbkNvbmZpZ3VyYXRpb25PYmplY3QpOworICAgICAgICBvdXRwdXQud3Jp
dGUoIiApOyIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgiPC9zY3JpcHQ+
Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgb3V0cHV0LndyaXRlKCI8L2JvZHk+PC9odG1sPiIp
OyAvLyROT04tTkxTLTEkCisgICAgfQorCisgICAgdm9pZCBjb3B5Q2hhcnMoUmVhZGVyIGluLCBX
cml0ZXIgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBjaGFyW10gYnVmZmVyID0g
bmV3IGNoYXJbNCAqIDEwMjRdOyAvLyBVc2UgNCBrQiBidWZmZXIKKyAgICAgICAgaW50IG51bVJl
YWQgPSAwOworCisgICAgICAgIHdoaWxlICgobnVtUmVhZCA9IGluLnJlYWQoYnVmZmVyLCAwLCBi
dWZmZXIubGVuZ3RoKSkgPiAwKSB7CisgICAgICAgICAgICBvdXQud3JpdGUoYnVmZmVyLCAwLCBu
dW1SZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2Vi
YWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv
ZnJvbnRlbmQvc2VydmVyL2d3dC9XZWJhZG1pbkR5bmFtaWNIb3N0aW5nU2VydmxldC5qYXZhIGIv
ZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmly
dC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9XZWJhZG1pbkR5bmFtaWNIb3N0aW5nU2Vy
dmxldC5qYXZhCmluZGV4IDQyOGRjYzUuLmRjYWY0OWEgMTAwNjQ0Ci0tLSBhL2Zyb250ZW5kL3dl
YmFkbWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3Vp
L2Zyb250ZW5kL3NlcnZlci9nd3QvV2ViYWRtaW5EeW5hbWljSG9zdGluZ1NlcnZsZXQuamF2YQor
KysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3Jn
L292aXJ0L2VuZ2luZS91aS9mcm9udGVuZC9zZXJ2ZXIvZ3d0L1dlYmFkbWluRHluYW1pY0hvc3Rp
bmdTZXJ2bGV0LmphdmEKQEAgLTM2LDYgKzM2LDEwIEBAIHB1YmxpYyBjbGFzcyBXZWJhZG1pbkR5
bmFtaWNIb3N0aW5nU2VydmxldCBleHRlbmRzIEd3dER5bmFtaWNIb3N0UGFnZVNlcnZsZXQgewog
ICAgICAgICAgICAgYXBwTW9kZURhdGEucHV0KCJ2YWx1ZSIsIFN0cmluZy52YWx1ZU9mKGFwcGxp
Y2F0aW9uTW9kZSkpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICB3cml0ZUpzT2JqZWN0KHdy
aXRlciwgImFwcGxpY2F0aW9uTW9kZSIsIGFwcE1vZGVEYXRhKTsgLy8kTk9OLU5MUy0xJAogICAg
ICAgICB9CisKKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwbHVnaW5EZWZpbml0aW9ucyA9
IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICBwbHVnaW5EZWZpbml0aW9u
cy5wdXQoIm15UGx1Z2luIiwgIi93ZWJhZG1pbi93ZWJhZG1pbi9QbHVnaW5Tb3VyY2VQYWdlP3Bs
dWdpbj1teVBsdWdpbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKyAgICAgICAgd3Jp
dGVKc09iamVjdCh3cml0ZXIsICJwbHVnaW5EZWZpbml0aW9ucyIsIHBsdWdpbkRlZmluaXRpb25z
KTsgLy8kTk9OLU5MUy0xJAogICAgIH0KIAogICAgIHByaXZhdGUgSW50ZWdlciBnZXRBcHBsaWNh
dGlvbk1vZGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKZGlmZiAtLWdpdCBhL2Zyb250
ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5n
aW5lL3VpL3dlYmFkbWluL2dpbi9DbGllbnRHaW5qZWN0b3IuamF2YSBiL2Zyb250ZW5kL3dlYmFk
bWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dl
YmFkbWluL2dpbi9DbGllbnRHaW5qZWN0b3IuamF2YQppbmRleCBkMjcyYzJiLi5iYWJkZGYxIDEw
MDY0NAotLS0gYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2ph
dmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9naW4vQ2xpZW50R2luamVjdG9yLmphdmEK
KysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29y
Zy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vZ2luL0NsaWVudEdpbmplY3Rvci5qYXZhCkBAIC05
LDcgKzksNyBAQCBpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQuYW5ub3RhdGlvbnMu
RGVmYXVsdEdhdGVrZWVwZXI7CiAvKioKICAqIENsaWVudC1zaWRlIGluamVjdG9yIGNvbmZpZ3Vy
YXRpb24gdXNlZCB0byBib290c3RyYXAgR0lOLgogICovCi1AR2luTW9kdWxlcyh7IFN5c3RlbU1v
ZHVsZS5jbGFzcywgUHJlc2VudGVyTW9kdWxlLmNsYXNzLCBVaUNvbW1vbk1vZHVsZS5jbGFzcyB9
KQorQEdpbk1vZHVsZXMoeyBTeXN0ZW1Nb2R1bGUuY2xhc3MsIFByZXNlbnRlck1vZHVsZS5jbGFz
cywgVWlDb21tb25Nb2R1bGUuY2xhc3MsIFBsdWdpbk1vZHVsZS5jbGFzcyB9KQogcHVibGljIGlu
dGVyZmFjZSBDbGllbnRHaW5qZWN0b3IgZXh0ZW5kcyBCYXNlQ2xpZW50R2luamVjdG9yLCBNYW5h
Z2VkQ29tcG9uZW50cyB7CiAKICAgICBARGVmYXVsdEdhdGVrZWVwZXIKZGlmZiAtLWdpdCBhL2Zy
b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv
ZW5naW5lL3VpL3dlYmFkbWluL2dpbi9QbHVnaW5Nb2R1bGUuamF2YSBiL2Zyb250ZW5kL3dlYmFk
bWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dl
YmFkbWluL2dpbi9QbHVnaW5Nb2R1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMzYxMDMxCi0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9k
dWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4v
Z2luL1BsdWdpbk1vZHVsZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK3BhY2thZ2Ugb3JnLm92aXJ0
LmVuZ2luZS51aS53ZWJhZG1pbi5naW47CisKK2ltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndl
YmFkbWluLnBsdWdpbi5QbHVnaW5FdmVudEhhbmRsZXI7CitpbXBvcnQgb3JnLm92aXJ0LmVuZ2lu
ZS51aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luTWFuYWdlcjsKK2ltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXIudGFiLk1haW5UYWJDdXN0b21Q
cmVzZW50ZXI7CitpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1h
aW4ucHJlc2VudGVyLnRhYi5NYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5OworaW1wb3J0IG9yZy5v
dmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnZpZXcudGFiLk1haW5UYWJDdXN0
b21WaWV3OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuaW5qZWN0LmNsaWVudC5BYnN0cmFjdEdp
bk1vZHVsZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5TaW5nbGV0b247CisKKy8qKgorICog
R0lOIG1vZHVsZSBjb250YWluaW5nIFdlYkFkbWluIFVJIHBsdWdpbiBpbmZyYXN0cnVjdHVyZSBi
aW5kaW5ncy4KKyAqLworcHVibGljIGNsYXNzIFBsdWdpbk1vZHVsZSBleHRlbmRzIEFic3RyYWN0
R2luTW9kdWxlIHsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3Vy
ZSgpIHsKKyAgICAgICAgYmluZChQbHVnaW5NYW5hZ2VyLmNsYXNzKS5hc0VhZ2VyU2luZ2xldG9u
KCk7CisgICAgICAgIGJpbmQoUGx1Z2luRXZlbnRIYW5kbGVyLmNsYXNzKS5hc0VhZ2VyU2luZ2xl
dG9uKCk7CisKKyAgICAgICAgLy8gQmluZCBNYWluVGFiQ3VzdG9tVmlldyB0byBpdHMgdmlldyBp
bnRlcmZhY2UgYXMgbm9uLXNpbmdsZXRvbiwgd2l0aG91dCBwcmVzZW50ZXIgYmluZGluZworICAg
ICAgICAvLyAoTWFpblRhYkN1c3RvbVByZXNlbnRlciBpcyBjcmVhdGVkIG1hbnVhbGx5IGR1cmlu
ZyBydW50aW1lIGJ5IE1haW5UYWJDdXN0b21QcmVzZW50ZXJQcm92aWRlcikKKyAgICAgICAgYmlu
ZChNYWluVGFiQ3VzdG9tUHJlc2VudGVyLlZpZXdEZWYuY2xhc3MpLnRvKE1haW5UYWJDdXN0b21W
aWV3LmNsYXNzKTsKKyAgICAgICAgYmluZChNYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5LmNsYXNz
KS5pbihTaW5nbGV0b24uY2xhc3MpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQv
d2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUv
dWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbkRlZmluaXRpb25zLmphdmEgYi9mcm9udGVuZC93ZWJh
ZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93
ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRGVmaW5pdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kMTExOGNiCi0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2Vi
YWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv
d2ViYWRtaW4vcGx1Z2luL1BsdWdpbkRlZmluaXRpb25zLmphdmEKQEAgLTAsMCArMSwzMCBAQAor
cGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbjsKKworaW1wb3J0IGNv
bS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkphdmFTY3JpcHRPYmplY3Q7CitpbXBvcnQgY29tLmdv
b2dsZS5nd3QuY29yZS5jbGllbnQuSnNBcnJheVN0cmluZzsKKworLyoqCisgKiBPdmVybGF5IHR5
cGUgZm9yIHtAY29kZSBwbHVnaW5EZWZpbml0aW9uc30gZ2xvYmFsIEpTIG9iamVjdC4KKyAqLwor
cHVibGljIGZpbmFsIGNsYXNzIFBsdWdpbkRlZmluaXRpb25zIGV4dGVuZHMgSmF2YVNjcmlwdE9i
amVjdCB7CisKKyAgICBwcm90ZWN0ZWQgUGx1Z2luRGVmaW5pdGlvbnMoKSB7CisgICAgfQorCisg
ICAgcHVibGljIHN0YXRpYyBuYXRpdmUgUGx1Z2luRGVmaW5pdGlvbnMgaW5zdGFuY2UoKSAvKi17
CisgICAgICAgIHJldHVybiAkd25kLnBsdWdpbkRlZmluaXRpb25zOworICAgIH0tKi87CisKKyAg
ICBwdWJsaWMgbmF0aXZlIEpzQXJyYXlTdHJpbmcgZ2V0UGx1Z2luTmFtZXMoKSAvKi17CisgICAg
ICAgIHZhciBwbHVnaW5OYW1lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykg
eworICAgICAgICAgICAgcGx1Z2luTmFtZXMucHVzaChrZXkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBwbHVnaW5OYW1lczsKKyAgICB9LSovOworCisgICAgcHVibGljIG5hdGl2ZSBTdHJp
bmcgZ2V0UGx1Z2luU291cmNlUGFnZVVybChTdHJpbmcgcGx1Z2luTmFtZSkgLyoteworICAgICAg
ICByZXR1cm4gdGhpc1twbHVnaW5OYW1lXTsKKyAgICB9LSovOworCit9CmRpZmYgLS1naXQgYS9m
cm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0
L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRXZlbnRIYW5kbGVyLmphdmEgYi9mcm9u
dGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2Vu
Z2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRXZlbnRIYW5kbGVyLmphdmEKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhZmIyZgotLS0gL2Rldi9udWxsCisrKyBiL2Zy
b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv
ZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5FdmVudEhhbmRsZXIuamF2YQpAQCAtMCww
ICsxLDIzIEBACitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGx1Z2luOwor
CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkV2ZW50QnVzOworaW1wb3J0IGNv
bS5nb29nbGUuaW5qZWN0LkluamVjdDsKKworLyoqCisgKiBIYW5kbGVzIFdlYkFkbWluIGFwcGxp
Y2F0aW9uIGV2ZW50cyAoZXh0ZW5zaW9uIHBvaW50cykgdG8gYmUgY29uc3VtZWQgYnkgVUkgcGx1
Z2lucy4KKyAqIDxwPgorICogU2hvdWxkIGJlIGJvdW5kIGFzIEdJTiBlYWdlciBzaW5nbGV0b24s
IGNyZWF0ZWQgZWFybHkgb24gZHVyaW5nIGFwcGxpY2F0aW9uIHN0YXJ0dXAuCisgKi8KK3B1Ymxp
YyBjbGFzcyBQbHVnaW5FdmVudEhhbmRsZXIgeworCisgICAgQEluamVjdAorICAgIHB1YmxpYyBQ
bHVnaW5FdmVudEhhbmRsZXIoRXZlbnRCdXMgZXZlbnRCdXMsIFBsdWdpbk1hbmFnZXIgbWFuYWdl
cikgeworLy8gICAgICAgIGV2ZW50QnVzLmFkZEhhbmRsZXIoRXh0VXNlckxvZ2luRXZlbnQuZ2V0
VHlwZSgpLCBuZXcgRXh0VXNlckxvZ2luSGFuZGxlcigpIHsKKy8vICAgICAgICAgICAgQE92ZXJy
aWRlCisvLyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXh0VXNlckxvZ2luKEV4dFVzZXJMb2dp
bkV2ZW50IGV2ZW50KSB7CisvLyAgICAgICAgICAgICAgICBpbnZva2VQbHVnaW5zKCJVc2VyTG9n
aW4iKTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0pOworICAgIH0KKworfQpkaWZmIC0t
Z2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29y
Zy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbk1hbmFnZXIuamF2YSBiL2Zy
b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv
ZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4YzA4MQotLS0gL2Rldi9udWxsCisrKyBiL2Zyb250
ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5n
aW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmphdmEKQEAgLTAsMCArMSwyMzUg
QEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW47CisKK2ltcG9y
dCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBq
YXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxv
Z2dpbmcuTG9nZ2VyOworCitpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0
aW9uLm1haW4ucHJlc2VudGVyLnRhYi5NYWluVGFiQ3VzdG9tUHJveHk7CitpbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVyLnRhYi5NYWluVGFi
Q3VzdG9tUHJveHlGYWN0b3J5OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQu
SmF2YVNjcmlwdE9iamVjdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5Kc0Fy
cmF5U3RyaW5nOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LlNjaGVkdWxlcjsK
K2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5TY2hlZHVsZXIuU2NoZWR1bGVkQ29t
bWFuZDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kb20uY2xpZW50LkRvY3VtZW50OworaW1wb3J0
IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQuSUZyYW1lRWxlbWVudDsKK2ltcG9ydCBjb20uZ29v
Z2xlLmd3dC5kb20uY2xpZW50LlN0eWxlLkJvcmRlclN0eWxlOworaW1wb3J0IGNvbS5nb29nbGUu
Z3d0LmRvbS5jbGllbnQuU3R5bGUuUG9zaXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZG9t
LmNsaWVudC5TdHlsZS5Vbml0OworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkluamVjdDsKK2lt
cG9ydCBjb20uZ3d0cGxhdGZvcm0ubXZwLmNsaWVudC5wcm94eS5QbGFjZU1hbmFnZXI7CitpbXBv
cnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQucHJveHkuUGxhY2VSZXF1ZXN0OworCisvKioK
KyAqIFRoZSBtYWluIGNvbXBvbmVudCBvZiBXZWJBZG1pbiBVSSBwbHVnaW4gaW5mcmFzdHJ1Y3R1
cmUuCisgKiA8cD4KKyAqIFNob3VsZCBiZSBib3VuZCBhcyBHSU4gZWFnZXIgc2luZ2xldG9uLCBj
cmVhdGVkIGVhcmx5IG9uIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwLgorICovCitwdWJsaWMg
Y2xhc3MgUGx1Z2luTWFuYWdlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIg
bG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihQbHVnaW5NYW5hZ2VyLmNsYXNzLmdldE5hbWUoKSk7
CisKKyAgICAvLyBNYXBzIHBsdWdpbiBuYW1lcyB0byBjb3JyZXNwb25kaW5nIGlmcmFtZSBlbGVt
ZW50cworICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgSUZyYW1lRWxlbWVudD4gcGx1Z2lu
SUZyYW1lcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSUZyYW1lRWxlbWVudD4oKTsKKworICAgIC8v
IE1hcHMgcGx1Z2luIG5hbWVzIHRvIGNvcnJlc3BvbmRpbmcgcGx1Z2luIG9iamVjdHMgKG9ubHkg
Zm9yIHBsdWdpbnMgd2hpY2ggYXJlIGN1cnJlbnRseSByZWFkeSkKKyAgICBwcml2YXRlIGZpbmFs
IE1hcDxTdHJpbmcsIEphdmFTY3JpcHRPYmplY3Q+IHBsdWdpbk9iamVjdHMgPSBuZXcgSGFzaE1h
cDxTdHJpbmcsIEphdmFTY3JpcHRPYmplY3Q+KCk7CisKKyAgICAvLyBDb250YWlucyBwbHVnaW4g
bmFtZXMgZm9yIHBsdWdpbnMgdGhhdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAvLyAoVWlJ
bml0IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2FzIGFscmVhZHkgY2FsbGVkIG9uIGNvcnJlc3Bv
bmRpbmcgcGx1Z2luIG9iamVjdHMpCisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBpbml0
aWFsaXplZFBsdWdpbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKyAgICAvLyBDb250cm9s
cyBwbHVnaW4gaW52b2NhdGlvbiwgYWxsb3dpbmcgV2ViQWRtaW4gdG8gY2FsbCBwbHVnaW5zIG9u
bHkgd2l0aGluIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gY29udGV4dAorICAgIHByaXZhdGUgYm9v
bGVhbiBjYW5JbnZva2VQbHVnaW5zID0gZmFsc2U7CisKKyAgICBwcml2YXRlIGZpbmFsIE1haW5U
YWJDdXN0b21Qcm94eUZhY3RvcnkgbWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeTsKKyAgICBwcml2
YXRlIGZpbmFsIFBsYWNlTWFuYWdlciBwbGFjZU1hbmFnZXI7CisKKyAgICBASW5qZWN0CisgICAg
cHVibGljIFBsdWdpbk1hbmFnZXIoTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeSBtYWluVGFiQ3Vz
dG9tUHJveHlGYWN0b3J5LCBQbGFjZU1hbmFnZXIgcGxhY2VNYW5hZ2VyKSB7CisgICAgICAgIHRo
aXMubWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeSA9IG1haW5UYWJDdXN0b21Qcm94eUZhY3Rvcnk7
CisgICAgICAgIHRoaXMucGxhY2VNYW5hZ2VyID0gcGxhY2VNYW5hZ2VyOworICAgICAgICBleHBv
c2VQbHVnaW5BcGkoKTsKKyAgICAgICAgbG9hZFBsdWdpbnMoKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDYWxsZWQgd2hlbiBXZWJBZG1pbiBlbnRlcnMgdGhlIHN0YXRlIHRoYXQgYWxsb3dz
IHBsdWdpbnMgdG8gYmUgaW52b2tlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbmFibGVQ
bHVnaW5JbnZvY2F0aW9uKCkgeworICAgICAgICBjYW5JbnZva2VQbHVnaW5zID0gdHJ1ZTsKKwor
ICAgICAgICAvLyBUcnkgdG8gaW5pdGlhbGl6ZSBhbGwgcGx1Z2lucyB3aGljaCBhcmUgY3VycmVu
dGx5IHJlYWR5CisgICAgICAgIGZvciAoU3RyaW5nIHBsdWdpbk5hbWUgOiBwbHVnaW5PYmplY3Rz
LmtleVNldCgpKSB7CisgICAgICAgICAgICBpbml0UGx1Z2luKHBsdWdpbk5hbWUpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4gV2ViQWRtaW4gbGVhdmVz
IHRoZSBzdGF0ZSB0aGF0IGFsbG93cyBwbHVnaW5zIHRvIGJlIGludm9rZWQuCisgICAgICovCisg
ICAgcHVibGljIHZvaWQgZGlzYWJsZVBsdWdpbkludm9jYXRpb24oKSB7CisgICAgICAgIGNhbklu
dm9rZVBsdWdpbnMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBib29sZWFuIGlzUGx1Z2luUmVhZHko
U3RyaW5nIHBsdWdpbk5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHBsdWdpbk9iamVjdHMuY29udGFp
bnNLZXkocGx1Z2luTmFtZSk7CisgICAgfQorCisgICAgYm9vbGVhbiBpc1BsdWdpbkluaXRpYWxp
emVkKFN0cmluZyBwbHVnaW5OYW1lKSB7CisgICAgICAgIHJldHVybiBpbml0aWFsaXplZFBsdWdp
bnMuY29udGFpbnMocGx1Z2luTmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5pdGlh
bGl6ZSB0aGUgZ2l2ZW4gcGx1Z2luIGJ5IGNhbGxpbmcgVWlJbml0IGV2ZW50IGhhbmRsZXIgZnVu
Y3Rpb24gb24gdGhlIGNvcnJlc3BvbmRpbmcgcGx1Z2luIG9iamVjdC4KKyAgICAgKiA8cD4KKyAg
ICAgKiBOb3RlIHRoYXQgVWlJbml0IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2lsbCBiZSBjYWxs
ZWQganVzdCBvbmNlIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgYSBwbHVnaW4uCisgICAgICovCisg
ICAgdm9pZCBpbml0UGx1Z2luKFN0cmluZyBwbHVnaW5OYW1lKSB7CisgICAgICAgIGlmIChjYW5J
bnZva2VQbHVnaW5zICYmIGlzUGx1Z2luUmVhZHkocGx1Z2luTmFtZSkgJiYgIWlzUGx1Z2luSW5p
dGlhbGl6ZWQocGx1Z2luTmFtZSkpIHsKKyAgICAgICAgICAgIEphdmFTY3JpcHRPYmplY3QgcGx1
Z2luT2JqZWN0ID0gcGx1Z2luT2JqZWN0cy5nZXQocGx1Z2luTmFtZSk7CisgICAgICAgICAgICBp
bnZva2VQbHVnaW4ocGx1Z2luT2JqZWN0LCAiVWlJbml0IiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQK
KyAgICAgICAgICAgIGluaXRpYWxpemVkUGx1Z2lucy5hZGQocGx1Z2luTmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnZva2VzIGFuIGV2ZW50IGhhbmRsZXIgZnVu
Y3Rpb24gb24gYWxsIHBsdWdpbnMgd2hpY2ggYXJlIGN1cnJlbnRseSByZWFkeS4KKyAgICAgKi8K
KyAgICBwdWJsaWMgdm9pZCBpbnZva2VQbHVnaW5zKFN0cmluZyBmdW5jdGlvbk5hbWUsIEphdmFT
Y3JpcHRPYmplY3QgY29udGV4dE9iamVjdCkgeworICAgICAgICBpZiAoY2FuSW52b2tlUGx1Z2lu
cykgeworICAgICAgICAgICAgZm9yIChTdHJpbmcgcGx1Z2luTmFtZSA6IHBsdWdpbk9iamVjdHMu
a2V5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW5Jbml0aWFsaXplZChwbHVn
aW5OYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBpbnZva2VQbHVnaW4ocGx1Z2luT2JqZWN0
cy5nZXQocGx1Z2luTmFtZSksIGZ1bmN0aW9uTmFtZSwgY29udGV4dE9iamVjdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisg
ICAgICogSW52b2tlcyBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG9uIHRoZSBnaXZlbiBwbHVn
aW4gb2JqZWN0LgorICAgICAqLworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgaW52b2tlUGx1Z2lu
KEphdmFTY3JpcHRPYmplY3QgcGx1Z2luT2JqZWN0LCBTdHJpbmcgZnVuY3Rpb25OYW1lLCBKYXZh
U2NyaXB0T2JqZWN0IGNvbnRleHRPYmplY3QpIC8qLXsKKyAgICAgICAgdmFyIGhhbmRsZXJGdW5j
dGlvbiA9IHBsdWdpbk9iamVjdFtmdW5jdGlvbk5hbWVdOworCisgICAgICAgIGlmICh0eXBlb2Yg
aGFuZGxlckZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBpZiAoY29udGV4
dE9iamVjdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlckZ1bmN0aW9uKGNvbnRl
eHRPYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVy
RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0tKi87CisKKyAgICAv
KioKKyAgICAgKiBMb2FkcyBhbGwgcGx1Z2lucyB0aGF0IHdlcmUgZGV0ZWN0ZWQgd2hlbiBzZXJ2
aW5nIFdlYkFkbWluIGhvc3QgcGFnZS4KKyAgICAgKi8KKyAgICB2b2lkIGxvYWRQbHVnaW5zKCkg
eworICAgICAgICBQbHVnaW5EZWZpbml0aW9ucyBkZWZzID0gUGx1Z2luRGVmaW5pdGlvbnMuaW5z
dGFuY2UoKTsKKworICAgICAgICBpZiAoZGVmcyAhPSBudWxsKSB7CisgICAgICAgICAgICBKc0Fy
cmF5U3RyaW5nIHBsdWdpbk5hbWVzID0gZGVmcy5nZXRQbHVnaW5OYW1lcygpOworCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdWdpbk5hbWVzLmxlbmd0aCgpOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHBsdWdpbk5hbWVzLmdldChpKTsKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgc291cmNlUGFnZVVybCA9IGRlZnMuZ2V0UGx1Z2luU291cmNlUGFnZVVy
bChuYW1lKTsKKworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2FkaW5nIHBsdWdpbiBb
IiArIG5hbWUgKyAiXSBmcm9tIFVSTCAiICsgc291cmNlUGFnZVVybCk7IC8vJE5PTi1OTFMtMSQg
Ly8kTk9OLU5MUy0yJAorICAgICAgICAgICAgICAgIGxvYWRQbHVnaW4obmFtZSwgc291cmNlUGFn
ZVVybCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBMb2FkcyBhIHBsdWdpbiB1c2luZyBpdHMgc291cmNlIHBhZ2UgKEhUTUwgcGFnZSB0aGF0IGV4
ZWN1dGVzIHRoZSBhY3R1YWwgcGx1Z2luIGNvZGUpLgorICAgICAqIDxwPgorICAgICAqIFdlYkFk
bWluIHJlcXVpcmVzIGFsbCBwbHVnaW5zIHRvIGhhdmUgYSBzb3VyY2UgcGFnZSBiZWNhdXNlIGVh
Y2ggcGx1Z2luIHJ1bnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIGlmcmFtZS4KKyAgICAgKi8K
KyAgICB2b2lkIGxvYWRQbHVnaW4oU3RyaW5nIHBsdWdpbk5hbWUsIFN0cmluZyBwbHVnaW5Tb3Vy
Y2VQYWdlVXJsKSB7CisgICAgICAgIGlmIChwbHVnaW5JRnJhbWVzLmNvbnRhaW5zS2V5KHBsdWdp
bk5hbWUpKSB7CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiUGx1Z2luIFsiICsgcGx1Z2lu
TmFtZSArICJdIGlzIGFscmVhZHkgbG9hZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0y
JAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGFu
IGlmcmFtZSB1c2VkIHRvIGxvYWQgdGhlIHBsdWdpbiBzb3VyY2UgcGFnZQorICAgICAgICBJRnJh
bWVFbGVtZW50IGlmcmFtZSA9IERvY3VtZW50LmdldCgpLmNyZWF0ZUlGcmFtZUVsZW1lbnQoKTsK
KyAgICAgICAgaWZyYW1lLnNldFNyYyhwbHVnaW5Tb3VyY2VQYWdlVXJsKTsKKyAgICAgICAgaWZy
YW1lLnNldEZyYW1lQm9yZGVyKDApOworICAgICAgICBpZnJhbWUuZ2V0U3R5bGUoKS5zZXRQb3Np
dGlvbihQb3NpdGlvbi5BQlNPTFVURSk7CisgICAgICAgIGlmcmFtZS5nZXRTdHlsZSgpLnNldFdp
ZHRoKDAsIFVuaXQuUFQpOworICAgICAgICBpZnJhbWUuZ2V0U3R5bGUoKS5zZXRIZWlnaHQoMCwg
VW5pdC5QVCk7CisgICAgICAgIGlmcmFtZS5nZXRTdHlsZSgpLnNldEJvcmRlclN0eWxlKEJvcmRl
clN0eWxlLk5PTkUpOworICAgICAgICBwbHVnaW5JRnJhbWVzLnB1dChwbHVnaW5OYW1lLCBpZnJh
bWUpOworCisgICAgICAgIC8vIEF0dGFjaCB0aGUgaWZyYW1lIHRvIERPTSBkb2N1bWVudCBib2R5
CisgICAgICAgIERvY3VtZW50LmdldCgpLmdldEJvZHkoKS5hcHBlbmRDaGlsZChpZnJhbWUpOwor
ICAgIH0KKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBnaXZlbiBwbHVnaW4g
aXMgcmVhZHkgZm9yIHVzZS4KKyAgICAgKi8KKyAgICB2b2lkIHBsdWdpblJlYWR5KFN0cmluZyBw
bHVnaW5OYW1lLCBKYXZhU2NyaXB0T2JqZWN0IHBsdWdpbk9iamVjdCkgeworICAgICAgICBpZiAo
cGx1Z2luTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiUGx1Z2lu
IG5hbWUgaXMgbnVsbCBvciB1bmRlZmluZWQiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwbHVnaW5JRnJhbWVzLmNvbnRhaW5z
S2V5KHBsdWdpbk5hbWUpKSB7CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiUGx1Z2luIFsi
ICsgcGx1Z2luTmFtZSArICJdIHJlcG9ydHMgaW4gYXMgcmVhZHksIGJ1dCBoYXMgbm8gaWZyYW1l
IGFzc29jaWF0ZWQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBSZWdpc3RlciB0aGUgcGx1Z2luIG9iamVj
dAorICAgICAgICBwbHVnaW5PYmplY3RzLnB1dChwbHVnaW5OYW1lLCBwbHVnaW5PYmplY3QpOwor
ICAgICAgICBsb2dnZXIuaW5mbygiUGx1Z2luIFsiICsgcGx1Z2luTmFtZSArICJdIGlzIHJlYWR5
IGZvciB1c2UiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKyAgICAgICAgLy8gVHJ5
IHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbgorICAgICAgICBpbml0UGx1Z2luKHBsdWdpbk5hbWUp
OworICAgIH0KKworICAgIC8vIFRPRE8gZWFjaCBwbHVnaW5BcGkgZnVuY3Rpb24gc2hvdWxkIGhh
dmUgZm9sbG93aW5nIGd1YXJkOiBjYW5JbnZva2VQbHVnaW5zICYmIGlzUGx1Z2luSW5pdGlhbGl6
ZWQocGx1Z2luTmFtZSkKKyAgICB2b2lkIGFkZE1haW5UYWIoU3RyaW5nIGxhYmVsLCBTdHJpbmcg
aGlzdG9yeVRva2VuLCBTdHJpbmcgY29udGVudFVybCkgeworICAgICAgICBmaW5hbCBNYWluVGFi
Q3VzdG9tUHJveHkgcHJveHkgPSBtYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5LmNyZWF0ZShsYWJl
bCwgaGlzdG9yeVRva2VuLCBjb250ZW50VXJsKTsKKworICAgICAgICAvLyBBY3RpdmF0ZSB0YWIg
YnkgcmV2ZWFsaW5nIGl0cyBwbGFjZQorICAgICAgICBTY2hlZHVsZXIuZ2V0KCkuc2NoZWR1bGVE
ZWZlcnJlZChuZXcgU2NoZWR1bGVkQ29tbWFuZCgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQor
ICAgICAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKKyAgICAgICAgICAgICAgICBwbGFj
ZU1hbmFnZXIucmV2ZWFsUGxhY2UobmV3IFBsYWNlUmVxdWVzdChwcm94eS5nZXROYW1lVG9rZW4o
KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIG5h
dGl2ZSB2b2lkIGV4cG9zZVBsdWdpbkFwaSgpIC8qLXsKKyAgICAgICAgdmFyIGluc3RhbmNlID0g
dGhpczsKKworICAgICAgICAvLyBFeHBvc2UgdGhlIGdsb2JhbCBwbHVnaW5BcGkgb2JqZWN0Cisg
ICAgICAgICR3bmQucGx1Z2luQXBpID0geworCisgICAgICAgICAgICAvLyBQbHVnaW5zIHdpbGwg
cmVnaXN0ZXIgdGhlbXNlbHZlcyBpbnRvIHRoaXMgb2JqZWN0IGJ5IGFkZGluZyBuZXcgcHJvcGVy
dHk6CisgICAgICAgICAgICAvLyAtIHByb3BlcnR5IG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHBs
dWdpbgorICAgICAgICAgICAgLy8gLSBwcm9wZXJ0eSB2YWx1ZSBpcyB0aGUgcGx1Z2luIG9iamVj
dCBjb250YWluaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zCisgICAgICAgICAgICBwbHVnaW5z
OiB7fSwKKworICAgICAgICAgICAgLy8gUGx1Z2lucyB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0
byBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIHJlYWR5IGZvciB1c2UKKyAgICAgICAgICAgIHJlYWR5
OiBmdW5jdGlvbihwbHVnaW5OYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIHBsdWdpbk9iamVj
dCA9IHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5A
b3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luTWFuYWdlcjo6cGx1Z2lu
UmVhZHkoTGphdmEvbGFuZy9TdHJpbmc7TGNvbS9nb29nbGUvZ3d0L2NvcmUvY2xpZW50L0phdmFT
Y3JpcHRPYmplY3Q7KShwbHVnaW5OYW1lLHBsdWdpbk9iamVjdCk7CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAvLyBOYW1lc3BhY2UgZm9yIFVJIHJlbGF0ZWQgZnVuY3Rpb25zCisgICAg
ICAgICAgICB1aTogeworCisgICAgICAgICAgICAgICAgLy8gQWRkcyBuZXcgY3VzdG9tIG1haW4g
dGFiCisgICAgICAgICAgICAgICAgYWRkTWFpblRhYjogZnVuY3Rpb24obGFiZWwsIGhpc3RvcnlU
b2tlbiwgY29udGVudFVybCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5Ab3JnLm92
aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luTWFuYWdlcjo6YWRkTWFpblRhYihM
amF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspKGxh
YmVsLGhpc3RvcnlUb2tlbixjb250ZW50VXJsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9OworICAgIH0tKi87CisKK30KZGlmZiAtLWdpdCBhL2Zyb250
ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5n
aW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFpblNlY3Rpb25QcmVzZW50
ZXIuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFp
blNlY3Rpb25QcmVzZW50ZXIuamF2YQppbmRleCA3MThkOGZjLi4xNWI4ODdjIDEwMDY0NAotLS0g
YS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292
aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL01haW5TZWN0aW9u
UHJlc2VudGVyLmphdmEKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9z
cmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3By
ZXNlbnRlci9NYWluU2VjdGlvblByZXNlbnRlci5qYXZhCkBAIC0xLDUgKzEsNyBAQAogcGFja2Fn
ZSBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXI7CiAK
K2ltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbi5QbHVnaW5NYW5hZ2Vy
OworCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkV2ZW50QnVzOwogaW1wb3J0
IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5Hd3RFdmVudC5UeXBlOwogaW1wb3J0IGNvbS5n
b29nbGUuaW5qZWN0LkluamVjdDsKQEAgLTI4LDExICszMCwxMyBAQCBwdWJsaWMgY2xhc3MgTWFp
blNlY3Rpb25QcmVzZW50ZXIgZXh0ZW5kcyBQcmVzZW50ZXI8TWFpblNlY3Rpb25QcmVzZW50ZXIu
Vmlld0RlZgogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVHlwZTxSZXZlYWxDb250ZW50SGFuZGxl
cjw/Pj4gVFlQRV9TZXRNYWluQ29udGVudCA9IG5ldyBUeXBlPFJldmVhbENvbnRlbnRIYW5kbGVy
PD8+PigpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBIZWFkZXJQcmVzZW50ZXJXaWRnZXQgaGVhZGVy
OworICAgIHByaXZhdGUgZmluYWwgUGx1Z2luTWFuYWdlciBwbHVnaW5NYW5hZ2VyOwogCiAgICAg
QEluamVjdAotICAgIHB1YmxpYyBNYWluU2VjdGlvblByZXNlbnRlcihFdmVudEJ1cyBldmVudEJ1
cywgVmlld0RlZiB2aWV3LCBQcm94eURlZiBwcm94eSwgSGVhZGVyUHJlc2VudGVyV2lkZ2V0IGhl
YWRlcikgeworICAgIHB1YmxpYyBNYWluU2VjdGlvblByZXNlbnRlcihFdmVudEJ1cyBldmVudEJ1
cywgVmlld0RlZiB2aWV3LCBQcm94eURlZiBwcm94eSwgSGVhZGVyUHJlc2VudGVyV2lkZ2V0IGhl
YWRlciwgUGx1Z2luTWFuYWdlciBwbHVnaW5NYW5hZ2VyKSB7CiAgICAgICAgIHN1cGVyKGV2ZW50
QnVzLCB2aWV3LCBwcm94eSk7CiAgICAgICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyOworICAgICAg
ICB0aGlzLnBsdWdpbk1hbmFnZXIgPSBwbHVnaW5NYW5hZ2VyOwogICAgICAgICBnZXRWaWV3KCku
c2V0VWlIYW5kbGVycyhoZWFkZXIpOwogICAgIH0KIApAQCAtNDYsNiArNTAsMTcgQEAgcHVibGlj
IGNsYXNzIE1haW5TZWN0aW9uUHJlc2VudGVyIGV4dGVuZHMgUHJlc2VudGVyPE1haW5TZWN0aW9u
UHJlc2VudGVyLlZpZXdEZWYKICAgICAgICAgc3VwZXIub25SZXZlYWwoKTsKIAogICAgICAgICBz
ZXRJblNsb3QoVFlQRV9TZXRIZWFkZXIsIGhlYWRlcik7CisKKyAgICAgICAgLy8gRW5hYmxlIHBs
dWdpbiBpbnZvY2F0aW9uIHdpdGhpbiB0aGUgc2NvcGUgb2YgbWFpbiBzZWN0aW9uCisgICAgICAg
IHBsdWdpbk1hbmFnZXIuZW5hYmxlUGx1Z2luSW52b2NhdGlvbigpOworICAgIH0KKworICAgIEBP
dmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uSGlkZSgpIHsKKyAgICAgICAgc3VwZXIub25I
aWRlKCk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBwbHVnaW4gaW52b2NhdGlvbiBvdXRzaWRlIHRo
ZSBzY29wZSBvZiBtYWluIHNlY3Rpb24KKyAgICAgICAgcGx1Z2luTWFuYWdlci5kaXNhYmxlUGx1
Z2luSW52b2NhdGlvbigpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRt
aW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2Vi
YWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci9NYWluVGFiUGFuZWxQcmVzZW50ZXIuamF2YSBi
L2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3Zp
cnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFpblRhYlBhbmVs
UHJlc2VudGVyLmphdmEKaW5kZXggYWMwNDAwMS4uNjExMmQzOCAxMDA2NDQKLS0tIGEvZnJvbnRl
bmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdp
bmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci9NYWluVGFiUGFuZWxQcmVzZW50
ZXIuamF2YQorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWlu
L2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVy
L01haW5UYWJQYW5lbFByZXNlbnRlci5qYXZhCkBAIC01LDYgKzUsNyBAQCBpbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS51aS5jb21tb24ud2lkZ2V0LnRhYi5BYnN0cmFjdEhlYWRsZXNzVGFiUGFuZWwu
VGFiV2lkZ2V0SAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5FdmVudEJ1czsK
IGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuR3d0RXZlbnQuVHlwZTsKIGltcG9y
dCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7CitpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5j
bGllbnQuUmVxdWVzdFRhYnNFdmVudDsKIGltcG9ydCBjb20uZ3d0cGxhdGZvcm0ubXZwLmNsaWVu
dC5SZXF1ZXN0VGFic0hhbmRsZXI7CiBpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQu
VGFiQ29udGFpbmVyUHJlc2VudGVyOwogaW1wb3J0IGNvbS5nd3RwbGF0Zm9ybS5tdnAuY2xpZW50
LlRhYlZpZXc7CkBAIC00NSw0ICs0NiwxMyBAQCBwdWJsaWMgY2xhc3MgTWFpblRhYlBhbmVsUHJl
c2VudGVyIGV4dGVuZHMgVGFiQ29udGFpbmVyUHJlc2VudGVyPE1haW5UYWJQYW5lbFByZQogICAg
ICAgICBSZXZlYWxDb250ZW50RXZlbnQuZmlyZSh0aGlzLCBNYWluQ29udGVudFByZXNlbnRlci5U
WVBFX1NldE1haW5UYWJQYW5lbENvbnRlbnQsIHRoaXMpOwogICAgIH0KIAorICAgIEBPdmVycmlk
ZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmV2ZWFsKCkgeworICAgICAgICBzdXBlci5vblJldmVh
bCgpOworCisgICAgICAgIC8vIFJlZnJlc2ggdGFicyBlYWNoIHRpbWUgdGhpcyB0YWIgY29udGFp
bmVyIGlzIHJldmVhbGVkCisgICAgICAgIGdldFZpZXcoKS5yZW1vdmVUYWJzKCk7CisgICAgICAg
IFJlcXVlc3RUYWJzRXZlbnQuZmlyZSh0aGlzLCBUWVBFX1JlcXVlc3RUYWJzLCB0aGlzKTsKKyAg
ICB9CisKIH0KZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4v
c3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9w
cmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21QcmVzZW50ZXIuamF2YSBiL2Zyb250ZW5kL3dlYmFk
bWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dl
YmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21QcmVzZW50ZXIu
amF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljMmY1Ci0tLSAvZGV2
L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9q
YXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90
YWIvTWFpblRhYkN1c3RvbVByZXNlbnRlci5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKK3BhY2thZ2Ug
b3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVyLnRhYjsK
KworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnByZXNl
bnRlci5NYWluVGFiUGFuZWxQcmVzZW50ZXI7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVu
dC5zaGFyZWQuRXZlbnRCdXM7CitpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQuUHJl
c2VudGVyOworaW1wb3J0IGNvbS5nd3RwbGF0Zm9ybS5tdnAuY2xpZW50LlZpZXc7CitpbXBvcnQg
Y29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQucHJveHkuUmV2ZWFsQ29udGVudEV2ZW50OworaW1w
b3J0IGNvbS5nd3RwbGF0Zm9ybS5tdnAuY2xpZW50LnByb3h5LlRhYkNvbnRlbnRQcm94eVBsYWNl
OworCitwdWJsaWMgY2xhc3MgTWFpblRhYkN1c3RvbVByZXNlbnRlciBleHRlbmRzIFByZXNlbnRl
cjxNYWluVGFiQ3VzdG9tUHJlc2VudGVyLlZpZXdEZWYsIE1haW5UYWJDdXN0b21QcmVzZW50ZXIu
UHJveHlEZWY+IHsKKworICAgIC8vIE5vIG5lZWQgZm9yIEBQcm94eUNvZGVTcGxpdCwgd2Ugd2ls
bCBwcm92aWRlIG91ciBvd24gcHJveHkgaW1wbGVtZW50YXRpb24KKyAgICBwdWJsaWMgaW50ZXJm
YWNlIFByb3h5RGVmIGV4dGVuZHMgVGFiQ29udGVudFByb3h5UGxhY2U8TWFpblRhYkN1c3RvbVBy
ZXNlbnRlcj4geworICAgIH0KKworICAgIHB1YmxpYyBpbnRlcmZhY2UgVmlld0RlZiBleHRlbmRz
IFZpZXcgeworCisgICAgICAgIHZvaWQgc2V0Q29udGVudFVybChTdHJpbmcgdXJsKTsKKworICAg
IH0KKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGNvbnRlbnRVcmw7CisKKyAgICAvLyBObyBu
ZWVkIGZvciBASW5qZWN0LCB0aGlzIHByZXNlbnRlciB3aWxsIGJlIGNyZWF0ZWQgbWFudWFsbHkg
YnkgTWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyCisgICAgcHVibGljIE1haW5UYWJDdXN0
b21QcmVzZW50ZXIoRXZlbnRCdXMgZXZlbnRCdXMsIFZpZXdEZWYgdmlldywgUHJveHlEZWYgcHJv
eHksIFN0cmluZyBjb250ZW50VXJsKSB7CisgICAgICAgIHN1cGVyKGV2ZW50QnVzLCB2aWV3LCBw
cm94eSk7CisgICAgICAgIHRoaXMuY29udGVudFVybCA9IGNvbnRlbnRVcmw7CisgICAgfQorCisg
ICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgcmV2ZWFsSW5QYXJlbnQoKSB7CisgICAg
ICAgIFJldmVhbENvbnRlbnRFdmVudC5maXJlKHRoaXMsIE1haW5UYWJQYW5lbFByZXNlbnRlci5U
WVBFX1NldFRhYkNvbnRlbnQsIHRoaXMpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHBy
b3RlY3RlZCB2b2lkIG9uQmluZCgpIHsKKyAgICAgICAgc3VwZXIub25CaW5kKCk7CisKKyAgICAg
ICAgZ2V0VmlldygpLnNldENvbnRlbnRVcmwoY29udGVudFVybCk7CisgICAgfQorCit9CmRpZmYg
LS1naXQgYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEv
b3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL3RhYi9N
YWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21v
ZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWlu
L3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21QcmVzZW50ZXJQcm92aWRl
ci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMGJlNTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWlu
L2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVy
L3RhYi9NYWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQ3IEBA
CitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnByZXNl
bnRlci50YWI7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuRXZlbnRCdXM7
CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OworaW1wb3J0IGNvbS5nb29nbGUuaW5q
ZWN0LlByb3ZpZGVyOworCisvKioKKyAqIFByb3ZpZGVyIG9mIHtAbGluayBNYWluVGFiQ3VzdG9t
UHJlc2VudGVyfSBpbnN0YW5jZXMgKG5vbi1zaW5nbGV0b24pLgorICovCitwdWJsaWMgY2xhc3Mg
TWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyIGltcGxlbWVudHMgUHJvdmlkZXI8TWFpblRh
YkN1c3RvbVByZXNlbnRlcj4geworCisgICAgcHJpdmF0ZSBNYWluVGFiQ3VzdG9tUHJlc2VudGVy
IHByZXNlbnRlcjsKKyAgICBwcml2YXRlIE1haW5UYWJDdXN0b21QcmVzZW50ZXIuUHJveHlEZWYg
cHJveHk7CisKKyAgICBwcml2YXRlIGZpbmFsIFByb3ZpZGVyPE1haW5UYWJDdXN0b21QcmVzZW50
ZXIuVmlld0RlZj4gdmlld1Byb3ZpZGVyOworICAgIHByaXZhdGUgZmluYWwgRXZlbnRCdXMgZXZl
bnRCdXM7CisKKyAgICBwcml2YXRlIFN0cmluZyBjb250ZW50VXJsOworCisgICAgQEluamVjdAor
ICAgIHB1YmxpYyBNYWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIoUHJvdmlkZXI8TWFpblRh
YkN1c3RvbVByZXNlbnRlci5WaWV3RGVmPiB2aWV3UHJvdmlkZXIsIEV2ZW50QnVzIGV2ZW50QnVz
KSB7CisgICAgICAgIHRoaXMudmlld1Byb3ZpZGVyID0gdmlld1Byb3ZpZGVyOworICAgICAgICB0
aGlzLmV2ZW50QnVzID0gZXZlbnRCdXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVi
bGljIE1haW5UYWJDdXN0b21QcmVzZW50ZXIgZ2V0KCkgeworICAgICAgICBhc3NlcnQgcHJveHkg
IT0gbnVsbCA6ICJZb3UgbXVzdCBjYWxsIHNldFByb3h5IGZpcnN0IjsgLy8kTk9OLU5MUy0xJAor
CisgICAgICAgIGlmIChwcmVzZW50ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gQ3JlYXRl
IGFuZCBiaW5kIHRoZSBwcmVzZW50ZXIKKyAgICAgICAgICAgIHByZXNlbnRlciA9IG5ldyBNYWlu
VGFiQ3VzdG9tUHJlc2VudGVyKGV2ZW50QnVzLCB2aWV3UHJvdmlkZXIuZ2V0KCksIHByb3h5LCBj
b250ZW50VXJsKTsKKyAgICAgICAgICAgIHByZXNlbnRlci5iaW5kKCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcHJlc2VudGVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBy
b3h5KE1haW5UYWJDdXN0b21QcmVzZW50ZXIuUHJveHlEZWYgcHJveHkpIHsKKyAgICAgICAgdGhp
cy5wcm94eSA9IHByb3h5OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRVcmwo
U3RyaW5nIGNvbnRlbnRVcmwpIHsKKyAgICAgICAgdGhpcy5jb250ZW50VXJsID0gY29udGVudFVy
bDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2Vi
YWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24v
bWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21Qcm94eS5qYXZhIGIvZnJvbnRlbmQvd2Vi
YWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv
d2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5Lmph
dmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2MzI4YwotLS0gL2Rldi9u
dWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFi
L01haW5UYWJDdXN0b21Qcm94eS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLm92
aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVyLnRhYjsKKworaW1w
b3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uZ2luLkNsaWVudEdpbmplY3RvcjsKK2lt
cG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXIu
TWFpblRhYlBhbmVsUHJlc2VudGVyOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hh
cmVkLkV2ZW50QnVzOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlByb3ZpZGVyOworaW1wb3J0
IGNvbS5nd3RwbGF0Zm9ybS5jb21tb24uY2xpZW50LlN0YW5kYXJkUHJvdmlkZXI7CitpbXBvcnQg
Y29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQuVGFiRGF0YUJhc2ljOworaW1wb3J0IGNvbS5nd3Rw
bGF0Zm9ybS5tdnAuY2xpZW50LnByb3h5LlBsYWNlTWFuYWdlcjsKK2ltcG9ydCBjb20uZ3d0cGxh
dGZvcm0ubXZwLmNsaWVudC5wcm94eS5QbGFjZVdpdGhHYXRla2VlcGVyOworaW1wb3J0IGNvbS5n
d3RwbGF0Zm9ybS5tdnAuY2xpZW50LnByb3h5LlRhYkNvbnRlbnRQcm94eUltcGw7CitpbXBvcnQg
Y29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQucHJveHkuVGFiQ29udGVudFByb3h5UGxhY2VJbXBs
OworCisvKioKKyAqIEN1c3RvbSB7QGxpbmsgTWFpblRhYkN1c3RvbVByZXNlbnRlcn0gcHJveHkg
aW1wbGVtZW50YXRpb24uCisgKi8KK3B1YmxpYyBjbGFzcyBNYWluVGFiQ3VzdG9tUHJveHkgZXh0
ZW5kcyBUYWJDb250ZW50UHJveHlQbGFjZUltcGw8TWFpblRhYkN1c3RvbVByZXNlbnRlcj4gaW1w
bGVtZW50cyBNYWluVGFiQ3VzdG9tUHJlc2VudGVyLlByb3h5RGVmIHsKKworICAgIHB1YmxpYyBz
dGF0aWMgY2xhc3MgV3JhcHBlZFByb3h5IGV4dGVuZHMgVGFiQ29udGVudFByb3h5SW1wbDxNYWlu
VGFiQ3VzdG9tUHJlc2VudGVyPiB7CisKKyAgICAgICAgcHVibGljIFdyYXBwZWRQcm94eShQbGFj
ZU1hbmFnZXIgcGxhY2VNYW5hZ2VyLCBFdmVudEJ1cyBldmVudEJ1cywKKyAgICAgICAgICAgICAg
ICBQcm92aWRlcjxNYWluVGFiQ3VzdG9tUHJlc2VudGVyPiBwcmVzZW50ZXJQcm92aWRlciwKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwsIGZsb2F0IHByaW9yaXR5LCBTdHJpbmcgaGlzdG9y
eVRva2VuKSB7CisgICAgICAgICAgICBiaW5kKHBsYWNlTWFuYWdlciwgZXZlbnRCdXMpOworICAg
ICAgICAgICAgcmVxdWVzdFRhYnNFdmVudFR5cGUgPSBNYWluVGFiUGFuZWxQcmVzZW50ZXIuVFlQ
RV9SZXF1ZXN0VGFiczsKKyAgICAgICAgICAgIHRhYkRhdGEgPSBuZXcgVGFiRGF0YUJhc2ljKGxh
YmVsLCBwcmlvcml0eSk7CisgICAgICAgICAgICB0YXJnZXRIaXN0b3J5VG9rZW4gPSBoaXN0b3J5
VG9rZW47CisgICAgICAgICAgICBhZGRSZXF1ZXN0VGFic0hhbmRsZXIoKTsKKyAgICAgICAgICAg
IHByZXNlbnRlciA9IG5ldyBTdGFuZGFyZFByb3ZpZGVyPE1haW5UYWJDdXN0b21QcmVzZW50ZXI+
KHByZXNlbnRlclByb3ZpZGVyKTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcHVibGljIE1h
aW5UYWJDdXN0b21Qcm94eShDbGllbnRHaW5qZWN0b3IgZ2luamVjdG9yLAorICAgICAgICAgICAg
TWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyIHByZXNlbnRlclByb3ZpZGVyLAorICAgICAg
ICAgICAgU3RyaW5nIGxhYmVsLCBmbG9hdCBwcmlvcml0eSwgU3RyaW5nIGhpc3RvcnlUb2tlbikg
eworICAgICAgICBiaW5kKGdpbmplY3Rvci5nZXRQbGFjZU1hbmFnZXIoKSwgZ2luamVjdG9yLmdl
dEV2ZW50QnVzKCkpOworICAgICAgICBwcm94eSA9IG5ldyBXcmFwcGVkUHJveHkoZ2luamVjdG9y
LmdldFBsYWNlTWFuYWdlcigpLCBnaW5qZWN0b3IuZ2V0RXZlbnRCdXMoKSwKKyAgICAgICAgICAg
ICAgICBwcmVzZW50ZXJQcm92aWRlciwgbGFiZWwsIHByaW9yaXR5LCBoaXN0b3J5VG9rZW4pOwor
ICAgICAgICBwbGFjZSA9IG5ldyBQbGFjZVdpdGhHYXRla2VlcGVyKGhpc3RvcnlUb2tlbiwgZ2lu
amVjdG9yLmdldERlZmF1bHRHYXRla2VlcGVyKCkpOworICAgICAgICBwcmVzZW50ZXJQcm92aWRl
ci5zZXRQcm94eSh0aGlzKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFk
bWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dl
YmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21Qcm94eUZhY3Rv
cnkuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFi
L01haW5UYWJDdXN0b21Qcm94eUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mMTY3Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4v
bW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRt
aW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeS5q
YXZhCkBAIC0wLDAgKzEsMzQgQEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1p
bi5zZWN0aW9uLm1haW4ucHJlc2VudGVyLnRhYjsKKworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu
dWkud2ViYWRtaW4uZ2luLkNsaWVudEdpbmplY3RvcjsKKworaW1wb3J0IGNvbS5nb29nbGUuaW5q
ZWN0LkluamVjdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5Qcm92aWRlcjsKKworLyoqCisg
KiBDcmVhdGVzIGFuZCBiaW5kcyB7QGxpbmsgTWFpblRhYkN1c3RvbVByb3h5fSBpbnN0YW5jZXMu
CisgKi8KK3B1YmxpYyBjbGFzcyBNYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5IHsKKworICAgIHBy
aXZhdGUgZmluYWwgQ2xpZW50R2luamVjdG9yIGdpbmplY3RvcjsKKyAgICBwcml2YXRlIGZpbmFs
IFByb3ZpZGVyPE1haW5UYWJDdXN0b21QcmVzZW50ZXJQcm92aWRlcj4gcHJvdmlkZXI7CisKKyAg
ICBASW5qZWN0CisgICAgcHVibGljIE1haW5UYWJDdXN0b21Qcm94eUZhY3RvcnkoQ2xpZW50R2lu
amVjdG9yIGdpbmplY3RvciwKKyAgICAgICAgICAgIFByb3ZpZGVyPE1haW5UYWJDdXN0b21QcmVz
ZW50ZXJQcm92aWRlcj4gcHJvdmlkZXIpIHsKKyAgICAgICAgdGhpcy5naW5qZWN0b3IgPSBnaW5q
ZWN0b3I7CisgICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICB9CisKKyAgICBw
dWJsaWMgTWFpblRhYkN1c3RvbVByb3h5IGNyZWF0ZShTdHJpbmcgbGFiZWwsIFN0cmluZyBoaXN0
b3J5VG9rZW4sIFN0cmluZyBjb250ZW50VXJsKSB7CisgICAgICAgIE1haW5UYWJDdXN0b21QcmVz
ZW50ZXJQcm92aWRlciBwcmVzZW50ZXJQcm92aWRlciA9IHByb3ZpZGVyLmdldCgpOworICAgICAg
ICBwcmVzZW50ZXJQcm92aWRlci5zZXRDb250ZW50VXJsKGNvbnRlbnRVcmwpOworCisgICAgICAg
IC8vIENyZWF0ZSBhbmQgYmluZCB0aGUgcHJveHkgaW5zdGFuY2UKKyAgICAgICAgTWFpblRhYkN1
c3RvbVByb3h5IHByb3h5ID0gbmV3IE1haW5UYWJDdXN0b21Qcm94eSgKKyAgICAgICAgICAgICAg
ICBnaW5qZWN0b3IsIHByZXNlbnRlclByb3ZpZGVyLCBsYWJlbCwgRmxvYXQuTUFYX1ZBTFVFLCBo
aXN0b3J5VG9rZW4pOworCisgICAgICAgIHJldHVybiBwcm94eTsKKyAgICB9CisKK30KZGlmZiAt
LWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9v
cmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFi
Q3VzdG9tVmlldy5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMv
bWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ZpZXcv
dGFiL01haW5UYWJDdXN0b21WaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzhlOTY4MwotLS0gL2Rldi9udWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVs
ZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3Nl
Y3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmlldy5qYXZhCkBAIC0wLDAgKzEsMzIg
QEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4udmll
dy50YWI7CisKK2ltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi52aWV3LkFic3RyYWN0
VmlldzsKK2ltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5w
cmVzZW50ZXIudGFiLk1haW5UYWJDdXN0b21QcmVzZW50ZXI7CisKK2ltcG9ydCBjb20uZ29vZ2xl
Lmd3dC5jb3JlLmNsaWVudC5HV1Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudWliaW5kZXIuY2xp
ZW50LlVpQmluZGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVpYmluZGVyLmNsaWVudC5VaUZp
ZWxkOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLklubGluZUxhYmVsOwor
aW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKK2ltcG9ydCBjb20u
Z29vZ2xlLmluamVjdC5JbmplY3Q7CisKK3B1YmxpYyBjbGFzcyBNYWluVGFiQ3VzdG9tVmlldyBl
eHRlbmRzIEFic3RyYWN0VmlldyBpbXBsZW1lbnRzIE1haW5UYWJDdXN0b21QcmVzZW50ZXIuVmll
d0RlZiB7CisKKyAgICBpbnRlcmZhY2UgVmlld1VpQmluZGVyIGV4dGVuZHMgVWlCaW5kZXI8V2lk
Z2V0LCBNYWluVGFiQ3VzdG9tVmlldz4geworICAgICAgICBWaWV3VWlCaW5kZXIgdWlCaW5kZXIg
PSBHV1QuY3JlYXRlKFZpZXdVaUJpbmRlci5jbGFzcyk7CisgICAgfQorCisgICAgQFVpRmllbGQK
KyAgICBJbmxpbmVMYWJlbCB1cmxMYWJlbDsKKworICAgIEBJbmplY3QKKyAgICBwdWJsaWMgTWFp
blRhYkN1c3RvbVZpZXcoKSB7CisgICAgICAgIGluaXRXaWRnZXQoVmlld1VpQmluZGVyLnVpQmlu
ZGVyLmNyZWF0ZUFuZEJpbmRVaSh0aGlzKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAg
cHVibGljIHZvaWQgc2V0Q29udGVudFVybChTdHJpbmcgdXJsKSB7CisgICAgICAgIHVybExhYmVs
LnNldFRleHQodXJsKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWlu
L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFk
bWluL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmlldy51aS54bWwgYi9mcm9u
dGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2Vu
Z2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vdmlldy90YWIvTWFpblRhYkN1c3RvbVZpZXcu
dWkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzFiZTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWlu
L2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vdmlldy90YWIv
TWFpblRhYkN1c3RvbVZpZXcudWkueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgdWk6VWlCaW5kZXIgU1lTVEVNICJo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9nd3QvRFREL3hodG1sLmVudCI+Cis8dWk6VWlCaW5kZXIgeG1s
bnM6dWk9InVybjp1aTpjb20uZ29vZ2xlLmd3dC51aWJpbmRlciIgeG1sbnM6Zz0idXJuOmltcG9y
dDpjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aSI+CisKKwk8ZzpIVE1MUGFuZWw+CisJCVRP
RE8gZGlzcGxheSB0aGlzIFVSTDoKKwkJPGc6SW5saW5lTGFiZWwgdWk6ZmllbGQ9InVybExhYmVs
IiAvPgorCTwvZzpIVE1MUGFuZWw+CisKKzwvdWk6VWlCaW5kZXI+CmRpZmYgLS1naXQgYS9mcm9u
dGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dl
Yi54bWwgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL3dlYmFw
cC9XRUItSU5GL3dlYi54bWwKaW5kZXggNTM5ZDNkOC4uZGJmOTNhMiAxMDA2NDQKLS0tIGEvZnJv
bnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93
ZWIueG1sCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4v
d2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMjMsNiArMjMsMTYgQEAKIAkJPHVybC1wYXR0ZXJu
Pi93ZWJhZG1pbi9XZWJBZG1pbi5odG1sPC91cmwtcGF0dGVybj4KIAk8L3NlcnZsZXQtbWFwcGlu
Zz4KIAorCTxzZXJ2bGV0PgorCQk8c2VydmxldC1uYW1lPlBsdWdpblNvdXJjZVBhZ2U8L3NlcnZs
ZXQtbmFtZT4KKwkJPHNlcnZsZXQtY2xhc3M+b3JnLm92aXJ0LmVuZ2luZS51aS5mcm9udGVuZC5z
ZXJ2ZXIuZ3d0LlBsdWdpblNvdXJjZVBhZ2VTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgorCTwvc2Vy
dmxldD4KKworCTxzZXJ2bGV0LW1hcHBpbmc+CisJCTxzZXJ2bGV0LW5hbWU+UGx1Z2luU291cmNl
UGFnZTwvc2VydmxldC1uYW1lPgorCQk8dXJsLXBhdHRlcm4+L3dlYmFkbWluL1BsdWdpblNvdXJj
ZVBhZ2U8L3VybC1wYXR0ZXJuPgorCTwvc2VydmxldC1tYXBwaW5nPgorCiAJPCEtLSBEZWZhdWx0
IHBhZ2UgdG8gc2VydmUgLS0+CiAJPHdlbGNvbWUtZmlsZS1saXN0PgogCQk8d2VsY29tZS1maWxl
PmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLS0gCjEuNy40LjQKCg==
------=_Part_14184520_1243635383.1346090320191--