Devel
Threads by month
- ----- 2025 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
August 2012
- 45 participants
- 42 discussions
Hi guys,
As you may know the engine currently has the ability to fire an SPM task, and be asynchronously be "woken-up" when it ends.
This is great, but we found the for the Live Storage Migration feature we need something a bit complex - the ability to have a series of async tasks in a single control flow.
Here's my initial design for this, your comments and criticism would be welcome:
http://wiki.ovirt.org/wiki/Features/Serial_Execution_of_Asynchronous_Tasks_…
-Allon
8
25

[Engine-devel] oVirt Workshop Europe 2012: Call For Participation
by workshop-pc@ovirt.org 14 Sep '12
by workshop-pc@ovirt.org 14 Sep '12
14 Sep '12
=================================================================
oVirt Workshop Europe 2012: Call For Participation
November 7-9, 2012 - Hotel Fira Palace - Barcelona, Spain
(All submissions must be received before midnight Sep 14th, 2012)
=================================================================
The oVirt Project is an open virtualization project for anyone who cares
about Linux-based KVM virtualization. Providing a feature-rich server
virtualization management system with advanced capabilities for hosts
and guests, including high availability, live migration, storage
management, system scheduler, and more. By open we mean open source &
open governance, done right.
During this workshop you’ll learn about the technical background and
direction of the oVirt project. You’ll meet the developers, and have an
opportunity to see and dive into the code right away. The workshop is
open to all who want to use, get involved with, or learn about the
comprehensive open virtualization management platform, oVirt. The
sessions cover the technical projects details, governance, getting
involved, usage, and much more. If you have any interest in an Open
Virtualization Management platform, this workshop is for you!
We are excited to announce that this oVirt Workshop will be held in
conjunction with the KVM Forum.
http://events.linuxfoundation.org/events/kvm-forum/
The KVM Forum and oVirt Workshop are co-located with the Linux
Foundation's 2012 LinuxCon Europe in Barcelona, Spain.
oVirt Workshop attendees will be able to attend KVM Forum sessions and
are eligible to attend LinuxCon Europe for a discounted rate.
http://events.linuxfoundation.org/events/kvm-forum/register
We invite you to lead part of the discussion by submitting a speaking
proposal for oVirt Workshop 2012.
http://events.linuxfoundation.org/cfp
Suggested topics:
- community use case/stories
- roadmaps
- deep dives into features/areas
- deep dives into code/debugging/tuning
- integration and extensions
- components: engine, vdsm, node, sdk/cli, reports, mom, guest agent, etc.
- subjects: network, storage, vm life cycle, scheduling & sla, gluster, etc.
- packaging, installation and distributions
- community infrastructure and services
SUBMISSION REQUIREMENTS
Abstracts due: Sep 14th, 2012
Notification: Sep 28th, 2012
Please submit a short abstract (~150 words) describing your presentation
proposal. In your submission please note how long your talk will take.
Slots vary in length up to 45 minutes. Also include in your proposal
the proposal type -- one of:
- technical talk
- end-user talk
- birds of a feather (BOF) session
Submit your proposal here:
http://events.linuxfoundation.org/cfp
You will receive a notification whether or not your presentation proposal
was accepted by Sep 14th.
END-USER COLLABORATION
One of the big challenges as developers is to know what, where and how
people actually use our software. We will reserve a few slots for end
users talking about their deployment challenges and achievements.
If you are using oVirt in production you are encouraged submit a speaking
proposal. Simply mark it as an end-user collaboration proposal. As an
end user, this is a unique opportunity to get your input to developers.
BOF SESSION
We will reserve some slots in the evening after the main conference
tracks, for birds of a feather (BOF) sessions. These sessions will be
less formal than presentation tracks and targetted for people who would
like to discuss specific issues with other developers and/or users.
If you are interested in getting developers and/or uses together to
discuss a specific problem, please submit a BOF proposal.
LIGHTNING TALKS
In addition to submitted talks we will also have some room for lightning
talks. These are short (5 minute) discussions to highlight new work or
ideas that aren't complete enough to warrant a full presentation slot.
Lightning talk submissions and scheduling will be handled on-site at
oVirt Workshop.
HOTEL / TRAVEL
The oVirt Workshop Europe 2012 will be held in Barcelona, Spain at the
Hotel Fira Palace.
http://events.linuxfoundation.org/events/kvm-forum/hotel
Thank you for your interest in oVirt. We're looking forward to your
submissions and seeing you at the oVirt Workshop Europe 2012 in November!
Thanks,
your oVirt Workshop Europe 2012 Program Commitee
Please contact us with any questions or comments.
workshop-pc(a)ovirt.org
1
1
------=_Part_15477537_1702327251.1346339532819
Content-Type: multipart/alternative;
boundary="----=_Part_15477538_89478576.1346339532819"
------=_Part_15477538_89478576.1346339532819
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hello everyone,
as a follow-up to my last email on improving plugin API, here comes the latest revision of UI Plugins proof-of-concept patch (please find it attached).
This patch is focused on improving JavaScript plugin API, along with important changes and improvements made to plugin infrastructure ( PluginManager ). Let's walk through the changes step by step.
Improved plugin API, taking some inspiration from jQuery
Following is a sample plugin code that uses new plugin API:
var myPlugin = pluginApi('myPlugin'); // Obtain plugin API instance for 'myPlugin'
var myPluginConfig = myPlugin.configObject(); // Obtain plugin-specific configuration
// Register event handler functions to be invoked by WebAdmin
// Note: all functions are optional, the plugin only defines functions for events it wants to handle
myPlugin.register({
UiInit: function() {
var testUrl = 'http://www.example.com/' + myPluginConfig.foo; // Assume plugin configuration has 'foo' attribute
myPlugin.ui.addMainTab('Custom Tab', 'custom-tab', testUrl); // Invoke some operation using plugin API
}
});
myPlugin.ready(); // Event handler functions are registered, we are now ready to get initialized (UiInit)
UI plugin life-cycle, enforced by plugin infrastructure
The PluginState enumeration lists possible states of a plugin during its runtime:
* DEFINED : This is the initial state for all plugins. Plugin meta-data has been read by PluginManager and the corresponding iframe element has been created for the plugin. Note that at this point, the iframe element is not attached to DOM yet.
* LOADING : The iframe element for the plugin has been attached to DOM, which causes plugin host page (previously known as plugin source page) to be fetched asynchronously in the background. We are now waiting for plugin to report in as ready. In practice, due to JavaScript runtime being single-threaded, WebAdmin startup logic will continue to execute until the JavaScript runtime is "idle" (browser event loop returns), and at this point JavaScript plugin code gets invoked through the plugin host page.
* READY : The plugin has indicated that it is ready for use. We assume the plugin has already registered its event handler object (object containing various event handler functions to be called by WebAdmin) at this point. We can now proceed with plugin initialization.
* INITIALIZED : The plugin has been initialized by calling UiInit function on its event handler object. We can now call other event handler functions, the plugin is now initialized and in use.
Note on plugin initialization: the UiInit function will be called just once during the lifetime of the plugin, after the plugin reports in as ready AND WebAdmin enters the state that allows plugins to be invoked (entering main section for logged-in users), and before other event handler functions are invoked by the plugin infrastructure.
Plugin meta-data is now passed to client using different format
Previously, plugin meta-data was embedded into WebAdmin host page as a simple JavaScript object, like so:
var pluginDefinitions = { myPlugin: "<URL>", anotherPlugin: "<URL>" }
Now, plugin meta-data is embedded into WebAdmin host page as a JavaScript array, like so:
var pluginDefinitions = [
{ name: "myPlugin", url: "<URL>", config: { "foo": 1, "bar": "whatever" } },
{ name: "anotherPlugin", url: "<URL>" }
];
As you can see, pluginDefinitions is now an array of JavaScript objects, with each object representing plugin meta-data . The "name" and "url" attributes are mandatory (we need to check them when loading plugin descriptors). "config" is the plugin configuration (JSON) object, obtained by merging default plugin configuration (defined in plugin descriptor) with custom plugin configuration (defined in external plugin configuration file) . Note that the "config" attribute is optional.
In terms of Java classes, pluginDefinitions is mapped to PluginDefinitions overlay type, and each meta-data object within the array is mapped to PluginMetaData overlay type.
Note on using assert statements in client code : you might notice that I'm using a lot of assert statements in Plugin class. This is to ensure consistency and guard against corrupted state during development. In GWT, assert statements work in a different way than in standard Java VM. When debugging GWT application using Development Mode, assert statements are checked and throw assertion errors during runtime (they are displayed in Development Mode console). However, when compiling GWT application to JavaScript (Production Mode), assert statements are removed by GWT compiler, so they don't affect the application running in Production Mode.
Let me know what you think guys.
Cheers,
Vojtech
------=_Part_15477538_89478576.1346339532819
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'>Hello everyone,<br><br>as a follow-up to my last emai=
l on improving plugin API, here comes the latest revision of UI Plugins pro=
of-of-concept patch (please find it attached).<br><br>This patch is focused=
on improving JavaScript plugin API, along with important changes and impro=
vements made to plugin infrastructure (<em>PluginManager</em>). Let's walk =
through the changes step by step.<br><br><hr style=3D"width: 100%; height: =
2px;"><br><strong>Improved plugin API, taking some inspiration from jQuery<=
/strong><br style=3D"font-weight: bold;"><br>Following is a sample plugin c=
ode that uses new plugin API:<br><br><span style=3D"font-family: courier ne=
w,courier,monaco,monospace,sans-serif;">var myPlugin =3D pluginApi('myPlugi=
n'); // Obtain plugin API instance for 'myPlugin'</span><br style=3D"font-f=
amily: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"fon=
t-family: courier new,courier,monaco,monospace,sans-serif;">var myPluginCon=
fig =3D myPlugin.configObject(); // Obtain plugin-specific configuration</s=
pan><br style=3D"font-family: courier new,courier,monaco,monospace,sans-ser=
if;"><br style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans=
-serif;">// Register event handler functions to be invoked by WebAdmin</spa=
n><br style=3D"font-family: courier new,courier,monaco,monospace,sans-serif=
;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;">// Note: all functions are optional, the plugin only defines function=
s for events it wants to handle</span><br style=3D"font-family: courier new=
,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier =
new,courier,monaco,monospace,sans-serif;">myPlugin.register({</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; UiInit: function() {</span><br style=3D"font-family: courier new,courie=
r,monaco,monospace,sans-serif;"><span style=3D"font-family: courier new,cou=
rier,monaco,monospace,sans-serif;"> var testUrl =3D 'http=
://www.example.com/' + myPluginConfig.foo; // Assume plugin configuration h=
as 'foo' attribute</span><br style=3D"font-family: courier new,courier,mona=
co,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,m=
onaco,monospace,sans-serif;"> myPlugin.ui.addMainTab('Cus=
tom Tab', 'custom-tab', testUrl); // Invoke some operation using plugin API=
</span><br style=3D"font-family: courier new,courier,monaco,monospace,sans-=
serif;"><span style=3D"font-family: courier new,courier,monaco,monospace,sa=
ns-serif;"> }</span><br style=3D"font-family: courier new,courier,mon=
aco,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,=
monaco,monospace,sans-serif;">});</span><br style=3D"font-family: courier n=
ew,courier,monaco,monospace,sans-serif;"><br style=3D"font-family: courier =
new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: couri=
er new,courier,monaco,monospace,sans-serif;">myPlugin.ready(); // Event han=
dler functions are registered, we are now ready to get initialized (UiInit)=
</span><br style=3D"font-family: courier new,courier,monaco,monospace,sans-=
serif;"><br><hr style=3D"width: 100%; height: 2px;"><br><span style=3D"font=
-weight: bold;">UI plugin life-cycle, enforced by plugin infrastructure</sp=
an><br style=3D"font-weight: bold;"><br>The <span style=3D"font-style: ital=
ic;">PluginState</span> enumeration lists possible states of a plugin durin=
g its runtime:<br><ul><li><span style=3D"font-weight: bold;">DEFINED</span>=
: This is the initial state for all plugins. Plugin meta-data has been read=
by <span style=3D"font-style: italic;">PluginManager</span> and the corres=
ponding iframe element has been created for the plugin. Note that at this p=
oint, the iframe element is not attached to DOM yet.<br><br></li><li><span =
style=3D"font-weight: bold;">LOADING</span>: The iframe element for the plu=
gin has been attached to DOM, which causes <u>plugin host page</u> (previou=
sly known as plugin source page) to be fetched asynchronously in the backgr=
ound. We are now waiting for plugin to report in as ready. In practice, due=
to JavaScript runtime being single-threaded, WebAdmin startup logic will c=
ontinue to execute until the JavaScript runtime is "idle" (browser event lo=
op returns), and at this point JavaScript plugin code gets invoked through =
the plugin host page.<br><br></li><li><span style=3D"font-weight: bold;">RE=
ADY</span>: The plugin has indicated that it is ready for use. We assume th=
e plugin has already registered its event handler object (object containing=
various event handler functions to be called by WebAdmin) at this point. W=
e can now proceed with plugin initialization.<br><br></li><li><span style=
=3D"font-weight: bold;">INITIALIZED</span>: The plugin has been initialized=
by calling <span style=3D"font-style: italic;">UiInit</span> function on i=
ts event handler object. We can now call other event handler functions, the=
plugin is now initialized and in use.</li></ul><p><span style=3D"font-styl=
e: italic; text-decoration: underline;">Note on plugin initialization:</spa=
n> the <span style=3D"font-style: italic;">UiInit</span> function will be c=
alled just once during the lifetime of the plugin, after the plugin reports=
in as ready AND WebAdmin enters the state that allows plugins to be invoke=
d (entering main section for logged-in users), and before other event handl=
er functions are invoked by the plugin infrastructure.</p><p><br></p><hr st=
yle=3D"width: 100%; height: 2px;"><br><p style=3D"font-weight: bold;">Plugi=
n meta-data is now passed to client using different format</p><p><br></p><p=
>Previously, plugin meta-data was embedded into WebAdmin host page as a sim=
ple JavaScript object, like so:</p><p><br></p><p style=3D"font-family: cour=
ier new,courier,monaco,monospace,sans-serif;">var pluginDefinitions =3D { m=
yPlugin: "<URL>", anotherPlugin: "<URL>" }<br></p><p><br></p><p=
>Now, plugin meta-data is embedded into WebAdmin host page as a JavaScript =
array, like so:<br></p><p><br></p><p style=3D"font-family: courier new,cour=
ier,monaco,monospace,sans-serif;">var pluginDefinitions =3D [</p><p style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"> {=
name: "myPlugin", url: "<URL>", config: { "foo": 1, "bar": "whatever=
" } },</p><p style=3D"font-family: courier new,courier,monaco,monospace,san=
s-serif;"> { name: "anotherPlugin", url: "<URL>" }<br></p><p st=
yle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">];</p=
><p><br></p><p>As you can see, <span style=3D"font-style: italic;">pluginDe=
finitions</span> is now an array of JavaScript objects, with each object re=
presenting plugin meta-data. The "name" and "url" attributes are mandatory =
(we need to check them when loading plugin descriptors). "config" is the pl=
ugin configuration (JSON) object, obtained by merging default plugin config=
uration (defined in plugin descriptor) with custom plugin configuration (de=
fined in external plugin configuration file). Note that the "config" attrib=
ute is optional.<br></p><p><br></p><p>In terms of Java classes, <span style=
=3D"font-style: italic;">pluginDefinitions</span> is mapped to <span style=
=3D"font-style: italic;">PluginDefinitions</span> overlay type, and each me=
ta-data object within the array is mapped to <span style=3D"font-style: ita=
lic;">PluginMetaData</span> overlay type.<br></p><p><br></p><hr style=3D"wi=
dth: 100%; height: 2px;"><br><p><span style=3D"font-style: italic; text-dec=
oration: underline;">Note on using assert statements in client code:</span>=
you might notice that I'm using a lot of assert statements in <span style=
=3D"font-style: italic;">Plugin</span> class. This is to ensure consistency=
and guard against corrupted state during development. In GWT, assert state=
ments work in a different way than in standard Java VM. When debugging GWT =
application using Development Mode, assert statements are checked and throw=
assertion errors during runtime (they are displayed in Development Mode co=
nsole). However, when compiling GWT application to JavaScript (Production M=
ode), assert statements are removed by GWT compiler, so they don't affect t=
he application running in Production Mode.<br></p><p><br></p><p>Let me know=
what you think guys.<br></p><p><br></p><p>Cheers,</p><p>Vojtech</p><p><br>=
</p><p></p></div></body></html>
------=_Part_15477538_89478576.1346339532819--
------=_Part_15477537_1702327251.1346339532819
Content-Type: text/x-patch; name=WIP-UI-Plugins-PoC-revision-4.patch
Content-Disposition: attachment; filename=WIP-UI-Plugins-PoC-revision-4.patch
Content-Transfer-Encoding: base64
RnJvbSBlYjQ3NzlkYTZjODUxMmIwNjA3Mzk5ZTg4MzAwMWQxYmUwMzA1OGI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBWb2p0ZWNoIFN6b2NzIDx2c3pvY3NAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCAxOSBKdWwgMjAxMiAxNDo0ODo0MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFdJUDog
VUkgUGx1Z2lucyBQb0MsIHJldmlzaW9uIDQKCkNoYW5nZS1JZDogSWJiZjc2NTlmMDIzZDg5Mjlm
YjBhODMwMzA2MTg1MWJiN2VlNTU1YmMKU2lnbmVkLW9mZi1ieTogVm9qdGVjaCBTem9jcyA8dnN6
b2NzQHJlZGhhdC5jb20+Ci0tLQogLi4uL3NlcnZlci9nd3QvR3d0RHluYW1pY0hvc3RQYWdlU2Vy
dmxldC5qYXZhICAgICAgfCAgICAxICsKIC4uLi9zZXJ2ZXIvZ3d0L1BsdWdpblNvdXJjZVBhZ2VT
ZXJ2bGV0LmphdmEgICAgICAgIHwgIDEwNiArKysrKysrCiAuLi4vc2VydmVyL2d3dC9XZWJhZG1p
bkR5bmFtaWNIb3N0aW5nU2VydmxldC5qYXZhICB8ICAgIDggKy0KIC4uLi9lbmdpbmUvdWkvd2Vi
YWRtaW4vZ2luL0NsaWVudEdpbmplY3Rvci5qYXZhICAgIHwgICAgMiArLQogLi4uL292aXJ0L2Vu
Z2luZS91aS93ZWJhZG1pbi9naW4vUGx1Z2luTW9kdWxlLmphdmEgfCAgIDMwICsrCiAuLi4vb3Zp
cnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW4uamF2YSAgICB8ICAgNjcgKysrKysK
IC4uLi91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRGVmaW5pdGlvbnMuamF2YSAgICAgIHwgICAy
NCArKwogLi4uL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5FdmVudEhhbmRsZXIuamF2YSAgICAg
fCAgIDE5ICsrCiAuLi4vZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmph
dmEgICB8ICAyOTEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9lbmdpbmUvdWkvd2ViYWRtaW4v
cGx1Z2luL1BsdWdpbk1ldGFEYXRhLmphdmEgIHwgICAzNiArKysKIC4uLi9lbmdpbmUvdWkvd2Vi
YWRtaW4vcGx1Z2luL1BsdWdpblN0YXRlLmphdmEgICAgIHwgICAzMyArKysKIC4uLi91aS93ZWJh
ZG1pbi9wbHVnaW4vUGx1Z2luVWlGdW5jdGlvbnMuamF2YSAgICAgIHwgICAyNiArKwogLi4uL21h
aW4vcHJlc2VudGVyL01haW5TZWN0aW9uUHJlc2VudGVyLmphdmEgICAgICAgfCAgIDE3ICstCiAu
Li4vbWFpbi9wcmVzZW50ZXIvTWFpblRhYlBhbmVsUHJlc2VudGVyLmphdmEgICAgICB8ICAgMTAg
KwogLi4uL21haW4vcHJlc2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJlc2VudGVyLmphdmEgfCAg
IDQzICsrKwogLi4uL3RhYi9NYWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIuamF2YSAgICAg
ICAgfCAgIDQ3ICsrKysKIC4uLi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5
LmphdmEgICAgIHwgICA0NSArKysKIC4uLi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0b21Qcm94
eUZhY3RvcnkuamF2YSAgIHwgICAzNCArKysKIC4uLi9zZWN0aW9uL21haW4vdmlldy90YWIvTWFp
blRhYkN1c3RvbVZpZXcuamF2YSAgIHwgICAzMiArKysKIC4uLi9zZWN0aW9uL21haW4vdmlldy90
YWIvTWFpblRhYkN1c3RvbVZpZXcudWkueG1sIHwgICAxMCArCiAuLi4vd2ViYWRtaW4vc3JjL21h
aW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCAgICAgICB8ICAgMTAgKwogMjEgZmlsZXMgY2hhbmdl
ZCwgODg3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmly
dC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9QbHVnaW5Tb3VyY2VQYWdlU2VydmxldC5q
YXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1p
bi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vZ2luL1BsdWdpbk1v
ZHVsZS5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93
ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2lu
L1BsdWdpbi5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxl
cy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1
Z2luL1BsdWdpbkRlZmluaXRpb25zLmphdmEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93
ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91
aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRXZlbnRIYW5kbGVyLmphdmEKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3Jn
L292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWFuYWdlci5qYXZhCiBjcmVh
dGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFp
bi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbk1ldGFEYXRh
LmphdmEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFk
bWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1
Z2luU3RhdGUuamF2YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWluL21vZHVs
ZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3Bs
dWdpbi9QbHVnaW5VaUZ1bmN0aW9ucy5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQv
d2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUv
dWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByZXNl
bnRlci5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93
ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlv
bi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyLmphdmEK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBmcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3Ny
Yy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJl
c2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJveHkuamF2YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZy
b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv
ZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFiL01haW5UYWJDdXN0
b21Qcm94eUZhY3RvcnkuamF2YQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWlu
L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFk
bWluL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmlldy5qYXZhCiBjcmVhdGUg
bW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9q
YXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ZpZXcvdGFiL01h
aW5UYWJDdXN0b21WaWV3LnVpLnhtbAoKZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21v
ZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5k
L3NlcnZlci9nd3QvR3d0RHluYW1pY0hvc3RQYWdlU2VydmxldC5qYXZhIGIvZnJvbnRlbmQvd2Vi
YWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv
ZnJvbnRlbmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0LmphdmEKaW5kZXgg
ZjE5NzM5YS4uNjg1ZTY4NSAxMDA2NDQKLS0tIGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9m
cm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVy
L2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0LmphdmEKKysrIGIvZnJvbnRlbmQvd2ViYWRt
aW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJv
bnRlbmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0LmphdmEKQEAgLTQ2LDYg
KzQ2LDcgQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIEd3dER5bmFtaWNIb3N0UGFnZVNlcnZsZXQg
ZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZs
ZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdy
aXRlcigpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFy
c2V0PVVURi04Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJD
YWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAog
CiAgICAgICAgIHdyaXRlci5hcHBlbmQoIjwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPiIpOyAv
LyROT04tTkxTLTEkCiAgICAgICAgIHdyaXRlci5hcHBlbmQoIjxtZXRhIGh0dHAtZXF1aXY9XCJj
b250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCI+Iik7IC8v
JE5PTi1OTFMtMSQKZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvZnJvbnRl
bmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5kL3NlcnZlci9nd3Qv
UGx1Z2luU291cmNlUGFnZVNlcnZsZXQuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMv
ZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5kL3NlcnZl
ci9nd3QvUGx1Z2luU291cmNlUGFnZVNlcnZsZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xNTlmYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRt
aW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJv
bnRlbmQvc2VydmVyL2d3dC9QbHVnaW5Tb3VyY2VQYWdlU2VydmxldC5qYXZhCkBAIC0wLDAgKzEs
MTA2IEBACitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkuZnJvbnRlbmQuc2VydmVyLmd3dDsK
KworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5CdWZmZXJl
ZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRT
dHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0
U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0
IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRp
bC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0
Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0
UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsK
KworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2ltcG9ydCBvcmcuYXBh
Y2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworCisvKioKKyAqIFJlbmRlcnMgdGhlIEhU
TUwgc291cmNlIHBhZ2UgZm9yIHRoZSBnaXZlbiBVSSBwbHVnaW4uCisgKi8KK3B1YmxpYyBjbGFz
cyBQbHVnaW5Tb3VyY2VQYWdlU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKworICAgIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisgICAgcHJp
dmF0ZSBzdGF0aWMgTG9nIGxvZ2dlciA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFBsdWdpblNvdXJjZVBh
Z2VTZXJ2bGV0LmNsYXNzKTsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGRv
R2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3Bv
bnNlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBSZWFkIHBsdWdpbiBuYW1lIGFz
IEhUVFAgcmVxdWVzdCBwYXJhbWV0ZXIKKyAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSByZXF1
ZXN0LmdldFBhcmFtZXRlcigicGx1Z2luIik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgaWYgKHBs
dWdpbk5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNaXNzaW5nIHBs
dWdpbiBuYW1lIHJlcXVlc3QgcGFyYW1ldGVyIik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgICAg
IHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX0JBRF9SRVFVRVNUKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvY2F0ZSBwbHVn
aW4gY29kZSBpbiBsb2NhbCBmaWxlIHN5c3RlbQorICAgICAgICAvLyBUT0RPIGhhcmQtY29kZWQg
cGx1Z2luIGxvY2F0aW9uCisgICAgICAgIEZpbGUgcGx1Z2luQ29kZUxvY2F0aW9uID0gbmV3IEZp
bGUoIi9ob21lL3Zzem9jcy9Eb3dubG9hZHMiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICBGaWxl
IHBsdWdpbkNvZGVGaWxlID0gbmV3IEZpbGUocGx1Z2luQ29kZUxvY2F0aW9uLCBwbHVnaW5OYW1l
ICsgIi5qcyIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIGlmICghcGx1Z2luQ29kZUZpbGUuaXNG
aWxlKCkgfHwgIXBsdWdpbkNvZGVGaWxlLmNhblJlYWQoKSkgeworICAgICAgICAgICAgbG9nZ2Vy
LmVycm9yKCJDYW5ub3QgcmVhZCBwbHVnaW4gY29kZTogIiArIHBsdWdpbkNvZGVGaWxlLmdldEFi
c29sdXRlUGF0aCgpKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVy
cm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5EKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8gc2ltdWxhdGUgcGx1Z2luIGRlcGVuZGVu
Y2llcworICAgICAgICBMaXN0PFN0cmluZz4gcGx1Z2luRGVwZW5kZW5jeUxpc3QgPQorICAgICAg
ICAgICAgICAgIEFycmF5cy5hc0xpc3QoImh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4
L2xpYnMvanF1ZXJ5LzEuNy4yL2pxdWVyeS5taW4uanMiKTsgLy8kTk9OLU5MUy0xJAorCisgICAg
ICAgIC8vIFJlbmRlciBIVE1MIHNvdXJjZSBwYWdlIHRvIHRoZSBvdXRwdXQKKyAgICAgICAgcmVz
cG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOyAvLyROT04t
TkxTLTEkCisgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby1j
YWNoZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworICAgICAgICBSZWFkZXIgaW4g
PSBudWxsOworICAgICAgICBXcml0ZXIgb3V0ID0gbnVsbDsKKworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5l
dyBGaWxlSW5wdXRTdHJlYW0ocGx1Z2luQ29kZUZpbGUpLCAiVVRGLTgiKSk7IC8vJE5PTi1OTFMt
MSQKKyAgICAgICAgICAgIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFt
V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLCAiVVRGLTgiKSk7IC8vJE5PTi1OTFMt
MSQKKworICAgICAgICAgICAgcmVuZGVyUGx1Z2luU291cmNlUGFnZShpbiwgcGx1Z2luRGVwZW5k
ZW5jeUxpc3QsIG91dCk7CisgICAgICAgICAgICBvdXQuZmx1c2goKTsKKyAgICAgICAgfSBmaW5h
bGx5IHsKKyAgICAgICAgICAgIGlmIChpbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaW4u
Y2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVu
ZGVyUGx1Z2luU291cmNlUGFnZShSZWFkZXIgcGx1Z2luQ29kZUlucHV0LCBMaXN0PFN0cmluZz4g
cGx1Z2luRGVwZW5kZW5jeUxpc3QsIFdyaXRlciBvdXRwdXQpCisgICAgICAgICAgICB0aHJvd3Mg
SU9FeGNlcHRpb24geworICAgICAgICBvdXRwdXQud3JpdGUoIjwhRE9DVFlQRSBodG1sPjxodG1s
PjxoZWFkPiIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgiPG1ldGEgaHR0
cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRG
LThcIj4iKTsgLy8kTk9OLU5MUy0xJAorCisgICAgICAgIGZvciAoU3RyaW5nIGRlcGVuZGVuY3kg
OiBwbHVnaW5EZXBlbmRlbmN5TGlzdCkgeworICAgICAgICAgICAgb3V0cHV0LndyaXRlKCI8c2Ny
aXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIiKTsgLy8kTk9OLU5MUy0xJAorICAg
ICAgICAgICAgb3V0cHV0LndyaXRlKGRlcGVuZGVuY3kpOworICAgICAgICAgICAgb3V0cHV0Lndy
aXRlKCJcIj48L3NjcmlwdD4iKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICB9CisKKyAgICAgICAg
b3V0cHV0LndyaXRlKCI8L2hlYWQ+PGJvZHk+Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgb3V0
cHV0LndyaXRlKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4iKTsgLy8kTk9OLU5M
Uy0xJAorICAgICAgICBvdXRwdXQud3JpdGUoIihmdW5jdGlvbiggcGx1Z2luQXBpICkgeyIpOyAv
LyROT04tTkxTLTEkCisKKyAgICAgICAgY29weUNoYXJzKHBsdWdpbkNvZGVJbnB1dCwgb3V0cHV0
KTsKKworICAgICAgICBvdXRwdXQud3JpdGUoIn0pICggcGFyZW50LnBsdWdpbkFwaSApOyIpOyAv
LyROT04tTkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgiPC9zY3JpcHQ+Iik7IC8vJE5PTi1O
TFMtMSQKKyAgICAgICAgb3V0cHV0LndyaXRlKCI8L2JvZHk+PC9odG1sPiIpOyAvLyROT04tTkxT
LTEkCisgICAgfQorCisgICAgdm9pZCBjb3B5Q2hhcnMoUmVhZGVyIGluLCBXcml0ZXIgb3V0KSB0
aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBjaGFyW10gYnVmZmVyID0gbmV3IGNoYXJbNCAq
IDEwMjRdOyAvLyBVc2UgNCBrQiBidWZmZXIKKyAgICAgICAgaW50IG51bVJlYWQgPSAwOworCisg
ICAgICAgIHdoaWxlICgobnVtUmVhZCA9IGluLnJlYWQoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3Ro
KSkgPiAwKSB7CisgICAgICAgICAgICBvdXQud3JpdGUoYnVmZmVyLCAwLCBudW1SZWFkKTsKKyAg
ICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxl
cy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRlbmQvc2Vy
dmVyL2d3dC9XZWJhZG1pbkR5bmFtaWNIb3N0aW5nU2VydmxldC5qYXZhIGIvZnJvbnRlbmQvd2Vi
YWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv
ZnJvbnRlbmQvc2VydmVyL2d3dC9XZWJhZG1pbkR5bmFtaWNIb3N0aW5nU2VydmxldC5qYXZhCmlu
ZGV4IDQyOGRjYzUuLjY4M2NiNjggMTAwNjQ0Ci0tLSBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVs
ZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5kL3Nl
cnZlci9nd3QvV2ViYWRtaW5EeW5hbWljSG9zdGluZ1NlcnZsZXQuamF2YQorKysgYi9mcm9udGVu
ZC93ZWJhZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2lu
ZS91aS9mcm9udGVuZC9zZXJ2ZXIvZ3d0L1dlYmFkbWluRHluYW1pY0hvc3RpbmdTZXJ2bGV0Lmph
dmEKQEAgLTMwLDE4ICszMCwyMiBAQCBwdWJsaWMgY2xhc3MgV2ViYWRtaW5EeW5hbWljSG9zdGlu
Z1NlcnZsZXQgZXh0ZW5kcyBHd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0IHsKICAgICAgICAgc3Vw
ZXIud3JpdGVBZGRpdGlvbmFsSnNEYXRhKHJlcXVlc3QsIHdyaXRlcik7CiAKICAgICAgICAgSW50
ZWdlciBhcHBsaWNhdGlvbk1vZGUgPSBnZXRBcHBsaWNhdGlvbk1vZGUocmVxdWVzdCk7Ci0KICAg
ICAgICAgaWYgKGFwcGxpY2F0aW9uTW9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBNYXA8U3Ry
aW5nLCBTdHJpbmc+IGFwcE1vZGVEYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7
CiAgICAgICAgICAgICBhcHBNb2RlRGF0YS5wdXQoInZhbHVlIiwgU3RyaW5nLnZhbHVlT2YoYXBw
bGljYXRpb25Nb2RlKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgIHdyaXRlSnNPYmplY3Qo
d3JpdGVyLCAiYXBwbGljYXRpb25Nb2RlIiwgYXBwTW9kZURhdGEpOyAvLyROT04tTkxTLTEkCiAg
ICAgICAgIH0KKworICAgICAgICBTdHJpbmdCdWlsZGVyIHBsdWdpbkRlZmluaXRpb25zID0gbmV3
IFN0cmluZ0J1aWxkZXIoIiB2YXIgcGx1Z2luRGVmaW5pdGlvbnMgPSBbICIpOyAvLyROT04tTkxT
LTEkCisgICAgICAgIHBsdWdpbkRlZmluaXRpb25zLmFwcGVuZCgieyBuYW1lOiBcIm15UGx1Z2lu
XCIsIHVybDogXCIvd2ViYWRtaW4vd2ViYWRtaW4vUGx1Z2luU291cmNlUGFnZT9wbHVnaW49bXlQ
bHVnaW5cIiwgY29uZmlnOiB7IFwiZm9vXCI6IDEgfSB9Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAg
ICAgcGx1Z2luRGVmaW5pdGlvbnMuYXBwZW5kKCIgXTsgIik7IC8vJE5PTi1OTFMtMSQKKyAgICAg
ICAgd3JpdGVyLmFwcGVuZChwbHVnaW5EZWZpbml0aW9ucy50b1N0cmluZygpKTsKICAgICB9CiAK
ICAgICBwcml2YXRlIEludGVnZXIgZ2V0QXBwbGljYXRpb25Nb2RlKEh0dHBTZXJ2bGV0UmVxdWVz
dCByZXF1ZXN0KSB7CiAgICAgICAgIHJldHVybiAoSW50ZWdlcikgcnVuUHVibGljUXVlcnkoVmRj
UXVlcnlUeXBlLkdldENvbmZpZ3VyYXRpb25WYWx1ZSwKICAgICAgICAgICAgICAgICBuZXcgR2V0
Q29uZmlndXJhdGlvblZhbHVlUGFyYW1ldGVycyhDb25maWd1cmF0aW9uVmFsdWVzLkFwcGxpY2F0
aW9uTW9kZSwKLSAgICAgICAgICAgICAgICBDb25maWcuRGVmYXVsdENvbmZpZ3VyYXRpb25WZXJz
aW9uKSwgcmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWcuRGVmYXVsdENv
bmZpZ3VyYXRpb25WZXJzaW9uKSwgcmVxdWVzdCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9m
cm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0
L2VuZ2luZS91aS93ZWJhZG1pbi9naW4vQ2xpZW50R2luamVjdG9yLmphdmEgYi9mcm9udGVuZC93
ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91
aS93ZWJhZG1pbi9naW4vQ2xpZW50R2luamVjdG9yLmphdmEKaW5kZXggZDI3MmMyYi4uYmFiZGRm
MSAxMDA2NDQKLS0tIGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFp
bi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vZ2luL0NsaWVudEdpbmplY3Rvci5q
YXZhCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL2dpbi9DbGllbnRHaW5qZWN0b3IuamF2YQpA
QCAtOSw3ICs5LDcgQEAgaW1wb3J0IGNvbS5nd3RwbGF0Zm9ybS5tdnAuY2xpZW50LmFubm90YXRp
b25zLkRlZmF1bHRHYXRla2VlcGVyOwogLyoqCiAgKiBDbGllbnQtc2lkZSBpbmplY3RvciBjb25m
aWd1cmF0aW9uIHVzZWQgdG8gYm9vdHN0cmFwIEdJTi4KICAqLwotQEdpbk1vZHVsZXMoeyBTeXN0
ZW1Nb2R1bGUuY2xhc3MsIFByZXNlbnRlck1vZHVsZS5jbGFzcywgVWlDb21tb25Nb2R1bGUuY2xh
c3MgfSkKK0BHaW5Nb2R1bGVzKHsgU3lzdGVtTW9kdWxlLmNsYXNzLCBQcmVzZW50ZXJNb2R1bGUu
Y2xhc3MsIFVpQ29tbW9uTW9kdWxlLmNsYXNzLCBQbHVnaW5Nb2R1bGUuY2xhc3MgfSkKIHB1Ymxp
YyBpbnRlcmZhY2UgQ2xpZW50R2luamVjdG9yIGV4dGVuZHMgQmFzZUNsaWVudEdpbmplY3Rvciwg
TWFuYWdlZENvbXBvbmVudHMgewogCiAgICAgQERlZmF1bHRHYXRla2VlcGVyCmRpZmYgLS1naXQg
YS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292
aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9naW4vUGx1Z2luTW9kdWxlLmphdmEgYi9mcm9udGVuZC93
ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91
aS93ZWJhZG1pbi9naW4vUGx1Z2luTW9kdWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzU4NDRjMAotLS0gL2Rldi9udWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWlu
L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFk
bWluL2dpbi9QbHVnaW5Nb2R1bGUuamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIG9yZy5v
dmlydC5lbmdpbmUudWkud2ViYWRtaW4uZ2luOworCitpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51
aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luRXZlbnRIYW5kbGVyOworaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkud2ViYWRtaW4ucGx1Z2luLlBsdWdpbk1hbmFnZXI7CitpbXBvcnQgb3JnLm92aXJ0
LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luVWlGdW5jdGlvbnM7CitpbXBvcnQgb3Jn
Lm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVyLnRhYi5NYWlu
VGFiQ3VzdG9tUHJlc2VudGVyOworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4u
c2VjdGlvbi5tYWluLnByZXNlbnRlci50YWIuTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeTsKK2lt
cG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi52aWV3LnRhYi5N
YWluVGFiQ3VzdG9tVmlldzsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmluamVjdC5jbGllbnQu
QWJzdHJhY3RHaW5Nb2R1bGU7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuU2luZ2xldG9uOwor
CisvKioKKyAqIEdJTiBtb2R1bGUgY29udGFpbmluZyBXZWJBZG1pbiBVSSBwbHVnaW4gaW5mcmFz
dHJ1Y3R1cmUgYmluZGluZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBQbHVnaW5Nb2R1bGUgZXh0ZW5k
cyBBYnN0cmFjdEdpbk1vZHVsZSB7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9p
ZCBjb25maWd1cmUoKSB7CisgICAgICAgIGJpbmQoUGx1Z2luTWFuYWdlci5jbGFzcykuYXNFYWdl
clNpbmdsZXRvbigpOworICAgICAgICBiaW5kKFBsdWdpbkV2ZW50SGFuZGxlci5jbGFzcykuYXNF
YWdlclNpbmdsZXRvbigpOworICAgICAgICBiaW5kKFBsdWdpblVpRnVuY3Rpb25zLmNsYXNzKS5p
bihTaW5nbGV0b24uY2xhc3MpOworCisgICAgICAgIC8vIEJpbmQgTWFpblRhYkN1c3RvbVZpZXcg
dG8gaXRzIHZpZXcgaW50ZXJmYWNlIGFzIG5vbi1zaW5nbGV0b24sIHdpdGhvdXQgcHJlc2VudGVy
IGJpbmRpbmcKKyAgICAgICAgLy8gKE1haW5UYWJDdXN0b21QcmVzZW50ZXIgaXMgY3JlYXRlZCBt
YW51YWxseSBkdXJpbmcgcnVudGltZSBieSBNYWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIp
CisgICAgICAgIGJpbmQoTWFpblRhYkN1c3RvbVByZXNlbnRlci5WaWV3RGVmLmNsYXNzKS50byhN
YWluVGFiQ3VzdG9tVmlldy5jbGFzcyk7CisgICAgICAgIGJpbmQoTWFpblRhYkN1c3RvbVByb3h5
RmFjdG9yeS5jbGFzcykuaW4oU2luZ2xldG9uLmNsYXNzKTsKKyAgICB9CisKK30KZGlmZiAtLWdp
dCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcv
b3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW4uamF2YSBiL2Zyb250ZW5kL3dl
YmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3Vp
L3dlYmFkbWluL3BsdWdpbi9QbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41NjI0YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9k
dWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4v
cGx1Z2luL1BsdWdpbi5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVu
Z2luZS51aS53ZWJhZG1pbi5wbHVnaW47CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNs
aWVudC5KYXZhU2NyaXB0T2JqZWN0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQu
SUZyYW1lRWxlbWVudDsKKworLyoqCisgKiBSZXByZXNlbnRzIGEgVUkgcGx1Z2luLCBjb250YWlu
aW5nIG1ldGEtZGF0YSBhcyB3ZWxsIGFzIHJ1bnRpbWUgc3RhdGUuCisgKi8KK3B1YmxpYyBjbGFz
cyBQbHVnaW4geworCisgICAgcHJpdmF0ZSBmaW5hbCBQbHVnaW5NZXRhRGF0YSBtZXRhRGF0YTsK
KyAgICBwcml2YXRlIFBsdWdpblN0YXRlIHN0YXRlOworCisgICAgLy8gVGhlIGlmcmFtZSBlbGVt
ZW50IHVzZWQgdG8gbG9hZCB0aGUgcGx1Z2luIGhvc3QgcGFnZQorICAgIHByaXZhdGUgZmluYWwg
SUZyYW1lRWxlbWVudCBpZnJhbWU7CisKKyAgICAvLyBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgcGx1
Z2luIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zCisgICAgcHJpdmF0ZSBKYXZhU2NyaXB0T2JqZWN0
IGV2ZW50SGFuZGxlck9iamVjdDsKKworICAgIHB1YmxpYyBQbHVnaW4oUGx1Z2luTWV0YURhdGEg
bWV0YURhdGEsIElGcmFtZUVsZW1lbnQgaWZyYW1lKSB7CisgICAgICAgIGFzc2VydCBtZXRhRGF0
YSAhPSBudWxsIDogIlBsdWdpbiBtZXRhLWRhdGEgY2Fubm90IGJlIG51bGwiOyAvLyROT04tTkxT
LTEkCisgICAgICAgIGFzc2VydCBpZnJhbWUgIT0gbnVsbCA6ICJQbHVnaW4gaWZyYW1lIGVsZW1l
bnQgY2Fubm90IGJlIG51bGwiOyAvLyROT04tTkxTLTEkCisgICAgICAgIGFzc2VydCBpZnJhbWUu
Z2V0UGFyZW50RWxlbWVudCgpID09IG51bGwgOiAiUGx1Z2luIGlmcmFtZSBlbGVtZW50IG11c3Qg
YmUgZGV0YWNoZWQgZnJvbSBET00iOyAvLyROT04tTkxTLTEkCisgICAgICAgIHRoaXMubWV0YURh
dGEgPSBtZXRhRGF0YTsKKyAgICAgICAgdGhpcy5zdGF0ZSA9IFBsdWdpblN0YXRlLkRFRklORUQ7
CisgICAgICAgIHRoaXMuaWZyYW1lID0gaWZyYW1lOworICAgIH0KKworICAgIHB1YmxpYyBQbHVn
aW5NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIG1ldGFEYXRhOworICAg
IH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzSW5TdGF0ZShQbHVnaW5TdGF0ZSBzdGF0ZSkgewor
ICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PSBzdGF0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMg
dm9pZCBtYXJrQXNMb2FkaW5nKCkgeworICAgICAgICBhc3NlcnQgc3RhdGUgPT0gUGx1Z2luU3Rh
dGUuREVGSU5FRCA6ICJVbmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb24iOyAvLyROT04tTkxTLTEk
CisgICAgICAgIGFzc2VydCBpZnJhbWUuZ2V0UGFyZW50RWxlbWVudCgpICE9IG51bGwgOiAiUGx1
Z2luIGlmcmFtZSBlbGVtZW50IG11c3QgYmUgYXR0YWNoZWQgdG8gRE9NIjsgLy8kTk9OLU5MUy0x
JAorICAgICAgICBzdGF0ZSA9IFBsdWdpblN0YXRlLkxPQURJTkc7CisgICAgfQorCisgICAgcHVi
bGljIHZvaWQgbWFya0FzUmVhZHkoKSB7CisgICAgICAgIGFzc2VydCBzdGF0ZSA9PSBQbHVnaW5T
dGF0ZS5MT0FESU5HIDogIlVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbiI7IC8vJE5PTi1OTFMt
MSQKKyAgICAgICAgYXNzZXJ0IGV2ZW50SGFuZGxlck9iamVjdCAhPSBudWxsIDogIkV2ZW50IGhh
bmRsZXIgb2JqZWN0IG11c3QgYmUgYXNzaWduZWQiOyAvLyROT04tTkxTLTEkCisgICAgICAgIHN0
YXRlID0gUGx1Z2luU3RhdGUuUkVBRFk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWFya0Fz
SW5pdGlhbGl6ZWQoKSB7CisgICAgICAgIGFzc2VydCBzdGF0ZSA9PSBQbHVnaW5TdGF0ZS5SRUFE
WSA6ICJVbmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb24iOyAvLyROT04tTkxTLTEkCisgICAgICAg
IHN0YXRlID0gUGx1Z2luU3RhdGUuSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgcHVibGljIElG
cmFtZUVsZW1lbnQgZ2V0SUZyYW1lRWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIGlmcmFtZTsK
KyAgICB9CisKKyAgICBwdWJsaWMgSmF2YVNjcmlwdE9iamVjdCBnZXRFdmVudEhhbmRsZXJPYmpl
Y3QoKSB7CisgICAgICAgIHJldHVybiBldmVudEhhbmRsZXJPYmplY3Q7CisgICAgfQorCisgICAg
cHVibGljIHZvaWQgc2V0RXZlbnRIYW5kbGVyT2JqZWN0KEphdmFTY3JpcHRPYmplY3QgZXZlbnRI
YW5kbGVyT2JqZWN0KSB7CisgICAgICAgIGFzc2VydCBldmVudEhhbmRsZXJPYmplY3QgIT0gbnVs
bCA6ICJFdmVudCBoYW5kbGVyIG9iamVjdCBjYW5ub3QgYmUgbnVsbCI7IC8vJE5PTi1OTFMtMSQK
KyAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJPYmplY3QgPSBldmVudEhhbmRsZXJPYmplY3Q7Cisg
ICAgfQorCit9CmRpZmYgLS1naXQgYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWlu
L3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2lu
RGVmaW5pdGlvbnMuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3Jj
L21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5EZWZp
bml0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzhkOTgK
LS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3Ny
Yy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRGVm
aW5pdGlvbnMuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUu
dWkud2ViYWRtaW4ucGx1Z2luOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQu
SmF2YVNjcmlwdE9iamVjdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5Kc0Fy
cmF5OworCisvKioKKyAqIE92ZXJsYXkgdHlwZSBmb3Ige0Bjb2RlIHBsdWdpbkRlZmluaXRpb25z
fSBnbG9iYWwgSlMgb2JqZWN0LgorICogPHA+CisgKiBTZXJ2ZXMgYXMge0BsaW5rIFBsdWdpbk1l
dGFEYXRhfSBhZ2dyZWdhdGUgb2JqZWN0ICh1c2luZyBuYXRpdmUgYXJyYXkgcmVwcmVzZW50YXRp
b24pLgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgUGx1Z2luRGVmaW5pdGlvbnMgZXh0ZW5kcyBK
YXZhU2NyaXB0T2JqZWN0IHsKKworICAgIHByb3RlY3RlZCBQbHVnaW5EZWZpbml0aW9ucygpIHsK
KyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBQbHVnaW5EZWZpbml0aW9ucyBpbnN0
YW5jZSgpIC8qLXsKKyAgICAgICAgcmV0dXJuICR3bmQucGx1Z2luRGVmaW5pdGlvbnM7CisgICAg
fS0qLzsKKworICAgIHB1YmxpYyBuYXRpdmUgSnNBcnJheTxQbHVnaW5NZXRhRGF0YT4gZ2V0TWV0
YURhdGFBcnJheSgpICAvKi17CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0tKi87CisKK30K
ZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4v
amF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5FdmVudEhhbmRs
ZXIuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5FdmVudEhhbmRsZXIu
amF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjVmYzc1Ci0tLSAvZGV2
L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9q
YXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbkV2ZW50SGFuZGxl
ci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJh
ZG1pbi5wbHVnaW47CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuRXZlbnRC
dXM7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OworCisvKioKKyAqIEhhbmRsZXMg
V2ViQWRtaW4gYXBwbGljYXRpb24gZXZlbnRzIChleHRlbnNpb24gcG9pbnRzKSB0byBiZSBjb25z
dW1lZCBieSBVSSBwbHVnaW5zLgorICogPHA+CisgKiBTaG91bGQgYmUgYm91bmQgYXMgR0lOIGVh
Z2VyIHNpbmdsZXRvbiwgY3JlYXRlZCBlYXJseSBvbiBkdXJpbmcgYXBwbGljYXRpb24gc3RhcnR1
cC4KKyAqLworcHVibGljIGNsYXNzIFBsdWdpbkV2ZW50SGFuZGxlciB7CisKKyAgICBASW5qZWN0
CisgICAgcHVibGljIFBsdWdpbkV2ZW50SGFuZGxlcihFdmVudEJ1cyBldmVudEJ1cywgUGx1Z2lu
TWFuYWdlciBtYW5hZ2VyKSB7CisgICAgICAgIC8vIFRPRE8gY2FsbCBFdmVudEJ1cy5hZGRIYW5k
bGVyIGZvciBlYWNoIGV4dGVuc2lvbiBwb2ludCAoZXZlbnQpLAorICAgICAgICAvLyB3aXRoIHRo
ZSBoYW5kbGVyIGltcGxlbWVudGF0aW9uIHVzaW5nIFBsdWdpbk1hbmFnZXIgdG8gY2FsbCBwbHVn
aW5zCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dl
YmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4v
UGx1Z2luTWFuYWdlci5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9z
cmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbk1h
bmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIzZTM0Ci0t
LSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMv
bWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbk1hbmFn
ZXIuamF2YQpAQCAtMCwwICsxLDI5MSBAQAorcGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLndl
YmFkbWluLnBsdWdpbjsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGph
dmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGls
LmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuSmF2
YVNjcmlwdE9iamVjdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5Kc0FycmF5
OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQuRG9jdW1lbnQ7CitpbXBvcnQgY29t
Lmdvb2dsZS5nd3QuZG9tLmNsaWVudC5JRnJhbWVFbGVtZW50OworaW1wb3J0IGNvbS5nb29nbGUu
Z3d0LmRvbS5jbGllbnQuU3R5bGUuQm9yZGVyU3R5bGU7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Qu
ZG9tLmNsaWVudC5TdHlsZS5Qb3NpdGlvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kb20uY2xp
ZW50LlN0eWxlLlVuaXQ7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OworCisvKioK
KyAqIFRoZSBtYWluIGNvbXBvbmVudCBvZiBXZWJBZG1pbiBVSSBwbHVnaW4gaW5mcmFzdHJ1Y3R1
cmUuCisgKiA8cD4KKyAqIFNob3VsZCBiZSBib3VuZCBhcyBHSU4gZWFnZXIgc2luZ2xldG9uLCBj
cmVhdGVkIGVhcmx5IG9uIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwLgorICovCitwdWJsaWMg
Y2xhc3MgUGx1Z2luTWFuYWdlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIg
bG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihQbHVnaW5NYW5hZ2VyLmNsYXNzLmdldE5hbWUoKSk7
CisKKyAgICAvLyBNYXBzIHBsdWdpbiBuYW1lcyB0byBjb3JyZXNwb25kaW5nIG9iamVjdCByZXBy
ZXNlbnRhdGlvbnMKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFBsdWdpbj4gcGx1Z2lu
cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgUGx1Z2luPigpOworCisgICAgLy8gQ29udHJvbHMgcGx1
Z2luIGludm9jYXRpb24sIGFsbG93aW5nIFdlYkFkbWluIHRvIGNhbGwgcGx1Z2lucyBvbmx5IGlu
IGEgc3BlY2lmaWMgY29udGV4dAorICAgIHByaXZhdGUgYm9vbGVhbiBjYW5JbnZva2VQbHVnaW5z
ID0gZmFsc2U7CisKKyAgICBwcml2YXRlIGZpbmFsIFBsdWdpblVpRnVuY3Rpb25zIHVpRnVuY3Rp
b25zOworCisgICAgQEluamVjdAorICAgIHB1YmxpYyBQbHVnaW5NYW5hZ2VyKFBsdWdpblVpRnVu
Y3Rpb25zIHVpRnVuY3Rpb25zKSB7CisgICAgICAgIHRoaXMudWlGdW5jdGlvbnMgPSB1aUZ1bmN0
aW9uczsKKyAgICAgICAgZXhwb3NlUGx1Z2luQXBpKCk7CisgICAgICAgIGRlZmluZUFuZExvYWRQ
bHVnaW5zKCk7CisgICAgfQorCisgICAgUGx1Z2luIGdldFBsdWdpbihTdHJpbmcgcGx1Z2luTmFt
ZSkgeworICAgICAgICByZXR1cm4gcGx1Z2lucy5nZXQocGx1Z2luTmFtZSk7CisgICAgfQorCisg
ICAgQ29sbGVjdGlvbjxQbHVnaW4+IGdldFBsdWdpbnMoKSB7CisgICAgICAgIHJldHVybiBwbHVn
aW5zLnZhbHVlcygpOworICAgIH0KKworICAgIHZvaWQgYWRkUGx1Z2luKFN0cmluZyBwbHVnaW5O
YW1lLCBQbHVnaW4gcGx1Z2luKSB7CisgICAgICAgIHBsdWdpbnMucHV0KHBsdWdpbk5hbWUsIHBs
dWdpbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVmaW5lcyBhbGwgcGx1Z2lucyB0aGF0
IHdlcmUgZGV0ZWN0ZWQgd2hlbiBzZXJ2aW5nIFdlYkFkbWluIGhvc3QgcGFnZSBhbmQgbG9hZHMg
dGhlbSBhcyBuZWNlc3NhcnkuCisgICAgICovCisgICAgdm9pZCBkZWZpbmVBbmRMb2FkUGx1Z2lu
cygpIHsKKyAgICAgICAgUGx1Z2luRGVmaW5pdGlvbnMgZGVmaW5pdGlvbnMgPSBQbHVnaW5EZWZp
bml0aW9ucy5pbnN0YW5jZSgpOworCisgICAgICAgIGlmIChkZWZpbml0aW9ucyAhPSBudWxsKSB7
CisgICAgICAgICAgICBKc0FycmF5PFBsdWdpbk1ldGFEYXRhPiBtZXRhRGF0YUFycmF5ID0gZGVm
aW5pdGlvbnMuZ2V0TWV0YURhdGFBcnJheSgpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1ldGFEYXRhQXJyYXkubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIFBs
dWdpbk1ldGFEYXRhIHBsdWdpbk1ldGFEYXRhID0gbWV0YURhdGFBcnJheS5nZXQoaSk7CisKKyAg
ICAgICAgICAgICAgICBpZiAocGx1Z2luTWV0YURhdGEgIT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVBbmRMb2FkUGx1Z2luKHBsdWdpbk1ldGFEYXRhKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIGEgcGx1Z2luIGZyb20gdGhlIGdpdmVuIG1ldGEtZGF0YSBhbmQgbG9hZHMgaXQg
YXMgbmVjZXNzYXJ5LgorICAgICAqLworICAgIHZvaWQgZGVmaW5lQW5kTG9hZFBsdWdpbihQbHVn
aW5NZXRhRGF0YSBwbHVnaW5NZXRhRGF0YSkgeworICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9
IHBsdWdpbk1ldGFEYXRhLmdldE5hbWUoKTsKKyAgICAgICAgU3RyaW5nIHBsdWdpbkhvc3RQYWdl
VXJsID0gcGx1Z2luTWV0YURhdGEuZ2V0SG9zdFBhZ2VVcmwoKTsKKworICAgICAgICBpZiAoZ2V0
UGx1Z2luKHBsdWdpbk5hbWUpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5n
KCJQbHVnaW4gIiArIHBsdWdpbk5hbWUgKyAiIGlzIGFscmVhZHkgZGVmaW5lZCIpOyAvLyROT04t
TkxTLTEkIC8vJE5PTi1OTFMtMiQKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENyZWF0ZSBhbiBpZnJhbWUgZWxlbWVudCB1c2VkIHRvIGxvYWQgdGhlIHBsdWdp
biBob3N0IHBhZ2UKKyAgICAgICAgSUZyYW1lRWxlbWVudCBpZnJhbWUgPSBEb2N1bWVudC5nZXQo
KS5jcmVhdGVJRnJhbWVFbGVtZW50KCk7CisgICAgICAgIGlmcmFtZS5zZXRTcmMocGx1Z2luSG9z
dFBhZ2VVcmwpOworICAgICAgICBpZnJhbWUuc2V0RnJhbWVCb3JkZXIoMCk7CisgICAgICAgIGlm
cmFtZS5nZXRTdHlsZSgpLnNldFBvc2l0aW9uKFBvc2l0aW9uLkFCU09MVVRFKTsKKyAgICAgICAg
aWZyYW1lLmdldFN0eWxlKCkuc2V0V2lkdGgoMCwgVW5pdC5QVCk7CisgICAgICAgIGlmcmFtZS5n
ZXRTdHlsZSgpLnNldEhlaWdodCgwLCBVbml0LlBUKTsKKyAgICAgICAgaWZyYW1lLmdldFN0eWxl
KCkuc2V0Qm9yZGVyU3R5bGUoQm9yZGVyU3R5bGUuTk9ORSk7CisKKyAgICAgICAgUGx1Z2luIHBs
dWdpbiA9IG5ldyBQbHVnaW4ocGx1Z2luTWV0YURhdGEsIGlmcmFtZSk7CisgICAgICAgIGFkZFBs
dWdpbihwbHVnaW5OYW1lLCBwbHVnaW4pOworICAgICAgICBsb2dnZXIuaW5mbygiUGx1Z2luICIg
KyBwbHVnaW5OYW1lICsgIiBpcyBkZWZpbmVkIHRvIGJlIGxvYWRlZCBmcm9tIFVSTCAiICsgcGx1
Z2luSG9zdFBhZ2VVcmwpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworICAgICAgICAv
LyBUT0RPIGludHJvZHVjZSBzb21lICdsb2FkT25TdGFydHVwJyBhdHRyaWJ1dGUgaW4gZnV0dXJl
CisgICAgICAgIGxvYWRQbHVnaW4ocGx1Z2luKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBM
b2FkcyB0aGUgZ2l2ZW4gcGx1Z2luIGJ5IGF0dGFjaGluZyB0aGUgY29ycmVzcG9uZGluZyBpZnJh
bWUgZWxlbWVudCB0byBET00uCisgICAgICovCisgICAgdm9pZCBsb2FkUGx1Z2luKFBsdWdpbiBw
bHVnaW4pIHsKKyAgICAgICAgaWYgKHBsdWdpbi5pc0luU3RhdGUoUGx1Z2luU3RhdGUuREVGSU5F
RCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50LmdldCgpLmdldEJvZHkoKS5hcHBlbmRDaGlsZChw
bHVnaW4uZ2V0SUZyYW1lRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHBsdWdpbi5tYXJrQXNMb2Fk
aW5nKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiBX
ZWJBZG1pbiBlbnRlcnMgdGhlIHN0YXRlIHRoYXQgYWxsb3dzIHBsdWdpbnMgdG8gYmUgaW52b2tl
ZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbmFibGVQbHVnaW5JbnZvY2F0aW9uKCkgewor
ICAgICAgICBjYW5JbnZva2VQbHVnaW5zID0gdHJ1ZTsKKworICAgICAgICAvLyBUcnkgdG8gaW5p
dGlhbGl6ZSBhbGwgcGx1Z2lucyB3aGljaCBhcmUgY3VycmVudGx5IHJlYWR5CisgICAgICAgIGZv
ciAoUGx1Z2luIHBsdWdpbiA6IGdldFBsdWdpbnMoKSkgeworICAgICAgICAgICAgaWYgKHBsdWdp
bi5pc0luU3RhdGUoUGx1Z2luU3RhdGUuUkVBRFkpKSB7CisgICAgICAgICAgICAgICAgaW5pdFBs
dWdpbihwbHVnaW4uZ2V0TWV0YURhdGEoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4gV2ViQWRtaW4gbGVh
dmVzIHRoZSBzdGF0ZSB0aGF0IGFsbG93cyBwbHVnaW5zIHRvIGJlIGludm9rZWQuCisgICAgICov
CisgICAgcHVibGljIHZvaWQgZGlzYWJsZVBsdWdpbkludm9jYXRpb24oKSB7CisgICAgICAgIGNh
bkludm9rZVBsdWdpbnMgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnZva2Vz
IGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gb24gYWxsIHBsdWdpbnMgd2hpY2ggYXJlIGN1cnJl
bnRseSBpbml0aWFsaXplZC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUge0Bjb2RlIGNvbnRleHRP
YmplY3R9IHJlcHJlc2VudHMgdGhlIGxvY2FsIGNvbnRleHQgb2YgdGhlIGdpdmVuIGZ1bmN0aW9u
IGNhbGwsIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsCisgICAgICogY29udGV4dC1zZW5zaXRpdmUg
aW5mb3JtYXRpb24gYXMgbmVjZXNzYXJ5IChjYW4gYmUge0Bjb2RlIG51bGx9KS4KKyAgICAgKi8K
KyAgICBwdWJsaWMgdm9pZCBpbnZva2VQbHVnaW5zKFN0cmluZyBmdW5jdGlvbk5hbWUsIEphdmFT
Y3JpcHRPYmplY3QgY29udGV4dE9iamVjdCkgeworICAgICAgICBpZiAoY2FuSW52b2tlUGx1Z2lu
cykgeworICAgICAgICAgICAgZm9yIChQbHVnaW4gcGx1Z2luIDogZ2V0UGx1Z2lucygpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5pc0luU3RhdGUoUGx1Z2luU3RhdGUuSU5JVElBTEla
RUQpKSB7CisgICAgICAgICAgICAgICAgICAgIGludm9rZVBsdWdpbihwbHVnaW4uZ2V0RXZlbnRI
YW5kbGVyT2JqZWN0KCksIGZ1bmN0aW9uTmFtZSwgY29udGV4dE9iamVjdCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAg
ICogSW52b2tlcyBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3Qu
CisgICAgICovCisgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBpbnZva2VQbHVnaW4oSmF2YVNjcmlw
dE9iamVjdCBwbHVnaW5FdmVudEhhbmRsZXJPYmplY3QsIFN0cmluZyBmdW5jdGlvbk5hbWUsIEph
dmFTY3JpcHRPYmplY3QgY29udGV4dE9iamVjdCkgLyoteworICAgICAgICB2YXIgaGFuZGxlckZ1
bmN0aW9uID0gcGx1Z2luRXZlbnRIYW5kbGVyT2JqZWN0W2Z1bmN0aW9uTmFtZV07CisKKyAgICAg
ICAgaWYgKHR5cGVvZiBoYW5kbGVyRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0T2JqZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVy
RnVuY3Rpb24oY29udGV4dE9iamVjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGhhbmRsZXJGdW5jdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fS0qLzsKKworICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IHdoZW4gcGx1Z2lu
IGludm9jYXRpb24gaXMgZW5hYmxlZCBhbmQgdGhlIGdpdmVuIHBsdWdpbiBoYXMgYmVlbiBpbml0
aWFsaXplZC4KKyAgICAgKi8KKyAgICBib29sZWFuIGNhbkRvUGx1Z2luQWN0aW9uKFN0cmluZyBw
bHVnaW5OYW1lKSB7CisgICAgICAgIFBsdWdpbiBwbHVnaW4gPSBnZXRQbHVnaW4ocGx1Z2luTmFt
ZSk7CisgICAgICAgIHJldHVybiBjYW5JbnZva2VQbHVnaW5zICYmIHBsdWdpbiAhPSBudWxsICYm
IHBsdWdpbi5pc0luU3RhdGUoUGx1Z2luU3RhdGUuSU5JVElBTElaRUQpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIG9iamVjdCAob2JqZWN0IGNv
bnRhaW5pbmcgcGx1Z2luIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zKSBmb3IgdGhlIGdpdmVuIHBs
dWdpbi4KKyAgICAgKi8KKyAgICB2b2lkIHJlZ2lzdGVyUGx1Z2luRXZlbnRIYW5kbGVyT2JqZWN0
KFN0cmluZyBwbHVnaW5OYW1lLCBKYXZhU2NyaXB0T2JqZWN0IHBsdWdpbkV2ZW50SGFuZGxlck9i
amVjdCkgeworICAgICAgICBQbHVnaW4gcGx1Z2luID0gZ2V0UGx1Z2luKHBsdWdpbk5hbWUpOwor
CisgICAgICAgIGlmIChwbHVnaW4gIT0gbnVsbCAmJiBwbHVnaW5FdmVudEhhbmRsZXJPYmplY3Qg
IT0gbnVsbCkgeworICAgICAgICAgICAgcGx1Z2luLnNldEV2ZW50SGFuZGxlck9iamVjdChwbHVn
aW5FdmVudEhhbmRsZXJPYmplY3QpOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlBsdWdpbiAi
ICsgcGx1Z2luTmFtZSArICIgaGFzIHJlZ2lzdGVyZWQgdGhlIGV2ZW50IGhhbmRsZXIgb2JqZWN0
Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorICAgICAgICB9CisgICAgfQorCisgICAg
LyoqCisgICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGdpdmVuIHBsdWdpbiBpcyByZWFkeSBmb3Ig
dXNlLgorICAgICAqLworICAgIHZvaWQgcGx1Z2luUmVhZHkoU3RyaW5nIHBsdWdpbk5hbWUpIHsK
KyAgICAgICAgUGx1Z2luIHBsdWdpbiA9IGdldFBsdWdpbihwbHVnaW5OYW1lKTsKKworICAgICAg
ICBpZiAocGx1Z2luICE9IG51bGwgJiYgcGx1Z2luLmlzSW5TdGF0ZShQbHVnaW5TdGF0ZS5MT0FE
SU5HKSkgeworICAgICAgICAgICAgaWYgKHBsdWdpbi5nZXRFdmVudEhhbmRsZXJPYmplY3QoKSA9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlBsdWdpbiAiICsgcGx1
Z2luTmFtZSAvLyROT04tTkxTLTEkCisgICAgICAgICAgICAgICAgICAgICAgICArICIgcmVwb3J0
cyBpbiBhcyByZWFkeSwgYnV0IGhhcyBubyBldmVudCBoYW5kbGVyIG9iamVjdCBhc3NpZ25lZCIp
OyAvLyROT04tTkxTLTEkCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwbHVnaW4ubWFya0FzUmVhZHkoKTsKKyAgICAgICAgICAgIGxvZ2dlci5p
bmZvKCJQbHVnaW4gIiArIHBsdWdpbk5hbWUgKyAiIHJlcG9ydHMgaW4gYXMgcmVhZHkiKTsgLy8k
Tk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisgICAgICAgICAgICBpbml0UGx1Z2luKHBsdWdpbk5h
bWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXR0ZW1wdHMgdG8gaW5p
dGlhbGl6ZSB0aGUgZ2l2ZW4gcGx1Z2luIGJ5IGNhbGxpbmcgVWlJbml0IGV2ZW50IGhhbmRsZXIg
ZnVuY3Rpb24gb24gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQKKyAgICAgKiBoYW5kbGVyIG9iamVj
dC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgVWlJbml0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IGp1c3Qgb25jZSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGEgcGx1Z2luLiBNb3JlIHByZWNpc2Vs
eSwgVWlJbml0IGZ1bmN0aW9uCisgICAgICogd2lsbCBiZSBjYWxsZWQ6CisgICAgICogPHVsPgor
ICAgICAqIDxsaT5hZnRlciB0aGUgcGx1Z2luIHJlcG9ydHMgaW4gYXMgcmVhZHkgYW5kIFdlYkFk
bWluIGVudGVycyB0aGUgc3RhdGUgdGhhdCBhbGxvd3MgcGx1Z2lucyB0byBiZSBpbnZva2VkCisg
ICAgICogPGxpPmJlZm9yZSBhbnkgb3RoZXIgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgYXJlIGlu
dm9rZWQgYnkgdGhlIHBsdWdpbiBpbmZyYXN0cnVjdHVyZQorICAgICAqIDwvdWw+CisgICAgICov
CisgICAgdm9pZCBpbml0UGx1Z2luKFN0cmluZyBwbHVnaW5OYW1lKSB7CisgICAgICAgIFBsdWdp
biBwbHVnaW4gPSBnZXRQbHVnaW4ocGx1Z2luTmFtZSk7CisKKyAgICAgICAgaWYgKGNhbkludm9r
ZVBsdWdpbnMgJiYgcGx1Z2luICE9IG51bGwgJiYgcGx1Z2luLmlzSW5TdGF0ZShQbHVnaW5TdGF0
ZS5SRUFEWSkpIHsKKyAgICAgICAgICAgIHBsdWdpbi5tYXJrQXNJbml0aWFsaXplZCgpOworICAg
ICAgICAgICAgaW52b2tlUGx1Z2luKHBsdWdpbi5nZXRFdmVudEhhbmRsZXJPYmplY3QoKSwgIlVp
SW5pdCIsIG51bGwpOyAvLyROT04tTkxTLTEkCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiUGx1
Z2luICIgKyBwbHVnaW5OYW1lICsgIiBpcyBpbml0aWFsaXplZCBhbmQgaW4gdXNlIG5vdyIpOyAv
LyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0
aGUgZ2l2ZW4gcGx1Z2luLCBvciB7QGNvZGUgbnVsbH0gaWYgbm8gc3VjaCBvYmplY3QgZXhpc3Rz
LgorICAgICAqLworICAgIEphdmFTY3JpcHRPYmplY3QgZ2V0Q29uZmlnT2JqZWN0KFN0cmluZyBw
bHVnaW5OYW1lKSB7CisgICAgICAgIFBsdWdpbiBwbHVnaW4gPSBnZXRQbHVnaW4ocGx1Z2luTmFt
ZSk7CisgICAgICAgIHJldHVybiBwbHVnaW4gIT0gbnVsbCA/IHBsdWdpbi5nZXRNZXRhRGF0YSgp
LmdldENvbmZpZ09iamVjdCgpIDogbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIG5hdGl2ZSB2
b2lkIGV4cG9zZVBsdWdpbkFwaSgpIC8qLXsKKyAgICAgICAgdmFyIGN0eCA9IHRoaXM7CisgICAg
ICAgIHZhciB1aUZ1bmN0aW9ucyA9IGN0eC5Ab3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5w
bHVnaW4uUGx1Z2luTWFuYWdlcjo6dWlGdW5jdGlvbnM7CisKKyAgICAgICAgdmFyIGNhbkRvUGx1
Z2luQWN0aW9uID0gZnVuY3Rpb24ocGx1Z2luTmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIGN0
eC5Ab3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW4uUGx1Z2luTWFuYWdlcjo6Y2Fu
RG9QbHVnaW5BY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7KShwbHVnaW5OYW1lKTsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBEZWZpbmUgcGx1Z2luQXBpIGZ1bmN0aW9uIHVzZWQgdG8gY29uc3Ry
dWN0IHNwZWNpZmljIFBsdWdpbiBBUEkgaW5zdGFuY2VzCisgICAgICAgIHZhciBwbHVnaW5BcGkg
PSBmdW5jdGlvbihwbHVnaW5OYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IHBsdWdpbkFw
aS5mbi5pbml0KHBsdWdpbk5hbWUpOworICAgICAgICB9OworCisgICAgICAgIC8vIERlZmluZSBw
bHVnaW5BcGkuZm4gYXMgYW4gYWxpYXMgdG8gcGx1Z2luQXBpIHByb3RvdHlwZQorICAgICAgICBw
bHVnaW5BcGkuZm4gPSBwbHVnaW5BcGkucHJvdG90eXBlID0geworCisgICAgICAgICAgICBwbHVn
aW5OYW1lOiBudWxsLCAvLyBJbml0aWFsaXplZCBpbiBjb25zdHJ1Y3RvciBmdW5jdGlvbgorCisg
ICAgICAgICAgICAvLyBDb25zdHJ1Y3RvciBmdW5jdGlvbgorICAgICAgICAgICAgaW5pdDogZnVu
Y3Rpb24ocGx1Z2luTmFtZSkgeworICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTmFtZSA9IHBs
dWdpbk5hbWU7CisgICAgICAgICAgICAgICAgdGhpcy51aS5vd25lciA9IHRoaXM7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBS
ZWdpc3RlcnMgcGx1Z2luIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGZvciBsYXRlciBpbnZvY2F0
aW9uCisgICAgICAgICAgICByZWdpc3RlcjogZnVuY3Rpb24ocGx1Z2luRXZlbnRIYW5kbGVyT2Jq
ZWN0KSB7CisgICAgICAgICAgICAgICAgY3R4LkBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWlu
LnBsdWdpbi5QbHVnaW5NYW5hZ2VyOjpyZWdpc3RlclBsdWdpbkV2ZW50SGFuZGxlck9iamVjdChM
amF2YS9sYW5nL1N0cmluZztMY29tL2dvb2dsZS9nd3QvY29yZS9jbGllbnQvSmF2YVNjcmlwdE9i
amVjdDspKHRoaXMucGx1Z2luTmFtZSxwbHVnaW5FdmVudEhhbmRsZXJPYmplY3QpOworICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIHBsdWdpbiBpcyBy
ZWFkeSBmb3IgdXNlCisgICAgICAgICAgICByZWFkeTogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgY3R4LkBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbi5QbHVnaW5NYW5h
Z2VyOjpwbHVnaW5SZWFkeShMamF2YS9sYW5nL1N0cmluZzspKHRoaXMucGx1Z2luTmFtZSk7Cisg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9u
IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHBsdWdpbgorICAgICAgICAgICAgY29uZmlnT2Jq
ZWN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3R4LkBvcmcub3ZpcnQu
ZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbi5QbHVnaW5NYW5hZ2VyOjpnZXRDb25maWdPYmplY3Qo
TGphdmEvbGFuZy9TdHJpbmc7KSh0aGlzLnBsdWdpbk5hbWUpOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgLy8gTmFtZXNwYWNlIGZvciBpbnZva2luZyBQbHVnaW5VaUZ1bmN0aW9ucwor
ICAgICAgICAgICAgdWk6IHsKKworICAgICAgICAgICAgICAgIGFkZE1haW5UYWI6IGZ1bmN0aW9u
KGxhYmVsLCBoaXN0b3J5VG9rZW4sIGNvbnRlbnRVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbkRvUGx1Z2luQWN0aW9uKHRoaXMub3duZXIucGx1Z2luTmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVpRnVuY3Rpb25zLkBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWlu
LnBsdWdpbi5QbHVnaW5VaUZ1bmN0aW9uczo6YWRkTWFpblRhYihMamF2YS9sYW5nL1N0cmluZztM
amF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspKGxhYmVsLGhpc3RvcnlUb2tlbixj
b250ZW50VXJsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgLy8gR2l2ZSBpbml0IGZ1bmN0
aW9uIHRoZSBwbHVnaW5BcGkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCisgICAg
ICAgIHBsdWdpbkFwaS5mbi5pbml0LnByb3RvdHlwZSA9IHBsdWdpbkFwaS5mbjsKKworICAgICAg
ICAvLyBFeHBvc2UgcGx1Z2luQXBpIGZ1bmN0aW9uIGFzIGEgZ2xvYmFsIG9iamVjdAorICAgICAg
ICAkd25kLnBsdWdpbkFwaSA9IHBsdWdpbkFwaTsKKyAgICB9LSovOworCit9CmRpZmYgLS1naXQg
YS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292
aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWV0YURhdGEuamF2YSBiL2Zyb250
ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5n
aW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NZXRhRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjMxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVu
ZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2lu
ZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWV0YURhdGEuamF2YQpAQCAtMCwwICsxLDM2IEBA
CitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGx1Z2luOworCitpbXBvcnQg
Y29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuSmF2YVNjcmlwdE9iamVjdDsKKworLyoqCisgKiBD
b250YWlucyBtZXRhLWRhdGEgZGVzY3JpYmluZyBhIFVJIHBsdWdpbi4KKyAqIDxwPgorICogV2Ug
ZXhwZWN0IHRoZSBtZXRhLWRhdGEgdG8gYmUgcmVhZCBkdXJpbmcgV2ViQWRtaW4gc3RhcnR1cCBh
cyBwYXJ0IG9mIHtAbGluayBQbHVnaW5EZWZpbml0aW9uc30uCisgKi8KK3B1YmxpYyBmaW5hbCBj
bGFzcyBQbHVnaW5NZXRhRGF0YSBleHRlbmRzIEphdmFTY3JpcHRPYmplY3QgeworCisgICAgcHJv
dGVjdGVkIFBsdWdpbk1ldGFEYXRhKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgbmFt
ZSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHBsdWdpbiAobWFuZGF0b3J5KS4KKyAgICAg
Ki8KKyAgICBwdWJsaWMgbmF0aXZlIFN0cmluZyBnZXROYW1lKCkgIC8qLXsKKyAgICAgICAgcmV0
dXJuIHRoaXMubmFtZTsKKyAgICB9LSovOworCisgICAgLyoqCisgICAgICogVVJMIG9mIHBsdWdp
biBob3N0IHBhZ2UgdGhhdCBpbnZva2VzIHRoZSBwbHVnaW4gY29kZSAobWFuZGF0b3J5KS4KKyAg
ICAgKi8KKyAgICBwdWJsaWMgbmF0aXZlIFN0cmluZyBnZXRIb3N0UGFnZVVybCgpIC8qLXsKKyAg
ICAgICAgcmV0dXJuIHRoaXMudXJsOworICAgIH0tKi87CisKKyAgICAvKioKKyAgICAgKiBDb25m
aWd1cmF0aW9uIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHBsdWdpbiAob3B0aW9uYWwpLgor
ICAgICAqLworICAgIHB1YmxpYyBuYXRpdmUgSmF2YVNjcmlwdE9iamVjdCBnZXRDb25maWdPYmpl
Y3QoKSAvKi17CisgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZzsKKyAgICB9LSovOworCit9CmRp
ZmYgLS1naXQgYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2ph
dmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luU3RhdGUuamF2YSBi
L2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3Zp
cnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5TdGF0ZS5qYXZhCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzZiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9u
dGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2Vu
Z2luZS91aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luU3RhdGUuamF2YQpAQCAtMCwwICsxLDMzIEBA
CitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGx1Z2luOworCisvKioKKyAq
IEVudW1lcmF0ZXMgcG9zc2libGUgc3RhdGVzIGR1cmluZyB0aGUgcnVudGltZSBvZiBhIFVJIHBs
dWdpbi4KKyAqLworcHVibGljIGVudW0gUGx1Z2luU3RhdGUgeworCisgICAgLyoqCisgICAgICog
VGhlIHBsdWdpbiBoYXMgYmVlbiBkZWZpbmVkIHRocm91Z2ggaXRzIG1ldGEtZGF0YSBhbmQgdGhl
IGNvcnJlc3BvbmRpbmcgaWZyYW1lIGVsZW1lbnQgaGFzIGJlZW4gY3JlYXRlZC4KKyAgICAgKiA8
cD4KKyAgICAgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHN0YXRlIGZvciBhbGwgcGx1Z2lucy4KKyAg
ICAgKi8KKyAgICBERUZJTkVELAorCisgICAgLyoqCisgICAgICogVGhlIGlmcmFtZSBlbGVtZW50
IGhhcyBiZWVuIGF0dGFjaGVkIHRvIERPTSwgd2l0aCBwbHVnaW4gaG9zdCBwYWdlIGJlaW5nIGZl
dGNoZWQgYXN5bmNocm9ub3VzbHkgaW4gdGhlCisgICAgICogYmFja2dyb3VuZC4gV2UgYXJlIG5v
dyB3YWl0aW5nIGZvciB0aGUgcGx1Z2luIHRvIHJlcG9ydCBpbiBhcyByZWFkeS4KKyAgICAgKi8K
KyAgICBMT0FESU5HLAorCisgICAgLyoqCisgICAgICogVGhlIHBsdWdpbiBoYXMgaW5kaWNhdGVk
IHRoYXQgaXQgaXMgcmVhZHkgZm9yIHVzZS4gV2UgZXhwZWN0IHRoZSBldmVudCBoYW5kbGVyIG9i
amVjdCAob2JqZWN0IGNvbnRhaW5pbmcgcGx1Z2luCisgICAgICogZXZlbnQgaGFuZGxlciBmdW5j
dGlvbnMpIHRvIGJlIHJlZ2lzdGVyZWQgYXQgdGhpcyBwb2ludC4gV2UgY2FuIG5vdyBwcm9jZWVk
IHdpdGggcGx1Z2luIGluaXRpYWxpemF0aW9uLgorICAgICAqLworICAgIFJFQURZLAorCisgICAg
LyoqCisgICAgICogVGhlIHBsdWdpbiBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFVp
SW5pdCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLiBXZSBjYW4gbm93IGNhbGwgb3RoZXIgZXZlbnQg
aGFuZGxlcgorICAgICAqIGZ1bmN0aW9ucyAodGhlIHBsdWdpbiBpcyBpbiB1c2UpLgorICAgICAq
LworICAgIElOSVRJQUxJWkVECisKK30KZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21v
ZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWlu
L3BsdWdpbi9QbHVnaW5VaUZ1bmN0aW9ucy5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxl
cy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1
Z2luL1BsdWdpblVpRnVuY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZGE1NTBmNgotLS0gL2Rldi9udWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVs
ZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3Bs
dWdpbi9QbHVnaW5VaUZ1bmN0aW9ucy5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3Jn
Lm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW47CisKK2ltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXIudGFiLk1haW5UYWJDdXN0b21Q
cm94eUZhY3Rvcnk7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7CisKKy8qKgor
ICogQ29udGFpbnMgVUkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgdG8gVUkgcGx1Z2lu
cy4KKyAqLworcHVibGljIGNsYXNzIFBsdWdpblVpRnVuY3Rpb25zIHsKKworICAgIHByaXZhdGUg
ZmluYWwgTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeSBtYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5
OworCisgICAgQEluamVjdAorICAgIHB1YmxpYyBQbHVnaW5VaUZ1bmN0aW9ucyhNYWluVGFiQ3Vz
dG9tUHJveHlGYWN0b3J5IG1haW5UYWJDdXN0b21Qcm94eUZhY3RvcnkpIHsKKyAgICAgICAgdGhp
cy5tYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5ID0gbWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIG5ldyBtYWluIHRhYiB0aGF0IHNob3dzIGNv
bnRlbnRzIG9mIHRoZSBnaXZlbiBVUkwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTWFp
blRhYihTdHJpbmcgbGFiZWwsIFN0cmluZyBoaXN0b3J5VG9rZW4sIFN0cmluZyBjb250ZW50VXJs
KSB7CisgICAgICAgIG1haW5UYWJDdXN0b21Qcm94eUZhY3RvcnkuY3JlYXRlKGxhYmVsLCBoaXN0
b3J5VG9rZW4sIGNvbnRlbnRVcmwpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQv
d2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUv
dWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci9NYWluU2VjdGlvblByZXNlbnRlci5q
YXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29y
Zy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci9NYWluU2Vj
dGlvblByZXNlbnRlci5qYXZhCmluZGV4IDcxOGQ4ZmMuLjE1Yjg4N2MgMTAwNjQ0Ci0tLSBhL2Zy
b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv
ZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFpblNlY3Rpb25QcmVz
ZW50ZXIuamF2YQorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9t
YWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2Vu
dGVyL01haW5TZWN0aW9uUHJlc2VudGVyLmphdmEKQEAgLTEsNSArMSw3IEBACiBwYWNrYWdlIG9y
Zy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnByZXNlbnRlcjsKIAoraW1w
b3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGx1Z2luLlBsdWdpbk1hbmFnZXI7CisK
IGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuRXZlbnRCdXM7CiBpbXBvcnQgY29t
Lmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkd3dEV2ZW50LlR5cGU7CiBpbXBvcnQgY29tLmdvb2ds
ZS5pbmplY3QuSW5qZWN0OwpAQCAtMjgsMTEgKzMwLDEzIEBAIHB1YmxpYyBjbGFzcyBNYWluU2Vj
dGlvblByZXNlbnRlciBleHRlbmRzIFByZXNlbnRlcjxNYWluU2VjdGlvblByZXNlbnRlci5WaWV3
RGVmCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUeXBlPFJldmVhbENvbnRlbnRIYW5kbGVyPD8+
PiBUWVBFX1NldE1haW5Db250ZW50ID0gbmV3IFR5cGU8UmV2ZWFsQ29udGVudEhhbmRsZXI8Pz4+
KCk7CiAKICAgICBwcml2YXRlIGZpbmFsIEhlYWRlclByZXNlbnRlcldpZGdldCBoZWFkZXI7Cisg
ICAgcHJpdmF0ZSBmaW5hbCBQbHVnaW5NYW5hZ2VyIHBsdWdpbk1hbmFnZXI7CiAKICAgICBASW5q
ZWN0Ci0gICAgcHVibGljIE1haW5TZWN0aW9uUHJlc2VudGVyKEV2ZW50QnVzIGV2ZW50QnVzLCBW
aWV3RGVmIHZpZXcsIFByb3h5RGVmIHByb3h5LCBIZWFkZXJQcmVzZW50ZXJXaWRnZXQgaGVhZGVy
KSB7CisgICAgcHVibGljIE1haW5TZWN0aW9uUHJlc2VudGVyKEV2ZW50QnVzIGV2ZW50QnVzLCBW
aWV3RGVmIHZpZXcsIFByb3h5RGVmIHByb3h5LCBIZWFkZXJQcmVzZW50ZXJXaWRnZXQgaGVhZGVy
LCBQbHVnaW5NYW5hZ2VyIHBsdWdpbk1hbmFnZXIpIHsKICAgICAgICAgc3VwZXIoZXZlbnRCdXMs
IHZpZXcsIHByb3h5KTsKICAgICAgICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7CisgICAgICAgIHRo
aXMucGx1Z2luTWFuYWdlciA9IHBsdWdpbk1hbmFnZXI7CiAgICAgICAgIGdldFZpZXcoKS5zZXRV
aUhhbmRsZXJzKGhlYWRlcik7CiAgICAgfQogCkBAIC00Niw2ICs1MCwxNyBAQCBwdWJsaWMgY2xh
c3MgTWFpblNlY3Rpb25QcmVzZW50ZXIgZXh0ZW5kcyBQcmVzZW50ZXI8TWFpblNlY3Rpb25QcmVz
ZW50ZXIuVmlld0RlZgogICAgICAgICBzdXBlci5vblJldmVhbCgpOwogCiAgICAgICAgIHNldElu
U2xvdChUWVBFX1NldEhlYWRlciwgaGVhZGVyKTsKKworICAgICAgICAvLyBFbmFibGUgcGx1Z2lu
IGludm9jYXRpb24gd2l0aGluIHRoZSBzY29wZSBvZiBtYWluIHNlY3Rpb24KKyAgICAgICAgcGx1
Z2luTWFuYWdlci5lbmFibGVQbHVnaW5JbnZvY2F0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJy
aWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25IaWRlKCkgeworICAgICAgICBzdXBlci5vbkhpZGUo
KTsKKworICAgICAgICAvLyBEaXNhYmxlIHBsdWdpbiBpbnZvY2F0aW9uIG91dHNpZGUgdGhlIHNj
b3BlIG9mIG1haW4gc2VjdGlvbgorICAgICAgICBwbHVnaW5NYW5hZ2VyLmRpc2FibGVQbHVnaW5J
bnZvY2F0aW9uKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9mcm9udGVuZC93ZWJhZG1pbi9t
b2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1p
bi9zZWN0aW9uL21haW4vcHJlc2VudGVyL01haW5UYWJQYW5lbFByZXNlbnRlci5qYXZhIGIvZnJv
bnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9l
bmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci9NYWluVGFiUGFuZWxQcmVz
ZW50ZXIuamF2YQppbmRleCBhYzA0MDAxLi42MTEyZDM4IDEwMDY0NAotLS0gYS9mcm9udGVuZC93
ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91
aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL01haW5UYWJQYW5lbFByZXNlbnRlci5q
YXZhCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFp
blRhYlBhbmVsUHJlc2VudGVyLmphdmEKQEAgLTUsNiArNSw3IEBAIGltcG9ydCBvcmcub3ZpcnQu
ZW5naW5lLnVpLmNvbW1vbi53aWRnZXQudGFiLkFic3RyYWN0SGVhZGxlc3NUYWJQYW5lbC5UYWJX
aWRnZXRICiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkV2ZW50QnVzOwogaW1w
b3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5Hd3RFdmVudC5UeXBlOwogaW1wb3J0IGNv
bS5nb29nbGUuaW5qZWN0LkluamVjdDsKK2ltcG9ydCBjb20uZ3d0cGxhdGZvcm0ubXZwLmNsaWVu
dC5SZXF1ZXN0VGFic0V2ZW50OwogaW1wb3J0IGNvbS5nd3RwbGF0Zm9ybS5tdnAuY2xpZW50LlJl
cXVlc3RUYWJzSGFuZGxlcjsKIGltcG9ydCBjb20uZ3d0cGxhdGZvcm0ubXZwLmNsaWVudC5UYWJD
b250YWluZXJQcmVzZW50ZXI7CiBpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQuVGFi
VmlldzsKQEAgLTQ1LDQgKzQ2LDEzIEBAIHB1YmxpYyBjbGFzcyBNYWluVGFiUGFuZWxQcmVzZW50
ZXIgZXh0ZW5kcyBUYWJDb250YWluZXJQcmVzZW50ZXI8TWFpblRhYlBhbmVsUHJlCiAgICAgICAg
IFJldmVhbENvbnRlbnRFdmVudC5maXJlKHRoaXMsIE1haW5Db250ZW50UHJlc2VudGVyLlRZUEVf
U2V0TWFpblRhYlBhbmVsQ29udGVudCwgdGhpcyk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisg
ICAgcHJvdGVjdGVkIHZvaWQgb25SZXZlYWwoKSB7CisgICAgICAgIHN1cGVyLm9uUmV2ZWFsKCk7
CisKKyAgICAgICAgLy8gUmVmcmVzaCB0YWJzIGVhY2ggdGltZSB0aGlzIHRhYiBjb250YWluZXIg
aXMgcmV2ZWFsZWQKKyAgICAgICAgZ2V0VmlldygpLnJlbW92ZVRhYnMoKTsKKyAgICAgICAgUmVx
dWVzdFRhYnNFdmVudC5maXJlKHRoaXMsIFRZUEVfUmVxdWVzdFRhYnMsIHRoaXMpOworICAgIH0K
KwogfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMv
bWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNl
bnRlci90YWIvTWFpblRhYkN1c3RvbVByZXNlbnRlci5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4v
bW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRt
aW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByZXNlbnRlci5qYXZh
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWMyZjUKLS0tIC9kZXYvbnVs
bAorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEv
b3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL3RhYi9N
YWluVGFiQ3VzdG9tUHJlc2VudGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorcGFja2FnZSBvcmcu
b3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXIudGFiOworCitp
bXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVy
Lk1haW5UYWJQYW5lbFByZXNlbnRlcjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNo
YXJlZC5FdmVudEJ1czsKK2ltcG9ydCBjb20uZ3d0cGxhdGZvcm0ubXZwLmNsaWVudC5QcmVzZW50
ZXI7CitpbXBvcnQgY29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQuVmlldzsKK2ltcG9ydCBjb20u
Z3d0cGxhdGZvcm0ubXZwLmNsaWVudC5wcm94eS5SZXZlYWxDb250ZW50RXZlbnQ7CitpbXBvcnQg
Y29tLmd3dHBsYXRmb3JtLm12cC5jbGllbnQucHJveHkuVGFiQ29udGVudFByb3h5UGxhY2U7CisK
K3B1YmxpYyBjbGFzcyBNYWluVGFiQ3VzdG9tUHJlc2VudGVyIGV4dGVuZHMgUHJlc2VudGVyPE1h
aW5UYWJDdXN0b21QcmVzZW50ZXIuVmlld0RlZiwgTWFpblRhYkN1c3RvbVByZXNlbnRlci5Qcm94
eURlZj4geworCisgICAgLy8gTm8gbmVlZCBmb3IgQFByb3h5Q29kZVNwbGl0LCB3ZSB3aWxsIHBy
b3ZpZGUgb3VyIG93biBwcm94eSBpbXBsZW1lbnRhdGlvbgorICAgIHB1YmxpYyBpbnRlcmZhY2Ug
UHJveHlEZWYgZXh0ZW5kcyBUYWJDb250ZW50UHJveHlQbGFjZTxNYWluVGFiQ3VzdG9tUHJlc2Vu
dGVyPiB7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBWaWV3RGVmIGV4dGVuZHMgVmll
dyB7CisKKyAgICAgICAgdm9pZCBzZXRDb250ZW50VXJsKFN0cmluZyB1cmwpOworCisgICAgfQor
CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY29udGVudFVybDsKKworICAgIC8vIE5vIG5lZWQg
Zm9yIEBJbmplY3QsIHRoaXMgcHJlc2VudGVyIHdpbGwgYmUgY3JlYXRlZCBtYW51YWxseSBieSBN
YWluVGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIKKyAgICBwdWJsaWMgTWFpblRhYkN1c3RvbVBy
ZXNlbnRlcihFdmVudEJ1cyBldmVudEJ1cywgVmlld0RlZiB2aWV3LCBQcm94eURlZiBwcm94eSwg
U3RyaW5nIGNvbnRlbnRVcmwpIHsKKyAgICAgICAgc3VwZXIoZXZlbnRCdXMsIHZpZXcsIHByb3h5
KTsKKyAgICAgICAgdGhpcy5jb250ZW50VXJsID0gY29udGVudFVybDsKKyAgICB9CisKKyAgICBA
T3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCByZXZlYWxJblBhcmVudCgpIHsKKyAgICAgICAg
UmV2ZWFsQ29udGVudEV2ZW50LmZpcmUodGhpcywgTWFpblRhYlBhbmVsUHJlc2VudGVyLlRZUEVf
U2V0VGFiQ29udGVudCwgdGhpcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVj
dGVkIHZvaWQgb25CaW5kKCkgeworICAgICAgICBzdXBlci5vbkJpbmQoKTsKKworICAgICAgICBn
ZXRWaWV3KCkuc2V0Q29udGVudFVybChjb250ZW50VXJsKTsKKyAgICB9CisKK30KZGlmZiAtLWdp
dCBhL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcv
b3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFiL01haW5U
YWJDdXN0b21QcmVzZW50ZXJQcm92aWRlci5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxl
cy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2Vj
dGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyLmph
dmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwYmU1NAotLS0gL2Rldi9u
dWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvdGFi
L01haW5UYWJDdXN0b21QcmVzZW50ZXJQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3Bh
Y2thZ2Ugb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5zZWN0aW9uLm1haW4ucHJlc2VudGVy
LnRhYjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5FdmVudEJ1czsKK2lt
cG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3Qu
UHJvdmlkZXI7CisKKy8qKgorICogUHJvdmlkZXIgb2Yge0BsaW5rIE1haW5UYWJDdXN0b21QcmVz
ZW50ZXJ9IGluc3RhbmNlcyAobm9uLXNpbmdsZXRvbikuCisgKi8KK3B1YmxpYyBjbGFzcyBNYWlu
VGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIgaW1wbGVtZW50cyBQcm92aWRlcjxNYWluVGFiQ3Vz
dG9tUHJlc2VudGVyPiB7CisKKyAgICBwcml2YXRlIE1haW5UYWJDdXN0b21QcmVzZW50ZXIgcHJl
c2VudGVyOworICAgIHByaXZhdGUgTWFpblRhYkN1c3RvbVByZXNlbnRlci5Qcm94eURlZiBwcm94
eTsKKworICAgIHByaXZhdGUgZmluYWwgUHJvdmlkZXI8TWFpblRhYkN1c3RvbVByZXNlbnRlci5W
aWV3RGVmPiB2aWV3UHJvdmlkZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBFdmVudEJ1cyBldmVudEJ1
czsKKworICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnRVcmw7CisKKyAgICBASW5qZWN0CisgICAg
cHVibGljIE1haW5UYWJDdXN0b21QcmVzZW50ZXJQcm92aWRlcihQcm92aWRlcjxNYWluVGFiQ3Vz
dG9tUHJlc2VudGVyLlZpZXdEZWY+IHZpZXdQcm92aWRlciwgRXZlbnRCdXMgZXZlbnRCdXMpIHsK
KyAgICAgICAgdGhpcy52aWV3UHJvdmlkZXIgPSB2aWV3UHJvdmlkZXI7CisgICAgICAgIHRoaXMu
ZXZlbnRCdXMgPSBldmVudEJ1czsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMg
TWFpblRhYkN1c3RvbVByZXNlbnRlciBnZXQoKSB7CisgICAgICAgIGFzc2VydCBwcm94eSAhPSBu
dWxsIDogIllvdSBtdXN0IGNhbGwgc2V0UHJveHkgZmlyc3QiOyAvLyROT04tTkxTLTEkCisKKyAg
ICAgICAgaWYgKHByZXNlbnRlciA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgYW5k
IGJpbmQgdGhlIHByZXNlbnRlcgorICAgICAgICAgICAgcHJlc2VudGVyID0gbmV3IE1haW5UYWJD
dXN0b21QcmVzZW50ZXIoZXZlbnRCdXMsIHZpZXdQcm92aWRlci5nZXQoKSwgcHJveHksIGNvbnRl
bnRVcmwpOworICAgICAgICAgICAgcHJlc2VudGVyLmJpbmQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBwcmVzZW50ZXI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UHJveHko
TWFpblRhYkN1c3RvbVByZXNlbnRlci5Qcm94eURlZiBwcm94eSkgeworICAgICAgICB0aGlzLnBy
b3h5ID0gcHJveHk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29udGVudFVybChTdHJp
bmcgY29udGVudFVybCkgeworICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSBjb250ZW50VXJsOwor
ICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1p
bi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWlu
L3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5LmphdmEgYi9mcm9udGVuZC93ZWJhZG1p
bi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJh
ZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJveHkuamF2YQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDYzMjhjCi0tLSAvZGV2L251bGwK
KysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29y
Zy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFp
blRhYkN1c3RvbVByb3h5LmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBvcmcub3ZpcnQu
ZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXIudGFiOworCitpbXBvcnQg
b3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5naW4uQ2xpZW50R2luamVjdG9yOworaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnByZXNlbnRlci5NYWlu
VGFiUGFuZWxQcmVzZW50ZXI7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQu
RXZlbnRCdXM7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuUHJvdmlkZXI7CitpbXBvcnQgY29t
Lmd3dHBsYXRmb3JtLmNvbW1vbi5jbGllbnQuU3RhbmRhcmRQcm92aWRlcjsKK2ltcG9ydCBjb20u
Z3d0cGxhdGZvcm0ubXZwLmNsaWVudC5UYWJEYXRhQmFzaWM7CitpbXBvcnQgY29tLmd3dHBsYXRm
b3JtLm12cC5jbGllbnQucHJveHkuUGxhY2VNYW5hZ2VyOworaW1wb3J0IGNvbS5nd3RwbGF0Zm9y
bS5tdnAuY2xpZW50LnByb3h5LlBsYWNlV2l0aEdhdGVrZWVwZXI7CitpbXBvcnQgY29tLmd3dHBs
YXRmb3JtLm12cC5jbGllbnQucHJveHkuVGFiQ29udGVudFByb3h5SW1wbDsKK2ltcG9ydCBjb20u
Z3d0cGxhdGZvcm0ubXZwLmNsaWVudC5wcm94eS5UYWJDb250ZW50UHJveHlQbGFjZUltcGw7CisK
Ky8qKgorICogQ3VzdG9tIHtAbGluayBNYWluVGFiQ3VzdG9tUHJlc2VudGVyfSBwcm94eSBpbXBs
ZW1lbnRhdGlvbi4KKyAqLworcHVibGljIGNsYXNzIE1haW5UYWJDdXN0b21Qcm94eSBleHRlbmRz
IFRhYkNvbnRlbnRQcm94eVBsYWNlSW1wbDxNYWluVGFiQ3VzdG9tUHJlc2VudGVyPiBpbXBsZW1l
bnRzIE1haW5UYWJDdXN0b21QcmVzZW50ZXIuUHJveHlEZWYgeworCisgICAgcHVibGljIHN0YXRp
YyBjbGFzcyBXcmFwcGVkUHJveHkgZXh0ZW5kcyBUYWJDb250ZW50UHJveHlJbXBsPE1haW5UYWJD
dXN0b21QcmVzZW50ZXI+IHsKKworICAgICAgICBwdWJsaWMgV3JhcHBlZFByb3h5KFBsYWNlTWFu
YWdlciBwbGFjZU1hbmFnZXIsIEV2ZW50QnVzIGV2ZW50QnVzLAorICAgICAgICAgICAgICAgIFBy
b3ZpZGVyPE1haW5UYWJDdXN0b21QcmVzZW50ZXI+IHByZXNlbnRlclByb3ZpZGVyLAorICAgICAg
ICAgICAgICAgIFN0cmluZyBsYWJlbCwgZmxvYXQgcHJpb3JpdHksIFN0cmluZyBoaXN0b3J5VG9r
ZW4pIHsKKyAgICAgICAgICAgIGJpbmQocGxhY2VNYW5hZ2VyLCBldmVudEJ1cyk7CisgICAgICAg
ICAgICByZXF1ZXN0VGFic0V2ZW50VHlwZSA9IE1haW5UYWJQYW5lbFByZXNlbnRlci5UWVBFX1Jl
cXVlc3RUYWJzOworICAgICAgICAgICAgdGFiRGF0YSA9IG5ldyBUYWJEYXRhQmFzaWMobGFiZWws
IHByaW9yaXR5KTsKKyAgICAgICAgICAgIHRhcmdldEhpc3RvcnlUb2tlbiA9IGhpc3RvcnlUb2tl
bjsKKyAgICAgICAgICAgIGFkZFJlcXVlc3RUYWJzSGFuZGxlcigpOworICAgICAgICAgICAgcHJl
c2VudGVyID0gbmV3IFN0YW5kYXJkUHJvdmlkZXI8TWFpblRhYkN1c3RvbVByZXNlbnRlcj4ocHJl
c2VudGVyUHJvdmlkZXIpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgTWFpblRh
YkN1c3RvbVByb3h5KENsaWVudEdpbmplY3RvciBnaW5qZWN0b3IsCisgICAgICAgICAgICBNYWlu
VGFiQ3VzdG9tUHJlc2VudGVyUHJvdmlkZXIgcHJlc2VudGVyUHJvdmlkZXIsCisgICAgICAgICAg
ICBTdHJpbmcgbGFiZWwsIGZsb2F0IHByaW9yaXR5LCBTdHJpbmcgaGlzdG9yeVRva2VuKSB7Cisg
ICAgICAgIGJpbmQoZ2luamVjdG9yLmdldFBsYWNlTWFuYWdlcigpLCBnaW5qZWN0b3IuZ2V0RXZl
bnRCdXMoKSk7CisgICAgICAgIHByb3h5ID0gbmV3IFdyYXBwZWRQcm94eShnaW5qZWN0b3IuZ2V0
UGxhY2VNYW5hZ2VyKCksIGdpbmplY3Rvci5nZXRFdmVudEJ1cygpLAorICAgICAgICAgICAgICAg
IHByZXNlbnRlclByb3ZpZGVyLCBsYWJlbCwgcHJpb3JpdHksIGhpc3RvcnlUb2tlbik7CisgICAg
ICAgIHBsYWNlID0gbmV3IFBsYWNlV2l0aEdhdGVrZWVwZXIoaGlzdG9yeVRva2VuLCBnaW5qZWN0
b3IuZ2V0RGVmYXVsdEdhdGVrZWVwZXIoKSk7CisgICAgICAgIHByZXNlbnRlclByb3ZpZGVyLnNl
dFByb3h5KHRoaXMpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4v
bW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRt
aW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeS5q
YXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29y
Zy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNlbnRlci90YWIvTWFp
blRhYkN1c3RvbVByb3h5RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmYxNjdjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1
bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9z
ZWN0aW9uL21haW4vcHJlc2VudGVyL3RhYi9NYWluVGFiQ3VzdG9tUHJveHlGYWN0b3J5LmphdmEK
QEAgLTAsMCArMSwzNCBAQAorcGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNl
Y3Rpb24ubWFpbi5wcmVzZW50ZXIudGFiOworCitpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53
ZWJhZG1pbi5naW4uQ2xpZW50R2luamVjdG9yOworCitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3Qu
SW5qZWN0OworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlByb3ZpZGVyOworCisvKioKKyAqIENy
ZWF0ZXMgYW5kIGJpbmRzIHtAbGluayBNYWluVGFiQ3VzdG9tUHJveHl9IGluc3RhbmNlcy4KKyAq
LworcHVibGljIGNsYXNzIE1haW5UYWJDdXN0b21Qcm94eUZhY3RvcnkgeworCisgICAgcHJpdmF0
ZSBmaW5hbCBDbGllbnRHaW5qZWN0b3IgZ2luamVjdG9yOworICAgIHByaXZhdGUgZmluYWwgUHJv
dmlkZXI8TWFpblRhYkN1c3RvbVByZXNlbnRlclByb3ZpZGVyPiBwcm92aWRlcjsKKworICAgIEBJ
bmplY3QKKyAgICBwdWJsaWMgTWFpblRhYkN1c3RvbVByb3h5RmFjdG9yeShDbGllbnRHaW5qZWN0
b3IgZ2luamVjdG9yLAorICAgICAgICAgICAgUHJvdmlkZXI8TWFpblRhYkN1c3RvbVByZXNlbnRl
clByb3ZpZGVyPiBwcm92aWRlcikgeworICAgICAgICB0aGlzLmdpbmplY3RvciA9IGdpbmplY3Rv
cjsKKyAgICAgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOworICAgIH0KKworICAgIHB1Ymxp
YyBNYWluVGFiQ3VzdG9tUHJveHkgY3JlYXRlKFN0cmluZyBsYWJlbCwgU3RyaW5nIGhpc3RvcnlU
b2tlbiwgU3RyaW5nIGNvbnRlbnRVcmwpIHsKKyAgICAgICAgTWFpblRhYkN1c3RvbVByZXNlbnRl
clByb3ZpZGVyIHByZXNlbnRlclByb3ZpZGVyID0gcHJvdmlkZXIuZ2V0KCk7CisgICAgICAgIHBy
ZXNlbnRlclByb3ZpZGVyLnNldENvbnRlbnRVcmwoY29udGVudFVybCk7CisKKyAgICAgICAgLy8g
Q3JlYXRlIGFuZCBiaW5kIHRoZSBwcm94eSBpbnN0YW5jZQorICAgICAgICBNYWluVGFiQ3VzdG9t
UHJveHkgcHJveHkgPSBuZXcgTWFpblRhYkN1c3RvbVByb3h5KAorICAgICAgICAgICAgICAgIGdp
bmplY3RvciwgcHJlc2VudGVyUHJvdmlkZXIsIGxhYmVsLCBGbG9hdC5NQVhfVkFMVUUsIGhpc3Rv
cnlUb2tlbik7CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0KKworfQpkaWZmIC0tZ2l0
IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9v
dmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ZpZXcvdGFiL01haW5UYWJDdXN0
b21WaWV3LmphdmEgYi9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWlu
L2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vdmlldy90YWIv
TWFpblRhYkN1c3RvbVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jOGU5NjgzCi0tLSAvZGV2L251bGwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93
ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlv
bi9tYWluL3ZpZXcvdGFiL01haW5UYWJDdXN0b21WaWV3LmphdmEKQEAgLTAsMCArMSwzMiBAQAor
cGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi52aWV3LnRh
YjsKKworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLnZpZXcuQWJzdHJhY3RWaWV3
OworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uc2VjdGlvbi5tYWluLnByZXNl
bnRlci50YWIuTWFpblRhYkN1c3RvbVByZXNlbnRlcjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0
LmNvcmUuY2xpZW50LkdXVDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51aWJpbmRlci5jbGllbnQu
VWlCaW5kZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudWliaW5kZXIuY2xpZW50LlVpRmllbGQ7
CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSW5saW5lTGFiZWw7CitpbXBv
cnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuV2lkZ2V0OworaW1wb3J0IGNvbS5nb29n
bGUuaW5qZWN0LkluamVjdDsKKworcHVibGljIGNsYXNzIE1haW5UYWJDdXN0b21WaWV3IGV4dGVu
ZHMgQWJzdHJhY3RWaWV3IGltcGxlbWVudHMgTWFpblRhYkN1c3RvbVByZXNlbnRlci5WaWV3RGVm
IHsKKworICAgIGludGVyZmFjZSBWaWV3VWlCaW5kZXIgZXh0ZW5kcyBVaUJpbmRlcjxXaWRnZXQs
IE1haW5UYWJDdXN0b21WaWV3PiB7CisgICAgICAgIFZpZXdVaUJpbmRlciB1aUJpbmRlciA9IEdX
VC5jcmVhdGUoVmlld1VpQmluZGVyLmNsYXNzKTsKKyAgICB9CisKKyAgICBAVWlGaWVsZAorICAg
IElubGluZUxhYmVsIHVybExhYmVsOworCisgICAgQEluamVjdAorICAgIHB1YmxpYyBNYWluVGFi
Q3VzdG9tVmlldygpIHsKKyAgICAgICAgaW5pdFdpZGdldChWaWV3VWlCaW5kZXIudWlCaW5kZXIu
Y3JlYXRlQW5kQmluZFVpKHRoaXMpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJs
aWMgdm9pZCBzZXRDb250ZW50VXJsKFN0cmluZyB1cmwpIHsKKyAgICAgICAgdXJsTGFiZWwuc2V0
VGV4dCh1cmwpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9k
dWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4v
c2VjdGlvbi9tYWluL3ZpZXcvdGFiL01haW5UYWJDdXN0b21WaWV3LnVpLnhtbCBiL2Zyb250ZW5k
L3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5l
L3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWluVGFiQ3VzdG9tVmlldy51aS54
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczMWJlMgotLS0gL2Rldi9u
dWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2
YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi92aWV3L3RhYi9NYWlu
VGFiQ3VzdG9tVmlldy51aS54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSB1aTpVaUJpbmRlciBTWVNURU0gImh0dHA6
Ly9kbC5nb29nbGUuY29tL2d3dC9EVEQveGh0bWwuZW50Ij4KKzx1aTpVaUJpbmRlciB4bWxuczp1
aT0idXJuOnVpOmNvbS5nb29nbGUuZ3d0LnVpYmluZGVyIiB4bWxuczpnPSJ1cm46aW1wb3J0OmNv
bS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpIj4KKworCTxnOkhUTUxQYW5lbD4KKwkJVE9ETyBk
aXNwbGF5IHRoaXMgVVJMOgorCQk8ZzpJbmxpbmVMYWJlbCB1aTpmaWVsZD0idXJsTGFiZWwiIC8+
CisJPC9nOkhUTUxQYW5lbD4KKworPC91aTpVaUJpbmRlcj4KZGlmZiAtLWdpdCBhL2Zyb250ZW5k
L3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnht
bCBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vd2ViYXBwL1dF
Qi1JTkYvd2ViLnhtbAppbmRleCA1MzlkM2Q4Li5kYmY5M2EyIDEwMDY0NAotLS0gYS9mcm9udGVu
ZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54
bWwKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi93ZWJh
cHAvV0VCLUlORi93ZWIueG1sCkBAIC0yMyw2ICsyMywxNiBAQAogCQk8dXJsLXBhdHRlcm4+L3dl
YmFkbWluL1dlYkFkbWluLmh0bWw8L3VybC1wYXR0ZXJuPgogCTwvc2VydmxldC1tYXBwaW5nPgog
CisJPHNlcnZsZXQ+CisJCTxzZXJ2bGV0LW5hbWU+UGx1Z2luU291cmNlUGFnZTwvc2VydmxldC1u
YW1lPgorCQk8c2VydmxldC1jbGFzcz5vcmcub3ZpcnQuZW5naW5lLnVpLmZyb250ZW5kLnNlcnZl
ci5nd3QuUGx1Z2luU291cmNlUGFnZVNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CisJPC9zZXJ2bGV0
PgorCisJPHNlcnZsZXQtbWFwcGluZz4KKwkJPHNlcnZsZXQtbmFtZT5QbHVnaW5Tb3VyY2VQYWdl
PC9zZXJ2bGV0LW5hbWU+CisJCTx1cmwtcGF0dGVybj4vd2ViYWRtaW4vUGx1Z2luU291cmNlUGFn
ZTwvdXJsLXBhdHRlcm4+CisJPC9zZXJ2bGV0LW1hcHBpbmc+CisKIAk8IS0tIERlZmF1bHQgcGFn
ZSB0byBzZXJ2ZSAtLT4KIAk8d2VsY29tZS1maWxlLWxpc3Q+CiAJCTx3ZWxjb21lLWZpbGU+aW5k
ZXguaHRtbDwvd2VsY29tZS1maWxlPgotLSAKMS43LjQuNAoK
------=_Part_15477537_1702327251.1346339532819--
3
7
Hi All,
Today when a user wants to define a network subnet mask, he does it when
he attaches the network to a host NIC.
I was wondering if there is a reason not to define the network subnet on
the logical network entity (Data center level).
Thanks, Livnat
4
8
------=_Part_12944838_269192103.1345724057851
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hi Chris,
thanks for taking the time to make this patch, these are some excellent ideas! (CC'ing engine-devel so that we can discuss this with other guys as well)
First of all, I really like the way you designed plugin source page URLs (going through PluginSourcePageServlet ), e.g. "/webadmin/webadmin/plugin/<pluginName>/<pluginSourcePage>.html", plus the concept of "path" JSON attribute.
WebadminDynamicHostingServlet loads and caches all plugin definitions ( *.json files), and directly embeds them into WebAdmin host page as pluginDefinitions JavaScript object. I'm assuming that pluginDefinitions object will now look like this:
var pluginDefinitions = {
"test": {
"name": "test",
"version": "1.0",
"url": "/webadmin/webadmin/plugin/test/foo.html",
"path": "/tmp",
"config": {"a":1, "b":2, "c":3}
}
}
Originally, the pluginDefinitions object looked like this:
var pluginDefinitions = {
"test": "/webadmin/webadmin/plugin/test/foo.html" // Simple pluginName -> pluginSourcePageUrl mappings
}
This is because PluginManager (WebAdmin) only needs pluginName ("name") and pluginSourcePageUrl ("url") during startup, when creating plugin iframe. But this can be changed :)
Plugin "version" makes sense, plus the plugin configuration object ("config") can be useful directly on the client. Let me explain:
Originally, plugin configuration was supposed to be passed to actual plugin code (through immediately-invoked-function-expression, or IIFE), just like this:
(function (pluginApi, pluginConfig) { // JavaScript IIFE
// ... actual plugin code ...
})(
parent.pluginApi, /* reference to global pluginApi object */
{"a":1, "b":2, "c":3} /* embedded plugin configuration as JavaScript object */
);
The whole purpose of PluginSourcePageServlet was to "wrap" actual plugin code into HTML, so that users don't need to write HTML pages for their plugins manually. PluginSourcePageServlet would handle any plugin dependencies (placed into HTML head), with actual plugin code being wrapped into IIFE, as shown above. Plugin configuration was meant to be stored in a separate file, e.g. <pluginName>-config.json , so that users could change the default plugin configuration to suit their needs.
Inspired by your patch, rather than reading/embedding plugin configuration when serving plugin HTML page ( PluginSourcePageServlet ), it's even better to have the plugin configuration embedded directly into WebAdmin host page, along with introducing new pluginApi function to retrieve the plugin configuration object.
Based on this, I suggest following modifications to the original concept:
- modify original pluginDefinitions structure, from pluginName -> pluginSourcePageUrl , to pluginName -> pluginDefObject
- pluginDefObject is basically a subset of physical plugin definition ( test.json , see below), suitable for use on the client
- add following attributes to pluginDefObject : version , url , config
* note #1: name is not needed, since it's already the key of pluginName -> pluginDefObject mapping
* note #2: path is not needed on the client (more on this below)
- introduce pluginApi.config(pluginName) function for plugins to retrieve their configuration object, and remove pluginConfig parameter from main IIFE (as shown above)
[a] Physical plugin definition file (JSON) might be located at oVirt "DataDir", e.g. /usr/share/ovirt-engine/ui-plugins/test.json , for example:
{
"name": "test",
"version": "1.0",
"url": "/webadmin/webadmin/plugin/test/start.html",
"path": "/tmp",
"config": "test-config.json"
}
[b] Plugin configuration file (JSON) might be located at oVirt "ConfigDir", e.g. /etc/ovirt-engine/ui-plugins/test-config.json , for example:
{
"a":1, "b":2, "c":3
}
[c] Finally, plugin static resources (plugin source page, actual plugin code, plugin dependencies, CSS/images, etc.) would be located at /tmp (as shown in [a]), for example:
/tmp/start.html -> plugin source page, used to load actual plugin code
/tmp/test.js -> actual plugin code
/tmp/deps/jquery-min.js -> simulate 3rd party plugin dependency
For example:
"/webadmin/webadmin/plugin/test/start.html" will be mapped to /tmp/start.html
"/webadmin/webadmin/plugin/test/deps/jquery-min.js" will be mapped to /tmp/deps/jquery-min.js
This approach has some pros and cons:
(+) plugin static resources can be served through PluginSourcePageServlet (pretty much like oVirt documentation resources, served through oVirt Engine root war's FileServlet )
(+) plugin author has complete control over plugin source page
(-) plugin author actually needs to write plugin source page
Overall, I think this approach is better than the previous one (where PluginSourcePageServlet took care of rendering plugin source page, but sacrificed some flexibility).
By the way, here's what would happen behind the scenes:
1. user requests WebAdmin host page, WebadminDynamicHostingServlet loads and caches all plugin definitions [a] + plugin configurations [b] and constructs/embeds appropriate pluginDefinitions JavaScript object
2. during WebAdmin startup, PluginManager registers the plugin (name/version/url/config), and creates/attaches the iframe to fetch plugin source page ansynchronously
3. PluginSourcePageServlet handles plugin source page request, resolves the correct path [c] and just streams the file content back to client
> 1. The plugin configuration files should probably have an "enabled" field and an "apiVersion" field that should be examined to determine whether or not to use the plugin.
Sounds good, we can implement these later on :)
> 2. I suspect the way I've modified PluginSourcePage makes it vulnerable to directory climbing attacks.
Yes, but we can defend against these, restricting access only to plugin's "path" and its sub-directories.
> 3. Is /usr/share/ovirt-engine the right place for the plugin config files?
I suppose you mean plugin definition files [a], cannot tell for sure, but we can change this anytime :)
Chris, please let me know what you think, and again - many thanks for sending the patch!
Regards,
Vojtech
----- Original Message -----
From: "Chris Frantz" <Chris.Frantz(a)hp.com>
To: vszocs(a)redhat.com
Sent: Wednesday, August 22, 2012 7:56:45 PM
Subject: UI Plugins configuration
Vojtech,
I decided to work on making the plugin patch a bit more configurable, following some of the ideas expressed by Itamar and others in the meeting yesterday. The attached patch is a simple first-attempt.
Plugin configurations are stored in /usr/share/ovirt-engine/ui-plugins/*.json.
Example:
{
"name": "test",
"version": "1.0",
"url": "/webadmin/webadmin/plugin/test/foo.html",
"path": "/tmp",
"config": {"a":1, "b":2, "c": 3}
}
The engine reads all of the *.json files in that directory to build the list of known plugins and gives that list to the webadmin.
When webadmin loads a plugin, it requests the URL given in the plugin config file. The "plugin" URL is mapped to PluginSourcePage, which will translate the first part of the path ("test") into whatever path is stored in pluginConfig ("/tmp") in this case, and then serve the static file (e.g. "/tmp/foo.html").
I didn't use the renderPluginSourcePage() method in favor of just serving a static file, but I have no strong opinion on the matter. However, a plugin may want to store static resources at "path" and have the engine serve those resources. By just serving files through PluginSourcePage, we don't need any other servlets to provide those resources.
There is still a bit of work to do:
1. The plugin configuration files should probably have an "enabled" field and an "apiVersion" field that should be examined to determine whether or not to use the plugin.
2. I suspect the way I've modified PluginSourcePage makes it vulnerable to directory climbing attacks.
3. Is /usr/share/ovirt-engine the right place for the plugin config files?
Let me know what you think,
--Chris
------=_Part_12944838_269192103.1345724057851
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 Chris,<br><br>thanks for taking the time to make t=
his patch, these are some excellent ideas! (CC'ing engine-devel so that we =
can discuss this with other guys as well)<br><br>First of all, I really lik=
e the way you designed plugin source page URLs (going through <em>PluginSou=
rcePageServlet</em>), e.g. "/webadmin/webadmin/plugin/<pluginName>/&l=
t;pluginSourcePage>.html", plus the concept of "path" JSON attribute.<br=
><br><span style=3D"font-style: italic;">WebadminDynamicHostingServlet</spa=
n> loads and caches all plugin definitions (<span style=3D"font-style: ital=
ic;">*.json</span> files), and directly embeds them into WebAdmin host page=
as <span style=3D"font-style: italic;">pluginDefinitions</span> JavaScript=
object. I'm assuming that <span style=3D"font-style: italic;">pluginDefini=
tions</span> object will now look like this:<br><br><span style=3D"font-fam=
ily: courier new,courier,monaco,monospace,sans-serif;">var pluginDefinition=
s =3D {</span><br style=3D"font-family: courier new,courier,monaco,monospac=
e,sans-serif;"><span style=3D"font-family: courier new,courier,monaco,monos=
pace,sans-serif;"> "test": {</span><br style=3D"font-family: cou=
rier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: =
courier new,courier,monaco,monospace,sans-serif;"> "name"=
: "test",</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;"> "version": "1.0",</span><br style=3D=
"font-family: courier new,courier,monaco,monospace,sans-serif;"><span style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"> &n=
bsp; "url": "/webadmin/webadmin/plugin/test/foo.html",</span><br styl=
e=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span s=
tyle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">&nbs=
p; "path": "/tmp",</span><br style=3D"font-family: courier new,=
courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier n=
ew,courier,monaco,monospace,sans-serif;"> "config": {"a":=
1, "b":2, "c":3}</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;"> }</span><br style=3D"font-family: co=
urier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family:=
courier new,courier,monaco,monospace,sans-serif;">}</span><br><br>Original=
ly, the <span style=3D"font-style: italic;">pluginDefinitions</span> object=
looked like this:<br><br style=3D"font-family: courier new,courier,monaco,=
monospace,sans-serif;"><span style=3D"font-family: courier new,courier,mona=
co,monospace,sans-serif;">var pluginDefinitions =3D {</span><br style=3D"fo=
nt-family: courier new,courier,monaco,monospace,sans-serif;"><span style=3D=
"font-family: courier new,courier,monaco,monospace,sans-serif;">  =
;"test": "/webadmin/webadmin/plugin/test/foo.html" // Simple pluginName -&g=
t; pluginSourcePageUrl mappings</span><br style=3D"font-family: courier new=
,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier =
new,courier,monaco,monospace,sans-serif;">}</span><br><br>This is because P=
luginManager (WebAdmin) only needs <span style=3D"font-style: italic;">plug=
inName</span> ("name") and <span style=3D"font-style: italic;">pluginSource=
PageUrl</span> ("url") during startup, when creating plugin iframe. But thi=
s can be changed :)<br><br>Plugin "version" makes sense, plus the plugin co=
nfiguration object ("config") can be useful directly on the client. Let me =
explain:<br><br>Originally, plugin configuration was supposed to be passed =
to actual plugin code (through immediately-invoked-function-expression, or =
IIFE), just like this:<br><br style=3D"font-family: courier new,courier,mon=
aco,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,=
monaco,monospace,sans-serif;">(function (pluginApi, pluginConfig) { // Java=
Script IIFE</span><br style=3D"font-family: courier new,courier,monaco,mono=
space,sans-serif;"><span style=3D"font-family: courier new,courier,monaco,m=
onospace,sans-serif;"> // ... actual plugin code ...</span><br s=
tyle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><spa=
n style=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">}=
)(</span><br style=3D"font-family: courier new,courier,monaco,monospace,san=
s-serif;"><span style=3D"font-family: courier new,courier,monaco,monospace,=
sans-serif;"> parent.pluginApi, /* reference to global pluginApi=
object */</span><br style=3D"font-family: courier new,courier,monaco,monos=
pace,sans-serif;"><span style=3D"font-family: courier new,courier,monaco,mo=
nospace,sans-serif;"> {"a":1, "b":2, "c":3} /* embedded plugin c=
onfiguration as JavaScript object */</span><br style=3D"font-family: courie=
r new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: cou=
rier new,courier,monaco,monospace,sans-serif;">);</span><br><br>The whole p=
urpose of <span style=3D"font-style: italic;">PluginSourcePageServlet</span=
> was to "wrap" actual plugin code into HTML, so that users don't need to w=
rite HTML pages for their plugins manually. <span style=3D"font-style: ital=
ic;">PluginSourcePageServlet</span> would handle any plugin dependencies (p=
laced into HTML head), with actual plugin code being wrapped into IIFE, as =
shown above. Plugin configuration was meant to be stored in a separate file=
, e.g. <span style=3D"font-style: italic;"><pluginName>-config.json</=
span>, so that users could change the default plugin configuration to suit =
their needs.<br><br>Inspired by your patch, rather than reading/embedding p=
lugin configuration when serving plugin HTML page (<span style=3D"font-styl=
e: italic;">PluginSourcePageServlet</span>), it's even better to have the p=
lugin configuration embedded directly into WebAdmin host page, along with i=
ntroducing new <span style=3D"font-style: italic;">pluginApi</span> functio=
n to retrieve the plugin configuration object.<br><br>Based on this, I sugg=
est following modifications to the original concept:<br><br>- modify origin=
al <span style=3D"font-style: italic;">pluginDefinitions</span> structure, =
from <span style=3D"font-style: italic;">pluginName -> pluginSourcePageU=
rl</span>, to <span style=3D"font-style: italic;">pluginName -> pluginDe=
fObject</span><br>- <span style=3D"font-style: italic;">pluginDefObject</sp=
an> is basically a subset of physical plugin definition (<span style=3D"fon=
t-style: italic;">test.json</span>, see below), suitable for use on the cli=
ent<br>- add following attributes to <span style=3D"font-style: italic;">pl=
uginDefObject</span>: <span style=3D"font-style: italic;">version</span>, <=
span style=3D"font-style: italic;">url</span>, <span style=3D"font-style: i=
talic;">config</span><br> * note #1: <span style=3D"font-style: =
italic;">name</span> is not needed, since it's already the key of <span sty=
le=3D"font-style: italic;">pluginName -> pluginDefObject</span> mapping<=
br> * note #2: <span style=3D"font-style: italic;">path</span> i=
s not needed on the client (more on this below)<br>- introduce <span style=
=3D"font-style: italic;">pluginApi.config(pluginName)</span> function for p=
lugins to retrieve their configuration object, and remove <span style=3D"fo=
nt-style: italic;">pluginConfig</span> parameter from main IIFE (as shown a=
bove)<br><br>[a] Physical plugin definition file (JSON) might be located at=
oVirt "DataDir", e.g. <span style=3D"font-style: italic;">/usr/share/ovirt=
-engine/ui-plugins/test.json</span>, for example:<br><br style=3D"font-fami=
ly: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-f=
amily: courier new,courier,monaco,monospace,sans-serif;">{</span><br style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span st=
yle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"> =
; "name": "test",</span><br style=3D"font-family: courier new,courier,=
monaco,monospace,sans-serif;"><span style=3D"font-family: courier new,couri=
er,monaco,monospace,sans-serif;"> "version": "1.0",</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; "url": "/webadmin/webadmin/plugin/test/start.html",</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; "path": "/tmp",</span><br style=3D"font-family: courier new,courie=
r,monaco,monospace,sans-serif;"><span style=3D"font-family: courier new,cou=
rier,monaco,monospace,sans-serif;"> "config": "test-config.json"=
</span><br style=3D"font-family: courier new,courier,monaco,monospace,sans-=
serif;"><span style=3D"font-family: courier new,courier,monaco,monospace,sa=
ns-serif;">}</span><br><br>[b] Plugin configuration file (JSON) might be lo=
cated at oVirt "ConfigDir", e.g. <span style=3D"font-style: italic;">/etc/o=
virt-engine/ui-plugins/test-config.json</span>, for example:<br><br style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span st=
yle=3D"font-family: courier new,courier,monaco,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;"> "a":1, "b":2, "c":3</span><br style=3D"font-family: cour=
ier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: c=
ourier new,courier,monaco,monospace,sans-serif;">}</span><br><br>[c] Finall=
y, plugin static resources (plugin source page, actual plugin code, plugin =
dependencies, CSS/images, etc.) would be located at <span style=3D"font-sty=
le: italic;">/tmp</span> (as shown in [a]), for example:<br><br style=3D"fo=
nt-family: courier new,courier,monaco,monospace,sans-serif;"><span style=3D=
"font-family: courier new,courier,monaco,monospace,sans-serif;">/tmp/start.=
html -> plugin source page, used to load actual plugin code</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;">/t=
mp/test.js -> actual plugin code</span><br style=3D"font-family: courier=
new,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: cour=
ier new,courier,monaco,monospace,sans-serif;">/tmp/deps/jquery-min.js ->=
simulate 3rd party plugin dependency</span><br><br>For example:<br>"/webad=
min/webadmin/plugin/test/start.html" will be mapped to <span style=3D"font-=
style: italic;">/tmp/start.html</span><br>"/webadmin/webadmin/plugin/test/d=
eps/jquery-min.js" will be mapped to <span style=3D"font-style: italic;">/t=
mp/deps/jquery-min.js</span><br><br>This approach has some pros and cons:<b=
r>(+) plugin static resources can be served through <span style=3D"font-sty=
le: italic;">PluginSourcePageServlet</span> (pretty much like oVirt documen=
tation resources, served through oVirt Engine root war's <span style=3D"fon=
t-style: italic;">FileServlet</span>)<br>(+) plugin author has complete con=
trol over plugin source page<br>(-) plugin author actually needs to write p=
lugin source page<br><br>Overall, I think this approach is better than the =
previous one (where <span style=3D"font-style: italic;">PluginSourcePageSer=
vlet</span> took care of rendering plugin source page, but sacrificed some =
flexibility).<br><br>By the way, here's what would happen behind the scenes=
:<br><ol><li>user requests WebAdmin host page, <span style=3D"font-style: i=
talic;">WebadminDynamicHostingServlet</span> loads and caches all plugin de=
finitions [a] + plugin configurations [b] and constructs/embeds appropriate=
<span style=3D"font-style: italic;">pluginDefinitions</span> JavaScript ob=
ject<br><br></li><li>during WebAdmin startup, <span style=3D"font-style: it=
alic;">PluginManager</span> registers the plugin (name/version/url/config),=
and creates/attaches the iframe to fetch plugin source page ansynchronousl=
y<br><br></li><li><span style=3D"font-style: italic;">PluginSourcePageServl=
et</span> handles plugin source page request, resolves the correct path [c]=
and just streams the file content back to client<br><br></li></ol>> 1. =
The plugin configuration files should probably have an "enabled"=20
field and an "apiVersion" field that should be examined to determine=20
whether or not to use the plugin.<br><br>Sounds good, we can implement thes=
e later on :)<br><br>> 2. I suspect the way I've modified PluginSo=
urcePage makes it vulnerable to directory climbing attacks.<br><br>Yes, but=
we can defend against these, restricting access only to plugin's "path" an=
d its sub-directories.<br><br>> 3. Is /usr/share/ovirt-engine the =
right place for the plugin config files?<br><br>I suppose you mean plugin d=
efinition files [a], cannot tell for sure, but we can change this anytime :=
)<br><br><br>Chris, please let me know what you think, and again - many tha=
nks for sending the patch!<br><br><br>Regards,<br>Vojtech<br><br><br><hr id=
=3D"zwchr"><br>From: "Chris Frantz" <Chris.Frantz(a)hp.com><br>To: vszo=
cs(a)redhat.com<br>Sent: Wednesday, August 22, 2012 7:56:45 PM<br>Subject: UI=
Plugins configuration<br><br>Vojtech,<br><br>I decided to work on making t=
he plugin patch a bit more configurable, following some of the ideas expres=
sed by Itamar and others in the meeting yesterday. The attached patch=
is a simple first-attempt.<br><br>Plugin configurations are stored in /usr=
/share/ovirt-engine/ui-plugins/*.json.<br><br>Example:<br>{<br> =
"name": "test",<br> &n=
bsp; "version": "1.0",<br> &n=
bsp; "url": "/webadmin/webadmin/plugin/test/foo.html",<br>=
"path": "/tmp",<br> &n=
bsp; "config": {"a":1, "b":2, "c": 3}<br=
>}<br><br>The engine reads all of the *.json files in that directory to bui=
ld the list of known plugins and gives that list to the webadmin.<br><br>Wh=
en webadmin loads a plugin, it requests the URL given in the plugin config =
file. The "plugin" URL is mapped to PluginSourcePage, which will tran=
slate the first part of the path ("test") into whatever path is stored in p=
luginConfig ("/tmp") in this case, and then serve the static file (e.g. "/t=
mp/foo.html").<br><br>I didn't use the renderPluginSourcePage() method in f=
avor of just serving a static file, but I have no strong opinion on the mat=
ter. However, a plugin may want to store static resources at "path" a=
nd have the engine serve those resources. By just serving files throu=
gh PluginSourcePage, we don't need any other servlets to provide those reso=
urces.<br><br>There is still a bit of work to do:<br><br>1. The plugi=
n configuration files should probably have an "enabled" field and an "apiVe=
rsion" field that should be examined to determine whether or not to use the=
plugin.<br><br>2. I suspect the way I've modified PluginSourcePage m=
akes it vulnerable to directory climbing attacks.<br><br>3. Is /usr/s=
hare/ovirt-engine the right place for the plugin config files?<br><br>Let m=
e know what you think,<br>--Chris<br><br></div></body></html>
------=_Part_12944838_269192103.1345724057851--
5
13
This is a multi-part message in MIME format.
--------------030709000903050400090401
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
I want to add gluster specific IPTable configuration in addition to the
ovirt IPTable configuration (if it is gluster node).
There are two approaches,
1. Having one more gluster specific IP table config in db and merge
with ovirt IPTable config (merging NOT appending)
[I have the patch engine: Gluster specific firewall
configurations <http://gerrit.ovirt.org/#/c/7244/> #7244]
2. Having two different IP Table config (ovirt and ovirt+gluster)
and use either one.
Please provide your suggestions or improvements on this.
--
Regards
Selvasundaram
--------------030709000903050400090401
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi,<br>
<br>
I want to add gluster specific IPTable configuration in addition to
the ovirt IPTable configuration (if it is gluster node). <br>
There are two approaches, <br>
1. Having one more gluster specific IP table config in db and
merge with ovirt IPTable config (merging NOT appending)<br>
[I have the patch <a
href="http://gerrit.ovirt.org/#/c/7244/"
class="gwt-InlineHyperlink">engine: Gluster specific firewall
configurations</a> #7244]<br>
2. Having two different IP Table config (ovirt and ovirt+gluster)
and use either one.<br>
<br>
Please provide your suggestions or improvements on this. <br>
<br>
--<br>
Regards<br>
Selvasundaram<br>
<br>
<br>
</body>
</html>
--------------030709000903050400090401--
7
25
Hi,
When I do a full build of oVirt engine (mvn clean install
-Pgwtdev,gwt-admin,dep,enable-dao-tests), it seems that the JUnit tests
in project 'bll' are not executed. Is this done intentionally? If yes,
is there a simple way to execute them using mvn ?
Thanks,
Shireesh
3
5
Should all created storage domains have 'status' in the API? Below, I've got one active NFS data domain, and a second ISO domain defined, but not activated. the <status> element is only available for the the ISO domain.
I'd really like a way to enumerate the storage domains, and check whether a domain is OK or not.
via python shell ovirt-sdk:
>>> iso = api.storagedomains.get(name='isos-20120614')
>>> iso.name
'isos-20120614'
>>> iso.status.state
'unattached'
>>> sd = api.storagedomains.get(name='images-cluster1')
>>> sd.name
'images-cluster1'
>>> sd.status.state
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'state'
Refrence XML via https://enginehost/api/storagedomains/
<storage_domains>
<storage_domain href="/api/storagedomains/73c7f296-6dac-4bc3-95c1-f0d88a1db7ad" id="73c7f296-6dac-4bc3-95c1-f0d88a1db7ad">
<name>images-cluster1</name>
<link href="/api/storagedomains/73c7f296-6dac-4bc3-95c1-f0d88a1db7ad/permissions" rel="permissions"/>
<type>data</type>
<master>true</master>
<storage>
<type>nfs</type>
<address>ichigo-dom209.phx.austin.ibm.com</address>
<path>/images-cluster1</path>
</storage>
<available>6442450944</available>
<used>39728447488</used>
<committed>0</committed>
<storage_format>v1</storage_format>
</storage_domain>
<storage_domain href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d" id="723c254e-7585-4c33-b8d1-cb88a2245d7d">
<name>isos-20120614</name>
<link href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d/permissions" rel="permissions"/>
<link href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d/files" rel="files"/>
<type>iso</type>
<status>
<state>unattached</state>
</status>
<master>false</master>
<storage>
<type>nfs</type>
<address>ichigo-dom209.phx.austin.ibm.com</address>
<path>/iso-cluster1</path>
</storage>
<available>6442450944</available>
<used>39728447488</used>
<committed>0</committed>
<storage_format>v1</storage_format>
</storage_domain>
</storage_domains>
--
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
ryanh(a)us.ibm.com
2
7
------=_Part_14447953_781921536.1346149049848
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hi guys,
I was thinking about improving JavaScript plugin API so that each time a plugin calls WebAdmin, the plugin name will be part of the call. This way, PluginManager (WebAdmin) can validate the call before doing any further actions, e.g. "plugin invocation must be allowed && plugin must be initialized". In other words, this is just to ensure consistent behavior for "plugin -> WebAdmin" calls.
Here's a draft of new JavaScript API in action: http://jsfiddle.net/tHk5n/ (see the code below the comment saying "ACTUAL TEST CODE")
(I took my inspiration from jQuery source code, even though I don't fully understand JavaScript prototype OOP concept, seems a bit weird to me.)
For comparison, here's some plugin code that uses current plugin API:
// Register our plugin object (containing event handler functions) into pluginApi.plugins
pluginApi.plugins['myPlugin'] = {
UiInit: function() {
pluginApi.ui.addMainTab('Custom Tab', 'custom-tab', 'http://www.example.com/');
}
};
// Tell WebAdmin that we are ready, we need the plugin name to identify this plugin
pluginApi.ready('myPlugin');
And here's an equivalent plugin code that uses new plugin API:
// Plugin API instance for our plugin
var myPlugin = pluginApi('myPlugin');
// Register our plugin object (containing event handler functions) into myPlugin
myPlugin.register({
UiInit: function() {
myPlugin.ui.addMainTab('Custom Tab', 'custom-tab', 'http://www.example.com/');
}
});
// Tell WebAdmin that we are ready , plugin name is already part of myPlugin
myPlugin.ready();
// Note: the above line is equivalent to: pluginApi('myPlugin').ready() ;
Let me know what you think.
Cheers,
Vojtech
------=_Part_14447953_781921536.1346149049848
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>I was thinking about improving JavaSc=
ript plugin API so that each time a plugin calls WebAdmin, the plugin name =
will be part of the call. This way, <em>PluginManager</em> (WebAdmin) can v=
alidate the call before doing any further actions, e.g. "plugin invocation =
must be allowed && plugin must be initialized". In other words, thi=
s is just to ensure consistent behavior for "plugin -> WebAdmin" calls.<=
br><br>Here's a draft of new JavaScript API in action: http://jsfiddle.net/=
tHk5n/ (see the code below the comment saying "ACTUAL TEST CODE")<br>(I too=
k my inspiration from jQuery source code, even though I don't fully underst=
and JavaScript prototype OOP concept, seems a bit weird to me.)<br><br><hr =
style=3D"width: 100%; height: 2px;"><br>For comparison, here's some plugin =
code that uses current plugin API:<br><br><span style=3D"font-family: couri=
er new,courier,monaco,monospace,sans-serif;">// Register our plugin object =
(containing event handler functions) into pluginApi.plugins</span><br style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span st=
yle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">plugi=
nApi.plugins['myPlugin'] =3D {</span><br style=3D"font-family: courier new,=
courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier n=
ew,courier,monaco,monospace,sans-serif;"> UiInit: function() {</=
span><br style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans=
-serif;"> pluginApi.ui.addMainTab('Custom Tab', 'custom-t=
ab', 'http://www.example.com/');</span><br style=3D"font-family: courier ne=
w,courier,monaco,monospace,sans-serif;"><span style=3D"font-family: courier=
new,courier,monaco,monospace,sans-serif;"> }</span><br style=3D=
"font-family: courier new,courier,monaco,monospace,sans-serif;"><span style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">};</span=
><br style=3D"font-family: courier new,courier,monaco,monospace,sans-serif;=
"><br style=3D"font-family: courier new,courier,monaco,monospace,sans-serif=
;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;">// Tell WebAdmin that we are ready, we need the plugin name to identi=
fy this plugin</span><br style=3D"font-family: courier new,courier,monaco,m=
onospace,sans-serif;"><span style=3D"font-family: courier new,courier,monac=
o,monospace,sans-serif;">pluginApi.ready('myPlugin');</span><br style=3D"fo=
nt-family: courier new,courier,monaco,monospace,sans-serif;"><br><hr style=
=3D"width: 100%; height: 2px;"><br>And here's an equivalent plugin code tha=
t uses new plugin API:<br><br><span style=3D"font-family: courier new,couri=
er,monaco,monospace,sans-serif;">// Plugin API instance for our plugin</spa=
n><br style=3D"font-family: courier new,courier,monaco,monospace,sans-serif=
;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;">var myPlugin =3D pluginApi('myPlugin');</span><br style=3D"font-famil=
y: courier new,courier,monaco,monospace,sans-serif;"><br style=3D"font-fami=
ly: courier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-f=
amily: courier new,courier,monaco,monospace,sans-serif;">// Register our pl=
ugin object (containing event handler functions) into myPlugin</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;">my=
Plugin.register({</span><br style=3D"font-family: courier new,courier,monac=
o,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,mo=
naco,monospace,sans-serif;"> UiInit: function() {</span><br styl=
e=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span s=
tyle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">&nbs=
p; myPlugin.ui.addMainTab('Custom Tab', 'custom-tab', 'http://w=
ww.example.com/');</span><br style=3D"font-family: courier new,courier,mona=
co,monospace,sans-serif;"><span style=3D"font-family: courier new,courier,m=
onaco,monospace,sans-serif;"> }</span><br style=3D"font-family: =
courier new,courier,monaco,monospace,sans-serif;"><span style=3D"font-famil=
y: courier new,courier,monaco,monospace,sans-serif;">});</span><br style=3D=
"font-family: courier new,courier,monaco,monospace,sans-serif;"><br style=
=3D"font-family: courier new,courier,monaco,monospace,sans-serif;"><span st=
yle=3D"font-family: courier new,courier,monaco,monospace,sans-serif;">// Te=
ll WebAdmin that we are ready, plugin name is already part of myPlugin</spa=
n><br style=3D"font-family: courier new,courier,monaco,monospace,sans-serif=
;"><span style=3D"font-family: courier new,courier,monaco,monospace,sans-se=
rif;">myPlugin.ready();</span><br style=3D"font-family: courier new,courier=
,monaco,monospace,sans-serif;"><span style=3D"font-family: courier new,cour=
ier,monaco,monospace,sans-serif;">// Note: the above line is equivalent to:=
pluginApi('myPlugin').ready();</span><br style=3D"font-family: courier new=
,courier,monaco,monospace,sans-serif;"><br><hr style=3D"width: 100%; height=
: 2px;"><br>Let me know what you think.<br><br>Cheers,<br>Vojtech<br><br></=
div></body></html>
------=_Part_14447953_781921536.1346149049848--
1
0
Hello,
Change http://gerrit.ovirt.org/6348 has been merged, so next time you
run "mvn -Psetup ..." with the updated code you will need to use 8700
instead of 8080. Let me know if you find any issue related to this change.
Regards,
Juan Hernandez
--
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
3ºD, 28016 Madrid, Spain
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.
1
0
------=_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--
1
0
Hi Ryan,
SD status available only in datacenter context [1], as some of domains
may be shared between datacenters, i.e:
dc = api.datacenters.get(name="xxx")
sd = dc.storagedomains.get(name="images-cluster1")
sd.status
[1] except of 'unatached' domains.
On 08/27/2012 05:11 PM, Itamar Heim wrote:
>
>
>
> -------- Original Message --------
> Subject: [Engine-devel] storagedomain status via API
> Date: Mon, 27 Aug 2012 08:36:49 -0500
> From: Ryan Harper <ryanh(a)us.ibm.com>
> To: engine-devel(a)ovirt.org
>
> Should all created storage domains have 'status' in the API? Below, I've got one active NFS data domain, and a second ISO domain defined, but not activated. the <status>
> element is only available for the the ISO domain.
>
> I'd really like a way to enumerate the storage domains, and check whether a domain is OK or not.
>
>
> via python shell ovirt-sdk:
>>>> iso = api.storagedomains.get(name='isos-20120614')
>>>> iso.name
> 'isos-20120614'
>>>> iso.status.state
> 'unattached'
>>>> sd = api.storagedomains.get(name='images-cluster1')
>>>> sd.name
> 'images-cluster1'
>>>> sd.status.state
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: 'NoneType' object has no attribute 'state'
>
>
> Refrence XML via https://enginehost/api/storagedomains/
>
> <storage_domains>
> <storage_domain href="/api/storagedomains/73c7f296-6dac-4bc3-95c1-f0d88a1db7ad" id="73c7f296-6dac-4bc3-95c1-f0d88a1db7ad">
> <name>images-cluster1</name>
> <link href="/api/storagedomains/73c7f296-6dac-4bc3-95c1-f0d88a1db7ad/permissions" rel="permissions"/>
> <type>data</type>
> <master>true</master>
> <storage>
> <type>nfs</type>
> <address>ichigo-dom209.phx.austin.ibm.com</address>
> <path>/images-cluster1</path>
> </storage>
> <available>6442450944</available>
> <used>39728447488</used>
> <committed>0</committed>
> <storage_format>v1</storage_format>
> </storage_domain>
> <storage_domain href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d" id="723c254e-7585-4c33-b8d1-cb88a2245d7d">
> <name>isos-20120614</name>
> <link href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d/permissions" rel="permissions"/>
> <link href="/api/storagedomains/723c254e-7585-4c33-b8d1-cb88a2245d7d/files" rel="files"/>
> <type>iso</type>
> <status>
> <state>unattached</state>
> </status>
> <master>false</master>
> <storage>
> <type>nfs</type>
> <address>ichigo-dom209.phx.austin.ibm.com</address>
> <path>/iso-cluster1</path>
> </storage>
> <available>6442450944</available>
> <used>39728447488</used>
> <committed>0</committed>
> <storage_format>v1</storage_format>
> </storage_domain>
> </storage_domains>
>
>
--
Michael Pasternak
RedHat, ENG-Virtualization R&D
2
3
Hello,
Some time ago I requested feedback about a change in the port numbers
used by the engine, the details are in this thread:
http://lists.ovirt.org/pipermail/engine-devel/2012-July/002089.html
I didn't receive bad feedback, neither in the thread or in the proposed
change in gerrit:
http://gerrit.ovirt.org/6348
I tested it as much as I can, so I think it is ready for merge. Unless
someone has an strong reason to not do this change I will merge it on
Monday 27 afternoon.
Remember that with this change the default ports used by the engine will
be 6090 for HTTP and 6091 for HTTPS. This will affect RPM installations
and also development environments, so next time you do "mvn -Psetup"
your local installation of the application server will start using port
6090 instead of 8080.
Also take into account that if you are using Apache as a proxy it will
continue using ports 80 and 443 by default, no change there.
If you have objections please let me know.
Regards,
Juan Hernández
--
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
3ºD, 28016 Madrid, Spain
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.
2
4

[Engine-devel] NOTICE: vdsm-bootstrap master is required for ovirt-engine master
by Alon Bar-Lev 22 Aug '12
by Alon Bar-Lev 22 Aug '12
22 Aug '12
Hello,
Due to recent changes in the bootstrap process, engine master now requires vdsm-bootstrap from vdsm master as well.
The major changes are listed bellow.
If you experience any issue, please CC me.
Regards,
Alon Bar-Lev.
commit ec60b1fe12273ef2d5a55183bc6031cfa4cbedbb
Author: Alon Bar-Lev <alonbl(a)redhat.com>
Date: Wed Aug 8 17:50:13 2012 +0300
bootstrap: send complete bootstrap from engine
CURRENT BEHAVIOR
vds_installer.py is part of ovirt-engine, upon bootstrap, the script is
sent to the node using ssh.
Then vds_installer.py pulls vds-bootstrap* files using HTTP from
engine.
The vds_installer.py and vds_bootstrap pulls ssh public key from engine
using HTTP.
NEW BEHAVIOR
vds_installer.py was moved into the vdsm-bootstrap and renamed to setup.
vdsm-bootstrap repository was updated to create directory per bootstrap
interface with 'setup' script.
ovirt-engine copies public key to node in similar way of firewall rules.
At bootstrap time, engine create tar archive from the bootstrap
directory, cache it and pipe the archive into node in order to extract
it and run the setup script.
No HTTP communication is needed.
No conflict with existing files.
CONFIGURATION
New: BootstrapCommand
Control which command is sent during bootstrap.
New: BootstrapCacheRefreshInterval
Control the interval of testing if cache is valid.
New: BootstrapPackageDirectory
Directory to pack and send to node.
New: BootstrapPackageName
Cache archive name (basename).
New: SSHKeyAlias
Engine SSH key alias
MODIFICATIONS
Use umask 0077 when transferring installations so accessible only to
logged on user.
Change-Id: I6f4a09ca9e66f0c9f5f4f7b283a5f43986b7e603
Signed-off-by: Alon Bar-Lev <alonbl(a)redhat.com>
commit 8d7d8ecb07cca8c47ae539115b581a7124923235
Author: Alon Bar-Lev <alonbl(a)redhat.com>
Date: Wed Jul 25 16:21:07 2012 +0300
bootstrap: new implementation for apache-sshd usage
Major changes:
1. Do not use temporary files for compression/decompression.
2. Do not use wget to pull large files, use ssh for all transfers.
3. One pass on files for digest, compress/decompress, send/receive.
4. Do not pull every 1 second for bytes/status.
5. Test for command status code.
6. File transfer using ssh and md5sum at same session, md5sum written to
stderr.
7. Limit buffer size when reading remote output, so we won't exhaust all
memory.
8. Do not echo back whole file content when sending file.
9. Consistent error, exception handling and debugging information.
10. More unit tests.
Split between pure ssh implementation[1] and application logic[2].
Unit tests now have their own dedicated generic sshd[3], for proper
work in embedded mode ssh apache-ssh-0.7.0 is required.
Separate unit tests dedicated to OVirtSSH implementation, by default
embedded apache-sshd is used, this can be overridden by setting
java system properties, see[4].
As unit tests takes long time, use -Penable-ssh-tests to activate.
[1] org.ovirt.engine.core.utils.ssh.OVirtSSH
[2] org.ovirt.engine.core.utils.hostinstall.MinaInstallWrapper
[3] org.ovirt.engine.core.utils.ssh.SSHD
[4] org.ovirt.engine.core.utils.ssh.TestCommon
Change-Id: I50ba60f2db364114907485da3074feb714615e0c
Signed-off-by: Alon Bar-Lev <alonbl(a)redhat.com>
1
0
After a few false starts it looks like we have per patch testing working
on VDSM, oVirt-engine, oVirt-engine-sdk and oVirt-engine-cli. There are
3 status a patch can get. 1) Success - Means the patch ran though the
tests without issue. 2) Failure - Means the tests failed. 3) Aborted -
Generally means the submitter is not in the whitelist and the tests were
never run. If you have any questions please feel free to ask.
--
Thanks
Robert Middleswarth
@rmiddle (twitter/IRC)
6
10
The DAO unit tests take twice as long as the rest of the test to run is
there any way to break them up into two pieces?
--
Thanks
Robert Middleswarth
@rmiddle (twitter/IRC)
8
13
------=_Part_11593103_846368946.1345476106865
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
The following meeting has been modified:
Subject: oVirt UI Plugins: Follow-up Meeting
Organizer: "Vojtech Szocs" <vszocs(a)redhat.com>
Time: Tuesday, August 21, 2012, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague
Invitees: engine-devel(a)ovirt.org; George.Costea(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.Hopper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.com; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com ...
*~*~*~*~*~*~*~*~*~*
Hi guys,
this is a follow-up meeting for discussing progress on oVirt UI Plugins feature.
Topics covered in this meeting:
* walk through changes in the plugin infrastructure (2nd revision of UI Plugins proof-of-concept patch)
* discuss the current progress of implementing dynamic tabs with GWT-Platform (GWTP) framework
* discuss any open questions or issues, in case somebody started working on other items
Here are the details required for joining the session.
Intercall dial-in numbers can be found at:
https://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbers…
Intercall Conference Code ID: 7128867405 #
Elluminate session:
https://sas.elluminate.com/m.jnlp?sid=819&password=M.CDDD4C1B4E2E33D90E5897…
Regards,
Vojtech
------=_Part_11593103_846368946.1345476106865
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<html><body id=3D'htmlmode'><h3>The following meeting has been modified:</h=
3>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Subject:</th><td>oVirt UI Plugins: Follow-up Meeting <=
/td></tr>
<tr><th align=3Dleft>Organizer:</th><td>"Vojtech Szocs" <vszocs(a)redhat.c=
om> </td></tr>
</table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Time:</th><td>Tuesday, August 21, 2012, 4:30:00 PM - 5=
:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague
</td></tr></table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Invitees:</th><td>engine-devel(a)ovirt.org; George.Coste=
a(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.H=
opper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.co=
m; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com ... </td></tr>
</table>
<div>*~*~*~*~*~*~*~*~*~*</div><br><div style=3D'font-family: times new roma=
n,new york,times,serif; font-size: 12pt; color: #000000'><div style=3D"font=
-family: times new roman,new york,times,serif; font-size: 12pt; color: #000=
000"><div style=3D"font-family: times new roman,new york,times,serif; font-=
size: 12pt; color: #000000"><div style=3D"font-family: times new roman,new =
york,times,serif; font-size: 12pt; color: #000000">Hi guys,<br><br>this is =
a follow-up meeting for discussing progress on <span style=3D"font-weight: =
bold;">oVirt UI Plugins</span> feature.<br><br>Topics covered in this meeti=
ng:<br><ul><li>walk through changes in the plugin infrastructure (2nd revis=
ion of UI Plugins proof-of-concept patch)</li><li>discuss the current progr=
ess of implementing dynamic tabs with GWT-Platform (GWTP) framework</li><li=
>discuss any open questions or issues, in case somebody started working on =
other items<br></li></ul><br><hr style=3D"width: 100%; height: 2px;"><br>He=
re are the details required for joining the session.<br><br>Intercall dial-=
in numbers can be found at:<br><span class=3D"Object" id=3D"OBJ_PREFIX_DWT2=
571_com_zimbra_url"><span class=3D"Object" id=3D"OBJ_PREFIX_DWT1569_com_zim=
bra_url"><a target=3D"_blank" href=3D"https://www.intercallonline.com/portl=
ets/scheduling/viewNumbers/listNumbersByCode.do?confCode=3D7128867405">http=
s://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbersByCo=
de.do?confCode=3D7128867405</a></span></span><br><br>Intercall Conference C=
ode ID: <span class=3D"" id=3D"OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href=
=3D"callto:7128867405" target=3D"_blank">7128867405</a></span>#<br><br>Ellu=
minate session:<br>https://sas.elluminate.com/m.jnlp?sid=3D819&password=
=3DM.CDDD4C1B4E2E33D90E5897F4942DD9<br><br><hr style=3D"width: 100%; height=
: 2px;"><br>Regards,<br>Vojtech<br><br></div></div></div></div></body></htm=
l>
------=_Part_11593103_846368946.1345476106865
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: 7bit
BEGIN:VCALENDAR
PRODID:Zimbra-Calendar-Provider
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/Belgrade
BEGIN:STANDARD
DTSTART:19710101T030000
TZOFFSETTO:+0100
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19710101T020000
TZOFFSETTO:+0200
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:fbf22c37-f8e4-49ee-9441-e0f258456d4a
SUMMARY:oVirt UI Plugins: Follow-up Meeting
ATTENDEE;CN=engine-devel;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:engine-devel@ovirt.org
ATTENDEE;CN=George Costea;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:m
ailto:george.costea@netapp.com
ATTENDEE;CN=Troy Mangum;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:mai
lto:troy.mangum@netapp.com
ATTENDEE;CN=Dustin Schoenbrun;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TR
UE:mailto:dustin.schoenbrun@netapp.com
ATTENDEE;CN=Ricky Hopper;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:ma
ilto:ricky.hopper@netapp.com
ATTENDEE;CN=Chris Frantz;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:chris.frantz@hp.com
ATTENDEE;CN=Keith Robertson;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
:mailto:kroberts@redhat.com
ATTENDEE;CN=Oved Ourfalli;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TR
UE:mailto:ovedo@redhat.com
ATTENDEE;CN=Itamar Heim;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE
:mailto:iheim@redhat.com
ATTENDEE;CN=Igor Lvovsky;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:ma
ilto:ilvovsky@redhat.com
ATTENDEE;CN=Einav Cohen;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:mai
lto:ecohen@redhat.com
ATTENDEE;CN=Simon Grinberg;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;RSVP=TRUE
:mailto:simon@redhat.com
ORGANIZER;CN=Vojtech Szocs:mailto:vszocs@redhat.com
DTSTART;TZID="Europe/Belgrade":20120821T163000
DTEND;TZID="Europe/Belgrade":20120821T173000
STATUS:CONFIRMED
CLASS:PUBLIC
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
TRANSP:OPAQUE
LAST-MODIFIED:20120820T152146Z
DTSTAMP:20120820T152146Z
SEQUENCE:3
DESCRIPTION:The following meeting has been modified:\n\nSubject: oVirt UI Pl
ugins: Follow-up Meeting \nOrganizer: "Vojtech Szocs" <vszocs(a)redhat.com> \n
\nTime: Tuesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belg
rade\, Bratislava\, Budapest\, Ljubljana\, Prague\n \nInvitees: engine-devel
@ovirt.org\; George.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\; Dustin.Scho
enbrun(a)netapp.com\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com\; kroberts
@redhat.com\; ovedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky(a)redhat.com\; ec
ohen(a)redhat.com ... \n\n\n*~*~*~*~*~*~*~*~*~*\n\n\n\n\nHi guys\, \n\nthis is
a follow-up meeting for discussing progress on oVirt UI Plugins feature. \n
\nTopics covered in this meeting: \n\n * walk through changes in the plug
in infrastructure (2nd revision of UI Plugins proof-of-concept patch) \n
* discuss the current progress of implementing dynamic tabs with GWT-Platfor
m (GWTP) framework \n * discuss any open questions or issues\, in case so
mebody started working on other items \n\n\n\nHere are the details required
for joining the session. \n\nIntercall dial-in numbers can be found at: \nht
tps://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbersByC
ode.do?confCode=7128867405 \n\nIntercall Conference Code ID: 7128867405 # \n
\nElluminate session: \nhttps://sas.elluminate.com/m.jnlp?sid=819&password=M
.CDDD4C1B4E2E33D90E5897F4942DD9 \n\n\n\nRegards\, \nVojtech \n\n
X-ALT-DESC;FMTTYPE=text/html:<html><body id='htmlmode'><h3>The following mee
ting has been modified:</h3>\n\n<p>\n<table border='0'>\n<tr><th align=left>
Subject:</th><td>oVirt UI Plugins: Follow-up Meeting </td></tr>\n<tr><th ali
gn=left>Organizer:</th><td>"Vojtech Szocs" <\;vszocs(a)redhat.com>\; </td>
</tr>\n</table>\n<p>\n<table border='0'>\n<tr><th align=left>Time:</th><td>T
uesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade\, Br
atislava\, Budapest\, Ljubljana\, Prague\n </td></tr></table>\n<p>\n<table b
order='0'>\n<tr><th align=left>Invitees:</th><td>engine-devel(a)ovirt.org\; Ge
orge.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\; Dustin.Schoenbrun(a)netapp.c
om\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com\; kroberts(a)redhat.com\; o
vedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky(a)redhat.com\; ecohen(a)redhat.com
... </td></tr>\n</table>\n<div>*~*~*~*~*~*~*~*~*~*</div><br><div style='fon
t-family: times new roman\,new york\,times\,serif\; font-size: 12pt\; color:
#000000'><div style="font-family: times new roman\,new york\,times\,serif\;
font-size: 12pt\; color: #000000"><div style="font-family: times new roman\
,new york\,times\,serif\; font-size: 12pt\; color: #000000"><div style="font
-family: times new roman\,new york\,times\,serif\; font-size: 12pt\; color:
#000000">Hi guys\,<br><br>this is a follow-up meeting for discussing progres
s on <span style="font-weight: bold\;">oVirt UI Plugins</span> feature.<br><
br>Topics covered in this meeting:<br><ul><li>walk through changes in the pl
ugin infrastructure (2nd revision of UI Plugins proof-of-concept patch)</li>
<li>discuss the current progress of implementing dynamic tabs with GWT-Platf
orm (GWTP) framework</li><li>discuss any open questions or issues\, in case
somebody started working on other items<br></li></ul><br><hr style="width: 1
00%\; height: 2px\;"><br>Here are the details required for joining the sessi
on.<br><br>Intercall dial-in numbers can be found at:<br><span class="Object
" id="OBJ_PREFIX_DWT2571_com_zimbra_url"><span class="Object" id="OBJ_PREFIX
_DWT1569_com_zimbra_url"><a target="_blank" href="https://www.intercallonlin
e.com/portlets/scheduling/viewNumbers/listNumbersByCode.do?confCode=71288674
05">https://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumb
ersByCode.do?confCode=7128867405</a></span></span><br><br>Intercall Conferen
ce Code ID: <span class="" id="OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href=
"callto:7128867405" target="_blank">7128867405</a></span>#<br><br>Elluminate
session:<br>https://sas.elluminate.com/m.jnlp?sid=819&\;password=M.CDDD4
C1B4E2E33D90E5897F4942DD9<br><br><hr style="width: 100%\; height: 2px\;"><br
>Regards\,<br>Vojtech<br><br></div></div></div></div></body></html>
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT5M
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
------=_Part_11593103_846368946.1345476106865--
3
2
------=_Part_11550617_1184516810.1345471641660
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
The following meeting has been modified:
Subject: oVirt UI Plugins: Follow-up Meeting
Organizer: "Vojtech Szocs" <vszocs(a)redhat.com>
Time: Tuesday, August 21, 2012, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague
Invitees: engine-devel(a)ovirt.org; George.Costea(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.Hopper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.com; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com ...
*~*~*~*~*~*~*~*~*~*
Hi guys,
this is a follow-up meeting for discussing progress on oVirt UI Plugins feature.
Topics covered in this meeting:
* walk through changes in the plugin infrastructure (2nd revision of UI Plugins proof-of-concept patch)
* discuss the current progress of implementing dynamic tabs with GWT-Platform (GWTP) framework
* discuss any open questions or issues, in case somebody started working on other items
Here are the details required for joining the session.
Intercall dial-in numbers can be found at:
https://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbers…
Intercall Conference Code ID: 7128867405 #
Elluminate session:
<to be announced later on>
Regards,
Vojtech
------=_Part_11550617_1184516810.1345471641660
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<html><body id=3D'htmlmode'><h3>The following meeting has been modified:</h=
3>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Subject:</th><td>oVirt UI Plugins: Follow-up Meeting <=
/td></tr>
<tr><th align=3Dleft>Organizer:</th><td>"Vojtech Szocs" <vszocs(a)redhat.c=
om> </td></tr>
</table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Time:</th><td>Tuesday, August 21, 2012, 4:30:00 PM - 5=
:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague
</td></tr></table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Invitees:</th><td>engine-devel(a)ovirt.org; George.Coste=
a(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.H=
opper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.co=
m; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com ... </td></tr>
</table>
<div>*~*~*~*~*~*~*~*~*~*</div><br><div style=3D'font-family: times new roma=
n,new york,times,serif; font-size: 12pt; color: #000000'><div style=3D"font=
-family: times new roman,new york,times,serif; font-size: 12pt; color: #000=
000"><div style=3D"font-family: times new roman,new york,times,serif; font-=
size: 12pt; color: #000000">Hi guys,<br><br>this is a follow-up meeting for=
discussing progress on <span style=3D"font-weight: bold;">oVirt UI Plugins=
</span> feature.<br><br>Topics covered in this meeting:<br><ul><li>walk thr=
ough changes in the plugin infrastructure (2nd revision of UI Plugins proof=
-of-concept patch)</li><li>discuss the current progress of implementing dyn=
amic tabs with GWT-Platform (GWTP) framework</li><li>discuss any open quest=
ions or issues, in case somebody started working on other items<br></li></u=
l><br><hr style=3D"width: 100%; height: 2px;"><br>Here are the details requ=
ired for joining the session.<br><br>Intercall dial-in numbers can be found=
at:<br><span class=3D"Object" id=3D"OBJ_PREFIX_DWT2571_com_zimbra_url"><sp=
an class=3D"Object" id=3D"OBJ_PREFIX_DWT1569_com_zimbra_url"><a target=3D"_=
blank" href=3D"https://www.intercallonline.com/portlets/scheduling/viewNumb=
ers/listNumbersByCode.do?confCode=3D7128867405">https://www.intercallonline=
.com/portlets/scheduling/viewNumbers/listNumbersByCode.do?confCode=3D712886=
7405</a></span></span><br><br>Intercall Conference Code ID: <span class=3D"=
" id=3D"OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href=3D"callto:7128867405" =
target=3D"_blank">7128867405</a></span>#<br><br>Elluminate session:<br><=
to be announced later on><br><br><hr style=3D"width: 100%; height: 2px;"=
><br>Regards,<br>Vojtech<br><br></div></div></div></body></html>
------=_Part_11550617_1184516810.1345471641660
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: 7bit
BEGIN:VCALENDAR
PRODID:Zimbra-Calendar-Provider
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/Belgrade
BEGIN:STANDARD
DTSTART:19710101T030000
TZOFFSETTO:+0100
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19710101T020000
TZOFFSETTO:+0200
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:fbf22c37-f8e4-49ee-9441-e0f258456d4a
SUMMARY:oVirt UI Plugins: Follow-up Meeting
ATTENDEE;CN=engine-devel;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:engine-devel@ovirt.org
ATTENDEE;CN=George Costea;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:m
ailto:george.costea@netapp.com
ATTENDEE;CN=Troy Mangum;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:mai
lto:troy.mangum@netapp.com
ATTENDEE;CN=Dustin Schoenbrun;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TR
UE:mailto:dustin.schoenbrun@netapp.com
ATTENDEE;CN=Ricky Hopper;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:ma
ilto:ricky.hopper@netapp.com
ATTENDEE;CN=Chris Frantz;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:chris.frantz@hp.com
ATTENDEE;CN=Keith Robertson;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
TRUE:mailto:kroberts@redhat.com
ATTENDEE;CN=Oved Ourfalli;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TR
UE:mailto:ovedo@redhat.com
ATTENDEE;CN=Itamar Heim;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE
:mailto:iheim@redhat.com
ATTENDEE;CN=Igor Lvovsky;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:ilvovsky@redhat.com
ATTENDEE;CN=Einav Cohen;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:mai
lto:ecohen@redhat.com
ATTENDEE;CN=Simon Grinberg;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;RSVP=TRUE
:mailto:simon@redhat.com
ORGANIZER;CN=Vojtech Szocs:mailto:vszocs@redhat.com
DTSTART;TZID="Europe/Belgrade":20120821T163000
DTEND;TZID="Europe/Belgrade":20120821T173000
STATUS:CONFIRMED
CLASS:PUBLIC
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
TRANSP:OPAQUE
LAST-MODIFIED:20120820T140721Z
DTSTAMP:20120820T140721Z
SEQUENCE:2
DESCRIPTION:The following meeting has been modified:\n\nSubject: oVirt UI Pl
ugins: Follow-up Meeting \nOrganizer: "Vojtech Szocs" <vszocs(a)redhat.com> \n
\nTime: Tuesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belg
rade\, Bratislava\, Budapest\, Ljubljana\, Prague\n \nInvitees: engine-devel
@ovirt.org\; George.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\; Dustin.Scho
enbrun(a)netapp.com\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com\; kroberts
@redhat.com\; ovedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky(a)redhat.com\; ec
ohen(a)redhat.com ... \n\n\n*~*~*~*~*~*~*~*~*~*\n\n\n\nHi guys\, \n\nthis is a
follow-up meeting for discussing progress on oVirt UI Plugins feature. \n\n
Topics covered in this meeting: \n\n * walk through changes in the plugin
infrastructure (2nd revision of UI Plugins proof-of-concept patch) \n *
discuss the current progress of implementing dynamic tabs with GWT-Platform
(GWTP) framework \n * discuss any open questions or issues\, in case some
body started working on other items \n\n\n\nHere are the details required fo
r joining the session. \n\nIntercall dial-in numbers can be found at: \nhttp
s://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbersByCod
e.do?confCode=7128867405 \n\nIntercall Conference Code ID: 7128867405 # \n\n
Elluminate session: \n<to be announced later on> \n\n\n\nRegards\, \nVojtech
\n\n
X-ALT-DESC;FMTTYPE=text/html:<html><body id='htmlmode'><h3>The following mee
ting has been modified:</h3>\n\n<p>\n<table border='0'>\n<tr><th align=left>
Subject:</th><td>oVirt UI Plugins: Follow-up Meeting </td></tr>\n<tr><th ali
gn=left>Organizer:</th><td>"Vojtech Szocs" <\;vszocs(a)redhat.com>\; </td>
</tr>\n</table>\n<p>\n<table border='0'>\n<tr><th align=left>Time:</th><td>T
uesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade\, Br
atislava\, Budapest\, Ljubljana\, Prague\n </td></tr></table>\n<p>\n<table b
order='0'>\n<tr><th align=left>Invitees:</th><td>engine-devel(a)ovirt.org\; Ge
orge.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\; Dustin.Schoenbrun(a)netapp.c
om\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com\; kroberts(a)redhat.com\; o
vedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky(a)redhat.com\; ecohen(a)redhat.com
... </td></tr>\n</table>\n<div>*~*~*~*~*~*~*~*~*~*</div><br><div style='fon
t-family: times new roman\,new york\,times\,serif\; font-size: 12pt\; color:
#000000'><div style="font-family: times new roman\,new york\,times\,serif\;
font-size: 12pt\; color: #000000"><div style="font-family: times new roman\
,new york\,times\,serif\; font-size: 12pt\; color: #000000">Hi guys\,<br><br
>this is a follow-up meeting for discussing progress on <span style="font-we
ight: bold\;">oVirt UI Plugins</span> feature.<br><br>Topics covered in this
meeting:<br><ul><li>walk through changes in the plugin infrastructure (2nd
revision of UI Plugins proof-of-concept patch)</li><li>discuss the current p
rogress of implementing dynamic tabs with GWT-Platform (GWTP) framework</li>
<li>discuss any open questions or issues\, in case somebody started working
on other items<br></li></ul><br><hr style="width: 100%\; height: 2px\;"><br>
Here are the details required for joining the session.<br><br>Intercall dial
-in numbers can be found at:<br><span class="Object" id="OBJ_PREFIX_DWT2571_
com_zimbra_url"><span class="Object" id="OBJ_PREFIX_DWT1569_com_zimbra_url">
<a target="_blank" href="https://www.intercallonline.com/portlets/scheduling
/viewNumbers/listNumbersByCode.do?confCode=7128867405">https://www.intercall
online.com/portlets/scheduling/viewNumbers/listNumbersByCode.do?confCode=712
8867405</a></span></span><br><br>Intercall Conference Code ID: <span class="
" id="OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href="callto:7128867405" targe
t="_blank">7128867405</a></span>#<br><br>Elluminate session:<br><\;to be a
nnounced later on>\;<br><br><hr style="width: 100%\; height: 2px\;"><br>Re
gards\,<br>Vojtech<br><br></div></div></div></body></html>
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT5M
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
------=_Part_11550617_1184516810.1345471641660--
1
0
Part of the process now include creating rpm packages.
http://jenkins.ovirt.info/view/patches/job/patch_engine_create_rpms/
This allows people to download and test packages based on the change if
they want to.
--
Thanks
Robert Middleswarth
@rmiddle (twitter/IRC)
2
4

19 Aug '12
Hi All,
Following previous discussion on the list a patch was sent (and
accepted) to add cluster and Data center 3.2 in the engine.
http://gerrit.ovirt.org/#/c/7169/
Please note that vdsm is reporting version 3.2 for a while now (started
reporting 3.2 soon after oVirt 3.1 release was built).
To make it easier for us to keep track of what features are supported in
3.2 cluster and data center I created the following wiki page -
http://wiki.ovirt.org/wiki/Features/compatibilityVersion
Thanks, Livnat
1
0

14 Aug '12
Vojtech has been working on the webadmin since its inception. His recent
work that allowed the user portal and web-admin to be based on the same
infrastructure. He also ported the user portal to work on top of this
shared infrastructure.
I'd like to propose Vojtech as a maintainer of the user portal.
4
5
Hi All,
It seems that for commit subjects, vdsm is using a general concept of-
BZ#??????? some message
I'd like to suggest adopting it to the engine template we use today-
BZ#??????? <core | restapi | tools | history | engine | userportal | webadmin>: short summary under 50 chars
This may help us write some scripts which will work both for vdsm and engine BZs.
Doron.
5
7
------=_Part_8760679_1144386398.1344865016629
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
The following meeting has been modified:
Subject: oVirt UI Plugins: Follow-up Meeting
Organizer: "Vojtech Szocs" <vszocs(a)redhat.com>
Time: Tuesday, August 21, 2012, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague [MODIFIED]
Invitees: engine-devel(a)ovirt.org; George.Costea(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.Hopper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.com; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com
*~*~*~*~*~*~*~*~*~*
Hi guys,
this is a follow-up meeting for discussing progress on oVirt UI Plugins feature.
Here are the details required for joining the session.
Intercall dial-in numbers can be found at:
https://www.intercallonline.com/portlets/scheduling/viewNumbers/listNumbers…
Intercall Conference Code ID: 7128867405 #
Elluminate session:
<to be announced later on>
Regards,
Vojtech
------=_Part_8760679_1144386398.1344865016629
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<html><body id=3D'htmlmode'><h3>The following meeting has been modified:</h=
3>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Subject:</th><td>oVirt UI Plugins: Follow-up Meeting <=
/td></tr>
<tr><th align=3Dleft>Organizer:</th><td>"Vojtech Szocs" <vszocs(a)redhat.c=
om> </td></tr>
</table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Time:</th><td>Tuesday, August 21, 2012, 4:30:00 PM - 5=
:30:00 PM GMT +01:00 Belgrade, Bratislava, Budapest, Ljubljana, Prague [MOD=
IFIED]
</td></tr></table>
<p>
<table border=3D'0'>
<tr><th align=3Dleft>Invitees:</th><td>engine-devel(a)ovirt.org; George.Coste=
a(a)netapp.com; Troy.Mangum(a)netapp.com; Dustin.Schoenbrun(a)netapp.com; Ricky.H=
opper(a)netapp.com; Chris.Frantz(a)hp.com; kroberts(a)redhat.com; ovedo(a)redhat.co=
m; iheim(a)redhat.com; ilvovsky(a)redhat.com; ecohen(a)redhat.com </td></tr>
</table>
<div>*~*~*~*~*~*~*~*~*~*</div><br><div style=3D'font-family: times new roma=
n,new york,times,serif; font-size: 12pt; color: #000000'><div style=3D"font=
-family: times new roman,new york,times,serif; font-size: 12pt; color: #000=
000">Hi guys,<br><br>this is a follow-up meeting for discussing progress on=
<span style=3D"font-weight: bold;">oVirt UI Plugins</span> feature.<br><br=
><hr style=3D"width: 100%; height: 2px;"><br>Here are the details required =
for joining the session.<br><br>Intercall dial-in numbers can be found at:<=
br><span class=3D"Object" id=3D"OBJ_PREFIX_DWT2571_com_zimbra_url"><span cl=
ass=3D"Object" id=3D"OBJ_PREFIX_DWT1569_com_zimbra_url"><a target=3D"_blank=
" href=3D"https://www.intercallonline.com/portlets/scheduling/viewNumbers/l=
istNumbersByCode.do?confCode=3D7128867405">https://www.intercallonline.com/=
portlets/scheduling/viewNumbers/listNumbersByCode.do?confCode=3D7128867405<=
/a></span></span><br><br>Intercall Conference Code ID: <span class=3D"" id=
=3D"OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href=3D"callto:7128867405" targ=
et=3D"_blank">7128867405</a></span>#<br><br>Elluminate session:<br><to b=
e announced later on><br><br><hr style=3D"width: 100%; height: 2px;"><br=
>Regards,<br>Vojtech<br><br></div></div></body></html>
------=_Part_8760679_1144386398.1344865016629
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: 7bit
BEGIN:VCALENDAR
PRODID:Zimbra-Calendar-Provider
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/Belgrade
BEGIN:STANDARD
DTSTART:19710101T030000
TZOFFSETTO:+0100
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19710101T020000
TZOFFSETTO:+0200
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:fbf22c37-f8e4-49ee-9441-e0f258456d4a
SUMMARY:oVirt UI Plugins: Follow-up Meeting
ATTENDEE;CN=engine-devel;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:engine-devel@ovirt.org
ATTENDEE;CN=George Costea;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TR
UE:mailto:george.costea@netapp.com
ATTENDEE;CN=Troy Mangum;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE
:mailto:troy.mangum@netapp.com
ATTENDEE;CN=Dustin Schoenbrun;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSV
P=TRUE:mailto:dustin.schoenbrun@netapp.com
ATTENDEE;CN=Ricky Hopper;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:ricky.hopper@netapp.com
ATTENDEE;CN=Chris Frantz;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:chris.frantz@hp.com
ATTENDEE;CN=Keith Robertson;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
TRUE:mailto:kroberts@redhat.com
ATTENDEE;CN=Oved Ourfalli;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TR
UE:mailto:ovedo@redhat.com
ATTENDEE;CN=Itamar Heim;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE
:mailto:iheim@redhat.com
ATTENDEE;CN=Igor Lvovsky;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRU
E:mailto:ilvovsky@redhat.com
ATTENDEE;CN=Einav Cohen;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE
:mailto:ecohen@redhat.com
ORGANIZER;CN=Vojtech Szocs:mailto:vszocs@redhat.com
DTSTART;TZID="Europe/Belgrade":20120821T163000
DTEND;TZID="Europe/Belgrade":20120821T173000
STATUS:CONFIRMED
CLASS:PUBLIC
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
TRANSP:OPAQUE
LAST-MODIFIED:20120813T133656Z
DTSTAMP:20120813T133656Z
SEQUENCE:1
DESCRIPTION:The following meeting has been modified:\n\nSubject: oVirt UI Pl
ugins: Follow-up Meeting \nOrganizer: "Vojtech Szocs" <vszocs(a)redhat.com> \n
\nTime: Tuesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belg
rade\, Bratislava\, Budapest\, Ljubljana\, Prague [MODIFIED]\n \nInvitees: e
ngine-devel(a)ovirt.org\; George.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\;
Dustin.Schoenbrun(a)netapp.com\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com
\; kroberts(a)redhat.com\; ovedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky@redh
at.com\; ecohen(a)redhat.com \n\n\n*~*~*~*~*~*~*~*~*~*\n\n\nHi guys\, \n\nthis
is a follow-up meeting for discussing progress on oVirt UI Plugins feature.
\n\n\n\nHere are the details required for joining the session. \n\nIntercal
l dial-in numbers can be found at: \nhttps://www.intercallonline.com/portlet
s/scheduling/viewNumbers/listNumbersByCode.do?confCode=7128867405 \n\nInterc
all Conference Code ID: 7128867405 # \n\nElluminate session: \n<to be announ
ced later on> \n\n\n\nRegards\, \nVojtech \n\n
X-ALT-DESC;FMTTYPE=text/html:<html><body id='htmlmode'><h3>The following mee
ting has been modified:</h3>\n\n<p>\n<table border='0'>\n<tr><th align=left>
Subject:</th><td>oVirt UI Plugins: Follow-up Meeting </td></tr>\n<tr><th ali
gn=left>Organizer:</th><td>"Vojtech Szocs" <\;vszocs(a)redhat.com>\; </td>
</tr>\n</table>\n<p>\n<table border='0'>\n<tr><th align=left>Time:</th><td>T
uesday\, August 21\, 2012\, 4:30:00 PM - 5:30:00 PM GMT +01:00 Belgrade\, Br
atislava\, Budapest\, Ljubljana\, Prague [MODIFIED]\n </td></tr></table>\n<p
>\n<table border='0'>\n<tr><th align=left>Invitees:</th><td>engine-devel@ovi
rt.org\; George.Costea(a)netapp.com\; Troy.Mangum(a)netapp.com\; Dustin.Schoenbr
un(a)netapp.com\; Ricky.Hopper(a)netapp.com\; Chris.Frantz(a)hp.com\; kroberts@red
hat.com\; ovedo(a)redhat.com\; iheim(a)redhat.com\; ilvovsky(a)redhat.com\; ecohen
@redhat.com </td></tr>\n</table>\n<div>*~*~*~*~*~*~*~*~*~*</div><br><div sty
le='font-family: times new roman\,new york\,times\,serif\; font-size: 12pt\;
color: #000000'><div style="font-family: times new roman\,new york\,times\,
serif\; font-size: 12pt\; color: #000000">Hi guys\,<br><br>this is a follow-
up meeting for discussing progress on <span style="font-weight: bold\;">oVir
t UI Plugins</span> feature.<br><br><hr style="width: 100%\; height: 2px\;">
<br>Here are the details required for joining the session.<br><br>Intercall
dial-in numbers can be found at:<br><span class="Object" id="OBJ_PREFIX_DWT2
571_com_zimbra_url"><span class="Object" id="OBJ_PREFIX_DWT1569_com_zimbra_u
rl"><a target="_blank" href="https://www.intercallonline.com/portlets/schedu
ling/viewNumbers/listNumbersByCode.do?confCode=7128867405">https://www.inter
callonline.com/portlets/scheduling/viewNumbers/listNumbersByCode.do?confCode
=7128867405</a></span></span><br><br>Intercall Conference Code ID: <span cla
ss="" id="OBJ_PREFIX_DWT2572_com_zimbra_phone"><a href="callto:7128867405" t
arget="_blank">7128867405</a></span>#<br><br>Elluminate session:<br><\;to
be announced later on>\;<br><br><hr style="width: 100%\; height: 2px\;"><b
r>Regards\,<br>Vojtech<br><br></div></div></body></html>
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT5M
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
------=_Part_8760679_1144386398.1344865016629--
1
0
Hi guys,
we had the UI Plugins follow-up meeting planned for tomorrow (Aug 14). Unfortunately, I'm sick this week and need to stay in bed. Let's postpone the meeting for one week (Aug 21), I'll send out an updated invitation.
Vojtech
1
0

Re: [Engine-devel] Proposal to add Vojtech Szocs as maintainer to user portal
by Asaf Shakarchi 13 Aug '12
by Asaf Shakarchi 13 Aug '12
13 Aug '12
+1 !
-------- Original Message --------
> Subject: [Engine-devel] Proposal to add Vojtech Szocs as maintainer
> to
> user portal
> Date: Sun, 12 Aug 2012 01:20:17 +0300
> From: Itamar Heim <iheim(a)redhat.com>
> To: Einav Cohen <ecohen(a)redhat.com>, Daniel Erez <derez(a)redhat.com>,
> Tal Nisan <tnisan(a)redhat.com>, Asaf Shakarchi
> <ashakarc(a)redhat.com>
> CC: engine-devel(a)ovirt.org <engine-devel(a)ovirt.org>
>
> Vojtech has been working on the webadmin since its inception. His
> recent
> work that allowed the user portal and web-admin to be based on the
> same
> infrastructure. He also ported the user portal to work on top of this
> shared infrastructure.
>
> I'd like to propose Vojtech as a maintainer of the user portal.
> _______________________________________________
> Engine-devel mailing list
> Engine-devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/engine-devel
>
>
>
1
0