<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>77835</bug_id>
          
          <creation_ts>2012-02-05 09:04:14 -0800</creation_ts>
          <short_desc>[GObject bindings] Make EventTarget interface introspectable</short_desc>
          <delta_ts>2022-02-28 04:01:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="C Anthony">anthony</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>julo42</cc>
    
    <cc>plaes</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549592</commentid>
    <comment_count>0</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-05 09:04:14 -0800</bug_when>
    <thetext>(unsure how to select proper version ... WebkitGTK 1.6.1)

add/remove_event_listener are missing scope annotations, as reported by g-ir-scanner during build:

DerivedSources/webkit/WebKitDOMEventTarget.h:62: Warning: WebKit: webkit_dom_event_target_add_event_listener: argument handler: Missing (scope)     
annotation for callback without GDestroyNotify (valid: call, async)
DerivedSources/webkit/WebKitDOMEventTarget.h:68: Warning: WebKit: webkit_dom_event_target_remove_event_listener: argument handler: Missing (scope)
annotation for callback without GDestroyNotify (valid: call, async)

... which causes those two methods to be marked `introspection=0`, and thus prevents all DOM event handling by GObject based bindings (Python in this case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549716</commentid>
    <comment_count>1</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-05 21:29:07 -0800</bug_when>
    <thetext>per the error, i added the following to `DerivedSources/webkit/WebKitDOMEventTarget.h` (i realize it&apos;s the wrong spot :) ...

/**
 * webkit_dom_event_target_add_event_listener:
 * @handler: (closure userData) (scope call):
 * @userData: (closure):
 */
WEBKIT_API gboolean webkit_dom_event_target_add_event_listener([...])

/**
 * webkit_dom_event_target_remove_event_listener:
 * @handler: (scope call):
 */
WEBKIT_API gboolean webkit_dom_event_target_remove_event_listener([...])

... + regen the gir/typelib, aaaand it worked!  i don&apos;t know if call or async is correct, both *seem* to work.  the only issue i&apos;m having now is the callback doesn&apos;t receive any data (target/event) at all ... but this gets me moving again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549900</commentid>
    <comment_count>2</comment_count>
      <attachid>125617</attachid>
    <who name="Priit Laes (IRC: plaes)">plaes</who>
    <bug_when>2012-02-06 04:42:50 -0800</bug_when>
    <thetext>Created attachment 125617
webkit-gdom-bindings.patch

Not sure whether it&apos;s everything that&apos;s required, but at least it makes the handlers available for gir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549901</commentid>
    <comment_count>3</comment_count>
      <attachid>125618</attachid>
    <who name="Priit Laes (IRC: plaes)">plaes</who>
    <bug_when>2012-02-06 04:44:35 -0800</bug_when>
    <thetext>Created attachment 125618
webkit-gir.py

Sample script for playing around :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550046</commentid>
    <comment_count>4</comment_count>
      <attachid>125617</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-06 09:06:13 -0800</bug_when>
    <thetext>Comment on attachment 125617
webkit-gdom-bindings.patch

View in context: https://bugs.webkit.org/attachment.cgi?id=125617&amp;action=review

&gt; Source/WebCore/ChangeLog:3
&gt; +        (gtk-gir-dom-events) [gobject-introspection] Missing scope annotations for add/remove_event_listener

I&apos;d drop the prefixes, or just make it [GObject bindings]?

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64
&gt; + * @handler: (scope async):

I&apos;m not an introspection expert, but in my understanding from the docs the scope for this should actually be notified (although that&apos;s of course impossible because there&apos;s no notify as a parameter?)

async - Only valid for the duration of the first callback invokation. Can only be called once.

This sounds like it&apos;ll break if the event is triggered more than one time, doesn&apos;t it? Would be good to have advice from a GI expert on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550055</commentid>
    <comment_count>5</comment_count>
      <attachid>125617</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-06 09:19:40 -0800</bug_when>
    <thetext>Comment on attachment 125617
webkit-gdom-bindings.patch

I discussed this with Tomeu on IRC and he agrees async is surely wrong. He mentioned plans for adding a new scope type for cases like this. libgdata skipped their methods that are similar: http://mail.gnome.org/archives/commits-list/2010-September/msg13384.html I&apos;m not sure what to do, I guess implementing that new scope type is the only way out of this particular cross-road.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550300</commentid>
    <comment_count>6</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-06 14:42:06 -0800</bug_when>
    <thetext>can the GDestroyNotify param be added?  how can we solve this without waiting for a new type to *possibly* be implemented ... the bug discussing new scope types:

https://bugzilla.gnome.org/show_bug.cgi?id=556489

... linked from the documentation:

&quot;A few more scope types are possible, but they are not yet added in lack of proper use cases. See bug 556489 for some discussion about this.&quot;
https://live.gnome.org/GObjectIntrospection/Annotations

... has been in discussion since 2008. what other options are there, eg. can it be reworked in any way, or is there a precedent?  what else uses callbacks?

proper event handlers to the DOM are absolutely critical for my uses, and i expect many others ... without them the usefulness of the GObject bindings is *massively* reduced (for higher langs anyway).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550307</commentid>
    <comment_count>7</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-06 14:46:46 -0800</bug_when>
    <thetext>i did believe async was wrong too, and call, but i wasn&apos;t sure what else to use sans additional types.  i thought maybe there was some other magic going on ... like the add/remove functions were doing some internal tracking ... but i really don&apos;t know how all of this works.

when using async/call, nothing crashes (or even spews an error), but no arguments are being passed to the callback (*args and **kwds are always empty)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551764</commentid>
    <comment_count>8</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-07 21:12:55 -0800</bug_when>
    <thetext>although it would be very annoying to re-add handlers after every invocation (async?), i could deal with that as a workaround until a proper solutions is found.

however, right now i&apos;m having a problem getting any arguments *at all* passed to the handler -- even once -- eg. the target element and the event object, which for obvious reasons ... are 100% critical ...

what else can i try?  i have (closure userData) on handler, and (closure) on userData ... is that correct? and isn&apos;t userData special ({object}.set_data)?

any help appreciated ... i&apos;m working on adapting the GObject bindings to an existing widget toolkit/runtime -- this platform can already use Trident(IE), PythonWebkit, XULRunner(xpcom/hulahop) -- once i get this running, several existing applications will be able to hammer on the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552252</commentid>
    <comment_count>9</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-08 10:23:10 -0800</bug_when>
    <thetext>the guys on #introspection (gimpnet) said the proper way to fix, without API break, is to add a _full variant to each function that accepts a GDestroyNotify param, and use a rename annotation to mask the original.  they point out g_timeout_add/g_timeout_add_full as existing examples:

&lt; ebassi&gt; xtfxme: webkit should have a add_full() that takes a GDestroyNotify
&lt; ebassi&gt; xtfxme: then you can use (scope notify)
&lt; ebassi&gt; xtfxme: add/remove just won&apos;t do: the language binding would not be able to release the memory of the data passed, unless it tracked the data as a refcounted blob, using something like a Set to avoid duplicates; that introduces an interesting class of issues when threads are involved
&lt; ebassi&gt; xtfxme: that&apos;s why G* libraries usually have an add and an add_full variants - see for instance g_timeout_add/g_timeout_add_full
&lt; jdahlin&gt; xtfxme: yes, adding a _full variant + Rename annotation seems like the best thing to do, doesn&apos;t break api and makes language bindings work properly

... what do you guys think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552897</commentid>
    <comment_count>10</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-08 23:39:44 -0800</bug_when>
    <thetext>ebassi (from IRC #introspection) later on added this:

&lt; xtfxme&gt; ebassi, jdahlin: thank you that sounds like a good solution. if i understand correctly the _full variant would be identical, except with a GDestroyNotify param appended, and the rename annotation will effectively make the _full variant mask the original (to python at least)?

[...]

&lt; ebassi&gt; xtfxme: yes
&lt; ebassi&gt; xtfxme: the remove_event_listener() function would then call the DestroyNotify internally, if any was set

[...]

&lt; ebassi&gt; I wonder if the API can be changed, or if it needs a new vfunc in the WebKitDOMEventTargetIface
&lt; ebassi&gt; it&apos;s an interface, so it&apos;s possible to add a new vfunc without breaking the ABI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553972</commentid>
    <comment_count>11</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-10 02:48:15 -0800</bug_when>
    <thetext>well i&apos;ve spent all night for 3+ nights now trying to wrote the solution myself, but i&apos;m afraid i don&apos;t understand enough.

if anyone can guide/assist i will do what i can to accomplish myself, but i&apos;m mostly just beating my face into the wall at this point :-(

... any assistance is much appreciated.  from the input i&apos;ve gotten, from both #webkitgtk+ and #introspection sides, makes me think it&apos;s incredibly simple solution for a mildly compentent C/C++ dev, but frankly, i don&apos;t 100% understand how all these virtual interfaces and whatnot are interacting.

i can see ...

python/pygi -&gt; webkit_dom_event_target_add_event_listener -&gt; WebKitDOMEventTargetIface (* add_event_listener) -&gt; GObjectEventListener::addEventListener

... and i know i have to store the GDestroyNotify pointer on the GObjectEventListener, and then call it from the gobjectDestroyed member.

i read the code and i believe i understand ~95%, but im really struggling with he correct way to write it, as im a total C/C++ n00b ...

ideas?  how can we open webkit to all of us? there are a handful of functions failing, but for the most par the introspection works wonderful ... save these two methods, which are absolutely *imperative* for even light use.  i am more than willing to sink more time, but i need some pointers in the right direction, and i feel i&apos;ve already bugged everyone in #introspection/#webkitgtk+ too much :-)

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554261</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-10 11:51:48 -0800</bug_when>
    <thetext>I&apos;ve put some time into investigating this, here are the results:

1)
It seems to me that GObject introspection is bad with GCallbacks being used. I don&apos;t know for sure if my blame falls on gi or the pygobject, but it seems that because of GCallback being used, in python, this results with the callback being called with no arguments, despite being triggered as a GObjectEventListenerCallback. I&apos;ve looked around Gtk+ how this is avoided there and the solution could be to define something like a WebKitDOMEventListenerFunc type of function (basically exporting the GObjectEventListenerCallback) and use it. Because of this callback functions would not need to be wrapped in G_CALLBACK when adding a listener.

2)
As seen in in comments #9 and #10 a solution might be adding a _full version of the function with a GDestroyNotify argument. I&apos;d recommend avoiding that and putting the GDestroyNotify argument into the existing function and accepting a possible NULL value. This would of course cause API break, but I don&apos;t really see a need for two separate functions.
I&apos;m not yet very fond of the introspection system, but, at least when using gi in python, it seems that the GDestroyNotify argument is completely ignored. This doesn&apos;t really affect the solution apart from an idiomatic point of view, it might not even be a problem, but as of now it bugs me.

3)
After (possibly) adding GDestroyNotify argumnet to add_event_listener, the callback must be properly pointed to its closure via annotations that introspection then picks up. Anthony posted a patch[1] in #webkitgtk+ that does that. I haven&apos;t tried it, I rather reordered arguments so that WebKitDOMEventListenerFunc, gpointer to user data and GDestroyNotify were put together at the end of the arguments list - it works as well, but it breaks conformance with how the addEventListener function is defined in DOM. Of course, the use of annotations (as it was done in the patch) is the right way.

4)
All this still leaves webkit_dom_event_target_remove_event_listener unintrospectable. The problem is that introspection demands the callback to be scoped (as it is expected to be used), but this really isn&apos;t the situation here - event listeners with that callback are being removed, so the introspection shouldn&apos;t really care about the scope. I haven&apos;t yet found a way do convince introspection of this, might not even be supported.


[1] http://paste.pocoo.org/show/548725/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554328</commentid>
    <comment_count>13</comment_count>
      <attachid>126566</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-10 13:03:22 -0800</bug_when>
    <thetext>Created attachment 126566
WIP patch

This is just a patch to show how the problem might be solved.

A GDestroyNotify argument is added to the add_event_listener function. It may be NULL, so this is taken into account when destroying the event listener. Changes are welcomed by introspection, making this function introspectable and properly working in python bindings.

In remove_event_listener, the notified scope is annotated for the handler argument. Still, I&apos;ve done some basic testing but could&apos;n get this function to work properly, so this should be further inspected.

Also changed are calls in tests to avoid compilation breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554604</commentid>
    <comment_count>14</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-11 03:06:00 -0800</bug_when>
    <thetext>all hail Zan! bringer of light to that which was once dark! peace and happiness aplenty! progress and ideas abound!

:) woo hoo!  with your patch i can indeed now receive arguments! i can also confirm the inability to remove handlers (though i still think the correct scope for remove_event_listener is `call`) ... however, you&apos;re patch confirms i did get most of what was happening (i *almost* had it during my testing), and now i have a good base to branch from, thanks!

i intended to detail several ideas/tests, but alas, i&apos;ll return tomorrow ...

but first, one thought. here is a diff of the generated GIRs:

http://dpaste.com/hold/701377/

... as suspected prior, the GIR contains no information about what args the GCallback will receive (generic?), and in the sources GCallback itself is defined as `typedef void (*GCallback) (void)` ...

so, while i&apos;m not sure why introspection doesn&apos;t pick up the cast to `GObjectEventListenerCallback`, maybe we can try:

@handler: (type GObjectEventListenerCallback) [...]

... or, does this make sense:

typedef GCallback GObjectEventListenerCallback ([...]);

.. but maybe that&apos;s redundant/ridiculous.  like i said, i&apos;m a n00b :-) but i think i have a bunch if good ideas to try, and hopefully get something landed ASAP.

i&apos;ll be hitting this hard tomorrow -- will return with results.

PS. to those with black pens and over-sized checks, i happen to be an prominent and well-respected nobody; i recommend Zan for swift promotion and obscene raise.  special mention to Priit and Gustavo for help in IRC ... even if they WONTFIX ;-)

thanks much everyone; tune in tomorrow for the shocking conclusion!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554624</commentid>
    <comment_count>15</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-11 08:07:40 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; but first, one thought. here is a diff of the generated GIRs:
&gt; 
&gt; http://dpaste.com/hold/701377/
&gt; 
&gt; ... as suspected prior, the GIR contains no information about what args the GCallback will receive (generic?), and in the sources GCallback itself is defined as `typedef void (*GCallback) (void)` ...
&gt; 
&gt; so, while i&apos;m not sure why introspection doesn&apos;t pick up the cast to `GObjectEventListenerCallback`, maybe we can try:
&gt; 
&gt; @handler: (type GObjectEventListenerCallback) [...]
&gt; 
&gt; ... or, does this make sense:
&gt; 
&gt; typedef GCallback GObjectEventListenerCallback ([...]);
&gt; 
&gt; .. but maybe that&apos;s redundant/ridiculous.  like i said, i&apos;m a n00b :-) but i think i have a bunch if good ideas to try, and hopefully get something landed ASAP.

With the changes I&apos;m recommending the GCallback-typed function is no longer used.  Rather than that, I&apos;ve typedefed the WebKitDOMEventListenerFunc (the DOMEventListenerFunc callback in the .gir). It is basically the GObjectEventListenerCallback typedef, but moved into the header so it is available in the API. Because of that it can be then used in add_ and remove_event_listener instead of GCallback. This fixes the problem of missing arguments as it seems that pygobject doesn&apos;t care about GCallbacks that are actually different callbacks but typecasted into a GCallback, which results in those callbacks being called with no arguments at all. Again, that&apos;s at least what I think is going on, so I may very well be wrong.

About the remove_event_listener - True, the &apos;call&apos; scope is more appropriate. This still doesn&apos;t fix the issue of the function not working at all.
The conditions under which the listener is removed require that the pointers to the callbacks that are passed through in add_event_listener and remove_event_listener are the same. I&apos;ve put a &apos;print hex(id(self.on_close))&apos; line into the test case, printing the location of the self.on_close function. With some output in add_ and remove_event_listener it becomes evident that handlers passed through those two functions never equal the output of the line added in the test case, thus it is impossible to remove an event listener after it&apos;s added. Again, I&apos;m thinking this might be pygobject&apos;s fault. I&apos;ll look into that when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554776</commentid>
    <comment_count>16</comment_count>
      <attachid>126669</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-11 21:27:50 -0800</bug_when>
    <thetext>Created attachment 126669
annotation to override parsed C type

this patch demonstrates using an annotation to override the parsed C type instead of actually changing it everywhere.  AFAICT, pygobject just needs to know ahead of time what the callback should receive, and by default GCallback receives nothing (and this seems to match the intended way to use/register a GCallback .. by casting at last second).  this same idea is used in the Telepathy lib.

with this patch i am able to properly receive events with arguments, however the remove_ method still of course fails.  in other libraries i see the remove_ variant using a gpointer instead of a GCallback ... maybe we can pass both add_ and remove_ this way?  im checking with the #introspection people to see how we can solve this -- i&apos;m curious if there is some way to weakref the callback?  ideally, if the callback is GC&apos;ed in the runtime the listener should simply be removed (i found some hinting to this mechanism in my travels).  maybe this would work when passing gpointers (like userData)?

however, most libraries seem to be side-stepping the issue altogether, with add_ returning a unique/opaque key (some incremented number, whatever), and remove_ accepting that key -- no reference to the actual callback is needed.  while this isn&apos;t 100% true to DOM API, imo the inability to enumerate the active listeners and manage them whatsoever is a major shortcoming anyway ...

i&apos;ll continue trying to get remove_ to work, but this seems an unobtrusive way to get add_ working.

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554780</commentid>
    <comment_count>17</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-11 21:33:22 -0800</bug_when>
    <thetext>also, the `notify` arg is missing in ^^^^^ patch; main purpose is to demonstrate the use of `(type [...])` annotation.

... and any reason not to use a GClosure there? if we don&apos;t do the _full variant at all, it might be nicer to bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554797</commentid>
    <comment_count>18</comment_count>
      <attachid>126674</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-12 02:17:22 -0800</bug_when>
    <thetext>Created attachment 126674
test case (stable listener id)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554799</commentid>
    <comment_count>19</comment_count>
      <attachid>126674</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-12 02:27:37 -0800</bug_when>
    <thetext>Comment on attachment 126674
test case (stable listener id)

after being completely baffled for about 2-3 hours (and i still don&apos;t really understand why) ... i realized that the callback id() was changing after every use (as you alluded Zan) because i was using an instance method as a callback.

i don&apos;t really know why it&apos;s an issue, but it&apos;s not just add/remove, or even webkit ... connecting to a gsignal does the same thing! i think it was happening because there were still live references to the callback after it ended, and a new one was created each time?

no idea.  this file uses dedicated callback classes which don&apos;t seem to be affected ... and i can store a ref to them just fine, very odd.

i think this will allow us to get a handle to the real callback, but i think it needs to be passed as a raw pointer, otherwise pygobject [i think] creates a new callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558044</commentid>
    <comment_count>20</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-16 03:14:55 -0800</bug_when>
    <thetext>[for implementation RFC, please see end!]

... i have spent everyday on this since reporting -- tracing webkit/gobject, rebuilding the appropriate libs with debug symbols, stepping the marshal call chain in [py]gobject ...

... i&apos;m happy to report that i&apos;ve walked the complete py-&gt;webkit-&gt;py process, can now write C/C++ with [reasonable] success, and even had to deal with some oddities arising from using C within C++ compiler ...

... BUT ENOUGH ABOUT MY QUEST :-), i have successfully called remove_event_handler from python!  YAY!

no suitable patch ATM (tomorrow), but here are the 5-steps to freedom:

1) adapt add/remove_event_listener to use GClosure
2) write factory function: (add to iface?)

GClosure * [...]_create_event_listener (GCallback*, [...]);

3) ^^^ MUST allocate in C (transfer full)
4) pass returned (or any) GClosure to add/remove_event_listener
5) PROFIT!!!

... as the object is pre-allocated by C, then marshaled back to Python with pre-existing pointer, it is properly recognized by removeEventHandler()!

i really like the GClosure approach because it handles several details for you, and allows for identical signatures on add/remove_event_listener.  also, pygobject still allows you to pass a regular callable [wrapped, *unremoveable*], or passthru a native GClosure [removeable].

... see:

https://mail.gnome.org/archives/python-hackers-list/2012-February/msg00028.html

... for more information why (could possible be fixed, but unlikely, and in some cases not possible).  GClosure is the proper type for the job.

------------------------------------------

[THE RFC-esque SECTION]

while the above works, it&apos;s awkward at best -- segfaulty at worst -- to work with the native GClosure from language bindings.  i propose these solutions:

A) [preferred] CREATE WebKitDOMEventListener TYPE

this type will accept a single GClosure/GCallback, and can be subsequently bound to (PLURAL?! ;-) events and/or DOMNodes.  stores an internal ref to bound nodes (via get/set_data?).  has method to [un]bind per DOMEventTarget, or all targets.  could be added to DOMEventTarget Iface for implicit self passing?  GClosure lifetime linked to listener lifetime == auto destroy/cleanup for everyone! hooray!

ADDTL: if we use GClosure, C API users to would not *have* to use WebKitDOMEventListener.  low overhead for all -- bindings could link one high-level callable to several/all WebKit-level handlers (my use case actually *prefers* a SINGLE entry point).

B) [good] STORE gpointer TO LISTENER OR HANDLER ON DOMEventTarget

may require *_full variants, or new generic function that accept gpointers.  store pointer to GObjectListener on DOMEventTarget, eg ...

g_object_set_data(target, {key-from-user-or-???}, &amp;listener)

C) [unknown] USE SOME OTHER WAY BASED ON get/set_data()

Python, and likely(?) other introspect-capable langs, can access pointers stored via g_object_set_data() very easily ... Python can&apos;t actually do anything with it (which is why WebKitDOMEventListener is the best choice IMO), but it could be used to unbind related listeners.

D) [non-optimal] CREATE *_full VARIANTS (RETURN/ACCEPT)ING OPAQUE KEYS

this is really more of a workaround than anything else, and breaks the expected API defined by (W3C?) DOM, alas, it&apos;s better than no event handling at all:

int webkit_dom_event_target_add_event_handler_full ([...]) {
    gboolean ret = webkit_dom_event_target_add_event_handler([...]);
    if (ret) return (int) &amp;handler;
    return ret;
}

return handler address for use as unique key (or ???, if advantageous); pass same key to *_remove_event_handler_full.  rename by annotation to trim _full suffix.

------------------------------------------

with the exception of (D), the others maintain current return types.  i reeeeallly really like A, for maaaany many reasons -- primarily because it&apos;s the most integrated/natural -- the other feel pretty increasingly hacky ... also, (A) would be generally useful for *ALL* users, AAAND all objects are properly linked/chained/destroyed/GC&apos;ed without our help.

... thoughts??? i want to begin writing the solution immediately in the AM, and would love some feedback ASAP!

apologies for the length, i&apos;ve been at this for days on end, and wanted to be thorough ... thanks much! you guys are the bestest :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560308</commentid>
    <comment_count>21</comment_count>
      <attachid>127839</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-20 11:50:27 -0800</bug_when>
    <thetext>Created attachment 127839
[hastily] implements add/remove_event_handler in a binding friendly manner, breaks current API

note: against 1.6.3, i will update my tree if need be ... probably still applies
note: used EventHandler for now -- EventListener triggers generation from IDL file (see below)

this is a working patch, but incomplete (leaks/etc).  however i wanted to post it now to be sure i&apos;m moving in the right direction (i&apos;m slow, this took forever :-).

break current API, but IMO, API is wrong -- handleEvent isnt suppose to take 3 params (DOMNode,DOMEvent/userData), it&apos;s only suppose to take one: DOMEvent. the original DOMNode/sender is already available on the DOMEvent object as the `target` or `src_element` property.

i think i can come up with a way to maintain current API, but also support the old, by using some form of _full, or similar, but internally the GObjectEventListener would need to convert ... is this worth it?

also, as stated above, DOMEventListener triggers the generation of WebKitDOMEventListener.(h|cpp) from the corresponding IDL file ... however, looking it over, it *almost* looks correct.  it looks like it might be possible to tweak CodeGenerator to make WebKitDOMEventListener wrap *WebCore::GObjectEventListener* objects instead (basically adding `GObject` in the right places)

i really want to allow a single Listener object to be assigned to unlimited Target objects -- this is both efficient and useful.  i can then add a method to &quot;exchange&quot; the callback contained by the Listener with a new one ... this lets you add listener objects to targets, and change the callback for all of them in one shot, something like:

WEBKIT_DOM_EVENT_HANDLER(m_handler)-&gt;handle_event(gobjectEvent)

... where handle_event is the actual callback passed during Listener creation, or updated at anytime.

thoughts?  in a bit of a hurry, apologies if somewhat incomplete ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560340</commentid>
    <comment_count>22</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-20 13:48:42 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; i think i can come up with a way to maintain current API, but also support the old, by using some form of _full, or similar, but internally the GObjectEventListener would need to convert ... is this worth it?
&gt; 

I don&apos;t think there&apos;s any sense in keeping the current API, because it&apos;s not idiomatically parallel to the DOM specification.

If it is presumed that instead of a GCallback or WebKitDOMEventHandler a proper binding to the EventListener interface is introduced (as it is planned), API should reflect the DOM specification perfectly, probably like this:

EventTarget:
http://www.w3.org/TR/DOM-Level-3-Events/#interface-EventTarget

addEventListener(DOMString type, EventListener listener, boolean useCapture) -&gt;
webkit_dom_event_target_add_event_listener(WebKitDOMEventTarget* target, gchar* type, WebKitDOMEventListener* listener, gboolean useCapture)

removeEventListener(DOMString type, EventListener listener, boolean useCapture) -&gt;
webkit_dom_event_target_remove_event_listener(WebKitDOMEventTarget* target, gchar* type, WebKitDOMEventListener* listener, gboolean useCapture)

dispatchEvent(Event event) -&gt;
webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event)

EventListener:
http://www.w3.org/TR/DOM-Level-3-Events/#events-EventListener

To create a WebKitDOMEventListener:
webkit_dom_event_listener_create(WebKitDOMEventListenerFunc callback, gpointer data, GDestroyNotify notify)
WebKitDOMEventListenerFunc:
typedef void (*WebKitDOMEventListenerFunc)(GObject*, WebKitDOMEvent*, void*);
(the same as GObjectEventListenerCallback)

handleEvent(Event event) -&gt;
webkit_dom_event_listener_handle_event(WebKitDOMEventListener* self, WebKitDOMEvent* event)

Most of your work in the latest patch already has this covered, it just requires some more polishing.

&gt; also, as stated above, DOMEventListener triggers the generation of WebKitDOMEventListener.(h|cpp) from the corresponding IDL file ... however, looking it over, it *almost* looks correct.  it looks like it might be possible to tweak CodeGenerator to make WebKitDOMEventListener wrap *WebCore::GObjectEventListener* objects instead (basically adding `GObject` in the right places)
&gt; 

WebKitDOMEventListener.* files should probably be manually written to properly execute the handleEvent method and to properly call the notify callback when necessary. To avoid triggering the autogeneration, the build rules for these files should follow the ones for WebKitDOMEventTarget* files in Source/WebCore/bindings/gobject/GNUmakefile.am.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560771</commentid>
    <comment_count>23</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-02-21 02:46:55 -0800</bug_when>
    <thetext>cool, i was having the same thoughts ...

... and i&apos;m getting this down pretty well.  i think the solution i&apos;m working on will be the best long term -- i&apos;ve almost completely eliminated GObjectEventListener (except as the backing WebCore coreObject for EventListener) and there is a good chance of using the IDL/CodeGenerator.

when a GObjectEventListener is destroyed (last remove) it decrefs the corresponding EventListener.  the GNotifyDestroy is not called until the EventListener itself is destroyed (eg, from python/whatever, providing no handles still exist on EventTargets).  if the empty EventListener later tries to rebind to another EventTarget a new GObjectEventListener/coreObject will be dynamically allocated for it.

the GObjectEventListener is essentially only a small proxy now, and it no longer stores the m_target/m_object (EventTargets) because ...

a) the EventTarget is always available on the Event object itself

b) it breaks established semantics from specs and JS (prevents EventListener from binding to multiple EventTargets)

... these changes should allow for unlimited binding and simpler cleanup.

lastly, IMO at least, _create_event_listener() should be on the WebKitDOMDocument, right next to _create_event() ... this can be done in the WebKitDOMCustom files.  two reasons ...

1) non-standard, but looks/feels more natural to me -- people already know _create_event()&apos;s location well

2) in higher languages at least, creating my constructor is currently broken, likely for all objects.  eg, in python, WebKit.DOMEvent() and WebKit.DOMEventListener() result in GObjects with no backing WebCore object, and fails or segfaults when used.  this could possibly be fixed with a late check in _constructor() or maybe _init()

anyways, i&apos;ll have a patch up soon enough; hopefully we can kill this bug quickly and i can get back to the actual project that brought me here :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574705</commentid>
    <comment_count>24</comment_count>
      <attachid>131002</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-09 00:46:16 -0800</bug_when>
    <thetext>Created attachment 131002
Implements EventListeners by leveraging existing CodeGenerator

^^^^^ by &quot;soon&quot; i meant 3 weeks of &quot;carefully crafting with love [and tears]&quot;.

(apologies if somewhat terse ... 2am, want slee... will elaborate as needed later)

this patch implements WebKitEventListener via the existing GObjectCodeGenerator; with the exception of one small tweak to generate the correct signature for `handleEvent` no other changes to the generator were required (others were made for unrelated reasons, however).

patch is complete, save:

) changing the comments as needed
) making the test cases work instead of commenting them out

patch still against 1.6.3 because i&apos;ve been in a tight feedback loop, and my ccache is blisteringly hot. if it won&apos;t apply let me know, i will pull ... (any method to avoid 1GiB+ download??)

side note: there are continuous leaks when using *any* _create() method (any method annotated with `ReturnsNew` in the IDL files).  these functions must be marked `(transfer full)` otherwise they get an extra ref and live forever.  The WebKitEventListener will handle this properly.

DOM spec doesn&apos;t allow listeners to be enumerated -- so for example, in JS, if you do something like this:

window.addEventListener(&apos;click&apos;, function(){console.log(&quot;whoopsie daisy&quot;)}, false)

... you get in a situation where the browser own the only ref, and there is *no way* to stop it.  while the same can happen with GObject, i took a slightly different &quot;lazy unbind&quot; approach -- if the GObject half is destroyed (from python, unref(), etc) *without* properly removing itself from bound EventTargets, the WebCore half will &quot;silently&quot; (CRIT warn) drop incoming events and remove itself from each EventTarget as they come.  best case, they all fire, and the WebCore half is properly destroyed.  worst case, uhm, idk, it gets destroyed maybe when the DOM gets released? beats me :-) better than nothing.

i implemented this several different ways on my quest for supreme understanding. at one point i was using a single array of GValues -- it worked well -- they know how to destroy their boxed objects additionally create clean separation from C++ objects.  i borrowed some 3 line static functions from Telepathy to allocate GValues for the array ... i&apos;m rambling now, but if there were any more than two GObjects, a hashmap (datalist?) keyed on the address might worthwhile, but since its only `m_listener` and `m_handler` ... meh.

^^^^^ i went that path trying to support GCallback and GClosure in a stupidly generic and &quot;optimized&quot; way.  if not obvious from the patch, API supports GClosure only (for good reason IMO).

thanks guys! look forward to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574709</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 00:50:03 -0800</bug_when>
    <thetext>Attachment 131002 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;]&quot; exit_code: 1
Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574946</commentid>
    <comment_count>26</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-09 09:27:37 -0800</bug_when>
    <thetext>^^^^^ what does that mean?  diff died or the style checker died?

now that i think about it, i have a feeling the `\%attributes` hunk wil conflict with trunk (trunk has quotes around the value ... converted to string!)

any chance this could be merged:

https://bugs.webkit.org/show_bug.cgi?id=78877

... i think the generator is dropping attributes.  the patch is valid but i will double check submission stuff and rebase onto master later tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574948</commentid>
    <comment_count>27</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-09 09:29:22 -0800</bug_when>
    <thetext>... also, the GObjectEventListener was nearly 100% rewritten -- the diff is very hard to follow and makes it look super complex.  i will try to reorder some stuff and get a better diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576024</commentid>
    <comment_count>28</comment_count>
      <attachid>131302</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-12 02:35:43 -0700</bug_when>
    <thetext>Created attachment 131302
Event Listeners as first class GObjects.

this patch is an improvement on the last, and updated to r110399 (today-ish IIRC)

things changed considerably since my original working tree -- i had to touch many more files just to *allow* the IDL to be processed ... if i could get some feedback ASAP that would be fantastic as im having difficulty keeping up with the changes.

... who else needs to know or should be involved?  i want to be sure my work, or others, are not in conflict.

testcases will be fixed once patch design is approved.
comments will be set to whatever you guys want.

PLEASE see the `handleEvent` except added to CodeGeneratorGObject.pm ... i dont know how to handle this.  i tried using `Supplement`, ie. modifying IDL etc ... not straight forward.  right now both the external and internal impls share the same $interfaceName identifiers, so there is no clean way (AFAICS) for me to operate as a &quot;EventListener&quot; externally (GObject/API), and a GObjectEventlistener internally (WebCore) ...

all in all, i think it&apos;s pretty solid, and it does everything as advertised.  will post a little demo app soon.

thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576025</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 02:38:46 -0700</bug_when>
    <thetext>Attachment 131302 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;]&quot; exit_code: 1
Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576030</commentid>
    <comment_count>30</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-12 02:46:11 -0700</bug_when>
    <thetext>oh yeah, and i enabled the attribute listeners just because it could be done, but im not actually sure if this is desired, and likely incomplete still.  it does compile/work however (eg, on&lt;HANDLER&gt;)

i can disable this if need be.

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576211</commentid>
    <comment_count>31</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-12 10:05:25 -0700</bug_when>
    <thetext>CCing Xan our in-house GObject DOM bindings guru.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576411</commentid>
    <comment_count>32</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-12 12:55:04 -0700</bug_when>
    <thetext>ill update the patch tonight with test cases completed, and Changelog (using Tools/Scripts/webkit-patch and friends)

in case it wasn&apos;t clear, i enabled the attribute-based handlers; this almost doubles the size of the GIR file (~2600l -&gt; 4300+) and adds *many* new properties to all the objects.

personally, i find the attributes based ones convenient, *and* there is never a risk of accidentally &quot;losing&quot; your handler.  this works (python):

listener = doc.create_event_listener(_onload_cb)
window.set_onload(listener)

... perfectly! albeit this:

listener = doc.create_event_listener(_onload_cb)
window.props.onload = listener

... does not.  IIRC it complained about wrong GType ID, then segfaulted at some point. however, it&apos;s seems likey this is a pygobject problem since it work just fine the other way; will dig more tonight when i create the testcases in C.

the question is ...

*do we want to expose attribute handlers?*

:-D yay! &lt;- awesome! me too!
:-( nay. &lt;- oh ... i, uh, agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577606</commentid>
    <comment_count>33</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-13 11:38:49 -0700</bug_when>
    <thetext>I&apos;ll just post some concerns about the API for starters.

&gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:49
&gt; +WEBKIT_API WebKitDOMEventListener* webkit_dom_document_create_event_listener(WebKitDOMDocument* self, GClosure* handler);

Event listener is in no way tied to a document in the DOM spec, meaning creating it should be done through a standalone function - webkit_dom_event_listener_create.

I&apos;m reiterating ideas previously written in comment #22 - webkit_dom_event_listener_create would take in a WebKitDOMEventListenerFunc, gpointer to a data and a GDestroyNotify callback. As far as I am concerned, this is the most optimal solution. Using a GClosure is just another unnecessary step that should be avoided if possible.

&gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:58
&gt; +WEBKIT_API void webkit_dom_event_listener_set_handler(WebKitDOMEventListener* self, GClosure* handler);

The DOM spec does not allow these sorts of manipulations on an event listener, and I am of a very strong opinion that we shouldn&apos;t neither.

&gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:68
&gt; +WEBKIT_API GClosure* webkit_dom_event_listener_get_handler(WebKitDOMEventListener* self);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577643</commentid>
    <comment_count>34</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-13 12:11:29 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; I&apos;ll just post some concerns about the API for starters.
&gt; 
&gt; &gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:49
&gt; &gt; +WEBKIT_API WebKitDOMEventListener* webkit_dom_document_create_event_listener(WebKitDOMDocument* self, GClosure* handler);
&gt; 
&gt; Event listener is in no way tied to a document in the DOM spec, meaning creating it should be done through a standalone function - webkit_dom_event_listener_create.

ok ok ok, i did that mainly because people would already be aware of _document_create_event ... so adding _listener is a natural extension of that.

however, i&apos;m mostly impartial, and will change it as suggested unless otherwise stated.

&gt; I&apos;m reiterating ideas previously written in comment #22 - webkit_dom_event_listener_create would take in a WebKitDOMEventListenerFunc, gpointer to a data and a GDestroyNotify callback. As far as I am concerned, this is the most optimal solution. Using a GClosure is just another unnecessary step that should be avoided if possible.

isn&apos;t GClosure specifically designed for exactly this? it simplifies things for bindings because an explicit type is not needed and the arguments are variable; additionally, the same [single] object can be used for C/Python/whatever, and maintains it&apos;s own ref/destroy.  i want to say it&apos;s faster for bindings too, but i could be making that up :-X

i discussed on IRC previously, and tomeu agreed with the GClosure approach, and added it would not affect performance.  one should note that the WebKitDOMEventListener will sink() the closure and assume ownership -- no need for the caller to manage it.

however, i admittedly moved to GClosure while implementing an alternative way, and never changed it back -- it&apos;s no longer a hard requirement -- if consensus is for callback/data/destroy signature i&apos;ll change it to that (i will anyway for time being)

&gt; &gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:58
&gt; &gt; +WEBKIT_API void webkit_dom_event_listener_set_handler(WebKitDOMEventListener* self, GClosure* handler);
&gt; 
&gt; The DOM spec does not allow these sorts of manipulations on an event listener, and I am of a very strong opinion that we shouldn&apos;t neither.

i&apos;m very much the opposite -- the DOM spec doesn&apos;t specify anything really, and EventListener is an technically only an interface ... i mean not even _create() would be permissible then, except by necessity.  by enabling the *real* handler to be swapped dynamically, at no cost or code complexity, add a LOT of power and flexibility -- isn&apos;t this useful?  imagine 200 Targets that all shared a Listener, but with varying event types ... not simple/fast to update, and expensive to update from a binding (marshall back/forth hundreds of times).  by exposing a this we can change the backing handler in a single operation from any language ...

you can think of it as a detail being exposed to the DOM implementation, NOT the DOM spec (spec doesn&apos;t undestand GCallback/etc, eg. _create(), setHandler()), so it doesn&apos;t violate anything IMO.

how about a compromise: you get callback/data/destroy sig, and i get setHandler? :-D fair?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577720</commentid>
    <comment_count>35</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-13 13:13:41 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; &gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:58
&gt; &gt; &gt; +WEBKIT_API void webkit_dom_event_listener_set_handler(WebKitDOMEventListener* self, GClosure* handler);
&gt; &gt; 
&gt; &gt; The DOM spec does not allow these sorts of manipulations on an event listener, and I am of a very strong opinion that we shouldn&apos;t neither.
&gt; 
&gt; i&apos;m very much the opposite -- the DOM spec doesn&apos;t specify anything really, and EventListener is an technically only an interface ... i mean not even _create() would be permissible then, except by necessity.  by enabling the *real* handler to be swapped dynamically, at no cost or code complexity, add a LOT of power and flexibility -- isn&apos;t this useful?  imagine 200 Targets that all shared a Listener, but with varying event types ... not simple/fast to update, and expensive to update from a binding (marshall back/forth hundreds of times).  by exposing a this we can change the backing handler in a single operation from any language ...
&gt; 
&gt; you can think of it as a detail being exposed to the DOM implementation, NOT the DOM spec (spec doesn&apos;t undestand GCallback/etc, eg. _create(), setHandler()), so it doesn&apos;t violate anything IMO.
&gt; 

DOM spec clearly specifies the EventListener interface, and that should be implemented. There are extensions to be made, such as the _create() method, but, as said, this is out of necessity. Other additions simply should not be made. DOM implementation should closely follow the spec and not deviate from it.

Given the test case of 200 targets, find the solution within the constraints of the DOM spec rather than exploiting a DOM implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580246</commentid>
    <comment_count>36</comment_count>
      <attachid>132222</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-16 00:55:34 -0700</bug_when>
    <thetext>Created attachment 132222
Event Listeners as first class GObjects; func/data/destroy triple</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580252</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 00:59:40 -0700</bug_when>
    <thetext>Attachment 132222 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:79:  webkit_dom_event_target_add_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:92:  webkit_dom_event_target_remove_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testdomdomwindow.c&quot;
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:48:  Extra space between gboolean and useCapture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:52:  Extra space between gboolean and useCapture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:62:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:65:  Extra space between gboolean and useCapture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:67:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:69:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:70:  Extra space between gboolean and useCapture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/GObjectEventListener.h:51:  The parameter name &quot;destroyNotify&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/GObjectEventListener.h:55:  The parameter name &quot;destroyNotify&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/GObjectEventListener.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/gobject/WebKitDOMCustom.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/gobject/WebKitDOMCustom.h:50:  The parameter name &quot;destroy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 15 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580255</commentid>
    <comment_count>38</comment_count>
      <attachid>132222</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-16 01:00:50 -0700</bug_when>
    <thetext>Comment on attachment 132222
Event Listeners as first class GObjects; func/data/destroy triple

Attachment 132222 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11963061</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580259</commentid>
    <comment_count>39</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-16 01:08:16 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 132222 [details])
&gt; Attachment 132222 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11963061

it&apos;s not restarting properly -- it never reran the necessary GEN step to build that file -- this is a bug w/bot not patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580268</commentid>
    <comment_count>40</comment_count>
      <attachid>132222</attachid>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-16 01:16:44 -0700</bug_when>
    <thetext>Comment on attachment 132222
Event Listeners as first class GObjects; func/data/destroy triple

With great pain this patch undoes most of what the previous iteration accomplished; GClosures are replaced by GCallback/gpointer/GDestroyNotify triples.  After experienceing great pain trying to use this from Python ... please, GClosures!

I understand there are most likely issues, perhaps even basic ones, C/C++ novice of 6wks ... be nice pls :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580301</commentid>
    <comment_count>41</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-16 02:29:40 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; I&apos;ll just post some concerns about the API for starters.

is this an indication that my code is complete {expletive deleted}? :-o

if you Zan, and others generously provide additional feedback on design/C/C++ to help me push this thru i would be most grateful ... after 6 wks of nothing else, i&apos;m getting bored/burned, but *need* events for my projects! bah! DOM w/out events is nil ... i will do the work ... but i&apos;ve implemented it a couple ways here -- and 3x more at home -- need solid path to success, and need to know why/what/must be updated!

i just need to do whatever it takes to wrap this up.  i&apos;m a fairly competent full-time developer w/several langs, but some corners of the C/C++ realm are new and remain fuzzy ... just lmk whats wrong, and whats *really* wrong :-)

thanks to all for time/patience as this moves forward. this is key to extending the most powerful GUI engine in existence to a broad audience

/end rant-vertisement

&gt; &gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:49
&gt; &gt; +WEBKIT_API WebKitDOMEventListener* webkit_dom_document_create_event_listener(WebKitDOMDocument* self, GClosure* handler);
&gt; 
&gt; Event listener is in no way tied to a document in the DOM spec, meaning creating it should be done through a standalone function - webkit_dom_event_listener_create.

can an EventListener from one doc listen for events in another?  in JS, mainly for DOM but even simple stuff like string comparison, things tend to get very wonky when objects mix cross-doc (doc1.String !== doc2.String, etc).  maybe it doesn&apos;t matter for these objects, idk.

... although in IRC you mentioned `ScriptExecutionContext` was a Document or Worker -- this suggests to me that `handleEvent` is in fact tied to a doc/context (otherwise how does stuff like &quot;current propagating event&quot; make sense?) AFAIK you never &quot;naturally&quot; recieve events across [i]frame, you have to first set the context/root to that window (JS again, my experience)

&gt; I&apos;m reiterating ideas previously written in comment #22 - webkit_dom_event_listener_create would take in a WebKitDOMEventListenerFunc, gpointer to a data and a GDestroyNotify callback. As far as I am concerned, this is the most optimal solution. Using a GClosure is just another unnecessary step that should be avoided if possible.

after doing a ton of work with this i cannot stress enough that a GClosure is the optimal and ideal solution.  i adds *minimal* work for a C developer, if really any at all, and in turn works splendidly with existing all binding tools.  in pygobject, with triples, i could not control the refcount -- it increases monotonically every time the listener fires -- no way to destroy ...

... it could very well be a bug with pygobject, or annotations, but again, these problems arise from trying to marshall + coordinate + manage 3 *independent* objects that *do not have any real relation whatsoever* ... GClosures purpose is to avoid these very issues! it does so with much less effort and code than i&apos;ve written in supporting triples.

if GClosure *really* can&apos;t be accepted, then IMO it&apos;s crucial the API be split to accommodate (create/create_with_closure) because it&apos;s flat-out stable and hassle free for higher langs.  both interfaces must accept only a single parameter on creation, GCallback or GClosure, respectively, and accept a single Event on invocation (+context??..).  the `userdata` param currently in use breaks the DOM spec, and should be omitted; those who need it&apos;s facilities can simply use a GClosure.

... buuut why not just sidestep the redundancy and use GClosures exclusively?  We can whittle the original patch as needed, but this detail should persist.

&gt; &gt; b/Source/WebCore/bindings/gobject/WebKitDOMCustom.h:58
&gt; &gt; +WEBKIT_API void webkit_dom_event_listener_set_handler(WebKitDOMEventListener* self, GClosure* handler);
&gt; 
&gt; The DOM spec does not allow these sorts of manipulations on an event listener, and I am of a very strong opinion that we shouldn&apos;t neither.
&gt; 
&gt; [...]
&gt; 
&gt; Ditto.

as we discussed in IRC, i still maintain this would be incredibly useful for not just Python/higher langs, but *especially* C.  hotswappping N handlers with a single pointer swap is atomic and cheap ... however, at this point i&apos;m mostly indifferent, and i do/respect understand your reasoning.

anyone else?

-------------------------------------------

the main piece i&apos;m adament about is GClosures being used exclusively or at least prominently ... they *really do remove complexity* at every level.

also, contrary to v1, i disabled the attribute listeners because i _really_ need to get a working version of this stabilized/landed; attrib can come later if wanted...

^^^^^ and i misquoted in previous comments ... the GIR file BLIMPS to over 10x, ~40,000K lines, with attrib EventListeners enabled!  i no longer think it&apos;s worthwhile, as they are from HTML4, and events are already 100% exposed.

apologies for the length, or any perceived terseness, neither were intentional -- just a bit weary and in dire need of a couple guiding lights! *hint* *hint* ;-) ;-)

so, what can i do to land this beast?  what needs explain/explore/verify?  i implemented a couple other ways as well, one making great use of GValues to support Gclosure and GCallback on same interface, and the other using a manual ::kit() impl in WebKitDOMBindings to do some magic ... but IMO, what you see here are the cleanest, most succinct solutions, after weeks of experimentation.

please comment! thanks so much for your time!. and thanks for all the fish too -- delicious!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581710</commentid>
    <comment_count>42</comment_count>
      <attachid>132222</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-19 02:48:56 -0700</bug_when>
    <thetext>Comment on attachment 132222
Event Listeners as first class GObjects; func/data/destroy triple

r- now, because this patch made Qt EWS bots cry. After this patch they can&apos;t build patches anymore. :(((</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582014</commentid>
    <comment_count>43</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-19 12:01:58 -0700</bug_when>
    <thetext>:(In reply to comment #42)
&gt; (From update of attachment 132222 [details])
&gt; r- now, because this patch made Qt EWS bots cry. After this patch they can&apos;t build patches anymore. :(((

:-/ whoopsie.

the bots seem to be skipping the reGENeration stage ... aggressive caching i presume ... this is needed to create the WebKitDOMEventListener.(cpp|h) files, and update the top-level headers with that include.  most of this patch is autogenerated.

what can i do from here?  i just guidance/recommendation on how to proceed -- both approaches appear to work correctly.

comments?  would love to land this week if at all possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582690</commentid>
    <comment_count>44</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-19 20:36:53 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; :(In reply to comment #42)
&gt; &gt; (From update of attachment 132222 [details] [details])
&gt; &gt; r- now, because this patch made Qt EWS bots cry. After this patch they can&apos;t build patches anymore. :(((
&gt; 
&gt; :-/ whoopsie.

after chatting with mrobinson in #webkitgtk+ i realize that i edited the QT build:

Source/WebCore/DerivedSources.pri

... :-/ i thought i needed to enable the eventlistener for everyone, which in retrospect is obvious that i do not ... GObject is GTK+ only.  derp.  sorry.
 
&gt; what can i do from here?  i just guidance/recommendation on how to proceed -- both approaches appear to work correctly.

... i also just now realized all set* or sink* methods on GObjectEventListener are totally unnecessary; GObjectEventListener can simply call:

WebKit::kit(this)

... to get a ref to it&apos;s companion WebKitDOMEventListener!!! of course! it&apos;s so simple! i&apos;m going to spin one last patch that does this, and creates *_with_closure variants, possibly even:

add_event_listener_with_closure
[...]

... if needed.  i think i can maintain API (event though it&apos;s hopelessly broken), and ABI if possible (i dont know what all breaks this...).

could someone pretty please confirm this as a solution?  i really really (really) want to &quot;X&quot; out this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584524</commentid>
    <comment_count>45</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-21 12:55:02 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=132222&amp;action=review

Overall, this looks pretty solid, thanks!

I&apos;d recommend to wait for Xan&apos;s input on these changes, but IMO this looks in a pretty good state. There are plenty of style complaints, most of them are in my opinion invalid. This should be looked at, but I recommend to leave this for the very end. Also, the documentation would require some polishing, but again, I&apos;d say it is best to leave that for after both API and implementation are solid.

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:38
&gt; +GObjectEventListener::GObjectEventListener(GCallback handler, void* userData, GDestroyNotify destroyNotify)

GCallback -&gt; WebKitDOMEventListenerCallback?

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:69
&gt; +        event-&gt;currentTarget()-&gt;removeEventListener(event-&gt;type(), this, !(event-&gt;bubbles()));

You could return here if m_object doesn&apos;t exist.

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:75
&gt; +    reinterpret_cast&lt;GObjectEventListenerCallback&gt;(m_handler)(G_OBJECT(eventTarget), gobjectEvent, m_userData);

If you use WebKitDOMEventListenerCallback as the type for m_handler (that is, remove the GObjectEventListenerCallback type and use WebKitDOMEventListenerCallback instead) you can avoid typecasting here.

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:87
&gt; +GObject* GObjectEventListener::gobject(GCallback handler, gpointer userData, GDestroyNotify destroyNotify)

GCallback -&gt; WebKitDOMEventListenerCallback?
Also, the name could be a bit more descriptive, at least ::create. Or event better, ::createGObject.

&gt; Source/WebCore/bindings/gobject/GObjectEventListener.cpp:91
&gt; +    coreListener-&gt;sinkListener(listener);

I don&apos;t see sinkListener function being used anywhere else but here, so perhaps you could remove the function and do both storing the pointer to newly-created GObject directly in m_gobject and calling weak_ref inside here.

&gt; Source/WebCore/bindings/gobject/WebKitDOMCustom.cpp:69
&gt; +webkit_dom_create_event_listener(GCallback handler, gpointer data, GDestroyNotify destroy)

GCallback -&gt; WebKitDOMEventListenerCallback?

&gt;&gt; Source/WebCore/bindings/gobject/WebKitDOMCustom.h:50
&gt;&gt; +WEBKIT_API WebKitDOMEventListener* webkit_dom_create_event_listener(GCallback handler, gpointer data, GDestroyNotify destroy);
&gt; 
&gt; The parameter name &quot;destroy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

GCallback -&gt; WebKitDOMEventListenerCallback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586438</commentid>
    <comment_count>46</comment_count>
      <attachid>132222</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-23 09:47:36 -0700</bug_when>
    <thetext>Comment on attachment 132222
Event Listeners as first class GObjects; func/data/destroy triple

I still need to go over this in detail (hopefully next week), but this patch breaks the API, so surely it cannot be right? It&apos;s pretty much auto r- because of that, we&apos;ll need to figure out something else...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586644</commentid>
    <comment_count>47</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 12:59:38 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 132222 [details])
&gt; I still need to go over this in detail (hopefully next week), but this patch breaks the API, so surely it cannot be right? It&apos;s pretty much auto r- because of that, we&apos;ll need to figure out something else...

Is that a bad thing? Is there interest to get this into 1.8?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586703</commentid>
    <comment_count>48</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-03-23 13:57:43 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 132222 [details])
&gt; I still need to go over this in detail (hopefully next week), but this patch breaks the API, so surely it cannot be right? It&apos;s pretty much auto r- because of that, we&apos;ll need to figure out something else...

the add/remove_event_listeners currently have a `userData` param in what seems to be an arbitrary location ... i don&apos;t know how to remedy that properly?  while i have a few changes to make for other reasons, this patch brings the signatures permanently inline with the DOM spec, and allows for many other uses (eg, DOM spec allows a single EventListener to bind to unlimited EventTargets, current API breaks this, patch fixes by providing a reusable object).

i think the API is already pretty busted, and as-is, simply will never work for anyone but C consumers (ie. introspection-driven bindings like Python will never function, which is my motivation for this to begin with)

the API changes slightly, but there is very little required to update, for the most part its just creating a listener and passing it along instead of passing a raw pointer to a handler.  the signatures are only being corrected.

how does API ever change?  what was needed last year when events moved from signals to functions?  isn&apos;t the gobject bindings still green enough to allow for further development?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587062</commentid>
    <comment_count>49</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-24 02:28:34 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Is that a bad thing? Is there interest to get this into 1.8?

All our public API is stable once it&apos;s been released in a stable release, so yes, breaking it is a bad thing. It&apos;s probably too late for 1.8 now, but perhaps this could go in 1.8.1 since it&apos;s pretty important for bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681571</commentid>
    <comment_count>50</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2012-07-29 10:45:39 -0700</bug_when>
    <thetext>is there any timeline for this bug?

i painstakingly created some solutions, but i&apos;m not very adept in C.  can someone please please carry this forward? event handling is 100% busted in introspected bindings, notably python, making the bindings as a whole next to useless (what good is a browser without events?)

i am in dire need of this again, after 4 months of patching ... i guess i will try again o get it merged, but i expect what takes me 2 wks probably takes a competent C developer less than a day.

status? please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833841</commentid>
    <comment_count>51</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2013-02-15 03:16:51 -0800</bug_when>
    <thetext>...so should i give up trying to fix this? everyone i talk to essentially gives me a &quot;yes, the API is broken&quot; and &quot;but the API cannot be changed&quot;... which amounts to ROCK \o/ HARDPLACE.

this is a TRIVIAL problem that is RENDERING THIS FABULOUS INTEGRATION NEXT TO USELESS for gobject-introspection based bindings such as PYTHON.

gobject-introspection is the BEST AND ONLY PATH python has for interfacing with Webkit.

what, what, what(?!) do i need to do/say/ask/write/patch to remedy this? i&apos;ve been trying for over a year now to reach a solution... if i could simply be given INDICATION that it can somehow be fixed, i will make it HAPPEN!

thanks.

ALSO, can someone please make this higher priority that UNCONFIRMED? it is very much an issue for ANY HIGH LEVEL CONSUMER OF THIS BINDING.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941221</commentid>
    <comment_count>52</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2013-10-18 09:06:06 -0700</bug_when>
    <thetext>this problem is supposedly &quot;fixed&quot; by:

https://bugs.webkit.org/show_bug.cgi?id=114980#c9

...but in reality, it&apos;s just masked, and gives the illusion of success (in fact, i was totally elated to discover it was &quot;fixed&quot; only to be thoroughly disappointed by smoke and mirrors).

as i said in the other bug:

&gt; i&apos;m also sorry if i appear crass or whatever, but i honestly don&apos;t know what
&gt; more i can do short of physically walking to Apple and picketing outside.  if
&gt; it seems like i&apos;m YELLING, it&apos;s because I AM SHOUTING OBSCENITIES AS I TYPE
&gt; THIS.

&gt; c&apos;mon guys, i did all the work 3 times over and implemented in multiple ways,
&gt; just pick one. any one. i fully intend on setting a reminder to ping both of
&gt; these bugs until i can get a concrete path forward...

&gt; i don&apos;t need an immediate resolution, but you guys could throw me a bone and
&gt; give me some glimmer of hope by simply ACKNOWLEDGING THE PROBLEM *OFFICIALLY*
&gt; BY ACCEPTING THIS BUG:

&gt; https://bugs.webkit.org/show_bug.cgi?id=77835#c51

...i know it&apos;s probably super-annoying, and i really would rather not, but i think i deserve some TRULY CONSTRUCTIVE INPUT OR RESOLUTION... i pretty much spoon-fed multiple solution onto deaf ears... with the exception of Zan Dobersek, and to some small degree others, i have gotten nothing but &quot;oh gee, that&apos;s too bad, but we DGAF, sorry&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941673</commentid>
    <comment_count>53</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-20 03:06:30 -0700</bug_when>
    <thetext>I think we can try to fix this without breaking the api/abi until we can change the api.

 - Add new methods, for example register/unregister_event_listener that receives the proper WebKitDOMEventListenerCallback + GDestroyNotify.
 - Modify the virtual functions of WebKitDOMEventTarget interface, since nobody outside WebKitDOM API should use the vfuncs directly even if they are public. We don&apos;t have padding to add new vfuncs.
 - Deprecate all the dispatch_event methods that are public, everybody should use the interface API, unless there&apos;s a good reason for those to the be public.

I don&apos;t know if there&apos;s a way for the bindings to skip the add/remove ones and expose the register/unregisiter as add/remove to follow the DOM spec. Once we can change the api/abi we can just rename the register/unregister methods as add/remove to follow the DOM spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941680</commentid>
    <comment_count>54</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-20 04:06:35 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; I don&apos;t know if there&apos;s a way for the bindings to skip the add/remove ones and expose the register/unregisiter as add/remove to follow the DOM spec. 

There&apos;s Rename to: tag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941801</commentid>
    <comment_count>55</comment_count>
      <attachid>214724</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-21 03:58:14 -0700</bug_when>
    <thetext>Created attachment 214724
Another approach using a closure

This patch adds two new methods add_event_listener_with_closure and remove_event_listener_with_closure that receive a GClosure instead of a GObject. They are only to be used by bindings, that expose them as add_event_listener and remove_event_listener. This keeps the API compatible, and consistent with the DOM spec. ABI is ot broken either, because nobody could be using the virtual methods outside of WebKit, since all implementations use private API (GObjectEventListener). With this patch and changing the test case attached to this bug to use the new API:

link.add_event_listener(&apos;click&apos;, self.on_click, True)

Running the test case and clicking on the button gives:

on_click (&lt;DOMHTMLButtonElement object at 0x12d3870 (WebKitDOMHTMLButtonElement at 0x13ac740)&gt;, &lt;DOMMouseEvent object at 0x15be280 (WebKitDOMMouseEvent at 0x1637930)&gt;) {}

So, it seems to be working fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941803</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-21 04:00:50 -0700</bug_when>
    <thetext>Attachment 214724 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.cpp&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.h&apos;, u&apos;Source/WTF/wtf/gobject/GTypedefs.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.h&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm&apos;]&quot; exit_code: 1
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:89:  webkit_dom_event_target_add_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:102:  webkit_dom_event_target_remove_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:49:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:103:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:104:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:102:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:105:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:123:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:123:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:121:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:124:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 17 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941804</commentid>
    <comment_count>57</comment_count>
      <attachid>214725</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-21 04:04:39 -0700</bug_when>
    <thetext>Created attachment 214725
Updated patch including new binding test results

Forgot to update the bindings test results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941805</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-21 04:05:34 -0700</bug_when>
    <thetext>Attachment 214725 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.cpp&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.h&apos;, u&apos;Source/WTF/wtf/gobject/GTypedefs.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.h&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp&apos;]&quot; exit_code: 1
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:89:  webkit_dom_event_target_add_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:102:  webkit_dom_event_target_remove_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:49:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:103:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:104:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:102:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:105:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:123:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:123:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:121:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:124:  Extra space between gboolean and bubble  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 17 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941851</commentid>
    <comment_count>59</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2013-10-21 08:09:59 -0700</bug_when>
    <thetext>hi Carlos,

thank you so much for taking some time to look into this.

i know the bindings generated by introspection are capable of exposing the *_with_closure variants as the real thing to the bound language... i was told previously that GTK does exactly this, with *_full variants (IIRC, WebKit/someone must then ship a small python file in the appropriate location indicating/handling this)

so does the patch as-is maintain A[PB]I? or is this patch the &quot;final&quot; or &quot;eventual&quot; version?  if there is any testing/verification i can do to help out, i am more than willing to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941857</commentid>
    <comment_count>60</comment_count>
    <who name="C Anthony">anthony</who>
    <bug_when>2013-10-21 08:34:17 -0700</bug_when>
    <thetext>oops, i missed that you found the &quot;Rename to:&quot; annotation, awesome!

if the goal is still to align with DOM spec, we might want to consider fixing the signature of addEventListener, which is (per the spec):

addEventListener(type, listener[, useCapture])

...vs what we have:

addEventListener(event_name, handler[, bubble])

...which i believe is actually backward; the third arg in JS is normally `false`, indicating WE WANT TO REGISTER WITH THE BUBBLE PHASE.

i&apos;d have to double check, but i think i had to manually invert this flag when integrating with an existing framework (which expects the former, per the spec). alas, i want *something* to be merged more than anything else, so feel free to completely ignore this in the name of progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942172</commentid>
    <comment_count>61</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-21 23:57:08 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; hi Carlos,
&gt; 
&gt; thank you so much for taking some time to look into this.
&gt; 
&gt; i know the bindings generated by introspection are capable of exposing the *_with_closure variants as the real thing to the bound language... i was told previously that GTK does exactly this, with *_full variants (IIRC, WebKit/someone must then ship a small python file in the appropriate location indicating/handling this)
&gt; 
&gt; so does the patch as-is maintain A[PB]I? or is this patch the &quot;final&quot; or &quot;eventual&quot; version?  if there is any testing/verification i can do to help out, i am more than willing to do so.

Yes, I think it should be API/ABI compatible, I have changed the vmethods that should only be used internally, but the size of the structure is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942173</commentid>
    <comment_count>62</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-21 23:59:22 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; oops, i missed that you found the &quot;Rename to:&quot; annotation, awesome!
&gt; 
&gt; if the goal is still to align with DOM spec, we might want to consider fixing the signature of addEventListener, which is (per the spec):
&gt; 
&gt; addEventListener(type, listener[, useCapture])
&gt; 
&gt; ...vs what we have:
&gt; 
&gt; addEventListener(event_name, handler[, bubble])
&gt; 
&gt; ...which i believe is actually backward; the third arg in JS is normally `false`, indicating WE WANT TO REGISTER WITH THE BUBBLE PHASE.

This is one of the problems of boolean arguments. Changing the logic wouldn&apos;t break the API either, but it could break existing apps using the bubble argument, so we can&apos;t change this until we break the API.

&gt; i&apos;d have to double check, but i think i had to manually invert this flag when integrating with an existing framework (which expects the former, per the spec). alas, i want *something* to be merged more than anything else, so feel free to completely ignore this in the name of progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942185</commentid>
    <comment_count>63</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-22 01:19:10 -0700</bug_when>
    <thetext>There&apos;s another thing I don&apos;t understand about the EventTarget interface exposed in the GObject bindings. The interface is defined as:

void addEventListener(DOMString type, 
                          EventListener listener, 
                          optional boolean useCapture);
void removeEventListener(DOMString type, 
                             EventListener listener, 
                             optional boolean useCapture);
[RaisesException] boolean dispatchEvent(Event event);

And we do exactly the opposite wrt to the return values, we return a boolean from add/remove_event_listener and void in dispatch_event. But then, we expose dispatch_event as public API in objects implementing the EventTarget interface returning a boolean. I thought about deprecating all the public dispatch_event in favor of using the interface, but those public methods are the only way to get the return value of dispatchEvent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942628</commentid>
    <comment_count>64</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-23 02:33:19 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (In reply to comment #60)
&gt; &gt; oops, i missed that you found the &quot;Rename to:&quot; annotation, awesome!
&gt; &gt; 
&gt; &gt; if the goal is still to align with DOM spec, we might want to consider fixing the signature of addEventListener, which is (per the spec):
&gt; &gt; 
&gt; &gt; addEventListener(type, listener[, useCapture])
&gt; &gt; 
&gt; &gt; ...vs what we have:
&gt; &gt; 
&gt; &gt; addEventListener(event_name, handler[, bubble])
&gt; &gt; 
&gt; &gt; ...which i believe is actually backward; the third arg in JS is normally `false`, indicating WE WANT TO REGISTER WITH THE BUBBLE PHASE.
&gt; 
&gt; This is one of the problems of boolean arguments. Changing the logic wouldn&apos;t break the API either, but it could break existing apps using the bubble argument, so we can&apos;t change this until we break the API.
&gt; 
&gt; &gt; i&apos;d have to double check, but i think i had to manually invert this flag when integrating with an existing framework (which expects the former, per the spec). alas, i want *something* to be merged more than anything else, so feel free to completely ignore this in the name of progress!

We are actually using capture, but with the wrong name in the API to make it even more confusing. The boolean argument we are receiving from the API is what we are passing to WebCore, see:

http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp#L68
http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/gobject/GObjectEventListener.h#L38

So, we can simply rename the argument as use_capture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942635</commentid>
    <comment_count>65</comment_count>
      <attachid>214942</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-23 04:11:29 -0700</bug_when>
    <thetext>Created attachment 214942
Updated patch

Patch updated to change the dispatch_event public method to return a gboolean and rename bubble parameter as use_capture in all public methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942636</commentid>
    <comment_count>66</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-23 04:12:37 -0700</bug_when>
    <thetext>Attachment 214942 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.cpp&apos;, u&apos;Source/WTF/wtf/gobject/GRefPtr.h&apos;, u&apos;Source/WTF/wtf/gobject/GTypedefs.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/GObjectEventListener.h&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp&apos;]&quot; exit_code: 1
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:49:  webkit_dom_event_target_dispatch_event is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:58:  webkit_dom_event_target_add_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:68:  webkit_dom_event_target_remove_event_listener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:77:  webkit_dom_event_target_add_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:86:  webkit_dom_event_target_remove_event_listener_with_closure is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:46:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:49:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:50:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:50:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:81:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:81:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:96:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:96:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:113:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:114:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:112:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:115:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:115:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:133:  Extra space between GClosure and *handler  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:131:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:134:  Extra space between gboolean and use_capture  [whitespace/declaration] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:134:  use_capture is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 31 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942895</commentid>
    <comment_count>67</comment_count>
      <attachid>214942</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-10-23 16:32:39 -0700</bug_when>
    <thetext>Comment on attachment 214942
Updated patch

LGTM!

View in context: https://bugs.webkit.org/attachment.cgi?id=214942&amp;action=review

&gt;&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:49
&gt;&gt; -void webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event, GError** error)
&gt;&gt; +gboolean webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event, GError** error)
&gt; 
&gt; webkit_dom_event_target_dispatch_event is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]

Can you add exceptions for these checks along with this patch? It should be pretty straight-forward, just add it alongside WebKitDOMCustom in Tools/Scripts/webkitpy/style/checker.py, I believe.

&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:65
&gt; +    GRefPtr&lt;GClosure&gt; closure = adoptGRef(g_cclosure_new(handler, userData, 0));
&gt; +    return WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target)-&gt;add_event_listener(target, eventName, closure.get(), useCapture);

I keep wondering if we should ditch GRefPtr here and do the adoption of the reference for the closure in the GObjectListener constructor. Feels like unnecessary churn but at the same time makes things more straight-forward and obvious I guess…

&gt;&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64
&gt;&gt; +WEBKIT_API gboolean  webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget *target,
&gt; 
&gt; The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

API break, but ABI stable, no sweat from my side =P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943012</commentid>
    <comment_count>68</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-24 00:45:38 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; (From update of attachment 214942 [details])
&gt; LGTM!

Thanks for the review.

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214942&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:49
&gt; &gt;&gt; -void webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event, GError** error)
&gt; &gt;&gt; +gboolean webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event, GError** error)
&gt; &gt; 
&gt; &gt; webkit_dom_event_target_dispatch_event is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; 
&gt; Can you add exceptions for these checks along with this patch? It should be pretty straight-forward, just add it alongside WebKitDOMCustom in Tools/Scripts/webkitpy/style/checker.py, I believe.

Let me try, yes.

&gt; &gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp:65
&gt; &gt; +    GRefPtr&lt;GClosure&gt; closure = adoptGRef(g_cclosure_new(handler, userData, 0));
&gt; &gt; +    return WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target)-&gt;add_event_listener(target, eventName, closure.get(), useCapture);
&gt; 
&gt; I keep wondering if we should ditch GRefPtr here and do the adoption of the reference for the closure in the GObjectListener constructor. Feels like unnecessary churn but at the same time makes things more straight-forward and obvious I guess…

We don&apos;t want to adopt the ref in the case of closure received from add_event_listener_with_closure, so GObjectEventListener should always take a new reference.

&gt; &gt;&gt; Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h:64
&gt; &gt;&gt; +WEBKIT_API gboolean  webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget *target,
&gt; &gt; 
&gt; &gt; The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; API break, but ABI stable, no sweat from my side =P

Yes, I explained the situation in the mailing list asking if anybody is using dispatch_event, and nobody replied so far. If someone eventually complains we can just revert this patch before the next stable release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943030</commentid>
    <comment_count>69</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-24 02:07:17 -0700</bug_when>
    <thetext>Committed r157918: &lt;http://trac.webkit.org/changeset/157918&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125617</attachid>
            <date>2012-02-06 04:42:50 -0800</date>
            <delta_ts>2022-02-28 04:01:22 -0800</delta_ts>
            <desc>webkit-gdom-bindings.patch</desc>
            <filename>webkit-gdom-bindings.patch</filename>
            <type>text/plain</type>
            <size>2965</size>
            <attacher name="Priit Laes (IRC: plaes)">plaes</attacher>
            
              <data encoding="base64">RnJvbSA0YWVhZjg4MjIwZjYxMGRlODRiMDA2OGY3MDY1NWUwMmUyOTM0NTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQcmlpdCBMYWVzIDxwbGFlc0BwbGFlcy5vcmc+CkRhdGU6IE1v
biwgNiBGZWIgMjAxMiAxNDoyOTozNSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMDYg
IFByaWl0IExhZXMgIDxwbGFlc0BwbGFlcy5vcmc+CgogICAgICAgIChndGstZ2lyLWRvbS1ldmVu
dHMpIFtnb2JqZWN0LWludHJvc3BlY3Rpb25dIE1pc3Npbmcgc2NvcGUgYW5ub3RhdGlvbnMgZm9y
IGFkZC9yZW1vdmVfZXZlbnRfbGlzdGVuZXIKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4MzUKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oOiBB
ZGQgaW50cm9zcGVjdGlvbgogICAgICAgIGFubm90YXRpb25zIHRvIG1ha2Uge2FkZCxyZW1vdmV9
X2V2ZW50X2xpc3RlbmVyIHdvcmtpbmcuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsrKysrKysrKysKIC4uLi9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmggICAgICAgIHwgICAgOCArKysrKysrKwogMiBm
aWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBkMzAwYjIyLi40ZjRhYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MDItMDYgIFByaWl0IExhZXMgIDxwbGFlc0BwbGFlcy5vcmc+CisKKyAgICAgICAgKGd0ay1naXIt
ZG9tLWV2ZW50cykgW2dvYmplY3QtaW50cm9zcGVjdGlvbl0gTWlzc2luZyBzY29wZSBhbm5vdGF0
aW9ucyBmb3IgYWRkL3JlbW92ZV9ldmVudF9saXN0ZW5lcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZl
bnRUYXJnZXQuaDogQWRkIGludHJvc3BlY3Rpb24KKyAgICAgICAgYW5ub3RhdGlvbnMgdG8gbWFr
ZSB7YWRkLHJlbW92ZX1fZXZlbnRfbGlzdGVuZXIgd29ya2luZy4KKwogMjAxMi0wMi0wNSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IEpTT2JqZWN0IGRlZmluZUdldHRlci9kZWZpbmVTZXR0ZXIgbG9va3VwR2V0dGVyL2xvb2t1cFNl
dHRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01FdmVudFRhcmdldC5oCmluZGV4IDRhZGJkYTEuLjMzMDllNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKQEAg
LTU5LDEyICs1OSwyMCBAQCBXRUJLSVRfQVBJIHZvaWQgICAgICB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZl
bnQgICAgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKIAorLyoq
CisgKiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXI6CisgKiBAaGFu
ZGxlcjogKHNjb3BlIGFzeW5jKToKKyAqKi8KIFdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAq
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudE5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAg
ICAgIGJ1YmJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgdXNlckRhdGEpOwogCisv
KioKKyAqIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcjoKKyAq
IEBoYW5kbGVyOiAoc2NvcGUgYXN5bmMpOgorICoqLwogV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0ICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50TmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwKLS0gCjEuNy44LjQK
Cg==
</data>
<flag name="review"
          id="127153"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>125618</attachid>
            <date>2012-02-06 04:44:35 -0800</date>
            <delta_ts>2012-02-06 04:44:35 -0800</delta_ts>
            <desc>webkit-gir.py</desc>
            <filename>webkit.py</filename>
            <type>text/plain</type>
            <size>1248</size>
            <attacher name="Priit Laes (IRC: plaes)">plaes</attacher>
            
              <data encoding="base64">aW1wb3J0IGdpCmdpLnJlcXVpcmVfdmVyc2lvbignV2ViS2l0JywgJzMuMCcpCmZyb20gZ2kucmVw
b3NpdG9yeSBpbXBvcnQgV2ViS2l0LCBHdGssIEdPYmplY3QKCmluaXRfc3RyaW5nID0gcicnJwo8
ZGl2IGlkPSJ0ZXN0aW5nIj50ZXN0aW5nPC9kaXY+CjxkaXY+PGJ1dHRvbiBpZD0ibGluayI+Q0xJ
Q0sgTUU8L2J1dHRvbj4KPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tIj5ob29yYXkhPC9h
PgonJycKCmNsYXNzIFdLKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAg
cHJpbnQgJ19faW5pdF9fJwoKICAgICAgICBzZWxmLndpbmRvdyA9IEd0ay5XaW5kb3coKQogICAg
ICAgIHNlbGYud2VidmlldyA9IFdlYktpdC5XZWJWaWV3KCkKCiAgICAgICAgc2VsZi53aW5kb3cu
c2V0X2RlZmF1bHRfc2l6ZSg4MDAsIDYwMCkKICAgICAgICBzZWxmLndpbmRvdy5jb25uZWN0KCdk
ZXN0cm95Jywgc2VsZi5vbl9xdWl0KQoKICAgICAgICBzZWxmLndpbmRvdy5hZGQoc2VsZi53ZWJ2
aWV3KQogICAgICAgIHNlbGYud2luZG93LnNob3dfYWxsKCkKCiAgICAgICAgc2VsZi53ZWJ2aWV3
LmxvYWRfc3RyaW5nKGluaXRfc3RyaW5nLCAndGV4dC9odG1sJywgJ3V0Zi04JywgJyMnKQogICAg
ICAgIHNlbGYud2Vidmlldy5jb25uZWN0KCdkb2N1bWVudC1sb2FkLWZpbmlzaGVkJywgc2VsZi5v
bl9sb2FkKQoKICAgIGRlZiBvbl9sb2FkKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgIHBy
aW50ICdvbl9sb2FkJwoKICAgICAgICBkb2MgPSBzZWxmLndlYnZpZXcuZ2V0X2RvbV9kb2N1bWVu
dCgpCiAgICAgICAgbGluayA9IGRvYy5nZXRfZWxlbWVudF9ieV9pZCgnbGluaycpCgogICAgICAg
ICMgb2xkIHdheSAuLi4KICAgICAgICAjbGluay5jb25uZWN0KCdjbGljay1ldmVudCcsIGxsLCAn
dGVzdHRlc3QnKQoKICAgICAgICAjIERPRVNOJ1QgV09SSyAobm9uLWV4aXN0ZW50KSAuLi4gaG93
IHRvIGFjaGlldmU/CiAgICAgICAgbGluay5hZGRfZXZlbnRfbGlzdGVuZXIoJ2NsaWNrJywgc2Vs
Zi5vbl9jbGljaywgVHJ1ZSwgc2VsZikKCiAgICBkZWYgb25fY2xpY2soc2VsZiwgKmFyZ3MsICoq
a3dkcyk6CiAgICAgICAgcHJpbnQgJ29uX2NsaWNrJywgYXJncywga3dkcwoKICAgIGRlZiBvbl9x
dWl0KHNlbGYsIHdpZGdldCk6CiAgICAgICAgR3RrLm1haW5fcXVpdCgpCgppZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgogICAgdGVzdGV2ZW50cyA9IFdLKCkKICAgIEd0ay5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126566</attachid>
            <date>2012-02-10 13:03:22 -0800</date>
            <delta_ts>2012-02-10 13:03:22 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>p</filename>
            <type>text/plain</type>
            <size>15401</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50
TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAKaW5kZXggNjIxMWU3ZC4uYzg0ZDUxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAK
QEAgLTI5LDkgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIHZvaWQg
KCpHT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrKShHT2JqZWN0KiwgV2ViS2l0RE9NRXZlbnQq
LCB2b2lkKik7Ci0KLUdPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50
TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgY2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCitH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0
LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIFdlYktpdERP
TUV2ZW50TGlzdGVuZXJGdW5jIGhhbmRsZXIsIGJvb2wgY2FwdHVyZSwgdm9pZCogdXNlckRhdGEs
IEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKICAgICA6IEV2ZW50TGlzdGVuZXIoR09iamVjdEV2ZW50
TGlzdGVuZXJUeXBlKQogICAgICwgbV9vYmplY3Qob2JqZWN0KQogICAgICwgbV9jb3JlVGFyZ2V0
KHRhcmdldCkKQEAgLTM5LDYgKzM3LDcgQEAgR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RF
dmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmdldCwKICAgICAs
IG1faGFuZGxlcihoYW5kbGVyKQogICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCiAgICAgLCBtX3Vz
ZXJEYXRhKHVzZXJEYXRhKQorICAgICwgbV9ub3RpZnkobm90aWZ5KQogewogICAgIEFTU0VSVCht
X2NvcmVUYXJnZXQpOwogICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRf
Y2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRD
YWxsYmFjayksIHRoaXMpOwpAQCAtNjEsMTIgKzYwLDE1IEBAIHZvaWQgR09iamVjdEV2ZW50TGlz
dGVuZXI6OmdvYmplY3REZXN0cm95ZWQoKQogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBtX2Nv
cmVUYXJnZXQ7CiAgICAgbV9jb3JlVGFyZ2V0ID0gMDsKICAgICB0YXJnZXQtPnJlbW92ZUV2ZW50
TGlzdGVuZXIobV9kb21FdmVudE5hbWUuZGF0YSgpLCB0aGlzLCBtX2NhcHR1cmUpOworCisgICAg
aWYgKG1fbm90aWZ5KQorICAgICAgICAobV9ub3RpZnkpKG1fdXNlckRhdGEpOwogfQogCiB2b2lk
IEdPYmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRXZlbnQqIGV2ZW50KQogewogICAgIFdlYktpdERPTUV2ZW50KiBnb2JqZWN0RXZlbnQgPSBX
RUJLSVRfRE9NX0VWRU5UKFdlYktpdDo6a2l0KGV2ZW50KSk7Ci0gICAgcmVpbnRlcnByZXRfY2Fz
dDxHT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrPihtX2hhbmRsZXIpKG1fb2JqZWN0LCBnb2Jq
ZWN0RXZlbnQsIG1fdXNlckRhdGEpOworICAgIChtX2hhbmRsZXIpKG1fb2JqZWN0LCBnb2JqZWN0
RXZlbnQsIG1fdXNlckRhdGEpOwogICAgIGdfb2JqZWN0X3VucmVmKGdvYmplY3RFdmVudCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuaAppbmRleCA2Yzg1NzAxLi45ZmMyZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCkBAIC0y
MSwyNyArMjEsMjggQEAKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCiAKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB0eXBl
ZGVmIHN0cnVjdCBfR09iamVjdCBHT2JqZWN0OwotdHlwZWRlZiB2b2lkICgqR0NhbGxiYWNrKSAo
dm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpHRGVzdHJveU5vdGlmeSkgKHZvaWQqIGRhdGEpOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdPYmplY3RFdmVudExpc3RlbmVyIDogcHVibGlj
IEV2ZW50TGlzdGVuZXIgewogcHVibGljOgogCi0gICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0
ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRv
bUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNl
ckRhdGEpCisgICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3Qs
IEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgV2ViS2l0RE9N
RXZlbnRMaXN0ZW5lckZ1bmMgaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlLCB2b2lkKiB1c2VyRGF0
YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQogICAgIHsKLSAgICAgICAgUmVmUHRyPEdPYmplY3RF
dmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVuZXIo
b2JqZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgdXNlckRh
dGEpKSk7CisgICAgICAgIFJlZlB0cjxHT2JqZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIoYWRv
cHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKG9iamVjdCwgdGFyZ2V0LCBkb21FdmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUsIHVzZXJEYXRhLCBub3RpZnkpKSk7CiAgICAgICAgIHJl
dHVybiB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBsaXN0ZW5lci5yZWxl
YXNlKCksIHVzZUNhcHR1cmUpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50
TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisgICAg
c3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRMaXN0
ZW5lckZ1bmMgaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlLCBHRGVzdHJveU5vdGlmeSBub3RpZnkp
CiAgICAgewotICAgICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCB0YXJnZXQs
IGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgMCk7CisgICAgICAgIEdPYmplY3RF
dmVudExpc3RlbmVyIGtleShvYmplY3QsIHRhcmdldCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlLCAwLCBub3RpZnkpOwogICAgICAgICByZXR1cm4gdGFyZ2V0LT5yZW1vdmVFdmVu
dExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgJmtleSwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCkBAIC02
MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBF
dmVudExpc3RlbmVyJiBvdGhlcik7CiAKIHByaXZhdGU6Ci0gICAgR09iamVjdEV2ZW50TGlzdGVu
ZXIoR09iamVjdCosIEV2ZW50VGFyZ2V0KiwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2Fs
bGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgR09iamVj
dEV2ZW50TGlzdGVuZXIoR09iamVjdCosIEV2ZW50VGFyZ2V0KiwgY29uc3QgY2hhciogZG9tRXZl
bnROYW1lLCBXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYywgYm9vbCBjYXB0dXJlLCB2b2lkKiB1
c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkpOwogICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwog
ICAgIHZvaWQgZ29iamVjdERlc3Ryb3llZCgpOwogCkBAIC03Miw5ICs3MywxMCBAQCBwcml2YXRl
OgogICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdoZW4gdGhlIEdPYmplY3QgYW5kIHRodXMgdGhlIG1f
Y29yZVRhcmdldCBvYmplY3QgaXMgYWxpdmUuCiAgICAgRXZlbnRUYXJnZXQqIG1fY29yZVRhcmdl
dDsKICAgICBDU3RyaW5nIG1fZG9tRXZlbnROYW1lOwotICAgIEdDYWxsYmFjayBtX2hhbmRsZXI7
CisgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckZ1bmMgbV9oYW5kbGVyOwogICAgIGJvb2wgbV9j
YXB0dXJlOwogICAgIHZvaWQqIG1fdXNlckRhdGE7CisgICAgR0Rlc3Ryb3lOb3RpZnkgbV9ub3Rp
Znk7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCmluZGV4IGY3
NGMzNDAuLjQ2NTA4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCkBAIC03NSwyMSArNzUsMjAgQEAgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBXZWJLaXQKICAgICAgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50KHRhcmdl
dCwgZXZlbnQsIGVycm9yKTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
YWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50
ZXIgdXNlckRhdGEpCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYyBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUs
IGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCiB7Ci0KICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBGQUxT
RSk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CiAKICAgICBX
ZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VU
X0dFVF9JRkFDRSh0YXJnZXQpOwogCiAgICAgaWYgKGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIp
Ci0gICAgICAgIHJldHVybiBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCBidWJibGUsIHVzZXJEYXRhKTsKKyAgICAgICAgcmV0dXJuIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNl
ckRhdGEsIG5vdGlmeSk7CiAKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLWdib29sZWFuIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBn
Ym9vbGVhbiBidWJibGUpCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYyBoYW5kbGVyLCBnYm9vbGVhbiBi
dWJibGUpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9U
QVJHRVQodGFyZ2V0KSwgRkFMU0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFt
ZSwgRkFMU0UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01FdmVudFRhcmdldC5oCmluZGV4IDRhZGJkYTEuLjE1OWUxZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0
LmgKQEAgLTMzLDYgKzMzLDggQEAgR19CRUdJTl9ERUNMUwogCiB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSBXZWJLaXRET01FdmVudFRhcmdldElmYWNlOwogCit0eXBl
ZGVmIHZvaWQgKCpXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYykoR09iamVjdCogb2JqZWN0LCBX
ZWJLaXRET01FdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpOworCiBzdHJ1Y3QgX1dlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UgewogICAgIEdUeXBlSW50ZXJmYWNlIGdJZmFjZTsKIApAQCAtNDEs
MTUgKzQzLDE2IEBAIHN0cnVjdCBfV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnQgICAgICAgKmV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAg
ICAgKiplcnJvcik7CiAKLSAgICBnYm9vbGVhbiAgICAgICgqIGFkZF9ldmVudF9saXN0ZW5lciko
V2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAqZXZlbnROYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFu
ZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ICAgICAgICAgICAgIGJ1YmJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJEYXRhKTsKLSAgICBnYm9vbGVhbiAgICAg
ICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAg
ICAgICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJibGUp
OworICAgIGdib29sZWFuICAgICAgKCogYWRkX2V2ZW50X2xpc3RlbmVyKShXZWJLaXRET01FdmVu
dFRhcmdldCAgICAgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckZ1bmMg
aGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xl
YW4gICAgICAgICAgICAgICAgICAgYnViYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICB1c2VyRGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICAg
ICAgICAgbm90aWZ5KTsKKyAgICBnYm9vbGVhbiAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5l
cikoV2ViS2l0RE9NRXZlbnRUYXJnZXQgICAgICAqdGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICpldmVu
dE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dERPTUV2ZW50TGlzdGVuZXJGdW5jIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgIGJ1YmJsZSk7CiB9
OwogCiAKQEAgLTU5LDE2ICs2MiwyNyBAQCBXRUJLSVRfQVBJIHZvaWQgICAgICB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0RE9NRXZlbnQgICAgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KTsKIAotV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAgICAgICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAg
aGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgICAgICB1c2VyRGF0YSk7CisvKiBGSVhNRTogRmlsbCBpbiB0aGUgcmVz
dCBvZiB0aGUgYW5ub3RhdGlvbnMgYW5kIGRvY3VtZW50LiAqLworCisvKioKKyAqIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcgorICogQG5vdGlmeTogKGFsbG93LW5v
bmUpOgorKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAgICAgICp0YXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAqZXZlbnROYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERP
TUV2ZW50TGlzdGVuZXJGdW5jIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAg
ICAgICAgYnViYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgIGRhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICAgICAgbm90aWZ5KTsKIAotV0VCS0lUX0FQSSBn
Ym9vbGVhbiAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAg
ICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKKy8qKgorICogd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyCisgKiBAaGFuZGxlcjogKHNj
b3BlIG5vdGlmaWVkKToKKyAqLworV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICAgICAg
KnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICpldmVudE5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckZ1bmMgaGFuZGxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICBidWJibGUpOwogCiBHX0VORF9ERUNMUwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JH
T2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
R09iamVjdC5wbQppbmRleCA4YTZkZTE4Li5kZjkxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTEy
MDIsMTYgKzEyMDIsMTYgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQKICAgICB9CiB9CiAKLXN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nh
bGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEpCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktp
dERPTUV2ZW50TGlzdGVuZXJGdW5jIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIg
dXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKIHsKICAgICBXZWJDb3JlOjoke2ludGVy
ZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VO
YW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVy
biBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRh
dGEpOworICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IGJ1YmJsZSwgdXNlckRhdGEsIG5vdGlmeSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tXyR7ZGVjYW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdi
b29sZWFuIGJ1YmJsZSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1f
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckZ1bmMgaGFuZGxlciwgZ2Jv
b2xlYW4gYnViYmxlKQogewogICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUsIDApOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRv
bWRvbXdpbmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5j
CmluZGV4IDM2MWM0YzMuLjBlNTVjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21kb213aW5kb3cuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tZG9td2luZG93LmMKQEAgLTEwNSw3ICsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsb2FkX2V2ZW50
X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURv
bQogewogICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyh3ZWJWaWV3KTsKICAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklT
SEVEKSB7Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5l
cihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBH
X0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKyAgICAgICAgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRf
VEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJjbGljayIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckZ1
bmMpKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKICAgICAgICAgZ3RrX3Rlc3Rfd2lk
Z2V0X2NsaWNrKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOwpAQCAtMTI1LDcg
KzEyNiw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscyhEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkCiAKICAgICBmaXh0dXJlLT5kb21XaW5k
b3cgPSBkb21XaW5kb3c7CiAKLSAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRf
bGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwgImxv
YWQiLCBHX0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOworICAgIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5U
X1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAibG9hZCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYyko
bG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSwgTlVMTCk7CiAgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9j
YiksIGZpeHR1cmUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0
dXJlKTsKIApAQCAtMTc2LDcgKzE3OCw4IEBAIHN0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NhbGxi
YWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5kb21X
aW5kb3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJVF9E
T01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCAi
Y2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBmYWxzZSwgZml4dHVyZSk7CisgICAgICAg
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VW
RU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRET01FdmVudExpc3RlbmVyRnVuYykoY2xp
Y2tlZF9jYiksIGZhbHNlLCBmaXh0dXJlLCBOVUxMKTsKICAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CiAgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rp
c3BhdGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCBldmVudCwgTlVM
TCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126669</attachid>
            <date>2012-02-11 21:27:50 -0800</date>
            <delta_ts>2012-03-09 00:46:16 -0800</delta_ts>
            <desc>annotation to override parsed C type</desc>
            <filename>annotations.patch</filename>
            <type>text/plain</type>
            <size>2038</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">ZGlmZiAtcnUgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50
VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50
VGFyZ2V0LmgKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01F
dmVudFRhcmdldC5oCTIwMTEtMDMtMjEgMTM6NDM6MTMuMDAwMDAwMDAwIC0wNTAwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAkyMDEy
LTAyLTExIDIyOjU5OjAxLjc1Njg1MzcxNSAtMDYwMApAQCAtMzEsNiArMzEsOCBAQAogI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX0VWRU5UX1RBUkdFVCkpCiAjZGVm
aW5lIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFDRShvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9JTlRFUkZBQ0UgKChvYmopLCBXRUJLSVRfVFlQRV9ET01fRVZFTlRfVEFSR0VULCBX
ZWJLaXRET01FdmVudFRhcmdldElmYWNlKSkKIAordHlwZWRlZiB2b2lkICgqX1dlYktpdERPTUV2
ZW50TGlzdGVuZXJGdW5jKShHT2JqZWN0KiwgV2ViS2l0RE9NRXZlbnQqLCB2b2lkKik7CisKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01FdmVudFRhcmdldElmYWNlIFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2U7CiAKIHN0cnVjdCBfV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSB7CkBAIC01OSwx
MiArNjEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdERPTUV2ZW50ICAgICAgICpldmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgKiplcnJvcik7CiAKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
YWRkX2V2ZW50X2xpc3RlbmVyOgorICogQGhhbmRsZXI6IChjbG9zdXJlIHVzZXJEYXRhKSAoc2Nv
cGUgbm90aWZpZWQpICh0eXBlIFdlYktpdC5fRE9NRXZlbnRMaXN0ZW5lckZ1bmMpOgorICogQHVz
ZXJEYXRhOiAoY2xvc3VyZSk6CisgKi8KIFdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAqdGFy
Z2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudE5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAg
IGJ1YmJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgdXNlckRhdGEpOwogCisvKioK
KyAqIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcjoKKyAqIEBo
YW5kbGVyOiAodHlwZSBncG9pbnRlcik6CisgKi8KIFdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCAqdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudE5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>126674</attachid>
            <date>2012-02-12 02:17:22 -0800</date>
            <delta_ts>2012-02-12 02:30:15 -0800</delta_ts>
            <desc>test case (stable listener id)</desc>
            <filename>post.py</filename>
            <type>text/plain</type>
            <size>3086</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9weXRob24yCgppbXBvcnQgZ2kKZ2kucmVxdWlyZV92ZXJzaW9uKCdXZWJLaXQn
LCAnMy4wJykKZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBXZWJLaXQsIEd0aywgR09iamVjdAoK
Z28gPSBHT2JqZWN0CndrID0gV2ViS2l0Cmd0ayA9IEd0awoKZnJvbSB0cmFjZWJhY2sgaW1wb3J0
IHByaW50X3N0YWNrLCBwcmludF9leGMKZnJvbSBwZGIgaW1wb3J0IHNldF90cmFjZSBhcyBkYmcK
CgpkZWYgbGwoKmEpOgogICAgZm9yIHkgaW4gYToKICAgICAgICBwcmludCAnXG5cbiVzXG5cbicg
JSB5CiAgICAgICAgZm9yIHggaW4gZGlyKHkpOgogICAgICAgICAgICBpZiB4IGluIFsnY29yZU9i
amVjdCcsICdwYXJlbnRJbnN0YW5jZScsICdjb3JlX29iamVjdCcsICdwYXJlbnRfaW5zdGFuY2Un
XToKICAgICAgICAgICAgICAgIHByaW50ICclNXMgJTMwcyAgICVzJyAlICh4LmZpbmQoJ2lzdGVu
JykhPS0xLCB4LCB4KQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgdHJ5Ogog
ICAgICAgICAgICAgICAgYXR0ciA9IGdldGF0dHIoeSwgeCkKICAgICAgICAgICAgICAgIGlmIGF0
dHIuX19jbGFzc19fIGlzIGdpLnR5cGVzLlN0cnVjdE1ldGE6CiAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKICAgICAgICAgICAgICAgIHByaW50ICclNXMgJTMwcyAgICVzJyAlICh4LmZpbmQo
J2lzdGVuJykhPS0xLCB4LCBzdHIoZ2V0YXR0cih5LCB4KSlbOjEwMF0pCiAgICAgICAgICAgIGV4
Y2VwdDoKICAgICAgICAgICAgICAgIHByaW50ICdmYWlsZWQ6ICcsIHgKCgppbml0X3N0cmluZyA9
IHInJycKPGRpdiBpZD0idGVzdGluZyI+dGVzdGluZzwvZGl2Pgo8ZGl2PjxidXR0b24gaWQ9Imxp
bmsiPkNMSUNLIE1FPC9idXR0b24+CjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbSI+aG9v
cmF5ITwvYT4KJycnCgpjbGFzcyBET01FdmVudExpc3RlbmVyKG9iamVjdCk6CgogICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHNlbmRlciwgZXZlbnRuYW1lLCBjYWxsYmFjaywgYnViYmxlPVRydWUpOgog
ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawogICAgICAgIHNlbGYuZXZlbnRuYW1lID0g
ZXZlbnRuYW1lCiAgICAgICAgc2VuZGVyLmFkZF9ldmVudF9saXN0ZW5lcihldmVudG5hbWUsIHNl
bGYsIGJ1YmJsZSwgTm9uZSkKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgogICAgICAg
IHByaW50ICdjYWxsYmFjazonLCBzZWxmCiAgICAgICAgcHJpbnQgJ1xuJy5qb2luKFsnICcqMTAr
JyVzJ10qbGVuKGFyZ3MpKSAlIGFyZ3MKICAgICAgICAjcHJpbnQgYXJnc1swXS5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoYXJnc1sxXS5wcm9wcy50eXBlLCBzZWxmLCBUcnVlKQogICAgICAgIHRyeToK
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2FsbGJhY2soKmFyZ3MpCiAgICAgICAgZXhjZXB0Ogog
ICAgICAgICAgICBwcmludF9leGMoKQogICAgICAgICAgICByZXR1cm4gTm9uZQoKCmNsYXNzIEdT
aWduYWxIYW5kbGVyKG9iamVjdCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbmRlciwgc2ln
c3BlYywgY2FsbGJhY2spOgogICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawogICAgICAg
IHNlbmRlci5jb25uZWN0KHNpZ3NwZWMsIHNlbGYsIE5vbmUpCgogICAgZGVmIF9fY2FsbF9fKHNl
bGYsICphcmdzKToKICAgICAgICBwcmludCAnY2FsbGJhY2s6Jywgc2VsZgogICAgICAgIHByaW50
ICdcbicuam9pbihbJyAnKjEwKyclcyddKmxlbihhcmdzKSkgJSBhcmdzCiAgICAgICAgdHJ5Ogog
ICAgICAgICAgICByZXR1cm4gc2VsZi5jYWxsYmFjaygqYXJncykKICAgICAgICBleGNlcHQ6CiAg
ICAgICAgICAgIHByaW50X2V4YygpCiAgICAgICAgICAgIHJldHVybiBOb25lCgoKY2xhc3MgV0so
b2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi53aW5kb3cgPSBH
dGsuV2luZG93KCkKICAgICAgICBzZWxmLndlYnZpZXcgPSBXZWJLaXQuV2ViVmlldygpCgogICAg
ICAgIHNlbGYud2luZG93LnNldF9kZWZhdWx0X3NpemUoODAwLCA2MDApCiAgICAgICAgc2VsZi5h
ZGRfc2lnbmFsX2hhbmRsZXIoc2VsZi53aW5kb3csICdkZXN0cm95Jywgc2VsZi5vbl9xdWl0KQog
ICAgICAgIHNlbGYud2luZG93LmFkZChzZWxmLndlYnZpZXcpCiAgICAgICAgc2VsZi53aW5kb3cu
c2hvd19hbGwoKQoKICAgICAgICBzZWxmLndlYnZpZXcubG9hZF9zdHJpbmcoaW5pdF9zdHJpbmcs
ICd0ZXh0L2h0bWwnLCAndXRmLTgnLCAnIycpCiAgICAgICAgc2VsZi5hZGRfc2lnbmFsX2hhbmRs
ZXIoc2VsZi53ZWJ2aWV3LCAnZG9jdW1lbnQtbG9hZC1maW5pc2hlZCcsIHNlbGYub25fbG9hZCkK
CiAgICBkZWYgb25fbG9hZChzZWxmLCB2aWV3LCBmcmFtZSwgdXNlcl9kYXRhKToKICAgICAgICBz
ZWxmLmxpbmsgPSBzZWxmLndlYnZpZXcuZ2V0X2RvbV9kb2N1bWVudCgpLmdldF9lbGVtZW50X2J5
X2lkKCdsaW5rJykKICAgICAgICBzZWxmLmFkZF9ldmVudF9saXN0ZW5lcihzZWxmLmxpbmssICdj
bGljaycsIHNlbGYub25fY2xpY2spCgogICAgZGVmIGFkZF9ldmVudF9saXN0ZW5lcihzZWxmLCBz
ZW5kZXIsIGV2ZW50bmFtZSwgY2FsbGJhY2ssIGJ1YmJsZT1UcnVlKToKICAgICAgICBET01FdmVu
dExpc3RlbmVyKHNlbmRlciwgZXZlbnRuYW1lLCBjYWxsYmFjaywgYnViYmxlKQoKICAgIGRlZiBh
ZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2VuZGVyLCBzaWdzcGVjLCBjYWxsYmFjayk6CiAgICAg
ICAgR1NpZ25hbEhhbmRsZXIoc2VuZGVyLCBzaWdzcGVjLCBjYWxsYmFjaykKCiAgICBkZWYgb25f
Y2xpY2soc2VsZiwgbm9kZSwgZXZlbnQsIGRhdGEpOgogICAgICAgIHBhc3MKCiAgICBkZWYgb25f
cXVpdChzZWxmLCB3aWRnZXQsIHVzZXJfZGF0YSk6CiAgICAgICAgI2RiZygpCiAgICAgICAgc2Vs
Zi53aW5kb3cudW5yZWFsaXplKCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgR09i
amVjdC50aHJlYWRzX2luaXQoKQogICAgdGVzdGV2ZW50cyA9IFdLKCkKICAgIHdoaWxlIHRlc3Rl
dmVudHMud2luZG93LmdldF9yZWFsaXplZCgpOgogICAgICAgIEd0ay5tYWluX2l0ZXJhdGlvbl9k
byhUcnVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127839</attachid>
            <date>2012-02-20 11:50:27 -0800</date>
            <delta_ts>2012-03-09 00:46:16 -0800</delta_ts>
            <desc>[hastily] implements add/remove_event_handler in a binding friendly manner, breaks current API</desc>
            <filename>wip-works-but-poor-and-leaky.patch</filename>
            <type>text/plain</type>
            <size>19821</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQkyMDEx
LTA5LTE3IDAyOjEwOjUzLjAwMDAwMDAwMCAtMDUwMAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCTIwMTItMDItMjAgMTA6MzM6MDIuMDAwMDAwMDAw
IC0wNjAwCkBAIC02MSw2ICs2MSw3IEBACiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERP
TUVudGl0eVJlZmVyZW5jZVByaXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktp
dERPTUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIFwKKwlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRIYW5kbGVyLmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5o
IFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRmlsZS5jcHAgXAogCURlcml2ZWRT
b3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxlTGlzdC5jcHAgXApAQCAtMjc5LDYgKzI4MCw3IEBA
CiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUVsZW1lbnQuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvd2Via2l0L1dlYktpdERPTUVudGl0eVJlZmVyZW5jZS5oIFwKIAlEZXJpdmVkU291cmNl
cy93ZWJraXQvV2ViS2l0RE9NRXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktp
dERPTUV2ZW50SGFuZGxlci5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTWVz
c2FnZVBvcnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTU1vdXNlRXZlbnQu
aCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTU5hbWVkTm9kZU1hcC5oIFwKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5j
cHAJMjAxMS0wOS0xNyAwMjoxMDo1My4wMDAwMDAwMDAgLTA1MDAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAJMjAxMi0wMi0yMCAx
MDo1ODoyNS4wMDAwMDAwMDAgLTA2MDAKQEAgLTI5LDE2ICsyOSwxMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXR5cGVkZWYgdm9pZCAoKkdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2sp
KEdPYmplY3QqLCBXZWJLaXRET01FdmVudCosIHZvaWQqKTsKLQotR09iamVjdEV2ZW50TGlzdGVu
ZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCBj
YXB0dXJlLCB2b2lkKiB1c2VyRGF0YSkKK0dPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGRvbUV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRIYW5kbGVyKiBoYW5kbGVyLCBib29sIGNh
cHR1cmUpCiAgICAgOiBFdmVudExpc3RlbmVyKEdPYmplY3RFdmVudExpc3RlbmVyVHlwZSkKICAg
ICAsIG1fb2JqZWN0KG9iamVjdCkKICAgICAsIG1fY29yZVRhcmdldCh0YXJnZXQpCiAgICAgLCBt
X2RvbUV2ZW50TmFtZShkb21FdmVudE5hbWUpCiAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKICAg
ICAsIG1fY2FwdHVyZShjYXB0dXJlKQotICAgICwgbV91c2VyRGF0YSh1c2VyRGF0YSkKIHsKICAg
ICBBU1NFUlQobV9jb3JlVGFyZ2V0KTsKICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0
RGVzdHJveWVkQ2FsbGJhY2spLCB0aGlzKTsKQEAgLTY2LDcgKzYzLDcgQEAKIHZvaWQgR09iamVj
dEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVu
dCogZXZlbnQpCiB7CiAgICAgV2ViS2l0RE9NRXZlbnQqIGdvYmplY3RFdmVudCA9IFdFQktJVF9E
T01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQpKTsKLSAgICByZWludGVycHJldF9jYXN0PEdPYmpl
Y3RFdmVudExpc3RlbmVyQ2FsbGJhY2s+KG1faGFuZGxlcikobV9vYmplY3QsIGdvYmplY3RFdmVu
dCwgbV91c2VyRGF0YSk7CisgICAgd2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX2hhbmRsZV9ldmVu
dChtX2hhbmRsZXIsIGdvYmplY3RFdmVudCk7CiAgICAgZ19vYmplY3RfdW5yZWYoZ29iamVjdEV2
ZW50KTsKIH0KIAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RF
dmVudExpc3RlbmVyLmgJMjAxMS0wOS0xNyAwMjoxMDo1My4wMDAwMDAwMDAgLTA1MDAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCTIw
MTItMDItMTkgMDE6MDU6MTEuMDAwMDAwMDAwIC0wNjAwCkBAIC0yMiwyNiArMjIsMjcgQEAKICNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKIAorI2lu
Y2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudEhhbmRsZXIuaCIKKwogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHR5cGVkZWYgc3RydWN0
IF9HT2JqZWN0IEdPYmplY3Q7Ci10eXBlZGVmIHZvaWQgKCpHQ2FsbGJhY2spICh2b2lkKTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKIAotICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlz
dGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBk
b21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUsIHZvaWQqIHVz
ZXJEYXRhKQorICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0
LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIFdlYktpdERP
TUV2ZW50SGFuZGxlciogaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQogICAgIHsKLSAgICAgICAg
UmVmUHRyPEdPYmplY3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVj
dEV2ZW50TGlzdGVuZXIob2JqZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSwgdXNlckRhdGEpKSk7CisgICAgICAgIFJlZlB0cjxHT2JqZWN0RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIoYWRvcHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKG9iamVjdCwgdGFy
Z2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpKSk7CiAgICAgICAgIHJldHVy
biB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBsaXN0ZW5lci5yZWxlYXNl
KCksIHVzZUNhcHR1cmUpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50TGlz
dGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBk
b21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisgICAgc3Rh
dGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRIYW5kbGVy
KiBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCiAgICAgewotICAgICAgICBHT2JqZWN0RXZlbnRM
aXN0ZW5lciBrZXkob2JqZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSwgMCk7CisgICAgICAgIEdPYmplY3RFdmVudExpc3RlbmVyIGtleShvYmplY3QsIHRhcmdl
dCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKICAgICAgICAgcmV0dXJuIHRh
cmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUp
OwogICAgIH0KIApAQCAtNjAsNyArNjEsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKTsKIAogcHJpdmF0ZToKLSAgICBHT2JqZWN0RXZl
bnRMaXN0ZW5lcihHT2JqZWN0KiwgRXZlbnRUYXJnZXQqLCBjb25zdCBjaGFyKiBkb21FdmVudE5h
bWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJEYXRhKTsKKyAg
ICBHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRXZlbnRUYXJnZXQqLCBjb25zdCBjaGFy
KiBkb21FdmVudE5hbWUsIFdlYktpdERPTUV2ZW50SGFuZGxlciogaGFuZGxlciwgYm9vbCBjYXB0
dXJlKTsKICAgICB+R09iamVjdEV2ZW50TGlzdGVuZXIoKTsKICAgICB2b2lkIGdvYmplY3REZXN0
cm95ZWQoKTsKIApAQCAtNzIsOSArNzMsOCBAQAogICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdoZW4g
dGhlIEdPYmplY3QgYW5kIHRodXMgdGhlIG1fY29yZVRhcmdldCBvYmplY3QgaXMgYWxpdmUuCiAg
ICAgRXZlbnRUYXJnZXQqIG1fY29yZVRhcmdldDsKICAgICBDU3RyaW5nIG1fZG9tRXZlbnROYW1l
OwotICAgIEdDYWxsYmFjayBtX2hhbmRsZXI7CisgICAgV2ViS2l0RE9NRXZlbnRIYW5kbGVyKiBt
X2hhbmRsZXI7CiAgICAgYm9vbCBtX2NhcHR1cmU7Ci0gICAgdm9pZCogbV91c2VyRGF0YTsKIH07
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01FdmVudEhhbmRsZXIuY3BwCTE5NjktMTItMzEgMTg6MDA6MDAuMDAw
MDAwMDAwIC0wNjAwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0
RE9NRXZlbnRIYW5kbGVyLmNwcAkyMDEyLTAyLTIwIDEwOjQ4OjM2LjAwMDAwMDAwMCAtMDYwMApA
QCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDIEFudGhvbnkgUmlz
aW5nZXIgPGFudGhvbnlAeHRmeC5tZT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIkV2
ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJn
b2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
RXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndl
YmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgorCit2b2lk
Cit3ZWJraXRfZG9tX2V2ZW50X2hhbmRsZXJfaGFuZGxlX2V2ZW50KFdlYktpdERPTUV2ZW50SGFu
ZGxlciogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FVkVOVF9IQU5ETEVSKHNlbGYpKTsKKworICAgIHNlbGYtPl9jYWxs
YmFja19mdW5jKGV2ZW50LCBzZWxmLT5fdXNlcl9kYXRhKTsKKyAgICBnX21lc3NhZ2UoIkVWRU5U
ISBbJXAsICVwXSIsIHNlbGYsIGV2ZW50KTsKK30KKworV2ViS2l0RE9NRXZlbnRIYW5kbGVyKgor
d2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX2NyZWF0ZShHQ2FsbGJhY2sgY2FsbGJhY2tfZnVuYywg
Z3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoY2FsbGJhY2tfZnVuYywgTlVMTCk7CisKKyAgICBXZWJLaXRE
T01FdmVudEhhbmRsZXIgKnNlbGY7CisgICAgCisgICAgLy8gLi4uIHN1YmNsYXNzIEdDbG9zdXJl
PworICAgIC8vIC4uLiBhdXRvLWdlbmVyYXRlIGFuZCBzdWJjbGFzcyBXZWJDb3JlOjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcj8KKyAgICAvLyByZWFjaCBpbiB0aHJ1IF5eXl4gYW5kIGNhbGwgaGFuZGxl
ciBkaXJlY3RseT8KKyAgICAvLyBwcm9wZXJ0aWVzPworICAgIHNlbGYgPSBXRUJLSVRfRE9NX0VW
RU5UX0hBTkRMRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9FVkVOVF9IQU5ETEVSLCBO
VUxMKSk7CisgICAgc2VsZi0+X2NhbGxiYWNrX2Z1bmMgPSAoV2ViS2l0RE9NRXZlbnRIYW5kbGVy
RnVuYykgY2FsbGJhY2tfZnVuYzsKKyAgICBzZWxmLT5fdXNlcl9kYXRhID0gdXNlcl9kYXRhOwor
ICAgIC8vIG5lZWQgdG8gaGFuZGxlIE5VTEwKKyAgICBzZWxmLT5fZGVzdHJveV9kYXRhID0gZGVz
dHJveV9kYXRhOworICAgIAorICAgIHJldHVybiBzZWxmOworCit9CisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NRXZlbnRIYW5kbGVyLCB3ZWJraXRfZG9tX2V2ZW50X2hhbmRsZXIsIFdFQktJVF9U
WVBFX0RPTV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfaGFuZGxlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KTsKKyAgICAKKyAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkKKyAgICB7CisgICAgfQor
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
aGFuZGxlcl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25z
dCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBzd2l0Y2ggKHByb3Bf
aWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50
X2hhbmRsZXJfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIGlmIChHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX2V2ZW50X2hhbmRsZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZXZlbnRfaGFuZGxlcl9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X2hhbmRsZXJfY2xhc3NfaW5pdChXZWJLaXRET01FdmVudEhhbmRsZXJDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV9ldmVudF9oYW5kbGVyX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZXZlbnRfaGFuZGxlcl9nZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9kb21fZXZlbnRf
aGFuZGxlcl9jb25zdHJ1Y3RlZDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9o
YW5kbGVyX2luaXQoV2ViS2l0RE9NRXZlbnRIYW5kbGVyKiByZXF1ZXN0KQoreworfQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50SGFuZGxlci5oCTE5
NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRIYW5kbGVyLmgJMjAxMi0wMi0yMCAxMDozODoy
OS4wMDAwMDAwMDAgLTA2MDAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBDIEFudGhvbnkgUmlzaW5nZXIgPGFudGhvbnlAeHRmeC5tZT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01FdmVudEhhbmRsZXJfaAorI2RlZmluZSBXZWJLaXRET01FdmVudEhhbmRsZXJfaAorCisjaW5j
bHVkZSAid2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dl
YktpdERPTU9iamVjdC5oIgorCisKK0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVf
RE9NX0VWRU5UX0hBTkRMRVIgICAgICAgICAgICAod2Via2l0X2RvbV9ldmVudF9oYW5kbGVyX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfSEFORExFUihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fRVZF
TlRfSEFORExFUiwgV2ViS2l0RE9NRXZlbnRIYW5kbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9F
VkVOVF9IQU5ETEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0RPTV9FVkVOVF9IQU5ETEVSLCBXZWJLaXRET01FdmVudEhhbmRs
ZXJDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FVkVOVF9IQU5ETEVSKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9FVkVO
VF9IQU5ETEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FVkVOVF9IQU5ETEVSX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9F
VkVOVF9IQU5ETEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9IQU5ETEVSX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RP
TV9FVkVOVF9IQU5ETEVSLCBXZWJLaXRET01FdmVudEhhbmRsZXJDbGFzcykpCisKK3R5cGVkZWYg
dm9pZCAoKldlYktpdERPTUV2ZW50SGFuZGxlckZ1bmMpKFdlYktpdERPTUV2ZW50KiBldmVudCwg
Z3BvaW50ZXIgdXNlcl9kYXRhKTsKKworc3RydWN0IF9XZWJLaXRET01FdmVudEhhbmRsZXIgewor
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICBXZWJLaXRET01FdmVu
dEhhbmRsZXJGdW5jIF9jYWxsYmFja19mdW5jOworICAgIGdwb2ludGVyICAgICAgICAgICAgICAg
ICAgX3VzZXJfZGF0YTsKKyAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgICAgIF9kZXN0cm95X2Rh
dGE7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUV2ZW50SGFuZGxlckNsYXNzIHsKKyAgICBXZWJL
aXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2V2ZW50X2hhbmRsZXJfZ2V0X3R5cGUgKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZXZlbnRfaGFuZGxlcl9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2
ZW50SGFuZGxlcgorICoKKyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZXZlbnRfaGFuZGxlcl9oYW5kbGVfZXZlbnQoV2ViS2l0RE9NRXZlbnRIYW5kbGVy
ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01F
dmVudCAgICAgICAgKmV2ZW50KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2hhbmRsZXJf
Y3JlYXRlOgorICogQGNhbGxiYWNrX2Z1bmM6ICh0eXBlIFdlYktpdERPTUV2ZW50SGFuZGxlckZ1
bmMpOiB0aGUgZnVuY3Rpb24gdG8gaW52b2tlCisgKiBAdXNlcl9kYXRhOiAoYWxsb3ctbm9uZSk6
IHVzZXIgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFja19mdW5jCisgKiBAZGVzdHJveV9kYXRhOiBk
ZXN0cm95IG5vdGlmeSB0byBiZSBjYWxsZWQgd2hlbiBAdXNlcl9kYXRhIGlzIG5vIGxvbmdlciB1
c2VkCisgKgorICogQ3JlYXRlcyBhIG5ldyBldmVudCBoYW5kbGVyIHdoaWNoIGludm9rZXMgQGNh
bGxiYWNrX2Z1bmMgd2l0aCBAdXNlcl9kYXRhIGFzCisgKiB0aGUgZmlyc3QgcGFyYW1ldGVyLCBh
bmQgI1dlYktpdERPTUV2ZW50IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI1dlYktpdERPTUV2ZW50SGFuZGxlcgorICovCitX
RUJLSVRfQVBJIFdlYktpdERPTUV2ZW50SGFuZGxlcioKK3dlYmtpdF9kb21fZXZlbnRfaGFuZGxl
cl9jcmVhdGUoR0NhbGxiYWNrICAgICAgY2FsbGJhY2tfZnVuYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgdXNlcl9kYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NRXZlbnRIYW5kbGVyX2ggKi8KLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAJMjAxMS0w
My0yMSAxMzo0MzoxMy4wMDAwMDAwMDAgLTA1MDAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAJMjAxMi0wMi0yMCAwMDoxMTowMC4w
MDAwMDAwMDAgLTA2MDAKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dEhhbmRsZXIuaCIKIAogdHlwZWRlZiBXZWJLaXRET01FdmVudFRhcmdldElmYWNlIFdlYktpdERP
TUV2ZW50VGFyZ2V0SW50ZXJmYWNlOwogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkK
QEAgLTc1LDIxICs3NiwyMCBAQAogICAgICAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQodGFyZ2V0
LCBldmVudCwgZXJyb3IpOwogfQogCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9h
ZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9pbnRl
ciB1c2VyRGF0YSkKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIFdlYktpdERPTUV2ZW50SGFuZGxlciogaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQogewot
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFy
Z2V0KSwgRkFMU0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0Up
OwogCiAgICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJLSVRfRE9NX0VW
RU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKIAogICAgIGlmIChpZmFjZS0+YWRkX2V2ZW50
X2xpc3RlbmVyKQotICAgICAgICByZXR1cm4gaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcih0YXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlLCB1c2VyRGF0YSk7CisgICAgICAgIHJldHVy
biBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBi
dWJibGUpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4g
YnViYmxlKQorZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgV2ViS2l0RE9NRXZlbnRIYW5kbGVyKiBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUpCiB7CiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFyZ2V0
KSwgRkFMU0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0UpOwot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0
LmgJMjAxMS0wMy0yMSAxMzo0MzoxMy4wMDAwMDAwMDAgLTA1MDAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oCTIwMTItMDItMTggMDI6
NTA6NTcuMDAwMDAwMDAwIC0wNjAwCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgogCisjaW5jbHVkZSAi
d2Via2l0L1dlYktpdERPTUV2ZW50SGFuZGxlci5oIgorCiBHX0JFR0lOX0RFQ0xTCiAKICNkZWZp
bmUgV0VCS0lUX1RZUEVfRE9NX0VWRU5UX1RBUkdFVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9nZXRfdHlwZSAoKSkKQEAgLTQxLDE1ICs0MywxNCBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERPTUV2ZW50ICAgICAgICpldmVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoq
ZXJyb3IpOwogCi0gICAgZ2Jvb2xlYW4gICAgICAoKiBhZGRfZXZlbnRfbGlzdGVuZXIpKFdlYktp
dERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAg
ICAgICAgICBidWJibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyICAgICAgICAgICAgICB1c2VyRGF0YSk7Ci0gICAgZ2Jvb2xlYW4gICAgICAoKiBy
ZW1vdmVfZXZlbnRfbGlzdGVuZXIpKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAg
ICAgICpldmVudE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKKyAg
ICBnYm9vbGVhbiAgICAgICgqIGFkZF9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgICAgICAgICAgICAqZXZlbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudEhhbmRsZXIgKmhhbmRsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAg
YnViYmxlKTsKKyAgICBnYm9vbGVhbiAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAqZXZlbnROYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudEhhbmRs
ZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuICAgICAgICAgICAgICAgYnViYmxlKTsKIH07CiAKIApAQCAtNTksMTYgKzYwLDE1
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRET01FdmVudCAgICAgICAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOwogCi1XRUJLSVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnROYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAg
ICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJibGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJEYXRhKTsKLQotV0VCS0lUX0FQSSBn
Ym9vbGVhbiAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAg
ICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCAgKnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgKmV2
ZW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudEhhbmRsZXIgKmhhbmRsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2Jvb2xlYW4gICAgICAgICAgICAgICBidWJibGUpOworCitXRUJLSVRfQVBJIGdib29sZWFuICB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICpldmVu
dE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnRIYW5kbGVyICpoYW5kbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdib29sZWFuICAgICAgICAgICAgICAgYnViYmxlKTsKIAogR19FTkRfREVDTFMKIAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMJMjAxMS0wMy0yMSAx
Mzo0MjowNy4wMDAwMDAwMDAgLTA1MDAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGRvbWRvbXdpbmRvdy5jCTIwMTItMDItMTggMTU6MDE6NDUuMDAwMDAwMDAwIC0wNjAwCkBAIC0x
MDUsNyArMTA1LDcgQEAKIHsKICAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CiAgICAgaWYgKHN0YXR1cyA9PSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93
KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7
CisgICAgICAgIC8vd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdF
QktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJjbGljayIsIEdfQ0FM
TEJBQ0soY2xpY2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOwogCiAgICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwogICAgICAgICBndGtfdGVzdF93aWRnZXRf
Y2xpY2soR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgMSwgMCk7CkBAIC0xMjUsNyArMTI1
LDcgQEAKIAogICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRvdzsKIAotICAgIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RB
UkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAibG9hZCIsIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJh
Y2spLCBmYWxzZSwgZml4dHVyZSk7CisgICAgLy93ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93
KSwgImxvYWQiLCBHX0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxM
QkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2V2ZW50
X2NhbGxiYWNrKSwgZml4dHVyZSk7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAw
LCAwLCAwLCBjbGllbnRYLCBjbGllbnRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5U
X1RBUkdFVChlbGVtZW50KSk7Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9l
dmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwg
R19DQUxMQkFDSyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICAvL3dlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RB
UkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwgZmFsc2UsIGZp
eHR1cmUpOwogICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKICAg
ICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9F
VkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKICAgICB9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131002</attachid>
            <date>2012-03-09 00:46:16 -0800</date>
            <delta_ts>2012-03-12 02:35:43 -0700</delta_ts>
            <desc>Implements EventListeners by leveraging existing CodeGenerator</desc>
            <filename>codegen-event-listeners.patch</filename>
            <type>text/plain</type>
            <size>27297</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">ZGlmZiAtcnUgZi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFt
IGQvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQotLS0gZi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCTIwMTEtMDktMTcg
MDI6MTA6NTMuMDAwMDAwMDAwIC0wNTAwCisrKyBkL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvR05VbWFrZWZpbGUuYW0JMjAxMi0wMy0wNiAwMTo1NDoxNi40NDk0NDg0MjIgLTA2MDAK
QEAgLTYxLDYgKzYxLDggQEAKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRW50aXR5
UmVmZXJlbmNlUHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZl
bnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgg
XAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudExpc3RlbmVyLmNwcCBcCisJ
RGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmggXAog
CURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudFRhcmdldFByaXZhdGUuaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZpbGUuY3BwIFwKIAlEZXJpdmVkU291cmNl
cy93ZWJraXQvV2ViS2l0RE9NRmlsZUxpc3QuY3BwIFwKQEAgLTI3OSw2ICsyODEsNyBAQAogCURl
cml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FbGVtZW50LmggXAogCURlcml2ZWRTb3VyY2Vz
L3dlYmtpdC9XZWJLaXRET01FbnRpdHlSZWZlcmVuY2UuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Vi
a2l0L1dlYktpdERPTUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01F
dmVudExpc3RlbmVyLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01NZXNzYWdl
UG9ydC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTW91c2VFdmVudC5oIFwK
IAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTmFtZWROb2RlTWFwLmggXApkaWZmIC1y
dSBmL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwIGQvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5l
ci5jcHAKLS0tIGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRM
aXN0ZW5lci5jcHAJMjAxMS0wOS0xNyAwMjoxMDo1My4wMDAwMDAwMDAgLTA1MDAKKysrIGQvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAJMjAx
Mi0wMy0wOSAwMTo1NTowNS45MTA2MTk0MTQgLTA2MDAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICogIENvcHlyaWdodCAoQykg
MjAxMiwgQyBBbnRob255IFJpc2luZ2VyIDxhbnRob255QHh0ZngubWU+CiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0yMyw1NyArMjQsMTE3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudC5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudExpc3RlbmVyUHJpdmF0ZS5o
IgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiB2b2lkICgq
R09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjaykoR09iamVjdCosIFdlYktpdERPTUV2ZW50Kiwg
dm9pZCopOwotCi1HT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09i
amVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5h
bWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJEYXRhKQorR09i
amVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKCkKICAgICA6IEV2ZW50TGlz
dGVuZXIoR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICwgbV9vYmplY3Qob2JqZWN0KQot
ICAgICwgbV9jb3JlVGFyZ2V0KHRhcmdldCkKLSAgICAsIG1fZG9tRXZlbnROYW1lKGRvbUV2ZW50
TmFtZSkKLSAgICAsIG1faGFuZGxlcihoYW5kbGVyKQotICAgICwgbV9jYXB0dXJlKGNhcHR1cmUp
Ci0gICAgLCBtX3VzZXJEYXRhKHVzZXJEYXRhKQoreyB9CisKK3ZvaWQgR09iamVjdEV2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQp
CiB7Ci0gICAgQVNTRVJUKG1fY29yZVRhcmdldCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYob2Jq
ZWN0LCByZWludGVycHJldF9jYXN0PEdXZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSwgdGhpcyk7CisgICAgaWYgKCFtX2xpc3RlbmVyKQor
ICAgIHsKKyAgICAgICAgLyoqIFNvbWV0aGluZyBpcyB0ZXJyaWJseSB3cm9uZyEKKyAgICAgICAg
ICoKKyAgICAgICAgICogT3VyIEdPYmplY3QgbGlzdGVuZXIgaGFzIHN1ZmZlcmVkIGEgcHJlbWF0
dXJlIGRlYXRoLCBhbmQgd29uJ3QgYmUKKyAgICAgICAgICogcmVwbGFjZWQuIFJhdGhlciB0aGFu
IGxlYWsgKEpTIGRvZXMgdGhpcyEpIG9yIHNlZ2ZhdWx0L2V0YyBsYXRlcgorICAgICAgICAgKiBv
biwgbGV0J3MganVzdCBwYXJ0IHdheXMgcmlnaHQgbm93LiBJdCdzIGJlZW4gZnVuISBBZGlvcyA6
LSkKKyAgICAgICAgICovCisgICAgICAgIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCktPnJlbW92ZUV2
ZW50TGlzdGVuZXIoZXZlbnQtPnR5cGUoKSwgdGhpcywgIShldmVudC0+YnViYmxlcygpKSk7Cisg
ICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwobV9saXN0ZW5lcik7CisgICAgfQorCisgICAgZ19yZXR1
cm5faWZfZmFpbChtX2hhbmRsZXIpOworCisgICAgV2ViS2l0RE9NRXZlbnQqIGdvYmplY3RFdmVu
dCA9IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQpKTsKKyAgICBHVmFsdWUgcGFy
YW1zID0gR19WQUxVRV9JTklUOworCisgICAgZ192YWx1ZV9pbml0KCZwYXJhbXMsIFdFQktJVF9U
WVBFX0RPTV9FVkVOVCk7CisgICAgZ192YWx1ZV9zZXRfb2JqZWN0KCZwYXJhbXMsIGdvYmplY3RF
dmVudCk7CisgICAgZ19jbG9zdXJlX2ludm9rZShtX2hhbmRsZXIsIE5VTEwsIDEsICZwYXJhbXMs
IE5VTEwpOworCisgICAgZ19vYmplY3RfdW5yZWYoZ29iamVjdEV2ZW50KTsKIH0KIAotR09iamVj
dEV2ZW50TGlzdGVuZXI6On5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpCit2b2lkIEdPYmplY3RFdmVu
dExpc3RlbmVyOjpzZXRMaXN0ZW5lcihXZWJLaXRET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lcikK
IHsKLSAgICBpZiAoIW1fY29yZVRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIGdfb2JqZWN0
X3dlYWtfdW5yZWYobV9vYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KEdPYmpl
Y3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBp
ZiAobGlzdGVuZXIpCisgICAgeworICAgICAgICAvLyAodHJhbnNmZXIgZnVsbCksIHNpbWlsYXIg
dG8gZ194eF9zaW5rKCkgW2Zsb2F0aW5nXQorICAgICAgICBpZiAoR19PQkpFQ1QobGlzdGVuZXIp
LT5yZWZfY291bnQgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBnX29iamVjdF9yZWYobGlz
dGVuZXIpOworICAgICAgICB9CisgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGxp
c3RlbmVyKSwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVu
ZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIGlmICht
X2xpc3RlbmVyKQorICAgIHsKKyAgICAgICAgZ19vYmplY3Rfd2Vha191bnJlZihHX09CSkVDVCht
X2xpc3RlbmVyKSwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlz
dGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX29iamVj
dF91bnJlZihtX2xpc3RlbmVyKTsKKyAgICB9CisKKyAgICBtX2xpc3RlbmVyID0gbGlzdGVuZXI7
CiB9CiAKLXZvaWQgR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWQoKQordm9p
ZCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6c2V0SGFuZGxlcihHQ2xvc3VyZSogaGFuZGxlcikKIHsK
LSAgICBBU1NFUlQobV9jb3JlVGFyZ2V0KTsKKyAgICBpZiAoaGFuZGxlcikKKyAgICB7CisgICAg
ICAgIGdfY2xvc3VyZV9yZWYoaGFuZGxlcik7CisgICAgICAgIGdfY2xvc3VyZV9zaW5rKGhhbmRs
ZXIpOworICAgICAgICBnX2Nsb3N1cmVfYWRkX2ZpbmFsaXplX25vdGlmaWVyKGhhbmRsZXIsIHRo
aXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVy
Ojpnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICBpZiAobV9oYW5kbGVy
KQorICAgIHsKKyAgICAgICAgZ19jbG9zdXJlX3JlbW92ZV9maW5hbGl6ZV9ub3RpZmllcihtX2hh
bmRsZXIsIHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KEdPYmplY3RFdmVu
dExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spKTsKKyAgICAgICAgZ19jbG9zdXJl
X3VucmVmKG1faGFuZGxlcik7CisgICAgfQogCi0gICAgLy8gV2UgbXVzdCBzZXQgbV9jb3JlVGFy
Z2V0IHRvIG51bGwsIGJlY2F1c2UgcmVtb3ZlRXZlbnRMaXN0ZW5lcgotICAgIC8vIG1heSBjYWxs
IHRoZSBkZXN0cnVjdG9yIGFzIGEgc2lkZSBlZmZlY3QgYW5kIHdlIG11c3QgYmUgaW4gdGhlCi0g
ICAgLy8gcHJvcGVyIHN0YXRlIHRvIHByZXZlbnQgZ19vYmplY3Rfd2Vha191bnJlZi4KLSAgICBF
dmVudFRhcmdldCogdGFyZ2V0ID0gbV9jb3JlVGFyZ2V0OwotICAgIG1fY29yZVRhcmdldCA9IDA7
Ci0gICAgdGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVyKG1fZG9tRXZlbnROYW1lLmRhdGEoKSwg
dGhpcywgbV9jYXB0dXJlKTsKKyAgICBtX2hhbmRsZXIgPSBoYW5kbGVyOwogfQogCi12b2lkIEdP
YmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXZlbnQqIGV2ZW50KQordm9pZCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3ll
ZChncG9pbnRlciBvYmplY3QpCiB7Ci0gICAgV2ViS2l0RE9NRXZlbnQqIGdvYmplY3RFdmVudCA9
IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQpKTsKLSAgICByZWludGVycHJldF9j
YXN0PEdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2s+KG1faGFuZGxlcikobV9vYmplY3QsIGdv
YmplY3RFdmVudCwgbV91c2VyRGF0YSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoZ29iamVjdEV2ZW50
KTsKKyAgICBpZiAoKGdwb2ludGVyKSBtX2xpc3RlbmVyID09IChncG9pbnRlcikgb2JqZWN0KQor
ICAgIHsKKyAgICAgICAgbV9saXN0ZW5lciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKChn
cG9pbnRlcikgbV9oYW5kbGVyID09IChncG9pbnRlcikgb2JqZWN0KQorICAgIHsKKyAgICAgICAg
bV9oYW5kbGVyID0gTlVMTDsKKyAgICB9Cit9CisKK0dPYmplY3RFdmVudExpc3RlbmVyOjp+R09i
amVjdEV2ZW50TGlzdGVuZXIoKQoreworICAgIGlmIChtX2xpc3RlbmVyKQorICAgIHsKKyAgICAg
ICAgZ19vYmplY3Rfd2Vha191bnJlZihHX09CSkVDVChtX2xpc3RlbmVyKSwgcmVpbnRlcnByZXRf
Y2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRD
YWxsYmFjayksIHRoaXMpOworICAgICAgICBnX29iamVjdF91bnJlZihtX2xpc3RlbmVyKTsKKyAg
ICB9CisKKyAgICBpZiAobV9oYW5kbGVyKQorICAgIHsKKyAgICAgICAgZ19jbG9zdXJlX3JlbW92
ZV9maW5hbGl6ZV9ub3RpZmllcihtX2hhbmRsZXIsIHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Ns
b3N1cmVOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkQ2FsbGJh
Y2spKTsKKyAgICAgICAgZ19jbG9zdXJlX3VucmVmKG1faGFuZGxlcik7CisgICAgfQorCisgICAg
bV9saXN0ZW5lciA9IE5VTEw7CisgICAgbV9oYW5kbGVyID0gTlVMTDsKIH0KIAogYm9vbCBHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5l
cikKIHsKICAgICBpZiAoY29uc3QgR09iamVjdEV2ZW50TGlzdGVuZXIqIGdvYmplY3RFdmVudExp
c3RlbmVyID0gR09iamVjdEV2ZW50TGlzdGVuZXI6OmNhc3QoJmxpc3RlbmVyKSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0ID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX29iamVjdCAmJiBtX2hh
bmRsZXIgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXItPm1faGFuZGxlcjsKKyAgICAgICAgcmV0dXJu
IG1fbGlzdGVuZXIgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXItPm1fbGlzdGVuZXI7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLXJ1IGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oIGQvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCi0tLSBmL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAkyMDExLTA5LTE3IDAyOjEwOjUzLjAwMDAwMDAw
MCAtMDUwMAorKysgZC9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmgJMjAxMi0wMy0wOCAwNDoyMjowOS4zNTkxNTA3NTUgLTA2MDAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICog
IENvcHlyaWdodCAoQykgMjAxMiwgQyBBbnRob255IFJpc2luZ2VyIDxhbnRob255QHh0ZngubWU+
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMSw2MCArMjIsNTAgQEAKIAogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotCiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotdHlwZWRlZiBzdHJ1
Y3QgX0dPYmplY3QgR09iamVjdDsKLXR5cGVkZWYgdm9pZCAoKkdDYWxsYmFjaykgKHZvaWQpOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50TGlzdGVuZXIgV2ViS2l0RE9NRXZlbnRMaXN0
ZW5lcjsKK3R5cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xvc3VyZTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3Rl
bmVyIHsKIHB1YmxpYzoKLQotICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIoR09iamVj
dCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUs
IEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUsIHZvaWQqIHVzZXJEYXRhKQorIAor
ICAgIHN0YXRpYyBjb25zdCBHT2JqZWN0RXZlbnRMaXN0ZW5lciogY2FzdChjb25zdCBFdmVudExp
c3RlbmVyKiBsaXN0ZW5lcikKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHT2JqZWN0RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIoYWRvcHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKG9iamVjdCwg
dGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUsIHVzZXJEYXRhKSkpOwot
ICAgICAgICByZXR1cm4gdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgbGlz
dGVuZXIucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyLT50
eXBlKCkgPT0gR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlCisgICAgICAgICAgICA/IHN0YXRpY19j
YXN0PGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpCisgICAgICAgICAgICA6
IDA7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihHT2JqZWN0
KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwg
R0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxHT2JqZWN0RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIEdPYmplY3RF
dmVudExpc3RlbmVyIGtleShvYmplY3QsIHRhcmdldCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlLCAwKTsKLSAgICAgICAgcmV0dXJuIHRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBn
b2JqZWN0RGVzdHJveWVkQ2FsbGJhY2soR09iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBH
T2JqZWN0KikKKyAgICBzdGF0aWMgdm9pZCBnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2soR09iamVj
dEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCB2b2lkKiBvYmplY3QpCiAgICAgewotICAgICAgICBs
aXN0ZW5lci0+Z29iamVjdERlc3Ryb3llZCgpOworICAgICAgICBsaXN0ZW5lci0+Z29iamVjdERl
c3Ryb3llZChvYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBHT2JqZWN0RXZlbnRM
aXN0ZW5lciogY2FzdChjb25zdCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsaXN0ZW5lci0+dHlwZSgpID09IEdPYmplY3RFdmVudExpc3RlbmVyVHlwZQot
ICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxjb25zdCBHT2JqZWN0RXZlbnRMaXN0ZW5lcio+KGxp
c3RlbmVyKQotICAgICAgICAgICAgOiAwOwotICAgIH0KKyAgICB2b2lkIHNldExpc3RlbmVyKFdl
YktpdERPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKTsKKyAgICB2b2lkIHNldEhhbmRsZXIoR0Ns
b3N1cmUqIGhhbmRsZXIpOworICAgIFdlYktpdERPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKCkg
eyByZXR1cm4gbV9saXN0ZW5lcjsgfQorICAgIEdDbG9zdXJlKiBoYW5kbGVyKCkgeyByZXR1cm4g
bV9oYW5kbGVyOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExp
c3RlbmVyJiBvdGhlcik7CiAKIHByaXZhdGU6Ci0gICAgR09iamVjdEV2ZW50TGlzdGVuZXIoR09i
amVjdCosIEV2ZW50VGFyZ2V0KiwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sg
aGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgR09iamVjdEV2ZW50
TGlzdGVuZXIoKTsKICAgICB+R09iamVjdEV2ZW50TGlzdGVuZXIoKTsKLSAgICB2b2lkIGdvYmpl
Y3REZXN0cm95ZWQoKTsKKyAgICB2b2lkIGdvYmplY3REZXN0cm95ZWQodm9pZCogb2JqZWN0KTsK
IAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXZlbnQqKTsKIAotICAgIEdPYmplY3QqIG1fb2JqZWN0OworICAgIFdlYktpdERPTUV2ZW50TGlz
dGVuZXIqIG1fbGlzdGVuZXI7CisgICAgR0Nsb3N1cmUqIG1faGFuZGxlcjsKIAotICAgIC8vIFdl
IGRvIG5vdCBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1fY29yZVRhcmdldCwgYmVj
YXVzZQotICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdoZW4gdGhlIEdPYmplY3QgYW5kIHRodXMgdGhl
IG1fY29yZVRhcmdldCBvYmplY3QgaXMgYWxpdmUuCi0gICAgRXZlbnRUYXJnZXQqIG1fY29yZVRh
cmdldDsKLSAgICBDU3RyaW5nIG1fZG9tRXZlbnROYW1lOwotICAgIEdDYWxsYmFjayBtX2hhbmRs
ZXI7Ci0gICAgYm9vbCBtX2NhcHR1cmU7Ci0gICAgdm9pZCogbV91c2VyRGF0YTsKIH07CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtcnUgZi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAgZC9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUN1c3RvbS5jcHAKLS0tIGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01DdXN0b20uY3BwCTIwMTEtMTAtMTUgMDA6Mjc6MTcuMDAwMDAwMDAwIC0w
NTAwCisrKyBkL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9t
LmNwcAkyMDEyLTAzLTA5IDAwOjU0OjMyLjQ3NTM4MjY3MCAtMDYwMApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyLCBDIEFudGhvbnkgUmlzaW5nZXIgPGFudGhvbnlAeHRmeC5tZT4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDYgKzI2LDggQEAKICNpbmNsdWRlICJXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQu
aCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiR09iamVj
dEV2ZW50TGlzdGVuZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtNjEsNCAr
NjQsNTMgQEAKICAgICBnX3dhcm5pbmcoIlRoZSBvbmZvcm1pbnB1dCBmdW5jdGlvbmFsaXR5IGhh
cyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHNwZWMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3Ro
aW5nLiIpOwogfQogCisvKiBFeHRlbmRlZCBBUEkgKi8KK1dlYktpdERPTUV2ZW50TGlzdGVuZXIq
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgR0Nsb3N1cmUqIGhhbmRsZXIpCit7CisgICAgLyoqIFJlZlB0ciB1c2UgaXMg
aW50ZW50aW9uYWwhCisgICAgICoKKyAgICAgKiBraXQoKSB3cmFwcGVycyAqYWx3YXlzKiByZWYo
KSB0aGUgY29yZU9iamVjdDsgdGhpcyBpcyBhIHByb2JsZW0gZm9yCisgICAgICogKHRyYW5zZmVy
IGZ1bGwpIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIG1lYW50IHRvIHBhc3Mgb3duZXJzaGlw
CisgICAgICogdG8gdGhlIGNhbGxlciAocmVmID09IDEpLiAgVGh1cywgd2UgbGVhay9kdXBsaWNh
dGUgdGhlIHBvaW50ZXIgd2l0aAorICAgICAqIGdldCgpLCBhbmQgcGFzcyB0aGF0IHRvIGtpdCgp
LiAgT25jZSB0aGUgUmVmUHRyIGdvZXMgb3V0IG9mIHNjb3BlIGl0CisgICAgICogZGVyZWYoKSAq
YWdhaW4qIC4uLiBzZXR0bGluZyB0aGUgcmVmX2NvdW50IGJhY2sgdG8gMS4KKyAgICAgKgorICAg
ICAqIFdlIHNob3VsZCBleHBsb3JlIGltcGxlbWVudGluZzoKKyAgICAgKgorICAgICAqIFdlYktp
dERPTU9iKiB3cmFwT2IoUGFzc1JlZlB0cjxXZWJDb3JlOjpPYj4gb2IpCisgICAgICogeworICAg
ICAqICAgICBSZWZQdHI8V2ViQ29yZTo6T2I+ID0gb2I7CisgICAgICogICAgIHJldHVybiBXRUJL
SVRfRE9NX09CKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fT0IsICJjb3JlLW9iamVjdCIs
IG9iLmdldCgpLCBOVUxMKSk7CisgICAgICogfQorICAgICAqCisgICAgICogLi4uIGluc3RlYWQs
IHdoaWNoIGFjY2VwdHMgcGFzc2VkL3RyYW5zZmVycyByZWZzIHByb3Blcmx5LgorICAgICAqLwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcj4gY29yZUxpc3RlbmVyID0g
V2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpOworICAgIFdlYktpdERPTUV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gV2ViS2l0OjpraXQoY29yZUxpc3RlbmVyLmdldCgpKTsK
KworICAgIGNvcmVMaXN0ZW5lci0+c2V0TGlzdGVuZXIobGlzdGVuZXIpOworICAgIGNvcmVMaXN0
ZW5lci0+c2V0SGFuZGxlcihoYW5kbGVyKTsKKworICAgIHJldHVybiBsaXN0ZW5lcjsKK30KKwor
dm9pZAord2Via2l0X2RvbV9ldmVudF9saXN0ZW5lcl9zZXRfaGFuZGxlcihXZWJLaXRET01FdmVu
dExpc3RlbmVyKiBzZWxmLCBHQ2xvc3VyZSogaGFuZGxlcikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyKiBjb3JlTGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcio+KFdFQktJVF9E
T01fT0JKRUNUKHNlbGYpLT5jb3JlT2JqZWN0KTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29y
ZUxpc3RlbmVyKTsKKyAgICBjb3JlTGlzdGVuZXItPnNldEhhbmRsZXIoaGFuZGxlcik7Cit9CiAK
K0dDbG9zdXJlKgord2Via2l0X2RvbV9ldmVudF9saXN0ZW5lcl9nZXRfaGFuZGxlcihXZWJLaXRE
T01FdmVudExpc3RlbmVyKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyKiBjb3JlTGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcio+KFdFQktJVF9ET01fT0JK
RUNUKHNlbGYpLT5jb3JlT2JqZWN0KTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVM
aXN0ZW5lciwgMCk7CisgICAgcmV0dXJuIGNvcmVMaXN0ZW5lci0+aGFuZGxlcigpOworfQpkaWZm
IC1ydSBmL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgg
ZC9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5oCi0tLSBm
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgJMjAxMS0x
MC0xNSAwMDoyNzoxNy4wMDAwMDAwMDAgLTA1MDAKKysrIGQvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaAkyMDEyLTAzLTA5IDAxOjE1OjIxLjI1NzkzNjU4
MiAtMDYwMApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyLCBDIEFudGhvbnkgUmlzaW5nZXIgPGFudGhv
bnlAeHRmeC5tZT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDYgKzI0LDggQEAKICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb21k
ZWZpbmVzLmg+CiAKK3R5cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xvc3VyZTsKKwogR19CRUdJ
Tl9ERUNMUwogCiBXRUJLSVRfQVBJIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9pc19lZGl0ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCopOwpAQCAtMzMs
NiArMzYsMzcgQEAKIFdFQktJVF9BUEkgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2Rpc3BhdGNoX2Zvcm1fY2hhbmdlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CiBX
RUJLSVRfQVBJIHZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9kaXNwYXRjaF9mb3Jt
X2lucHV0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CiAKKy8qIEV4dGVuZGVkIEFQ
SSAqLworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudF9saXN0ZW5lcjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGhhbmRsZXI6IChhbGxvdy1ub25l
KTogQW4gW3VuXXN1bmsgI0dDbG9zdXJlCisgKgorICogdHJhbnNmZXIvY3JlYXRlIG5ldyAjV2Vi
S2l0RE9NRXZlbnRMaXN0ZW5lciwgb3B0aW9uYWxseSBib3VuZCB0byBAaGFuZGxlciBpZiBub3Qg
JU5VTEwKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IG5ldyAjV2ViS2l0RE9NRXZl
bnRMaXN0ZW5lcgorICovCitXRUJLSVRfQVBJIFdlYktpdERPTUV2ZW50TGlzdGVuZXIqIHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmLCBHQ2xvc3VyZSogaGFuZGxlcik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9saXN0
ZW5lcl9zZXRfaGFuZGxlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudExpc3RlbmVyCisg
KiBAaGFuZGxlcjogKGFsbG93LW5vbmUpOiBBbiBbdW5dc3VuayAjR0Nsb3N1cmUKKyAqCisgKiBz
ZXRzLCBvciB1bnNldHMgaWYgQGhhbmRsZXIgaXMgJU5VTEwsIHRoZSBjYWxsYmFjayBib3VuZCB0
byBAc2VsZgorICovCitXRUJLSVRfQVBJIHZvaWQgd2Via2l0X2RvbV9ldmVudF9saXN0ZW5lcl9z
ZXRfaGFuZGxlcihXZWJLaXRET01FdmVudExpc3RlbmVyKiBzZWxmLCBHQ2xvc3VyZSogaGFuZGxl
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9saXN0ZW5lcl9nZXRfaGFuZGxlcjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FdmVudExpc3RlbmVyCisgKgorICogZ2V0cyB0aGUgY2FsbGJh
Y2svaGFuZGxlciBib3VuZCB0byBAc2VsZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KToKKyAqLworV0VCS0lUX0FQSSBHQ2xvc3VyZSogd2Via2l0X2RvbV9ldmVudF9saXN0ZW5lcl9n
ZXRfaGFuZGxlcihXZWJLaXRET01FdmVudExpc3RlbmVyKiBzZWxmKTsKKwogR19FTkRfREVDTFMK
IAogI2VuZGlmCmRpZmYgLXJ1IGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01FdmVudFRhcmdldC5jcHAgZC9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUV2ZW50VGFyZ2V0LmNwcAotLS0gZi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcAkyMDExLTAzLTIxIDEzOjQzOjEzLjAwMDAwMDAw
MCAtMDUwMAorKysgZC9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2
ZW50VGFyZ2V0LmNwcAkyMDEyLTAzLTA4IDAwOjMyOjI5LjUwMjY0NjQ5NyAtMDYwMApAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01FdmVudC5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50TGlzdGVuZXIuaCIKIAogdHlwZWRl
ZiBXZWJLaXRET01FdmVudFRhcmdldElmYWNlIFdlYktpdERPTUV2ZW50VGFyZ2V0SW50ZXJmYWNl
OwogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKQEAgLTc1LDIxICs3NiwyMCBAQAog
ICAgICAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQodGFyZ2V0LCBldmVudCwgZXJyb3IpOwogfQog
Ci1nYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJh
Y2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9pbnRlciB1c2VyRGF0YSkKK2dib29sZWFu
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktpdERPTUV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQogewotCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFyZ2V0KSwgRkFMU0UpOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0UpOwogCiAgICAgV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRf
SUZBQ0UodGFyZ2V0KTsKIAogICAgIGlmIChpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKQotICAg
ICAgICByZXR1cm4gaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgYnViYmxlLCB1c2VyRGF0YSk7CisgICAgICAgIHJldHVybiBpZmFjZS0+YWRkX2V2
ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAK
ICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLWdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUpCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBXZWJLaXRE
T01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBG
QUxTRSk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CkBAIC05
Nyw3ICs5Nyw3IEBACiAgICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKIAogICAgIGlmIChpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKQotICAgICAgICByZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKKyAgICAgICAg
cmV0dXJuIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKTsKIAogICAgIHJldHVybiBGQUxTRTsKIH0KZGlmZiAtcnUgZi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmggZC9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKLS0t
IGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5o
CTIwMTEtMDMtMjEgMTM6NDM6MTMuMDAwMDAwMDAwIC0wNTAwCisrKyBkL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAkyMDEyLTAzLTA4IDAwOjMx
OjU4Ljg0NjI1MDI3MCAtMDYwMApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEMgQW50aG9ueSBSaXNp
bmdlciA8YW50aG9ueUB4dGZ4Lm1lPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsMTUgKzQy
LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZl
bnQgICAgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcik7CiAKLSAgICBnYm9vbGVhbiAgICAgICgqIGFkZF9l
dmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAqZXZlbnRO
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sg
ICAgICAgICAgICAgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJEYXRhKTsKLSAg
ICBnYm9vbGVhbiAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRU
YXJnZXQgKnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAg
ICAgICAgICBidWJibGUpOworICAgIGdib29sZWFuICAgICAgKCogYWRkX2V2ZW50X2xpc3RlbmVy
KShXZWJLaXRET01FdmVudFRhcmdldCAgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgKmV2ZW50TmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnRMaXN0
ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuICAgICAgICAgICAgICAgIHVzZUNhcHR1cmUpOworICAgIGdib29sZWFuICAgICAg
KCogcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKShXZWJLaXRET01FdmVudFRhcmdldCAgICp0YXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
ICAgICAgICAgICAgKmV2ZW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAg
IHVzZUNhcHR1cmUpOwogfTsKIAogCkBAIC01OSwxNiArNTksMTUgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERPTUV2
ZW50ICAgICAgICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CiAKLVdF
QktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpldmVudE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAg
ICAgICAgICAgICAgdXNlckRhdGEpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQg
KnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnROYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu
ICAgICAgICAgICAgICBidWJibGUpOworV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICAgKnRh
cmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICpldmVudE5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0RE9NRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAg
ICAgICAgICAgdXNlQ2FwdHVyZSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAg
ICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAqZXZlbnROYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdERPTUV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdi
b29sZWFuICAgICAgICAgICAgICAgIHVzZUNhcHR1cmUpOwogCiBHX0VORF9ERUNMUwogCmRpZmYg
LXJ1IGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVj
dC5wbSBkL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG0KLS0tIGYvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
R09iamVjdC5wbQkyMDExLTEwLTE1IDAwOjI3OjE2LjAwMDAwMDAwMCAtMDUwMAorKysgZC9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCTIwMTIt
MDMtMDkgMDA6NTg6MzcuOTMzMjk2ODkyIC0wNjAwCkBAIC00LDYgKzQsNyBAQAogIyBDb3B5cmln
aHQgKEMpIDIwMDkgQWRhbSBEaW5nbGUgPGFkYW1AeW9yYmEub3JnPgogIyBDb3B5cmlnaHQgKEMp
IDIwMDkgSmltIE5lbHNvbiA8amltQHlvcmJhLm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSBTLkwuCisjIENvcHlyaWdodCAoQykgMjAxMiwgQyBBbnRob255IFJpc2luZ2Vy
IDxhbnRob255QHh0ZngubWU+CiAjCiAjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc2OSw2ICs3NzAsOCBAQAog
ICAgICAgICAkZnVuY3Rpb25TaWcgLj0gIiwgZ2Jvb2xlYW4gaXNVc2VyR2VzdHVyZSI7CiAgICAg
ICAgICRjYWxsSW1wbFBhcmFtcyAuPSAiLCAiIGlmICRjYWxsSW1wbFBhcmFtczsKICAgICAgICAg
JGNhbGxJbXBsUGFyYW1zIC49ICJmYWxzZSI7CisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIkV2ZW50TGlzdGVuZXIiICYmICRmdW5jdGlvblNpZ05hbWUgZXEgImhhbmRsZUV2ZW50Iikg
eworICAgICAgICAkY2FsbEltcGxQYXJhbXMgPSAiTlVMTCwgJHtjYWxsSW1wbFBhcmFtc30iOwog
ICAgIH0KIAogICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIgJiYgJHJldHVyblZhbHVlSXNH
RE9NVHlwZSAmJiAkZnVuY3Rpb25TaWdUeXBlIG5lICJET01PYmplY3QiKSB7CkBAIC0xMDYyLDcg
KzEwNjUsOSBAQAogICAgICAgICAkcGFyYW0tPm5hbWUoInZhbHVlIik7CiAgICAgICAgICRwYXJh
bS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwogICAgICAgICBteSAlYXR0cmli
dXRlcyA9ICgpOwotICAgICAgICAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcyhhdHRyaWJ1dGVz
KTsKKyAgICAgICAgIyBTZXBhcmF0ZSBwYXRjaD8KKyAgICAgICAgIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4NzcKKyAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMoXCVhdHRyaWJ1dGVzKTsKICAgICAgICAgbXkgJGFycmF5UmVmID0gJGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzOwogICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRwYXJhbSk7CiAgICAgICAg
IApAQCAtMTIxNCwxNiArMTIxOSwxNSBAQAogCiAgICAgJGltcGxJbmNsdWRlc3siR09iamVjdEV2
ZW50TGlzdGVuZXIuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET01FdmVudFRh
cmdldC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50VGFyZ2V0UHJp
dmF0ZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50TGlzdGVuZXJQ
cml2YXRlLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgifSA9IDE7CiAKICAgICBteSAkaW1wbCA9IDw8ICJFT0YiOwogc3RhdGljIHZvaWQgd2Via2l0
X2RvbV8ke2RlY2FtZWxpemV9X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCiB7Ci0gICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Ci0gICAgV2ViQ29y
ZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7
aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
LQogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvcmVUYXJnZXQtPmRp
c3BhdGNoRXZlbnQoY29yZUV2ZW50LCBlYyk7CisgICAgKFdlYktpdDo6Y29yZSh0YXJnZXQpKS0+
ZGlzcGF0Y2hFdmVudChXZWJLaXQ6OmNvcmUoZXZlbnQpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKICAg
ICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBkZXNjcmlwdGlv
bik7CkBAIC0xMjMxLDE2ICsxMjM1LDE0IEBACiAgICAgfQogfQogCi1zdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVy
LCBnYm9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJEYXRhKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21fJHtkZWNhbWVsaXplfV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRU
YXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBXZWJLaXRET01FdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsKLSAgICBXZWJDb3JlOjoke2lu
dGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZh
Y2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJl
dHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNl
ckRhdGEpOworICAgIHJldHVybiAoV2ViS2l0Ojpjb3JlKHRhcmdldCkpLT5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZSwgV2ViS2l0Ojpjb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7CiB9CiAK
LXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCiB7Ci0gICAgV2ViQ29yZTo6
JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50
ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJi
bGUpOworICAgIHJldHVybiAoV2ViS2l0Ojpjb3JlKHRhcmdldCkpLT5yZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZSwgV2ViS2l0Ojpjb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCmRpZmYgLXJ1IGYvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGRvbWRvbXdpbmRvdy5jIGQvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRv
dy5jCi0tLSBmL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cuYwkyMDEx
LTAzLTIxIDEzOjQyOjA3LjAwMDAwMDAwMCAtMDUwMAorKysgZC9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMJMjAxMi0wMi0xOCAxNTowMTo0NS45NDYxMzE1NjggLTA2
MDAKQEAgLTEwNSw3ICsxMDUsNyBAQAogewogICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0g
d2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKICAgICBpZiAoc3RhdHVz
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5k
b21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBm
aXh0dXJlKTsKKyAgICAgICAgLy93ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlz
dGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwgImNsaWNr
IiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7CiAKICAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CiAgICAgICAgIGd0a190ZXN0
X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAxLCAwKTsKQEAgLTEy
NSw3ICsxMjUsNyBAQAogCiAgICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OwogCi0g
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01f
RVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2Fk
ZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKyAgICAvL3dlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5k
b21XaW5kb3cpLCAibG9hZCIsIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4
dHVyZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQi
LCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwogICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxv
YWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJlKTsKIApAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5kb21X
aW5kb3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJVF9E
T01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCAi
Y2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBmYWxzZSwgZml4dHVyZSk7CisgICAgICAg
IC8vd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01f
RVZFTlRfVEFSR0VUKGVsZW1lbnQpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBm
YWxzZSwgZml4dHVyZSk7CiAgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFM
U0UpOwogICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgZXZlbnQsIE5VTEwpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131302</attachid>
            <date>2012-03-12 02:35:43 -0700</date>
            <delta_ts>2012-03-16 00:55:16 -0700</delta_ts>
            <desc>Event Listeners as first class GObjects.</desc>
            <filename>first-class-event-listeners.patch</filename>
            <type>text/plain</type>
            <size>29306</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">ZGlmZiAtcnUgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5wcmkKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpCTIwMTItMDMtMDggMTk6MTM6MDIuMDAwMDAwMDAwIC0wNjAwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkyMDEyLTAzLTExIDA1OjIwOjAwLjQxMzU3MzQyOCAt
MDUwMApAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgJCRQV0QvZG9tL0Vycm9yRXZlbnQuaWRsIFwK
ICAgICAkJFBXRC9kb20vRXZlbnQuaWRsIFwKICAgICAkJFBXRC9kb20vRXZlbnRFeGNlcHRpb24u
aWRsIFwKLSMgICAgJCRQV0QvZG9tL0V2ZW50TGlzdGVuZXIuaWRsIFwKKyAgICAkJFBXRC9kb20v
RXZlbnRMaXN0ZW5lci5pZGwgXAogIyAgICAkJFBXRC9kb20vRXZlbnRUYXJnZXQuaWRsIFwKICAg
ICAkJFBXRC9kb20vSGFzaENoYW5nZUV2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL0tleWJvYXJk
RXZlbnQuaWRsIFwKZGlmZiAtcnUgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCTIwMTItMDMtMTAgMjE6Mzk6MjUuMDAwMDAwMDAwIC0wNjAw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JMjAxMi0wMy0xMiAwMjox
NzowMi42NDA1MTA5OTIgLTA1MDAKQEAgLTcyMyw2ICs3MjMsNyBAQAogCSQoV2ViQ29yZSkvZG9t
L0VudGl0eVJlZmVyZW5jZS5pZGwgXAogCSQoV2ViQ29yZSkvZG9tL0Vycm9yRXZlbnQuaWRsIFwK
IAkkKFdlYkNvcmUpL2RvbS9FdmVudC5pZGwgXAorCSQoV2ViQ29yZSkvZG9tL0V2ZW50TGlzdGVu
ZXIuaWRsIFwKIAkkKFdlYkNvcmUpL2RvbS9FdmVudEV4Y2VwdGlvbi5pZGwgXAogCSQoV2ViQ29y
ZSkvZG9tL0hhc2hDaGFuZ2VFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvZG9tL0tleWJvYXJkRXZl
bnQuaWRsIFwKZGlmZiAtcnUgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5h
bQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCTIw
MTItMDItMjIgMjA6Mzg6NDYuMDAwMDAwMDAwIC0wNjAwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0JMjAxMi0wMy0xMSAwMzoyMzo0My44NTQwNDIz
NjkgLTA1MDAKQEAgLTYxLDYgKzYxLDggQEAKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0
RE9NRW50aXR5UmVmZXJlbmNlUHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2Vi
S2l0RE9NRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRQ
cml2YXRlLmggXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudExpc3RlbmVy
LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50TGlzdGVuZXJQcml2
YXRlLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudFRhcmdldFByaXZh
dGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZpbGUuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRmlsZUxpc3QuY3BwIFwKQEAgLTI3OCw2ICsyODAs
NyBAQAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FbGVtZW50LmggXAogCURlcml2
ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FbnRpdHlSZWZlcmVuY2UuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9X
ZWJLaXRET01FdmVudExpc3RlbmVyLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRE
T01NZXNzYWdlUG9ydC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTW91c2VF
dmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTmFtZWROb2RlTWFwLmgg
XApkaWZmIC1ydSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50
TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5jcHAJMjAxMS0wNi0zMCAxNjo1MToxMy4wMDAwMDAwMDAgLTA1MDAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5l
ci5jcHAJMjAxMi0wMy0xMiAwMzoxMzozMy4yNDMwMzk2OTQgLTA1MDAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICogIENvcHly
aWdodCAoQykgMjAxMiwgQyBBbnRob255IFJpc2luZ2VyIDxhbnRob255QHh0ZngubWU+CiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0yMyw1OSArMjQsMTE0IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudC5oIgogI2luY2x1ZGUgIndl
YmtpdC9XZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudExpc3RlbmVy
UHJpdmF0ZS5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRl
ZiB2b2lkICgqR09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjaykoR09iamVjdCosIFdlYktpdERP
TUV2ZW50Kiwgdm9pZCopOwotCi1HT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlz
dGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBk
b21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJE
YXRhKQorR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKCkKICAgICA6
IEV2ZW50TGlzdGVuZXIoR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICwgbV9vYmplY3Qo
b2JqZWN0KQotICAgICwgbV9jb3JlVGFyZ2V0KHRhcmdldCkKLSAgICAsIG1fZG9tRXZlbnROYW1l
KGRvbUV2ZW50TmFtZSkKLSAgICAsIG1faGFuZGxlcihoYW5kbGVyKQotICAgICwgbV9jYXB0dXJl
KGNhcHR1cmUpCi0gICAgLCBtX3VzZXJEYXRhKHVzZXJEYXRhKQorICAgICwgbV9saXN0ZW5lcihO
VUxMKQorICAgICwgbV9oYW5kbGVyKE5VTEwpCiB7Ci0gICAgQVNTRVJUKG1fY29yZVRhcmdldCk7
Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYob2JqZWN0LCByZWludGVycHJldF9jYXN0PEdXZWFrTm90
aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKIEdPYmplY3RFdmVudExpc3RlbmVyOjp+R09iamVjdEV2ZW50TGlzdGVuZXIoKQog
ewotICAgIGlmICghbV9jb3JlVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0gICAgZ19vYmplY3Rf
d2Vha191bnJlZihtX29iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVj
dEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGlm
IChtX2xpc3RlbmVyKQorICAgIHsKKyAgICAgICAgZ19vYmplY3Rfd2Vha191bnJlZihHX09CSkVD
VChtX2xpc3RlbmVyKSwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50
TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX29i
amVjdF91bnJlZihtX2xpc3RlbmVyKTsKKyAgICB9CisKKyAgICBpZiAobV9oYW5kbGVyKQorICAg
IHsKKyAgICAgICAgZ19jbG9zdXJlX3JlbW92ZV9maW5hbGl6ZV9ub3RpZmllcihtX2hhbmRsZXIs
IHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KEdPYmplY3RFdmVudExpc3Rl
bmVyOjpnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spKTsKKyAgICAgICAgZ19jbG9zdXJlX3VucmVm
KG1faGFuZGxlcik7CisgICAgfQorCisgICAgbV9saXN0ZW5lciA9IE5VTEw7CisgICAgbV9oYW5k
bGVyID0gTlVMTDsKIH0KIAotdm9pZCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ry
b3llZCgpCit2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkKGdwb2lu
dGVyIG9iamVjdCkKIHsKLSAgICBBU1NFUlQobV9jb3JlVGFyZ2V0KTsKLQotICAgIC8vIFdlIG11
c3Qgc2V0IG1fY29yZVRhcmdldCB0byBudWxsLCBiZWNhdXNlIHJlbW92ZUV2ZW50TGlzdGVuZXIK
LSAgICAvLyBtYXkgY2FsbCB0aGUgZGVzdHJ1Y3RvciBhcyBhIHNpZGUgZWZmZWN0IGFuZCB3ZSBt
dXN0IGJlIGluIHRoZQotICAgIC8vIHByb3BlciBzdGF0ZSB0byBwcmV2ZW50IGdfb2JqZWN0X3dl
YWtfdW5yZWYuCi0gICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IG1fY29yZVRhcmdldDsKLSAgICBt
X2NvcmVUYXJnZXQgPSAwOwotICAgIHRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihtX2RvbUV2
ZW50TmFtZS5kYXRhKCksIHRoaXMsIG1fY2FwdHVyZSk7CisgICAgaWYgKChncG9pbnRlcikgbV9s
aXN0ZW5lciA9PSBvYmplY3QpCisgICAgeworICAgICAgICBtX2xpc3RlbmVyID0gTlVMTDsKKyAg
ICB9CisgICAgZWxzZSBpZiAoKGdwb2ludGVyKSBtX2hhbmRsZXIgPT0gb2JqZWN0KQorICAgIHsK
KyAgICAgICAgbV9oYW5kbGVyID0gTlVMTDsKKyAgICB9CiB9CiAKIHZvaWQgR09iamVjdEV2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZl
bnQpCiB7CisgICAgaWYgKCFtX2xpc3RlbmVyKQorICAgIHsKKyAgICAgICAgLyoqIFNvbWV0aGlu
ZyBpcyB0ZXJyaWJseSB3cm9uZyEKKyAgICAgICAgICoKKyAgICAgICAgICogT3VyIEdPYmplY3Qg
bGlzdGVuZXIgaGFzIHN1ZmZlcmVkIGEgcHJlbWF0dXJlIGRlYXRoLCBhbmQgd29uJ3QgYmUKKyAg
ICAgICAgICogcmVwbGFjZWQuIFJhdGhlciB0aGFuIGxlYWsgKEpTIGRvZXMgdGhpcyEpIG9yIHNl
Z2ZhdWx0L2V0YyBsYXRlcgorICAgICAgICAgKiBvbiwgbGV0J3MganVzdCBwYXJ0IHdheXMgcmln
aHQgbm93LiBJdCdzIGJlZW4gZnVuISBBZGlvcyA6LSkKKyAgICAgICAgICovCisgICAgICAgIGV2
ZW50LT5jdXJyZW50VGFyZ2V0KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQtPnR5cGUoKSwg
dGhpcywgIShldmVudC0+YnViYmxlcygpKSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwobV9s
aXN0ZW5lcik7CisgICAgfQorCisgICAgZ19yZXR1cm5faWZfZmFpbChtX2hhbmRsZXIpOworCiAg
ICAgV2ViS2l0RE9NRXZlbnQqIGdvYmplY3RFdmVudCA9IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0
OjpraXQoZXZlbnQpKTsKLSAgICByZWludGVycHJldF9jYXN0PEdPYmplY3RFdmVudExpc3RlbmVy
Q2FsbGJhY2s+KG1faGFuZGxlcikobV9vYmplY3QsIGdvYmplY3RFdmVudCwgbV91c2VyRGF0YSk7
CisgICAgR1ZhbHVlIHBhcmFtcyA9IEdfVkFMVUVfSU5JVDsKKworICAgIGdfdmFsdWVfaW5pdCgm
cGFyYW1zLCBXRUJLSVRfVFlQRV9ET01fRVZFTlQpOworICAgIGdfdmFsdWVfc2V0X29iamVjdCgm
cGFyYW1zLCBnb2JqZWN0RXZlbnQpOworICAgIGdfY2xvc3VyZV9pbnZva2UobV9oYW5kbGVyLCBO
VUxMLCAxLCAmcGFyYW1zLCBOVUxMKTsKKwogICAgIGdfb2JqZWN0X3VucmVmKGdvYmplY3RFdmVu
dCk7CiB9CiAKLWJvb2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIpCit2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpzZXRMaXN0
ZW5lcihXZWJLaXRET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBpZiAobGlzdGVu
ZXIpCisgICAgeworICAgICAgICAvLyAodHJhbnNmZXIgZnVsbCksIHNpbWlsYXIgdG8gZ194eF9z
aW5rKCkgW2Zsb2F0aW5nXQorICAgICAgICBpZiAoR19PQkpFQ1QobGlzdGVuZXIpLT5yZWZfY291
bnQgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBnX29iamVjdF9yZWYobGlzdGVuZXIpOwor
ICAgICAgICB9CisgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGxpc3RlbmVyKSwg
cmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmpl
Y3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIGlmIChtX2xpc3RlbmVy
KQorICAgIHsKKyAgICAgICAgZ19vYmplY3Rfd2Vha191bnJlZihHX09CSkVDVChtX2xpc3RlbmVy
KSwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6Omdv
YmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX29iamVjdF91bnJlZiht
X2xpc3RlbmVyKTsKKyAgICB9CisKKyAgICBtX2xpc3RlbmVyID0gbGlzdGVuZXI7Cit9CisKK3Zv
aWQgR09iamVjdEV2ZW50TGlzdGVuZXI6OnNldEhhbmRsZXIoR0Nsb3N1cmUqIGhhbmRsZXIpCiB7
Ci0gICAgaWYgKGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKiBnb2JqZWN0RXZlbnRMaXN0ZW5l
ciA9IEdPYmplY3RFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5lcikpCi0gICAgICAgIHJldHVy
biBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9vYmplY3QgJiYgbV9oYW5kbGVy
ID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX2hhbmRsZXI7CisgICAgaWYgKGhhbmRsZXIpCisg
ICAgeworICAgICAgICBnX2Nsb3N1cmVfcmVmKGhhbmRsZXIpOworICAgICAgICBnX2Nsb3N1cmVf
c2luayhoYW5kbGVyKTsKKyAgICAgICAgZ19jbG9zdXJlX2FkZF9maW5hbGl6ZV9ub3RpZmllciho
YW5kbGVyLCB0aGlzLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSk7CisgICAgfQorCisgICAgaWYg
KG1faGFuZGxlcikKKyAgICB7CisgICAgICAgIGdfY2xvc3VyZV9yZW1vdmVfZmluYWxpemVfbm90
aWZpZXIobV9oYW5kbGVyLCB0aGlzLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSk7CisgICAgICAg
IGdfY2xvc3VyZV91bnJlZihtX2hhbmRsZXIpOworICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX2hhbmRsZXIgPSBoYW5kbGVyOwogfQogCiB9CmRpZmYgLXJ1IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAkyMDExLTA2LTMw
IDE2OjUxOjEzLjAwMDAwMDAwMCAtMDUwMAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgJMjAxMi0wMy0xMiAwMjoxMDo1Mi44MjM4NjMw
MzEgLTA1MDAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSBJZ2FsaWEgUy5MLgorICogIENvcHlyaWdodCAoQykgMjAxMiwgQyBBbnRob255IFJpc2luZ2Vy
IDxhbnRob255QHh0ZngubWU+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMyw1OCArMjQsNTIg
QEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgX0dPYmplY3Qg
R09iamVjdDsKLXR5cGVkZWYgdm9pZCAoKkdDYWxsYmFjaykgKHZvaWQpOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUV2ZW50TGlzdGVuZXIgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lcjsKK3R5cGVk
ZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xvc3VyZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKKwogcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdPYmplY3RFdmVudExpc3RlbmVyPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5l
cik7CisgICAgfQogCi0gICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBv
YmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nh
bGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCisgICAgc3Rh
dGljIHZvaWQgZ29iamVjdERlc3Ryb3llZENhbGxiYWNrKEdPYmplY3RFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciwgdm9pZCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgUmVmUHRyPEdPYmplY3RFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVuZXIob2Jq
ZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgdXNlckRhdGEp
KSk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1l
LCBsaXN0ZW5lci5yZWxlYXNlKCksIHVzZUNhcHR1cmUpOworICAgICAgICBsaXN0ZW5lci0+Z29i
amVjdERlc3Ryb3llZChvYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHJlbW92ZUV2
ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCisg
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpCiAg
ICAgewotICAgICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCB0YXJnZXQsIGRv
bUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgMCk7Ci0gICAgICAgIHJldHVybiB0YXJn
ZXQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCAma2V5LCB1c2VDYXB0dXJlKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGdvYmplY3REZXN0cm95ZWRDYWxsYmFjayhHT2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIs
IEdPYmplY3QqKQorICAgIFdlYktpdERPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKCkKICAgICB7
Ci0gICAgICAgIGxpc3RlbmVyLT5nb2JqZWN0RGVzdHJveWVkKCk7CisgICAgICAgIHJldHVybiBt
X2xpc3RlbmVyOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBHT2JqZWN0RXZlbnRMaXN0ZW5l
ciogY2FzdChjb25zdCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICBHQ2xvc3VyZSogaGFu
ZGxlcigpCiAgICAgewotICAgICAgICByZXR1cm4gbGlzdGVuZXItPnR5cGUoKSA9PSBHT2JqZWN0
RXZlbnRMaXN0ZW5lclR5cGUKLSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y29uc3QgR09iamVj
dEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcikKLSAgICAgICAgICAgIDogMDsKKyAgICAgICAgcmV0
dXJuIG1faGFuZGxlcjsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBFdmVudExpc3RlbmVyJiBvdGhlcik7CisgICAgdm9pZCBzZXRMaXN0ZW5lcihXZWJLaXRET01F
dmVudExpc3RlbmVyKiBsaXN0ZW5lcik7CisgICAgdm9pZCBzZXRIYW5kbGVyKEdDbG9zdXJlKiBo
YW5kbGVyKTsKIAogcHJpdmF0ZToKLSAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0Kiwg
RXZlbnRUYXJnZXQqLCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVy
LCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJEYXRhKTsKKyAgICBHT2JqZWN0RXZlbnRMaXN0ZW5l
cigpOwogICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwotICAgIHZvaWQgZ29iamVjdERlc3Ry
b3llZCgpOwotCisgICAgdm9pZCBnb2JqZWN0RGVzdHJveWVkKHZvaWQqIG9iamVjdCk7CiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCop
OwogCi0gICAgR09iamVjdCogbV9vYmplY3Q7CisgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lciog
bV9saXN0ZW5lcjsKKyAgICBHQ2xvc3VyZSogbV9oYW5kbGVyOwogCi0gICAgLy8gV2UgZG8gbm90
IG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbV9jb3JlVGFyZ2V0LCBiZWNhdXNlCi0g
ICAgLy8gd2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgR09iamVjdCBhbmQgdGh1cyB0aGUgbV9jb3Jl
VGFyZ2V0IG9iamVjdCBpcyBhbGl2ZS4KLSAgICBFdmVudFRhcmdldCogbV9jb3JlVGFyZ2V0Owot
ICAgIENTdHJpbmcgbV9kb21FdmVudE5hbWU7Ci0gICAgR0NhbGxiYWNrIG1faGFuZGxlcjsKLSAg
ICBib29sIG1fY2FwdHVyZTsKLSAgICB2b2lkKiBtX3VzZXJEYXRhOwogfTsKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC1ydSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NQ3VzdG9tLmNwcAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUN1c3RvbS5jcHAJMjAxMS0wOS0yNyAwNzo1OToyOS4wMDAwMDAwMDAgLTA1MDAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uY3BwCTIw
MTItMDMtMTEgMTM6MTc6NDcuMDE2MzgxNDgyIC0wNTAwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIs
IEMgQW50aG9ueSBSaXNpbmdlciA8YW50aG9ueUB4dGZ4Lm1lPgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgIldlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCIKKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRM
aXN0ZW5lci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC02MSw0ICs2NCw1MyBA
QAogICAgIGdfd2FybmluZygiVGhlIG9uZm9ybWlucHV0IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4g
cmVtb3ZlZCBmcm9tIHRoZSBET00gc3BlYywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7
CiB9CiAKKy8qIEV4dGVuZGVkIEFQSSAqLworV2ViS2l0RE9NRXZlbnRMaXN0ZW5lcioKK3dlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmLCBHQ2xvc3VyZSogaGFuZGxlcikKK3sKKyAgICAvKiogUmVmUHRyIHVzZSBpcyBpbnRlbnRp
b25hbCEKKyAgICAgKgorICAgICAqIGtpdCgpIHdyYXBwZXJzICphbHdheXMqIHJlZigpIHRoZSBj
b3JlT2JqZWN0OyB0aGlzIGlzIGEgcHJvYmxlbSBmb3IKKyAgICAgKiAodHJhbnNmZXIgZnVsbCkg
ZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbWVhbnQgdG8gcGFzcyBvd25lcnNoaXAKKyAgICAg
KiB0byB0aGUgY2FsbGVyIChyZWYgPT0gMSkuICBUaHVzLCB3ZSBsZWFrL2R1cGxpY2F0ZSB0aGUg
cG9pbnRlciB3aXRoCisgICAgICogZ2V0KCksIGFuZCBwYXNzIHRoYXQgdG8ga2l0KCkuICBPbmNl
IHRoZSBSZWZQdHIgZ29lcyBvdXQgb2Ygc2NvcGUgaXQKKyAgICAgKiBkZXJlZigpICphZ2Fpbiog
Li4uIHNldHRsaW5nIHRoZSByZWZfY291bnQgYmFjayB0byAxLgorICAgICAqCisgICAgICogV2Ug
c2hvdWxkIG1heWJlIGV4cGxvcmUgaW1wbGVtZW50aW5nOgorICAgICAqCisgICAgICogV2ViS2l0
RE9NT2IqIHdyYXBPYihQYXNzUmVmUHRyPFdlYkNvcmU6Ok9iPiBvYikKKyAgICAgKiB7CisgICAg
ICogICAgIFJlZlB0cjxXZWJDb3JlOjpPYj4gPSBvYjsKKyAgICAgKiAgICAgcmV0dXJuIFdFQktJ
VF9ET01fT0IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9PQiwgImNvcmUtb2JqZWN0Iiwg
b2IuZ2V0KCksIE5VTEwpKTsKKyAgICAgKiB9CisgICAgICoKKyAgICAgKiAuLi4gaW5zdGVhZCwg
d2hpY2ggYWNjZXB0cyBwYXNzZWQvdHJhbnNmZXJzIHJlZnMgcHJvcGVybHkuCisgICAgICovCisg
ICAgUmVmUHRyPFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyPiBjb3JlTGlzdGVuZXIgPSBX
ZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCk7CisgICAgV2ViS2l0RE9NRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBXZWJLaXQ6OmtpdChjb3JlTGlzdGVuZXIuZ2V0KCkpOwor
CisgICAgY29yZUxpc3RlbmVyLT5zZXRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgY29yZUxpc3Rl
bmVyLT5zZXRIYW5kbGVyKGhhbmRsZXIpOworCisgICAgcmV0dXJuIGxpc3RlbmVyOworfQorCit2
b2lkCit3ZWJraXRfZG9tX2V2ZW50X2xpc3RlbmVyX3NldF9oYW5kbGVyKFdlYktpdERPTUV2ZW50
TGlzdGVuZXIqIHNlbGYsIEdDbG9zdXJlKiBoYW5kbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXIqIGNvcmVMaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyKj4oV0VCS0lUX0RP
TV9PQkpFQ1Qoc2VsZiktPmNvcmVPYmplY3QpOworCisgICAgZ19yZXR1cm5faWZfZmFpbChjb3Jl
TGlzdGVuZXIpOworICAgIGNvcmVMaXN0ZW5lci0+c2V0SGFuZGxlcihoYW5kbGVyKTsKK30KIAor
R0Nsb3N1cmUqCit3ZWJraXRfZG9tX2V2ZW50X2xpc3RlbmVyX2dldF9oYW5kbGVyKFdlYktpdERP
TUV2ZW50TGlzdGVuZXIqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXIqIGNvcmVMaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qoc2VsZiktPmNvcmVPYmplY3QpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUxp
c3RlbmVyLCAwKTsKKyAgICByZXR1cm4gY29yZUxpc3RlbmVyLT5oYW5kbGVyKCk7Cit9CmRpZmYg
LXJ1IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaAkyMDExLTA5
LTI3IDA3OjU5OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5oCTIwMTItMDMtMDkgMDE6MTU6MjEuMDAwMDAwMDAw
IC0wNjAwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIsIEMgQW50aG9ueSBSaXNpbmdlciA8YW50aG9u
eUB4dGZ4Lm1lPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsOCBAQAogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvbWRl
ZmluZXMuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX0dDbG9zdXJlIEdDbG9zdXJlOworCiBHX0JFR0lO
X0RFQ0xTCiAKIFdFQktJVF9BUEkgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2lzX2VkaXRlZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Kik7CkBAIC0zMyw2
ICszNiwzNyBAQAogV0VCS0lUX0FQSSB2b2lkIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
ZGlzcGF0Y2hfZm9ybV9jaGFuZ2UoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKIFdF
QktJVF9BUEkgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2Rpc3BhdGNoX2Zvcm1f
aW5wdXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKIAorLyogRXh0ZW5kZWQgQVBJ
ICovCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50X2xpc3RlbmVyOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAaGFuZGxlcjogKGFsbG93LW5vbmUp
OiBBbiBbdW5dc3VuayAjR0Nsb3N1cmUKKyAqCisgKiB0cmFuc2Zlci9jcmVhdGUgbmV3ICNXZWJL
aXRET01FdmVudExpc3RlbmVyLCBvcHRpb25hbGx5IGJvdW5kIHRvIEBoYW5kbGVyIGlmIG5vdCAl
TlVMTAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogbmV3ICNXZWJLaXRET01FdmVu
dExpc3RlbmVyCisgKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lciogd2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIEdDbG9zdXJlKiBoYW5kbGVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2xpc3Rl
bmVyX3NldF9oYW5kbGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50TGlzdGVuZXIKKyAq
IEBoYW5kbGVyOiAoYWxsb3ctbm9uZSk6IEFuIFt1bl1zdW5rICNHQ2xvc3VyZQorICoKKyAqIHNl
dHMsIG9yIHVuc2V0cyBpZiBAaGFuZGxlciBpcyAlTlVMTCwgdGhlIGNhbGxiYWNrIGJvdW5kIHRv
IEBzZWxmCisgKi8KK1dFQktJVF9BUEkgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X2xpc3RlbmVyX3Nl
dF9oYW5kbGVyKFdlYktpdERPTUV2ZW50TGlzdGVuZXIqIHNlbGYsIEdDbG9zdXJlKiBoYW5kbGVy
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2xpc3RlbmVyX2dldF9oYW5kbGVyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUV2ZW50TGlzdGVuZXIKKyAqCisgKiBnZXRzIHRoZSBjYWxsYmFj
ay9oYW5kbGVyIGJvdW5kIHRvIEBzZWxmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OgorICovCitXRUJLSVRfQVBJIEdDbG9zdXJlKiB3ZWJraXRfZG9tX2V2ZW50X2xpc3RlbmVyX2dl
dF9oYW5kbGVyKFdlYktpdERPTUV2ZW50TGlzdGVuZXIqIHNlbGYpOworCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYKZGlmZiAtcnUgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuY3BwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCTIwMTEtMDYtMzAgMTY6NTE6MTMuMDAwMDAwMDAw
IC0wNTAwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZl
bnRUYXJnZXQuY3BwCTIwMTItMDMtMDggMDA6MzI6MjkuMDAwMDAwMDAwIC0wNjAwCkBAIC0zMyw2
ICszMyw3IEBACiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRMaXN0ZW5lci5oIgogCiB0eXBlZGVm
IFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UgV2ViS2l0RE9NRXZlbnRUYXJnZXRJbnRlcmZhY2U7
CiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQpAQCAtNzUsMjEgKzc2LDIwIEBACiAg
ICAgICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCh0YXJnZXQsIGV2ZW50LCBlcnJvcik7CiB9CiAK
LWdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFj
ayBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJEYXRhKQorZ2Jvb2xlYW4g
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCiB7Ci0KICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBGQUxTRSk7CiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CiAKICAgICBXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9J
RkFDRSh0YXJnZXQpOwogCiAgICAgaWYgKGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIpCi0gICAg
ICAgIHJldHVybiBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCBidWJibGUsIHVzZXJEYXRhKTsKKyAgICAgICAgcmV0dXJuIGlmYWNlLT5hZGRfZXZl
bnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIAog
ICAgIHJldHVybiBGQUxTRTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK2di
b29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktpdERP
TUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQogewogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlRfVEFSR0VUKHRhcmdldCksIEZB
TFNFKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChldmVudE5hbWUsIEZBTFNFKTsKQEAgLTk3
LDcgKzk3LDcgQEAKICAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQpOwogCiAgICAgaWYgKGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIpCi0gICAgICAgIHJldHVybiBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUpOworICAgICAgICBy
ZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgbGlz
dGVuZXIsIHVzZUNhcHR1cmUpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQpkaWZmIC1ydSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgJ
MjAxMS0wNi0zMCAxNjo1MToxMy4wMDAwMDAwMDAgLTA1MDAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oCTIwMTItMDMtMDggMDA6MzE6
NTguMDAwMDAwMDAwIC0wNjAwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQyBBbnRob255IFJpc2lu
Z2VyIDxhbnRob255QHh0ZngubWU+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00MSwxNSArNDIs
MTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVu
dCAgICAgICAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKTsKIAotICAgIGdib29sZWFuICAgICAgKCogYWRkX2V2
ZW50X2xpc3RlbmVyKShXZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICpldmVudE5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAg
ICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgdXNlckRhdGEpOwotICAg
IGdib29sZWFuICAgICAgKCogcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKShXZWJLaXRET01FdmVudFRh
cmdldCAqdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAg
ICAgICAgIGJ1YmJsZSk7CisgICAgZ2Jvb2xlYW4gICAgICAoKiBhZGRfZXZlbnRfbGlzdGVuZXIp
KFdlYktpdERPTUV2ZW50VGFyZ2V0ICAgKnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAqZXZlbnROYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudExpc3Rl
bmVyICpsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2Jvb2xlYW4gICAgICAgICAgICAgICAgdXNlQ2FwdHVyZSk7CisgICAgZ2Jvb2xlYW4gICAgICAo
KiByZW1vdmVfZXZlbnRfbGlzdGVuZXIpKFdlYktpdERPTUV2ZW50VGFyZ2V0ICAgKnRhcmdldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAg
ICAgICAgICAgICAqZXZlbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRET01FdmVudExpc3RlbmVyICpsaXN0ZW5lciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAg
dXNlQ2FwdHVyZSk7CiB9OwogCiAKQEAgLTU5LDE2ICs1OSwxNSBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZl
bnQgICAgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKIAotV0VC
S0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAg
ICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAg
ICAgICAgICAgICB1c2VyRGF0YSk7Ci0KLVdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAq
dGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudE5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ICAgICAgICAgICAgIGJ1YmJsZSk7CitXRUJLSVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQgICAqdGFy
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgKmV2ZW50TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRET01FdmVudExpc3RlbmVyICpsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAg
ICAgICAgICB1c2VDYXB0dXJlKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICAg
KnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICpldmVudE5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0RE9NRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jv
b2xlYW4gICAgICAgICAgICAgICAgdXNlQ2FwdHVyZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAt
cnUgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVj
dC5wbQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JH
T2JqZWN0LnBtCTIwMTItMDMtMTIgMDI6MzM6MjguMzg4MjU4MjgyIC0wNTAwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JMjAxMi0w
My0xMiAwMjo1MToyMC44MDE4ODIwMzcgLTA1MDAKQEAgLTQsNiArNCw3IEBACiAjIENvcHlyaWdo
dCAoQykgMjAwOSBBZGFtIERpbmdsZSA8YWRhbUB5b3JiYS5vcmc+CiAjIENvcHlyaWdodCAoQykg
MjAwOSBKaW0gTmVsc29uIDxqaW1AeW9yYmEub3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhIFMuTC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyLCBDIEFudGhvbnkgUmlzaW5nZXIg
PGFudGhvbnlAeHRmeC5tZT4KICMKICMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTMzLDggKzUzNCw3IEBACiAg
ICAgcHVzaChAdHh0U2V0UHJvcHMsICR0eHRTZXRQcm9wcyk7CiAKICAgICBmb3JlYWNoIG15ICRh
dHRyaWJ1dGUgKEByZWFkYWJsZVByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBuZSAiRXZlbnRMaXN0ZW5lciIgJiYKLSAgICAgICAgICAgICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBuZSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKKyAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBuZSAiTWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciIpIHsKICAgICAgICAgICAgIEdlbmVyYXRlUHJvcGVydHkoJGF0dHJpYnV0ZSwgJGlu
dGVyZmFjZU5hbWUsIFxAd3JpdGVhYmxlUHJvcGVydGllcyk7CiAgICAgICAgIH0KICAgICB9CkBA
IC02ODQsNyArNjg0LDYgQEAKICAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxv
bmcgbG9uZyI7CiAgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CiAg
ICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwotICAgIHJldHVybiAiIiBp
ZiAkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7CiAgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIjsKICAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVuc2ln
bmVkIGNoYXIiOwogICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKQEAgLTcz
OSwxMCArNzM4LDE3IEBACiAKICAgICBteSBAY2FsbEltcGxQYXJhbXM7CiAKKyAgICAjIEJsYXRh
bnQgaGFjazsgZXZlcnkgb3RoZXIgd2F5IEkgdHJpZWQgd2FzIG1vcmUgZGlzZ3VzdGluZywgZXZl
bgorICAgICMgZm9yY2luZyBhIFN1cHBsZW1lbnQ9R09iamVjdEV2ZW50TGlzdGVuZXIgKG5lZWRz
IHN0YXRpYyBmdW5jdGlvbgorICAgICMgb3ZlcmxvYWRpbmcgYW4gaW5zdGFuY2UgbWV0aG9kIC4u
LikKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50TGlzdGVuZXIiICYmICRmdW5jdGlv
blNpZ05hbWUgZXEgImhhbmRsZUV2ZW50IikgeyAKKyAgICAgICAgJGltcGxJbmNsdWRlc3siR09i
amVjdEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAY2FsbEltcGxQYXJhbXMs
ICIwIik7CisgICAgfQorCiAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfSkgewogICAgICAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOwotICAg
ICAgICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIgfHwgJHBhcmFtSURMVHlw
ZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKLSAgICAgICAgICAgICMgRXZlbnRMaXN0
ZW5lcnMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlLgorICAgICAgICBpZiAoJHBhcmFtSURMVHlwZSBl
cSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBhZGRJbmNsdWRlSW5Cb2R5KCRwYXJhbUlETFR5cGUpOwpAQCAtMTA0NCw3
ICsxMDUwLDYgQEAKICAgICBUT1A6CiAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRh
Tm9kZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgaWYgKFNraXBBdHRyaWJ1dGUoJGF0dHJpYnV0
ZSkgfHwKLSAgICAgICAgICAgICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiRXZlbnRM
aXN0ZW5lciIgfHwKICAgICAgICAgICAgICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAi
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKICAgICAgICAgICAgIG5leHQgVE9QOwogICAgICAg
ICB9CkBAIC0xMDkzLDcgKzEwOTgsNyBAQAogICAgICAgICAkcGFyYW0tPm5hbWUoInZhbHVlIik7
CiAgICAgICAgICRwYXJhbS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwogICAg
ICAgICBteSAlYXR0cmlidXRlcyA9ICgpOwotICAgICAgICAkcGFyYW0tPmV4dGVuZGVkQXR0cmli
dXRlcyhcJWF0dHJpYnV0ZXMpOworICAgICAgICAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcygi
YXR0cmlidXRlcyIpOwogICAgICAgICBteSAkYXJyYXlSZWYgPSAkZnVuY3Rpb24tPnBhcmFtZXRl
cnM7CiAgICAgICAgIHB1c2goQCRhcnJheVJlZiwgJHBhcmFtKTsKICAgICAgICAgCkBAIC0xMTgz
LDMyICsxMTg4LDI5IEBACiAKICAgICAkaW1wbEluY2x1ZGVzeyJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50VGFyZ2V0LmgifSA9
IDE7CisgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgifSA9
IDE7CisgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCJ9
ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsK
IAogICAgIG15ICRpbXBsID0gPDwgIkVPRiI7CiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tXyR7ZGVj
YW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKIHsKLSAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKLSAgICBXZWJDb3JlOjoke2ludGVy
ZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VO
YW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotCiAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dChjb3JlRXZlbnQsIGVjKTsKKyAgICAoV2ViS2l0Ojpjb3JlKHRhcmdldCkpLT5kaXNwYXRjaEV2
ZW50KFdlYktpdDo6Y29yZShldmVudCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKICAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKICAgICB9CiB9CiAKLXN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nh
bGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEpCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktp
dERPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQogewotICAg
IFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgYnViYmxlLCB1c2VyRGF0YSk7CisgICAgcmV0dXJuIChXZWJLaXQ6OmNvcmUodGFyZ2V0KSkt
PmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBXZWJLaXQ6OmNvcmUobGlzdGVuZXIpLCB1c2VD
YXB0dXJlKTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQorc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBX
ZWJLaXRET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsK
LSAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOwotICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIGJ1YmJsZSk7CisgICAgcmV0dXJuIChXZWJLaXQ6OmNvcmUodGFyZ2V0KSktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBXZWJLaXQ6OmNvcmUobGlzdGVuZXIpLCB1c2VD
YXB0dXJlKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChX
ZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKZGlmZiAtcnUgYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZG9tZG9td2luZG93LmMKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRv
bXdpbmRvdy5jCTIwMTEtMTAtMjQgMTI6MTY6MDEuMDAwMDAwMDAwIC0wNTAwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cuYwkyMDEyLTAzLTExIDAzOjE5OjUw
LjAxNTg5ODM5NiAtMDUwMApAQCAtMTA1LDcgKzEwNSw3IEBACiB7CiAgICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwog
ICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFS
R0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxi
YWNrKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICAvL3dlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21X
aW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0
dXJlKTsKIAogICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKICAg
ICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyks
IDEsIDApOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBmaXh0dXJlLT5kb21XaW5kb3cgPSBk
b21XaW5kb3c7CiAKLSAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVu
ZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwgImxvYWQiLCBH
X0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOworICAgIC8vd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFS
R0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFj
ayksIGZhbHNlLCBmaXh0dXJlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRv
dywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CiAgICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0sobG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOwogCkBAIC0xNzYsNyAr
MTc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeHR1cmUtPmRvbVdpbmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwgRkFM
U0UsIEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMSwgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJH
RVQoZWxlbWVudCksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiksIGZhbHNlLCBmaXh0
dXJlKTsKKyAgICAgICAgLy93ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVu
ZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksICJjbGljayIsIEdfQ0FMTEJBQ0so
Y2xpY2tlZF9jYiksIGZhbHNlLCBmaXh0dXJlKTsKICAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+
Y2xpY2tlZCA9PSBGQUxTRSk7CiAgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3Bh
dGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCBldmVudCwgTlVMTCk7
CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132222</attachid>
            <date>2012-03-16 00:55:34 -0700</date>
            <delta_ts>2012-03-23 09:47:36 -0700</delta_ts>
            <desc>Event Listeners as first class GObjects; func/data/destroy triple</desc>
            <filename>bug-77835-20120316025530.patch</filename>
            <type>text/plain</type>
            <size>27994</size>
            <attacher name="C Anthony">anthony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwOTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiODQ0ZGUzZjIwNzU2
ODVlYzYyY2E5MDBiNTljN2YxMTRkZDg3MC4uYjgzMDJiNTQ4ZmQzMjlkZjg5NDEzNGJiM2VjZjhm
NjI3NWMxMjc3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAzLTE2ICBDIEFu
dGhvbnkgUmlzaW5nZXIgIDxhbnRob255QHh0ZngubWU+CisKKyAgICAgICAgW0dPYmplY3QgYmlu
ZGluZ3NdIEV2ZW50TGlzdGVuZXJzIGFzIGZpcnN0LWNsYXNzIEdPYmplY3RzOiBXZWJLaXRET01F
dmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NzgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoZSBzYW1lIHN1cmZhY2UuCisKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdz
L2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjp+R09iamVjdEV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnNpbmtMaXN0
ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5o
OgorICAgICAgICAoR09iamVjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2dv
YmplY3QvV2ViS2l0RE9NQ3VzdG9tLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fY3JlYXRlX2V2
ZW50X2xpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3Rv
bS5oOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3Bw
OgorICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcik6
CisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oOgorICAg
ICAgICAoX1dlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9u
KToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSk6CisKIDIwMTItMDMtMTUgIERh
bmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIG92ZXJkcmF3IG1ldHJpY3MgaW50byBhIHRlbXBsYXRlZCBjbGFzcyBmb3IgYm90aCBwYWlu
dCBhbmQgZHJhdyBtZXRyaWNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDQwYWUwMzllMjhlZWQ2ZTBm
OTZmNmVmZWYwODU4N2VmYmUzZmE5M2EuLjFjNTMxNzZiM2MzZTY3ODMwMTBhZmE2NjcyZGY5ZGZm
NGQ4MWNkM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xNiAg
QyBBbnRob255IFJpc2luZ2VyICA8YW50aG9ueUB4dGZ4Lm1lPgorCisgICAgICAgIFtHT2JqZWN0
IGJpbmRpbmdzXSBFdmVudExpc3RlbmVycyBhcyBmaXJzdC1jbGFzcyBHT2JqZWN0czogV2ViS2l0
RE9NRXZlbnRMaXN0ZW5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzc4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL3Rlc3Rkb21kb213aW5kb3cuYzoKKyAgICAgICAgKGxvYWRfZXZlbnRf
Y2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmlld19zaWduYWxzKToKKyAgICAgICAg
KGxvYWRfc3RhdHVzX2NhbGxiYWNrKToKKwogMjAxMi0wMy0xNSAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gSW1wbGVtZW50IHVuaWNv
ZGUgc3VibWVudSBpdGVtcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IGQ1MDQzZDgz
NmU5Yjg5ZGI4YmZiNTNmMDljMTEyZTE5MTJhZmRkNWUuLjZmMzcxNDNkZmUyNjJkNTUzNzMwMTNi
NTY3OTczMDM0NDg1ZGJjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTE3OSw3
ICsxNzksNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL2RvbS9FcnJvckV2ZW50Lmlk
bCBcCiAgICAgJCRQV0QvZG9tL0V2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL0V2ZW50RXhjZXB0
aW9uLmlkbCBcCi0jICAgICQkUFdEL2RvbS9FdmVudExpc3RlbmVyLmlkbCBcCisgICAgJCRQV0Qv
ZG9tL0V2ZW50TGlzdGVuZXIuaWRsIFwKICMgICAgJCRQV0QvZG9tL0V2ZW50VGFyZ2V0LmlkbCBc
CiAgICAgJCRQV0QvZG9tL0hhc2hDaGFuZ2VFdmVudC5pZGwgXAogICAgICQkUFdEL2RvbS9LZXli
b2FyZEV2ZW50LmlkbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwNzBiODdl
Zjk3ZTZhMGI4OGE0MmU4NmQ5ODE5N2NkOTA5MDg0MjNhLi44NzY2MDc2ZWRiODVjMjdlYjhkZGQ5
MmRmYTBmMzQzZThlMDdjMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTcy
Niw2ICs3MjYsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL2RvbS9FbnRp
dHlSZWZlcmVuY2UuaWRsIFwKIAkkKFdlYkNvcmUpL2RvbS9FcnJvckV2ZW50LmlkbCBcCiAJJChX
ZWJDb3JlKS9kb20vRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL2RvbS9FdmVudExpc3RlbmVyLmlk
bCBcCiAJJChXZWJDb3JlKS9kb20vRXZlbnRFeGNlcHRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL2Rv
bS9IYXNoQ2hhbmdlRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUpL2RvbS9LZXlib2FyZEV2ZW50Lmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQpp
bmRleCBhNTEyODBmOTU4MWQwNzhlNjUwZGQ1ZWExNzljNjM5NmVhYjVlYzUxLi4xOTEyNzMzMzY0
ZWVmNzc1MjM4NTgzMDc1NzNhZjU4Yjc1YTJlNDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0KQEAgLTYxLDYgKzYxLDggQEAgd2Via2l0Z3Rr
X2dkb21fYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERP
TUVudGl0eVJlZmVyZW5jZVByaXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktp
dERPTUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIFwKKwlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRMaXN0ZW5lci5j
cHAgXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudExpc3RlbmVyUHJpdmF0
ZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRl
LmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxlLmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZpbGVMaXN0LmNwcCBcCkBAIC0yNzgsNiArMjgwLDcg
QEAgd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2Vi
S2l0RE9NRWxlbWVudC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRW50aXR5
UmVmZXJlbmNlLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01FdmVudC5oIFwK
KwlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRXZlbnRMaXN0ZW5lci5oIFwKIAlEZXJp
dmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NTWVzc2FnZVBvcnQuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvd2Via2l0L1dlYktpdERPTU1vdXNlRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0
L1dlYktpdERPTU5hbWVkTm9kZU1hcC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNjIxMWU3ZDI1
NjJjMmFiYmI0NTZjMzlkYWYzNzZkMjQ5NmZjMTg1NC4uYTMyMTczNzRhZTJlZjRlYzNkMmZmY2I4
ODhmYjExMjZhZGU2MTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICogIENvcHlyaWdodCAo
QykgMjAxMiwgQyBBbnRob255IFJpc2luZ2VyIDxhbnRob255QHh0ZngubWU+CiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xOCwxMSArMTksMTQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGlu
Zy5oIgogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTUV2ZW50LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktp
dERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01FdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgi
CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KQEAgLTMxLDQyICszNSw0NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHR5cGVkZWYgdm9pZCAoKkdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2spKEdPYmplY3QqLCBX
ZWJLaXRET01FdmVudCosIHZvaWQqKTsKIAotR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RF
dmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lk
KiB1c2VyRGF0YSkKK0dPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcihH
Q2FsbGJhY2sgaGFuZGxlciwgdm9pZCogdXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lO
b3RpZnkpCiAgICAgOiBFdmVudExpc3RlbmVyKEdPYmplY3RFdmVudExpc3RlbmVyVHlwZSkKLSAg
ICAsIG1fb2JqZWN0KG9iamVjdCkKLSAgICAsIG1fY29yZVRhcmdldCh0YXJnZXQpCi0gICAgLCBt
X2RvbUV2ZW50TmFtZShkb21FdmVudE5hbWUpCisgICAgLCBtX29iamVjdCgwKQogICAgICwgbV9o
YW5kbGVyKGhhbmRsZXIpCi0gICAgLCBtX2NhcHR1cmUoY2FwdHVyZSkKICAgICAsIG1fdXNlckRh
dGEodXNlckRhdGEpCisgICAgLCBtX2Rlc3Ryb3lOb3RpZnkoZGVzdHJveU5vdGlmeSkKIHsKLSAg
ICBBU1NFUlQobV9jb3JlVGFyZ2V0KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0
RGVzdHJveWVkQ2FsbGJhY2spLCB0aGlzKTsKIH0KIAogR09iamVjdEV2ZW50TGlzdGVuZXI6On5H
T2JqZWN0RXZlbnRMaXN0ZW5lcigpCiB7Ci0gICAgaWYgKCFtX2NvcmVUYXJnZXQpCi0gICAgICAg
IHJldHVybjsKLSAgICBnX29iamVjdF93ZWFrX3VucmVmKG1fb2JqZWN0LCByZWludGVycHJldF9j
YXN0PEdXZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENh
bGxiYWNrKSwgdGhpcyk7CisgICAgaWYgKG1fb2JqZWN0KSB7CisgICAgICAgIGdfb2JqZWN0X3dl
YWtfdW5yZWYoR19PQkpFQ1QobV9vYmplY3QpLCByZWludGVycHJldF9jYXN0PEdXZWFrTm90aWZ5
PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSwgdGhpcyk7
CisgICAgICAgIG1fb2JqZWN0ID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgR09iamVjdEV2ZW50TGlz
dGVuZXI6OmdvYmplY3REZXN0cm95ZWQoKQogewotICAgIEFTU0VSVChtX2NvcmVUYXJnZXQpOwot
Ci0gICAgLy8gV2UgbXVzdCBzZXQgbV9jb3JlVGFyZ2V0IHRvIG51bGwsIGJlY2F1c2UgcmVtb3Zl
RXZlbnRMaXN0ZW5lcgotICAgIC8vIG1heSBjYWxsIHRoZSBkZXN0cnVjdG9yIGFzIGEgc2lkZSBl
ZmZlY3QgYW5kIHdlIG11c3QgYmUgaW4gdGhlCi0gICAgLy8gcHJvcGVyIHN0YXRlIHRvIHByZXZl
bnQgZ19vYmplY3Rfd2Vha191bnJlZi4KLSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gbV9jb3Jl
VGFyZ2V0OwotICAgIG1fY29yZVRhcmdldCA9IDA7Ci0gICAgdGFyZ2V0LT5yZW1vdmVFdmVudExp
c3RlbmVyKG1fZG9tRXZlbnROYW1lLmRhdGEoKSwgdGhpcywgbV9jYXB0dXJlKTsKKyAgICBpZiAo
bV9kZXN0cm95Tm90aWZ5KQorICAgICAgICBtX2Rlc3Ryb3lOb3RpZnkobV91c2VyRGF0YSk7CisK
KyAgICBtX29iamVjdCA9IDA7CisgICAgbV9oYW5kbGVyID0gMDsKKyAgICBtX3VzZXJEYXRhID0g
MDsKKyAgICBtX2Rlc3Ryb3lOb3RpZnkgPSAwOwogfQogCiB2b2lkIEdPYmplY3RFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQog
eworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQtPnR5cGUoKSwgdGhpcywgIShldmVudC0+YnViYmxlcygp
KSk7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKG1fb2JqZWN0KTsKKwogICAgIFdlYktpdERPTUV2
ZW50KiBnb2JqZWN0RXZlbnQgPSBXRUJLSVRfRE9NX0VWRU5UKFdlYktpdDo6a2l0KGV2ZW50KSk7
Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxHT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrPihtX2hh
bmRsZXIpKG1fb2JqZWN0LCBnb2JqZWN0RXZlbnQsIG1fdXNlckRhdGEpOworICAgIFdlYktpdERP
TUV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IFdlYktpdDo6a2l0KGV2ZW50LT5jdXJyZW50VGFy
Z2V0KCkpOworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFj
az4obV9oYW5kbGVyKShHX09CSkVDVChldmVudFRhcmdldCksIGdvYmplY3RFdmVudCwgbV91c2Vy
RGF0YSk7CiAgICAgZ19vYmplY3RfdW5yZWYoZ29iamVjdEV2ZW50KTsKIH0KIApAQCAtNzgsNCAr
ODQsMTggQEAgYm9vbCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dPYmplY3QqIEdP
YmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0KEdDYWxsYmFjayBoYW5kbGVyLCBncG9pbnRlciB1
c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlmeSkKK3sKKyAgICBHT2JqZWN0RXZl
bnRMaXN0ZW5lciogY29yZUxpc3RlbmVyID0gbmV3IEdPYmplY3RFdmVudExpc3RlbmVyKGhhbmRs
ZXIsIHVzZXJEYXRhLCBkZXN0cm95Tm90aWZ5KTsKKyAgICBHT2JqZWN0KiBsaXN0ZW5lciA9IEdf
T0JKRUNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fRVZFTlRfTElTVEVORVIsICJjb3Jl
LW9iamVjdCIsIGNvcmVMaXN0ZW5lciwgTlVMTCkpOworICAgIGNvcmVMaXN0ZW5lci0+c2lua0xp
c3RlbmVyKGxpc3RlbmVyKTsKKyAgICByZXR1cm4gbGlzdGVuZXI7Cit9CisKK3ZvaWQgR09iamVj
dEV2ZW50TGlzdGVuZXI6OnNpbmtMaXN0ZW5lcihHT2JqZWN0KiBsaXN0ZW5lcikKK3sKKyAgICBt
X29iamVjdCA9IGxpc3RlbmVyOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKGxpc3RlbmVyLCByZWlu
dGVycHJldF9jYXN0PEdXZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERl
c3Ryb3llZENhbGxiYWNrKSwgdGhpcyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA2Yzg1NzAx
YzhjYzBlOWIxMTVlYmViYWFkZTc0MWVjYmYxYWZjNGJkLi4wNDc3OTYwNjcwYmUxZjRlNWFkNmIw
MzU1NjBiMmJiMWYxOWQwMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTIsIEMgQW50aG9ueSBSaXNpbmdlciA8YW50aG9ueUB4dGZ4Lm1lPgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMjMsMjggKzI0LDE2IEBACiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKIAog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IHR5cGVkZWYgc3RydWN0IF9HT2JqZWN0IEdPYmplY3Q7CiB0eXBlZGVmIHZvaWQgKCpHQ2FsbGJh
Y2spICh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKkdEZXN0cm95Tm90aWZ5KSAodm9pZCopOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdPYmplY3RFdmVudExpc3RlbmVyIDogcHVibGlj
IEV2ZW50TGlzdGVuZXIgewogcHVibGljOgogCi0gICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0
ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRv
bUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSwgdm9pZCogdXNl
ckRhdGEpCi0gICAgewotICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyKGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIHRhcmdldCwgZG9t
RXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCB1c2VyRGF0YSkpKTsKLSAgICAgICAgcmV0
dXJuIHRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGxpc3RlbmVyLnJlbGVh
c2UoKSwgdXNlQ2FwdHVyZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRM
aXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICB7
Ci0gICAgICAgIEdPYmplY3RFdmVudExpc3RlbmVyIGtleShvYmplY3QsIHRhcmdldCwgZG9tRXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCAwKTsKLSAgICAgICAgcmV0dXJuIHRhcmdldC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXksIHVzZUNhcHR1cmUpOwotICAg
IH0KLQogICAgIHN0YXRpYyB2b2lkIGdvYmplY3REZXN0cm95ZWRDYWxsYmFjayhHT2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIsIEdPYmplY3QqKQogICAgIHsKICAgICAgICAgbGlzdGVuZXIt
PmdvYmplY3REZXN0cm95ZWQoKTsKQEAgLTU5LDggKzQ4LDExIEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKTsKIAorICAg
IHN0YXRpYyBHT2JqZWN0KiBnb2JqZWN0KEdDYWxsYmFjayBoYW5kbGVyLCB2b2lkKiB1c2VyRGF0
YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlmeSk7CisgICAgdm9pZCBzaW5rTGlzdGVuZXIo
R09iamVjdCopOworCiBwcml2YXRlOgotICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3Qq
LCBFdmVudFRhcmdldCosIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRs
ZXIsIGJvb2wgY2FwdHVyZSwgdm9pZCogdXNlckRhdGEpOworICAgIEdPYmplY3RFdmVudExpc3Rl
bmVyKEdDYWxsYmFjayBoYW5kbGVyLCB2b2lkKiB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVz
dHJveU5vdGlmeSk7CiAgICAgfkdPYmplY3RFdmVudExpc3RlbmVyKCk7CiAgICAgdm9pZCBnb2Jq
ZWN0RGVzdHJveWVkKCk7CiAKQEAgLTY4LDEzICs2MCw5IEBAIHByaXZhdGU6CiAKICAgICBHT2Jq
ZWN0KiBtX29iamVjdDsKIAotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGtlZXAgYSByZWZlcmVu
Y2UgdG8gdGhlIG1fY29yZVRhcmdldCwgYmVjYXVzZQotICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdo
ZW4gdGhlIEdPYmplY3QgYW5kIHRodXMgdGhlIG1fY29yZVRhcmdldCBvYmplY3QgaXMgYWxpdmUu
Ci0gICAgRXZlbnRUYXJnZXQqIG1fY29yZVRhcmdldDsKLSAgICBDU3RyaW5nIG1fZG9tRXZlbnRO
YW1lOwogICAgIEdDYWxsYmFjayBtX2hhbmRsZXI7Ci0gICAgYm9vbCBtX2NhcHR1cmU7CiAgICAg
dm9pZCogbV91c2VyRGF0YTsKKyAgICBHRGVzdHJveU5vdGlmeSBtX2Rlc3Ryb3lOb3RpZnk7CiB9
OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAKaW5kZXggYWJkMTI4MjI4ODhhYjA1OTQ4
ZTUyMGNkZGZlZTNlZGY4ZjRkN2RjNS4uODhmMzA5MTg0M2Q3ZmRiZmU0YTIzNWM3MzQ4MDI1ZTFk
Y2Y3NjVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NQ3VzdG9tLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyLCBDIEFudGhvbnkgUmlzaW5n
ZXIgPGFudGhvbnlAeHRmeC5tZT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDYgKzE5LDcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdERPTUN1c3RvbS5oIgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCiAKICNpbmNsdWRlICJXZWJLaXRET01C
bG9iLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LmgiCkBAIC0yNSw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dExpc3RlbmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTYxLDQgKzY0LDkg
QEAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9kaXNwYXRjaF9mb3JtX2lucHV0KFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKICAgICBnX3dhcm5pbmcoIlRoZSBvbmZvcm1pbnB1
dCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHNwZWMsIHRoaXMg
ZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOwogfQogCi0KKy8qIEV4dGVuZGVkIEFQSSAqLworV2Vi
S2l0RE9NRXZlbnRMaXN0ZW5lcioKK3dlYmtpdF9kb21fY3JlYXRlX2V2ZW50X2xpc3RlbmVyKEdD
YWxsYmFjayBoYW5kbGVyLCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95KQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX0VWRU5UX0xJU1RFTkVSKFdlYkNvcmU6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpnb2JqZWN0KGhhbmRsZXIsIGRhdGEsIGRlc3Ryb3kpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5oCmluZGV4
IDljYzU0ZmJlOTQ5NTExMzBiOWQ1OWI0YmE5Y2UwMDdlMjQ3MmMyNjkuLmM4YzgwMmY2YmY2ZDA0
Y2E5NzcyODAzYjYwY2EyNDVhMGRhMjVjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyLCBD
IEFudGhvbnkgUmlzaW5nZXIgPGFudGhvbnlAeHRmeC5tZT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTE5LDEwICsyMCwxMiBAQAogI2lmbmRlZiBXZWJLaXRET01DdXN0b21faAogI2RlZmluZSBX
ZWJLaXRET01DdXN0b21faAogCi0jaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZG9tZGVmaW5lcy5oPgogCit0eXBlZGVmIHZvaWQgKCpXZWJLaXRET01FdmVudExp
c3RlbmVyQ2FsbGJhY2spIChHT2JqZWN0KiwgV2ViS2l0RE9NRXZlbnQqLCBncG9pbnRlcik7CisK
IEdfQkVHSU5fREVDTFMKIAogV0VCS0lUX0FQSSBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfaXNfZWRpdGVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqKTsK
QEAgLTMzLDYgKzM2LDE5IEBAIFdFQktJVF9BUEkgV2ViS2l0RE9NQmxvYiogd2Via2l0X2RvbV9i
bG9iX3NsaWNlKFdlYktpdERPTUJsb2IqIHNlbGYsIGdpbnQ2NCBzdGFyCiBXRUJLSVRfQVBJIHZv
aWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9kaXNwYXRjaF9mb3JtX2NoYW5nZShXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOwogV0VCS0lUX0FQSSB2b2lkIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfZGlzcGF0Y2hfZm9ybV9pbnB1dChXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIHNlbGYpOwogCisvKiBFeHRlbmRlZCBBUEkgKi8KKy8qKgorICogd2Via2l0X2RvbV9j
cmVhdGVfZXZlbnRfbGlzdGVuZXI6CisgKiBAaGFuZGxlcjogKHR5cGUgV2ViS2l0RE9NRXZlbnRM
aXN0ZW5lckNhbGxiYWNrKTogQSAjV2ViS2l0RE9NRXZlbnRMaXN0ZW5lckNhbGxiYWNrCisgKiBA
ZGF0YTogKGFsbG93LW5vbmUpOiBhcmJpdHJhcnkgdXNlciBkYXRhCisgKiBAZGVzdHJveTogQSAj
R0Rlc3Ryb3lOb3RpZnkKKyAqCisgKiBjcmVhdGVzIG5ldyAjV2ViS2l0RE9NRXZlbnRMaXN0ZW5l
ciwgYm91bmQgdG8gQGhhbmRsZXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IG5l
dyAjV2ViS2l0RE9NRXZlbnRMaXN0ZW5lcgorICovCitXRUJLSVRfQVBJIFdlYktpdERPTUV2ZW50
TGlzdGVuZXIqIHdlYmtpdF9kb21fY3JlYXRlX2V2ZW50X2xpc3RlbmVyKEdDYWxsYmFjayBoYW5k
bGVyLCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95KTsKKwogR19FTkRfREVD
TFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCmluZGV4IGY3NGMzNDAwNTYyZDI2M2M0Nzc2MGZh
NzA3M2RiYzk4NTM1OTVhYWIuLjE5YWUyMmIxYjRlOTU0ZDgzZWE5MzA2MDNjOTEyY2I2YjU2ZWY1
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9N
RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJFdmVu
dFRhcmdldC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRMaXN0ZW5lci5oIgogCiB0eXBlZGVmIFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Ug
V2ViS2l0RE9NRXZlbnRUYXJnZXRJbnRlcmZhY2U7CiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIs
IDI0LCAwKQpAQCAtNzUsMjEgKzc2LDIwIEBAIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0CiAgICAg
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCh0YXJnZXQsIGV2ZW50LCBlcnJvcik7CiB9CiAKLWdi
b29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBo
YW5kbGVyLCBnYm9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJEYXRhKQorZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgV2ViS2l0RE9NRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCiB7Ci0KICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBGQUxTRSk7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CiAKICAgICBXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFD
RSh0YXJnZXQpOwogCiAgICAgaWYgKGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIpCi0gICAgICAg
IHJldHVybiBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCBidWJibGUsIHVzZXJEYXRhKTsKKyAgICAgICAgcmV0dXJuIGlmYWNlLT5hZGRfZXZlbnRf
bGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIAogICAg
IHJldHVybiBGQUxTRTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK2dib29s
ZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktpdERPTUV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQogewogICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlRfVEFSR0VUKHRhcmdldCksIEZBTFNF
KTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChldmVudE5hbWUsIEZBTFNFKTsKQEAgLTk3LDcg
Kzk3LDcgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXIKICAgICBXZWJLaXRET01FdmVudFRhcmdl
dElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQp
OwogCiAgICAgaWYgKGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIpCi0gICAgICAgIHJldHVy
biBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCBidWJibGUpOworICAgICAgICByZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lcih0
YXJnZXQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogCiAgICAgcmV0dXJuIEZB
TFNFOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01FdmVudFRhcmdldC5oCmluZGV4IDRhZGJkYTFlYjg1NDA5MzE0NzM5ODA1MjliYTQzNmZl
NzkxYmY2YjQuLmU1YTc2YzBkOTk3MjBjMWM5OGE4NmIxODRmNjBiNTdlOTVlMGNhNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50
VGFyZ2V0LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEgUy5MLgorICogIENvcHlyaWdodCAoQykgMjAxMiBDIEFudGhvbnkgUmlzaW5nZXIgPGFudGhv
bnlAeHRmeC5tZT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQxLDE1ICs0MiwxNCBAQCBzdHJ1
Y3QgX1dlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERPTUV2ZW50ICAgICAgICpldmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwogCi0g
ICAgZ2Jvb2xlYW4gICAgICAoKiBhZGRfZXZlbnRfbGlzdGVuZXIpKFdlYktpdERPTUV2ZW50VGFy
Z2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgICAgICAgICAgKmV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAg
ICAgICAgICAgICB1c2VyRGF0YSk7Ci0gICAgZ2Jvb2xlYW4gICAgICAoKiByZW1vdmVfZXZlbnRf
bGlzdGVuZXIpKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudE5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFj
ayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKKyAgICBnYm9vbGVhbiAg
ICAgICgqIGFkZF9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRUYXJnZXQgICAqdGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg
ICAgICAgICAgICpldmVudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdERPTUV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICB1c2VDYXB0
dXJlKTsKKyAgICBnYm9vbGVhbiAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2ViS2l0
RE9NRXZlbnRUYXJnZXQgICAqdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICpldmVudE5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERPTUV2ZW50TGlzdGVu
ZXIgKmxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnYm9vbGVhbiAgICAgICAgICAgICAgICB1c2VDYXB0dXJlKTsKIH07CiAKIApAQCAtNTksMTYg
KzU5LDE1IEBAIFdFQktJVF9BUEkgdm9pZCAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudCAgICAg
ICAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwogCi1XRUJLSVRfQVBJ
IGdib29sZWFuICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAq
ZXZlbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuICAgICAgICAgICAgICBidWJibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAg
ICAgIHVzZXJEYXRhKTsKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAgICp0YXJnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAqZXZlbnROYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERP
TUV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAg
IHVzZUNhcHR1cmUpOwogCi1XRUJLSVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnROYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
YWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAg
ICAgICBidWJibGUpOworV0VCS0lUX0FQSSBnYm9vbGVhbiAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0ICAgKnRhcmdldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICpldmVudE5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0RE9NRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAg
ICAgICAgICAgICAgdXNlQ2FwdHVyZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCmlu
ZGV4IGUxMGQwMTFjM2Q0ZmQ5ZGFhYjI3OWNjMjJkMDg3ZDMwNmQzNjQ2NGUuLmIyMGJlMDE1YjRh
YTZkYWYzNjI2ZGQ5MjA3YTBjMGEwNTViNWE3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpAQCAtNCw2ICs0
LDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA5IEFkYW0gRGluZ2xlIDxhZGFtQHlvcmJhLm9yZz4K
ICMgQ29weXJpZ2h0IChDKSAyMDA5IEppbSBOZWxzb24gPGppbUB5b3JiYS5vcmc+CiAjIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIsIEMg
QW50aG9ueSBSaXNpbmdlciA8YW50aG9ueUB4dGZ4Lm1lPgogIwogIyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAjIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03
MzksNiArNzQwLDE0IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKIAogICAgIG15IEBjYWxsSW1w
bFBhcmFtczsKIAorICAgICMgQmxhdGFudCBoYWNrOyBldmVyeSBvdGhlciB3YXkgSSB0cmllZCB3
YXMgbW9yZSBkaXNndXN0aW5nLCBldmVuCisgICAgIyBmb3JjaW5nIGEgU3VwcGxlbWVudD1HT2Jq
ZWN0RXZlbnRMaXN0ZW5lciAod291bGQgbmVlZCBhIHN0YXRpYworICAgICMgbWV0aG9kIG92ZXJs
b2FkaW5nIGFuIGluc3RhbmNlIG1ldGhvZD8/PykKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
IkV2ZW50TGlzdGVuZXIiICYmICRmdW5jdGlvblNpZ05hbWUgZXEgImhhbmRsZUV2ZW50IikgeyAK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siR09iamVjdEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsKKyAg
ICAgICAgcHVzaChAY2FsbEltcGxQYXJhbXMsICIwIik7CisgICAgfQorCiAgICAgZm9yZWFjaCBt
eSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBteSAkcGFyYW1J
RExUeXBlID0gJHBhcmFtLT50eXBlOwogICAgICAgICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiRXZl
bnRMaXN0ZW5lciIgfHwgJHBhcmFtSURMVHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIp
IHsKQEAgLTExODMsMzIgKzExOTIsMjkgQEAgc3ViIEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7
CiAKICAgICAkaW1wbEluY2x1ZGVzeyJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIn0gPSAxOwogICAg
ICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50VGFyZ2V0LmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siV2ViS2l0RE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCJ9ID0gMTsKICAgICAkaW1w
bEluY2x1ZGVzeyJXZWJLaXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsKIAogICAgIG15ICRpbXBs
ID0gPDwgIkVPRiI7CiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKIHsKLSAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKLSAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudChjb3JlRXZlbnQsIGVj
KTsKKyAgICAoV2ViS2l0Ojpjb3JlKHRhcmdldCkpLT5kaXNwYXRjaEV2ZW50KFdlYktpdDo6Y29y
ZShldmVudCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKICAgICB9CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIs
IGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEpCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIFdlYktpdERPTUV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQogewotICAgIFdlYkNvcmU6OiR7aW50
ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFj
ZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlLCB1c2Vy
RGF0YSk7CisgICAgcmV0dXJuIChXZWJLaXQ6OmNvcmUodGFyZ2V0KSktPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCBXZWJLaXQ6OmNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKIH0KIAot
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBXZWJLaXRET01FdmVudExp
c3RlbmVyKiBsaXN0ZW5lciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsKLSAgICBXZWJDb3JlOjok
e2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAg
IHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJs
ZSk7CisgICAgcmV0dXJuIChXZWJLaXQ6OmNvcmUodGFyZ2V0KSktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCBXZWJLaXQ6OmNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKIH0KIAog
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3Rkb21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5k
b3cuYwppbmRleCAzNjFjNGMzMmZiNGZkYTk5NTM3ZDlmYjk3YjhkNTA0YWQwMjkyOTJjLi5hYzM0
YjIzZGY0MDRmYWU2OTI5YmI1ZTRiNTFmNTBlYmVmMGQ5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0zNCw2ICszNCw3IEBAIHR5cGVkZWYgc3Ry
dWN0IHsKICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKICAgICBHTWFpbkxvb3Aq
IGxvb3A7CiAKKyAgICBXZWJLaXRET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lcnNbM107CiAgICAg
Z2Jvb2xlYW4gbG9hZGVkOwogICAgIGdib29sZWFuIGNsaWNrZWQ7CiAgICAgZ2NvbnN0cG9pbnRl
ciBkYXRhOwpAQCAtMTA1LDcgKzEwNiw4IEBAIHN0YXRpYyB2b2lkIGxvYWRfZXZlbnRfY2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgRG9tRG9tCiB7CiAg
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYlZpZXcpOwogICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsK
LSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJjbGljayIsIEdfQ0FMTEJB
Q0soY2xpY2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBmaXh0dXJlLT5s
aXN0ZW5lcnNbMF0gPSB3ZWJraXRfZG9tX2NyZWF0ZV9ldmVudF9saXN0ZW5lcihHX0NBTExCQUNL
KGNsaWNrZWRDYWxsYmFjayksIGZpeHR1cmUsIE5VTEwpOworICAgICAgICB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4
dHVyZS0+ZG9tV2luZG93KSwgImNsaWNrIiwgZml4dHVyZS0+bGlzdGVuZXJzWzBdLCBmYWxzZSk7
CiAKICAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CiAgICAgICAg
IGd0a190ZXN0X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAxLCAw
KTsKQEAgLTEyNSw3ICsxMjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb212aWV3X3NpZ25h
bHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZAogCiAgICAgZml4
dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OwogCi0gICAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRv
bVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0
dXJlKTsKKyAgICBmaXh0dXJlLT5saXN0ZW5lcnNbMV0gPSB3ZWJraXRfZG9tX2NyZWF0ZV9ldmVu
dF9saXN0ZW5lcihHX0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZml4dHVyZSwgTlVMTCk7Cisg
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01f
RVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgZml4dHVyZS0+bGlzdGVu
ZXJzWzFdLCBmYWxzZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJt
YXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NB
TExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJlKTsKIApAQCAtMTc2LDcgKzE3OSw4
IEBAIHN0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5kb21XaW5kb3csIDAsIDAsIDAsIGNsaWVudFgs
IGNsaWVudFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQp
KTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdF
QktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNr
ZWRfY2IpLCBmYWxzZSwgZml4dHVyZSk7CisgICAgICAgIGZpeHR1cmUtPmxpc3RlbmVyc1syXSA9
IHdlYmtpdF9kb21fY3JlYXRlX2V2ZW50X2xpc3RlbmVyKEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiks
IGZpeHR1cmUsIE5VTEwpOworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZl
bnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksICJjbGljayIsIGZp
eHR1cmUtPmxpc3RlbmVyc1syXSwgZmFsc2UpOwogICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5j
bGlja2VkID09IEZBTFNFKTsKICAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0
Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsK
ICAgICB9Cg==
</data>
<flag name="review"
          id="135805"
          type_id="1"
          status="-"
          setter="ossy"
    />
    <flag name="commit-queue"
          id="135807"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214724</attachid>
            <date>2013-10-21 03:58:14 -0700</date>
            <delta_ts>2013-10-21 04:04:39 -0700</delta_ts>
            <desc>Another approach using a closure</desc>
            <filename>wk-event-listener.diff</filename>
            <type>text/plain</type>
            <size>18723</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggOGJkNWE5OS4uMzQ4MGU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0xMC0yMSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dP
YmplY3QgYmluZGluZ3NdIEV2ZW50TGlzdGVuZXJzIGFzIGZpcnN0LWNsYXNzIEdPYmplY3RzOiBX
ZWJLaXRET01FdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1c2UgR1JlZlB0ciB3aXRoIEdDbG9zdXJlLgor
CisgICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQ
dHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaDoKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxMy0xMC0x
OSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IHJvbGwgb3V0IG9mIHIxNTc2OTU7IGJyb2tlIE1hYyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9H
UmVmUHRyLmNwcAppbmRleCAzOTMxZDVhLi5iNmEzMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1Jl
ZlB0ci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2lmIFVTRShHTElCKQogCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
MTQ1LDYgKzE0NiwxOSBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHQnl0ZUFycmF5KiBw
dHIpCiAgICAgICAgIGdfYnl0ZV9hcnJheV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBH
Q2xvc3VyZSogcmVmR1B0cihHQ2xvc3VyZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdfY2xvc3VyZV9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cihHQ2xvc3VyZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdf
Y2xvc3VyZV91bnJlZihwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCBlN2Q4YjY0Li5iMjViN2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjE5LDYgKzIxOSw4IEBAIHRlbXBsYXRl
IDw+IEdCeXRlQXJyYXkqIHJlZkdQdHIoR0J5dGVBcnJheSopOwogdGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR0J5dGVBcnJheSopOwogdGVtcGxhdGUgPD4gR0J5dGVzKiByZWZHUHRyKEdCeXRl
cyopOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR0J5dGVzKik7Cit0ZW1wbGF0ZSA8PiBH
Q2xvc3VyZSogcmVmR1B0cihHQ2xvc3VyZSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIo
R0Nsb3N1cmUqKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiByZWZHUHRyKFQq
IHB0cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCmluZGV4IDY0YzNjNTguLjk5OTA3
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIv
U291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApAQCAtNjYsNiArNjYsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CiB0eXBlZGVmIHN0cnVjdCBfR1B0ckFycmF5
IEdQdHJBcnJheTsKIHR5cGVkZWYgc3RydWN0IF9HQnl0ZUFycmF5IEdCeXRlQXJyYXk7CiB0eXBl
ZGVmIHN0cnVjdCBfR0J5dGVzIEdCeXRlczsKK3R5cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xv
c3VyZTsKIAogI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNh
aXJvX3N1cmZhY2VfdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNzEwMGNiLi4yNjY5NGFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMTMtMTAtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJpbmRpbmdzXSBFdmVudExpc3Rl
bmVycyBhcyBmaXJzdC1jbGFzcyBHT2JqZWN0czogV2ViS2l0RE9NRXZlbnRMaXN0ZW5lcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZSBhbmQKKyAgICAg
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xv
c3VyZSB0byBiZQorICAgICAgICB1c2VkIGJ5IEdPYmplY3QgaW5zdHJvc3BlY3Rpb24gYmluZGlu
Z3MuIEluc3RlYWQgb2YgcmVjZXZpbmcgYQorICAgICAgICBHQ2FsbGJhY2ssIHdoaWNoIG1ha2Vz
IHRoZSBmdW5jdGlvbiBub3QgaW50cm9zcGVjdGFibGUsIHRoZXkKKyAgICAgICAgcmVjZWl2ZSBh
IEdDbG9zdXJlLgorCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVj
dEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
On5HT2JqZWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlz
dGVuZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcik6CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIpOgorICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRk
X2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZSk6CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZl
bnRUYXJnZXRJZmFjZSk6CisKIDIwMTMtMTAtMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCByb2xsIG91dCBvZiByMTU3Njk1OyBicm9rZSBN
YWMgYnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9H
T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCAwMjRhODU0Li5jNDRhYmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmNwcApAQCAtMjIsMzEgKzIyLDI5IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJXZWJLaXRET01FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgdm9pZCAoKkdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2spKEdPYmplY3QqLCBX
ZWJLaXRET01FdmVudCosIHZvaWQqKTsKLQotR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RF
dmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lk
KiB1c2VyRGF0YSkKK0dPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFyKiBkb21F
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIGNhcHR1cmUpCiAgICAgOiBFdmVudExp
c3RlbmVyKEdPYmplY3RFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkK
LSAgICAsIG1fY29yZVRhcmdldCh0YXJnZXQpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAg
LCBtX2NvcmVUYXJnZXQoY29yZVRhcmdldCkKICAgICAsIG1fZG9tRXZlbnROYW1lKGRvbUV2ZW50
TmFtZSkKICAgICAsIG1faGFuZGxlcihoYW5kbGVyKQogICAgICwgbV9jYXB0dXJlKGNhcHR1cmUp
Ci0gICAgLCBtX3VzZXJEYXRhKHVzZXJEYXRhKQogewogICAgIEFTU0VSVChtX2NvcmVUYXJnZXQp
OwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05v
dGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRo
aXMpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKG1fdGFyZ2V0LCByZWludGVycHJldF9jYXN0PEdX
ZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNr
KSwgdGhpcyk7CiB9CiAKIEdPYmplY3RFdmVudExpc3RlbmVyOjp+R09iamVjdEV2ZW50TGlzdGVu
ZXIoKQogewogICAgIGlmICghbV9jb3JlVGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgZ19v
YmplY3Rfd2Vha191bnJlZihtX29iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4o
R09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfb2JqZWN0X3dlYWtfdW5yZWYobV90YXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtO
b3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spLCB0
aGlzKTsKIH0KIAogdm9pZCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZCgp
CkBAIC02MywxNSArNjEsMjQgQEAgdm9pZCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERl
c3Ryb3llZCgpCiAKIHZvaWQgR09iamVjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpCiB7Ci0gICAgV2ViS2l0RE9NRXZlbnQq
IGdvYmplY3RFdmVudCA9IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQpKTsKLSAg
ICByZWludGVycHJldF9jYXN0PEdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2s+KG1faGFuZGxl
cikobV9vYmplY3QsIGdvYmplY3RFdmVudCwgbV91c2VyRGF0YSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoZ29iamVjdEV2ZW50KTsKKyAgICBHVmFsdWUgcGFyYW1ldGVyc1syXSA9IHsgR19WQUxVRV9J
TklULCBHX1ZBTFVFX0lOSVQgfTsKKyAgICBnX3ZhbHVlX2luaXQoJnBhcmFtZXRlcnNbMF0sIFdF
QktJVF9UWVBFX0RPTV9FVkVOVF9UQVJHRVQpOworICAgIGdfdmFsdWVfc2V0X29iamVjdCgmcGFy
YW1ldGVyc1swXSwgbV90YXJnZXQpOworCisgICAgR1JlZlB0cjxXZWJLaXRET01FdmVudD4gZG9t
RXZlbnQgPSBhZG9wdEdSZWYoV2ViS2l0OjpraXQoZXZlbnQpKTsKKyAgICBnX3ZhbHVlX2luaXQo
JnBhcmFtZXRlcnNbMV0sIFdFQktJVF9UWVBFX0RPTV9FVkVOVCk7CisgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KCZwYXJhbWV0ZXJzWzFdLCBkb21FdmVudC5nZXQoKSk7CisKKyAgICBnX2Nsb3N1cmVf
aW52b2tlKG1faGFuZGxlci5nZXQoKSwgMCwgMiwgcGFyYW1ldGVycywgTlVMTCk7CisgICAgZ192
YWx1ZV91bnNldChwYXJhbWV0ZXJzICsgMCk7CisgICAgZ192YWx1ZV91bnNldChwYXJhbWV0ZXJz
ICsgMSk7CiB9CiAKIGJvb2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3Qg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7CiAgICAgaWYgKGNvbnN0IEdPYmplY3RFdmVudExp
c3RlbmVyKiBnb2JqZWN0RXZlbnRMaXN0ZW5lciA9IEdPYmplY3RFdmVudExpc3RlbmVyOjpjYXN0
KCZsaXN0ZW5lcikpCi0gICAgICAgIHJldHVybiBtX29iamVjdCA9PSBnb2JqZWN0RXZlbnRMaXN0
ZW5lci0+bV9vYmplY3QgJiYgbV9oYW5kbGVyID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX2hh
bmRsZXI7CisgICAgICAgIHJldHVybiBtX3RhcmdldCA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+
bV90YXJnZXQKKyAgICAgICAgICAgICYmIHJlaW50ZXJwcmV0X2Nhc3Q8R0NDbG9zdXJlKj4obV9o
YW5kbGVyLmdldCgpKS0+Y2FsbGJhY2sgPT0gcmVpbnRlcnByZXRfY2FzdDxHQ0Nsb3N1cmUqPihn
b2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9oYW5kbGVyLmdldCgpKS0+Y2FsbGJhY2s7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKaW5kZXggOGU4NDc5My4uNTg0MzZmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlz
dGVuZXIuaApAQCAtMjIsMjYgKzIyLDI3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHR5cGVkZWYgc3RydWN0IF9HT2JqZWN0IEdPYmplY3Q7Ci10eXBlZGVmIHZvaWQgKCpHQ2Fs
bGJhY2spICh2b2lkKTsKK3R5cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xvc3VyZTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKIHB1YmxpYzoKIAotICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVu
ZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21F
dmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUsIHZvaWQqIHVzZXJE
YXRhKQorICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIoR09iamVjdCogdGFyZ2V0LCBF
dmVudFRhcmdldCogY29yZVRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQogICAgIHsKLSAgICAgICAgUmVmUHRyPEdPYmpl
Y3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVu
ZXIob2JqZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgdXNl
ckRhdGEpKSk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZl
bnROYW1lLCBsaXN0ZW5lci5yZWxlYXNlKCksIHVzZUNhcHR1cmUpOworICAgICAgICBSZWZQdHI8
R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKG5ldyBHT2JqZWN0RXZlbnRM
aXN0ZW5lcih0YXJnZXQsIGNvcmVUYXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSkpKTsKKyAgICAgICAgcmV0dXJuIGNvcmVUYXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9t
RXZlbnROYW1lLCBsaXN0ZW5lci5yZWxlYXNlKCksIHVzZUNhcHR1cmUpOwogICAgIH0KIAotICAg
IHN0YXRpYyBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVy
LCBib29sIHVzZUNhcHR1cmUpCisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFyKiBkb21F
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCiAgICAgewotICAg
ICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkob2JqZWN0LCB0YXJnZXQsIGRvbUV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSwgMCk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCAma2V5LCB1c2VDYXB0dXJlKTsKKyAgICAgICAg
R09iamVjdEV2ZW50TGlzdGVuZXIga2V5KHRhcmdldCwgY29yZVRhcmdldCwgZG9tRXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgcmV0dXJuIGNvcmVUYXJnZXQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCAma2V5LCB1c2VDYXB0dXJlKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgdm9pZCBnb2JqZWN0RGVzdHJveWVkQ2FsbGJhY2soR09iamVjdEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyLCBHT2JqZWN0KikKQEAgLTU5LDIxICs2MCwxOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpOwog
CiBwcml2YXRlOgotICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqLCBFdmVudFRhcmdl
dCosIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgY2Fw
dHVyZSwgdm9pZCogdXNlckRhdGEpOworICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3Qq
LCBFdmVudFRhcmdldCosIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqLCBib29s
IGNhcHR1cmUpOwogICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwogICAgIHZvaWQgZ29iamVj
dERlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFdmVudCopOwogCi0gICAgR09iamVjdCogbV9vYmplY3Q7Ci0KKyAgICBH
T2JqZWN0KiBtX3RhcmdldDsKICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIHRoZSBtX2NvcmVUYXJnZXQsIGJlY2F1c2UKICAgICAvLyB3ZSBvbmx5IHVzZSBpdCB3
aGVuIHRoZSBHT2JqZWN0IGFuZCB0aHVzIHRoZSBtX2NvcmVUYXJnZXQgb2JqZWN0IGlzIGFsaXZl
LgogICAgIEV2ZW50VGFyZ2V0KiBtX2NvcmVUYXJnZXQ7CiAgICAgQ1N0cmluZyBtX2RvbUV2ZW50
TmFtZTsKLSAgICBHQ2FsbGJhY2sgbV9oYW5kbGVyOworICAgIEdSZWZQdHI8R0Nsb3N1cmU+IG1f
aGFuZGxlcjsKICAgICBib29sIG1fY2FwdHVyZTsKLSAgICB2b2lkKiBtX3VzZXJEYXRhOwogfTsK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcAppbmRleCBkODg1YjJjLi41
OWRmZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KIAogdHlwZWRlZiBXZWJLaXRET01FdmVudFRhcmdldElmYWNlIFdlYktpdERPTUV2
ZW50VGFyZ2V0SW50ZXJmYWNlOwogCkBAIC02Myw5ICs2NCwxMCBAQCBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0UpOwogCiAg
ICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJLSVRfRE9NX0VWRU5UX1RB
UkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKLQotICAgIGlmIChpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyKQotICAgICAgICByZXR1cm4gaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcih0YXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlLCB1c2VyRGF0YSk7CisgICAgaWYgKGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3VyZSA9IGFk
b3B0R1JlZihnX2NjbG9zdXJlX25ldyhoYW5kbGVyLCB1c2VyRGF0YSwgMCkpOworICAgICAgICBy
ZXR1cm4gaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgY2xvc3Vy
ZS5nZXQoKSwgYnViYmxlKTsKKyAgICB9CiAKICAgICByZXR1cm4gRkFMU0U7CiB9CkBAIC03Niw3
ICs3OCwzNCBAQCBnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcgogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGV2ZW50TmFtZSwgRkFMU0UpOwogCiAgICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSog
aWZhY2UgPSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKKyAgICBp
ZiAoaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lcikgeworICAgICAgICBHUmVmUHRyPEdDbG9z
dXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGhhbmRsZXIsIDAsIDApKTsK
KyAgICAgICAgcmV0dXJuIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVu
dE5hbWUsIGNsb3N1cmUuZ2V0KCksIGJ1YmJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNF
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVu
ZXJfd2l0aF9jbG9zdXJlKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoaGFuZGxlciwgRkFMU0UpOworCisgICAgV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0Uo
dGFyZ2V0KTsKKyAgICBpZiAoaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcikKKyAgICAgICAgcmV0
dXJuIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IGJ1YmJsZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CiAKK2dib29sZWFuIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRVZFTlRfVEFSR0VUKHRhcmdldCksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChldmVudE5hbWUsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChoYW5k
bGVyLCBGQUxTRSk7CisKKyAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdF
QktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQpOwogICAgIGlmIChpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKQogICAgICAgICByZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdl
dC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdl
dC5oCmluZGV4IDEwMmM5NDYuLjI1NmFkYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKQEAgLTQyLDEyICs0Miwx
MSBAQCBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UgewogCiAgICAgZ2Jvb2xlYW4g
ICAgICAoKiBhZGRfZXZlbnRfbGlzdGVuZXIpKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpldmVudF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
IHVzZXJfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
bG9zdXJlICAgICAgICAgICAgICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKICAgICBnYm9vbGVh
biAgICAgICgqIHJlbW92ZV9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2xvc3VyZSAgICAgICAgICAgICAq
aGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jv
b2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSk7CiB9OwogCkBAIC04Niw2ICs4NSw0NSBAQCBXRUJL
SVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5k
bGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJibGUpOwogCisvKioKKyAq
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmU6
CisgKiBAdGFyZ2V0OiBBICNXZWJLaXRET01FdmVudFRhcmdldAorICogQGV2ZW50X25hbWU6IEEg
I2djaGFyCisgKiBAaGFuZGxlcjogQSAjR0Nsb3N1cmUKKyAqIEBidWJibGU6IEEgI2dib29sZWFu
CisgKgorICogVmVyc2lvbiBvZiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlz
dGVuZXIoKSB1c2luZyBhIGNsb3N1cmUKKyAqIGluc3RlYWQgb2YgYSBjYWxsYmFja3MgZm9yIGVh
c2llciBiaW5kaW5nIGluIG90aGVyIGxhbmd1YWdlcy4KKyAqCisgKiBSZXR1cm5zOiBhICNnYm9v
bGVhbgorICoKKyAqIFJlbmFtZSB0bzogd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50
X2xpc3RlbmVyCisgKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCAq
dGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudF9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDbG9zdXJlICAgICAgICAgICAgICpoYW5kbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJibGUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcl93aXRoX2Ns
b3N1cmU6CisgKiBAdGFyZ2V0OiBBICNXZWJLaXRET01FdmVudFRhcmdldAorICogQGV2ZW50X25h
bWU6IEEgI2djaGFyCisgKiBAaGFuZGxlcjogQSAjR0Nsb3N1cmUKKyAqIEBidWJibGU6IEEgI2di
b29sZWFuCisgKgorICogVmVyc2lvbiBvZiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIoKSB1c2luZyBhIGNsb3N1cmUKKyAqIGluc3RlYWQgb2YgYSBjYWxsYmFj
a3MgZm9yIGVhc2llciBiaW5kaW5nIGluIG90aGVyIGxhbmd1YWdlcy4KKyAqCisgKiBSZXR1cm5z
OiBhICNnYm9vbGVhbgorICoKKyAqIFJlbmFtZSB0bzogd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyCisgKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRE
T01FdmVudFRhcmdldCAqdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
ICAgICAgICAgICpldmVudF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDbG9zdXJlICAg
ICAgICAgICAgICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAg
ICAgICAgICBidWJibGUpOworCisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXZWJLaXRET01F
dmVudFRhcmdldF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQppbmRleCAzNTY3MTY3Li45NWY1MjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2Jq
ZWN0LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckdPYmplY3QucG0KQEAgLTEzOTMsMTYgKzEzOTMsMTYgQEAgc3ViIEdlbmVyYXRlRXZlbnRUYXJn
ZXRJZmFjZSB7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2VuZGlmIC8vICR7Y29uZGl0
aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAifVxuXG4iKTsKIAotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxi
YWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEpXG57XG4iKTsK
KyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV8k
e2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiBi
dWJibGUpXG57XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIjaWYgJHtjb25kaXRp
b25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUs
IHVzZXJEYXRhKTtcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICByZXR1cm4g
V2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUpO1xuIik7CiAg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxh
cihAY29uZGl0aW9uYWxXYXJuKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgcmV0
dXJuIGZhbHNlO1xuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAifVxuXG4iKTsKIAotICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVj
YW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1
YmJsZSlcbntcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIGJ1YmJsZSlcbntcbiIpOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwog
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpO1xuIik7CiAgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5h
bWUsIGhhbmRsZXIsIGJ1YmJsZSk7XG4iKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214725</attachid>
            <date>2013-10-21 04:04:39 -0700</date>
            <delta_ts>2013-10-23 04:11:29 -0700</delta_ts>
            <desc>Updated patch including new binding test results</desc>
            <filename>wk-event-listener2.diff</filename>
            <type>text/plain</type>
            <size>22468</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggOGJkNWE5OS4uMzQ4MGU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0xMC0yMSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dP
YmplY3QgYmluZGluZ3NdIEV2ZW50TGlzdGVuZXJzIGFzIGZpcnN0LWNsYXNzIEdPYmplY3RzOiBX
ZWJLaXRET01FdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1c2UgR1JlZlB0ciB3aXRoIEdDbG9zdXJlLgor
CisgICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQ
dHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaDoKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxMy0xMC0x
OSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IHJvbGwgb3V0IG9mIHIxNTc2OTU7IGJyb2tlIE1hYyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9H
UmVmUHRyLmNwcAppbmRleCAzOTMxZDVhLi5iNmEzMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1Jl
ZlB0ci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2lmIFVTRShHTElCKQogCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
MTQ1LDYgKzE0NiwxOSBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHQnl0ZUFycmF5KiBw
dHIpCiAgICAgICAgIGdfYnl0ZV9hcnJheV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBH
Q2xvc3VyZSogcmVmR1B0cihHQ2xvc3VyZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdfY2xvc3VyZV9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cihHQ2xvc3VyZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdf
Y2xvc3VyZV91bnJlZihwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCBlN2Q4YjY0Li5iMjViN2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjE5LDYgKzIxOSw4IEBAIHRlbXBsYXRl
IDw+IEdCeXRlQXJyYXkqIHJlZkdQdHIoR0J5dGVBcnJheSopOwogdGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR0J5dGVBcnJheSopOwogdGVtcGxhdGUgPD4gR0J5dGVzKiByZWZHUHRyKEdCeXRl
cyopOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR0J5dGVzKik7Cit0ZW1wbGF0ZSA8PiBH
Q2xvc3VyZSogcmVmR1B0cihHQ2xvc3VyZSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIo
R0Nsb3N1cmUqKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiByZWZHUHRyKFQq
IHB0cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCmluZGV4IDY0YzNjNTguLjk5OTA3
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIv
U291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApAQCAtNjYsNiArNjYsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CiB0eXBlZGVmIHN0cnVjdCBfR1B0ckFycmF5
IEdQdHJBcnJheTsKIHR5cGVkZWYgc3RydWN0IF9HQnl0ZUFycmF5IEdCeXRlQXJyYXk7CiB0eXBl
ZGVmIHN0cnVjdCBfR0J5dGVzIEdCeXRlczsKK3R5cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xv
c3VyZTsKIAogI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNh
aXJvX3N1cmZhY2VfdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNzEwMGNiLi40MDdkMWYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzkgQEAKKzIwMTMtMTAtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJpbmRpbmdzXSBFdmVudExpc3Rl
bmVycyBhcyBmaXJzdC1jbGFzcyBHT2JqZWN0czogV2ViS2l0RE9NRXZlbnRMaXN0ZW5lcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZSBhbmQKKyAgICAg
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xv
c3VyZSB0byBiZQorICAgICAgICB1c2VkIGJ5IEdPYmplY3QgaW5zdHJvc3BlY3Rpb24gYmluZGlu
Z3MuIEluc3RlYWQgb2YgcmVjZXZpbmcgYQorICAgICAgICBHQ2FsbGJhY2ssIHdoaWNoIG1ha2Vz
IHRoZSBmdW5jdGlvbiBub3QgaW50cm9zcGVjdGFibGUsIHRoZXkKKyAgICAgICAgcmVjZWl2ZSBh
IEdDbG9zdXJlLgorCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09iamVj
dEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
On5HT2JqZWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50TGlz
dGVuZXI6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2
ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcik6CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIpOgorICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRk
X2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZSk6CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZl
bnRUYXJnZXRJZmFjZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9l
dmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5jcHA6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXIpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X25vZGVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKToKKwogMjAxMy0xMC0xOSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHJvbGwg
b3V0IG9mIHIxNTc2OTU7IGJyb2tlIE1hYyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDAy
NGE4NTQuLmM0NGFiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC0yMiwzMSArMjIsMjkgQEAKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50LmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQu
aCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiB2b2lkICgqR09iamVjdEV2ZW50TGlzdGVu
ZXJDYWxsYmFjaykoR09iamVjdCosIFdlYktpdERPTUV2ZW50Kiwgdm9pZCopOwotCi1HT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCogb2JqZWN0LCBFdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5k
bGVyLCBib29sIGNhcHR1cmUsIHZvaWQqIHVzZXJEYXRhKQorR09iamVjdEV2ZW50TGlzdGVuZXI6
OkdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgRXZlbnRUYXJnZXQqIGNvcmVU
YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wg
Y2FwdHVyZSkKICAgICA6IEV2ZW50TGlzdGVuZXIoR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlKQot
ICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAgICwgbV9jb3JlVGFyZ2V0KHRhcmdldCkKKyAgICAs
IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fY29yZVRhcmdldChjb3JlVGFyZ2V0KQogICAgICwg
bV9kb21FdmVudE5hbWUoZG9tRXZlbnROYW1lKQogICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCiAg
ICAgLCBtX2NhcHR1cmUoY2FwdHVyZSkKLSAgICAsIG1fdXNlckRhdGEodXNlckRhdGEpCiB7CiAg
ICAgQVNTRVJUKG1fY29yZVRhcmdldCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYob2JqZWN0LCBy
ZWludGVycHJldF9jYXN0PEdXZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVj
dERlc3Ryb3llZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYobV90YXJn
ZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpn
b2JqZWN0RGVzdHJveWVkQ2FsbGJhY2spLCB0aGlzKTsKIH0KIAogR09iamVjdEV2ZW50TGlzdGVu
ZXI6On5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpCiB7CiAgICAgaWYgKCFtX2NvcmVUYXJnZXQpCiAg
ICAgICAgIHJldHVybjsKLSAgICBnX29iamVjdF93ZWFrX3VucmVmKG1fb2JqZWN0LCByZWludGVy
cHJldF9jYXN0PEdXZWFrTm90aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ry
b3llZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19vYmplY3Rfd2Vha191bnJlZihtX3RhcmdldCwg
cmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmpl
Y3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOwogfQogCiB2b2lkIEdPYmplY3RFdmVudExpc3Rl
bmVyOjpnb2JqZWN0RGVzdHJveWVkKCkKQEAgLTYzLDE1ICs2MSwyNCBAQCB2b2lkIEdPYmplY3RF
dmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkKCkKIAogdm9pZCBHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkK
IHsKLSAgICBXZWJLaXRET01FdmVudCogZ29iamVjdEV2ZW50ID0gV0VCS0lUX0RPTV9FVkVOVChX
ZWJLaXQ6OmtpdChldmVudCkpOwotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R09iamVjdEV2ZW50TGlz
dGVuZXJDYWxsYmFjaz4obV9oYW5kbGVyKShtX29iamVjdCwgZ29iamVjdEV2ZW50LCBtX3VzZXJE
YXRhKTsKLSAgICBnX29iamVjdF91bnJlZihnb2JqZWN0RXZlbnQpOworICAgIEdWYWx1ZSBwYXJh
bWV0ZXJzWzJdID0geyBHX1ZBTFVFX0lOSVQsIEdfVkFMVUVfSU5JVCB9OworICAgIGdfdmFsdWVf
aW5pdCgmcGFyYW1ldGVyc1swXSwgV0VCS0lUX1RZUEVfRE9NX0VWRU5UX1RBUkdFVCk7CisgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KCZwYXJhbWV0ZXJzWzBdLCBtX3RhcmdldCk7CisKKyAgICBHUmVm
UHRyPFdlYktpdERPTUV2ZW50PiBkb21FdmVudCA9IGFkb3B0R1JlZihXZWJLaXQ6OmtpdChldmVu
dCkpOworICAgIGdfdmFsdWVfaW5pdCgmcGFyYW1ldGVyc1sxXSwgV0VCS0lUX1RZUEVfRE9NX0VW
RU5UKTsKKyAgICBnX3ZhbHVlX3NldF9vYmplY3QoJnBhcmFtZXRlcnNbMV0sIGRvbUV2ZW50Lmdl
dCgpKTsKKworICAgIGdfY2xvc3VyZV9pbnZva2UobV9oYW5kbGVyLmdldCgpLCAwLCAyLCBwYXJh
bWV0ZXJzLCBOVUxMKTsKKyAgICBnX3ZhbHVlX3Vuc2V0KHBhcmFtZXRlcnMgKyAwKTsKKyAgICBn
X3ZhbHVlX3Vuc2V0KHBhcmFtZXRlcnMgKyAxKTsKIH0KIAogYm9vbCBHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKICAgICBp
ZiAoY29uc3QgR09iamVjdEV2ZW50TGlzdGVuZXIqIGdvYmplY3RFdmVudExpc3RlbmVyID0gR09i
amVjdEV2ZW50TGlzdGVuZXI6OmNhc3QoJmxpc3RlbmVyKSkKLSAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0ID09IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX29iamVjdCAmJiBtX2hhbmRsZXIgPT0gZ29i
amVjdEV2ZW50TGlzdGVuZXItPm1faGFuZGxlcjsKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0ID09
IGdvYmplY3RFdmVudExpc3RlbmVyLT5tX3RhcmdldAorICAgICAgICAgICAgJiYgcmVpbnRlcnBy
ZXRfY2FzdDxHQ0Nsb3N1cmUqPihtX2hhbmRsZXIuZ2V0KCkpLT5jYWxsYmFjayA9PSByZWludGVy
cHJldF9jYXN0PEdDQ2xvc3VyZSo+KGdvYmplY3RFdmVudExpc3RlbmVyLT5tX2hhbmRsZXIuZ2V0
KCkpLT5jYWxsYmFjazsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA4
ZTg0NzkzLi41ODQzNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCkBAIC0yMiwyNiArMjIsMjcgQEAKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dPYmplY3QgR09iamVj
dDsKLXR5cGVkZWYgdm9pZCAoKkdDYWxsYmFjaykgKHZvaWQpOwordHlwZWRlZiBzdHJ1Y3QgX0dD
bG9zdXJlIEdDbG9zdXJlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdPYmplY3RF
dmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgogCi0gICAgc3Rh
dGljIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wg
dXNlQ2FwdHVyZSwgdm9pZCogdXNlckRhdGEpCisgICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0
ZW5lcihHT2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFy
KiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCiAgICAg
ewotICAgICAgICBSZWZQdHI8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVm
KG5ldyBHT2JqZWN0RXZlbnRMaXN0ZW5lcihvYmplY3QsIHRhcmdldCwgZG9tRXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlLCB1c2VyRGF0YSkpKTsKLSAgICAgICAgcmV0dXJuIHRhcmdldC0+
YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGxpc3RlbmVyLnJlbGVhc2UoKSwgdXNlQ2Fw
dHVyZSk7CisgICAgICAgIFJlZlB0cjxHT2JqZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIoYWRv
cHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKHRhcmdldCwgY29yZVRhcmdldCwgZG9tRXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKSkpOworICAgICAgICByZXR1cm4gY29yZVRhcmdl
dC0+YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGxpc3RlbmVyLnJlbGVhc2UoKSwgdXNl
Q2FwdHVyZSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiBvYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50
TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKKyAgICBzdGF0aWMgYm9v
bCByZW1vdmVFdmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgRXZlbnRUYXJnZXQqIGNvcmVU
YXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wg
dXNlQ2FwdHVyZSkKICAgICB7Ci0gICAgICAgIEdPYmplY3RFdmVudExpc3RlbmVyIGtleShvYmpl
Y3QsIHRhcmdldCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlLCAwKTsKLSAgICAg
ICAgcmV0dXJuIHRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXks
IHVzZUNhcHR1cmUpOworICAgICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkodGFyZ2V0LCBj
b3JlVGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworICAgICAgICBy
ZXR1cm4gY29yZVRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsICZrZXks
IHVzZUNhcHR1cmUpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGdvYmplY3REZXN0cm95ZWRD
YWxsYmFjayhHT2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIEdPYmplY3QqKQpAQCAtNTks
MjEgKzYwLDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBF
dmVudExpc3RlbmVyJiBvdGhlcik7CiAKIHByaXZhdGU6Ci0gICAgR09iamVjdEV2ZW50TGlzdGVu
ZXIoR09iamVjdCosIEV2ZW50VGFyZ2V0KiwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2Fs
bGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgR09iamVj
dEV2ZW50TGlzdGVuZXIoR09iamVjdCosIEV2ZW50VGFyZ2V0KiwgY29uc3QgY2hhciogZG9tRXZl
bnROYW1lLCBHQ2xvc3VyZSosIGJvb2wgY2FwdHVyZSk7CiAgICAgfkdPYmplY3RFdmVudExpc3Rl
bmVyKCk7CiAgICAgdm9pZCBnb2JqZWN0RGVzdHJveWVkKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7CiAKLSAgICBHT2Jq
ZWN0KiBtX29iamVjdDsKLQorICAgIEdPYmplY3QqIG1fdGFyZ2V0OwogICAgIC8vIFdlIGRvIG5v
dCBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1fY29yZVRhcmdldCwgYmVjYXVzZQog
ICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdoZW4gdGhlIEdPYmplY3QgYW5kIHRodXMgdGhlIG1fY29y
ZVRhcmdldCBvYmplY3QgaXMgYWxpdmUuCiAgICAgRXZlbnRUYXJnZXQqIG1fY29yZVRhcmdldDsK
ICAgICBDU3RyaW5nIG1fZG9tRXZlbnROYW1lOwotICAgIEdDYWxsYmFjayBtX2hhbmRsZXI7Cisg
ICAgR1JlZlB0cjxHQ2xvc3VyZT4gbV9oYW5kbGVyOwogICAgIGJvb2wgbV9jYXB0dXJlOwotICAg
IHZvaWQqIG1fdXNlckRhdGE7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuY3BwCmluZGV4IGQ4ODViMmMuLjU5ZGZkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFRhcmdldFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiB0eXBlZGVmIFdlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UgV2ViS2l0RE9NRXZlbnRUYXJnZXRJbnRlcmZhY2U7CiAKQEAgLTYzLDkgKzY0
LDEwIEBAIGdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
ZXZlbnROYW1lLCBGQUxTRSk7CiAKICAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQpOwotCi0gICAgaWYg
KGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIpCi0gICAgICAgIHJldHVybiBpZmFjZS0+YWRkX2V2
ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUsIHVzZXJEYXRh
KTsKKyAgICBpZiAoaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcikgeworICAgICAgICBHUmVmUHRy
PEdDbG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGhhbmRsZXIsIHVz
ZXJEYXRhLCAwKSk7CisgICAgICAgIHJldHVybiBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyKHRh
cmdldCwgZXZlbnROYW1lLCBjbG9zdXJlLmdldCgpLCBidWJibGUpOworICAgIH0KIAogICAgIHJl
dHVybiBGQUxTRTsKIH0KQEAgLTc2LDcgKzc4LDM0IEBAIGdib29sZWFuIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7CiAKICAgICBXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUX0dF
VF9JRkFDRSh0YXJnZXQpOworICAgIGlmIChpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKSB7
CisgICAgICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3Vy
ZV9uZXcoaGFuZGxlciwgMCwgMCkpOworICAgICAgICByZXR1cm4gaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgY2xvc3VyZS5nZXQoKSwgYnViYmxlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gYnViYmxlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RVZFTlRfVEFSR0VUKHRhcmdldCksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChl
dmVudE5hbWUsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChoYW5kbGVyLCBGQUxT
RSk7CisKKyAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01f
RVZFTlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQpOworICAgIGlmIChpZmFjZS0+YWRkX2V2ZW50
X2xpc3RlbmVyKQorICAgICAgICByZXR1cm4gaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcih0YXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
IAorZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
X3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBl
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFyZ2V0KSwgRkFM
U0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0UpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGhhbmRsZXIsIEZBTFNFKTsKKworICAgIFdlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UqIGlmYWNlID0gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNFKHRh
cmdldCk7CiAgICAgaWYgKGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIpCiAgICAgICAgIHJl
dHVybiBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCBidWJibGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKaW5kZXggMTAyYzk0Ni4uMjU2YWRiYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaApAQCAtNDIsMTIgKzQyLDExIEBAIHN0cnVjdCBfV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSB7CiAKICAgICBnYm9vbGVhbiAgICAgICgqIGFkZF9ldmVudF9saXN0ZW5lcikoV2ViS2l0
RE9NRXZlbnRUYXJnZXQgKnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAg
ICAgICAgICAgYnViYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0Nsb3N1cmUgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAg
ICBidWJibGUpOwogICAgIGdib29sZWFuICAgICAgKCogcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKShX
ZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnRfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAg
ICAgIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDbG9zdXJlICAgICAgICAgICAgICpoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgYnViYmxlKTsKIH07CiAK
QEAgLTg2LDYgKzg1LDQ1IEBAIFdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bGxiYWNrICAgICAgICAgICAgIGhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAg
ICAgIGJ1YmJsZSk7CiAKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50
X2xpc3RlbmVyX3dpdGhfY2xvc3VyZToKKyAqIEB0YXJnZXQ6IEEgI1dlYktpdERPTUV2ZW50VGFy
Z2V0CisgKiBAZXZlbnRfbmFtZTogQSAjZ2NoYXIKKyAqIEBoYW5kbGVyOiBBICNHQ2xvc3VyZQor
ICogQGJ1YmJsZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBWZXJzaW9uIG9mIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigpIHVzaW5nIGEgY2xvc3VyZQorICogaW5zdGVh
ZCBvZiBhIGNhbGxiYWNrcyBmb3IgZWFzaWVyIGJpbmRpbmcgaW4gb3RoZXIgbGFuZ3VhZ2VzLgor
ICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuCisgKgorICogUmVuYW1lIHRvOiB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIKKyAqLworV0VCS0lUX0FQSSBnYm9vbGVh
biB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJl
KFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nsb3N1cmUg
ICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAg
ICAgICAgIGJ1YmJsZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZToKKyAqIEB0YXJnZXQ6IEEgI1dlYktpdERPTUV2
ZW50VGFyZ2V0CisgKiBAZXZlbnRfbmFtZTogQSAjZ2NoYXIKKyAqIEBoYW5kbGVyOiBBICNHQ2xv
c3VyZQorICogQGJ1YmJsZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBWZXJzaW9uIG9mIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcigpIHVzaW5nIGEgY2xvc3VyZQor
ICogaW5zdGVhZCBvZiBhIGNhbGxiYWNrcyBmb3IgZWFzaWVyIGJpbmRpbmcgaW4gb3RoZXIgbGFu
Z3VhZ2VzLgorICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuCisgKgorICogUmVuYW1lIHRvOiB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIKKyAqLworV0VCS0lU
X0FQSSBnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXJfd2l0aF9jbG9zdXJlKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0Nsb3N1cmUgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSk7CisKKwogR19FTkRfREVDTFMK
IAogI2VuZGlmIC8qIFdlYktpdERPTUV2ZW50VGFyZ2V0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCmluZGV4
IDM1NjcxNjcuLjk1ZjUyOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpAQCAtMTM5MywxNiArMTM5MywxNiBA
QCBzdWIgR2VuZXJhdGVFdmVudFRhcmdldElmYWNlIHsKICAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0
cmluZzsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJ9XG5cbiIpOwogCi0gICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXpl
fV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9p
bnRlciB1c2VyRGF0YSlcbntcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSlcbntcbiIpOwogICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjoke2ludGVyZmFj
ZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1l
fSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpO1xuIik7Ci0gICAgcHVz
aChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpO1xuIik7CisgICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAiICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRk
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIGJ1YmJsZSk7XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIjZWxzZVxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQGNv
bmRpdGlvbmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOwogICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICByZXR1cm4gZmFsc2U7XG4jZW5kaWYgLy8gJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICJ9XG5cbiIpOwogCi0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJh
Y2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKVxue1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9w
ZXJ0aWVzLCAic3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKVxue1xuIik7CiAg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdl
YkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
Ojoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIFdlYkNvcmU6
OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTtcbiIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggNjJjZDA0Yy4u
YjZkYzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQu
Y3BwCkBAIC04MSwxMyArODEsMTMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGEKICAgICB9CiB9
CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJE
YXRhKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKIHsKICAgICBXZWJD
b3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpU
ZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
LSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJi
bGUsIHVzZXJEYXRhKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCBidWJibGUpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0
X2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xl
YW4gYnViYmxlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKIHsK
ICAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKICAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCBidWJibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwCmluZGV4
IGQ3YjMwMjkuLjI4ZDJmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5jcHAK
QEAgLTY5LDEzICs2OSwxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9kaXNw
YXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZQogICAgIH0KIH0KIAot
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ub2RlX2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxs
YmFjayBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJEYXRhKQorc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ub2RlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiBidWJibGUpCiB7CiAgICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpOworICAgIHJldHVybiBXZWJDb3Jl
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSk7CiB9CiAKLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sg
aGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVz
dF9ub2RlX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiBidWJi
bGUpCiB7CiAgICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OwogICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IGJ1YmJsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214942</attachid>
            <date>2013-10-23 04:11:29 -0700</date>
            <delta_ts>2013-10-23 16:32:39 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk-event-listener.diff</filename>
            <type>text/plain</type>
            <size>30795</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNDllNzc2MS4uMjk5NTlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0xMC0yMyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dP
YmplY3QgYmluZGluZ3NdIE1ha2UgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGludHJvc3BlY3RhYmxl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzgzNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciB1c2UgR1JlZlB0ciB3aXRoIEdDbG9zdXJlLgorCisgICAgICAgICogd3RmL2dvYmpl
Y3QvR1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpk
ZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKiB3
dGYvZ29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxMy0xMC0yMSAgR3l1eW91bmcgS2ltICA8Z3l1
eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIE1ha2UgVFlQRV9DQVNUU19CQVNFIG1v
cmUgZmxleGlibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCmluZGV4IDM5MzFkNWEuLmI2
YTMxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcApAQCAtMjEsNiArMjEsNyBAQAog
CiAjaWYgVVNFKEdMSUIpCiAKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGds
aWIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xNDUsNiArMTQ2LDE5IEBAIHRlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKEdCeXRlQXJyYXkqIHB0cikKICAgICAgICAgZ19ieXRlX2FycmF5X3Vu
cmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdDbG9zdXJlKiByZWZHUHRyKEdDbG9zdXJlKiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19jbG9zdXJlX3JlZihwdHIpOworICAgIHJl
dHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdDbG9zdXJlKiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19jbG9zdXJlX3VucmVmKHB0cik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1Jl
ZlB0ci5oCmluZGV4IGU3ZDhiNjQuLmIyNWI3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2dvYmplY3QvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5o
CkBAIC0yMTksNiArMjE5LDggQEAgdGVtcGxhdGUgPD4gR0J5dGVBcnJheSogcmVmR1B0cihHQnl0
ZUFycmF5Kik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHQnl0ZUFycmF5Kik7CiB0ZW1w
bGF0ZSA8PiBHQnl0ZXMqIHJlZkdQdHIoR0J5dGVzKik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cihHQnl0ZXMqKTsKK3RlbXBsYXRlIDw+IEdDbG9zdXJlKiByZWZHUHRyKEdDbG9zdXJlKik7
Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHQ2xvc3VyZSopOwogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIHJlZkdQdHIoVCogcHRyKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5
cGVkZWZzLmgKaW5kZXggNjRjM2M1OC4uOTk5MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvZ29iamVjdC9HVHlwZWRlZnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oCkBAIC02Niw2ICs2Niw3IEBAIHR5cGVkZWYgc3RydWN0IF9HS2V5RmlsZSBHS2V5Rmls
ZTsKIHR5cGVkZWYgc3RydWN0IF9HUHRyQXJyYXkgR1B0ckFycmF5OwogdHlwZWRlZiBzdHJ1Y3Qg
X0dCeXRlQXJyYXkgR0J5dGVBcnJheTsKIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwor
dHlwZWRlZiBzdHJ1Y3QgX0dDbG9zdXJlIEdDbG9zdXJlOwogCiAjaWYgVVNFKENBSVJPKQogdHlw
ZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDAzMTdjZmYuLjA0NzcxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMy0xMC0y
MyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dPYmplY3QgYmluZGluZ3NdIE1ha2UgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGludHJvc3BlY3Rh
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzgz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJlIGFu
ZAorICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJf
d2l0aF9jbG9zdXJlIHRvIGJlCisgICAgICAgIHVzZWQgYnkgR09iamVjdCBpbnN0cm9zcGVjdGlv
biBiaW5kaW5ncy4gSW5zdGVhZCBvZiByZWNldmluZyBhCisgICAgICAgIEdDYWxsYmFjaywgd2hp
Y2ggbWFrZXMgdGhlIGZ1bmN0aW9uIG5vdCBpbnRyb3NwZWN0YWJsZSwgdGhleQorICAgICAgICBy
ZWNlaXZlIGEgR0Nsb3N1cmUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6fkdPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2dv
YmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAod2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQpOgorICAgICAgICAod2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKToKKyAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X3JlbW92ZV9ldmVudF9saXN0ZW5lcik6CisgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9hZGRfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJlKToKKyAgICAgICAgKHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtOgorICAgICAgICAoR2VuZXJh
dGVFdmVudFRhcmdldElmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcik6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X25vZGVfZGlzcGF0Y2hfZXZlbnQpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X25vZGVfYWRkX2V2ZW50X2xpc3RlbmVyKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9ub2RlX3JlbW92ZV9ldmVudF9saXN0ZW5lcik6CisKIDIwMTMtMTAtMjEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dJTl0gUHJvcGVybHkgc3Vw
cG9ydCByZXZlcnNlIGFuaW1hdGlvbnMgd2l0aG91dCBuZWVkaW5nIHNvZnR3YXJlIGZhbGxiYWNr
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RF
dmVudExpc3RlbmVyLmNwcAppbmRleCAwMjRhODU0Li4zYTM5YzdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNw
cApAQCAtMjIsMzEgKzIyLDMwIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJXZWJL
aXRET01FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgotI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
dm9pZCAoKkdPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2spKEdPYmplY3QqLCBXZWJLaXRET01F
dmVudCosIHZvaWQqKTsKLQotR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RFdmVudExpc3Rl
bmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZG9t
RXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCBjYXB0dXJlLCB2b2lkKiB1c2VyRGF0
YSkKK0dPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiB0
YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIGNhcHR1cmUpCiAgICAgOiBFdmVudExpc3RlbmVyKEdP
YmplY3RFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLSAgICAsIG1f
Y29yZVRhcmdldCh0YXJnZXQpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2NvcmVU
YXJnZXQoY29yZVRhcmdldCkKICAgICAsIG1fZG9tRXZlbnROYW1lKGRvbUV2ZW50TmFtZSkKICAg
ICAsIG1faGFuZGxlcihoYW5kbGVyKQogICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCi0gICAgLCBt
X3VzZXJEYXRhKHVzZXJEYXRhKQogewogICAgIEFTU0VSVChtX2NvcmVUYXJnZXQpOwotICAgIGdf
b2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4oR09i
amVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFjayksIHRoaXMpOworICAg
IGlmIChHX0NMT1NVUkVfTkVFRFNfTUFSU0hBTChtX2hhbmRsZXIuZ2V0KCkpKQorICAgICAgICBn
X2Nsb3N1cmVfc2V0X21hcnNoYWwobV9oYW5kbGVyLmdldCgpLCBnX2NjbG9zdXJlX21hcnNoYWxf
Z2VuZXJpYyk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYobV90YXJnZXQsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1dlYWtOb3RpZnk+KEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJveWVkQ2Fs
bGJhY2spLCB0aGlzKTsKIH0KIAogR09iamVjdEV2ZW50TGlzdGVuZXI6On5HT2JqZWN0RXZlbnRM
aXN0ZW5lcigpCiB7CiAgICAgaWYgKCFtX2NvcmVUYXJnZXQpCiAgICAgICAgIHJldHVybjsKLSAg
ICBnX29iamVjdF93ZWFrX3VucmVmKG1fb2JqZWN0LCByZWludGVycHJldF9jYXN0PEdXZWFrTm90
aWZ5PihHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Z29iamVjdERlc3Ryb3llZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19vYmplY3Rfd2Vha191bnJlZihtX3RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDxH
V2Vha05vdGlmeT4oR09iamVjdEV2ZW50TGlzdGVuZXI6OmdvYmplY3REZXN0cm95ZWRDYWxsYmFj
ayksIHRoaXMpOwogfQogCiB2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2JqZWN0RGVzdHJv
eWVkKCkKQEAgLTU5LDE5ICs1OCwyOSBAQCB2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpnb2Jq
ZWN0RGVzdHJveWVkKCkKICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gbV9jb3JlVGFyZ2V0Owog
ICAgIG1fY29yZVRhcmdldCA9IDA7CiAgICAgdGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVyKG1f
ZG9tRXZlbnROYW1lLmRhdGEoKSwgdGhpcywgbV9jYXB0dXJlKTsKKyAgICBtX2hhbmRsZXIgPSAw
OwogfQogCiB2b2lkIEdPYmplY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQogewotICAgIFdlYktpdERPTUV2ZW50KiBnb2Jq
ZWN0RXZlbnQgPSBXRUJLSVRfRE9NX0VWRU5UKFdlYktpdDo6a2l0KGV2ZW50KSk7Ci0gICAgcmVp
bnRlcnByZXRfY2FzdDxHT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrPihtX2hhbmRsZXIpKG1f
b2JqZWN0LCBnb2JqZWN0RXZlbnQsIG1fdXNlckRhdGEpOwotICAgIGdfb2JqZWN0X3VucmVmKGdv
YmplY3RFdmVudCk7CisgICAgR1ZhbHVlIHBhcmFtZXRlcnNbMl0gPSB7IEdfVkFMVUVfSU5JVCwg
R19WQUxVRV9JTklUIH07CisgICAgZ192YWx1ZV9pbml0KCZwYXJhbWV0ZXJzWzBdLCBXRUJLSVRf
VFlQRV9ET01fRVZFTlRfVEFSR0VUKTsKKyAgICBnX3ZhbHVlX3NldF9vYmplY3QoJnBhcmFtZXRl
cnNbMF0sIG1fdGFyZ2V0KTsKKworICAgIEdSZWZQdHI8V2ViS2l0RE9NRXZlbnQ+IGRvbUV2ZW50
ID0gYWRvcHRHUmVmKFdlYktpdDo6a2l0KGV2ZW50KSk7CisgICAgZ192YWx1ZV9pbml0KCZwYXJh
bWV0ZXJzWzFdLCBXRUJLSVRfVFlQRV9ET01fRVZFTlQpOworICAgIGdfdmFsdWVfc2V0X29iamVj
dCgmcGFyYW1ldGVyc1sxXSwgZG9tRXZlbnQuZ2V0KCkpOworCisgICAgZ19jbG9zdXJlX2ludm9r
ZShtX2hhbmRsZXIuZ2V0KCksIDAsIDIsIHBhcmFtZXRlcnMsIE5VTEwpOworICAgIGdfdmFsdWVf
dW5zZXQocGFyYW1ldGVycyArIDApOworICAgIGdfdmFsdWVfdW5zZXQocGFyYW1ldGVycyArIDEp
OwogfQogCiBib29sIEdPYmplY3RFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50
TGlzdGVuZXImIGxpc3RlbmVyKQogewogICAgIGlmIChjb25zdCBHT2JqZWN0RXZlbnRMaXN0ZW5l
ciogZ29iamVjdEV2ZW50TGlzdGVuZXIgPSBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdCgmbGlz
dGVuZXIpKQotICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXIt
Pm1fb2JqZWN0ICYmIG1faGFuZGxlciA9PSBnb2JqZWN0RXZlbnRMaXN0ZW5lci0+bV9oYW5kbGVy
OworICAgICAgICByZXR1cm4gbV90YXJnZXQgPT0gZ29iamVjdEV2ZW50TGlzdGVuZXItPm1fdGFy
Z2V0CisgICAgICAgICAgICAmJiByZWludGVycHJldF9jYXN0PEdDQ2xvc3VyZSo+KG1faGFuZGxl
ci5nZXQoKSktPmNhbGxiYWNrID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0NDbG9zdXJlKj4oZ29iamVj
dEV2ZW50TGlzdGVuZXItPm1faGFuZGxlci5nZXQoKSktPmNhbGxiYWNrOwogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9H
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9H
T2JqZWN0RXZlbnRMaXN0ZW5lci5oCmluZGV4IDhlODQ3OTMuLjU4NDM2ZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVy
LmgKQEAgLTIyLDI2ICsyMiwyNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB0
eXBlZGVmIHN0cnVjdCBfR09iamVjdCBHT2JqZWN0OwotdHlwZWRlZiB2b2lkICgqR0NhbGxiYWNr
KSAodm9pZCk7Cit0eXBlZGVmIHN0cnVjdCBfR0Nsb3N1cmUgR0Nsb3N1cmU7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgR09iamVjdEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRM
aXN0ZW5lciB7CiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgYm9vbCBhZGRFdmVudExpc3RlbmVyKEdP
YmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnRO
YW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlLCB2b2lkKiB1c2VyRGF0YSkK
KyAgICBzdGF0aWMgYm9vbCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgRXZlbnRU
YXJnZXQqIGNvcmVUYXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHT2JqZWN0RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIoYWRvcHRSZWYobmV3IEdPYmplY3RFdmVudExpc3RlbmVyKG9i
amVjdCwgdGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUsIHVzZXJEYXRh
KSkpOwotICAgICAgICByZXR1cm4gdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFt
ZSwgbGlzdGVuZXIucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgUmVmUHRyPEdPYmpl
Y3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lcihhZG9wdFJlZihuZXcgR09iamVjdEV2ZW50TGlzdGVu
ZXIodGFyZ2V0LCBjb3JlVGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
KSk7CisgICAgICAgIHJldHVybiBjb3JlVGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50
TmFtZSwgbGlzdGVuZXIucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKEdPYmplY3QqIG9iamVjdCwgRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgYm9v
bCB1c2VDYXB0dXJlKQorICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoR09iamVj
dCogdGFyZ2V0LCBFdmVudFRhcmdldCogY29yZVRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQogICAgIHsKLSAgICAgICAg
R09iamVjdEV2ZW50TGlzdGVuZXIga2V5KG9iamVjdCwgdGFyZ2V0LCBkb21FdmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUsIDApOwotICAgICAgICByZXR1cm4gdGFyZ2V0LT5yZW1vdmVFdmVu
dExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgJmtleSwgdXNlQ2FwdHVyZSk7CisgICAgICAgIEdPYmpl
Y3RFdmVudExpc3RlbmVyIGtleSh0YXJnZXQsIGNvcmVUYXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7CisgICAgICAgIHJldHVybiBjb3JlVGFyZ2V0LT5yZW1vdmVFdmVu
dExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgJmtleSwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAg
c3RhdGljIHZvaWQgZ29iamVjdERlc3Ryb3llZENhbGxiYWNrKEdPYmplY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciwgR09iamVjdCopCkBAIC01OSwyMSArNjAsMTkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKTsKIAogcHJp
dmF0ZToKLSAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRXZlbnRUYXJnZXQqLCBj
b25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBib29sIGNhcHR1cmUs
IHZvaWQqIHVzZXJEYXRhKTsKKyAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRXZl
bnRUYXJnZXQqLCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiwgYm9vbCBjYXB0
dXJlKTsKICAgICB+R09iamVjdEV2ZW50TGlzdGVuZXIoKTsKICAgICB2b2lkIGdvYmplY3REZXN0
cm95ZWQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRXZlbnQqKTsKIAotICAgIEdPYmplY3QqIG1fb2JqZWN0OwotCisgICAgR09iamVj
dCogbV90YXJnZXQ7CiAgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0
byB0aGUgbV9jb3JlVGFyZ2V0LCBiZWNhdXNlCiAgICAgLy8gd2Ugb25seSB1c2UgaXQgd2hlbiB0
aGUgR09iamVjdCBhbmQgdGh1cyB0aGUgbV9jb3JlVGFyZ2V0IG9iamVjdCBpcyBhbGl2ZS4KICAg
ICBFdmVudFRhcmdldCogbV9jb3JlVGFyZ2V0OwogICAgIENTdHJpbmcgbV9kb21FdmVudE5hbWU7
Ci0gICAgR0NhbGxiYWNrIG1faGFuZGxlcjsKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBtX2hhbmRs
ZXI7CiAgICAgYm9vbCBtX2NhcHR1cmU7Ci0gICAgdm9pZCogbV91c2VyRGF0YTsKIH07CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAKaW5kZXggZDg4NWIyYy4uYThmYWUy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01F
dmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01FdmVudFRhcmdldC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJXZWJLaXRE
T01FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CiAKIHR5cGVkZWYgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSBXZWJLaXRET01FdmVudFRh
cmdldEludGVyZmFjZTsKIApAQCAtNDUsNDIgKzQ2LDUwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2RlZmF1bHRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKikK
IHsKIH0KIAotdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQorZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcikKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlRf
VEFSR0VUKHRhcmdldCkpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVO
VChldmVudCkpOwotCi0gICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBGQUxTRSk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCksIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwogCi0g
ICAgaWYgKGlmYWNlLT5kaXNwYXRjaF9ldmVudCkKLSAgICAgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50KHRhcmdldCwgZXZlbnQsIGVycm9yKTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9FVkVOVF9U
QVJHRVRfR0VUX0lGQUNFKHRhcmdldCktPmRpc3BhdGNoX2V2ZW50KHRhcmdldCwgZXZlbnQsIGVy
cm9yKTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEp
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJh
Y2sgaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7CiAK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UX1RBUkdFVCh0YXJn
ZXQpLCBGQUxTRSk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnROYW1lLCBGQUxTRSk7
CiAKLSAgICBXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSA9IFdFQktJVF9ET01fRVZF
TlRfVEFSR0VUX0dFVF9JRkFDRSh0YXJnZXQpOworICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1
cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoaGFuZGxlciwgdXNlckRhdGEsIDApKTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNFKHRhcmdldCktPmFkZF9l
dmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgY2xvc3VyZS5nZXQoKSwgdXNlQ2FwdHVy
ZSk7Cit9CiAKLSAgICBpZiAoaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lcikKLSAgICAgICAgcmV0
dXJuIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IGJ1YmJsZSwgdXNlckRhdGEpOworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFy
Z2V0KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0Up
OwogCi0gICAgcmV0dXJuIEZBTFNFOworICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBh
ZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoaGFuZGxlciwgMCwgMCkpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKHRhcmdldCwgZXZlbnROYW1lLCBjbG9zdXJlLmdldCgpLCB1c2VDYXB0dXJlKTsKIH0KIAot
Z2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxi
YWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VWRU5UX1RBUkdFVCh0YXJnZXQpLCBGQUxTRSk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoZXZlbnROYW1lLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaGFuZGxlciwg
RkFMU0UpOwogCi0gICAgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UgPSBXRUJLSVRf
RE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UodGFyZ2V0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNFKHRhcmdldCktPmFkZF9ldmVudF9saXN0ZW5lcih0YXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CiAKLSAgICBpZiAoaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lcikKLSAgICAgICAgcmV0dXJuIGlmYWNlLT5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSk7CitnYm9vbGVh
biB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9z
dXJlKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQodGFyZ2V0KSwgRkFMU0UpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV2ZW50TmFtZSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGhhbmRsZXIsIEZBTFNFKTsKIAotICAgIHJldHVybiBGQUxTRTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNFKHRhcmdldCktPnJlbW92ZV9l
dmVudF9saXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oCmluZGV4IDEwMmM5NDYuLmRhM2Y3MjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZl
bnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERP
TUV2ZW50VGFyZ2V0LmgKQEAgLTM2LDI1ICszNiwzMiBAQCBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UgewogICAgIEdUeXBlSW50ZXJmYWNlIGdJZmFjZTsKIAogICAgIC8qIHZpcnR1
YWwgdGFibGUgKi8KLSAgICB2b2lkICAgICAgICAgICgqIGRpc3BhdGNoX2V2ZW50KShXZWJLaXRE
T01FdmVudFRhcmdldCAqdGFyZ2V0LAorICAgIGdib29sZWFuICAgICAgKCogZGlzcGF0Y2hfZXZl
bnQpKFdlYktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0RE9NRXZlbnQgICAgICAgKmV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CiAK
ICAgICBnYm9vbGVhbiAgICAgICgqIGFkZF9ldmVudF9saXN0ZW5lcikoV2ViS2l0RE9NRXZlbnRU
YXJnZXQgKnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAg
YnViYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0Nsb3N1cmUgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICB1c2VfY2Fw
dHVyZSk7CiAgICAgZ2Jvb2xlYW4gICAgICAoKiByZW1vdmVfZXZlbnRfbGlzdGVuZXIpKFdlYktp
dERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudF9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAg
aGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jv
b2xlYW4gICAgICAgICAgICAgIGJ1YmJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDbG9zdXJlICAgICAgICAgICAgICpoYW5kbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAg
dXNlX2NhcHR1cmUpOwogfTsKIAogCiBXRUJLSVRfQVBJIEdUeXBlICAgICB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CiAKLVdFQktJVF9BUEkgdm9p
ZCAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0ICp0YXJnZXQsCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3Bh
dGNoX2V2ZW50OgorICogQHRhcmdldDogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyAqIEBldmVu
dDogQSAjV2ViS2l0RE9NRXZlbnQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBhbiBl
cnJvciBvciAlTlVMTAorICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuCisgKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01FdmVudCAgICAgICAqZXZlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwogCkBAIC02MywxNCArNzAsMTUgQEAg
V0VCS0lUX0FQSSB2b2lkICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQKICAqIEB0YXJnZXQ6IEEgI1dlYktpdERPTUV2ZW50VGFy
Z2V0CiAgKiBAZXZlbnRfbmFtZTogQSAjZ2NoYXIKICAqIEBoYW5kbGVyOiAoc2NvcGUgYXN5bmMp
OiBBICNHQ2FsbGJhY2sKLSAqIEBidWJibGU6IEEgI2dib29sZWFuCisgKiBAdXNlX2NhcHR1cmU6
IEEgI2dib29sZWFuCiAgKiBAdXNlcl9kYXRhOiBBICNncG9pbnRlcgogICoKKyAqIFJldHVybnM6
IGEgI2dib29sZWFuCiAgKi8KIFdFQktJVF9BUEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpldmVudF9uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFj
ayAgICAgICAgICAgICBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHVzZV9jYXB0dXJlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEpOwogCiAvKioKQEAgLTc4LDEzICs4Niw1MyBA
QCBXRUJLSVRfQVBJIGdib29sZWFuICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYQogICogQHRhcmdldDogQSAjV2ViS2l0RE9NRXZlbnRU
YXJnZXQKICAqIEBldmVudF9uYW1lOiBBICNnY2hhcgogICogQGhhbmRsZXI6IChzY29wZSBjYWxs
KTogQSAjR0NhbGxiYWNrCi0gKiBAYnViYmxlOiBBICNnYm9vbGVhbgorICogQHVzZV9jYXB0dXJl
OiBBICNnYm9vbGVhbgogICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuCiAgKi8KIFdFQktJVF9B
UEkgZ2Jvb2xlYW4gIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCAqdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpldmVudF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBoYW5k
bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICBidWJibGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuICAgICAgICAgICAgICB1c2VfY2FwdHVyZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZToKKyAqIEB0YXJn
ZXQ6IEEgI1dlYktpdERPTUV2ZW50VGFyZ2V0CisgKiBAZXZlbnRfbmFtZTogQSAjZ2NoYXIKKyAq
IEBoYW5kbGVyOiBBICNHQ2xvc3VyZQorICogQHVzZV9jYXB0dXJlOiBBICNnYm9vbGVhbgorICoK
KyAqIFZlcnNpb24gb2Ygd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVy
KCkgdXNpbmcgYSBjbG9zdXJlCisgKiBpbnN0ZWFkIG9mIGEgY2FsbGJhY2tzIGZvciBlYXNpZXIg
YmluZGluZyBpbiBvdGhlciBsYW5ndWFnZXMuCisgKgorICogUmV0dXJuczogYSAjZ2Jvb2xlYW4K
KyAqCisgKiBSZW5hbWUgdG86IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0
ZW5lcgorICovCitXRUJLSVRfQVBJIGdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUoV2ViS2l0RE9NRXZlbnRUYXJnZXQgKnRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqZXZlbnRfbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQ2xvc3VyZSAgICAgICAgICAgICAqaGFuZGxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgdXNlX2NhcHR1cmUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcl93aXRoX2Ns
b3N1cmU6CisgKiBAdGFyZ2V0OiBBICNXZWJLaXRET01FdmVudFRhcmdldAorICogQGV2ZW50X25h
bWU6IEEgI2djaGFyCisgKiBAaGFuZGxlcjogQSAjR0Nsb3N1cmUKKyAqIEB1c2VfY2FwdHVyZTog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBWZXJzaW9uIG9mIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcigpIHVzaW5nIGEgY2xvc3VyZQorICogaW5zdGVhZCBvZiBhIGNh
bGxiYWNrcyBmb3IgZWFzaWVyIGJpbmRpbmcgaW4gb3RoZXIgbGFuZ3VhZ2VzLgorICoKKyAqIFJl
dHVybnM6IGEgI2dib29sZWFuCisgKgorICogUmVuYW1lIHRvOiB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIKKyAqLworV0VCS0lUX0FQSSBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9zdXJlKFdl
YktpdERPTUV2ZW50VGFyZ2V0ICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAgICAgICAgICAgKmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nsb3N1
cmUgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ICAgICAgICAgICAgIHVzZV9jYXB0dXJlKTsKKwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5w
bQppbmRleCAzNTY3MTY3Li45ZDcwOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTEzODAsMzIgKzEz
ODAsMzMgQEAgc3ViIEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7CiAgICAgJGltcGxJbmNsdWRl
c3siV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJL
aXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsKIAotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
InN0YXRpYyB2b2lkIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKVxue1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKVxu
e1xuIik7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAiICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpO1xu
Iik7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNl
TmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG5cbiIpOwogICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtc
biIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBjb3JlVGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KGNvcmVFdmVudCwgZWMpO1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAi
ICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnQoY29yZUV2ZW50
LCBlYyk7XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgaWYgKGVjKSB7XG4g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7
XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoXCJXRUJLSVRfRE9NXCIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTtcbiAgICB9XG4iKTsKKyAgICBwdXNoKEBjQm9k
eVByb3BlcnRpZXMsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIiNlbHNlXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCBAY29uZGl0aW9uYWxXYXJuKSBpZiBzY2FsYXIoQGNvbmRpdGlvbmFsV2Fy
bik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxT
dHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0
aWVzLCAiICAgIHJldHVybiBmYWxzZTtcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn1c
blxuIik7CiAKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV8ke2RlY2FtZWxpemV9X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxsYmFjayBoYW5kbGVyLCBn
Ym9vbGVhbiBidWJibGUsIGdwb2ludGVyIHVzZXJEYXRhKVxue1xuIik7CisgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCAic3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9h
ZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSlcbntc
biIpOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
IiAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBX
ZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEp
O1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBXZWJDb3JlOjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpO1xuIik7CiAgICAgcHVz
aChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAg
ICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAY29u
ZGl0aW9uYWxXYXJuKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZh
bHNlO1xuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAifVxuXG4iKTsKIAotICAgIHB1c2go
QGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6
ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSlc
bntcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tXyR7ZGVjYW1lbGl6ZX1fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpXG57XG4iKTsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMs
ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAg
ICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGNCb2R5
UHJvcGVydGllcywgIiAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCBidWJibGUpO1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAg
IHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpO1xuIik7CiAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpIGlmICRj
b25kaXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25h
bFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9
XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCA2MmNkMDRjLi4zNzE5ZmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTY4LDI5ICs2OCwzMCBA
QCBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6
VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2JqZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQq
IGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKIHsKICAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKICAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKIAogICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnQoY29yZUV2ZW50LCBl
Yyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudChjb3Jl
RXZlbnQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5j
b2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEp
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsKICAgICBXZWJD
b3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpU
ZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
LSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJi
bGUsIHVzZXJEYXRhKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
dGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdi
b29sZWFuIGJ1YmJsZSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFy
Z2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQogewogICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZh
Y2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5jcHAKaW5kZXggZDdiMzAyOS4uNDQ0
NmYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNwcApAQCAtNTYsMjkgKzU2
LDMwIEBAIFdlYktpdERPTVRlc3ROb2RlKiB3cmFwVGVzdE5vZGUoV2ViQ29yZTo6VGVzdE5vZGUq
IGNvcmVPYmplY3QpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfbm9kZV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQorc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCiB7CiAg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CiAgICAg
V2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0
Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwogCiAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dChjb3JlRXZlbnQsIGVjKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KGNvcmVFdmVudCwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwogICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwogICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCiB7CiAgICAgV2ViQ29y
ZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBXZWJD
b3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKIHsKICAgICBXZWJDb3JlOjpUZXN0Tm9kZSog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb2RlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKIH0KIAogc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdl
dElmYWNlKiBpZmFjZSkK
</data>
<flag name="review"
          id="237562"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>