[Engine-devel] Update on UI Plugins: PoC patch revision 3

When the custom tab gets activated, or more precisely, when the custom tab=
------=_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= 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--
participants (1)
-
Vojtech Szocs