<?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>46936</bug_id>
          
          <creation_ts>2010-09-30 14:17:19 -0700</creation_ts>
          <short_desc>Make DOM Mutation Events Asynchronous</short_desc>
          <delta_ts>2011-07-09 06:35:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>50046</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>aa</cc>
    
    <cc>andersca</cc>
    
    <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>jparent</cc>
    
    <cc>jschuh</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mihaip</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>287814</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-30 14:17:19 -0700</bug_when>
    <thetext>DOM mutation events are sources of many security holes and crashes in HTML editing.  I propose to make them asynchronous and in particular delay all mutation events triggered by mutations inside a EditCommand until the completion of the command to eliminate the chance of JavaScript modifying DOM in a way editing code does not expect.  There are two benefits to this approach:
* Robust Security - Many crashes in HTML editing will be eliminated
* Performance Gain - Multiple mutation events can be collapsed into one if parent nodes of the subtree being modified are same

While there is a fear that this might break the existing websites, I recently discovered that Microsoft Internet Explorer 9 Beta fires DOM mutation events asynchronously.  Given the market share of the Internet Explorer, it seems clear to me that popular websites will eventually (if not immediately) support asynchronous DOM mutation events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287883</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-30 15:23:37 -0700</bug_when>
    <thetext>From a standards point of view, the latest editor&apos;s draft of DOM events level 3 states that mutation events are optional and discouraged.  I think we&apos;re completely justified in changing the behavior to be saner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310042</commentid>
    <comment_count>2</comment_count>
      <attachid>74066</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 17:07:38 -0800</bug_when>
    <thetext>Created attachment 74066
work in progress

Here&apos;s my work-in-progress patch.  I talke with Ojan, and we decided to queue up events in page rather than in each document because it&apos;s common for developers to listen to events across frame boundaries, and we&apos;d like to preserve the order of events in such cases.

Any feedback / suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310044</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 17:11:27 -0800</bug_when>
    <thetext>Our current plan is to have Chrome&apos;s QA team test WebKit/Chromium with this patch, and see if things break.  We&apos;ll also make use of Google Code Search and look for ECMAScript code that listens to DOM mutation events, and test on those as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310057</commentid>
    <comment_count>4</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-16 17:27:52 -0800</bug_when>
    <thetext>I&apos;ve been working on making scroll events async (see patch up at 45631), and as part of that introducing an EventQueue class (attached to Document, since it already had some async event functionality that I refactored) for use in async events. When that ends up landing, you should be abel to use that instead of needing to add Page::appendAsyncEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310061</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 17:39:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;ve been working on making scroll events async (see patch up at 45631), and as part of that introducing an EventQueue class (attached to Document, since it already had some async event functionality that I refactored) for use in async events. When that ends up landing, you should be abel to use that instead of needing to add Page::appendAsyncEvent

The problem with queueing per document is that the ordering of DOM mutation events from different frames will change when events are interleaved with each other.  We should investigate whether this will affect a lot of websites or not though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310068</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-16 17:58:01 -0800</bug_when>
    <thetext>A single global queue is probably fine. There’s no reason it has to be per-page or per-document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310078</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 18:37:00 -0800</bug_when>
    <thetext>I&apos;ve been hitting an assertion in JSEventListener.h:

    inline JSC::JSObject* JSEventListener::jsFunction(ScriptExecutionContext* scriptExecutionContext) const
    {
        if (!m_jsFunction)
            m_jsFunction = initializeJSFunction(scriptExecutionContext);

        // Verify that we have a valid wrapper protecting our function from
        // garbage collection.
&gt;       ASSERT(m_wrapper || !m_jsFunction);

I think the problem is that I&apos;m calling the event listener after the page is unloaded.  Is there a way I can figure out if the document has been unloaded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310456</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-17 12:42:53 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Is there a way I can figure out if the document has been unloaded?

There are multiple possible meanings of “unloaded” and stages to the unloading process, which makes it hard to get right. A better question is exactly at what point is it not a good idea to deliver the events.

One issue is that a document could be in the back/forward cache.

A document that’s no longer loaded will have a Frame* of 0, but I’m not sure that this happens at the exact right time for your purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310465</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-17 12:56:46 -0800</bug_when>
    <thetext>Mutation event should probably work in frameless documents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310586</commentid>
    <comment_count>10</comment_count>
      <attachid>74172</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-17 16:01:58 -0800</bug_when>
    <thetext>Created attachment 74172
alt. work in progress

Here&apos;s an alternative approach where I queue events up in the document.  Per discussion with Alexey on IRC, queuing events in the page requires keeping the JS wrapper object for Document alive even after the document is unloaded.  I&apos;ve thought about it for a while but it&apos;s just odd to keep the document around after the document is detached.  I also considered firing all pending events when we&apos;re detaching the document but that sounds arbitrary too.

Furthermore, async event doesn&apos;t need to preserve the order with respect to other events according to http://www.w3.org/TR/DOM-Level-3-Events/#sync-async.  If we&apos;re really making DOM mutation events async, then we shouldn&apos;t preserve the order because that&apos;ll add another constraint specific to DOM mutation events on the future browser implementations.  If preserving order is so important, then we should probably implement Maciej&apos;s scoping object idea rather than making the event async.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311705</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-19 14:58:14 -0800</bug_when>
    <thetext>I talked with Darin@Google, and we concluded that we should try Maciej&apos;s scoping object idea.  With scoping object, we don&apos;t have to deal with document going out of scope because we&apos;re only delaying the event firing inside WebCore.  Also, this approach will keep DOM mutation events look like synchronous to JavaScript and might be better from compatibility standpoint as well.

I&apos;ll try &amp; see what I can do with this approach in the next couple of weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314716</commentid>
    <comment_count>12</comment_count>
      <attachid>75079</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-29 16:18:58 -0800</bug_when>
    <thetext>Created attachment 75079
scoped events approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314720</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-29 16:33:00 -0800</bug_when>
    <thetext>E(In reply to comment #12)
&gt; Created an attachment (id=75079) [details]
&gt; scoped events approach

Many of ScopedEventQueue&apos; members functions are inline because I tried to minimize the runtime cost.  EventQueueScope, in fact, shouldn&apos;t add runtime cost other than incrementing / decrementing the counter since the instantiation of the event queue happens only once.

I hate the names ScopedEventQueue and EventQueueScope but I couldn&apos;t come up with anything better so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315210</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-30 11:53:12 -0800</bug_when>
    <thetext>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS&apos;&apos; AND ANY

Looks like a wrong copyright header.

-    if (event.type == &quot;DOMNodeInserted&quot; &amp;&amp; event.target.nodeName == &quot;BR&quot;)
+    if (event.type == &quot;DOMNodeInserted&quot; &amp;&amp; event.target.nodeType == 3)

It&apos;s surprising if this makes a difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315222</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-30 12:02:27 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; -    if (event.type == &quot;DOMNodeInserted&quot; &amp;&amp; event.target.nodeName == &quot;BR&quot;)
&gt; +    if (event.type == &quot;DOMNodeInserted&quot; &amp;&amp; event.target.nodeType == 3)
&gt; 
&gt; It&apos;s surprising if this makes a difference.

The event for BR is never observable because BR is attached and detached within a single edit command, and the event is fired from the detached node.

Per discussion with Alexey on IRC:
I decided not to make DOMFocusIn/DOMFocusOut async for now because:
1. I wanted to know what Apple folks think about those events since it has radar bug associated with it.
2. They are UI events and therefore has associated underlying events.  It&apos;ll be weird to hold back events that have underlying events because those underlying events will be fired synchronously.  We could queue them only if they didn&apos;t have underlying events but that seems to unnecessarily complicate the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317096</commentid>
    <comment_count>16</comment_count>
      <attachid>75079</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-03 15:19:52 -0800</bug_when>
    <thetext>Comment on attachment 75079
scoped events approach

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

&gt; WebCore/ChangeLog:15
&gt; +        All DOM mutation events except DOMFocusIn and DOMFocusOut are treated as scoped events,

Nit: DOMFocusIn/DOMFocusOut are synchronous, but they&apos;re not mutation events.

&gt; WebCore/dom/Node.cpp:2556
&gt; +    event-&gt;setTarget(eventTargetRespectingSVGTargetRules(this));

Nit: a comment explaining why you need to do this would be good.

&gt; WebCore/dom/ScopedEventQueue.h:89
&gt; +inline void ScopedEventQueue::enqueueEvent(PassRefPtr&lt;Event&gt; event)
&gt; +{
&gt; +    if (m_scopingLevel)
&gt; +        m_queuedEvents.append(event);
&gt; +    else
&gt; +        dispatchEvent(event);
&gt; +}
&gt; +
&gt; +inline ScopedEventQueue* ScopedEventQueue::instance()
&gt; +{
&gt; +    if (!s_instance)
&gt; +        initialize();
&gt; +
&gt; +    return s_instance;
&gt; +}
&gt; +
&gt; +inline void ScopedEventQueue::incrementScopingLevel()
&gt; +{
&gt; +    m_scopingLevel++;
&gt; +}
&gt; +
&gt; +inline void ScopedEventQueue::decrementScopingLevel()
&gt; +{
&gt; +    ASSERT(m_scopingLevel);
&gt; +    m_scopingLevel--;
&gt; +    if (!m_scopingLevel)
&gt; +        dispatchAllEvents();
&gt; +}

I&apos;m very skeptical that inlining these provides any meaningful performance improvement.

&gt; LayoutTests/fast/events/mutation/execCommands.html:96
&gt; +        window.getSelection().selectAllChildren(test, 0);

nit: selectAllChildren only takes 1 argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317128</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-03 15:49:58 -0800</bug_when>
    <thetext>Ojan and I tried to add an assert in dispatchGenericEvent that the scoping is always 0 but this attempt failed.

Besides the fact we need to make DOMFocusIn, DOMFocusOut, focusin, focusout scoped (i.e. all UI events), there are cases where editing commands moves iframe and script elements and this results in a whole bunch of synchronous events being fired.  In short, we can&apos;t really make all editing events safe.

When a synchronous event fires while RAII objects are still alive, we can do either:
1. Keep scoped events alone.
2. Fire all queued (scoped) events because delaying the events won&apos;t do any good.

For now, I&apos;m inclined to take option 1 because IE9 makes DOM mutation events completely asynchronous.  But we might need to take option 2 when we make other events such as focusin/focusout scoped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317144</commentid>
    <comment_count>18</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-03 15:58:20 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; When a synchronous event fires while RAII objects are still alive, we can do either:
&gt; 1. Keep scoped events alone.
&gt; 2. Fire all queued (scoped) events because delaying the events won&apos;t do any good.
&gt; 
&gt; For now, I&apos;m inclined to take option 1 because IE9 makes DOM mutation events completely asynchronous.  But we might need to take option 2 when we make other events such as focusin/focusout scoped.

We should try scoping the focus/blur/etc events. They happen after the focus has moved and are not cancelable, so they should be scopeable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317195</commentid>
    <comment_count>19</comment_count>
      <attachid>75584</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-03 17:50:17 -0800</bug_when>
    <thetext>Created attachment 75584
Make DOMFocusIn, DOMFocousOut, focusin, and focusout scoped as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319707</commentid>
    <comment_count>20</comment_count>
      <attachid>75584</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-09 14:09:35 -0800</bug_when>
    <thetext>Comment on attachment 75584
Make DOMFocusIn, DOMFocousOut, focusin, and focusout scoped as well

Please remove the inlining. Otherwise, looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319965</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-09 23:48:19 -0800</bug_when>
    <thetext>Committed r73690: &lt;http://trac.webkit.org/changeset/73690&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434490</commentid>
    <comment_count>22</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-07-09 06:35:23 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Committed r73690: &lt;http://trac.webkit.org/changeset/73690&gt;

For future reference, this fix was originally committed as r73684, but rolled out in r73689 for Bug 50801 because the ChangeLog didn&apos;t have a bug number in it.

&lt;http://trac.webkit.org/changeset/73684&gt;
&lt;http://trac.webkit.org/changeset/73689&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74066</attachid>
            <date>2010-11-16 17:07:38 -0800</date>
            <delta_ts>2010-11-29 16:18:49 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip46936</filename>
            <type>text/plain</type>
            <size>7898</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjEzMCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTY1LDcgKzExNjUsNyBAQAogICAgIGlmICghZG9jdW1lbnQo
KS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01BVFRSTU9ESUZJRURfTElTVEVORVIpKQog
ICAgICAgICByZXR1cm47CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hF
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0
dHIsIGF0dHItPnZhbHVlKCksCisgICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShET01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ciwgYXR0ci0+dmFsdWUo
KSwKICAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQo
KSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7CiAjZW5kaWYKIH0KQEAgLTExNzgsNyAr
MTE3OCw3IEBACiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShE
T01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKKyAgICBkaXNw
YXRjaE11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2
ZW50LCB0cnVlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAogICAgICAgICBhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSwgTXV0YXRpb25FdmVudDo6QURESVRJT04p
LCBlYyk7CiAjZW5kaWYKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDcyMTMwKQorKysgV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNiArNTE3LDcgQEAKIAogICAgIHVzaW5nIEV2ZW50
VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAogICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVu
dCopOwpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDcyMTMwKQorKysgV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjcsMTIgKzEwMjcs
MTIgQEAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7
CiAKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikpCi0gICAgICAgIGMtPmRpc3BhdGNo
RXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRF
dmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CisgICAgICAgIGMtPmRpc3BhdGNoTXV0YXRp
b25FdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRl
ZEV2ZW50LCB0cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKIAogICAgIC8vIGRpc3BhdGNoIHRoZSBE
T01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCiAgICAg
aWYgKGMtPmluRG9jdW1lbnQoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50
OjpET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpKSB7CiAgICAgICAgIGZvciAo
OyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCi0gICAgICAgICAgICBjLT5kaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlKSk7CisgICAgICAgICAgICBjLT5kaXNwYXRjaE11
dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5z
ZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAgICB9CiB9CiAKQEAgLTEwNDksMTIg
KzEwNDksMTIgQEAKIAogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1vdmFsIG11dGF0aW9uIGV2ZW50
cwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShE
b2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKQotICAgICAgICBjLT5kaXNwYXRjaEV2
ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVu
dCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CisgICAgICAgIGMtPmRpc3BhdGNoTXV0YXRpb25F
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRXZl
bnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCiAgICAgLy8gZGlzcGF0Y2ggdGhlIERPTU5v
ZGVSZW1vdmVkRnJvbURvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwogICAgIGlmIChj
LT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9N
Tk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfTElTVEVORVIpKSB7CiAgICAgICAgIGZvciAoOyBjOyBj
ID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCi0gICAgICAgICAgICBjLT5kaXNwYXRjaEV2
ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRGcm9t
RG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKKyAgICAgICAgICAgIGMtPmRpc3BhdGNoTXV0YXRpb25F
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJv
bURvY3VtZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNzIx
MzApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1MCw2ICsy
NTUwLDE3IEBACiAgICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50LnJlbGVhc2Uo
KSk7CiB9CiAKK3ZvaWQgTm9kZTo6ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IHBycEV2ZW50KQoreworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKyAg
ICAKKyAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1
bGVzKHRoaXMpKTsKKyAgICAKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAg
ICAgcGFnZS0+YXBwZW5kQXN5bmNFdmVudChldmVudCk7Cit9CisKIHN0YXRpYyBjb25zdCBFdmVu
dENvbnRleHQqIHRvcEV2ZW50Q29udGV4dChjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5j
ZXN0b3JzKQogewogICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZhbmNlc3Rv
cnMubGFzdCgpOwpAQCAtMjY2NCw3ICsyNjc1LDcgQEAKICAgICBpZiAoIWRvY3VtZW50KCktPmhh
c0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NU1VCVFJFRU1PRElGSUVEX0xJU1RFTkVSKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCB0cnVlKSk7CisgICAgZGlzcGF0
Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NU3Vi
dHJlZU1vZGlmaWVkRXZlbnQsIHRydWUpKTsKIH0KIAogdm9pZCBOb2RlOjpkaXNwYXRjaFVJRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8
RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKSW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZpc2lv
biA3MjEzMCkKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsNyArMTk2LDcgQEAKICAgICBpZiAocGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJl
bnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlmIChkb2N1bWVudCgpLT5oYXNMaXN0
ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUikpCi0g
ICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5E
T01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgMCwgcHJldlZhbHVlLCBtX2RhdGEp
KTsKKyAgICAgICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIDAsIHByZXZW
YWx1ZSwgbV9kYXRhKSk7CiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0
ZXJEYXRhTW9kaWZpZWQoZG9jdW1lbnQoKSwgdGhpcyk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDcyMTMwKQor
KysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAog
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTUy
LDYgKzUzLDcgQEAKICAgICBjbGFzcyBEcmFnQ2xpZW50OwogICAgIGNsYXNzIERyYWdDb250cm9s
bGVyOwogICAgIGNsYXNzIEVkaXRvckNsaWVudDsKKyAgICBjbGFzcyBFdmVudDsKICAgICBjbGFz
cyBGb2N1c0NvbnRyb2xsZXI7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgR2VvbG9jYXRp
b25DbGllbnQ7CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0
VVJMc0FyZUFsbG93ZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgamF2YVNjcmlwdFVSTHNBcmVBbGxv
d2VkKCkgY29uc3Q7CiAKKyAgICAgICAgdm9pZCBhcHBlbmRBc3luY0V2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKKyAgICAgICAgdm9pZCBhc3luY0V2ZW50VGltZXJGaXJlZChUaW1lcjxQYWdlPiop
OworCiAgICAgICAgIC8vIERvbid0IGFsbG93IG1vcmUgdGhhbiBhIGNlcnRhaW4gbnVtYmVyIG9m
IGZyYW1lcyBpbiBhIHBhZ2UuCiAgICAgICAgIC8vIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFi
bGUgdXBwZXIgYm91bmQsIGFuZCBvdGhlcndpc2UgbXV0dWFsbHkKICAgICAgICAgLy8gcmVjdXJz
aXZlIGZyYW1lc2V0IHBhZ2VzIGNhbiBxdWlja2x5IGJyaW5nIHRoZSBwcm9ncmFtIHRvIGl0cyBr
bmVlcwpAQCAtMzIyLDYgKzMyNyw4IEBACiAgICAgICAgIAogICAgICAgICBPd25QdHI8QmFja0Zv
cndhcmRDb250cm9sbGVyPiBtX2JhY2tGb3J3YXJkQ29udHJvbGxlcjsKICAgICAgICAgUmVmUHRy
PEZyYW1lPiBtX21haW5GcmFtZTsKKyAgICAgICAgVGltZXI8UGFnZT4gbV9hc3luY0V2ZW50VGlt
ZXI7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9wZW5kaW5nRXZlbnRzOwogCiAg
ICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9nbG9iYWxIaXN0b3J5SXRlbTsKIApJbmRleDog
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNw
cAkocmV2aXNpb24gNzIxMzApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgICwgbV9zZXR0aW5ncyhhZG9wdFB0cihuZXcgU2V0
dGluZ3ModGhpcykpKQogICAgICwgbV9wcm9ncmVzcyhhZG9wdFB0cihuZXcgUHJvZ3Jlc3NUcmFj
a2VyKSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBCYWNrRm9y
d2FyZENvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRDbGllbnQpKSkKKyAg
ICAsIG1fYXN5bmNFdmVudFRpbWVyKHRoaXMsICZQYWdlOjphc3luY0V2ZW50VGltZXJGaXJlZCkK
ICAgICAsIG1fdGhlbWUoUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSh0aGlzKSkKICAgICAsIG1f
ZWRpdG9yQ2xpZW50KHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCkKICAgICAsIG1fZnJhbWVDb3Vu
dCgwKQpAQCAtODQ0LDYgKzg0NSwyOCBAQAogICAgIHJldHVybiBtX2phdmFTY3JpcHRVUkxzQXJl
QWxsb3dlZDsKIH0KIAordm9pZCBQYWdlOjphcHBlbmRBc3luY0V2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQoreworICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIGlm
ICghbV9hc3luY0V2ZW50VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9hc3luY0V2ZW50VGlt
ZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBhZ2U6OmFzeW5jRXZlbnRUaW1lckZpcmVk
KFRpbWVyPFBhZ2U+KikKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IHBlbmRpbmdFdmVu
dHM7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKyAgICBtX3BlbmRpbmdFdmVudHMuc3dh
cChwZW5kaW5nRXZlbnRzKTsKKyAgICBzaXplX3QgY291bnQgPSBwZW5kaW5nRXZlbnRzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgRXZl
bnRUYXJnZXQqIHRhcmdldCA9IHBlbmRpbmdFdmVudHNbaV0tPnRhcmdldCgpOworICAgICAgICBp
ZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT50b05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnRzW2ldLnJl
bGVhc2UoKSwgZWMpOworICAgIH0KK30KKwogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiBTcGVl
Y2hJbnB1dCogUGFnZTo6c3BlZWNoSW5wdXQoKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74172</attachid>
            <date>2010-11-17 16:01:58 -0800</date>
            <delta_ts>2010-11-29 16:18:53 -0800</delta_ts>
            <desc>alt. work in progress</desc>
            <filename>wip46936b</filename>
            <type>text/plain</type>
            <size>12014</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlz
aW9uIDcyMjI3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZXNbaV0tPmRv
bVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZShlYyk7CiAgICAgICAgICAgICBpZiAoIWVjKQotICAg
ICAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZW5xdWV1ZUV2ZW50KFN0b3JhZ2VF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5l
d1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCksIHN0b3JhZ2UpKTsKKyAgICAg
ICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChTdG9y
YWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBzdG9yYWdlKSk7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBw
YWdlLgpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+
bG9jYWxTdG9yYWdlKGVjKTsKICAgICAgICAgICAgIGlmICghZWMpCi0gICAgICAgICAgICAgICAg
ZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5lbnF1ZXVlRXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJj
ZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgc3RvcmFnZSkpOworICAgICAgICAgICAgICAgIGZy
YW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZW5xdWV1ZVdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCksIHN0b3JhZ2UpKTsKICAgICAgICAgfQogICAg
IH0KIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNzIyMjcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE5LDcgKzEwMTksOCBAQAogICAgIGJvb2wgY29udGFp
bnNWYWxpZGl0eVN0eWxlUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVmFsaWRpdHlT
dHlsZVJ1bGVzOyB9CiAgICAgdm9pZCBzZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpIHsg
bV9jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcyA9IHRydWU7IH0KIAotICAgIHZvaWQgZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVUYXJnZXRlZEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVXaW5kb3dFdmVudChQYXNzUmVm
UHRyPEV2ZW50Pik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50
UGVyc2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJp
bmcmIG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0
YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjIyNykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTY1LDcgKzExNjUsNyBAQAogICAgIGlmICghZG9jdW1lbnQo
KS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01BVFRSTU9ESUZJRURfTElTVEVORVIpKQog
ICAgICAgICByZXR1cm47CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hF
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0
dHIsIGF0dHItPnZhbHVlKCksCisgICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShET01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ciwgYXR0ci0+dmFsdWUo
KSwKICAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQo
KSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7CiAjZW5kaWYKIH0KQEAgLTExNzgsNyAr
MTE3OCw3IEBACiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShE
T01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKKyAgICBkaXNw
YXRjaE11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2
ZW50LCB0cnVlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAogICAgICAgICBhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSwgTXV0YXRpb25FdmVudDo6QURESVRJT04p
LCBlYyk7CiAjZW5kaWYKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDcyMjI3KQorKysgV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNiArNTE3LDcgQEAKIAogICAgIHVzaW5nIEV2ZW50
VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAogICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVu
dCopOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNzIyMjcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NDIsMjMgKzM0NDIsMzkgQEAKICAgICBkb21X
aW5kb3ctPmRpc3BhdGNoTG9hZEV2ZW50KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRG9jdW1lbnQ6OmVucXVldWVUYXJn
ZXRlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogICAgIG1fcGVuZGluZ0V2ZW50
UXVldWUuYXBwZW5kKGV2ZW50KTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAK
K3ZvaWQgRG9jdW1lbnQ6OmVucXVldWVXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKK3sKKyAgICBldmVudC0+c2V0VGFyZ2V0KGRvbVdpbmRvdygpKTsKKyAgICBtX3BlbmRpbmdF
dmVudFF1ZXVlLmFwcGVuZChldmVudCk7CisgICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCiB2b2lkIERvY3VtZW50OjpwZW5kaW5nRXZlbnRUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50
PiopCiB7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdFdmVudFRpbWVyLmlzQWN0aXZlKCkpOwogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gZXZlbnRRdWV1ZTsKICAgICBldmVudFF1ZXVlLnN3YXAo
bV9wZW5kaW5nRXZlbnRRdWV1ZSk7CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnQ+
ID46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IGV2ZW50UXVl
dWUuZW5kKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGV2ZW50UXVldWUuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRjaFdpbmRvd0V2ZW50KCppdCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBldmVudFF1ZXVlLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEV2
ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IGV2ZW50UXVldWVbaV0tPnRhcmdldCgpOworICAgICAg
ICBpZiAoZXZlbnRUYXJnZXQtPnRvTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoIWV2ZW50VGFy
Z2V0LT50b05vZGUoKS0+aW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50UXVldWVbaV0pOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZXZlbnRUYXJnZXQtPnRvRE9NV2luZG93KCkp
CisgICAgICAgICAgICBldmVudFRhcmdldC0+dG9ET01XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChl
dmVudFF1ZXVlW2ldLCAwKTsKKyAgICB9CisvLyAgICAgICAgZGlzcGF0Y2hXaW5kb3dFdmVudCgq
aXQpOwogfQogCiBQYXNzUmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNDcyMCw3ICs0NzM2LDcg
QEAKIAogdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcm
IG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpCiB7Ci0gICAgZW5xdWV1ZUV2ZW50KEhhc2hD
aGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFVSTCwgbmV3VVJMKSk7CisgICAgZW5xdWV1ZVdpbmRvd0V2
ZW50KEhhc2hDaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFVSTCwgbmV3VVJMKSk7CiB9CiAKIHZvaWQg
RG9jdW1lbnQ6OmVucXVldWVQb3BzdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzdGF0ZU9iamVjdCkKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA3
MjIyNykKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDI3LDEyICsxMDI3LDEyIEBACiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNo
aWxkLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+
aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKQotICAg
ICAgICBjLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
RE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOworICAgICAgICBj
LT5kaXNwYXRjaE11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5ET01Ob2RlSW5zZXJ0ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CiAKICAgICAv
LyBkaXNwYXRjaCB0aGUgRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50IGV2ZW50IHRvIGFsbCBk
ZXNjZW5kYW50cwogICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3Rl
bmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSKSkg
ewogICAgICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQotICAg
ICAgICAgICAgYy0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLkRPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOworICAgICAgICAg
ICAgYy0+ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQog
fQogCkBAIC0xMDQ5LDEyICsxMDQ5LDEyIEBACiAKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3Zh
bCBtdXRhdGlvbiBldmVudHMKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5o
YXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKLSAgICAg
ICAgYy0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRP
TU5vZGVSZW1vdmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOworICAgICAgICBjLT5k
aXNwYXRjaE11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5E
T01Ob2RlUmVtb3ZlZEV2ZW50LCB0cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKIAogICAgIC8vIGRp
c3BhdGNoIHRoZSBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCBldmVudCB0byBhbGwgZGVzY2Vu
ZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5
cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSKSkgewogICAg
ICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQotICAgICAgICAg
ICAgYy0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRP
TU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQsIGZhbHNlKSk7CisgICAgICAgICAgICBjLT5k
aXNwYXRjaE11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5E
T01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOwogICAgIH0KIH0KIApJbmRl
eDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDcyMjI3KQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NTAsNiArMjU1MCwyMCBAQAogICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVu
dChldmVudC5yZWxlYXNlKCkpOwogfQogCit2b2lkIE5vZGU6OmRpc3BhdGNoTXV0YXRpb25FdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
ID0gcHJwRXZlbnQ7CisKKyAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKHRoaXMpKTsKKworICAgIGRvY3VtZW50KCktPmVucXVldWVUYXJnZXRl
ZEV2ZW50KGV2ZW50KTsKKyNpZiAwCisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCkpCisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgICAgIHBhZ2UtPmFwcGVuZEFzeW5jRXZlbnQoZXZlbnQpOworI2VuZGlmCit9CisKIHN0YXRp
YyBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dChjb25zdCBWZWN0b3I8RXZlbnRD
b250ZXh0PiYgYW5jZXN0b3JzKQogewogICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpID8g
MCA6ICZhbmNlc3RvcnMubGFzdCgpOwpAQCAtMjY2NCw3ICsyNjc4LDcgQEAKICAgICBpZiAoIWRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NU1VCVFJFRU1PRElGSUVEX0xJ
U1RFTkVSKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCB0cnVlKSk7
CisgICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIHRydWUpKTsKIH0KIAogdm9pZCBOb2RlOjpk
aXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBkZXRhaWws
IFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKSW5kZXg6IFdlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEu
Y3BwCShyZXZpc2lvbiA3MjIyNykKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAKICAgICBpZiAocGFyZW50Tm9kZSgpKQog
ICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlmIChkb2N1bWVu
dCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9M
SVNURU5FUikpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgMCwgcHJldlZh
bHVlLCBtX2RhdGEpKTsKKyAgICAgICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRy
dWUsIDAsIHByZXZWYWx1ZSwgbV9kYXRhKSk7CiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudCgpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoZG9jdW1lbnQoKSwgdGhpcyk7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlz
aW9uIDcyMjI3KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTUyLDYgKzUzLDcgQEAKICAgICBjbGFzcyBEcmFnQ2xpZW50OwogICAgIGNsYXNz
IERyYWdDb250cm9sbGVyOwogICAgIGNsYXNzIEVkaXRvckNsaWVudDsKKyAgICBjbGFzcyBFdmVu
dDsKICAgICBjbGFzcyBGb2N1c0NvbnRyb2xsZXI7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xh
c3MgR2VvbG9jYXRpb25DbGllbnQ7CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICAgICAgdm9pZCBz
ZXRKYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgamF2YVNjcmlw
dFVSTHNBcmVBbGxvd2VkKCkgY29uc3Q7CiAKKyAgICAgICAgdm9pZCBhcHBlbmRBc3luY0V2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICAgICAgdm9pZCBhc3luY0V2ZW50VGltZXJGaXJlZChU
aW1lcjxQYWdlPiopOworCiAgICAgICAgIC8vIERvbid0IGFsbG93IG1vcmUgdGhhbiBhIGNlcnRh
aW4gbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhZ2UuCiAgICAgICAgIC8vIFRoaXMgc2VlbXMgbGlr
ZSBhIHJlYXNvbmFibGUgdXBwZXIgYm91bmQsIGFuZCBvdGhlcndpc2UgbXV0dWFsbHkKICAgICAg
ICAgLy8gcmVjdXJzaXZlIGZyYW1lc2V0IHBhZ2VzIGNhbiBxdWlja2x5IGJyaW5nIHRoZSBwcm9n
cmFtIHRvIGl0cyBrbmVlcwpAQCAtMzIyLDYgKzMyNyw4IEBACiAgICAgICAgIAogICAgICAgICBP
d25QdHI8QmFja0ZvcndhcmRDb250cm9sbGVyPiBtX2JhY2tGb3J3YXJkQ29udHJvbGxlcjsKICAg
ICAgICAgUmVmUHRyPEZyYW1lPiBtX21haW5GcmFtZTsKKyAgICAgICAgVGltZXI8UGFnZT4gbV9h
c3luY0V2ZW50VGltZXI7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9wZW5kaW5n
RXZlbnRzOwogCiAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9nbG9iYWxIaXN0b3J5SXRl
bTsKIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNzIyMjcpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgICwgbV9zZXR0aW5ncyhhZG9w
dFB0cihuZXcgU2V0dGluZ3ModGhpcykpKQogICAgICwgbV9wcm9ncmVzcyhhZG9wdFB0cihuZXcg
UHJvZ3Jlc3NUcmFja2VyKSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKGFkb3B0UHRy
KG5ldyBCYWNrRm9yd2FyZENvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRD
bGllbnQpKSkKKyAgICAsIG1fYXN5bmNFdmVudFRpbWVyKHRoaXMsICZQYWdlOjphc3luY0V2ZW50
VGltZXJGaXJlZCkKICAgICAsIG1fdGhlbWUoUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSh0aGlz
KSkKICAgICAsIG1fZWRpdG9yQ2xpZW50KHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCkKICAgICAs
IG1fZnJhbWVDb3VudCgwKQpAQCAtODQ0LDYgKzg0NSwyOCBAQAogICAgIHJldHVybiBtX2phdmFT
Y3JpcHRVUkxzQXJlQWxsb3dlZDsKIH0KIAordm9pZCBQYWdlOjphcHBlbmRBc3luY0V2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQoZXZl
bnQpOworICAgIGlmICghbV9hc3luY0V2ZW50VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9h
c3luY0V2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBhZ2U6OmFzeW5jRXZl
bnRUaW1lckZpcmVkKFRpbWVyPFBhZ2U+KikKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+
IHBlbmRpbmdFdmVudHM7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKyAgICBtX3BlbmRp
bmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRzKTsKKyAgICBzaXplX3QgY291bnQgPSBwZW5kaW5n
RXZlbnRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IHBlbmRpbmdFdmVudHNbaV0tPnRhcmdldCgp
OworICAgICAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT50b05vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hFdmVudChwZW5kaW5n
RXZlbnRzW2ldLnJlbGVhc2UoKSwgZWMpOworICAgIH0KK30KKwogI2lmIEVOQUJMRShJTlBVVF9T
UEVFQ0gpCiBTcGVlY2hJbnB1dCogUGFnZTo6c3BlZWNoSW5wdXQoKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75079</attachid>
            <date>2010-11-29 16:18:58 -0800</date>
            <delta_ts>2010-12-03 17:50:12 -0800</delta_ts>
            <desc>scoped events approach</desc>
            <filename>bug-46936-20101129161857.patch</filename>
            <type>text/plain</type>
            <size>28460</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjgzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMTEtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgRE9NIG11dGF0aW9ucyBldmVudHMgYXMgc2NvcGVkIGV2ZW50cy4gQSBzY29wZWQg
ZXZlbnQgaXMgYW4gZXZlbnQgd2hvc2UKKyAgICAgICAgZGlzcGF0Y2ggaXMgZG9uZSB2aWEgU2Nv
cGVkRXZlbnRRdWV1ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBxdWV1ZSBpcyBjb250cm9sbGVkIGJ5
CisgICAgICAgIEV2ZW50UXVldWVTY29wZSBvYmplY3RzIChSQUlJIGlkaW9tKSwgd2hpY2ggaW5j
cmVtZW50cyBhbmQgZGVjcmVtZW50cyB0aGUgc2NvcGluZyBsZXZlbAorICAgICAgICBvbiBpdHMg
Y29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIFdoZW4g
dGhlIHNjb3BpbmcgbGV2ZWwgaXMgMCAoaW5pdGlhbCBsZXZlbCksIHNjb3BlZCBldmVudHMgYXJl
IGRpc3BhdGNoZWQgYXMgc29vbiBhcworICAgICAgICB0aGV5IGFyZSBlbnF1ZXVlZCBhbmQgYWN0
IGxpa2Ugc3luY2hyb25vdXMgZXZlbnRzLiBXaGVuIHRoZSBzY29waW5nIGxldmVsIGlzIGdyZWF0
ZXIgdGhhbiAwLAorICAgICAgICBob3dldmVyLCBldmVudHMgYXJlIHF1ZXVlZCBpbiBTY29wZWRF
dmVudFF1ZXVlIGFuZCB0aGVpciBkaXNwYXRjaGVzIGFyZSBkZWxheWVkIHVudGlsCisgICAgICAg
IHRoZSBzY29waW5nIGxldmVsIGdvZXMgYmFjayB0byAwIChieSB0aGUgZGVzdHJ1Y3Rpb24gb2Yg
RXZlbnRRdWV1ZVNjb3BlKS4KKworICAgICAgICBBbGwgRE9NIG11dGF0aW9uIGV2ZW50cyBleGNl
cHQgRE9NRm9jdXNJbiBhbmQgRE9NRm9jdXNPdXQgYXJlIHRyZWF0ZWQgYXMgc2NvcGVkIGV2ZW50
cywKKyAgICAgICAgYW5kIGEgc2NvcGUgb2JqZWN0IGlzIGluc3RhbnRpYXRlZCBpbiBFZGl0Q29t
bWFuZDo6YXBwbHkgdG8gZGVsYXkgZGlzcGF0Y2hlcyBvZgorICAgICAgICB0aGUgbXV0YXRpb24g
ZXZlbnRzIHVudGlsIHRoZSBjb21wbGV0aW9uIG9mIGVhY2ggY2FsbCBvZiBFZGl0Q29tbWFuZDo6
ZG9BcHBseS4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9tdXRhdGlvbi9leGVjQ29tbWFu
ZHMuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgU2NvcGVkRXZlbnRRdWV1ZS5j
cHAuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
cHJvOiBEaXR0by4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgU2NvcGVkRXZlbnRR
dWV1ZS5jcHAgYW5kIFNjb3BlZEV2ZW50UXVldWUuaC4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
ICBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERp
dHRvLgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOiBDYWxscyBkaXNwYXRjaFNjb3BlZEV2ZW50
LgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOiBEaXR0by4K
KyAgICAgICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOiBBZGRlZCBTY29wZWRFdmVudFF1ZXVlLmNw
cC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQpOiBEaXR0by4gCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KTogRGl0dG8uCisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudCk6IENhbGxzIGRpc3BhdGNoU2NvcGVkRXZlbnQuCisgICAgICAgICogZG9tL05vZGUuaDoK
KyAgICAgICAgKiBkb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkRXZlbnRRdWV1ZTo6aW5pdGlhbGl6ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hBbGxFdmVudHMpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQpOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vU2NvcGVkRXZlbnRRdWV1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjb3BlZEV2ZW50UXVldWU6On5TY29wZWRFdmVudFF1ZXVlKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjpTY29wZWRFdmVudFF1ZXVlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6OmRlY3JlbWVudFNjb3Bp
bmdMZXZlbCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRRdWV1ZVNjb3BlOjpFdmVu
dFF1ZXVlU2NvcGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWVTY29wZTo6
fkV2ZW50UXVldWVTY29wZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmFwcGx5KTogSW5zdGFudGlhdGVz
IEV2ZW50UXVldWVTY29wZS4KKwogMjAxMC0xMS0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDog
V2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2
aXNpb24gNzI4MTApCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSw2ICsxNjUsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlk
b20vUXVhbGlmaWVkTmFtZS5jcHAgXAogCWRvbS9SYW5nZS5jcHAgXAogCWRvbS9SZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lci5jcHAgXAorCWRvbS9TY29wZWRFdmVudFF1ZXVlLmNwcCBcCiAJZG9tL1Nj
cmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAgXAogCWRvbS9TY3JpcHRFbGVtZW50LmNwcCBcCiAJ
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzI4
MTApCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NjksNiAr
ODY5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9RdWFsaWZpZWROYW1lLmNwcAog
ICAgIGRvbS9SYW5nZS5jcHAKICAgICBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCisg
ICAgZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCiAgICAgZG9tL1NjcmlwdGFibGVEb2N1bWVudFBh
cnNlci5jcHAKICAgICBkb20vU2NyaXB0RWxlbWVudC5jcHAKICAgICBkb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzI4MTApCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQxLDYgKzEyNDEsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oIFwKIAlX
ZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgXAogCVdlYkNvcmUvZG9tL1Jl
Z2lzdGVyZWRFdmVudExpc3RlbmVyLmggXAorCVdlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUu
Y3BwIFwKKwlXZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmggXAogCVdlYkNvcmUvZG9tL1Nj
cmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAgXAogCVdlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1
bWVudFBhcnNlci5oIFwKIAlXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNzI4MTApCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMTI5NCw2ICsxMjk0LDggQEAKICAgICAgICAgICAgICdkb20vUmF3RGF0YURvY3VtZW50UGFy
c2VyLmgnLAogICAgICAgICAgICAgJ2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAg
ICdkb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9TY29wZWRFdmVu
dFF1ZXVlLmgnLAogICAgICAgICAgICAgJ2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3Bw
JywKICAgICAgICAgICAgICdkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgnLAogICAgICAg
ICAgICAgJ2RvbS9TY3JpcHRFbGVtZW50LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDcyODEwKQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNzU1LDYgKzc1NSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGRvbS9SYW5nZS5jcHAgXAogICAgIGRvbS9SYXdEYXRhRG9jdW1lbnRQ
YXJzZXIuaCBcCiAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBcCisgICAgZG9t
L1Njb3BlZEV2ZW50UXVldWUuY3BwIFwKICAgICBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmNwcCBcCiAgICAgZG9tL1NjcmlwdEVsZW1lbnQuY3BwIFwKICAgICBkb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDcyODEwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwMjIsNiArMzAyMiw4IEBACiAJCTlC
NDE3MDY1MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI0MTcwNjMxMjU2
NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgKi87IH07CiAJCTlC
QUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAv
KiBFZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZCMTI1
NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovOyB9OworCQk5QkQwQkY5MzEyQTQy
QkY1MDA3MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJEMEJGOTExMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3Bl
ZEV2ZW50UXVldWUuaCAqLzsgfTsKKwkJOUJEMEJGOTQxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3Bl
ZEV2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUJEMEJGOTIxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwICov
OyB9OwogCQk5RjBENkIyRTEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjBE
NkIyQzEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi87IH07
CiAJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjBENkIyRDEy
MUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oICovOyB9OwogCQk5RjNC
OTQ3RTEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0
RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90LmggKi87IH07CkBAIC05MTUxLDYgKzkxNTMsOCBAQAog
CQk5QjQxNzA2MzEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUI2QzZBMTI1NTA2
MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUI2
QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOUJEMEJGOTExMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkRXZlbnRRdWV1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQwQkY5MjEyQTQyQkY1MDA3MkZENDMgLyog
U2NvcGVkRXZlbnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY29wZWRFdmVudFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYw
RDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRIZWFwU25hcHNob3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDIwLDYgKzE4NDI0LDggQEAKIAkJCQlBODRE
ODI3QjExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggKi8sCiAJCQkJ
ODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAq
LywKIAkJCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaCAqLywKKwkJCQk5QkQwQkY5MjEyQTQyQkY1MDA3MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1
ZS5jcHAgKi8sCisJCQkJOUJEMEJGOTExMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVl
dWUuaCAqLywKIAkJCQlBODREODJDMDExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyLmNwcCAqLywKIAkJCQlBODREODJCRjExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLmggKi8sCiAJCQkJMDhBNDg0NzUwRTUyNzJDNTAwQzNGRTc2IC8q
IFNjcmlwdEVsZW1lbnQuY3BwICovLApAQCAtMjA4MDMsNiArMjA4MDksNyBAQAogCQkJCTVERkU4
RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDRUZDOUI5MEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50
UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUJFMEMyNzREQUMwMDlGNEVDOSAvKiBT
Y3JlZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NEQ4MkMxMTFEMzQ3NDgwMDk3Mjk5MCAvKiBT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzOUJFOTVDMTI2
NzNCRjQwMEUwQTY3NCAvKiBTY3JpcHRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMjM0
ODAsNiArMjM0ODcsNyBAQAogCQkJCTFDRUZDOUJBMEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVs
ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFMjRGOTcwRDdDQUYwRTAwN0UwNEMyIC8q
IFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNjJDN0Y0MTFGNzdFRkIw
MDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QkQwQkY5
NDEyQTQyQkY1MDA3MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0VDMDFCRDBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4NEQ4MkMyMTFEMzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM5QkU5NUIxMjY3M0JGNDAwRTBBNjc0IC8qIFNj
cmlwdEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
CShyZXZpc2lvbiA3MjgxMCkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDI3LDEyICsxMDI3LDEyIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hp
bGRJbnNlcnRpb25FdmVudHMKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQt
PmRvY3VtZW50KCk7CiAKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikpCi0gICAgICAg
IGMtPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01O
b2RlSW5zZXJ0ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CisgICAgICAgIGMtPmRp
c3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01O
b2RlSW5zZXJ0ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CiAKICAgICAvLyBkaXNw
YXRjaCB0aGUgRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5k
YW50cwogICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlw
ZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSKSkgewogICAg
ICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQotICAgICAgICAg
ICAgYy0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRP
TU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOworICAgICAgICAgICAgYy0+
ZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRP
TU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOwogICAgIH0KIH0KIApAQCAt
MTA0OSwxMiArMTA0OSwxMiBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50
cyhOCiAKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKICAgICBp
ZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKLSAgICAgICAgYy0+ZGlzcGF0Y2hFdmVudChNdXRh
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRXZlbnQsIHRydWUs
IGMtPnBhcmVudE5vZGUoKSkpOworICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0
aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwg
Yy0+cGFyZW50Tm9kZSgpKSk7CiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZVJlbW92ZWRG
cm9tRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCiAgICAgaWYgKGMtPmluRG9jdW1l
bnQoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZF
REZST01ET0NVTUVOVF9MSVNURU5FUikpIHsKICAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2
ZXJzZU5leHROb2RlKGNoaWxkKSkKLSAgICAgICAgICAgIGMtPmRpc3BhdGNoRXZlbnQoTXV0YXRp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2
ZW50LCBmYWxzZSkpOworICAgICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlv
bkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZl
bnQsIGZhbHNlKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA3
MjgxMCkKKysrIFdlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDYgKzEwMCw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5jcHAiCiAjaW5jbHVkZSAi
UmFuZ2UuY3BwIgogI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCIKKyNpbmNs
dWRlICJTY29wZWRFdmVudFF1ZXVlLmNwcCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmNwcCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCIKICNpbmNsdWRlICJTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuY3BwIgpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDcyODEwKQorKysg
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsNyArMTE2NSw3
IEBAIHZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEEKICAgICBpZiAoIWRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJU1RF
TkVSKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRp
c3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2ZW50LCB0
cnVlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAorICAgIGRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRp
b25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBhdHRyLCBhdHRyLT52
YWx1ZSgpLAogICAgICAgICBhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5hdHRyTmFtZShhdHRy
LT5pZCgpKSwgTXV0YXRpb25FdmVudDo6UkVNT1ZBTCksIGVjKTsKICNlbmRpZgogfQpAQCAtMTE3
OCw3ICsxMTc4LDcgQEAgdm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KAog
ICAgIGlmICghZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01BVFRSTU9E
SUZJRURfTElTVEVORVIpKQogICAgICAgICByZXR1cm47CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQXR0ck1vZGlm
aWVkRXZlbnQsIHRydWUsIGF0dHIsIGF0dHItPnZhbHVlKCksCisgICAgZGlzcGF0Y2hTY29wZWRF
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0
dHIsIGF0dHItPnZhbHVlKCksCiAgICAgICAgIGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCktPmF0
dHJOYW1lKGF0dHItPmlkKCkpLCBNdXRhdGlvbkV2ZW50OjpBRERJVElPTiksIGVjKTsKICNlbmRp
ZgogfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHJldmlzaW9uIDcyODEwKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50Lmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJSZW5kZXJC
b3guaCIKKyNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdGF0
aWNOb2RlTGlzdC5oIgpAQCAtMjU1MCw2ICsyNTUxLDEzIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW4KICAgICByZXR1cm4gZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZl
bnQucmVsZWFzZSgpKTsKIH0KIAordm9pZCBOb2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOworCisgICAgU2NvcGVkRXZlbnRRdWV1ZTo6
aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKK30KKwogc3RhdGljIGNvbnN0IEV2ZW50
Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNl
c3RvcnMpCiB7CiAgICAgcmV0dXJuIGFuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJmFuY2VzdG9y
cy5sYXN0KCk7CkBAIC0yNjY0LDcgKzI2NzIsNyBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU3VidHJl
ZU1vZGlmaWVkRXZlbnQoCiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9j
dW1lbnQ6OkRPTVNVQlRSRUVNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01T
dWJ0cmVlTW9kaWZpZWRFdmVudCwgdHJ1ZSkpOworICAgIGRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwg
dHJ1ZSkpOwogfQogCiB2b2lkIE5vZGU6OmRpc3BhdGNoVUlFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgaW50IGRldGFpbCwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2
ZW50KQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L05vZGUuaAkocmV2aXNpb24gNzI4MTApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxNiw3ICs1MTYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RE
aXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIC8qZGF0YUZyb21QcmVEaXNwYXRjaCov
KSB7IH0KIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBib29sIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CiAKICAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQqKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCisKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworU2NvcGVkRXZlbnRRdWV1ZSogU2NvcGVkRXZlbnRRdWV1ZTo6c19pbnN0YW5jZSA9IDA7
CisKK1Njb3BlZEV2ZW50UXVldWU6OlNjb3BlZEV2ZW50UXVldWUoKQorICAgIDogbV9zY29waW5n
TGV2ZWwoMCkKK3sKK30KKworU2NvcGVkRXZlbnRRdWV1ZTo6flNjb3BlZEV2ZW50UXVldWUoKQor
eworICAgIEFTU0VSVCghbV9zY29waW5nTGV2ZWwpOworICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVu
dHMuc2l6ZSgpKTsKK30KKwordm9pZCBTY29wZWRFdmVudFF1ZXVlOjppbml0aWFsaXplKCkKK3sK
KyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIE93blB0cjxTY29wZWRFdmVudFF1ZXVlPiBp
bnN0YW5jZSA9IGFkb3B0UHRyKG5ldyBTY29wZWRFdmVudFF1ZXVlKTsKKyAgICBzX2luc3RhbmNl
ID0gaW5zdGFuY2UubGVha1B0cigpOworfQorCit2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmRpc3Bh
dGNoQWxsRXZlbnRzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IHF1ZXVlZEV2ZW50
czsKKyAgICBxdWV1ZWRFdmVudHMuc3dhcChtX3F1ZXVlZEV2ZW50cyk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHF1ZXVlZEV2ZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgZGlzcGF0
Y2hFdmVudChxdWV1ZWRFdmVudHNbaV0ucmVsZWFzZSgpKTsKK30KKwordm9pZCBTY29wZWRFdmVu
dFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KSBjb25zdAorewor
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gZXZlbnRUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7Cisg
ICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCit9CkluZGV4OiBXZWJD
b3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2Nv
cGVkRXZlbnRRdWV1ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRR
dWV1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY29wZWRFdmVudFF1ZXVlX2gK
KyNkZWZpbmUgU2NvcGVkRXZlbnRRdWV1ZV9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEV2ZW50OworCitjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsKKworcHVibGljOgorICAgIH5TY29wZWRFdmVudFF1
ZXVlKCk7CisKKyAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAg
dm9pZCBkaXNwYXRjaEFsbEV2ZW50cygpOworICAgIHN0YXRpYyBTY29wZWRFdmVudFF1ZXVlKiBp
bnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoKTsKKyAgICB2b2lk
IGRlY3JlbWVudFNjb3BpbmdMZXZlbCgpOworCitwcml2YXRlOgorICAgIFNjb3BlZEV2ZW50UXVl
dWUoKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBjb25zdDsKKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+
ID4gbV9xdWV1ZWRFdmVudHM7CisgICAgdW5zaWduZWQgbV9zY29waW5nTGV2ZWw7CisKKyAgICBz
dGF0aWMgU2NvcGVkRXZlbnRRdWV1ZSogc19pbnN0YW5jZTsKK307CisKK2lubGluZSB2b2lkIFNj
b3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sK
KyAgICBpZiAobV9zY29waW5nTGV2ZWwpCisgICAgICAgIG1fcXVldWVkRXZlbnRzLmFwcGVuZChl
dmVudCk7CisgICAgZWxzZQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworaW5s
aW5lIFNjb3BlZEV2ZW50UXVldWUqIFNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKCkKK3sKKyAg
ICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIGluaXRpYWxpemUoKTsKKworICAgIHJldHVybiBz
X2luc3RhbmNlOworfQorCitpbmxpbmUgdm9pZCBTY29wZWRFdmVudFF1ZXVlOjppbmNyZW1lbnRT
Y29waW5nTGV2ZWwoKQoreworICAgIG1fc2NvcGluZ0xldmVsKys7Cit9CisKK2lubGluZSB2b2lk
IFNjb3BlZEV2ZW50UXVldWU6OmRlY3JlbWVudFNjb3BpbmdMZXZlbCgpCit7CisgICAgQVNTRVJU
KG1fc2NvcGluZ0xldmVsKTsKKyAgICBtX3Njb3BpbmdMZXZlbC0tOworICAgIGlmICghbV9zY29w
aW5nTGV2ZWwpCisgICAgICAgIGRpc3BhdGNoQWxsRXZlbnRzKCk7Cit9CisKK2NsYXNzIEV2ZW50
UXVldWVTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRRdWV1ZVNjb3BlKTsK
KworcHVibGljOgorICAgIEV2ZW50UXVldWVTY29wZSgpIHsgU2NvcGVkRXZlbnRRdWV1ZTo6aW5z
dGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKCk7IH0KKyAgICB+RXZlbnRRdWV1ZVNjb3Bl
KCkgeyBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5kZWNyZW1lbnRTY29waW5nTGV2ZWwo
KTsgfQorfTsKKworfQorCisjZW5kaWYgLy8gU2NvcGVkRXZlbnRRdWV1ZV9oCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDcyODEwKQorKysgV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCkBAIC04NiwxMCArODcsMTMgQEAgdm9pZCBFZGl0Q29tbWFuZDo6YXBwbHkoKQogICAg
IGlmIChpc1RvcExldmVsQ29tbWFuZCgpKQogICAgICAgICB1cGRhdGVMYXlvdXQoKTsKIAotICAg
IERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIgPSBmcmFtZS0+
ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKTsKLSAgICBkZWxldGVCdXR0b25Db250
cm9sbGVyLT5kaXNhYmxlKCk7Ci0gICAgZG9BcHBseSgpOwotICAgIGRlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXItPmVuYWJsZSgpOworICAgIHsKKyAgICAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwor
ICAgICAgICBEZWxldGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250cm9sbGVyID0g
ZnJhbWUtPmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCk7CisgICAgICAgIGRlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXItPmRpc2FibGUoKTsKKyAgICAgICAgZG9BcHBseSgpOworICAgICAg
ICBkZWxldGVCdXR0b25Db250cm9sbGVyLT5lbmFibGUoKTsKKyAgICB9CiAKICAgICBpZiAoaXNU
b3BMZXZlbENvbW1hbmQoKSkgewogICAgICAgICAvLyBPbmx5IG5lZWQgdG8gY2FsbCBhcHBsaWVk
RWRpdGluZyBmb3IgdG9wLWxldmVsIGNvbW1hbmRzLCBhbmQgVHlwaW5nQ29tbWFuZHMgZG8gaXQg
b24gdGhlaXIKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODM3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMjkgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3VyZSBubyBET00gbXV0YXRpb24g
ZXZlbnRzIGFyZSBmaXJlZCB3aGlsZSBleGVjQ29tbWFuZCBpcyBpbiBwcm9ncmVzcy4KKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL2NyYXNoLW9uLW11dGF0ZS1kdXJpbmctZHJvcC5odG1sOiBET01O
b2RlSW5zZXJ0ZWQgaXMgZmlyZWQgYWZ0ZXIgQlIgaXMgZGV0YWNoZWQKKyAgICAgICAgZnJvbSB0
aGUgZG9jdW1lbnQsIGFuZCBjYW4ndCBiZSBvYnNlcnZlZC4gTW9kaWZ5IHRoZSBET00gd2hlbiB0
ZXh0IG5vZGUgaXMgaW5zZXJ0ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbXV0YXRpb246IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL211dGF0aW9uL2V4ZWNDb21tYW5kcy5odG1sOiBB
ZGRlZC4KKwogMjAxMC0xMS0yOSAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gTWFyayB0ZXN0cyBhcyBmYWlsaW5nIGFmdGVyIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvY3Jhc2gtb24tbXV0YXRlLWR1cmluZy1kcm9wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvY3Jhc2gtb24tbXV0YXRlLWR1cmluZy1kcm9wLmh0bWwJKHJldmlz
aW9uIDcyODEwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY3Jhc2gtb24tbXV0YXRlLWR1
cmluZy1kcm9wLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiA8aGVhZD4KIDxz
Y3JpcHQ+CiBmdW5jdGlvbiBmb28oKSB7Ci0gICAgaWYgKGV2ZW50LnR5cGUgPT0gIkRPTU5vZGVJ
bnNlcnRlZCIgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lID09ICJCUiIpCisgICAgaWYgKGV2ZW50
LnR5cGUgPT0gIkRPTU5vZGVJbnNlcnRlZCIgJiYgZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09IDMp
CiAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlBBU1NFRCI7CiB9CiAKQEAgLTEy
LDcgKzEyLDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKIAogICAgIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAKLSAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlz
dGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIGZ1bmN0aW9uKCkgeyBmb28oKSB9LCB0cnVlKTsKKyAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLCBmdW5jdGlvbigp
IHsgZm9vKCkgfSwgdHJ1ZSk7CiAKICAgICAvLyBTZWxlY3QgdGhlIGVsZW1lbnQgJ2RyYWdTb3Vy
Y2UnLgogICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tdXRhdGlvbi9leGVjQ29tbWFuZHMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tdXRhdGlvbi9leGVjQ29tbWFuZHMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL211dGF0aW9uL2V4ZWND
b21tYW5kcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IGRvZXMgbm90
IGZpcmUgRE9NIG11dGF0aW9uIGV2ZW50cyB3aGlsZSBleGVjQ29tbWFuZCBpcyBpbiBwcm9ncmVz
cy48L3A+Cis8ZGl2IGlkPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+PC9kaXY+Cis8cHJlPgorPHNj
cmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBjb21tYW5kcyA9IFsKKyAgICB7bmFtZTog
J0JhY2tDb2xvcicsIHZhbHVlOiAnYmx1ZSd9LAorICAgIHtuYW1lOiAnQ3JlYXRlTGluaycsIHZh
bHVlOiAnYWJvdXQ6YmxhbmsnfSwKKyAgICB7bmFtZTogJ0RlbGV0ZScsIHZhbHVlOiBudWxsfSwK
KyAgICB7bmFtZTogJ0ZvbnROYW1lJywgdmFsdWU6ICdBcmlhbCd9LAorICAgIHtuYW1lOiAnRm9u
dFNpemUnLCB2YWx1ZTogJzUnfSwKKyAgICB7bmFtZTogJ0ZvbnRTaXplRGVsdGEnLCB2YWx1ZTog
JzUnfSwKKyAgICB7bmFtZTogJ0ZvcmVDb2xvcicsIHZhbHVlOiAnYmx1ZSd9LAorICAgIHtuYW1l
OiAnRm9ybWF0QmxvY2snLCB2YWx1ZTogJ3ByZSd9LAorICAgIHtuYW1lOiAnRm9yd2FyZERlbGV0
ZScsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0hpbGl0ZUNvbG9yJywgdmFsdWU6ICdyZWQn
fSwKKyAgICB7bmFtZTogJ0luZGVudCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0luc2Vy
dEhUTUwnLCB2YWx1ZTogIjxpPmhlbGxvPC9pPiJ9LAorICAgIHtuYW1lOiAnSW5zZXJ0SG9yaXpv
bnRhbFJ1bGUnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdJbnNlcnRJbWFnZScsIHZhbHVl
OiAnLi4vcmVzb3VyY2VzL2FiZS5wbmcnfSwKKyAgICB7bmFtZTogJ0luc2VydExpbmVCcmVhaycs
IHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0luc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQn
LCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdJbnNlcnRPcmRlcmVkTGlzdCcsIHZhbHVlOiBu
dWxsfSwKKyAgICB7bmFtZTogJ0luc2VydFBhcmFncmFwaCcsIHZhbHVlOiBudWxsfSwKKyAgICB7
bmFtZTogJ0luc2VydFRleHQnLCB2YWx1ZTogJ3dlYmtpdCd9LAorICAgIHtuYW1lOiAnSW5zZXJ0
VW5vcmRlcmVkTGlzdCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0l0YWxpYycsIHZhbHVl
OiBudWxsfSwKKyAgICB7bmFtZTogJ0p1c3RpZnlDZW50ZXInLCB2YWx1ZTogbnVsbH0sCisgICAg
e25hbWU6ICdKdXN0aWZ5RnVsbCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0p1c3RpZnlM
ZWZ0JywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnSnVzdGlmeU5vbmUnLCB2YWx1ZTogbnVs
bH0sCisgICAge25hbWU6ICdKdXN0aWZ5UmlnaHQnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6
ICdPdXRkZW50JywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnUmVtb3ZlRm9ybWF0JywgdmFs
dWU6IG51bGx9LAorICAgIHtuYW1lOiAnU3RyaWtldGhyb3VnaCcsIHZhbHVlOiBudWxsfSwKKyAg
ICB7bmFtZTogJ1N1YnNjcmlwdCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ1N1cGVyc2Ny
aXB0JywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnVHJhbnNwb3NlJywgdmFsdWU6IG51bGws
IHNlbGVjdG9yOiBmdW5jdGlvbiAodGVzdCkgeyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9z
aXRpb24odGVzdC5maXJzdENoaWxkLCAxKTsgfX0sCisgICAge25hbWU6ICdVbmRlcmxpbmUnLCB2
YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdVbmxpbmsnLCB2YWx1ZTogbnVsbH0sCitdOworCit2
YXIgZXZlbnRzID0geworICAgICdET01TdWJ0cmVlTW9kaWZpZWQnOiBmYWxzZSwKKyAgICAnRE9N
Tm9kZUluc2VydGVkJzogZmFsc2UsCisgICAgJ0RPTU5vZGVSZW1vdmVkJzogZmFsc2UsCisgICAg
J0RPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50JzogZmFsc2UsCisgICAgJ0RPTU5vZGVJbnNlcnRl
ZEludG9Eb2N1bWVudCc6IHRydWUsIC8vIHRoaXMgZXZlbnQgY2FuIG5ldmVyIGJlIG9ic2VydmVk
LgorfTsKKwordmFyIGxvZyA9IFtdOwordmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdCcpOworCitmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyhub2RlKSB7CisgICAgZm9y
ICh2YXIgZSBpbiBldmVudHMpIHsKKyAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGUsIGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgbG9nLnB1c2godGVzdC5pbm5lckhUTUwpOwor
ICAgICAgICAgICAgZXZlbnRzW2V2ZW50LnR5cGVdID0gdHJ1ZTsKKyAgICAgICAgfSwgZmFsc2Up
OworICAgIH0KK30KKworZnVuY3Rpb24gaXNMb2dDb25zaXN0ZW50KCkgeworICAgIGZvciAodmFy
IGk9IDE7IGkgPCBsb2cubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGxvZ1swXSAhPSBsb2db
aV0pIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvZyk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2FkZEV2ZW50
TGlzdGVuZXJzKHRlc3QpOworCit2YXIgaW5pdGlhbCA9ICdoZWxsbywgPGJsb2NrcXVvdGUgYWxp
Z249InJpZ2h0Ij48dT48YSBocmVmPSJhYm91dDpibGFuayI+d29ybGQ8L2E+PC91PjwvYmxvY2tx
dW90ZT4nOworZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykgeworICAg
IHRlc3QuaW5uZXJIVE1MID0gaW5pdGlhbDsKKyAgICBsb2cgPSBbXTsgLy8gY2xlYXIgbG9nIEFG
VEVSIHJlc2V0dGluZyB0aGUgRE9NIHRyZWUKKyAgICBpZiAoaSkKKyAgICAgICAgZG9jdW1lbnQu
d3JpdGUoIlxuIik7CisKKyAgICBpZiAodGVzdC5pbm5lckhUTUwgIT0gaW5pdGlhbCkgeworICAg
ICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogaW5pdGlhbCBpbm5lckhUTUwgZGlkbid0IG1hdGNo
Iik7CisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChjb21tYW5kc1tpXS5zZWxl
Y3RvcikKKyAgICAgICAgY29tbWFuZHNbaV0uc2VsZWN0b3IodGVzdCk7CisgICAgZWxzZQorICAg
ICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4odGVzdCwgMCk7Cisg
ICAgYWRkRXZlbnRMaXN0ZW5lcnModGVzdC5jaGlsZE5vZGVzWzFdKTsKKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZChjb21tYW5kc1tpXS5uYW1lLCBmYWxzZSwgY29tbWFuZHNbaV0udmFsdWUpOwor
CisgICAgdmFyIHF1b3RlZFZhbHVlID0gY29tbWFuZHNbaV0udmFsdWUgPyAiJyIgKyBjb21tYW5k
c1tpXS52YWx1ZS5yZXBsYWNlKCc8JywgJyZsdDsnKSArICInIiA6IG51bGw7CisgICAgdmFyIGFj
dGlvbiA9ICJleGVjQ29tbWFuZCgnIiArIGNvbW1hbmRzW2ldLm5hbWUgKyAiJywgZmFsc2UsICIg
KyBxdW90ZWRWYWx1ZSArICIpIjsKKworICAgIGlmICh0ZXN0LmlubmVySFRNTCA9PSBpbml0aWFs
IHx8IGxvZy5sZW5ndGggPD0gMCkKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoJ0ZBSUw6ICcgKyBh
Y3Rpb24gKyAnIG1hZGUgbm8gY2hhbmdlIHRvIHRoZSBET00uJyk7CisgICAgZWxzZSBpZiAoIWlz
TG9nQ29uc2lzdGVudCgpKQorICAgICAgICBkb2N1bWVudC53cml0ZSgnRkFJTDogJyArIGFjdGlv
biArICcgZGlzcGF0Y2hlZCBldmVudHMgYmVmb3JlIGZpbmFsaXppbmcgdGhlIERPTSB0cmVlLicp
OworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoJ1BBU1M6ICcgKyBhY3Rpb24pOwor
fQordGVzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCitkb2N1bWVudC53cml0ZSgnXG4nKTsK
K2ZvciAodmFyIGUgaW4gZXZlbnRzKSB7CisgICAgaWYgKCFldmVudHNbZV0pCisgICAgICAgIGRv
Y3VtZW50LndyaXRlKCdcbldBUk5JTkc6ICcgKyBlICsgJyB3YXMgbmV2ZXIgb2JzZXJ2ZWQuJyk7
Cit9CisKK2RvY3VtZW50LndyaXRlKCdcblxuRE9ORScpOworCis8L3NjcmlwdD4KKzwvcHJlPgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75584</attachid>
            <date>2010-12-03 17:50:17 -0800</date>
            <delta_ts>2010-12-09 14:09:34 -0800</delta_ts>
            <desc>Make DOMFocusIn, DOMFocousOut, focusin, and focusout scoped as well</desc>
            <filename>bug-46936-20101203175016.patch</filename>
            <type>text/plain</type>
            <size>31363</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzMxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMTItMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgRE9NIG11dGF0aW9ucyBldmVudHMgYXMgc2NvcGVkIGV2ZW50cy4gQSBzY29wZWQg
ZXZlbnQgaXMgYW4gZXZlbnQgd2hvc2UKKyAgICAgICAgZGlzcGF0Y2ggaXMgZG9uZSB2aWEgU2Nv
cGVkRXZlbnRRdWV1ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBxdWV1ZSBpcyBjb250cm9sbGVkIGJ5
CisgICAgICAgIEV2ZW50UXVldWVTY29wZSBvYmplY3RzIChSQUlJIGlkaW9tKSwgd2hpY2ggaW5j
cmVtZW50cyBhbmQgZGVjcmVtZW50cyB0aGUgc2NvcGluZyBsZXZlbAorICAgICAgICBvbiBpdHMg
Y29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIFdoZW4g
dGhlIHNjb3BpbmcgbGV2ZWwgaXMgMCAoaW5pdGlhbCBsZXZlbCksIHNjb3BlZCBldmVudHMgYXJl
IGRpc3BhdGNoZWQgYXMgc29vbiBhcworICAgICAgICB0aGV5IGFyZSBlbnF1ZXVlZCBhbmQgYWN0
IGxpa2Ugc3luY2hyb25vdXMgZXZlbnRzLiBXaGVuIHRoZSBzY29waW5nIGxldmVsIGlzIGdyZWF0
ZXIgdGhhbiAwLAorICAgICAgICBob3dldmVyLCBldmVudHMgYXJlIHF1ZXVlZCBpbiBTY29wZWRF
dmVudFF1ZXVlIGFuZCB0aGVpciBkaXNwYXRjaGVzIGFyZSBkZWxheWVkIHVudGlsCisgICAgICAg
IHRoZSBzY29waW5nIGxldmVsIGdvZXMgYmFjayB0byAwIChieSB0aGUgZGVzdHJ1Y3Rpb24gb2Yg
RXZlbnRRdWV1ZVNjb3BlKS4KKworICAgICAgICBBbGwgRE9NIG11dGF0aW9uIGV2ZW50cyBleGNl
cHQgRE9NRm9jdXNJbiBhbmQgRE9NRm9jdXNPdXQgYXJlIHRyZWF0ZWQgYXMgc2NvcGVkIGV2ZW50
cywKKyAgICAgICAgYW5kIGEgc2NvcGUgb2JqZWN0IGlzIGluc3RhbnRpYXRlZCBpbiBFZGl0Q29t
bWFuZDo6YXBwbHkgdG8gZGVsYXkgZGlzcGF0Y2hlcyBvZgorICAgICAgICB0aGUgbXV0YXRpb24g
ZXZlbnRzIHVudGlsIHRoZSBjb21wbGV0aW9uIG9mIGVhY2ggY2FsbCBvZiBFZGl0Q29tbWFuZDo6
ZG9BcHBseS4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9tdXRhdGlvbi9leGVjQ29tbWFu
ZHMuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgU2NvcGVkRXZlbnRRdWV1ZS5j
cHAuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
cHJvOiBEaXR0by4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgU2NvcGVkRXZlbnRR
dWV1ZS5jcHAgYW5kIFNjb3BlZEV2ZW50UXVldWUuaC4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
ICBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERp
dHRvLgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOiBDYWxscyBkaXNwYXRjaFNjb3BlZEV2ZW50
LgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOiBEaXR0by4K
KyAgICAgICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOiBBZGRlZCBTY29wZWRFdmVudFF1ZXVlLmNw
cC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQpOiBEaXR0by4gCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KTogRGl0dG8uCisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudCk6IENhbGxzIGRpc3BhdGNoU2NvcGVkRXZlbnQuCisgICAgICAgICogZG9tL05vZGUuaDoK
KyAgICAgICAgKiBkb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkRXZlbnRRdWV1ZTo6aW5pdGlhbGl6ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hBbGxFdmVudHMpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQpOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vU2NvcGVkRXZlbnRRdWV1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjb3BlZEV2ZW50UXVldWU6On5TY29wZWRFdmVudFF1ZXVlKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjpTY29wZWRFdmVudFF1ZXVlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU6OmRlY3JlbWVudFNjb3Bp
bmdMZXZlbCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRRdWV1ZVNjb3BlOjpFdmVu
dFF1ZXVlU2NvcGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWVTY29wZTo6
fkV2ZW50UXVldWVTY29wZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmFwcGx5KTogSW5zdGFudGlhdGVz
IEV2ZW50UXVldWVTY29wZS4KKwogMjAxMC0xMi0wMSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNs
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5k
ZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJ
KHJldmlzaW9uIDczMzE2KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjUsNiArMTY1LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAJZG9tL1F1YWxpZmllZE5hbWUuY3BwIFwKIAlkb20vUmFuZ2UuY3BwIFwKIAlkb20vUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIFwKKwlkb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAgXAogCWRv
bS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3BwIFwKIAlkb20vU2NyaXB0RWxlbWVudC5jcHAg
XAogCWRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBcCkluZGV4OiBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDczMzE2KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODcx
LDYgKzg3MSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vUXVhbGlmaWVkTmFtZS5j
cHAKICAgICBkb20vUmFuZ2UuY3BwCiAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNw
cAorICAgIGRvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAogICAgIGRvbS9TY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIuY3BwCiAgICAgZG9tL1NjcmlwdEVsZW1lbnQuY3BwCiAgICAgZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczMzE2KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTI0OCw2ICsxMjQ4LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9SYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBc
CiAJV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3JlL2Rv
bS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIFwKKwlXZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1
ZXVlLmNwcCBcCisJV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oIFwKIAlXZWJDb3JlL2Rv
bS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3BwIFwKIAlXZWJDb3JlL2RvbS9TY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIuaCBcCiAJV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDczMzE2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMTcsNiArMTMxNyw4IEBACiAgICAgICAgICAgICAnZG9tL1Jhd0RhdGFEb2N1bWVu
dFBhcnNlci5oJywKICAgICAgICAgICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3Bw
JywKICAgICAgICAgICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAg
ICAgICAnZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwJywKKyAgICAgICAgICAgICdkb20vU2NvcGVk
RXZlbnRRdWV1ZS5oJywKICAgICAgICAgICAgICdkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oJywKICAg
ICAgICAgICAgICdkb20vU2NyaXB0RWxlbWVudC5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MzMxNikK
KysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc2Miw2ICs3NjIsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBkb20vUmFuZ2UuY3BwIFwKICAgICBkb20vUmF3RGF0YURvY3Vt
ZW50UGFyc2VyLmggXAogICAgIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgXAorICAg
IGRvbS9TY29wZWRFdmVudFF1ZXVlLmNwcCBcCiAgICAgZG9tL1NjcmlwdGFibGVEb2N1bWVudFBh
cnNlci5jcHAgXAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcCBcCiAgICAgZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MzMxNikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIzLDYgKzMwMjMsOCBAQAog
CQk5QjQxNzA2NTEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDE3MDYz
MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwICovOyB9Owog
CQk5QkFCNkM2QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUwNjMxMDAxNjI2
RDQgLyogRWRpdGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOUJBQjZDNkQxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2
QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLzsgfTsKKwkJOUJEMEJGOTMx
MkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBT
Y29wZWRFdmVudFF1ZXVlLmggKi87IH07CisJCTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBT
Y29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNw
cCAqLzsgfTsKIAkJOUYwRDZCMkUxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICov
OyB9OwogCQk5RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZC
MkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJ
OUYzQjk0N0UxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYzQjk0N0QxMjI0MTc1ODAw
NTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oICovOyB9OwpAQCAtOTE1Myw2ICs5MTU1LDgg
QEAKIAkJOUI0MTcwNjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFCNkM2QTEy
NTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QkFCNkM2QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1
ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJEMEJGOTIxMkE0MkJGNTAwNzJGRDQz
IC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NvcGVkRXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjBENkIyRDEyMUJGRUJBMDA2
QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0SGVhcFNuYXBzaG90Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODQyMyw2ICsxODQyNyw4IEBACiAJCQkJ
QTg0RDgyN0IxMUQzMzNFRDAwOTcyOTkwIC8qIFJhd0RhdGFEb2N1bWVudFBhcnNlci5oICovLAog
CQkJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
cHAgKi8sCiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLmggKi8sCisJCQkJOUJEMEJGOTIxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50
UXVldWUuY3BwICovLAorCQkJCTlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVu
dFF1ZXVlLmggKi8sCiAJCQkJQTg0RDgyQzAxMUQzNDc0ODAwOTcyOTkwIC8qIFNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5jcHAgKi8sCiAJCQkJQTg0RDgyQkYxMUQzNDc0ODAwOTcyOTkwIC8qIFNj
cmlwdGFibGVEb2N1bWVudFBhcnNlci5oICovLAogCQkJCTA4QTQ4NDc1MEU1MjcyQzUwMEMzRkU3
NiAvKiBTY3JpcHRFbGVtZW50LmNwcCAqLywKQEAgLTIwODIyLDYgKzIwODI4LDcgQEAKIAkJCQk1
REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQ0VGQzlCOTBENzhEQzhDMDA3RDI1NzkgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
aCBpbiBIZWFkZXJzICovLAorCQkJCTlCRDBCRjkzMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRF
dmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VDMDFCRTBDMjc0REFDMDA5RjRFQzkg
LyogU2NyZWVuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODJDMTExRDM0NzQ4MDA5NzI5OTAg
LyogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzlCRTk1
QzEyNjczQkY0MDBFMEE2NzQgLyogU2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNTA0LDYgKzIzNTExLDcgQEAKIAkJCQkxQ0VGQzlCQTBENzhEQzhDMDA3RDI1NzkgLyogU2No
ZWR1bGVQYWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRTI0Rjk3MEQ3Q0FGMEUwMDdFMDRD
MiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTYyQzdGNDExRjc3
RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJE
MEJGOTQxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNFQzAxQkQwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODREODJDMjExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzOUJFOTVCMTI2NzNCRjQwMEUwQTY3NCAv
KiBTY3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmNwcAkocmV2aXNpb24gNzMzMTYpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAyNywxMiArMTAyNywxMiBAQCBzdGF0aWMgdm9pZCBkaXNwYXRj
aENoaWxkSW5zZXJ0aW9uRXZlbnRzCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNo
aWxkLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+
aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKQotICAg
ICAgICBjLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
RE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOworICAgICAgICBj
LT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
RE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCiAgICAgLy8g
ZGlzcGF0Y2ggdGhlIERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCBldmVudCB0byBhbGwgZGVz
Y2VuZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5l
clR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNURU5FUikpIHsK
ICAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKGNoaWxkKSkKLSAgICAg
ICAgICAgIGMtPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5ET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKKyAgICAgICAgICAg
IGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5ET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAgICB9CiB9CiAK
QEAgLTEwNDksMTIgKzEwNDksMTIgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxF
dmVudHMoTgogCiAgICAgLy8gZGlzcGF0Y2ggcHJlLXJlbW92YWwgbXV0YXRpb24gZXZlbnRzCiAg
ICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3Vt
ZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUikpCi0gICAgICAgIGMtPmRpc3BhdGNoRXZlbnQo
TXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEV2ZW50LCB0
cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKKyAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChN
dXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRXZlbnQsIHRy
dWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCiAgICAgLy8gZGlzcGF0Y2ggdGhlIERPTU5vZGVSZW1v
dmVkRnJvbURvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwogICAgIGlmIChjLT5pbkRv
Y3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJF
TU9WRURGUk9NRE9DVU1FTlRfTElTVEVORVIpKSB7CiAgICAgICAgIGZvciAoOyBjOyBjID0gYy0+
dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCi0gICAgICAgICAgICBjLT5kaXNwYXRjaEV2ZW50KE11
dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1l
bnRFdmVudCwgZmFsc2UpKTsKKyAgICAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVu
dEV2ZW50LCBmYWxzZSkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9kb20vRE9NQWxsSW5P
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkocmV2aXNp
b24gNzMzMTYpCisrKyBXZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw2ICsxMDAsNyBAQAogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuY3BwIgogI2luY2x1
ZGUgIlJhbmdlLmNwcCIKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAiCisj
aW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5j
cHAiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAiU2Ny
aXB0YWJsZURvY3VtZW50UGFyc2VyLmNwcCIKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzMxNikK
KysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIxLDcgKzEy
MjEsNyBAQCB2b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBCiAgICAgaWYg
KCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9M
SVNURU5FUikpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01BdHRyTW9kaWZpZWRFdmVu
dCwgdHJ1ZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKKyAgICBkaXNwYXRjaFNjb3BlZEV2ZW50KE11
dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ciwgYXR0
ci0+dmFsdWUoKSwKICAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+YXR0ck5hbWUo
YXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7CiAjZW5kaWYKIH0KQEAg
LTEyMzQsNyArMTIzNCw3IEBAIHZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVu
dCgKICAgICBpZiAoIWRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQVRU
Uk1PRElGSUVEX0xJU1RFTkVSKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJN
b2RpZmllZEV2ZW50LCB0cnVlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAorICAgIGRpc3BhdGNoU2Nv
cGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVl
LCBhdHRyLCBhdHRyLT52YWx1ZSgpLAogICAgICAgICBhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgp
LT5hdHRyTmFtZShhdHRyLT5pZCgpKSwgTXV0YXRpb25FdmVudDo6QURESVRJT04pLCBlYyk7CiAj
ZW5kaWYKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA3MzMxNikKKysrIFdlYkNvcmUvZG9tL05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVu
dC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
U3RhdGljTm9kZUxpc3QuaCIKQEAgLTI1NjIsNiArMjU2MywxNCBAQCBib29sIE5vZGU6OmRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVuCiAgICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50
KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKK3ZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFy
Z2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBm
aXJlIHRoZSBldmVudC4KKyAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKHRoaXMpKTsKKworICAgIFNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNl
KCktPmVucXVldWVFdmVudChldmVudCk7Cit9CisKIHN0YXRpYyBjb25zdCBFdmVudENvbnRleHQq
IHRvcEV2ZW50Q29udGV4dChjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQog
ewogICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZhbmNlc3RvcnMubGFzdCgp
OwpAQCAtMjY3Niw3ICsyNjg1LDcgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFN1YnRyZWVNb2RpZmll
ZEV2ZW50KAogICAgIGlmICghZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpE
T01TVUJUUkVFTU9ESUZJRURfTElTVEVORVIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NU3VidHJlZU1v
ZGlmaWVkRXZlbnQsIHRydWUpKTsKKyAgICBkaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIHRydWUpKTsK
IH0KIAogdm9pZCBOb2RlOjpkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKQEAg
LTI2ODYsMTAgKzI2OTUsMTAgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRv
bWljUwogICAgICAgICAgICBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUZvY3VzSW5FdmVu
dCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUZvY3VzT3V0RXZlbnQgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50KTsKICAgICAKICAgICBib29sIGNh
bmNlbGFibGUgPSBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQ7Ci0g
ICAgCisKICAgICBSZWZQdHI8VUlFdmVudD4gZXZlbnQgPSBVSUV2ZW50OjpjcmVhdGUoZXZlbnRU
eXBlLCB0cnVlLCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBkZXRhaWwp
OwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKLSAgICBk
aXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgZGlzcGF0Y2hTY29wZWRFdmVudChl
dmVudC5yZWxlYXNlKCkpOwogfQogCiBib29sIE5vZGU6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXkpCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA3MzMxNikKKysrIFdlYkNv
cmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDcgKzUxNyw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCog
LypkYXRhRnJvbVByZURpc3BhdGNoKi8pIHsgfQogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAg
dm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAogICAgIGJvb2wg
ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopOwpJbmRleDogV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlZEV2
ZW50UXVldWUuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY29wZWRFdmVudFF1ZXVlKiBTY29wZWRFdmVu
dFF1ZXVlOjpzX2luc3RhbmNlID0gMDsKKworU2NvcGVkRXZlbnRRdWV1ZTo6U2NvcGVkRXZlbnRR
dWV1ZSgpCisgICAgOiBtX3Njb3BpbmdMZXZlbCgwKQoreworfQorCitTY29wZWRFdmVudFF1ZXVl
Ojp+U2NvcGVkRXZlbnRRdWV1ZSgpCit7CisgICAgQVNTRVJUKCFtX3Njb3BpbmdMZXZlbCk7Cisg
ICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5zaXplKCkpOworfQorCit2b2lkIFNjb3BlZEV2ZW50
UXVldWU6OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghc19pbnN0YW5jZSk7CisgICAgT3du
UHRyPFNjb3BlZEV2ZW50UXVldWU+IGluc3RhbmNlID0gYWRvcHRQdHIobmV3IFNjb3BlZEV2ZW50
UXVldWUpOworICAgIHNfaW5zdGFuY2UgPSBpbnN0YW5jZS5sZWFrUHRyKCk7Cit9CisKK3ZvaWQg
U2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hBbGxFdmVudHMoKQoreworICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnQ+ID4gcXVldWVkRXZlbnRzOworICAgIHF1ZXVlZEV2ZW50cy5zd2FwKG1fcXVldWVk
RXZlbnRzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVldWVkRXZlbnRzLnNpemUo
KTsgaSsrKQorICAgICAgICBkaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50c1tpXS5yZWxlYXNlKCkp
OworfQorCit2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpIGNvbnN0Cit7CisgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdl
dCA9IGV2ZW50LT50YXJnZXQoKTsKKyAgICBldmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjb3BlZEV2ZW50UXVldWVfaAorI2RlZmluZSBTY29wZWRFdmVudFF1ZXVlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CisKK2NsYXNzIFNjb3BlZEV2ZW50UXVl
dWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZEV2ZW50UXVldWUpOworCitwdWJs
aWM6CisgICAgflNjb3BlZEV2ZW50UXVldWUoKTsKKworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGRpc3BhdGNoQWxsRXZlbnRzKCk7CisgICAgc3Rh
dGljIFNjb3BlZEV2ZW50UXVldWUqIGluc3RhbmNlKCk7CisKKyAgICB2b2lkIGluY3JlbWVudFNj
b3BpbmdMZXZlbCgpOworICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKCk7CisKK3ByaXZh
dGU6CisgICAgU2NvcGVkRXZlbnRRdWV1ZSgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUo
KTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIGNvbnN0OworCisg
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX3F1ZXVlZEV2ZW50czsKKyAgICB1bnNpZ25lZCBt
X3Njb3BpbmdMZXZlbDsKKworICAgIHN0YXRpYyBTY29wZWRFdmVudFF1ZXVlKiBzX2luc3RhbmNl
OworfTsKKworaW5saW5lIHZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIGlmIChtX3Njb3BpbmdMZXZlbCkKKyAgICAgICAg
bV9xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIGRpc3BhdGNo
RXZlbnQoZXZlbnQpOworfQorCitpbmxpbmUgU2NvcGVkRXZlbnRRdWV1ZSogU2NvcGVkRXZlbnRR
dWV1ZTo6aW5zdGFuY2UoKQoreworICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgaW5pdGlh
bGl6ZSgpOworCisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisKK2lubGluZSB2b2lkIFNjb3Bl
ZEV2ZW50UXVldWU6OmluY3JlbWVudFNjb3BpbmdMZXZlbCgpCit7CisgICAgbV9zY29waW5nTGV2
ZWwrKzsKK30KKworaW5saW5lIHZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZGVjcmVtZW50U2NvcGlu
Z0xldmVsKCkKK3sKKyAgICBBU1NFUlQobV9zY29waW5nTGV2ZWwpOworICAgIG1fc2NvcGluZ0xl
dmVsLS07CisgICAgaWYgKCFtX3Njb3BpbmdMZXZlbCkKKyAgICAgICAgZGlzcGF0Y2hBbGxFdmVu
dHMoKTsKK30KKworY2xhc3MgRXZlbnRRdWV1ZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFdmVudFF1ZXVlU2NvcGUpOworCitwdWJsaWM6CisgICAgRXZlbnRRdWV1ZVNjb3BlKCkg
eyBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5pbmNyZW1lbnRTY29waW5nTGV2ZWwoKTsg
fQorICAgIH5FdmVudFF1ZXVlU2NvcGUoKSB7IFNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKCkt
PmRlY3JlbWVudFNjb3BpbmdMZXZlbCgpOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBTY29wZWRF
dmVudFF1ZXVlX2gKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNzMzMTYp
CisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUuaCIKICNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTg2LDEwICs4NywxMyBAQCB2b2lkIEVk
aXRDb21tYW5kOjphcHBseSgpCiAgICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5kKCkpCiAgICAgICAg
IHVwZGF0ZUxheW91dCgpOwogCi0gICAgRGVsZXRlQnV0dG9uQ29udHJvbGxlciogZGVsZXRlQnV0
dG9uQ29udHJvbGxlciA9IGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigp
OwotICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmRpc2FibGUoKTsKLSAgICBkb0FwcGx5KCk7
Ci0gICAgZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+ZW5hYmxlKCk7CisgICAgeworICAgICAgICBF
dmVudFF1ZXVlU2NvcGUgc2NvcGU7CisgICAgICAgIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIgPSBmcmFtZS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIoKTsKKyAgICAgICAgZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+ZGlzYWJsZSgpOworICAg
ICAgICBkb0FwcGx5KCk7CisgICAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmVuYWJsZSgp
OworICAgIH0KIAogICAgIGlmIChpc1RvcExldmVsQ29tbWFuZCgpKSB7CiAgICAgICAgIC8vIE9u
bHkgbmVlZCB0byBjYWxsIGFwcGxpZWRFZGl0aW5nIGZvciB0b3AtbGV2ZWwgY29tbWFuZHMsIGFu
ZCBUeXBpbmdDb21tYW5kcyBkbyBpdCBvbiB0aGVpcgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzMzMTYp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0xMi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8g
ZW5zdXJlIG5vIERPTSBtdXRhdGlvbiBldmVudHMgYXJlIGZpcmVkIHdoaWxlIGV4ZWNDb21tYW5k
IGlzIGluIHByb2dyZXNzLgorCisgICAgICAgICogZmFzdC9ldmVudHMvY3Jhc2gtb24tbXV0YXRl
LWR1cmluZy1kcm9wLmh0bWw6IERPTU5vZGVJbnNlcnRlZCBpcyBmaXJlZCBhZnRlciBCUiBpcyBk
ZXRhY2hlZAorICAgICAgICBmcm9tIHRoZSBkb2N1bWVudCwgYW5kIGNhbid0IGJlIG9ic2VydmVk
LiBNb2RpZnkgdGhlIERPTSB3aGVuIHRleHQgbm9kZSBpcyBpbnNlcnRlZC4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9tdXRhdGlvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbXV0YXRp
b24vZXhlY0NvbW1hbmRzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTAxICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBG
ZWxkbWFuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY3Jhc2gtb24tbXV0YXRlLWR1
cmluZy1kcm9wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY3Jh
c2gtb24tbXV0YXRlLWR1cmluZy1kcm9wLmh0bWwJKHJldmlzaW9uIDczMzE2KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvY3Jhc2gtb24tbXV0YXRlLWR1cmluZy1kcm9wLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTIsNyArMiw3IEBACiA8aGVhZD4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBmb28o
KSB7Ci0gICAgaWYgKGV2ZW50LnR5cGUgPT0gIkRPTU5vZGVJbnNlcnRlZCIgJiYgZXZlbnQudGFy
Z2V0Lm5vZGVOYW1lID09ICJCUiIpCisgICAgaWYgKGV2ZW50LnR5cGUgPT0gIkRPTU5vZGVJbnNl
cnRlZCIgJiYgZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09IDMpCiAgICAgICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gIlBBU1NFRCI7CiB9CiAKQEAgLTEyLDcgKzEyLDcgQEAgZnVuY3Rpb24g
cnVuVGVzdCgpIHsKIAogICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CiAKLSAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRl
ZCIsIGZ1bmN0aW9uKCkgeyBmb28oKSB9LCB0cnVlKTsKKyAgICBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLCBmdW5jdGlvbigpIHsgZm9vKCkgfSwgdHJ1ZSk7CiAK
ICAgICAvLyBTZWxlY3QgdGhlIGVsZW1lbnQgJ2RyYWdTb3VyY2UnLgogICAgIHZhciBzZWxlY3Rp
b24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9zY29wZWQvZWRpdGluZy1jb21tYW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NvcGVkL2VkaXRpbmctY29tbWFuZHMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NvcGVkL2VkaXRpbmct
Y29tbWFuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACitUaGlz
IHRlc3QgZW5zdXJlcyBXZWJLaXQgZG9lcyBub3QgZmlyZSBET00gbXV0YXRpb24gZXZlbnRzIHdo
aWxlIGV4ZWNDb21tYW5kIGlzIGluIHByb2dyZXNzLgorCitQQVNTOiBleGVjQ29tbWFuZCgnQmFj
a0NvbG9yJywgZmFsc2UsICdibHVlJykKK1BBU1M6IGV4ZWNDb21tYW5kKCdDcmVhdGVMaW5rJywg
ZmFsc2UsICdhYm91dDpibGFuaycpCitQQVNTOiBleGVjQ29tbWFuZCgnRGVsZXRlJywgZmFsc2Us
IG51bGwpCitQQVNTOiBleGVjQ29tbWFuZCgnRm9udE5hbWUnLCBmYWxzZSwgJ0FyaWFsJykKK1BB
U1M6IGV4ZWNDb21tYW5kKCdGb250U2l6ZScsIGZhbHNlLCAnNScpCitQQVNTOiBleGVjQ29tbWFu
ZCgnRm9udFNpemVEZWx0YScsIGZhbHNlLCAnNScpCitQQVNTOiBleGVjQ29tbWFuZCgnRm9yZUNv
bG9yJywgZmFsc2UsICdibHVlJykKK1BBU1M6IGV4ZWNDb21tYW5kKCdGb3JtYXRCbG9jaycsIGZh
bHNlLCAncHJlJykKK1BBU1M6IGV4ZWNDb21tYW5kKCdGb3J3YXJkRGVsZXRlJywgZmFsc2UsIG51
bGwpCitQQVNTOiBleGVjQ29tbWFuZCgnSGlsaXRlQ29sb3InLCBmYWxzZSwgJ3JlZCcpCitQQVNT
OiBleGVjQ29tbWFuZCgnSW5kZW50JywgZmFsc2UsIG51bGwpCitQQVNTOiBleGVjQ29tbWFuZCgn
SW5zZXJ0SFRNTCcsIGZhbHNlLCAnPGk+aGVsbG8nKQorUEFTUzogZXhlY0NvbW1hbmQoJ0luc2Vy
dEhvcml6b250YWxSdWxlJywgZmFsc2UsIG51bGwpCitQQVNTOiBleGVjQ29tbWFuZCgnSW5zZXJ0
SW1hZ2UnLCBmYWxzZSwgJy4uL3Jlc291cmNlcy9hYmUucG5nJykKK1BBU1M6IGV4ZWNDb21tYW5k
KCdJbnNlcnRMaW5lQnJlYWsnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdJbnNl
cnROZXdsaW5lSW5RdW90ZWRDb250ZW50JywgZmFsc2UsIG51bGwpCitQQVNTOiBleGVjQ29tbWFu
ZCgnSW5zZXJ0T3JkZXJlZExpc3QnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdJ
bnNlcnRQYXJhZ3JhcGgnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdJbnNlcnRU
ZXh0JywgZmFsc2UsICd3ZWJraXQnKQorUEFTUzogZXhlY0NvbW1hbmQoJ0luc2VydFVub3JkZXJl
ZExpc3QnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdJdGFsaWMnLCBmYWxzZSwg
bnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdKdXN0aWZ5Q2VudGVyJywgZmFsc2UsIG51bGwpCitQ
QVNTOiBleGVjQ29tbWFuZCgnSnVzdGlmeUZ1bGwnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWND
b21tYW5kKCdKdXN0aWZ5TGVmdCcsIGZhbHNlLCBudWxsKQorUEFTUzogZXhlY0NvbW1hbmQoJ0p1
c3RpZnlOb25lJywgZmFsc2UsIG51bGwpCitQQVNTOiBleGVjQ29tbWFuZCgnSnVzdGlmeVJpZ2h0
JywgZmFsc2UsIG51bGwpCitQQVNTOiBleGVjQ29tbWFuZCgnT3V0ZGVudCcsIGZhbHNlLCBudWxs
KQorUEFTUzogZXhlY0NvbW1hbmQoJ1JlbW92ZUZvcm1hdCcsIGZhbHNlLCBudWxsKQorUEFTUzog
ZXhlY0NvbW1hbmQoJ1N0cmlrZXRocm91Z2gnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21t
YW5kKCdTdWJzY3JpcHQnLCBmYWxzZSwgbnVsbCkKK1BBU1M6IGV4ZWNDb21tYW5kKCdTdXBlcnNj
cmlwdCcsIGZhbHNlLCBudWxsKQorUEFTUzogZXhlY0NvbW1hbmQoJ1RyYW5zcG9zZScsIGZhbHNl
LCBudWxsKQorUEFTUzogZXhlY0NvbW1hbmQoJ1VuZGVybGluZScsIGZhbHNlLCBudWxsKQorUEFT
UzogZXhlY0NvbW1hbmQoJ1VubGluaycsIGZhbHNlLCBudWxsKQorCisKK0RPTkUKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NvcGVkL2VkaXRpbmctY29tbWFuZHMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zY29wZWQvZWRpdGluZy1jb21tYW5k
cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NvcGVkL2Vk
aXRpbmctY29tbWFuZHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdCBlbnN1cmVzIFdlYktpdCBk
b2VzIG5vdCBmaXJlIERPTSBtdXRhdGlvbiBldmVudHMgd2hpbGUgZXhlY0NvbW1hbmQgaXMgaW4g
cHJvZ3Jlc3MuPC9wPgorPGRpdiBpZD0idGVzdCIgY29udGVudGVkaXRhYmxlPjwvZGl2PgorPHBy
ZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgY29tbWFuZHMgPSBbCisgICAg
e25hbWU6ICdCYWNrQ29sb3InLCB2YWx1ZTogJ2JsdWUnfSwKKyAgICB7bmFtZTogJ0NyZWF0ZUxp
bmsnLCB2YWx1ZTogJ2Fib3V0OmJsYW5rJ30sCisgICAge25hbWU6ICdEZWxldGUnLCB2YWx1ZTog
bnVsbH0sCisgICAge25hbWU6ICdGb250TmFtZScsIHZhbHVlOiAnQXJpYWwnfSwKKyAgICB7bmFt
ZTogJ0ZvbnRTaXplJywgdmFsdWU6ICc1J30sCisgICAge25hbWU6ICdGb250U2l6ZURlbHRhJywg
dmFsdWU6ICc1J30sCisgICAge25hbWU6ICdGb3JlQ29sb3InLCB2YWx1ZTogJ2JsdWUnfSwKKyAg
ICB7bmFtZTogJ0Zvcm1hdEJsb2NrJywgdmFsdWU6ICdwcmUnfSwKKyAgICB7bmFtZTogJ0Zvcndh
cmREZWxldGUnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdIaWxpdGVDb2xvcicsIHZhbHVl
OiAncmVkJ30sCisgICAge25hbWU6ICdJbmRlbnQnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6
ICdJbnNlcnRIVE1MJywgdmFsdWU6ICI8aT5oZWxsbzwvaT4ifSwKKyAgICB7bmFtZTogJ0luc2Vy
dEhvcml6b250YWxSdWxlJywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnSW5zZXJ0SW1hZ2Un
LCB2YWx1ZTogJy4uL3Jlc291cmNlcy9hYmUucG5nJ30sCisgICAge25hbWU6ICdJbnNlcnRMaW5l
QnJlYWsnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdJbnNlcnROZXdsaW5lSW5RdW90ZWRD
b250ZW50JywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnSW5zZXJ0T3JkZXJlZExpc3QnLCB2
YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdJbnNlcnRQYXJhZ3JhcGgnLCB2YWx1ZTogbnVsbH0s
CisgICAge25hbWU6ICdJbnNlcnRUZXh0JywgdmFsdWU6ICd3ZWJraXQnfSwKKyAgICB7bmFtZTog
J0luc2VydFVub3JkZXJlZExpc3QnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdJdGFsaWMn
LCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdKdXN0aWZ5Q2VudGVyJywgdmFsdWU6IG51bGx9
LAorICAgIHtuYW1lOiAnSnVzdGlmeUZ1bGwnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdK
dXN0aWZ5TGVmdCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ0p1c3RpZnlOb25lJywgdmFs
dWU6IG51bGx9LAorICAgIHtuYW1lOiAnSnVzdGlmeVJpZ2h0JywgdmFsdWU6IG51bGx9LAorICAg
IHtuYW1lOiAnT3V0ZGVudCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ1JlbW92ZUZvcm1h
dCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ1N0cmlrZXRocm91Z2gnLCB2YWx1ZTogbnVs
bH0sCisgICAge25hbWU6ICdTdWJzY3JpcHQnLCB2YWx1ZTogbnVsbH0sCisgICAge25hbWU6ICdT
dXBlcnNjcmlwdCcsIHZhbHVlOiBudWxsfSwKKyAgICB7bmFtZTogJ1RyYW5zcG9zZScsIHZhbHVl
OiBudWxsLCBzZWxlY3RvcjogZnVuY3Rpb24gKHRlc3QpIHsgd2luZG93LmdldFNlbGVjdGlvbigp
LnNldFBvc2l0aW9uKHRlc3QuZmlyc3RDaGlsZCwgMSk7IH19LAorICAgIHtuYW1lOiAnVW5kZXJs
aW5lJywgdmFsdWU6IG51bGx9LAorICAgIHtuYW1lOiAnVW5saW5rJywgdmFsdWU6IG51bGx9LAor
XTsKKwordmFyIGV2ZW50cyA9IHsKKyAgICAnRE9NU3VidHJlZU1vZGlmaWVkJzogZmFsc2UsCisg
ICAgJ0RPTU5vZGVJbnNlcnRlZCc6IGZhbHNlLAorICAgICdET01Ob2RlUmVtb3ZlZCc6IGZhbHNl
LAorICAgICdET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCc6IGZhbHNlLAorICAgICdET01Ob2Rl
SW5zZXJ0ZWRJbnRvRG9jdW1lbnQnOiB0cnVlLCAvLyB0aGlzIGV2ZW50IGNhbiBuZXZlciBiZSBv
YnNlcnZlZC4KKyAgICAnRE9NRm9jdXNJbic6IGZhbHNlLAorICAgICdET01Gb2N1c091dCc6IGZh
bHNlLAorICAgICdmb2N1c2luJzogZmFsc2UsCisgICAgJ2ZvY3Vzb3V0JzogZmFsc2UsCit9Owor
Cit2YXIgbG9nID0gW107Cit2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0
Jyk7CisKK2Z1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKG5vZGUpIHsKKyAgICBmb3IgKHZhciBl
IGluIGV2ZW50cykgeworICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZSwgZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgICAgICAgICBsb2cucHVzaCh0ZXN0LmlubmVySFRNTCk7CisgICAgICAg
ICAgICBldmVudHNbZXZlbnQudHlwZV0gPSB0cnVlOworICAgICAgICB9LCBmYWxzZSk7CisgICAg
fQorfQorCitmdW5jdGlvbiBpc0xvZ0NvbnNpc3RlbnQoKSB7CisgICAgZm9yICh2YXIgaT0gMTsg
aSA8IGxvZy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobG9nWzBdICE9IGxvZ1tpXSkgewor
ICAgICAgICAgICAgY29uc29sZS5sb2cobG9nKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYWRkRXZlbnRMaXN0ZW5l
cnModGVzdCk7CisKK3ZhciBpbml0aWFsID0gJ2hlbGxvLCA8aW5wdXQgdHlwZT0idGV4dCI+PGJs
b2NrcXVvdGUgYWxpZ249InJpZ2h0Ij48dT48YSBocmVmPSJhYm91dDpibGFuayI+d29ybGQ8L2E+
PC91PjwvYmxvY2txdW90ZT4nOworZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7
IGkrKykgeworICAgIHRlc3QuaW5uZXJIVE1MID0gaW5pdGlhbDsKKyAgICBpZiAoaSkKKyAgICAg
ICAgZG9jdW1lbnQud3JpdGUoIlxuIik7CisKKyAgICBpZiAodGVzdC5pbm5lckhUTUwgIT0gaW5p
dGlhbCkgeworICAgICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogaW5pdGlhbCBpbm5lckhUTUwg
ZGlkbid0IG1hdGNoIik7CisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChjb21t
YW5kc1tpXS5zZWxlY3RvcikKKyAgICAgICAgY29tbWFuZHNbaV0uc2VsZWN0b3IodGVzdCk7Cisg
ICAgZWxzZSB7ICAgIAorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5w
dXQnKVswXS5mb2N1cygpOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxs
Q2hpbGRyZW4odGVzdCk7CisgICAgfQorICAgIGFkZEV2ZW50TGlzdGVuZXJzKHRlc3QuY2hpbGRO
b2Rlc1syXSk7CisgICAgbG9nID0gW107IC8vIGNsZWFyIGxvZworICAgIGRvY3VtZW50LmV4ZWND
b21tYW5kKGNvbW1hbmRzW2ldLm5hbWUsIGZhbHNlLCBjb21tYW5kc1tpXS52YWx1ZSk7CisKKyAg
ICB2YXIgcXVvdGVkVmFsdWUgPSBjb21tYW5kc1tpXS52YWx1ZSA/ICInIiArIGNvbW1hbmRzW2ld
LnZhbHVlLnJlcGxhY2UoJzwnLCAnJmx0OycpICsgIiciIDogbnVsbDsKKyAgICB2YXIgYWN0aW9u
ID0gImV4ZWNDb21tYW5kKCciICsgY29tbWFuZHNbaV0ubmFtZSArICInLCBmYWxzZSwgIiArIHF1
b3RlZFZhbHVlICsgIikiOworCisgICAgaWYgKHRlc3QuaW5uZXJIVE1MID09IGluaXRpYWwgfHwg
bG9nLmxlbmd0aCA8PSAwKQorICAgICAgICBkb2N1bWVudC53cml0ZSgnRkFJTDogJyArIGFjdGlv
biArICcgbWFkZSBubyBjaGFuZ2UgdG8gdGhlIERPTS4nKTsKKyAgICBlbHNlIGlmICghaXNMb2dD
b25zaXN0ZW50KCkpCisgICAgICAgIGRvY3VtZW50LndyaXRlKCdGQUlMOiAnICsgYWN0aW9uICsg
JyBkaXNwYXRjaGVkIGV2ZW50cyBiZWZvcmUgZmluYWxpemluZyB0aGUgRE9NIHRyZWUuJyk7Cisg
ICAgZWxzZQorICAgICAgICBkb2N1bWVudC53cml0ZSgnUEFTUzogJyArIGFjdGlvbik7Cit9Cit0
ZXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisKK2RvY3VtZW50LndyaXRlKCdcbicpOworZm9y
ICh2YXIgZSBpbiBldmVudHMpIHsKKyAgICBpZiAoIWV2ZW50c1tlXSkKKyAgICAgICAgZG9jdW1l
bnQud3JpdGUoJ1xuV0FSTklORzogJyArIGUgKyAnIHdhcyBuZXZlciBvYnNlcnZlZC4nKTsKK30K
KworZG9jdW1lbnQud3JpdGUoJ1xuXG5ET05FJyk7CisKKzwvc2NyaXB0PgorPC9wcmU+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="66413"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>