<?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>44907</bug_id>
          
          <creation_ts>2010-08-30 16:00:58 -0700</creation_ts>
          <short_desc>Refactor input[type=range] to use a more natural shadow DOM model.</short_desc>
          <delta_ts>2011-04-30 09:27:52 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46015</dependson>
    
    <dependson>46595</dependson>
    
    <dependson>48697</dependson>
    
    <dependson>50971</dependson>
    
    <dependson>50972</dependson>
    
    <dependson>50973</dependson>
    
    <dependson>52317</dependson>
    
    <dependson>52464</dependson>
    
    <dependson>53050</dependson>
          <blocked>25648</blocked>
    
    <blocked>48698</blocked>
    
    <blocked>52937</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>jschuh</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271717</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-30 16:00:58 -0700</bug_when>
    <thetext>Refactor input[type=range] to use a more natural shadow DOM model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271718</commentid>
    <comment_count>1</comment_count>
      <attachid>65974</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-30 16:01:27 -0700</bug_when>
    <thetext>Created attachment 65974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271720</commentid>
    <comment_count>2</comment_count>
      <attachid>65974</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-30 16:05:25 -0700</bug_when>
    <thetext>Comment on attachment 65974
Patch

This is work in progress, not yet ready for review.

I looked at the way we hang a DOM node off of RenderObjects for our shadow DOM implementation, and decided it was evil.

So I started cooking a way to fix this. This (incomplete) patch highlights the approach: make shadow DOM nodes part of the standard DOM node lifecycle, and take advantage of the already existing DOM/layout functionality, thus avoiding things like forwardEvent, updateFromElement, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271721</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-30 16:06:17 -0700</bug_when>
    <thetext>WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271722</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-30 16:07:05 -0700</bug_when>
    <thetext>&gt; This is work in progress, not yet ready for review.

webkit-patch upload --no-review -m &quot;work in progress&quot;

That will avoid setting the review flag and name the patch &quot;work in progress&quot;  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273973</commentid>
    <comment_count>5</comment_count>
      <attachid>66508</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-03 09:19:47 -0700</bug_when>
    <thetext>Created attachment 66508
WIP: A bit more progress, still not done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277534</commentid>
    <comment_count>6</comment_count>
      <attachid>67262</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-10 16:37:01 -0700</bug_when>
    <thetext>Created attachment 67262
Nearly there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277536</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-10 16:39:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=67262) [details]
&gt; Nearly there

I swear this patch is going to grow only a tiny bit more. Things left to do:
* moving new classes out to separate files
* twiddling a bit more with event retargeting code to make things pretty
* writing a long-ass ChangeLog.

Can you please take a look and tell me if anything sticks out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278268</commentid>
    <comment_count>8</comment_count>
      <attachid>67262</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-13 09:57:37 -0700</bug_when>
    <thetext>Comment on attachment 67262
Nearly there

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

Looking good. No need for you to do this all in one big patch, though. You can break off bits and land them first.

&gt; WebCore/css/CSSStyleSelector.cpp:1198
&gt; +    // Check to see if an element wants to start style from a pre-defined pseudoId.
&gt; +    // FIXME: This is horrid, because we resolve the style twice.
&gt; +    RenderStyle* initialStyle = 0;
&gt; +    if (e-&gt;stylePseudoId() != NOPSEUDO) {
&gt; +        Node* parent = e-&gt;parentOrHostNode();
&gt; +        // FIXME: This is a giant hack, needed to wire up Media timeline and volume
&gt; +        //        elements.
&gt; +        if (Node* shadowRoot = parent-&gt;shadowTreeRootNode())
&gt; +            parent = shadowRoot-&gt;shadowParentNode();
&gt; +        if (parent &amp;&amp; parent-&gt;renderer()) {
&gt; +            initialStyle = parent-&gt;renderer()-&gt;getCachedPseudoStyle(e-&gt;stylePseudoId());
&gt; +            // Re-initialize m_element and m_styledElement that were dirtied by getCachedPseudoStyle call.
&gt; +            // FIXME: Remove transient CSSStyleSelector members to eliminate the need
&gt; +            // for this fixup.
&gt; +            initElement(e);
&gt; +        }
&gt; +    }
&gt; +    if (initialStyle)
&gt; +        m_style = RenderStyle::clone(initialStyle);
&gt; +    else
&gt; +        m_style = RenderStyle::create();
Can you refactor this into a function?

&gt; WebCore/css/mediaControls.css:93
&gt; +    /* Unfortunately, a more appropriate setting of appearance is hard-coded in RenderSliderThumb::layout(),
&gt; +       but we need to have an appearance of some sort to start painting. */
This comment is confusing. Maybe there’s a clearer way to word it.

&gt; WebCore/dom/ContainerNode.cpp:1000
&gt; +    Node* parentOrHostNode = c-&gt;parentOrHostNode();
&gt; +    if (parentOrHostNode &amp;&amp; parentOrHostNode-&gt;inDocument())
This seems like the kind of change we could land sooner in a separate round to make the final patch smaller.

&gt; WebCore/dom/Element.cpp:793
&gt; +    if (Node* shadowNode = shadow())
&gt; +        shadowNode-&gt;insertedIntoDocument();
I’m worried that all of these calls will result in a noticeable slowdown. We won’t be able to land it like that!

&gt; WebCore/dom/Element.h:311
&gt; +    // FIXME: Make non-virtual.
&gt; +    virtual Node* shadow();
I’d like to hear more about this; how it can be made non-virtual.

&gt; WebCore/dom/Node.cpp:119
&gt; +// FIXME: Move to a separate file.
&gt; +EventAncestor::EventAncestor(ContainerNode* ancestor, Node* target)
It would be good to land this whole EventAncestor machinery first, separately. In fact, you could start by just creating the separate source file and then adding this class.

&gt; WebCore/html/HTMLInputElement.cpp:2549
&gt; -    if (inputType() == RANGE &amp;&amp; renderer() &amp;&amp; (evt-&gt;isMouseEvent() || evt-&gt;isDragEvent() || evt-&gt;isWheelEvent()))
&gt; -        toRenderSlider(renderer())-&gt;forwardEvent(evt);
&gt; +    if (inputType() == RANGE &amp;&amp; renderer() &amp;&amp; evt-&gt;isMouseEvent()) {
&gt; +        MouseEvent* mouseEvent = static_cast&lt;MouseEvent*&gt;(evt);
&gt; +        if (evt-&gt;type() == eventNames().mousedownEvent &amp;&amp; mouseEvent-&gt;button() == LeftButton) {
&gt; +            SliderThumbElement* thumb = toSliderThumbElement(shadow());
&gt; +            ASSERT(thumb);
&gt; +            thumb-&gt;dragFrom(mouseEvent-&gt;absoluteLocation());
&gt; +            evt-&gt;setDefaultHandled();
&gt; +        }
&gt; +    }
This seems a little weak. Moving the specific code for SliderThumbElement here is a step backwards in factoring, so why do it?

&gt; WebCore/html/HTMLInputElement.cpp:2976
&gt; +// FIXME: Once most of the shadow DOM is handled this way, we should move this
&gt; +//        to Element.
Please don’t break up these comments like this. A slightly longer line would be better.

A nice way to do this is might be to put this into ElementRareData.

&gt; WebCore/html/HTMLInputElement.cpp:2983
&gt; +    static ShadowRootMap* s_map = 0;
&gt; +    if (!s_map)
&gt; +        s_map = new ShadowRootMap();
&gt; +    return s_map;
You should write this like this:

    static ShadowRootMap* s_map = new ShadowRootMap;
    return s_map;

No need for that if statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278426</commentid>
    <comment_count>9</comment_count>
      <attachid>67262</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-13 13:18:41 -0700</bug_when>
    <thetext>Comment on attachment 67262
Nearly there

Thanks for looking at this, Darin! The comments below make sense when viewed as Formatted Diff. I replied to all yours :)

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

&gt; WebCore/css/CSSStyleSelector.cpp:1198
&gt; +        m_style = RenderStyle::create();
Sure thing. This would also make it more clear about which part of this needs to be rewritten away.

&gt; WebCore/css/mediaControls.css:93
&gt; +       but we need to have an appearance of some sort to start painting. */
Will do.

&gt; WebCore/dom/Element.cpp:793
&gt; +        shadowNode-&gt;insertedIntoDocument();
I can measure performance if you&apos;d like, either Dromaeo or microbench it.

&gt; WebCore/dom/Element.h:311
&gt; +    virtual Node* shadow();
If the shadow static map (from below) is moved from HTMLInputElement to Element, then we don&apos;t need this to be virtual.

&gt; WebCore/dom/Node.cpp:119
&gt; +EventAncestor::EventAncestor(ContainerNode* ancestor, Node* target)
Sounds like a plan, I&apos;ll split up the patch.

&gt; WebCore/html/HTMLInputElement.cpp:2549
&gt; +    }
No, no, this is much better! :) At least, I think so -- all we&apos;re doing is getting the thumb and telling it to start dragging. It&apos;s nice and clean, no forwarding events or passing them through the render objects.

&gt; WebCore/html/HTMLInputElement.cpp:2976
&gt; +//        to Element.
Sorry :) Will fix.

&gt; WebCore/html/HTMLInputElement.cpp:2983
&gt; +    return s_map;
DOH.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278991</commentid>
    <comment_count>10</comment_count>
      <attachid>67571</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-14 10:06:37 -0700</bug_when>
    <thetext>Created attachment 67571
Capture state before breaking up into smaller patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278995</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-14 10:10:26 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=67571) [details]
&gt; Capture state before breaking up into smaller patches

Now passes all tests. I&apos;ll be breaking out event ancestor stuff first, then we&apos;ll see what&apos;s left. In other news -- I killed eventParentNode! That&apos;s one of the hottest virtual calls in the event handling code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309808</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-16 10:37:13 -0800</bug_when>
    <thetext>If you&apos;re into fixing shadow doms... &lt;keygen&gt; needs a shadow dom to hold its &lt;option&gt; elements.  Right now they&apos;re just added to the DOM directly, which causes us to skip the html5 parsing tests on all platforms other than mac (since the current expected DOM is the one which appears for Mac.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309853</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-11-16 11:43:42 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; If you&apos;re into fixing shadow doms... &lt;keygen&gt; needs a shadow dom to hold its &lt;option&gt; elements.  Right now they&apos;re just added to the DOM directly, which causes us to skip the html5 parsing tests on all platforms other than mac (since the current expected DOM is the one which appears for Mac.)

This seems like a good thing to fix :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320438</commentid>
    <comment_count>14</comment_count>
      <attachid>76266</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-10 15:06:35 -0800</bug_when>
    <thetext>Created attachment 76266
WIP: Reconstruct based on prior patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324787</commentid>
    <comment_count>15</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-12-20 22:19:57 -0800</bug_when>
    <thetext>I filed &lt;https://bugs.webkit.org/show_bug.cgi?id=51379&gt; for cleaning up keygen’s option elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332792</commentid>
    <comment_count>16</comment_count>
      <attachid>78623</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-11 16:41:44 -0800</bug_when>
    <thetext>Created attachment 78623
WIP: Putting all pieces together for the slider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384990</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-13 10:34:23 -0700</bug_when>
    <thetext>The slider now uses new shadow DOM.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65974</attachid>
            <date>2010-08-30 16:01:27 -0700</date>
            <delta_ts>2010-09-03 09:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44907-20100830160126.patch</filename>
            <type>text/plain</type>
            <size>40170</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDljMjAwMjE1ODYwNTU3OTg5MDBjOTlkNDU5MDliYjQzYWVmNWZmMy4uMzU2MThlODMzMWExNWM0
Yjg4Njc3M2Q3ZDFiNTk2ZjYyOTljMTQyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxMC0wOC0zMCAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIGlucHV0W3R5cGU9cmFuZ2Vd
IHRvIHVzZSBhIG1vcmUgbmF0dXJhbCBzaGFkb3cgRE9NIG1vZGVsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MDcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWI6OmVs
ZW1lbnRSZWN0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbHZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAg
ICogY3NzL2h0bWwuY3NzOgorICAgICAgICAoaW5wdXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1z
bGlkZXItdGh1bWIpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeUNoaWxkSW5zZXJ0ZWQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
aGFkb3cpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzdHlsZVBzZXVkb0lkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6Om91
dGVybW9zdExhenlBdHRhY2hlZEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxh
enlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRPckhvc3ROb2RlKToKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd1Jvb3RNYXApOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6c2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmNyZWF0ZVNoYWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6cmVtb3ZlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlk
ZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xp
ZGVyVGh1bWI6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6
OlNsaWRlclRodW1iRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1l
bnQ6On5TbGlkZXJUaHVtYkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50
OjpkZXRhY2gpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6flJlbmRlclNsaWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTbGlkZXI6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNsaWRlcjo6dGh1bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50SXNJblRodW1i
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6bW91c2VFdmVudE9mZnNldFRvVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzZXRWYWx1ZUZvclBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6cG9zaXRpb25Gb3JPZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp0cmFja1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2xpZGVyOjpmb3J3YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xp
ZGVyOjppbkRyYWdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dGh1bWIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNsaWRlclRodW1iRWxlbWVudDo6aW5EcmFnTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlk
ZXJUaHVtYkVsZW1lbnQ6OnN0eWxlUHNldWRvSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpzaGFkb3dQYXJlbnROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2hh
ZG93RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RWxlbWVudDo6flNoYWRvd0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93SW5wdXRFbGVtZW50Ojp+U2hhZG93SW5w
dXRFbGVtZW50KToKKwogMjAxMC0wOC0xOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAgYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAKaW5kZXggZThkMWY0
MTcyMDY3ODM1Y2M0YzZjM2E2YzdlM2QyN2FiMjc1NTU3Mi4uYTEzN2I5ZTdhNzExNDE5ZjcwODlj
ZjJjOTA3ODQ2NGU0NjRlMzIzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2xpZGVyLmNwcApAQCAtMTU5LDcgKzE1OSw4IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0
eVNsaWRlclRodW1iOjplbGVtZW50UmVjdCgpIGNvbnN0CiAgICAgaWYgKCFtX3BhcmVudFNsaWRl
ci0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3Qg
aW50UmVjdCA9IHRvUmVuZGVyU2xpZGVyKG1fcGFyZW50U2xpZGVyLT5yZW5kZXJlcigpKS0+dGh1
bWJSZWN0KCk7CisgICAgLy8gRklYTUU6IEZJWCBUSElTIEJFRk9SRSBMQU5ESU5HIFBBQUFBQUFB
QUFUQ0ghISEhCisgICAgSW50UmVjdCBpbnRSZWN0OyAvLyA9IHRvUmVuZGVyU2xpZGVyKG1fcGFy
ZW50U2xpZGVyLT5yZW5kZXJlcigpKS0+dGh1bWJSZWN0KCk7CiAgICAgRmxvYXRRdWFkIGZsb2F0
UXVhZCA9IG1fcGFyZW50U2xpZGVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChpbnRSZWN0KSk7CiAKICAgICByZXR1cm4gZmxvYXRRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDRlZTQ5ZDA2MTJjYzIxNDc3
MzllNzRlMzhlZDNmZGVlNWIxMzE1YjcuLjM1YjkyM2ZkNTg4NWJkZDkyMTk4NWZhMjNhNWZmYTUz
YjM2MGY0ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisr
KyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04MzUsMTIgKzgzNSw3IEBA
IGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVu
dCogZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiB7CiAgICAgbV9jaGVja2VyLm1fcHNldWRvU3R5bGUg
PSBwc2V1ZG9JRDsKIAotICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnROb2RlKCkgOiAw
OwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoIW1fcGFyZW50Tm9kZSAmJiBlICYmIGUtPmlz
U1ZHRWxlbWVudCgpICYmIGUtPmlzU2hhZG93Tm9kZSgpKQotICAgICAgICBtX3BhcmVudE5vZGUg
PSBlLT5zaGFkb3dQYXJlbnROb2RlKCk7Ci0jZW5kaWYKKyAgICBtX3BhcmVudE5vZGUgPSBlID8g
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpIDogMDsKIAogICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAg
ICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwpAQCAtMTE5MSw3ICsxMTg2LDIyIEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlLCBSZW5kZXJTdHlsCiAKICAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwogCi0gICAgbV9zdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgYW4gZWxlbWVudCB3YW50
cyB0byBzdGFydCBzdHlsZSBmcm9tIGEgcHJlLWRlZmluZWQgcHNldWRvSWQuCisgICAgUmVuZGVy
U3R5bGUqIGluaXRpYWxTdHlsZSA9IDA7CisgICAgaWYgKGUtPnN0eWxlUHNldWRvSWQoKSAhPSBO
T1BTRVVETykgeworICAgICAgICBOb2RlKiBwYXJlbnQgPSBlLT5wYXJlbnRPckhvc3ROb2RlKCk7
CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAg
ICBpbml0aWFsU3R5bGUgPSBwYXJlbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxl
KGUtPnN0eWxlUHNldWRvSWQoKSk7CisgICAgICAgICAgICAvLyBSZS1pbml0aWFsaXplIG1fZWxl
bWVudCBhbmQgbV9zdHlsZWRFbGVtZW50IHRoYXQgd2VyZSBkaXJ0aWVkIGJ5IGdldENhY2hlZFBz
ZXVkb1N0eWxlIGNhbGwuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRyYW5zaWVudCBD
U1NTdHlsZVNlbGVjdG9yIG1lbWJlcnMgdG8gZWxpbWluYXRlIHRoZSBuZWVkCisgICAgICAgICAg
ICAvLyBmb3IgdGhpcyBmaXh1cC4KKyAgICAgICAgICAgIGluaXRFbGVtZW50KGUpOworICAgICAg
ICB9CisgICAgfQorICAgIGlmIChpbml0aWFsU3R5bGUpCisgICAgICAgIG1fc3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoaW5pdGlhbFN0eWxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBpZiAobV9wYXJlbnRTdHlsZSkKICAgICAg
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2Nzcy9odG1sLmNzcyBiL1dlYkNvcmUvY3NzL2h0bWwuY3NzCmluZGV4IGQ2NWFjYjAzNzcx
NDBmYmM1OGNmMDliMDRkMzE4ZGQ0ZmQxM2U5OWIuLmIxMDY0Mjg1NTIwMmI1ZjdiOTBhNTFhODQw
NTNlYTUzYjRlN2IzMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL2h0bWwuY3NzCisrKyBiL1dl
YkNvcmUvY3NzL2h0bWwuY3NzCkBAIC00NDgsNiArNDQ4LDcgQEAgaW5wdXRbdHlwZT0icmFuZ2Ui
XSB7CiAKIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6b250YWw7CisgICAgZGlzcGxheTog
YmxvY2s7CiB9CiAKIGlucHV0W3R5cGU9ImJ1dHRvbiJdOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJz
dWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0icmVzZXQiXTpkaXNhYmxlZCwKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAKaW5kZXggZTU1OWJhN2Y2ZTJmZmZlZTBhMzcwZGM4MjMzMGNkN2NiYTY1MWZmMy4u
ZTYwZGJkM2U2ZGJhY2NlNjE5YThmZGNjMjgyZjVmYTQ2OTFmMDAyYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdFRhcmdldE5vZGVzKE5v
ZGUqIG5vZGUsIE5vZGVWZWN0b3ImIG5vZGVzKQogICAgICAgICBub2Rlcy5hcHBlbmQoY2hpbGQp
OwogfQogCisvLyBGSVhNRTogSU1QTEVNRU5UIFJFTU9WRSBBTEwgQ0hJTERSRU4gRk9SIFNIQURP
VyBET00KIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogewogICAgIHJl
bW92ZUFsbENoaWxkcmVuSW5Db250YWluZXI8Tm9kZSwgQ29udGFpbmVyTm9kZT4odGhpcyk7CkBA
IC05MzgsNyArOTM5LDggQEAgc3RhdGljIHZvaWQgbm90aWZ5Q2hpbGRJbnNlcnRlZChOb2RlKiBj
aGlsZCkKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAotICAgIGlmIChjLT5wYXJlbnROb2RlKCkg
JiYgYy0+cGFyZW50Tm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgTm9kZSogcGFyZW50T3JIb3N0
Tm9kZSA9IGMtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAocGFyZW50T3JIb3N0Tm9kZSAm
JiBwYXJlbnRPckhvc3ROb2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIGMtPmluc2VydGVkSW50
b0RvY3VtZW50KCk7CiAgICAgZWxzZQogICAgICAgICBjLT5pbnNlcnRlZEludG9UcmVlKHRydWUp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCBhNDY5YTQyMTQ2OTJmNTAyZmI1NDc2ZjEwYmYzN2RlNTk5YWY0OTZkLi4w
ZjM4MzM5OTg4MTY1ZTk2ZGVjNzA4NjFiYTY2ZWI2NmJkZTAxZDY5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNzg0
LDYgKzc4NCw4IEBAIHZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogICAgIC8v
IG5lZWQgdG8gZG8gc3VwZXJjbGFzcyBwcm9jZXNzaW5nIGZpcnN0IHNvIGluRG9jdW1lbnQoKSBp
cyB0cnVlCiAgICAgLy8gYnkgdGhlIHRpbWUgd2UgcmVhY2ggdXBkYXRlSWQKICAgICBDb250YWlu
ZXJOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIGlmIChzaGFkb3coKSkKKyAgICAg
ICAgc2hhZG93KCktPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKICAgICBpZiAoaGFzSUQoKSkg
ewogICAgICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKQEAgLTgwNSw2ICs4MDcsMjIgQEAgdm9p
ZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKICAgICB9CiAKICAgICBDb250YWluZXJO
b2RlOjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgaWYgKHNoYWRvdygpKQorICAgICAgICBz
aGFkb3coKS0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOworfQorCit2b2lkIEVsZW1lbnQ6Omluc2Vy
dGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50
b1RyZWUoZGVlcCk7CisgICAgaWYgKGRlZXAgJiYgc2hhZG93KCkpCisgICAgICAgIHNoYWRvdygp
LT5pbnNlcnRlZEludG9UcmVlKHRydWUpOworfQorCit2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9t
VHJlZShib29sIGRlZXApCit7CisgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKGRl
ZXApOworICAgIGlmIChkZWVwICYmIHNoYWRvdygpKQorICAgICAgICBzaGFkb3coKS0+cmVtb3Zl
ZEZyb21UcmVlKHRydWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCkBAIC04MTQsNiAr
ODMyLDggQEAgdm9pZCBFbGVtZW50OjphdHRhY2goKQogCiAgICAgY3JlYXRlUmVuZGVyZXJJZk5l
ZWRlZCgpOwogICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOworICAgIGlmIChzaGFkb3coKSkK
KyAgICAgICAgc2hhZG93KCktPmF0dGFjaCgpOwogICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7ICAg
CiAgICAgICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CiAgICAgICAgIGlm
IChkYXRhLT5uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCgpKSB7CkBA
IC04MzUsNiArODU1LDggQEAgdm9pZCBFbGVtZW50OjpkZXRhY2goKQogICAgIGlmIChoYXNSYXJl
RGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUoKTsKICAgICBD
b250YWluZXJOb2RlOjpkZXRhY2goKTsKKyAgICBpZiAoc2hhZG93KCkpCisgICAgICAgIHNoYWRv
dygpLT5kZXRhY2goKTsKIAogICAgIFJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0SGllcmFyY2h5
VXBkYXRlcygpOwogfQpAQCAtODg4LDEwICs5MTAsOCBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKICAgICBib29sIGhhc1Bvc2l0aW9uYWxSdWxlcyA9IG5l
ZWRzU3R5bGVSZWNhbGMoKSAmJiBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJl
bkFmZmVjdGVkQnlQb3NpdGlvbmFsUnVsZXMoKTsKICAgICBib29sIGhhc0RpcmVjdEFkamFjZW50
UnVsZXMgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlE
aXJlY3RBZGphY2VudFJ1bGVzKCk7CiAKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghaGFzUGFy
ZW50U3R5bGUgJiYgaXNTaGFkb3dOb2RlKCkgJiYgaXNTVkdFbGVtZW50KCkpCisgICAgaWYgKCFo
YXNQYXJlbnRTdHlsZSAmJiBpc1NoYWRvd05vZGUoKSkKICAgICAgICAgaGFzUGFyZW50U3R5bGUg
PSB0cnVlOwotI2VuZGlmCiAKICAgICBpZiAoKGNoYW5nZSA+IE5vQ2hhbmdlIHx8IG5lZWRzU3R5
bGVSZWNhbGMoKSkpIHsKICAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCkBAIC05NzAsNiArOTkw
LDExIEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogICAg
ICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgZm9yY2VDaGVja09mTmV4
dEVsZW1lbnRTaWJsaW5nID0gY2hpbGRSdWxlc0NoYW5nZWQgJiYgaGFzRGlyZWN0QWRqYWNlbnRS
dWxlczsKICAgICB9CisgICAgLy8gVGhpcyBkb2VzIG5vdCBjYXJlIGFib3V0IHNpYmxpbmcgY29t
YmluYXRvcnMsIGJ1dCBjdXJyZW50bHkgd2UgaGF2ZSBubyBzaGFkb3cgRE9NIGVsZW1lbnRzIHRo
YXQgbmVlZCB0aGF0IGF0IHRoZSBtb21lbnQuCisgICAgaWYgKE5vZGUqIHNoYWRvd05vZGUgPSBz
aGFkb3coKSkgeworICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgc2hhZG93Tm9kZS0+
aXNUZXh0Tm9kZSgpIHx8IHNoYWRvd05vZGUtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IHNo
YWRvd05vZGUtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICAgICAgICAgIHNoYWRvd05vZGUtPnJl
Y2FsY1N0eWxlKGNoYW5nZSk7CisgICAgfQogCiAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7
CiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKQEAgLTE1ODcsNCArMTYxMiw5IEBA
IGJvb2wgRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29u
c3QKIH0KICNlbmRpZgogCitOb2RlKiBFbGVtZW50OjpzaGFkb3coKQoreworICAgIHJldHVybiAw
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9F
bGVtZW50LmggYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggNjk0ZGI5ODhiYjZlYzZmYTYz
MzYzMWIzNmIwM2ViMWQ5MTJiOTU5Mi4uNTI0ODNkZTkxY2IxN2MzMTg4Mzk4OGQ5MzUxYjA3Yjhm
OGIyMGZjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaApAQCAtMjkzLDYgKzI5Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7IAogI2VuZGlmCiAKKyAg
ICB2aXJ0dWFsIE5vZGUqIHNoYWRvdygpOworICAgIHZpcnR1YWwgUHNldWRvSWQgc3R5bGVQc2V1
ZG9JZCgpIGNvbnN0IHsgcmV0dXJuIE5PUFNFVURPOyB9CisKIHByb3RlY3RlZDoKICAgICBFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgQ29u
c3RydWN0aW9uVHlwZSB0eXBlKQogICAgICAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQsIHR5
cGUpCkBAIC0zMDIsNiArMzA1LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdl
ID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAK
ICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCgp
IGNhbGxzIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMGJjOGQ5ZTlhZTUyM2Ux
MWViNDhjODcyZDUzZDViNDYyODA2MmI3Zi4uMzI5MGVhZjVlMjhkOGJkYTFjMGY4Y2U4ZDc0OTI0
OWYxODI1Yzc2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIE5vZGU6OnNldE5lZWRzU3R5
bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCiAgICAgICAgIHNldFN0eWxlQ2hh
bmdlKGNoYW5nZVR5cGUpOwogCiAgICAgaWYgKGV4aXN0aW5nQ2hhbmdlVHlwZSA9PSBOb1N0eWxl
Q2hhbmdlKSB7Ci0gICAgICAgIGZvciAoTm9kZSogcCA9IHBhcmVudE5vZGUoKTsgcCAmJiAhcC0+
Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7IHAgPSBwLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGZv
ciAoTm9kZSogcCA9IHBhcmVudE9ySG9zdE5vZGUoKTsgcCAmJiAhcC0+Y2hpbGROZWVkc1N0eWxl
UmVjYWxjKCk7IHAgPSBwLT5wYXJlbnRPckhvc3ROb2RlKCkpCiAgICAgICAgICAgICBwLT5zZXRD
aGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Y2hpbGRO
ZWVkc1N0eWxlUmVjYWxjKCkpCkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBOb2RlOjpzZXROZWVk
c1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogc3RhdGljIE5vZGUqIG91
dGVybW9zdExhenlBdHRhY2hlZEFuY2VzdG9yKE5vZGUqIHN0YXJ0KQogewogICAgIE5vZGUqIHAg
PSBzdGFydDsKLSAgICBmb3IgKE5vZGUqIG5leHQgPSBwLT5wYXJlbnROb2RlKCk7ICFuZXh0LT5y
ZW5kZXJlcigpOyBwID0gbmV4dCwgbmV4dCA9IG5leHQtPnBhcmVudE5vZGUoKSkge30KKyAgICBm
b3IgKE5vZGUqIG5leHQgPSBwLT5wYXJlbnRPckhvc3ROb2RlKCk7ICFuZXh0LT5yZW5kZXJlcigp
OyBwID0gbmV4dCwgbmV4dCA9IG5leHQtPnBhcmVudE9ySG9zdE5vZGUoKSkge30KICAgICByZXR1
cm4gcDsKIH0KIApAQCAtNzcyLDcgKzc3Miw3IEBAIHZvaWQgTm9kZTo6bGF6eUF0dGFjaCgpCiAg
ICAgICAgICAgICBsYXp5QXR0YWNoZWRBbmNlc3Rvci0+ZGV0YWNoKCk7CiAgICAgICAgIGxhenlB
dHRhY2hlZEFuY2VzdG9yLT5hdHRhY2goKTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKE5v
ZGUqIHAgPSBwYXJlbnROb2RlKCk7IHAgJiYgIXAtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOyBw
ID0gcC0+cGFyZW50Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIHAgPSBwYXJlbnRPckhvc3RO
b2RlKCk7IHAgJiYgIXAtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOyBwID0gcC0+cGFyZW50T3JI
b3N0Tm9kZSgpKQogICAgICAgICAgICAgcC0+c2V0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAg
ICAgICAgIGlmIChkb2N1bWVudCgpLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAg
ICAgIGRvY3VtZW50KCktPnNjaGVkdWxlU3R5bGVSZWNhbGMoKTsKQEAgLTEzODgsNyArMTM4OCw3
IEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAKICAgICBBU1NFUlQoIXJl
bmRlcmVyKCkpOwogICAgIAotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgICAgCisg
ICAgTm9kZSogcGFyZW50ID0gcGFyZW50T3JIb3N0Tm9kZSgpOwogICAgIEFTU0VSVChwYXJlbnQp
OwogICAgIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQtPnJlbmRl
cmVyKCk7CkBAIC0xNTExLDYgKzE1MTEsMTMgQEAgYm9vbCBOb2RlOjppc0luU2hhZG93VHJlZSgp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitOb2RlKiBOb2RlOjpwYXJlbnRPckhvc3ROb2RlKCkK
K3sKKyAgICBpZiAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4g
cGFyZW50OworICAgIHJldHVybiBzaGFkb3dQYXJlbnROb2RlKCk7Cit9CisKIGJvb2wgTm9kZTo6
aXNCbG9ja0Zsb3coKSBjb25zdAogewogICAgIHJldHVybiByZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzQmxvY2tGbG93KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJD
b3JlL2RvbS9Ob2RlLmgKaW5kZXggZWMxNmYwNTljZjMyNTM2Mjg5YjBjNDFjYjVhN2U1YzMwNGVk
MTNlYi4uOTk2MDc1NDIxNDE0ODc2MWIxOTFlZTY0YzcyYTY0MTg5ZDc1MTgyMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMjEzLDYg
KzIxMyw4IEBAIHB1YmxpYzoKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICBO
b2RlKiBzaGFkb3dUcmVlUm9vdE5vZGUoKTsKICAgICBib29sIGlzSW5TaGFkb3dUcmVlKCk7Cisg
ICAgLy8gTm9kZSdzIHBhcmVudCBvciBzaGFkb3cgdHJlZSBob3N0LgorICAgIE5vZGUqIHBhcmVu
dE9ySG9zdE5vZGUoKTsKIAogICAgIC8vIFRoZSBub2RlJ3MgcGFyZW50IGZvciB0aGUgcHVycG9z
ZSBvZiBldmVudCBjYXB0dXJlIGFuZCBidWJibGluZy4KICAgICB2aXJ0dWFsIENvbnRhaW5lck5v
ZGUqIGV2ZW50UGFyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5jcHAg
Yi9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCA5MjhiOTc1OTZlNTY5OWI1NzlmOTNhYTg1M2U1
YmU1YmViMThmMDM4Li42Nzg0ZTkxZTJjNGM3YmZkNDc2OGNjNGQ0MWY3MGJjMjAyYzYyNDk3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UZXh0LmNw
cApAQCAtMjM3LDEwICsyMzcsMTEgQEAgYm9vbCBUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkKIAogUmVuZGVyT2JqZWN0KiBUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKKyAgICBOb2RlKiBwYXJlbnRPckhvc3Qg
PSBwYXJlbnRPckhvc3ROb2RlKCk7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAocGFyZW50Tm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKQorICAgIGlmIChwYXJlbnRPckhvc3QtPmlzU1ZHRWxlbWVudCgp
CiAjaWYgRU5BQkxFKFNWR19GT1JFSUdOX09CSkVDVCkKLSAgICAgICAgJiYgIXBhcmVudE5vZGUo
KS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykKKyAgICAgICAgJiYgIXBh
cmVudE9ySG9zdC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykKICNlbmRp
ZgogICAgICkKICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQo
dGhpcywgZGF0YUltcGwoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMzQ4OGNk
ZWRiMzE3Y2NiNTc1NTQ0OGJkYmRhMTZiNWZiNTAxMzQwNS4uMWEyZjVmYzNlNzhiMzk5YzFmNDEz
Yjg2YWJlZWVjNzg2ZWNkZWFiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNzk1
LDYgKzc5NSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKGNvbnN0IFN0
cmluZyYgdCkKICAgICAgICAgICAgIGJvb2wgd2FzQXR0YWNoZWQgPSBhdHRhY2hlZCgpOwogICAg
ICAgICAgICAgaWYgKHdhc0F0dGFjaGVkKQogICAgICAgICAgICAgICAgIGRldGFjaCgpOworICAg
ICAgICAgICAgcmVtb3ZlU2hhZG93U3VidHJlZSgpOwogCiAgICAgICAgICAgICBib29sIGRpZFN0
b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOwogICAgICAgICAg
ICAgYm9vbCB3YXNQYXNzd29yZEZpZWxkID0gaW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQ7CkBAIC04
MzAsNiArODMxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbnB1dFR5cGUoY29uc3Qg
U3RyaW5nJiB0KQogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGFsaWduLCBm
YWxzZSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1N1YnRyZWUo
KTsKICAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkgewogICAgICAgICAgICAgICAgIGF0dGFj
aCgpOwogICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRo
aXMpCkBAIC0yODUyLDYgKzI4NTQsNTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBG
cm9tUmVuZGVyZXIoaW50IG4pCiAgICAgfQogfQogCit0eXBlZGVmIEhhc2hNYXA8SFRNTElucHV0
RWxlbWVudCosIFJlZlB0cjxOb2RlPiA+IFNoYWRvd1Jvb3RNYXA7CitzdGF0aWMgU2hhZG93Um9v
dE1hcCogc2hhZG93Um9vdE1hcCgpCit7CisgICAgc3RhdGljIFNoYWRvd1Jvb3RNYXAqIHNfbWFw
ID0gMDsKKyAgICBpZiAoIXNfbWFwKQorICAgICAgICBzX21hcCA9IG5ldyBTaGFkb3dSb290TWFw
KCk7CisgICAgcmV0dXJuIHNfbWFwOworfQorCitOb2RlKiBIVE1MSW5wdXRFbGVtZW50OjpzaGFk
b3coKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMuCisgICAg
aWYgKGlucHV0VHlwZSgpICE9IFJBTkdFKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyBub3QgaWxsZWdhbCB0byBxdWVyeSBzaGFkb3co
KSBwcmlvcgorICAgIC8vIHRvIGNyZWF0aW9uIG9mIHRoZSBpbnB1dCB0eXBlLCBidXQgaXQncyBh
biBpbmRpY2F0b3IgdGhhdCBzb21ldGhpbmcKKyAgICAvLyBlbHNlIGhhZCBnb25lIHdyb25nLgor
ICAgIEFTU0VSVChzaGFkb3dSb290TWFwKCktPmNvbnRhaW5zKHRoaXMpKTsKKyAgICByZXR1cm4g
c2hhZG93Um9vdE1hcCgpLT5nZXQodGhpcykuZ2V0KCk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCB0byBv
dGhlciBpbnB1dCB0eXBlcy4KKyAgICBpZiAoaW5wdXRUeXBlKCkgIT0gUkFOR0UpCisgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQoIXNoYWRvd1Jvb3RNYXAoKS0+Y29udGFpbnModGhpcykpOwor
ICAgIFJlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IHRodW1iID0gU2xpZGVyVGh1bWJFbGVtZW50
OjpjcmVhdGUodGhpcyk7CisgICAgLy8gRklYTUU6IFdoZXJlIGRvZXMgdGhlIHNldHRpbmcgY3Vz
dG9tIHN0eWxlIHRoaW5nIGdvPworICAgIHNoYWRvd1Jvb3RNYXAoKS0+c2V0KHRoaXMsIHRodW1i
LmdldCgpKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVTaGFkb3dTdWJ0cmVl
KCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHRvIG90aGVyIGlucHV0IHR5cGVzLgorICAgIGlm
IChpbnB1dFR5cGUoKSAhPSBSQU5HRSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChzaGFk
b3dSb290TWFwKCktPmNvbnRhaW5zKHRoaXMpKTsKKyAgICBSZWZQdHI8Tm9kZT4gdGh1bWIgPSBz
aGFkb3dSb290TWFwKCktPnRha2UodGhpcyk7CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzZWVt
cyBnZW5lcmljLiBDbGVhbiB0aGlzIHVwIHNvbWVob3cuCisgICAgZG9jdW1lbnQoKS0+cmVtb3Zl
Rm9jdXNlZE5vZGVPZlN1YnRyZWUodGh1bWIuZ2V0KCkpOworCisgICAgaWYgKHRodW1iLT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHRodW1iLT5yZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgZWxz
ZQorICAgICAgICB0aHVtYi0+cmVtb3ZlZEZyb21UcmVlKHRydWUpOworfQorCiAjaWYgRU5BQkxF
KFdDU1MpCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0cmluZyYg
bWFzaykKIHsKQEAgLTI4OTcsNCArMjk0NywxMTkgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpp
c1NwZWVjaEVuYWJsZWQoKSBjb25zdAogfQogI2VuZGlmCiAKKy8vIEZJWE1FOiBNb3ZlIHRvIGl0
cyBvd24gY2xhc3NlcworUmVuZGVyU2xpZGVyVGh1bWI6OlJlbmRlclNsaWRlclRodW1iKE5vZGUq
IG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworfQorCit2b2lkIFJlbmRlclNsaWRl
clRodW1iOjpsYXlvdXQoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZmlndXJlIG91dCBh
IHdheSB0byBub3QgaGFyZC1jb2RlIHRoaXMuCisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gcGFyZW50KCktPnN0eWxlKCk7CisgICAgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgICAgICBzdHlsZSgpLT5zZXRBcHBlYXJhbmNlKFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KTsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQorICAgICAgICBzdHlsZSgpLT5zZXRBcHBl
YXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOworICAgIGVsc2UgaWYgKHBhcmVudFN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0KQorICAgICAgICBzdHlsZSgpLT5z
ZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKKyAgICBlbHNlIGlmIChwYXJlbnRT
dHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKKyAgICAgICAgc3R5
bGUoKS0+c2V0QXBwZWFyYW5jZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisKKyAgICBp
ZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBwYXNzIHRoZSBzdHlsZSwgbm90IHRoZSByZW5kZXJlciwgdG8gdGhlIHRoZW1lLgorICAg
ICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUodGhpcyk7CisgICAgfQorICAgIFJl
bmRlckJsb2NrOjpsYXlvdXQoKTsKK30KKworaW5saW5lIFNsaWRlclRodW1iRWxlbWVudDo6U2xp
ZGVyVGh1bWJFbGVtZW50KEVsZW1lbnQqIHNoYWRvd0hvc3QpCisgICAgOiBIVE1MRGl2RWxlbWVu
dChkaXZUYWcsIHNoYWRvd0hvc3QtPmRvY3VtZW50KCkpCisgICAgLCBtX3NoYWRvd0hvc3Qoc2hh
ZG93SG9zdCkKKyAgICAsIG1faW5EcmFnTW9kZShmYWxzZSkKK3sKK30KKworU2xpZGVyVGh1bWJF
bGVtZW50Ojp+U2xpZGVyVGh1bWJFbGVtZW50KCkKK3sKK30KKworaW5saW5lIFBhc3NSZWZQdHI8
U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShFbGVtZW50KiBz
aGFkb3dIb3N0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2xpZGVyVGh1bWJFbGVtZW50
KHNoYWRvd0hvc3QpKTsKK30KKworUmVuZGVyT2JqZWN0KiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXJUaHVtYih0aGlzKTsKK30KKwordm9pZCBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIEhUTUxEaXZFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQp
OworICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7
CisKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBp
c0xlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkgJiYgcmVuZGVy
ZXIoKSkgeworICAgICAgICAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRl
cihyZW5kZXJlcigpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBpZiAoc2xpZGVyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHNsaWRlci0+bW91c2VFdmVudElzSW5UaHVtYihtb3VzZUV2ZW50KSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWxlY3RlZCB0aGUgdGh1bWIsIHdlIHdhbnQg
dGhlIGN1cnNvciB0byBhbHdheXMgc3RheSBhdAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
c2FtZSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgdGh1bWIuCisgICAgICAgICAgICAgICAgICAg
IG1fb2Zmc2V0VG9UaHVtYiA9IHNsaWRlci0+bW91c2VFdmVudE9mZnNldFRvVGh1bWIobW91c2VF
dmVudCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIG91dHNpZGUgdGhlIHRodW1iLCBtb3ZlIHRoZSB0aHVtYiB0byB0aGUgcG9pbnQgd2Vy
ZQorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjbGlja2VkLiBXZSdsbCBiZSBleGFjdGx5IGF0
IHRoZSBjZW50ZXIgb2YgdGhlIHRodW1iLgorICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRv
VGh1bWIuc2V0WCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vZmZzZXRUb1RodW1iLnNldFko
MCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAgICAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChtX2luRHJh
Z01vZGUpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpKQorICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5n
TW91c2VFdmVudHNOb2RlKDApOyAgICAgIAorICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CisgICAgICAgIGlm
IChtX2luRHJhZ01vZGUgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5wYXJlbnQoKSkgewor
ICAgICAgICAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJl
cigpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBpZiAoc2xpZGVyKSB7CisgICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBjdXJQb2ludCA9IHNsaWRlci0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZl
bnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgIElu
dFBvaW50IGV2ZW50T2Zmc2V0KGN1clBvaW50LngoKSArIG1fb2Zmc2V0VG9UaHVtYi54KCksIGN1
clBvaW50LnkoKSArIG1fb2Zmc2V0VG9UaHVtYi55KCkpOworICAgICAgICAgICAgICAgIHNsaWRl
ci0+c2V0VmFsdWVGb3JQb3NpdGlvbihzbGlkZXItPnBvc2l0aW9uRm9yT2Zmc2V0KGV2ZW50T2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lk
IFNsaWRlclRodW1iRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgdW5uZWNlc3NhcnkuCisgICAgaWYgKG1faW5EcmFnTW9kZSkgeworICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAorICAg
IH0KKyAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCAxOGNiYWE0YTYxNjA4MDEwMGQxODg2MGM3YzliMGQz
MTJjZDkwMjU1Li40NzkyNjQyOTQ3OGFlOTM3OTNkNWYxMTgyODJkODc0ZTI0NTFjZjZhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTMwNiw3ICszMDYsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRl
Q2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIAorCiAgICAgdm9pZCBoYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudChFdmVudCopOwogICAgIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBj
cmVhdGVUZW1wb3JhcnlGb3JtRm9ySXNJbmRleCgpOwogICAgIC8vIEhlbHBlciBmb3IgZ2V0QWxs
b3dlZFZhbHVlU3RlcCgpOwpAQCAtMzMwLDYgKzMzMCwxMSBAQCBwcml2YXRlOgogICAgIC8vIERB
VEVUSU1FTE9DQUwsIE1PTlRILCBUSU1FLCBhbmQgV0VFSy4KICAgICBTdHJpbmcgc2VyaWFsaXpl
Rm9yRGF0ZVRpbWVUeXBlcyhkb3VibGUpIGNvbnN0OwogCisgICAgLy8gQ3JlYXRlIChhbiByZW1v
dmUpIHRoZSBzaGFkb3cgc3VidHJlZSBmb3IgZWxlbWVudHMgdGhhdCByZXF1aXJlIGl0LgorICAg
IHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOworICAgIHZvaWQgcmVtb3ZlU2hhZG93U3VidHJl
ZSgpOworICAgIHZpcnR1YWwgTm9kZSogc2hhZG93KCk7CisKICNpZiBFTkFCTEUoREFUQUxJU1Qp
CiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QoKSBjb25zdDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAppbmRleCBkMGFkYjRlNDdhMTQyOTg4MzRjMzQzZGVlYjIwOTNhY2I0ZDE4
MWVhLi5lMmE1ODFkYjlmYmMxNzRjZmEzZmMwOTZiY2YxZWNkZDU0MTUzODI0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcApAQCAtMTc2OCw4ICsxNzY4LDYgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0
ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8K
ICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgdGV4dCBub2RlLCBkaXNwYXRjaCBv
biB0aGUgcGFyZW50IG5vZGUgLSByZGFyOi8vNDE5NjY0NgogICAgICAgICBpZiAocmVzdWx0ICYm
IHJlc3VsdC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5wYXJl
bnROb2RlKCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1
bHQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIH0KICAgICBtX25vZGVVbmRlck1vdXNlID0g
cmVzdWx0OwogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRl
eCAyN2VhYmNkZjBkNTVmZGE4NTgzMjMyMTJiNzVlZTRkMWEyNjQ0OWFjLi44MmM0ODk2MjQ4ZWU4
Y2QwZTdkNzc1NWRmMGRjMjczZmIwYWVmMDdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKQEAgLTIzNjgsNiArMjM2OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck9i
amVjdDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIFJlCiAgICAgfQog
CiAgICAgTm9kZSogbiA9IG5vZGUoKTsKKyAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgd2hldGhl
ciB0aGlzIHNob3VsZCBiZSBuLT5wYXJlbnRPckhvc3ROb2RlKCkKICAgICB3aGlsZSAobiAmJiAh
bi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgIGlm
ICghbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCmluZGV4IGRiMTRlODU0ZTUwNDU5Mjk2
ZDBhMzhmZTU2Y2E4ZTNmNjcyODM0NDAuLjMxMTFlMmU4NDQzNTExYzE1ZmVkZjZkOWIxNzAxOThi
MWFhODg2ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtNTIsOTggKzUyLDYg
QEAgc3RhdGljIGRvdWJsZSBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
KQogICAgIHJldHVybiByYW5nZS5wcm9wb3J0aW9uRnJvbVZhbHVlKHJhbmdlLnZhbHVlRnJvbUVs
ZW1lbnQoZWxlbWVudCkpOwogfQogCi1jbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQgOiBwdWJsaWMg
U2hhZG93QmxvY2tFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlk
ZXJUaHVtYkVsZW1lbnQ+IGNyZWF0ZShOb2RlKiBzaGFkb3dQYXJlbnQpOwotCi0gICAgYm9vbCBp
bkRyYWdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbkRyYWdNb2RlOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKLQotcHJpdmF0ZTogICAgICAgIAotICAgIFNsaWRlclRodW1iRWxlbWVudChOb2RlKiBz
aGFkb3dQYXJlbnQpOwotCi0gICAgRmxvYXRQb2ludCBtX29mZnNldFRvVGh1bWI7Ci0gICAgYm9v
bCBtX2luRHJhZ01vZGU7Ci19OwotCi1pbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50OjpTbGlkZXJU
aHVtYkVsZW1lbnQoTm9kZSogc2hhZG93UGFyZW50KQotICAgIDogU2hhZG93QmxvY2tFbGVtZW50
KHNoYWRvd1BhcmVudCkKLSAgICAsIG1faW5EcmFnTW9kZShmYWxzZSkKLXsKLX0KLQotaW5saW5l
IFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0
ZShOb2RlKiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJU
aHVtYkVsZW1lbnQoc2hhZG93UGFyZW50KSk7Ci19Ci0KLXZvaWQgU2xpZGVyVGh1bWJFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50LT5p
c01vdXNlRXZlbnQoKSkgewotICAgICAgICBTaGFkb3dCbG9ja0VsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTW91c2VFdmVu
dCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgYm9v
bCBpc0xlZnRCdXR0b24gPSBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uOwotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKLQotICAgIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzTGVmdEJ1dHRv
bikgewotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiByZW5kZXJlcigpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRlcmVy
KCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmIChzbGlkZXIpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc2xpZGVyLT5tb3VzZUV2ZW50SXNJblRodW1iKG1vdXNlRXZlbnQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHNlbGVjdGVkIHRoZSB0aHVtYiwgd2Ugd2FudCB0aGUgY3Vyc29y
IHRvIGFsd2F5cyBzdGF5IGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIHBvc2l0
aW9uIHJlbGF0aXZlIHRvIHRoZSB0aHVtYi4KLSAgICAgICAgICAgICAgICAgICAgbV9vZmZzZXRU
b1RodW1iID0gc2xpZGVyLT5tb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYihtb3VzZUV2ZW50KTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgb3V0
c2lkZSB0aGUgdGh1bWIsIG1vdmUgdGhlIHRodW1iIHRvIHRoZSBwb2ludCB3ZXJlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHdlIGNsaWNrZWQuIFdlJ2xsIGJlIGV4YWN0bHkgYXQgdGhlIGNlbnRl
ciBvZiB0aGUgdGh1bWIuCi0gICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9UaHVtYi5zZXRY
KDApOwotICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRvVGh1bWIuc2V0WSgwKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtX2luRHJhZ01vZGUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0
dXJpbmdNb3VzZUV2ZW50c05vZGUoc2hhZG93UGFyZW50KCkpOwotICAgICAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7Ci0gICAgICAgIGlmIChtX2luRHJh
Z01vZGUpIHsKLSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5n
TW91c2VFdmVudHNOb2RlKDApOyAgICAgIAotICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gZmFs
c2U7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW1vdmVFdmVudCkgewotICAgICAgICBpZiAobV9pbkRyYWdNb2RlICYmIHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNsaWRl
ciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKS0+cGFyZW50KCkpOwotICAgICAg
ICAgICAgaWYgKHNsaWRlcikgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3VyUG9pbnQg
PSBzbGlkZXItPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCks
IGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBldmVudE9mZnNldChjdXJQ
b2ludC54KCkgKyBtX29mZnNldFRvVGh1bWIueCgpLCBjdXJQb2ludC55KCkgKyBtX29mZnNldFRv
VGh1bWIueSgpKTsKLSAgICAgICAgICAgICAgICBzbGlkZXItPnNldFZhbHVlRm9yUG9zaXRpb24o
c2xpZGVyLT5wb3NpdGlvbkZvck9mZnNldChldmVudE9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFNoYWRvd0Jsb2NrRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgU2xpZGVyVGh1bWJFbGVtZW50
OjpkZXRhY2goKQotewotICAgIGlmIChtX2luRHJhZ01vZGUpIHsKLSAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAKLSAgICB9Ci0g
ICAgU2hhZG93QmxvY2tFbGVtZW50OjpkZXRhY2goKTsKLX0KLQogUmVuZGVyU2xpZGVyOjpSZW5k
ZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICA6IFJlbmRlckJsb2NrKGVs
ZW1lbnQpCiB7CkBAIC0xNTEsOCArNTksNiBAQCBSZW5kZXJTbGlkZXI6OlJlbmRlclNsaWRlcihI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogCiBSZW5kZXJTbGlkZXI6On5SZW5kZXJTbGlkZXIo
KQogewotICAgIGlmIChtX3RodW1iKQotICAgICAgICBtX3RodW1iLT5kZXRhY2goKTsKIH0KIAog
aW50IFJlbmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdApAQCAt
MTkzLDUwICs5OSwyMSBAQCB2b2lkIFJlbmRlclNsaWRlcjo6Y2FsY1ByZWZXaWR0aHMoKQogdm9p
ZCBSZW5kZXJTbGlkZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAgIGlmIChtX3RodW1iKQotICAgICAgICBtX3RodW1i
LT5yZW5kZXJlcigpLT5zZXRTdHlsZShjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkpKTsKLQogICAg
IHNldFJlcGxhY2VkKGlzSW5saW5lKCkpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUq
IHBzZXVkb1N0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0xJREVSX1RIVU1CKTsKLSAgICBp
ZiAocHNldWRvU3R5bGUpCi0gICAgICAgIC8vIFdlIG1heSBiZSBzaGFyaW5nIHN0eWxlIHdpdGgg
YW5vdGhlciBzbGlkZXIsIGJ1dCB3ZSBtdXN0IG5vdCBzaGFyZSB0aGUgdGh1bWIgc3R5bGUuCi0g
ICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotCi0gICAgaWYgKHBhcmVu
dFN0eWxlKQotICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwotCi0gICAg
c3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotCi0gICAgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZS0+c2V0QXBwZWFyYW5j
ZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKLSAgICAgICAgc3R5bGUtPnNldEFw
cGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50
U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlLT5z
ZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBlbHNlIGlmIChwYXJlbnRT
dHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgc3R5
bGUtPnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotCi0gICAgcmV0
dXJuIHN0eWxlLnJlbGVhc2UoKTsKLX0KIAorLy8gRklYTUU6IENsZWFuIHRoaXMgdXAhIE9ubHkg
cG9zaXRpb24gb2YgdGhlIHRodW1iIG5lZWRzIHRvIGJlIHVwZGF0ZWQuCiBJbnRSZWN0IFJlbmRl
clNsaWRlcjo6dGh1bWJSZWN0KCkKIHsKLSAgICBpZiAoIW1fdGh1bWIpCisgICAgaWYgKCF0aHVt
YigpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgSW50UmVjdCB0aHVtYlJlY3Q7
Ci0gICAgUmVuZGVyQm94KiB0aHVtYiA9IHRvUmVuZGVyQm94KG1fdGh1bWItPnJlbmRlcmVyKCkp
OworICAgIFJlbmRlckJveCogdGh1bWJSZW5kZXJCb3ggPSB0b1JlbmRlckJveCh0aHVtYigpLT5y
ZW5kZXJlcigpKTsKIAotICAgIHRodW1iUmVjdC5zZXRXaWR0aCh0aHVtYi0+c3R5bGUoKS0+d2lk
dGgoKS5jYWxjTWluVmFsdWUoY29udGVudFdpZHRoKCkpKTsKLSAgICB0aHVtYlJlY3Quc2V0SGVp
Z2h0KHRodW1iLT5zdHlsZSgpLT5oZWlnaHQoKS5jYWxjTWluVmFsdWUoY29udGVudEhlaWdodCgp
KSk7CisgICAgdGh1bWJSZWN0LnNldFdpZHRoKHRodW1iUmVuZGVyQm94LT5zdHlsZSgpLT53aWR0
aCgpLmNhbGNNaW5WYWx1ZShjb250ZW50V2lkdGgoKSkpOworICAgIHRodW1iUmVjdC5zZXRIZWln
aHQodGh1bWJSZW5kZXJCb3gtPnN0eWxlKCktPmhlaWdodCgpLmNhbGNNaW5WYWx1ZShjb250ZW50
SGVpZ2h0KCkpKTsKIAogICAgIGRvdWJsZSBmcmFjdGlvbiA9IHNsaWRlclBvc2l0aW9uKHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpKTsKICAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0ID0gY29udGVudEJveFJlY3QoKTsKQEAgLTI1NCw5MCArMTMxLDQzIEBAIEludFJlY3QgUmVu
ZGVyU2xpZGVyOjp0aHVtYlJlY3QoKQogdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCiB7CiAg
ICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworICAgCisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgp
OwogCi0gICAgUmVuZGVyQm94KiB0aHVtYiA9IG1fdGh1bWIgPyB0b1JlbmRlckJveChtX3RodW1i
LT5yZW5kZXJlcigpKSA6IDA7Ci0KLSAgICBJbnRTaXplIGJhc2VTaXplKGJvcmRlckFuZFBhZGRp
bmdXaWR0aCgpLCBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOwotCi0gICAgaWYgKHRodW1iKSB7
Ci0gICAgICAgIC8vIEFsbG93IHRoZSB0aGVtZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIHRodW1i
LgotICAgICAgICBpZiAodGh1bWItPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBhc3MgdGhlIHN0eWxlLCBub3QgdGhlIHJlbmRl
cmVyLCB0byB0aGUgdGhlbWUuCi0gICAgICAgICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVt
YlNpemUodGh1bWIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVNpemUuZXhwYW5kKHRodW1i
LT5zdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5WYWx1ZSgwKSwgdGh1bWItPnN0eWxlKCktPmhlaWdo
dCgpLmNhbGNNaW5WYWx1ZSgwKSk7Ci0gICAgfQotCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFp
bnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwotCi0gICAgSW50U2l6
ZSBvbGRTaXplID0gc2l6ZSgpOwotCi0gICAgc2V0U2l6ZShiYXNlU2l6ZSk7Ci0gICAgY2FsY1dp
ZHRoKCk7Ci0gICAgY2FsY0hlaWdodCgpOwotCi0gICAgaWYgKHRodW1iKSB7Ci0gICAgICAgIGlm
IChvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgICAgIHRodW1iLT5zZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUsIGZhbHNlKTsKLQotICAgICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQ
dXNoZXIodmlldygpLCB0aGlzLCBzaXplKCkpOwotCi0gICAgICAgIEludFJlY3Qgb2xkVGh1bWJS
ZWN0ID0gdGh1bWItPmZyYW1lUmVjdCgpOwotCi0gICAgICAgIHRodW1iLT5sYXlvdXRJZk5lZWRl
ZCgpOwotCi0gICAgICAgIEludFJlY3QgcmVjdCA9IHRodW1iUmVjdCgpOwotICAgICAgICB0aHVt
Yi0+c2V0RnJhbWVSZWN0KHJlY3QpOwotICAgICAgICBpZiAodGh1bWItPmNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpKQotICAgICAgICAgICAgdGh1bWItPnJlcGFpbnREdXJpbmdMYXlvdXRJ
Zk1vdmVkKG9sZFRodW1iUmVjdCk7Ci0KLSAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAg
ICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkKHRodW1iKTsKLSAgICB9Ci0KLSAgICByZXBhaW50ZXIu
cmVwYWludEFmdGVyTGF5b3V0KCk7ICAgIAotCi0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwor
ICAgIC8vIEZJWE1FOiBXZSdyZSBraW5kIG9mIGNoZWF0aW5nIGhlcmUuIEJlY2F1c2UgdGhlIHNs
aWRlciBpcyBhbHdheXMgcmVwYWludGVkIGZ1bGx5LAorICAgIC8vIHdlIGRvbid0IG5lZWQgdG8g
dXBkYXRlIHJlcGFpbnQgcmVjdHMgZm9yIHRoZSB0aHVtYi4gSG93ZXZlciwgaXQncyBub3QgaWRl
YWwuCisgICAgaWYgKFJlbmRlckJveCogdGh1bWJSZW5kZXJCb3ggPSB0aHVtYigpID8gdG9SZW5k
ZXJCb3godGh1bWIoKS0+cmVuZGVyZXIoKSkgOiAwKQorICAgICAgICB0aHVtYlJlbmRlckJveC0+
c2V0RnJhbWVSZWN0KHRodW1iUmVjdCgpKTsKIH0KIAorLy8gRklYTUU6IFRyeSB0byBmaWd1cmUg
b3V0IHdoZXRoZXIgdGhpcyBjb3VsZCBiZSBlbGltaW5hdGVkLgogdm9pZCBSZW5kZXJTbGlkZXI6
OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICAvLyBMYXlvdXQgd2lsbCB0YWtlIGNhcmUgb2Yg
dGhlIHRodW1iJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uCi0gICAgaWYgKCFtX3RodW1iKSB7Ci0gICAg
ICAgIG1fdGh1bWIgPSBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShub2RlKCkpOwotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxl
KCkpOwotICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJl
cihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdldCgpKSk7Ci0gICAgICAgIG1fdGh1bWItPnJl
bmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgbV90aHVt
Yi0+c2V0QXR0YWNoZWQoKTsKLSAgICAgICAgbV90aHVtYi0+c2V0SW5Eb2N1bWVudCgpOwotICAg
ICAgICBhZGRDaGlsZChtX3RodW1iLT5yZW5kZXJlcigpKTsKLSAgICB9CiAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CiB9CiAKIGJvb2wgUmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50SXNJblRodW1i
KE1vdXNlRXZlbnQqIGV2dCkKIHsKLSAgICBpZiAoIW1fdGh1bWIgfHwgIW1fdGh1bWItPnJlbmRl
cmVyKCkpCisgICAgaWYgKCF0aHVtYigpIHx8ICF0aHVtYigpLT5yZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaWYgKHN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkgewotICAgICAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQgKnNsaWRlclRodW1iID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Kj4o
bV90aHVtYi0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KiBzbGlkZXJUaHVtYiA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbElucHV0RWxlbWVu
dCo+KHRodW1iKCktPnJlbmRlcmVyKCktPm5vZGUoKSk7CiAgICAgICAgIHJldHVybiBzbGlkZXJU
aHVtYi0+aGl0VGVzdChldnQtPmFic29sdXRlTG9jYXRpb24oKSk7CiAgICAgfQogI2VuZGlmCiAK
LSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJCb3goKS0+YWJzb2x1
dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgSW50
UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCk7
CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gdGh1bWIoKS0+cmVuZGVyQm94KCktPmFic29s
dXRlVG9Mb2NhbChldnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOworICAgIElu
dFJlY3QgdGh1bWJCb3VuZHMgPSB0aHVtYigpLT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgp
OwogICAgIHJldHVybiB0aHVtYkJvdW5kcy5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9jYWxQ
b2ludCkpOwogfQogCiBGbG9hdFBvaW50IFJlbmRlclNsaWRlcjo6bW91c2VFdmVudE9mZnNldFRv
VGh1bWIoTW91c2VFdmVudCogZXZ0KQogewotICAgIEFTU0VSVChtX3RodW1iICYmIG1fdGh1bWIt
PnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fdGh1bWItPnJlbmRl
ckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0
cnVlKTsKLSAgICBJbnRSZWN0IHRodW1iQm91bmRzID0gbV90aHVtYi0+cmVuZGVyQm94KCktPmJv
cmRlckJveFJlY3QoKTsKKyAgICBBU1NFUlQodGh1bWIoKSAmJiB0aHVtYigpLT5yZW5kZXJlcigp
KTsKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSB0aHVtYigpLT5yZW5kZXJCb3goKS0+YWJz
b2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CisgICAg
SW50UmVjdCB0aHVtYkJvdW5kcyA9IHRodW1iKCktPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0
KCk7CiAgICAgRmxvYXRQb2ludCBvZmZzZXQ7CiAgICAgb2Zmc2V0LnNldFgodGh1bWJCb3VuZHMu
eCgpICsgdGh1bWJCb3VuZHMud2lkdGgoKSAvIDIgLSBsb2NhbFBvaW50LngoKSk7CiAgICAgb2Zm
c2V0LnNldFkodGh1bWJCb3VuZHMueSgpICsgdGh1bWJCb3VuZHMuaGVpZ2h0KCkgLyAyIC0gbG9j
YWxQb2ludC55KCkpOwpAQCAtMzQ2LDcgKzE3Niw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyU2xpZGVy
Ojptb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYihNb3VzZUV2ZW50KiBldnQpCiAKIHZvaWQgUmVuZGVy
U2xpZGVyOjpzZXRWYWx1ZUZvclBvc2l0aW9uKGludCBwb3NpdGlvbikKIHsKLSAgICBpZiAoIW1f
dGh1bWIgfHwgIW1fdGh1bWItPnJlbmRlcmVyKCkpCisgICAgaWYgKCF0aHVtYigpIHx8ICF0aHVt
YigpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CkBAIC0z
NzEsMzYgKzIwMSwzNiBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c2V0VmFsdWVGb3JQb3NpdGlvbihp
bnQgcG9zaXRpb24pCiAKIGludCBSZW5kZXJTbGlkZXI6OnBvc2l0aW9uRm9yT2Zmc2V0KGNvbnN0
IEludFBvaW50JiBwKQogewotICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+cmVuZGVyZXIo
KSkKKyAgICBpZiAoIXRodW1iKCkgfHwgIXRodW1iKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaW50IHBvc2l0aW9uOwogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRp
YVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHBvc2l0aW9uID0gcC55KCkgLSBtX3RodW1iLT5y
ZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBwb3NpdGlvbiA9IHAueSgpIC0gdGh1
bWIoKS0+cmVuZGVyQm94KCktPmhlaWdodCgpIC8gMjsKICAgICBlbHNlCi0gICAgICAgIHBvc2l0
aW9uID0gcC54KCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7CisgICAgICAg
IHBvc2l0aW9uID0gcC54KCkgLSB0aHVtYigpLT5yZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7CiAg
ICAgCiAgICAgcmV0dXJuIG1heCgwLCBtaW4ocG9zaXRpb24sIHRyYWNrU2l6ZSgpKSk7CiB9CiAK
IGludCBSZW5kZXJTbGlkZXI6OmN1cnJlbnRQb3NpdGlvbigpCiB7Ci0gICAgQVNTRVJUKG1fdGh1
bWIpOwotICAgIEFTU0VSVChtX3RodW1iLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQodGh1bWIo
KSk7CisgICAgQVNTRVJUKHRodW1iKCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKHN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94
KG1fdGh1bWItPnJlbmRlcmVyKCkpLT55KCkgLSBjb250ZW50Qm94UmVjdCgpLnkoKTsKLSAgICBy
ZXR1cm4gdG9SZW5kZXJCb3gobV90aHVtYi0+cmVuZGVyZXIoKSktPngoKSAtIGNvbnRlbnRCb3hS
ZWN0KCkueCgpOworICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3godGh1bWIoKS0+cmVuZGVyZXIo
KSktPnkoKSAtIGNvbnRlbnRCb3hSZWN0KCkueSgpOworICAgIHJldHVybiB0b1JlbmRlckJveCh0
aHVtYigpLT5yZW5kZXJlcigpKS0+eCgpIC0gY29udGVudEJveFJlY3QoKS54KCk7CiB9CiAKIGlu
dCBSZW5kZXJTbGlkZXI6OnRyYWNrU2l6ZSgpCiB7Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAg
IEFTU0VSVChtX3RodW1iLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQodGh1bWIoKSk7CisgICAg
QVNTRVJUKHRodW1iKCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKHN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQoKSAtIG1f
dGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKLSAgICByZXR1cm4gY29udGVudFdpZHRoKCkg
LSBtX3RodW1iLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRI
ZWlnaHQoKSAtIHRodW1iKCktPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gY29u
dGVudFdpZHRoKCkgLSB0aHVtYigpLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKIH0KIAogdm9pZCBS
ZW5kZXJTbGlkZXI6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCkBAIC00MTEsMTYgKzI0MSwy
NyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKICAgICAg
ICAgICAgIGlmICghbW91c2VFdmVudElzSW5UaHVtYihtb3VzZUV2ZW50KSkgewogICAgICAgICAg
ICAgICAgIEludFBvaW50IGV2ZW50T2Zmc2V0ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9M
b2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7CiAgICAg
ICAgICAgICAgICAgc2V0VmFsdWVGb3JQb3NpdGlvbihwb3NpdGlvbkZvck9mZnNldChldmVudE9m
ZnNldCkpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGVu
YWJsZSB0aGlzIG9wZXJhdGlvbjogY2xpY2sgb24gc2xpZGVyIChub3QgdGh1bWIpLCBkcmFnIHRo
dW1iIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHRlcm1pbmF0ZSEgRVhURVJNSU5BVEUh
CisgICAgICAgICAgICAgICAgdGh1bWIoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3RodW1iLT5kZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKIH0KIAotYm9vbCBSZW5kZXJTbGlkZXI6OmluRHJhZ01vZGUoKSBj
b25zdAorYm9vbCBSZW5kZXJTbGlkZXI6OmluRHJhZ01vZGUoKQogewotICAgIHJldHVybiBtX3Ro
dW1iICYmIG1fdGh1bWItPmluRHJhZ01vZGUoKTsKKyAgICByZXR1cm4gdGh1bWIoKSAmJiB0aHVt
YigpLT5pbkRyYWdNb2RlKCk7Cit9CisKK1NsaWRlclRodW1iRWxlbWVudCogUmVuZGVyU2xpZGVy
Ojp0aHVtYigpCit7CisgICAgSFRNTEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihub2RlKCkpOworICAgIE5vZGUqIHNoYWRvdyA9IGlucHV0LT5zaGFkb3coKTsKKyAg
ICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNsaWRlclRodW1iRWxlbWVudCo+KHNoYWRvdyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKaW5kZXggZmM4Y2UyNDU1YTNmMGY2YmQ4NzY5MWU5
YTY0YzJmZDc5MzJhNDhjZS4uMjFkODQ2ZTcyMGViYjEyMjg5YjE2NjNjNjNhZTVhYmYzNjJlMTA2
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKQEAgLTIxLDIxICsyMSw1MSBAQAogI2lmbmRl
ZiBSZW5kZXJTbGlkZXJfaAogI2RlZmluZSBSZW5kZXJTbGlkZXJfaAogCisjaW5jbHVkZSAiSFRN
TERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogICAgIGNsYXNzIE1vdXNlRXZl
bnQ7Ci0gICAgY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50OwotICAgIAorCisvLyBGSVhNRTogTU9W
RSBUTyBTRVBBUkFURSBDTEFTUyEhIQorY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIgOiBwdWJsaWMg
UmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlclNsaWRlclRodW1iKE5vZGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Cit9OworCitjbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQg
OiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNsaWRlclRodW1iRWxlbWVudD4gY3JlYXRlKEVsZW1lbnQqIHNoYWRvd0hvc3QpOworICAgIHZp
cnR1YWwgflNsaWRlclRodW1iRWxlbWVudCgpOworCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKworICAgIGJvb2wg
aW5EcmFnTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5EcmFnTW9kZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7CisgICAgdmlydHVhbCBQc2V1ZG9JZCBzdHlsZVBzZXVkb0lkKCkgY29uc3QgeyByZXR1
cm4gU0xJREVSX1RIVU1COyB9CisKK3ByaXZhdGU6ICAgICAgICAKKyAgICBTbGlkZXJUaHVtYkVs
ZW1lbnQoRWxlbWVudCogc2hhZG93SG9zdCk7CisgICAgdmlydHVhbCBOb2RlKiBzaGFkb3dQYXJl
bnROb2RlKCkgeyByZXR1cm4gbV9zaGFkb3dIb3N0OyB9CisKKyAgICBGbG9hdFBvaW50IG1fb2Zm
c2V0VG9UaHVtYjsKKyAgICBFbGVtZW50KiBtX3NoYWRvd0hvc3Q7CisgICAgYm9vbCBtX2luRHJh
Z01vZGU7Cit9OworCisKICAgICBjbGFzcyBSZW5kZXJTbGlkZXIgOiBwdWJsaWMgUmVuZGVyQmxv
Y2sgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVyU2xpZGVyKEhUTUxJbnB1dEVsZW1lbnQq
KTsKICAgICAgICAgdmlydHVhbCB+UmVuZGVyU2xpZGVyKCk7CiAKICAgICAgICAgdm9pZCBmb3J3
YXJkRXZlbnQoRXZlbnQqKTsKLSAgICAgICAgYm9vbCBpbkRyYWdNb2RlKCkgY29uc3Q7CisgICAg
ICAgIGJvb2wgaW5EcmFnTW9kZSgpOwogICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCgpOwogCiAg
ICAgcHJpdmF0ZToKQEAgLTY0LDkgKzk0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIGludCB0cmFja1NpemUoKTsKIAotICAgICAgICBSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50
PiBtX3RodW1iOwotCiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQ7Cisg
ICAgICAgIC8vIEZJWE1FOiBCcmVhayB0aGlzIGRlcGVuZGVuY3kuCisgICAgICAgIFNsaWRlclRo
dW1iRWxlbWVudCogdGh1bWIoKTsKICAgICB9OwogCiAgICAgaW5saW5lIFJlbmRlclNsaWRlciog
dG9SZW5kZXJTbGlkZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9TaGFkb3dFbGVtZW50LmggYi9XZWJDb3JlL3JlbmRlcmluZy9TaGFkb3dFbGVt
ZW50LmgKaW5kZXggYjhhYWNmZDkwMjg1OGMyY2VjZDMyMjE2MDRkYjM5MWRkM2MwZWJlYS4uOTY5
YjJiNTVjNjRiYjlmNTNhOTRiMGVmODYyZDUyNmJhYmQ0OGJlOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvU2hhZG93RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1NoYWRv
d0VsZW1lbnQuaApAQCAtNDIsNiArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICwgbV9zaGFk
b3dQYXJlbnQoc2hhZG93UGFyZW50KQogICAgIHsKICAgICB9CisgICAgdmlydHVhbCB+U2hhZG93
RWxlbWVudCgpIHsgfQogCiAgICAgTm9kZSogc2hhZG93UGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9zaGFkb3dQYXJlbnQ7IH0KIApAQCAtNzAsNiArNzEsNyBAQCBwcml2YXRlOgogY2xhc3MgU2hh
ZG93SW5wdXRFbGVtZW50IDogcHVibGljIFNoYWRvd0VsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4g
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYWRvd0lucHV0RWxlbWVudD4gY3Jl
YXRlKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5TaGFkb3dJbnB1dEVsZW1lbnQoKSB7IH0KIHByb3Rl
Y3RlZDoKICAgICBTaGFkb3dJbnB1dEVsZW1lbnQoTm9kZSopOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66508</attachid>
            <date>2010-09-03 09:19:47 -0700</date>
            <delta_ts>2010-09-10 16:36:57 -0700</delta_ts>
            <desc>WIP: A bit more progress, still not done.</desc>
            <filename>bug-44907-20100903091946.patch</filename>
            <type>text/plain</type>
            <size>41468</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzQzYjMzZDRiMGRkMDU2OTU4NzAzMDM5ZjYyZDg1OGNiNmRmZWU0ZS4uY2JlYzE3OTliOTNkMjgz
MzA0Y2E2OTYxMTBmNWEyMzUxMmU2YjMzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMC0wOS0wMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIGlucHV0W3R5cGU9cmFuZ2Vd
IHRvIHVzZSBhIG1vcmUgbmF0dXJhbCBzaGFkb3cgRE9NIG1vZGVsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MDcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWI6OmVs
ZW1lbnRSZWN0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbHZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAg
ICogY3NzL2h0bWwuY3NzOgorICAgICAgICAoaW5wdXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1z
bGlkZXItdGh1bWIpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeUNoaWxkSW5zZXJ0ZWQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
aGFkb3cpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzdHlsZVBzZXVkb0lkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6Om91
dGVybW9zdExhenlBdHRhY2hlZEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxh
enlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRPckhvc3ROb2RlKToKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpyZW1vdmVTaGFkb3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNs
aWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bGlkZXJUaHVtYjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVu
dDo6U2xpZGVyVGh1bWJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxl
bWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkcmFn
RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6c3RhcnREcmFnZ2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkZXRhY2gpOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVu
dFRhcmdldE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNsaWRlcjo6flJlbmRlclNsaWRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlk
ZXI6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dGh1
bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6bGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2xpZGVyOjppbkRyYWdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNsaWRlcjo6dGh1bWIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6aW5EcmFnTW9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OnN0eWxlUHNldWRvSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzaGFkb3dQYXJlbnROb2RlKToKKwogMjAx
MC0wOS0wMyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCBlOGQxZjQxNzIwNjc4MzVjYzRjNmMzYTZj
N2UzZDI3YWIyNzU1NTcyLi5hMTM3YjllN2E3MTE0MTlmNzA4OWNmMmM5MDc4NDY0ZTQ2NGUzMjMx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5j
cHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCkBA
IC0xNTksNyArMTU5LDggQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWI6OmVsZW1l
bnRSZWN0KCkgY29uc3QKICAgICBpZiAoIW1fcGFyZW50U2xpZGVyLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBpbnRSZWN0ID0gdG9SZW5kZXJT
bGlkZXIobV9wYXJlbnRTbGlkZXItPnJlbmRlcmVyKCkpLT50aHVtYlJlY3QoKTsKKyAgICAvLyBG
SVhNRTogRklYIFRISVMgQkVGT1JFIExBTkRJTkcgUEFBQUFBQUFBQVRDSCEhISEKKyAgICBJbnRS
ZWN0IGludFJlY3Q7IC8vID0gdG9SZW5kZXJTbGlkZXIobV9wYXJlbnRTbGlkZXItPnJlbmRlcmVy
KCkpLT50aHVtYlJlY3QoKTsKICAgICBGbG9hdFF1YWQgZmxvYXRRdWFkID0gbV9wYXJlbnRTbGlk
ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGludFJlY3QpKTsK
IAogICAgIHJldHVybiBmbG9hdFF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggZDZmMDRhYTZlMjJlNWMyZjk1YjMzYTUzNGFlYThhOWZhNWI3
YWEzMC4uOTNhNGIyMDYzOWRkMWE1ODgyMDhlMzE5NDMzMmM3ODM3ZGU2Y2IyOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTgyNCwxMiArODI0LDcgQEAgaW5saW5lIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSog
cGFyZW4KIHsKICAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lEOwogCi0gICAg
bV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGUoKSA6IDA7Ci0KLSNpZiBFTkFCTEUoU1ZH
KQotICAgIGlmICghbV9wYXJlbnROb2RlICYmIGUgJiYgZS0+aXNTVkdFbGVtZW50KCkgJiYgZS0+
aXNTaGFkb3dOb2RlKCkpCi0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGUtPnNoYWRvd1BhcmVudE5v
ZGUoKTsKLSNlbmRpZgorICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnRPckhvc3ROb2Rl
KCkgOiAwOwogCiAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBtX3BhcmVudFN0eWxlID0g
cGFyZW50U3R5bGU7CkBAIC0xMTgwLDcgKzExNzUsMjIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRlclN0
eWwKIAogICAgIG1fY2hlY2tlci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gbWF0Y2hWaXNp
dGVkUHNldWRvQ2xhc3M7CiAKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwor
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbiBlbGVtZW50IHdhbnRzIHRvIHN0YXJ0IHN0eWxlIGZy
b20gYSBwcmUtZGVmaW5lZCBwc2V1ZG9JZC4KKyAgICBSZW5kZXJTdHlsZSogaW5pdGlhbFN0eWxl
ID0gMDsKKyAgICBpZiAoZS0+c3R5bGVQc2V1ZG9JZCgpICE9IE5PUFNFVURPKSB7CisgICAgICAg
IE5vZGUqIHBhcmVudCA9IGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICAgICAgaWYgKHBhcmVu
dCAmJiBwYXJlbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGluaXRpYWxTdHlsZSA9IHBh
cmVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoZS0+c3R5bGVQc2V1ZG9JZCgp
KTsKKyAgICAgICAgICAgIC8vIFJlLWluaXRpYWxpemUgbV9lbGVtZW50IGFuZCBtX3N0eWxlZEVs
ZW1lbnQgdGhhdCB3ZXJlIGRpcnRpZWQgYnkgZ2V0Q2FjaGVkUHNldWRvU3R5bGUgY2FsbC4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdHJhbnNpZW50IENTU1N0eWxlU2VsZWN0b3IgbWVt
YmVycyB0byBlbGltaW5hdGUgdGhlIG5lZWQKKyAgICAgICAgICAgIC8vIGZvciB0aGlzIGZpeHVw
LgorICAgICAgICAgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KGluaXRpYWxTdHlsZSkKKyAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShpbml0
aWFsU3R5bGUpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKIAogICAgIGlmIChtX3BhcmVudFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0
RnJvbShtX3BhcmVudFN0eWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL2h0bWwuY3NzIGIv
V2ViQ29yZS9jc3MvaHRtbC5jc3MKaW5kZXggZDY1YWNiMDM3NzE0MGZiYzU4Y2YwOWIwNGQzMThk
ZDRmZDEzZTk5Yi4uYjEwNjQyODU1MjAyYjVmN2I5MGE1MWE4NDA1M2VhNTNiNGU3YjMxZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9jc3MvaHRtbC5jc3MKKysrIGIvV2ViQ29yZS9jc3MvaHRtbC5jc3MK
QEAgLTQ0OCw2ICs0NDgsNyBAQCBpbnB1dFt0eXBlPSJyYW5nZSJdIHsKIAogaW5wdXRbdHlwZT0i
cmFuZ2UiXTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
c2xpZGVydGh1bWItaG9yaXpvbnRhbDsKKyAgICBkaXNwbGF5OiBibG9jazsKIH0KIAogaW5wdXRb
dHlwZT0iYnV0dG9uIl06ZGlzYWJsZWQsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmRpc2FibGVkLCBp
bnB1dFt0eXBlPSJyZXNldCJdOmRpc2FibGVkLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCA0NmRl
NzQ5MWE1MzQyODgxYjNhODljZmJkMjY4Yjc4OTcxY2RkOWU4Li41N2RhYjE0ZThjOWVmYWE4ODI0
NjZkZGU4ZDNmYzZhOTE1MGRjMjgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtNjcsNiArNjcs
NyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0VGFyZ2V0Tm9kZXMoTm9kZSogbm9kZSwgTm9kZVZlY3Rv
ciYgbm9kZXMpCiAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCk7CiB9CiAKKy8vIEZJWE1FOiBJ
TVBMRU1FTlQgUkVNT1ZFIEFMTCBDSElMRFJFTiBGT1IgU0hBRE9XIERPTQogdm9pZCBDb250YWlu
ZXJOb2RlOjpyZW1vdmVBbGxDaGlsZHJlbigpCiB7CiAgICAgcmVtb3ZlQWxsQ2hpbGRyZW5JbkNv
bnRhaW5lcjxOb2RlLCBDb250YWluZXJOb2RlPih0aGlzKTsKQEAgLTk5Niw3ICs5OTcsOCBAQCBz
dGF0aWMgdm9pZCBub3RpZnlDaGlsZEluc2VydGVkKE5vZGUqIGNoaWxkKQogICAgIFJlZlB0cjxO
b2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5k
b2N1bWVudCgpOwogCi0gICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBjLT5wYXJlbnROb2RlKCkt
PmluRG9jdW1lbnQoKSkKKyAgICBOb2RlKiBwYXJlbnRPckhvc3ROb2RlID0gYy0+cGFyZW50T3JI
b3N0Tm9kZSgpOworICAgIGlmIChwYXJlbnRPckhvc3ROb2RlICYmIHBhcmVudE9ySG9zdE5vZGUt
PmluRG9jdW1lbnQoKSkKICAgICAgICAgYy0+aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBl
bHNlCiAgICAgICAgIGMtPmluc2VydGVkSW50b1RyZWUodHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDdjODg4
YmM4NWI0NTg1OWZkZDJiMWQ2ZDA5ZDgwNjI2ZDQ5ZDNkNDYuLjc3NjBkNzM3NGYzMmRhMzQ1NGZj
OTI1MWU4OTNkNzU4ZTljYmFjZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC03ODYsNiArNzg2LDggQEAgdm9pZCBF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAgICAgLy8gbmVlZCB0byBkbyBzdXBlcmNs
YXNzIHByb2Nlc3NpbmcgZmlyc3Qgc28gaW5Eb2N1bWVudCgpIGlzIHRydWUKICAgICAvLyBieSB0
aGUgdGltZSB3ZSByZWFjaCB1cGRhdGVJZAogICAgIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50
b0RvY3VtZW50KCk7CisgICAgaWYgKHNoYWRvdygpKQorICAgICAgICBzaGFkb3coKS0+aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKIAogICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAgIGlmIChtX2F0
dHJpYnV0ZU1hcCkgewpAQCAtODA3LDYgKzgwOSwyMiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKQogICAgIH0KIAogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKKyAgICBpZiAoc2hhZG93KCkpCisgICAgICAgIHNoYWRvdygpLT5yZW1vdmVkRnJv
bURvY3VtZW50KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRl
ZXApCit7CisgICAgQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKKyAgICBp
ZiAoZGVlcCAmJiBzaGFkb3coKSkKKyAgICAgICAgc2hhZG93KCktPmluc2VydGVkSW50b1RyZWUo
dHJ1ZSk7Cit9CisKK3ZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKK3sK
KyAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7CisgICAgaWYgKGRlZXAg
JiYgc2hhZG93KCkpCisgICAgICAgIHNoYWRvdygpLT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7CiB9
CiAKIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkKQEAgLTgxNiw2ICs4MzQsOCBAQCB2b2lkIEVsZW1l
bnQ6OmF0dGFjaCgpCiAKICAgICBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgQ29udGFp
bmVyTm9kZTo6YXR0YWNoKCk7CisgICAgaWYgKHNoYWRvdygpKQorICAgICAgICBzaGFkb3coKS0+
YXR0YWNoKCk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKICAgICAgICAgRWxlbWVudFJh
cmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKICAgICAgICAgaWYgKGRhdGEtPm5lZWRzRm9jdXNB
cHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKCkpIHsKQEAgLTgzNyw2ICs4NTcsOCBAQCB2
b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJh
cmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSgpOwogICAgIENvbnRhaW5lck5vZGU6OmRldGFj
aCgpOworICAgIGlmIChzaGFkb3coKSkKKyAgICAgICAgc2hhZG93KCktPmRldGFjaCgpOwogCiAg
ICAgUmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCk7CiB9CkBAIC04
OTAsMTAgKzkxMiw4IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hh
bmdlKQogICAgIGJvb2wgaGFzUG9zaXRpb25hbFJ1bGVzID0gbmVlZHNTdHlsZVJlY2FsYygpICYm
IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeVBvc2l0aW9u
YWxSdWxlcygpOwogICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHls
ZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMo
KTsKIAotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKCFoYXNQYXJlbnRTdHlsZSAmJiBpc1NoYWRv
d05vZGUoKSAmJiBpc1NWR0VsZW1lbnQoKSkKKyAgICBpZiAoIWhhc1BhcmVudFN0eWxlICYmIGlz
U2hhZG93Tm9kZSgpKQogICAgICAgICBoYXNQYXJlbnRTdHlsZSA9IHRydWU7Ci0jZW5kaWYKIAog
ICAgIGlmICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgbmVlZHNTdHlsZVJlY2FsYygpKSkgewogICAg
ICAgICBpZiAoaGFzUmFyZURhdGEoKSkKQEAgLTk3Miw2ICs5OTIsMTEgQEAgdm9pZCBFbGVtZW50
OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgICAgICBmb3JjZUNoZWNrT2ZOZXh0RWxlbWVudFNpYmxpbmcgPSBj
aGlsZFJ1bGVzQ2hhbmdlZCAmJiBoYXNEaXJlY3RBZGphY2VudFJ1bGVzOwogICAgIH0KKyAgICAv
LyBUaGlzIGRvZXMgbm90IGNhcmUgYWJvdXQgc2libGluZyBjb21iaW5hdG9ycywgYnV0IGN1cnJl
bnRseSB3ZSBoYXZlIG5vIHNoYWRvdyBET00gZWxlbWVudHMgdGhhdCBuZWVkIHRoYXQgYXQgdGhl
IG1vbWVudC4KKyAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKSB7CisgICAgICAg
IGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBzaGFkb3dOb2RlLT5pc1RleHROb2RlKCkgfHwgc2hh
ZG93Tm9kZS0+Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hhZG93Tm9kZS0+bmVlZHNTdHls
ZVJlY2FsYygpKQorICAgICAgICAgICAgc2hhZG93Tm9kZS0+cmVjYWxjU3R5bGUoY2hhbmdlKTsK
KyAgICB9CiAKICAgICBjbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBjbGVhckNoaWxkTmVl
ZHNTdHlsZVJlY2FsYygpOwpAQCAtMTYyMiw0ICsxNjQ3LDkgQEAgdm9pZCBFbGVtZW50Ojp3ZWJr
aXRSZXF1ZXN0RnVsbFNjcmVlbih1bnNpZ25lZCBzaG9ydCBmbGFncykKIH0KICNlbmRpZiAgICAK
IAorTm9kZSogRWxlbWVudDo6c2hhZG93KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCmluZGV4IDViYmRkYzJlOTc0NTg0ZTVkMzMxNTEwOTg1YzcwOGNl
YjI5ZjMyMjkuLmU5YmNlNTZhMDVhMmNiYmEyZjU5ZGRmMzgxY2I4YWQ3OTY4NzcwOGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTMwNiw2ICszMDYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgd2Via2l0UmVxdWVzdEZ1bGxT
Y3JlZW4odW5zaWduZWQgc2hvcnQgZmxhZ3MpOwogI2VuZGlmCiAKKyAgICAvLyBGSVhNRTogTWFr
ZSBub24tdmlydHVhbC4KKyAgICB2aXJ0dWFsIE5vZGUqIHNoYWRvdygpOworICAgIC8vIFRoaXMg
aXMgYW4gZXF1aXZhbGVudCBvZiB4Ymw6cHNldWRvIGF0dHJpYnV0ZS4KKyAgICB2aXJ0dWFsIFBz
ZXVkb0lkIHN0eWxlUHNldWRvSWQoKSBjb25zdCB7IHJldHVybiBOT1BTRVVETzsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKICAgICAgICAgOiBDb250YWluZXJO
b2RlKGRvY3VtZW50LCB0eXBlKQpAQCAtMzE1LDYgKzMyMCw4IEBAIHByb3RlY3RlZDoKIAogICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5v
ZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291
bnREZWx0YSA9IDApOwogCiAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIG9mIEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQoKSBjYWxscyB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4
IGY2NTU0ZGU2MDc4MjY2ODE5MzYxYzdjODg1Y2JiYTZhZThkMDJiNmUuLjJkNTExMjIyYTE3Mjg3
OTY2MjBiZmY4ZjdhZmU3ZmUzY2Y3NDI1MjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBO
b2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogICAg
ICAgICBzZXRTdHlsZUNoYW5nZShjaGFuZ2VUeXBlKTsKIAogICAgIGlmIChleGlzdGluZ0NoYW5n
ZVR5cGUgPT0gTm9TdHlsZUNoYW5nZSkgewotICAgICAgICBmb3IgKE5vZGUqIHAgPSBwYXJlbnRO
b2RlKCk7IHAgJiYgIXAtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOyBwID0gcC0+cGFyZW50Tm9k
ZSgpKQorICAgICAgICBmb3IgKE5vZGUqIHAgPSBwYXJlbnRPckhvc3ROb2RlKCk7IHAgJiYgIXAt
PmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOyBwID0gcC0+cGFyZW50T3JIb3N0Tm9kZSgpKQogICAg
ICAgICAgICAgcC0+c2V0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICAgICAgaWYgKGRv
Y3VtZW50KCktPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKQpAQCAtNzQwLDcgKzc0MCw3IEBAIHZv
aWQgTm9kZTo6c2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkK
IHN0YXRpYyBOb2RlKiBvdXRlcm1vc3RMYXp5QXR0YWNoZWRBbmNlc3RvcihOb2RlKiBzdGFydCkK
IHsKICAgICBOb2RlKiBwID0gc3RhcnQ7Ci0gICAgZm9yIChOb2RlKiBuZXh0ID0gcC0+cGFyZW50
Tm9kZSgpOyAhbmV4dC0+cmVuZGVyZXIoKTsgcCA9IG5leHQsIG5leHQgPSBuZXh0LT5wYXJlbnRO
b2RlKCkpIHt9CisgICAgZm9yIChOb2RlKiBuZXh0ID0gcC0+cGFyZW50T3JIb3N0Tm9kZSgpOyAh
bmV4dC0+cmVuZGVyZXIoKTsgcCA9IG5leHQsIG5leHQgPSBuZXh0LT5wYXJlbnRPckhvc3ROb2Rl
KCkpIHt9CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTc2Niw3ICs3NjYsNyBAQCB2b2lkIE5vZGU6
OmxhenlBdHRhY2goKQogICAgICAgICAgICAgbGF6eUF0dGFjaGVkQW5jZXN0b3ItPmRldGFjaCgp
OwogICAgICAgICBsYXp5QXR0YWNoZWRBbmNlc3Rvci0+YXR0YWNoKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChOb2RlKiBwID0gcGFyZW50Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRz
U3R5bGVSZWNhbGMoKTsgcCA9IHAtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBw
ID0gcGFyZW50T3JIb3N0Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsg
cCA9IHAtPnBhcmVudE9ySG9zdE5vZGUoKSkKICAgICAgICAgICAgIHAtPnNldENoaWxkTmVlZHNT
dHlsZVJlY2FsYygpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Y2hpbGROZWVkc1N0eWxlUmVj
YWxjKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5zY2hlZHVsZVN0eWxlUmVjYWxjKCk7CkBA
IC0xMzM5LDcgKzEzMzksNyBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQog
CiAgICAgQVNTRVJUKCFyZW5kZXJlcigpKTsKICAgICAKLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7ICAgIAorICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKICAg
ICBBU1NFUlQocGFyZW50KTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVy
ID0gcGFyZW50LT5yZW5kZXJlcigpOwpAQCAtMTQ2Miw2ICsxNDYyLDEzIEBAIGJvb2wgTm9kZTo6
aXNJblNoYWRvd1RyZWUoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQ29udGFpbmVyTm9kZSog
Tm9kZTo6cGFyZW50T3JIb3N0Tm9kZSgpCit7CisgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudDsKKyAgICByZXR1cm4gc2hh
ZG93UGFyZW50Tm9kZSgpOworfQorCiBib29sIE5vZGU6OmlzQmxvY2tGbG93KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5oIGIvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDI1
OGM4ZmQxZTZiMzcwNWVjNzFiYmVjOTE5YWE3MmRjZTBlNzBkZjAuLmYwNjcxMDBhMGIwNDg4Zjk5
NzUxODNhOTM1OGQ3ZWQ0ODdkMWU0ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuaAor
KysgYi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIxMiw2ICsyMTIsOCBAQCBwdWJsaWM6CiAgICAg
Tm9kZSogc2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgTm9kZSogc2hhZG93VHJlZVJvb3ROb2Rl
KCk7CiAgICAgYm9vbCBpc0luU2hhZG93VHJlZSgpOworICAgIC8vIE5vZGUncyBwYXJlbnQgb3Ig
c2hhZG93IHRyZWUgaG9zdC4KKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnRPckhvc3ROb2RlKCk7
CiAKICAgICAvLyBUaGUgbm9kZSdzIHBhcmVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgZXZlbnQgY2Fw
dHVyZSBhbmQgYnViYmxpbmcuCiAgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBldmVudFBhcmVu
dE5vZGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvV2ViQ29yZS9kb20v
VGV4dC5jcHAKaW5kZXggOTI4Yjk3NTk2ZTU2OTliNTc5ZjkzYWE4NTNlNWJlNWJlYjE4ZjAzOC4u
Njc4NGU5MWUyYzRjN2JmZDQ3NjhjYzRkNDFmNzBiYzIwMmM2MjQ5NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTIzNywxMCAr
MjM3LDExIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUp
CiAKIFJlbmRlck9iamVjdCogVGV4dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5h
LCBSZW5kZXJTdHlsZSopCiB7CisgICAgTm9kZSogcGFyZW50T3JIb3N0ID0gcGFyZW50T3JIb3N0
Tm9kZSgpOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKHBhcmVudE5vZGUoKS0+aXNTVkdFbGVt
ZW50KCkKKyAgICBpZiAocGFyZW50T3JIb3N0LT5pc1NWR0VsZW1lbnQoKQogI2lmIEVOQUJMRShT
VkdfRk9SRUlHTl9PQkpFQ1QpCi0gICAgICAgICYmICFwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpCisgICAgICAgICYmICFwYXJlbnRPckhvc3QtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpCiAjZW5kaWYKICAgICApCiAgICAg
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmVUZXh0KHRoaXMsIGRhdGFJbXBs
KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IGIzMzliNDVjOGE4YWFiYThiNjFl
MmZkZDRmMWY5ZjcxZTJlMzc0NTguLmM2ODIwYTQ4OGVmODM2YjE1YTYwYWIxYzFhZjZmZjY4YmM2
YzA4YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTg5Miw2ICs4OTIsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldElucHV0VHlwZShjb25zdCBTdHJpbmcmIHQpCiAgICAg
ICAgICAgICBib29sIHdhc0F0dGFjaGVkID0gYXR0YWNoZWQoKTsKICAgICAgICAgICAgIGlmICh3
YXNBdHRhY2hlZCkKICAgICAgICAgICAgICAgICBkZXRhY2goKTsKKyAgICAgICAgICAgIHJlbW92
ZVNoYWRvd1N1YnRyZWUoKTsKIAogICAgICAgICAgICAgYm9vbCBkaWRTdG9yZVZhbHVlID0gc3Rv
cmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGJvb2wgd2FzUGFz
c3dvcmRGaWVsZCA9IGlucHV0VHlwZSgpID09IFBBU1NXT1JEOwpAQCAtOTI3LDYgKzkyOCw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKICAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChhbGlnbiwgZmFsc2UpOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CiAgICAgICAgICAg
ICBpZiAod2FzQXR0YWNoZWQpIHsKICAgICAgICAgICAgICAgICBhdHRhY2goKTsKICAgICAgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQpAQCAtMjUzMSw4
ICsyNTMzLDE1IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZ0KQogICAgIGlmIChpc1RleHRGaWVsZCgpICYmIHJlbmRlcmVyKCkgJiYgKGV2dC0+
aXNNb3VzZUV2ZW50KCkgfHwgZXZ0LT5pc0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50
KCkgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCBldnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkpCiAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZ0KTsKIAotICAgIGlmIChp
bnB1dFR5cGUoKSA9PSBSQU5HRSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgp
IHx8IGV2dC0+aXNEcmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKLSAgICAgICAg
dG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldnQpOworICAgIGlmIChp
bnB1dFR5cGUoKSA9PSBSQU5HRSAmJiByZW5kZXJlcigpICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkp
IHsKKyAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZl
bnQqPihldnQpOworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAg
ICAgICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWIgPSBzdGF0aWNfY2FzdDxTbGlkZXJUaHVt
YkVsZW1lbnQqPihzaGFkb3coKSk7CisgICAgICAgICAgICBBU1NFUlQodGh1bWIpOworICAgICAg
ICAgICAgdGh1bWItPmRyYWdGcm9tKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7Cisg
ICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIH0KKyAgICB9CiAK
ICAgICBpZiAoIWNhbGxCYXNlQ2xhc3NFYXJseSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQog
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2dCk7CkBAIC0yOTU4LDYgKzI5NjcsNTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
dGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiAgICAgfQogfQogCit0eXBlZGVmIEhhc2hNYXA8SFRN
TElucHV0RWxlbWVudCosIFJlZlB0cjxOb2RlPiA+IFNoYWRvd1Jvb3RNYXA7CitzdGF0aWMgU2hh
ZG93Um9vdE1hcCogc2hhZG93Um9vdE1hcCgpCit7CisgICAgc3RhdGljIFNoYWRvd1Jvb3RNYXAq
IHNfbWFwID0gMDsKKyAgICBpZiAoIXNfbWFwKQorICAgICAgICBzX21hcCA9IG5ldyBTaGFkb3dS
b290TWFwKCk7CisgICAgcmV0dXJuIHNfbWFwOworfQorCitOb2RlKiBIVE1MSW5wdXRFbGVtZW50
OjpzaGFkb3coKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMu
CisgICAgaWYgKGlucHV0VHlwZSgpICE9IFJBTkdFKQorICAgICAgICByZXR1cm4gMDsKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyBub3QgaWxsZWdhbCB0byBxdWVyeSBz
aGFkb3coKSBwcmlvcgorICAgIC8vIHRvIGNyZWF0aW9uIG9mIHRoZSBpbnB1dCB0eXBlLCBidXQg
aXQncyBhbiBpbmRpY2F0b3IgdGhhdCBzb21ldGhpbmcKKyAgICAvLyBlbHNlIGhhZCBnb25lIHdy
b25nLgorICAgIEFTU0VSVChzaGFkb3dSb290TWFwKCktPmNvbnRhaW5zKHRoaXMpKTsKKyAgICBy
ZXR1cm4gc2hhZG93Um9vdE1hcCgpLT5nZXQodGhpcykuZ2V0KCk7Cit9CisKK3ZvaWQgSFRNTElu
cHV0RWxlbWVudDo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCit7CisgICAgLy8gRklYTUU6IEV4dGVu
ZCB0byBvdGhlciBpbnB1dCB0eXBlcy4KKyAgICBpZiAoaW5wdXRUeXBlKCkgIT0gUkFOR0UpCisg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXNoYWRvd1Jvb3RNYXAoKS0+Y29udGFpbnModGhp
cykpOworICAgIFJlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IHRodW1iID0gU2xpZGVyVGh1bWJF
bGVtZW50OjpjcmVhdGUodGhpcyk7CisgICAgLy8gRklYTUU6IFdoZXJlIGRvZXMgdGhlIHNldHRp
bmcgY3VzdG9tIHN0eWxlIHRoaW5nIGdvPworICAgIHNoYWRvd1Jvb3RNYXAoKS0+c2V0KHRoaXMs
IHRodW1iLmdldCgpKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVTaGFkb3dT
dWJ0cmVlKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHRvIG90aGVyIGlucHV0IHR5cGVzLgor
ICAgIGlmIChpbnB1dFR5cGUoKSAhPSBSQU5HRSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VChzaGFkb3dSb290TWFwKCktPmNvbnRhaW5zKHRoaXMpKTsKKyAgICBSZWZQdHI8Tm9kZT4gdGh1
bWIgPSBzaGFkb3dSb290TWFwKCktPnRha2UodGhpcyk7CisgICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBzZWVtcyBnZW5lcmljLiBDbGVhbiB0aGlzIHVwIHNvbWVob3cuCisgICAgZG9jdW1lbnQoKS0+
cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUodGh1bWIuZ2V0KCkpOworCisgICAgaWYgKHRodW1i
LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHRodW1iLT5yZW1vdmVkRnJvbURvY3VtZW50KCk7Cisg
ICAgZWxzZQorICAgICAgICB0aHVtYi0+cmVtb3ZlZEZyb21UcmVlKHRydWUpOworfQorCiAjaWYg
RU5BQkxFKFdDU1MpCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0
cmluZyYgbWFzaykKIHsKQEAgLTMwMDMsNCArMzA2MCwxNTYgQEAgYm9vbCBIVE1MSW5wdXRFbGVt
ZW50Ojppc1NwZWVjaEVuYWJsZWQoKSBjb25zdAogfQogI2VuZGlmCiAKKy8vIEZJWE1FOiBNb3Zl
IHRvIGl0cyBvd24gY2xhc3NlcworUmVuZGVyU2xpZGVyVGh1bWI6OlJlbmRlclNsaWRlclRodW1i
KE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworfQorCit2b2lkIFJlbmRl
clNsaWRlclRodW1iOjpsYXlvdXQoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZmlndXJl
IG91dCBhIHdheSB0byBub3QgaGFyZC1jb2RlIHRoaXMuCisgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gcGFyZW50KCktPnN0eWxlKCk7CisgICAgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgICAgICBzdHlsZSgpLT5zZXRBcHBlYXJh
bmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+
YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQorICAgICAgICBzdHlsZSgpLT5z
ZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOworICAgIGVsc2UgaWYgKHBh
cmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0KQorICAgICAgICBzdHls
ZSgpLT5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKKyAgICBlbHNlIGlmIChw
YXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKKyAgICAg
ICAgc3R5bGUoKS0+c2V0QXBwZWFyYW5jZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisK
KyAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBwYXNzIHRoZSBzdHlsZSwgbm90IHRoZSByZW5kZXJlciwgdG8gdGhlIHRoZW1l
LgorICAgICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUodGhpcyk7CisgICAgfQor
ICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKK30KKworaW5saW5lIFNsaWRlclRodW1iRWxlbWVu
dDo6U2xpZGVyVGh1bWJFbGVtZW50KEVsZW1lbnQqIHNoYWRvd0hvc3QpCisgICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIHNoYWRvd0hvc3QtPmRvY3VtZW50KCkpCisgICAgLCBtX3NoYWRvd0hv
c3Qoc2hhZG93SG9zdCkKKyAgICAsIG1faW5EcmFnTW9kZShmYWxzZSkKK3sKK30KKworaW5saW5l
IFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0
ZShFbGVtZW50KiBzaGFkb3dIb3N0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2xpZGVy
VGh1bWJFbGVtZW50KHNoYWRvd0hvc3QpKTsKK30KKworUmVuZGVyT2JqZWN0KiBTbGlkZXJUaHVt
YkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXJUaHVtYih0aGlzKTsKK30K
Kwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRyYWdGcm9tKGNvbnN0IEludFBvaW50JiBwb2lu
dCkKK3sKKyAgICBzZXRQb3NpdGlvbihwb2ludCk7CisgICAgc3RhcnREcmFnZ2luZygpOworfQor
Cit2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c2V0UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBv
aW50KQoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc2hhZG93UGFyZW50
Tm9kZSBpcyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQuCisgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93UGFyZW50Tm9kZSgp
KTsKKyAgICBBU1NFUlQoaW5wdXQpOworICAgIEFTU0VSVChpbnB1dC0+cmVuZGVyZXIoKSk7Cisg
ICAgQVNTRVJUKHJlbmRlcmVyKCkpOworCisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKSB8fCAh
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFBvaW50IG9mZnNldCA9IHJvdW5k
ZWRJbnRQb2ludChpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKHBvaW50LCBmYWxz
ZSwgdHJ1ZSkpOworICAgIFJlbmRlclN0eWxlKiBzbGlkZXJTdHlsZSA9IGlucHV0LT5yZW5kZXJT
dHlsZSgpOworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IHNsaWRlclN0eWxlLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHNsaWRlclN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVk
aWFWb2x1bWVTbGlkZXJQYXJ0OworCisgICAgaW50IHRyYWNrU2l6ZTsKKyAgICBpbnQgcG9zaXRp
b247CisgICAgaW50IGN1cnJlbnRQb3NpdGlvbjsKKyAgICBpZiAoaXNWZXJ0aWNhbCkgeworICAg
ICAgICB0cmFja1NpemUgPSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRIZWlnaHQoKSAtIHJl
bmRlckJveCgpLT5oZWlnaHQoKTsKKyAgICAgICAgcG9zaXRpb24gPSBvZmZzZXQueSgpIC0gcmVu
ZGVyQm94KCktPmhlaWdodCgpIC8gMjsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcmVuZGVy
Qm94KCktPnkoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEJveFJlY3QoKS55KCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdHJhY2tTaXplID0gaW5wdXQtPnJlbmRlckJveCgpLT5jb250
ZW50V2lkdGgoKSAtIHJlbmRlckJveCgpLT53aWR0aCgpOworICAgICAgICBwb3NpdGlvbiA9IG9m
ZnNldC54KCkgLSByZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7CisgICAgICAgIGN1cnJlbnRQb3Np
dGlvbiA9IHJlbmRlckJveCgpLT54KCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRCb3hS
ZWN0KCkueCgpOworICAgIH0KKyAgICBwb3NpdGlvbiA9IG1heCgwLCBtaW4ocG9zaXRpb24sIHRy
YWNrU2l6ZSkpOworCisgICAgU3RlcFJhbmdlIHJhbmdlKGlucHV0KTsKKyAgICBkb3VibGUgZnJh
Y3Rpb24gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIHRyYWNrU2l6ZTsKKyAgICBp
ZiAoaXNWZXJ0aWNhbCkKKyAgICAgICAgZnJhY3Rpb24gPSAxIC0gZnJhY3Rpb247CisgICAgZG91
YmxlIHZhbHVlID0gcmFuZ2UuY2xhbXBWYWx1ZShyYW5nZS52YWx1ZUZyb21Qcm9wb3J0aW9uKGZy
YWN0aW9uKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBubyBsb25nZXIgYmVpbmcgc2V0IGZy
b20gcmVuZGVyZXIuCisgICAgaW5wdXQtPnNldFZhbHVlRnJvbVJlbmRlcmVyKHNlcmlhbGl6ZUZv
ck51bWJlclR5cGUodmFsdWUpKTsKKworICAgIC8vIEZJWE1FOiBXaHkgZXhpdCBoZXJlIGFuZCBu
b3QgZWFybGllciwgYmVmb3JlIHNldHRpbmcgdGhlIHZhbHVlIGFnYWluPworICAgIGlmIChwb3Np
dGlvbiA9PSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
KCktPnNldE5lZWRzTGF5b3V0KHRydWUpOworCisgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ug
dGhpcyBjb3VsZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVudHMgaWYgdGhlIHNhbWUgdmFsdWUgaXMg
c2V0CisgICAgLy8gbXVsdGlwbGUgdGltZXMgd2l0aCBubyBsYXlvdXQgaW4gYmV0d2Vlbi4KKyAg
ICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Cit9CisKK3ZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpzdGFydERyYWdnaW5nKCkKK3sKKyAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKKyAgICAgICAgbV9pbkRyYWdNb2Rl
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQo
KSkgeworICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0g
c3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBib29sIGlzTGVmdEJ1dHRvbiA9
IG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b247CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOworCisgICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7CisgICAgICAgIHN0
YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChtX2luRHJhZ01vZGUp
IHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQor
ICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlKDApOyAgICAgIAorICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CisgICAgICAgIGlmIChtX2lu
RHJhZ01vZGUpIHsKKyAgICAgICAgICAgIHNldFBvc2l0aW9uKG1vdXNlRXZlbnQtPmFic29sdXRl
TG9jYXRpb24oKSk7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhUTUxEaXZFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1l
bnQ6OmRldGFjaCgpCit7CisgICAgaWYgKG1faW5EcmFnTW9kZSkgeworICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAorICAgIH0K
KyAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAppbmRleCA2NTdiNDY4MTNjNjc3NTFlYmI1ZDA3MTc4OGJmZTUxNzI3
ZjBlY2VjLi5hNjEwYjJiMjFmOGUzMTlmM2EwZTcwOGY5YWU0YWZhZjg3NmU1MzIzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmgKQEAgLTMwOCw3ICszMDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlQ2hl
Y2tlZFJhZGlvQnV0dG9ucygpOwotICAgIAorCiAgICAgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChFdmVudCopOwogICAgIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBjcmVh
dGVUZW1wb3JhcnlGb3JtRm9ySXNJbmRleCgpOwogICAgIC8vIEhlbHBlciBmb3IgZ2V0QWxsb3dl
ZFZhbHVlU3RlcCgpOwpAQCAtMzMyLDYgKzMzMiwxMSBAQCBwcml2YXRlOgogICAgIC8vIERBVEVU
SU1FTE9DQUwsIE1PTlRILCBUSU1FLCBhbmQgV0VFSy4KICAgICBTdHJpbmcgc2VyaWFsaXplRm9y
RGF0ZVRpbWVUeXBlcyhkb3VibGUpIGNvbnN0OwogCisgICAgLy8gQ3JlYXRlIChhbiByZW1vdmUp
IHRoZSBzaGFkb3cgc3VidHJlZSBmb3IgZWxlbWVudHMgdGhhdCByZXF1aXJlIGl0LgorICAgIHZv
aWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOworICAgIHZvaWQgcmVtb3ZlU2hhZG93U3VidHJlZSgp
OworICAgIHZpcnR1YWwgTm9kZSogc2hhZG93KCk7CisKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAg
ICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCA5NTBlODU3ZTNiNzgwZWUzNzYzZjY0MDc1NzRjMDI4N2Q2OGIyYzVl
Li43ZTE5ODA3Y2QyNmJjOGIzY2ZjOTM0MmY4NjY1MjcyN2NhNmE3MjRlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtMTc3Miw4ICsxNzcyLDYgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1v
dXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAg
ICAgICAgLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgdGV4dCBub2RlLCBkaXNwYXRjaCBvbiB0
aGUgcGFyZW50IG5vZGUgLSByZGFyOi8vNDE5NjY0NgogICAgICAgICBpZiAocmVzdWx0ICYmIHJl
c3VsdC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5wYXJlbnRO
b2RlKCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIH0KICAgICBtX25vZGVVbmRlck1vdXNlID0gcmVz
dWx0OwogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBl
MjAwZmY5ZDZiZGU3NzE1YTA2MTZkMmYyN2RlZWU1NGZjMTMxZWNhLi5mM2RhMjNiMzRhMGJlZjMw
NjNmNjI5NDFkZjc0ZDRjMGFhYjU0YTU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTIzNzYsNiArMjM3Niw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck9iamVj
dDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIFJlCiAgICAgfQogCiAg
ICAgTm9kZSogbiA9IG5vZGUoKTsKKyAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgd2hldGhlciB0
aGlzIHNob3VsZCBiZSBuLT5wYXJlbnRPckhvc3ROb2RlKCkKICAgICB3aGlsZSAobiAmJiAhbi0+
aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICgh
bikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCmluZGV4IGExYmM3MWFkMTMxZmIzNGVlYjAy
ZTU3ZmZjMjMxYWY4MjAzNTEyMWYuLjNhMDU1Njc5NDkwNzEwNDYzOTE3NzhjOTgzMzg3MTQ3ZGVl
ZDEzMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtNTIsOTggKzUyLDYgQEAg
c3RhdGljIGRvdWJsZSBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQog
ICAgIHJldHVybiByYW5nZS5wcm9wb3J0aW9uRnJvbVZhbHVlKHJhbmdlLnZhbHVlRnJvbUVsZW1l
bnQoZWxlbWVudCkpOwogfQogCi1jbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQgOiBwdWJsaWMgU2hh
ZG93QmxvY2tFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlkZXJU
aHVtYkVsZW1lbnQ+IGNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKLQotICAgIGJv
b2wgaW5EcmFnTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5EcmFnTW9kZTsgfQotCi0gICAgdmly
dHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKCk7Ci0KLXByaXZhdGU6ICAgICAgICAKLSAgICBTbGlkZXJUaHVtYkVsZW1lbnQoSFRN
TEVsZW1lbnQqIHNoYWRvd1BhcmVudCk7Ci0KLSAgICBGbG9hdFBvaW50IG1fb2Zmc2V0VG9UaHVt
YjsKLSAgICBib29sIG1faW5EcmFnTW9kZTsKLX07Ci0KLWlubGluZSBTbGlkZXJUaHVtYkVsZW1l
bnQ6OlNsaWRlclRodW1iRWxlbWVudChIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQotICAgIDog
U2hhZG93QmxvY2tFbGVtZW50KHNoYWRvd1BhcmVudCkKLSAgICAsIG1faW5EcmFnTW9kZShmYWxz
ZSkKLXsKLX0KLQotaW5saW5lIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2xpZGVyVGh1bWJFbGVtZW50KHNoYWRvd1BhcmVudCkpOwotfQot
Ci12b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCi17Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgU2hhZG93
QmxvY2tFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpOwotICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VFdmVudC0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9
IGV2ZW50LT50eXBlKCk7Ci0KLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCAmJiBpc0xlZnRCdXR0b24pIHsKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZy
YW1lKCkgJiYgcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIg
PSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpLT5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAo
c2xpZGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNsaWRlci0+bW91c2VFdmVudElzSW5UaHVt
Yihtb3VzZUV2ZW50KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWxlY3RlZCB0aGUg
dGh1bWIsIHdlIHdhbnQgdGhlIGN1cnNvciB0byBhbHdheXMgc3RheSBhdAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgc2FtZSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgdGh1bWIuCi0gICAg
ICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9UaHVtYiA9IHNsaWRlci0+bW91c2VFdmVudE9mZnNl
dFRvVGh1bWIobW91c2VFdmVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIG91dHNpZGUgdGhlIHRodW1iLCBtb3ZlIHRoZSB0aHVtYiB0
byB0aGUgcG9pbnQgd2VyZQotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjbGlja2VkLiBXZSds
bCBiZSBleGFjdGx5IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHRodW1iLgotICAgICAgICAgICAgICAg
ICAgICBtX29mZnNldFRvVGh1bWIuc2V0WCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vZmZz
ZXRUb1RodW1iLnNldFkoMCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bV9pbkRyYWdNb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHNoYWRvd1BhcmVu
dCgpKTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzTGVmdEJ1dHRv
bikgewotICAgICAgICBpZiAobV9pbkRyYWdNb2RlKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAKLSAgICAg
ICAgICAgIG1faW5EcmFnTW9kZSA9IGZhbHNlOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAgICAg
aWYgKG1faW5EcmFnTW9kZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRl
cmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmIChzbGlkZXIpIHsKLSAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IGN1clBvaW50ID0gc2xpZGVyLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VF
dmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
SW50UG9pbnQgZXZlbnRPZmZzZXQoY3VyUG9pbnQueCgpICsgbV9vZmZzZXRUb1RodW1iLngoKSwg
Y3VyUG9pbnQueSgpICsgbV9vZmZzZXRUb1RodW1iLnkoKSk7Ci0gICAgICAgICAgICAgICAgc2xp
ZGVyLT5zZXRWYWx1ZUZvclBvc2l0aW9uKHNsaWRlci0+cG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBTaGFkb3dCbG9ja0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQot
Ci12b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICBpZiAobV9pbkRyYWdN
b2RlKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQot
ICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50
c05vZGUoMCk7ICAgICAgCi0gICAgfQotICAgIFNoYWRvd0Jsb2NrRWxlbWVudDo6ZGV0YWNoKCk7
Ci19Ci0KIFJlbmRlclNsaWRlcjo6UmVuZGVyU2xpZGVyKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQogewpAQCAtMTUxLDggKzU5LDYgQEAgUmVu
ZGVyU2xpZGVyOjpSZW5kZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIAogUmVu
ZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkKIHsKLSAgICBpZiAobV90aHVtYikKLSAgICAgICAg
bV90aHVtYi0+ZGV0YWNoKCk7CiB9CiAKIGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRp
b24oYm9vbCwgYm9vbCkgY29uc3QKQEAgLTE5Myw1MCArOTksMjAgQEAgdm9pZCBSZW5kZXJTbGlk
ZXI6OmNhbGNQcmVmV2lkdGhzKCkKIHZvaWQgUmVuZGVyU2xpZGVyOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAg
IFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0KLSAgICBpZiAo
bV90aHVtYikKLSAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUoY3JlYXRlVGh1
bWJTdHlsZShzdHlsZSgpKSk7Ci0KICAgICBzZXRSZXBsYWNlZChpc0lubGluZSgpKTsKIH0KIAot
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU2xpZGVyOjpjcmVhdGVUaHVtYlN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0
eWxlKFNMSURFUl9USFVNQik7Ci0gICAgaWYgKHBzZXVkb1N0eWxlKQotICAgICAgICAvLyBXZSBt
YXkgYmUgc2hhcmluZyBzdHlsZSB3aXRoIGFub3RoZXIgc2xpZGVyLCBidXQgd2UgbXVzdCBub3Qg
c2hhcmUgdGhlIHRodW1iIHN0eWxlLgotICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZShwc2V1ZG9TdHlsZSk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKLQotICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgc3R5bGUtPmluaGVyaXRG
cm9tKHBhcmVudFN0eWxlKTsKLQotICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAg
IGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAg
ICAgICAgc3R5bGUtPnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwotICAg
IGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBh
cnQpCi0gICAgICAgIHN0eWxlLT5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQpOwotICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlk
ZXJQYXJ0KQotICAgICAgICBzdHlsZS0+c2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFy
dCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVt
ZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0KTsKLQotICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7Ci19Ci0KKy8vIEZJ
WE1FOiBDbGVhbiB0aGlzIHVwISBPbmx5IHBvc2l0aW9uIG9mIHRoZSB0aHVtYiBuZWVkcyB0byBi
ZSB1cGRhdGVkLgogSW50UmVjdCBSZW5kZXJTbGlkZXI6OnRodW1iUmVjdCgpCiB7Ci0gICAgaWYg
KCFtX3RodW1iKQorICAgIGlmICghdGh1bWIoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
IAogICAgIEludFJlY3QgdGh1bWJSZWN0OwotICAgIFJlbmRlckJveCogdGh1bWIgPSB0b1JlbmRl
ckJveChtX3RodW1iLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJCb3gqIHRodW1iUmVuZGVyQm94
ID0gdG9SZW5kZXJCb3godGh1bWIoKS0+cmVuZGVyZXIoKSk7CiAKLSAgICB0aHVtYlJlY3Quc2V0
V2lkdGgodGh1bWItPnN0eWxlKCktPndpZHRoKCkuY2FsY01pblZhbHVlKGNvbnRlbnRXaWR0aCgp
KSk7Ci0gICAgdGh1bWJSZWN0LnNldEhlaWdodCh0aHVtYi0+c3R5bGUoKS0+aGVpZ2h0KCkuY2Fs
Y01pblZhbHVlKGNvbnRlbnRIZWlnaHQoKSkpOworICAgIHRodW1iUmVjdC5zZXRXaWR0aCh0aHVt
YlJlbmRlckJveC0+c3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoY29udGVudFdpZHRoKCkp
KTsKKyAgICB0aHVtYlJlY3Quc2V0SGVpZ2h0KHRodW1iUmVuZGVyQm94LT5zdHlsZSgpLT5oZWln
aHQoKS5jYWxjTWluVmFsdWUoY29udGVudEhlaWdodCgpKSk7CiAKICAgICBkb3VibGUgZnJhY3Rp
b24gPSBzbGlkZXJQb3NpdGlvbihzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgp
KSk7CiAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CkBAIC0yNTQs
MTczICsxMzAsMzQgQEAgSW50UmVjdCBSZW5kZXJTbGlkZXI6OnRodW1iUmVjdCgpCiB2b2lkIFJl
bmRlclNsaWRlcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisgICAK
KyAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAKLSAgICBSZW5kZXJCb3gqIHRodW1iID0gbV90
aHVtYiA/IHRvUmVuZGVyQm94KG1fdGh1bWItPnJlbmRlcmVyKCkpIDogMDsKLQotICAgIEludFNp
emUgYmFzZVNpemUoYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCksIGJvcmRlckFuZFBhZGRpbmdIZWln
aHQoKSk7Ci0KLSAgICBpZiAodGh1bWIpIHsKLSAgICAgICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRv
IHNldCB0aGUgc2l6ZSBvZiB0aGUgdGh1bWIuCi0gICAgICAgIGlmICh0aHVtYi0+c3R5bGUoKS0+
aGFzQXBwZWFyYW5jZSgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcGFz
cyB0aGUgc3R5bGUsIG5vdCB0aGUgcmVuZGVyZXIsIHRvIHRoZSB0aGVtZS4KLSAgICAgICAgICAg
IHRoZW1lKCktPmFkanVzdFNsaWRlclRodW1iU2l6ZSh0aHVtYik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBiYXNlU2l6ZS5leHBhbmQodGh1bWItPnN0eWxlKCktPndpZHRoKCkuY2FsY01pblZhbHVl
KDApLCB0aHVtYi0+c3R5bGUoKS0+aGVpZ2h0KCkuY2FsY01pblZhbHVlKDApKTsKLSAgICB9Ci0K
LSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSk7Ci0KLSAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7Ci0KLSAgICBzZXRT
aXplKGJhc2VTaXplKTsKLSAgICBjYWxjV2lkdGgoKTsKLSAgICBjYWxjSGVpZ2h0KCk7Ci0KLSAg
ICBpZiAodGh1bWIpIHsKLSAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICAg
ICAgdGh1bWItPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwotCi0gICAgICAgIExh
eW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIHNpemUoKSk7Ci0K
LSAgICAgICAgSW50UmVjdCBvbGRUaHVtYlJlY3QgPSB0aHVtYi0+ZnJhbWVSZWN0KCk7Ci0KLSAg
ICAgICAgdGh1bWItPmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICAgICAgSW50UmVjdCByZWN0ID0g
dGh1bWJSZWN0KCk7Ci0gICAgICAgIHRodW1iLT5zZXRGcmFtZVJlY3QocmVjdCk7Ci0gICAgICAg
IGlmICh0aHVtYi0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICB0
aHVtYi0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQob2xkVGh1bWJSZWN0KTsKLQotICAgICAg
ICBzdGF0ZVB1c2hlci5wb3AoKTsKLSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tQ2hpbGQodGh1bWIp
OwotICAgIH0KLQotICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsgICAgCi0KLSAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CisgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIGNv
bXBsZXRlbHkuIEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorICAgIC8vIEZJWE1FOiBXZSdy
ZSBraW5kIG9mIGNoZWF0aW5nIGhlcmUuIEJlY2F1c2UgdGhlIHNsaWRlciBpcyBhbHdheXMgcmVw
YWludGVkIGZ1bGx5LAorICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHJlcGFpbnQgcmVj
dHMgZm9yIHRoZSB0aHVtYi4gSG93ZXZlciwgaXQncyBub3QgaWRlYWwuCisgICAgaWYgKFJlbmRl
ckJveCogdGh1bWJSZW5kZXJCb3ggPSB0aHVtYigpID8gdG9SZW5kZXJCb3godGh1bWIoKS0+cmVu
ZGVyZXIoKSkgOiAwKQorICAgICAgICB0aHVtYlJlbmRlckJveC0+c2V0RnJhbWVSZWN0KHRodW1i
UmVjdCgpKTsKIH0KIAorLy8gRklYTUU6IFRyeSB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBj
b3VsZCBiZSBlbGltaW5hdGVkLgogdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZyb21FbGVtZW50
KCkKIHsKLSAgICAvLyBMYXlvdXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHRodW1iJ3Mgc2l6ZSBh
bmQgcG9zaXRpb24uCi0gICAgaWYgKCFtX3RodW1iKSB7Ci0gICAgICAgIG1fdGh1bWIgPSBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSkp
OwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0
eWxlKHN0eWxlKCkpOwotICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVh
dGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdldCgpKSk7Ci0gICAgICAgIG1f
dGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUucmVsZWFzZSgpKTsKLSAgICAg
ICAgbV90aHVtYi0+c2V0QXR0YWNoZWQoKTsKLSAgICAgICAgbV90aHVtYi0+c2V0SW5Eb2N1bWVu
dCgpOwotICAgICAgICBhZGRDaGlsZChtX3RodW1iLT5yZW5kZXJlcigpKTsKLSAgICB9CiAgICAg
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKLWJvb2wgUmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50
SXNJblRodW1iKE1vdXNlRXZlbnQqIGV2dCkKLXsKLSAgICBpZiAoIW1fdGh1bWIgfHwgIW1fdGh1
bWItPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShWSURF
TykKLSAgICBpZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyUGFydCB8fCBz
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KSB7Ci0gICAgICAg
IE1lZGlhQ29udHJvbElucHV0RWxlbWVudCAqc2xpZGVyVGh1bWIgPSBzdGF0aWNfY2FzdDxNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQqPihtX3RodW1iLT5yZW5kZXJlcigpLT5ub2RlKCkpOwotICAg
ICAgICByZXR1cm4gc2xpZGVyVGh1bWItPmhpdFRlc3QoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkp
OwotICAgIH0KLSNlbmRpZgotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV90aHVtYi0+
cmVuZGVyQm94KCktPmFic29sdXRlVG9Mb2NhbChldnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFs
c2UsIHRydWUpOwotICAgIEludFJlY3QgdGh1bWJCb3VuZHMgPSBtX3RodW1iLT5yZW5kZXJCb3go
KS0+Ym9yZGVyQm94UmVjdCgpOwotICAgIHJldHVybiB0aHVtYkJvdW5kcy5jb250YWlucyhyb3Vu
ZGVkSW50UG9pbnQobG9jYWxQb2ludCkpOwotfQotCi1GbG9hdFBvaW50IFJlbmRlclNsaWRlcjo6
bW91c2VFdmVudE9mZnNldFRvVGh1bWIoTW91c2VFdmVudCogZXZ0KQotewotICAgIEFTU0VSVCht
X3RodW1iICYmIG1fdGh1bWItPnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoZXZ0LT5hYnNvbHV0ZUxv
Y2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAgICBJbnRSZWN0IHRodW1iQm91bmRzID0gbV90aHVt
Yi0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IG9mZnNldDsK
LSAgICBvZmZzZXQuc2V0WCh0aHVtYkJvdW5kcy54KCkgKyB0aHVtYkJvdW5kcy53aWR0aCgpIC8g
MiAtIGxvY2FsUG9pbnQueCgpKTsKLSAgICBvZmZzZXQuc2V0WSh0aHVtYkJvdW5kcy55KCkgKyB0
aHVtYkJvdW5kcy5oZWlnaHQoKSAvIDIgLSBsb2NhbFBvaW50LnkoKSk7Ci0gICAgcmV0dXJuIG9m
ZnNldDsKLX0KLQotdm9pZCBSZW5kZXJTbGlkZXI6OnNldFZhbHVlRm9yUG9zaXRpb24oaW50IHBv
c2l0aW9uKQotewotICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBu
ZXcgdmFsdWUgYmFzZWQgb24gdGhlIHBvc2l0aW9uLCBhbmQgc2VuZCBpdCB0byB0aGUgZWxlbWVu
dC4KLSAgICBTdGVwUmFuZ2UgcmFuZ2UoZWxlbWVudCk7Ci0gICAgZG91YmxlIGZyYWN0aW9uID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihwb3NpdGlvbikgLyB0cmFja1NpemUoKTsKLSAgICBpZiAoc3R5
bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBzdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBmcmFjdGlvbiA9IDEg
LSBmcmFjdGlvbjsKLSAgICBkb3VibGUgdmFsdWUgPSByYW5nZS5jbGFtcFZhbHVlKHJhbmdlLnZh
bHVlRnJvbVByb3BvcnRpb24oZnJhY3Rpb24pKTsKLSAgICBlbGVtZW50LT5zZXRWYWx1ZUZyb21S
ZW5kZXJlcihzZXJpYWxpemVGb3JOdW1iZXJUeXBlKHZhbHVlKSk7Ci0KLSAgICAvLyBBbHNvIHVw
ZGF0ZSB0aGUgcG9zaXRpb24gaWYgYXBwcm9wcmlhdGUuCi0gICAgaWYgKHBvc2l0aW9uICE9IGN1
cnJlbnRQb3NpdGlvbigpKSB7Ci0gICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHRoaXMgY291bGQgc2VuZCBleHRyYSBjaGFuZ2Ug
ZXZlbnRzIGlmIHRoZSBzYW1lIHZhbHVlIGlzIHNldAotICAgICAgICAvLyBtdWx0aXBsZSB0aW1l
cyB3aXRoIG5vIGxheW91dCBpbiBiZXR3ZWVuLgotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJTbGlkZXI6OnBv
c2l0aW9uRm9yT2Zmc2V0KGNvbnN0IEludFBvaW50JiBwKQorYm9vbCBSZW5kZXJTbGlkZXI6Omlu
RHJhZ01vZGUoKQogewotICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+cmVuZGVyZXIoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgcG9zaXRpb247Ci0gICAgaWYgKHN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcG9zaXRpb24gPSBwLnkoKSAt
IG1fdGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKSAvIDI7Ci0gICAgZWxzZQotICAgICAgICBw
b3NpdGlvbiA9IHAueCgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPndpZHRoKCkgLyAyOwotICAg
IAotICAgIHJldHVybiBtYXgoMCwgbWluKHBvc2l0aW9uLCB0cmFja1NpemUoKSkpOworICAgIHJl
dHVybiB0aHVtYigpICYmIHRodW1iKCktPmluRHJhZ01vZGUoKTsKIH0KIAotaW50IFJlbmRlclNs
aWRlcjo6Y3VycmVudFBvc2l0aW9uKCkKK1NsaWRlclRodW1iRWxlbWVudCogUmVuZGVyU2xpZGVy
Ojp0aHVtYigpCiB7Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAgIEFTU0VSVChtX3RodW1iLT5y
ZW5kZXJlcigpKTsKLQotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBh
cnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChtX3RodW1iLT5yZW5kZXJlcigpKS0+eSgp
IC0gY29udGVudEJveFJlY3QoKS55KCk7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG1fdGh1bWIt
PnJlbmRlcmVyKCkpLT54KCkgLSBjb250ZW50Qm94UmVjdCgpLngoKTsKLX0KKyAgICBIVE1MRWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSk7CisgICAgaWYg
KE5vZGUqIHNoYWRvdyA9IGlucHV0LT5zaGFkb3coKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFNsaWRlclRodW1iRWxlbWVudCo+KHNoYWRvdyk7CiAKLWludCBSZW5kZXJTbGlkZXI6OnRy
YWNrU2l6ZSgpCi17Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAgIEFTU0VSVChtX3RodW1iLT5y
ZW5kZXJlcigpKTsKLQotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBh
cnQpCi0gICAgICAgIHJldHVybiBjb250ZW50SGVpZ2h0KCkgLSBtX3RodW1iLT5yZW5kZXJCb3go
KS0+aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCgpIC0gbV90aHVtYi0+cmVuZGVy
Qm94KCktPndpZHRoKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU2xpZGVyOjpmb3J3YXJkRXZlbnQoRXZl
bnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAg
TW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7
Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1vdXNlRXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKLSAgICAgICAgICAgICAgICBJ
bnRQb2ludCBldmVudE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvTG9jYWwobW91
c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICAgICAg
ICAgIHNldFZhbHVlRm9yUG9zaXRpb24ocG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRPZmZzZXQpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fdGh1bWItPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi1ib29sIFJlbmRlclNsaWRlcjo6aW5EcmFnTW9kZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGh1bWIgJiYgbV90aHVtYi0+aW5EcmFnTW9kZSgpOwor
ICAgIHJldHVybiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5oCmluZGV4IGZjOGNlMjQ1NWEzZjBmNmJkODc2OTFlOWE2NGMyZmQ3OTMyYTQ4Y2Uu
Ljc4ZjYxZmQ2YzMxMWNkNzAwMzAzYmI5YjczZTUyMjcxYWY0YzFjYTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5oCkBAIC0yMSwyMSArMjEsNTMgQEAKICNpZm5kZWYgUmVuZGVyU2xpZGVyX2gK
ICNkZWZpbmUgUmVuZGVyU2xpZGVyX2gKIAorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKICAgICBjbGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNzIFNs
aWRlclRodW1iRWxlbWVudDsKLSAgICAKKworLy8gRklYTUU6IE1PVkUgVE8gU0VQQVJBVEUgQ0xB
U1MhISEKK2NsYXNzIFJlbmRlclNsaWRlclRodW1iIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1
YmxpYzoKKyAgICBSZW5kZXJTbGlkZXJUaHVtYihOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOworfTsKKworY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50IDogcHVibGljIEhUTUxEaXZF
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlkZXJUaHVtYkVsZW1l
bnQ+IGNyZWF0ZShFbGVtZW50KiBzaGFkb3dIb3N0KTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKKyAgICB2
b2lkIGRyYWdGcm9tKGNvbnN0IEludFBvaW50Jik7CisgICAgYm9vbCBpbkRyYWdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9pbkRyYWdNb2RlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKyAgICB2aXJ0
dWFsIFBzZXVkb0lkIHN0eWxlUHNldWRvSWQoKSBjb25zdCB7IHJldHVybiBTTElERVJfVEhVTUI7
IH0KKworcHJpdmF0ZTogICAgICAgIAorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKKyAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoKTsKKworICAgIFNsaWRlclRodW1iRWxlbWVu
dChFbGVtZW50KiBzaGFkb3dIb3N0KTsKKyAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUqIHNoYWRv
d1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd0hvc3Q7IH0KKworICAgIEZsb2F0UG9pbnQg
bV9vZmZzZXRUb1RodW1iOworICAgIEVsZW1lbnQqIG1fc2hhZG93SG9zdDsKKyAgICBib29sIG1f
aW5EcmFnTW9kZTsKK307CisKKwogICAgIGNsYXNzIFJlbmRlclNsaWRlciA6IHB1YmxpYyBSZW5k
ZXJCbG9jayB7CiAgICAgcHVibGljOgogICAgICAgICBSZW5kZXJTbGlkZXIoSFRNTElucHV0RWxl
bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5SZW5kZXJTbGlkZXIoKTsKIAotICAgICAgICB2b2lk
IGZvcndhcmRFdmVudChFdmVudCopOwotICAgICAgICBib29sIGluRHJhZ01vZGUoKSBjb25zdDsK
KyAgICAgICAgYm9vbCBpbkRyYWdNb2RlKCk7CiAgICAgICAgIEludFJlY3QgdGh1bWJSZWN0KCk7
CiAKICAgICBwcml2YXRlOgpAQCAtNDcsMjYgKzc5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnQoKTsKIAotICAgICAgICBib29sIG1vdXNlRXZlbnRJc0luVGh1bWIoTW91
c2VFdmVudCopOwotICAgICAgICBGbG9hdFBvaW50IG1vdXNlRXZlbnRPZmZzZXRUb1RodW1iKE1v
dXNlRXZlbnQqKTsKLQotICAgICAgICB2b2lkIHNldFZhbHVlRm9yUG9zaXRpb24oaW50IHBvc2l0
aW9uKTsKLSAgICAgICAgdm9pZCBzZXRQb3NpdGlvbkZyb21WYWx1ZSgpOwotICAgICAgICBpbnQg
cG9zaXRpb25Gb3JPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgICAgICBpbnQgY3VycmVu
dFBvc2l0aW9uKCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZVRo
dW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLQotICAgICAgICBpbnQg
dHJhY2tTaXplKCk7Ci0KLSAgICAgICAgUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gbV90aHVt
YjsKLQogICAgICAgICBmcmllbmQgY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50OworICAgICAgICAv
LyBGSVhNRTogQnJlYWsgdGhpcyBkZXBlbmRlbmN5LgorICAgICAgICBTbGlkZXJUaHVtYkVsZW1l
bnQqIHRodW1iKCk7CiAgICAgfTsKIAogICAgIGlubGluZSBSZW5kZXJTbGlkZXIqIHRvUmVuZGVy
U2xpZGVyKFJlbmRlck9iamVjdCogb2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67262</attachid>
            <date>2010-09-10 16:37:01 -0700</date>
            <delta_ts>2010-09-14 10:06:33 -0700</delta_ts>
            <desc>Nearly there</desc>
            <filename>bug-44907-20100910163700.patch</filename>
            <type>text/plain</type>
            <size>57222</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2QxZmNhYjcwZjQ3MjEyOWQzMGUwZDBjZTc1Zjg1MDQzNmMxODU5YS4uMmQ0MjllYjBhOGI2NjBk
ZjRjYzMzOGM3NzIxZjVhNzQyMmU1MTk5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOS0wMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIGlucHV0W3R5cGU9cmFuZ2Vd
IHRvIHVzZSBhIG1vcmUgbmF0dXJhbCBzaGFkb3cgRE9NIG1vZGVsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MDcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICBSRUFMIFRISU5HIENPTUlORyBTT09OLgorCiAyMDEw
LTA5LTA5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmlu
ZGV4IDQ3ZDAxZThkOTRlZDNkYTI2MWUzYjRmYjczYTQ1ZmFmNDk1ZWQxOGMuLmQyNmVlN2Q2Njg5
ZDI2MTU1ZTcwNzdlMDUxNTg0MTYzM2ZlMjljODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CkBAIC04MjQsMTIgKzgyNCw3IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRG
b3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiB7CiAgICAgbV9j
aGVja2VyLm1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKIAotICAgIG1fcGFyZW50Tm9kZSA9IGUg
PyBlLT5wYXJlbnROb2RlKCkgOiAwOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoIW1fcGFy
ZW50Tm9kZSAmJiBlICYmIGUtPmlzU1ZHRWxlbWVudCgpICYmIGUtPmlzU2hhZG93Tm9kZSgpKQot
ICAgICAgICBtX3BhcmVudE5vZGUgPSBlLT5zaGFkb3dQYXJlbnROb2RlKCk7Ci0jZW5kaWYKKyAg
ICBtX3BhcmVudE5vZGUgPSBlID8gZS0+cGFyZW50T3JIb3N0Tm9kZSgpIDogMDsKIAogICAgIGlm
IChwYXJlbnRTdHlsZSkKICAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwpAQCAt
MTE4MCw3ICsxMTc1LDI3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsCiAKICAgICBtX2NoZWNr
ZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwog
Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAvLyBDaGVjayB0byBz
ZWUgaWYgYW4gZWxlbWVudCB3YW50cyB0byBzdGFydCBzdHlsZSBmcm9tIGEgcHJlLWRlZmluZWQg
cHNldWRvSWQuCisgICAgLy8gRklYTUU6IFRoaXMgaXMgaG9ycmlkLCBiZWNhdXNlIHdlIHJlc29s
dmUgdGhlIHN0eWxlIHR3aWNlLgorICAgIFJlbmRlclN0eWxlKiBpbml0aWFsU3R5bGUgPSAwOwor
ICAgIGlmIChlLT5zdHlsZVBzZXVkb0lkKCkgIT0gTk9QU0VVRE8pIHsKKyAgICAgICAgTm9kZSog
cGFyZW50ID0gZS0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIGdpYW50IGhhY2ssIG5lZWRlZCB0byB3aXJlIHVwIE1lZGlhIHRpbWVsaW5lIGFuZCB2b2x1
bWUKKyAgICAgICAgLy8gICAgICAgIGVsZW1lbnRzLgorICAgICAgICBpZiAoTm9kZSogc2hhZG93
Um9vdCA9IHBhcmVudC0+c2hhZG93VHJlZVJvb3ROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQg
PSBzaGFkb3dSb290LT5zaGFkb3dQYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBpbml0aWFsU3R5bGUgPSBwYXJlbnQt
PnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKGUtPnN0eWxlUHNldWRvSWQoKSk7Cisg
ICAgICAgICAgICAvLyBSZS1pbml0aWFsaXplIG1fZWxlbWVudCBhbmQgbV9zdHlsZWRFbGVtZW50
IHRoYXQgd2VyZSBkaXJ0aWVkIGJ5IGdldENhY2hlZFBzZXVkb1N0eWxlIGNhbGwuCisgICAgICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRyYW5zaWVudCBDU1NTdHlsZVNlbGVjdG9yIG1lbWJlcnMg
dG8gZWxpbWluYXRlIHRoZSBuZWVkCisgICAgICAgICAgICAvLyBmb3IgdGhpcyBmaXh1cC4KKyAg
ICAgICAgICAgIGluaXRFbGVtZW50KGUpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbml0
aWFsU3R5bGUpCisgICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoaW5pdGlhbFN0
eWxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
CiAKICAgICBpZiAobV9wYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9wYXJlbnRTdHlsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9odG1sLmNzcyBiL1dlYkNv
cmUvY3NzL2h0bWwuY3NzCmluZGV4IGQ2NWFjYjAzNzcxNDBmYmM1OGNmMDliMDRkMzE4ZGQ0ZmQx
M2U5OWIuLmIxMDY0Mjg1NTIwMmI1ZjdiOTBhNTFhODQwNTNlYTUzYjRlN2IzMWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL2h0bWwuY3NzCisrKyBiL1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC00
NDgsNiArNDQ4LDcgQEAgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAKIGlucHV0W3R5cGU9InJhbmdl
Il06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRl
cnRodW1iLWhvcml6b250YWw7CisgICAgZGlzcGxheTogYmxvY2s7CiB9CiAKIGlucHV0W3R5cGU9
ImJ1dHRvbiJdOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRb
dHlwZT0icmVzZXQiXTpkaXNhYmxlZCwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKaW5kZXggNmEwZjE0YjAw
ZDc3OTNjYzRjYTZjNGU1NmEwZTFiN2M2MmM0NWVmNy4uOTY0ZDA0MzMxN2JiMGY5YTgyY2Y4NmY4
ODJhMzNmMmVlM2I0YWZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5j
c3MKKysrIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKQEAgLTg4LDYgKzg4LDEzIEBA
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgcGFkZGluZzogMHB4IDJweDsKIH0KIAorYXVk
aW86Oi13ZWJraXQtc2xpZGVyLXRodW1iLCB2aWRlbzo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewor
ICAgIC8qIFVuZm9ydHVuYXRlbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBzZXR0aW5nIG9mIGFwcGVh
cmFuY2UgaXMgaGFyZC1jb2RlZCBpbiBSZW5kZXJTbGlkZXJUaHVtYjo6bGF5b3V0KCksCisgICAg
ICAgYnV0IHdlIG5lZWQgdG8gaGF2ZSBhbiBhcHBlYXJhbmNlIG9mIHNvbWUgc29ydCB0byBzdGFy
dCBwYWludGluZy4gKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6
b250YWw7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7CiAgICAgZGlzcGxheTogbm9uZTsKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAKaW5kZXggNDZkZTc0OTFhNTM0Mjg4MWIzYTg5Y2ZiZDI2OGI3ODk3MWNk
ZDllOC4uYzhhZjE1YzYzNjNlODBjMGNmMjE4ZWM5YjBmYmRhMmMzMGJhOTk1MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAKQEAgLTk5Niw3ICs5OTYsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGlsZElu
c2VydGVkKE5vZGUqIGNoaWxkKQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVm
UHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCi0gICAgaWYgKGMt
PnBhcmVudE5vZGUoKSAmJiBjLT5wYXJlbnROb2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICBOb2Rl
KiBwYXJlbnRPckhvc3ROb2RlID0gYy0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIGlmIChwYXJl
bnRPckhvc3ROb2RlICYmIHBhcmVudE9ySG9zdE5vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAg
Yy0+aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBlbHNlCiAgICAgICAgIGMtPmluc2VydGVk
SW50b1RyZWUodHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDZmZjQ3ZTBhOTYwODk0YzI1ZTliMTEzOTk4NzY4
ODBmODE0OWViNjUuLjFiNjgzNGFhNGIxODdkMjY0ZDhjNTQ5MGE4MDI5MWU2YjhkNmExZGEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC03ODksNiArNzg5LDggQEAgdm9pZCBFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCgpCiAgICAgLy8gbmVlZCB0byBkbyBzdXBlcmNsYXNzIHByb2Nlc3NpbmcgZmlyc3Qgc28g
aW5Eb2N1bWVudCgpIGlzIHRydWUKICAgICAvLyBieSB0aGUgdGltZSB3ZSByZWFjaCB1cGRhdGVJ
ZAogICAgIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgaWYgKE5v
ZGUqIHNoYWRvd05vZGUgPSBzaGFkb3coKSkKKyAgICAgICAgc2hhZG93Tm9kZS0+aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKIAogICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAgIGlmIChtX2F0dHJp
YnV0ZU1hcCkgewpAQCAtODEwLDYgKzgxMiwyNiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoKQogICAgIH0KIAogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKKyAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFk
b3dOb2RlLT5yZW1vdmVkRnJvbURvY3VtZW50KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRv
VHJlZShkZWVwKTsKKyAgICBpZiAoIWRlZXApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoTm9k
ZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFkb3dOb2RlLT5pbnNlcnRlZElu
dG9UcmVlKHRydWUpOworfQorCit2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRl
ZXApCit7CisgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOworICAgIGlm
ICghZGVlcCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hh
ZG93KCkpCisgICAgICAgIHNoYWRvd05vZGUtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKIH0KIAog
dm9pZCBFbGVtZW50OjphdHRhY2goKQpAQCAtODE5LDYgKzg0MSw4IEBAIHZvaWQgRWxlbWVudDo6
YXR0YWNoKCkKIAogICAgIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKICAgICBDb250YWluZXJO
b2RlOjphdHRhY2goKTsKKyAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKQorICAg
ICAgICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKICAgICBpZiAoaGFzUmFyZURhdGEoKSkgeyAgIAog
ICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOwogICAgICAgICBpZiAo
ZGF0YS0+bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goKSkgewpAQCAt
ODQwLDYgKzg2NCw4IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoKCkKICAgICBpZiAoaGFzUmFyZURh
dGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+cmVzZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgQ29u
dGFpbmVyTm9kZTo6ZGV0YWNoKCk7CisgICAgaWYgKE5vZGUqIHNoYWRvd05vZGUgPSBzaGFkb3co
KSkKKyAgICAgICAgc2hhZG93Tm9kZS0+ZGV0YWNoKCk7CiAKICAgICBSZW5kZXJXaWRnZXQ6OnJl
c3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMoKTsKIH0KQEAgLTg5MywxMCArOTE5LDggQEAgdm9p
ZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgYm9vbCBoYXNQ
b3NpdGlvbmFsUnVsZXMgPSBuZWVkc1N0eWxlUmVjYWxjKCkgJiYgY3VycmVudFN0eWxlICYmIGN1
cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgYm9v
bCBoYXNEaXJlY3RBZGphY2VudFJ1bGVzID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+
Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogCi0jaWYgRU5BQkxFKFNW
RykKLSAgICBpZiAoIWhhc1BhcmVudFN0eWxlICYmIGlzU2hhZG93Tm9kZSgpICYmIGlzU1ZHRWxl
bWVudCgpKQorICAgIGlmICghaGFzUGFyZW50U3R5bGUgJiYgaXNTaGFkb3dOb2RlKCkpCiAgICAg
ICAgIGhhc1BhcmVudFN0eWxlID0gdHJ1ZTsKLSNlbmRpZgogCiAgICAgaWYgKChjaGFuZ2UgPiBO
b0NoYW5nZSB8fCBuZWVkc1N0eWxlUmVjYWxjKCkpKSB7CiAgICAgICAgIGlmIChoYXNSYXJlRGF0
YSgpKQpAQCAtOTc1LDYgKzk5OSwxMSBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlIGNoYW5nZSkKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAg
ICAgIGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50U2libGluZyA9IGNoaWxkUnVsZXNDaGFuZ2VkICYm
IGhhc0RpcmVjdEFkamFjZW50UnVsZXM7CiAgICAgfQorICAgIC8vIFRoaXMgZG9lcyBub3QgY2Fy
ZSBhYm91dCBzaWJsaW5nIGNvbWJpbmF0b3JzLCBidXQgY3VycmVudGx5IHdlIGhhdmUgbm8gc2hh
ZG93IERPTSBlbGVtZW50cyB0aGF0IG5lZWQgdGhhdCBhdCB0aGUgbW9tZW50LgorICAgIGlmIChO
b2RlKiBzaGFkb3dOb2RlID0gc2hhZG93KCkpIHsKKyAgICAgICAgaWYgKGNoYW5nZSA+PSBJbmhl
cml0IHx8IHNoYWRvd05vZGUtPmlzVGV4dE5vZGUoKSB8fCBzaGFkb3dOb2RlLT5jaGlsZE5lZWRz
U3R5bGVSZWNhbGMoKSB8fCBzaGFkb3dOb2RlLT5uZWVkc1N0eWxlUmVjYWxjKCkpCisgICAgICAg
ICAgICBzaGFkb3dOb2RlLT5yZWNhbGNTdHlsZShjaGFuZ2UpOworICAgIH0KIAogICAgIGNsZWFy
TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CkBA
IC0xNjMyLDQgKzE2NjEsOSBAQCB2b2lkIEVsZW1lbnQ6OndlYmtpdFJlcXVlc3RGdWxsU2NyZWVu
KHVuc2lnbmVkIHNob3J0IGZsYWdzKQogfQogI2VuZGlmICAgIAogCitOb2RlKiBFbGVtZW50Ojpz
aGFkb3coKQoreworICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
aW5kZXggZDEzZDQ4MzJiNDY2ZDhiZjc4NmU5YmEzYTdmMzM5NmVkMzliMjVhMi4uZjE2Y2ZlOWZj
MDY4NWNhMWNjMzQzYTU1NTliZTRiNzRlOGJiNzViYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20v
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMzA3LDYgKzMwNywxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCB3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbih1bnNpZ25lZCBzaG9y
dCBmbGFncyk7CiAjZW5kaWYKIAorICAgIC8vIEZJWE1FOiBNYWtlIG5vbi12aXJ0dWFsLgorICAg
IHZpcnR1YWwgTm9kZSogc2hhZG93KCk7CisgICAgLy8gVGhpcyBpcyBhbiBlcXVpdmFsZW50IG9m
IHhibDpwc2V1ZG8gYXR0cmlidXRlLgorICAgIHZpcnR1YWwgUHNldWRvSWQgc3R5bGVQc2V1ZG9J
ZCgpIGNvbnN0IHsgcmV0dXJuIE5PUFNFVURPOyB9CisKIHByb3RlY3RlZDoKICAgICBFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3Ry
dWN0aW9uVHlwZSB0eXBlKQogICAgICAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQsIHR5cGUp
CkBAIC0zMTYsNiArMzIxLDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGluc2Vy
dGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0g
MCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKICAg
ICAvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCgpIGNh
bGxzIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZjY1NTRkZTYwNzgyNjY4MTkz
NjFjN2M4ODVjYmJhNmFlOGQwMmI2ZS4uNzVlYTM1ZDRjMGE4NDA2MGVmN2UwYWY1MWZhMzQ5YTdm
YjY4ODNlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9k
b20vTm9kZS5jcHAKQEAgLTExNSw2ICsxMTUsNjggQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENs
aWNrcyA9IDA7CiAKKy8vIEZJWE1FOiBNb3ZlIHRvIGEgc2VwYXJhdGUgZmlsZS4KK0V2ZW50QW5j
ZXN0b3I6OkV2ZW50QW5jZXN0b3IoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IsIE5vZGUqIHRhcmdl
dCkKKyAgICA6IG1fYW5jZXN0b3IoYW5jZXN0b3IpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCit7
Cit9CisKK0NvbnRhaW5lck5vZGUqIEV2ZW50QW5jZXN0b3I6OmFuY2VzdG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9hbmNlc3Rvci5nZXQoKTsKK30KKworTm9kZSogRXZlbnRBbmNlc3Rvcjo6
dGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXQuZ2V0KCk7Cit9CisKKyNpZiBF
TkFCTEUoU1ZHKQorc3RhdGljIGlubGluZSBTVkdFbGVtZW50SW5zdGFuY2UqIGV2ZW50VGFyZ2V0
QXNTVkdFbGVtZW50SW5zdGFuY2UoTm9kZSogcmVmZXJlbmNlTm9kZSkKK3sKKyAgICBBU1NFUlQo
cmVmZXJlbmNlTm9kZSk7CisgICAgaWYgKCFyZWZlcmVuY2VOb2RlLT5pc1NWR0VsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBTcGVjOiBUaGUgZXZlbnQgaGFuZGxpbmcgZm9y
IHRoZSBub24tZXhwb3NlZCB0cmVlIHdvcmtzIGFzIGlmIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQg
aGFkIGJlZW4gdGV4dHVhbGx5IGluY2x1ZGVkCisgICAgLy8gYXMgYSBkZWVwbHkgY2xvbmVkIGNo
aWxkIG9mIHRoZSAndXNlJyBlbGVtZW50LCBleGNlcHQgdGhhdCBldmVudHMgYXJlIGRpc3BhdGNo
ZWQgdG8gdGhlIFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzCisgICAgZm9yIChOb2RlKiBuID0g
cmVmZXJlbmNlTm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoIW4t
PmlzU2hhZG93Tm9kZSgpIHx8ICFuLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIENvbnRhaW5lck5vZGUqIHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50ID0g
bi0+c2hhZG93UGFyZW50Tm9kZSgpOworICAgICAgICBBU1NFUlQoc2hhZG93VHJlZVBhcmVudEVs
ZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpOworCisgICAgICAgIGlmIChTVkdF
bGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudCo+KHNo
YWRvd1RyZWVQYXJlbnRFbGVtZW50KS0+aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChyZWZl
cmVuY2VOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEV2ZW50VGFyZ2V0KiBldmVudFRh
cmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKQoreworICAg
IEFTU0VSVChyZWZlcmVuY2VOb2RlKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKFNWR0Vs
ZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBldmVudFRhcmdldEFzU1ZHRWxlbWVudEluc3RhbmNl
KHJlZmVyZW5jZU5vZGUpKSB7CisgICAgICAgIEFTU0VSVChpbnN0YW5jZS0+c2hhZG93VHJlZUVs
ZW1lbnQoKSA9PSByZWZlcmVuY2VOb2RlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAg
IH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7Cit9CisKK3ZvaWQgRXZlbnRB
bmNlc3Rvcjo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIGV2
ZW50LT5zZXRUYXJnZXQodGFyZ2V0KCkpOworICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKCkpKTsKKyAgICBtX2Fu
Y2VzdG9yLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudCk7Cit9CisKIGJvb2wgTm9kZTo6aXNTdXBw
b3J0ZWQoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAg
ICAgcmV0dXJuIERPTUltcGxlbWVudGF0aW9uOjpoYXNGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24p
OwpAQCAtNzI5LDcgKzc5MSw3IEBAIHZvaWQgTm9kZTo6c2V0TmVlZHNTdHlsZVJlY2FsYyhTdHls
ZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKICAgICAgICAgc2V0U3R5bGVDaGFuZ2UoY2hhbmdlVHlw
ZSk7CiAKICAgICBpZiAoZXhpc3RpbmdDaGFuZ2VUeXBlID09IE5vU3R5bGVDaGFuZ2UpIHsKLSAg
ICAgICAgZm9yIChOb2RlKiBwID0gcGFyZW50Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRzU3R5
bGVSZWNhbGMoKTsgcCA9IHAtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBwID0g
cGFyZW50T3JIb3N0Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsgcCA9
IHAtPnBhcmVudE9ySG9zdE5vZGUoKSkKICAgICAgICAgICAgIHAtPnNldENoaWxkTmVlZHNTdHls
ZVJlY2FsYygpOwogCiAgICAgICAgIGlmIChkb2N1bWVudCgpLT5jaGlsZE5lZWRzU3R5bGVSZWNh
bGMoKSkKQEAgLTc0MCw3ICs4MDIsNyBAQCB2b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMo
U3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCiBzdGF0aWMgTm9kZSogb3V0ZXJtb3N0TGF6eUF0
dGFjaGVkQW5jZXN0b3IoTm9kZSogc3RhcnQpCiB7CiAgICAgTm9kZSogcCA9IHN0YXJ0OwotICAg
IGZvciAoTm9kZSogbmV4dCA9IHAtPnBhcmVudE5vZGUoKTsgIW5leHQtPnJlbmRlcmVyKCk7IHAg
PSBuZXh0LCBuZXh0ID0gbmV4dC0+cGFyZW50Tm9kZSgpKSB7fQorICAgIGZvciAoTm9kZSogbmV4
dCA9IHAtPnBhcmVudE9ySG9zdE5vZGUoKTsgIW5leHQtPnJlbmRlcmVyKCk7IHAgPSBuZXh0LCBu
ZXh0ID0gbmV4dC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7fQogICAgIHJldHVybiBwOwogfQogCkBA
IC03NjYsNyArODI4LDcgQEAgdm9pZCBOb2RlOjpsYXp5QXR0YWNoKCkKICAgICAgICAgICAgIGxh
enlBdHRhY2hlZEFuY2VzdG9yLT5kZXRhY2goKTsKICAgICAgICAgbGF6eUF0dGFjaGVkQW5jZXN0
b3ItPmF0dGFjaCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZSogcCA9IHBhcmVu
dE5vZGUoKTsgcCAmJiAhcC0+Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7IHAgPSBwLT5wYXJlbnRO
b2RlKCkpCisgICAgICAgIGZvciAoTm9kZSogcCA9IHBhcmVudE9ySG9zdE5vZGUoKTsgcCAmJiAh
cC0+Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7IHAgPSBwLT5wYXJlbnRPckhvc3ROb2RlKCkpCiAg
ICAgICAgICAgICBwLT5zZXRDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKGRv
Y3VtZW50KCktPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+c2NoZWR1bGVTdHlsZVJlY2FsYygpOwpAQCAtMTMzOSw3ICsxNDAxLDcgQEAgdm9pZCBOb2Rl
OjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKIAogICAgIEFTU0VSVCghcmVuZGVyZXIoKSk7CiAg
ICAgCi0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyAgICAKKyAgICBOb2RlKiBwYXJl
bnQgPSBwYXJlbnRPckhvc3ROb2RlKCk7CiAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgCiAgICAg
UmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKQEAgLTE0
NjIsNiArMTUyNCwxMyBAQCBib29sIE5vZGU6OmlzSW5TaGFkb3dUcmVlKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK0NvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE9ySG9zdE5vZGUoKQorewor
ICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpCisgICAgICAgIHJl
dHVybiBwYXJlbnQ7CisgICAgcmV0dXJuIHNoYWRvd1BhcmVudE5vZGUoKTsKK30KKwogYm9vbCBO
b2RlOjppc0Jsb2NrRmxvdygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVu
ZGVyZXIoKS0+aXNCbG9ja0Zsb3coKTsKQEAgLTIyODcsNyArMjM1Niw3IEBAIHZvaWQgTm9kZTo6
Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogCiBDb250
YWluZXJOb2RlKiBOb2RlOjpldmVudFBhcmVudE5vZGUoKQogewotICAgIHJldHVybiBwYXJlbnRO
b2RlKCk7CisgICAgcmV0dXJuIHBhcmVudE9ySG9zdE5vZGUoKTsKIH0KIAogTm9kZSogTm9kZTo6
ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkKQEAgLTI1MzAsNTQgKzI1OTksMjEgQEAg
dm9pZCBOb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQpCiAgICAgZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotI2lmIEVOQUJMRShTVkcpCi1zdGF0aWMgaW5saW5lIFNW
R0VsZW1lbnRJbnN0YW5jZSogZXZlbnRUYXJnZXRBc1NWR0VsZW1lbnRJbnN0YW5jZShOb2RlKiBy
ZWZlcmVuY2VOb2RlKQotewotICAgIEFTU0VSVChyZWZlcmVuY2VOb2RlKTsKLSAgICBpZiAoIXJl
ZmVyZW5jZU5vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IFNwZWM6IFRoZSBldmVudCBoYW5kbGluZyBmb3IgdGhlIG5vbi1leHBvc2VkIHRyZWUgd29ya3Mg
YXMgaWYgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBoYWQgYmVlbiB0ZXh0dWFsbHkgaW5jbHVkZWQK
LSAgICAvLyBhcyBhIGRlZXBseSBjbG9uZWQgY2hpbGQgb2YgdGhlICd1c2UnIGVsZW1lbnQsIGV4
Y2VwdCB0aGF0IGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCB0byB0aGUgU1ZHRWxlbWVudEluc3RhbmNl
IG9iamVjdHMKLSAgICBmb3IgKE5vZGUqIG4gPSByZWZlcmVuY2VOb2RlOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghbi0+aXNTaGFkb3dOb2RlKCkgfHwgIW4tPmlzU1ZH
RWxlbWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ29udGFpbmVyTm9k
ZSogc2hhZG93VHJlZVBhcmVudEVsZW1lbnQgPSBuLT5zaGFkb3dQYXJlbnROb2RlKCk7Ci0gICAg
ICAgIEFTU0VSVChzaGFkb3dUcmVlUGFyZW50RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
dXNlVGFnKSk7Ci0KLSAgICAgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBz
dGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93VHJlZVBhcmVudEVsZW1lbnQpLT5pbnN0
YW5jZUZvclNoYWRvd1RyZWVFbGVtZW50KHJlZmVyZW5jZU5vZGUpKQotICAgICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRp
YyBpbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVz
KE5vZGUqIHJlZmVyZW5jZU5vZGUpCi17Ci0gICAgQVNTRVJUKHJlZmVyZW5jZU5vZGUpOwotCi0j
aWYgRU5BQkxFKFNWRykKLSAgICBpZiAoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IGV2
ZW50VGFyZ2V0QXNTVkdFbGVtZW50SW5zdGFuY2UocmVmZXJlbmNlTm9kZSkpIHsKLSAgICAgICAg
QVNTRVJUKGluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpID09IHJlZmVyZW5jZU5vZGUpOwot
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVm
ZXJlbmNlTm9kZTsKLX0KLQotdm9pZCBOb2RlOjpldmVudEFuY2VzdG9ycyhWZWN0b3I8UmVmUHRy
PENvbnRhaW5lck5vZGU+ID4gJmFuY2VzdG9ycykKK3ZvaWQgTm9kZTo6ZXZlbnRBbmNlc3RvcnMo
VmVjdG9yPEV2ZW50QW5jZXN0b3I+ICZhbmNlc3RvcnMpCiB7CiAgICAgaWYgKGluRG9jdW1lbnQo
KSkgeworICAgICAgICAvLyBGSVhNRTogSW50ZWdyYXRlIGJldHRlciB3aXRoIFNWRyBzaGFkb3cg
c3R1ZmYsIHdoaWNoIHNlZW1zIHZlcnkgc2ltaWxhci4KKyAgICAgICAgTm9kZSogdGFyZ2V0ID0g
aXNTaGFkb3dOb2RlKCkgPyBzaGFkb3dQYXJlbnROb2RlKCkgOiB0aGlzOwogICAgICAgICBmb3Ig
KENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gZXZlbnRQYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBh
bmNlc3RvciA9IGFuY2VzdG9yLT5ldmVudFBhcmVudE5vZGUoKSkgewogI2lmIEVOQUJMRShTVkcp
CiAgICAgICAgICAgICAvLyBTa2lwIDx1c2U+IHNoYWRvdyB0cmVlIGVsZW1lbnRzLgogICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLT5pc1NWR0VsZW1lbnQoKSAmJiBhbmNlc3Rvci0+aXNTaGFkb3dO
b2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAjZW5kaWYKLSAgICAgICAgICAgIGFu
Y2VzdG9ycy5hcHBlbmQoYW5jZXN0b3IpOworICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChF
dmVudEFuY2VzdG9yKGFuY2VzdG9yLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgYml0IHVnbHkuIFdlIHNob3VsZCBlbGltaW5hdGUgdGhlc2UgbXVsdGlwbGUgY2Fs
bHMgdG8gc2hhZG93UGFyZW50Tm9kZSgpIChpdCdzIGluIGV2ZW50UGFyZW50Tm9kZSB0b28hKQor
ICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd05vZGUoKSkKKyAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBhbmNlc3Rvci0+c2hhZG93UGFyZW50Tm9kZSgpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMjU5Myw3ICsyNjI5LDcgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVudChl
dmVudC5yZWxlYXNlKCkpOwogfQogCi1zdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUs
IFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3JzKQorc3RhdGljIGJvb2wg
ZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRv
dyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8RXZlbnRBbmNlc3Rvcj4mIGFuY2Vz
dG9ycykKIHsKICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnRUeXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjAyLDcgKzI2MzgsNyBAQCBzdGF0
aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RE9NV2luZG93KiB3aW5kb3csCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgQ29udGFpbmVy
Tm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7CisgICAgICAgIENvbnRhaW5lck5v
ZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2ldLmFuY2VzdG9yKCk7CiAgICAgICAgIGlmIChhbmNl
c3Rvci0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTI2MjIsNyArMjY1OCw3IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZW5l
cmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgbm90IGluIGEgZG9jdW1lbnQganVzdCBzZW5kIHRoZSBldmVudCB0byBpdC4KICAgICAvLyBC
ZSBzdXJlIHRvIHJlZiBhbGwgb2Ygbm9kZXMgc2luY2UgZXZlbnQgaGFuZGxlcnMgY291bGQgcmVz
dWx0IGluIHRoZSBsYXN0IHJlZmVyZW5jZSBnb2luZyBhd2F5LgogICAgIFJlZlB0cjxOb2RlPiB0
aGlzTm9kZSh0aGlzKTsKLSAgICBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4gYW5jZXN0
b3JzOworICAgIFZlY3RvcjxFdmVudEFuY2VzdG9yPiBhbmNlc3RvcnM7CiAgICAgZXZlbnRBbmNl
c3RvcnMoYW5jZXN0b3JzKTsKIAogICAgIC8vIFNldCB1cCBhIHBvaW50ZXIgdG8gaW5kaWNhdGUg
d2hldGhlciAvIHdoZXJlIHRvIGRpc3BhdGNoIHdpbmRvdyBldmVudHMuCkBAIC0yNjMwLDcgKzI2
NjYsNyBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQogICAgIC8vIGFkZGVkIGJlY2F1c2UgTW96aWxsYSBkb2Vzbid0IHByb3BhZ2F0
ZSBsb2FkIGV2ZW50cyB0byB0aGUgd2luZG93IG9iamVjdC4KICAgICBET01XaW5kb3cqIHRhcmdl
dEZvcldpbmRvd0V2ZW50cyA9IDA7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1l
cygpLmxvYWRFdmVudCkgewotICAgICAgICBOb2RlKiB0b3BMZXZlbENvbnRhaW5lciA9IGFuY2Vz
dG9ycy5pc0VtcHR5KCkgPyB0aGlzIDogYW5jZXN0b3JzLmxhc3QoKS5nZXQoKTsKKyAgICAgICAg
Tm9kZSogdG9wTGV2ZWxDb250YWluZXIgPSBhbmNlc3RvcnMuaXNFbXB0eSgpID8gdGhpcyA6IGFu
Y2VzdG9ycy5sYXN0KCkuYW5jZXN0b3IoKTsKICAgICAgICAgaWYgKHRvcExldmVsQ29udGFpbmVy
LT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICAgICAgdGFyZ2V0Rm9yV2luZG93RXZlbnRzID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih0b3BMZXZlbENvbnRhaW5lciktPmRvbVdpbmRvdygpOwog
ICAgIH0KQEAgLTI2NjAsMTUgKzI2OTYsMTQgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEdlbmVyaWNF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICAgICAgICAgIGdvdG8gZG9uZURp
c3BhdGNoaW5nOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsg
aTsgLS1pKSB7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2kg
LSAxXS5nZXQoKTsKLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpKTsKLSAgICAgICAgYW5jZXN0b3ItPmhh
bmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAgICAgYW5jZXN0b3JzW2kgLSAxXS5o
YW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CiAgICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9
CiAKICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAorICAgIGV2
ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRU
YXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOwogICAgIGhhbmRsZUxvY2FsRXZl
bnRzKGV2ZW50LmdldCgpKTsKICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQpA
QCAtMjY4MCw5ICsyNzE1LDcgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IGFuY2VzdG9y
cy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICBDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGFuY2VzdG9yc1tpXS5nZXQoKTsK
LSAgICAgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSk7Ci0gICAgICAgICAgICBhbmNlc3Rvci0+aGFuZGxl
TG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgYW5jZXN0b3JzW2ldLmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgICAgICB9CkBAIC0yNjk1LDYgKzI3MjgsNyBAQCBi
b29sIE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQogICAgIH0KIAogZG9uZURpc3BhdGNoaW5nOgorICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CiAgICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoMCk7CiAKQEAgLTI3MTUsNyArMjc0OSw3IEBAIGRvbmVEaXNwYXRjaGluZzoKICAgICAgICAg
aWYgKGV2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gYW5jZXN0
b3JzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNl
c3RvcnNbaV0uYW5jZXN0b3IoKTsKICAgICAgICAgICAgICAgICBhbmNlc3Rvci0+ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJDb3JlL2RvbS9O
b2RlLmgKaW5kZXggMjU4YzhmZDFlNmIzNzA1ZWM3MWJiZWM5MTlhYTcyZGNlMGU3MGRmMC4uNGUw
M2YxYTgxZjc0NTBiMDIxMzIzZGE5YzgyZDZkYjExZjg3ODAwMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtODYsNiArODYsMjAgQEAg
ZW51bSBTdHlsZUNoYW5nZVR5cGUgewogICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlID0gMyA8PCBu
b2RlU3R5bGVDaGFuZ2VTaGlmdAogfTsKIAorLy8gRklYTUU6IE1vdmUgdG8gc2VwYXJhdGUgZmls
ZS4KK2NsYXNzIEV2ZW50QW5jZXN0b3IgeworcHVibGljOgorICAgIEV2ZW50QW5jZXN0b3IoQ29u
dGFpbmVyTm9kZSogYW5jZXN0b3IsIE5vZGUqIHRhcmdldCk7CisKKyAgICBDb250YWluZXJOb2Rl
KiBhbmNlc3RvcigpIGNvbnN0OworICAgIE5vZGUqIHRhcmdldCgpIGNvbnN0OworICAgIHZvaWQg
aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
Q29udGFpbmVyTm9kZT4gbV9hbmNlc3RvcjsKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Cit9
OworCiBjbGFzcyBOb2RlIDogcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgVHJlZVNoYXJlZDxD
b250YWluZXJOb2RlPiwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSB7CiAgICAgZnJpZW5kIGNsYXNz
IERvY3VtZW50OwogcHVibGljOgpAQCAtMjEyLDYgKzIyNiw4IEBAIHB1YmxpYzoKICAgICBOb2Rl
KiBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdE5vZGUoKTsK
ICAgICBib29sIGlzSW5TaGFkb3dUcmVlKCk7CisgICAgLy8gTm9kZSdzIHBhcmVudCBvciBzaGFk
b3cgdHJlZSBob3N0LgorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdE5vZGUoKTsKIAog
ICAgIC8vIFRoZSBub2RlJ3MgcGFyZW50IGZvciB0aGUgcHVycG9zZSBvZiBldmVudCBjYXB0dXJl
IGFuZCBidWJibGluZy4KICAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUqIGV2ZW50UGFyZW50Tm9k
ZSgpOwpAQCAtMjIwLDcgKzIzNiw3IEBAIHB1YmxpYzoKICAgICBOb2RlKiBlbmNsb3NpbmdMaW5r
RXZlbnRQYXJlbnRPclNlbGYoKTsKIAogICAgIC8vIE5vZGUgYW5jZXN0b3JzIHdoZW4gY29uY2Vy
bmVkIGFib3V0IGV2ZW50IGZsb3cKLSAgICB2b2lkIGV2ZW50QW5jZXN0b3JzKFZlY3RvcjxSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gPiAmYW5jZXN0b3JzKTsKKyAgICB2b2lkIGV2ZW50QW5jZXN0b3Jz
KFZlY3RvcjxFdmVudEFuY2VzdG9yPiAmYW5jZXN0b3JzKTsKIAogICAgIGJvb2wgaXNCbG9ja0Zs
b3coKSBjb25zdDsKICAgICBib29sIGlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1RleHQuY3BwCmlu
ZGV4IDkyOGI5NzU5NmU1Njk5YjU3OWY5M2FhODUzZTViZTViZWIxOGYwMzguLjY3ODRlOTFlMmM0
YzdiZmQ0NzY4Y2M0ZDQxZjcwYmMyMDJjNjI0OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Rl
eHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC0yMzcsMTAgKzIzNywxMSBAQCBi
b29sIFRleHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQogCiBSZW5kZXJP
YmplY3QqIFRleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUqKQogeworICAgIE5vZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKICNp
ZiBFTkFCTEUoU1ZHKQotICAgIGlmIChwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpCisgICAg
aWYgKHBhcmVudE9ySG9zdC0+aXNTVkdFbGVtZW50KCkKICNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05f
T0JKRUNUKQotICAgICAgICAmJiAhcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpm
b3JlaWduT2JqZWN0VGFnKQorICAgICAgICAmJiAhcGFyZW50T3JIb3N0LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2VuZGlmCiAgICAgKQogICAgICAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lVGV4dCh0aGlzLCBkYXRhSW1wbCgpKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiMzM5YjQ1YzhhOGFhYmE4YjYxZTJmZGQ0ZjFmOWY3
MWUyZTM3NDU4Li4yMTg0MGY4YzY0NDRhMzAwMzM3ZDQwNDAyYzg2NzdlZjlhNzMzMjMzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xODAsNiArMTgwLDcgQEAgSFRNTElucHV0RWxl
bWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIC8vIE5lZWQgdG8gcmVtb3ZlIHRoaXMgZnJv
bSB0aGUgZm9ybSB3aGlsZSBpdCBpcyBzdGlsbCBhbiBIVE1MSW5wdXRFbGVtZW50LAogICAgIC8v
IHNvIGNhbid0IHdhaXQgZm9yIHRoZSBiYXNlIGNsYXNzJ3MgZGVzdHJ1Y3RvciB0byBkbyBpdC4K
ICAgICByZW1vdmVGcm9tRm9ybSgpOworICAgIHJlbW92ZVNoYWRvd1N1YnRyZWUoKTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBj
b25zdApAQCAtODkyLDYgKzg5Myw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRU
eXBlKGNvbnN0IFN0cmluZyYgdCkKICAgICAgICAgICAgIGJvb2wgd2FzQXR0YWNoZWQgPSBhdHRh
Y2hlZCgpOwogICAgICAgICAgICAgaWYgKHdhc0F0dGFjaGVkKQogICAgICAgICAgICAgICAgIGRl
dGFjaCgpOworICAgICAgICAgICAgcmVtb3ZlU2hhZG93U3VidHJlZSgpOwogCiAgICAgICAgICAg
ICBib29sIGRpZFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OwogICAgICAgICAgICAgYm9vbCB3YXNQYXNzd29yZEZpZWxkID0gaW5wdXRUeXBlKCkgPT0gUEFT
U1dPUkQ7CkBAIC05MjcsNiArOTI5LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbnB1
dFR5cGUoY29uc3QgU3RyaW5nJiB0KQogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFu
Z2VkKGFsaWduLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNyZWF0ZVNo
YWRvd1N1YnRyZWUoKTsKICAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkgewogICAgICAgICAg
ICAgICAgIGF0dGFjaCgpOwogICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2Vk
Tm9kZSgpID09IHRoaXMpCkBAIC0xNzA1LDcgKzE3MDgsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkK
ICAgICAgICAgICAgIGlmIChpc1RleHRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBhbGwgaW5wdXQgdHlwZXMgZG8g
dGhpcyBpbnN0ZWFkIG9mIHVwZGF0ZUZyb21FbGVtZW50LgorICAgICAgICBpZiAoaW5wdXRUeXBl
KCkgPT0gUkFOR0UgJiYgcmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5l
ZWRzTGF5b3V0KHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHNh
bml0aXplVmFsdWUodmFsdWUpKTsKIApAQCAtMjUzMSw4ICsyNTM4LDE1IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgIGlmIChpc1Rl
eHRGaWVsZCgpICYmIHJlbmRlcmVyKCkgJiYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZ0LT5p
c0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmJsdXJFdmVudCB8fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNF
dmVudCkpCiAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkp
LT5mb3J3YXJkRXZlbnQoZXZ0KTsKIAotICAgIGlmIChpbnB1dFR5cGUoKSA9PSBSQU5HRSAmJiBy
ZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2dC0+aXNEcmFnRXZlbnQoKSB8
fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKLSAgICAgICAgdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIo
KSktPmZvcndhcmRFdmVudChldnQpOworICAgIGlmIChpbnB1dFR5cGUoKSA9PSBSQU5HRSAmJiBy
ZW5kZXJlcigpICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgTW91c2VFdmVudCog
bW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQt
PmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgIFNsaWRlclRodW1iRWxlbWVu
dCogdGh1bWIgPSB0b1NsaWRlclRodW1iRWxlbWVudChzaGFkb3coKSk7CisgICAgICAgICAgICBB
U1NFUlQodGh1bWIpOworICAgICAgICAgICAgdGh1bWItPmRyYWdGcm9tKG1vdXNlRXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAoIWNhbGxCYXNlQ2xhc3NFYXJseSAmJiAhZXZ0
LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CkBAIC0yOTU4LDYgKzI5NzIsNTYgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiAgICAgfQogfQog
CisvLyBGSVhNRTogT25jZSBtb3N0IG9mIHRoZSBzaGFkb3cgRE9NIGlzIGhhbmRsZWQgdGhpcyB3
YXksIHdlIHNob3VsZCBtb3ZlIHRoaXMKKy8vICAgICAgICB0byBFbGVtZW50LgordHlwZWRlZiBI
YXNoTWFwPEhUTUxJbnB1dEVsZW1lbnQqLCBSZWZQdHI8Tm9kZT4gPiBTaGFkb3dSb290TWFwOwor
c3RhdGljIFNoYWRvd1Jvb3RNYXAqIHNoYWRvd1Jvb3RNYXAoKQoreworICAgIHN0YXRpYyBTaGFk
b3dSb290TWFwKiBzX21hcCA9IDA7CisgICAgaWYgKCFzX21hcCkKKyAgICAgICAgc19tYXAgPSBu
ZXcgU2hhZG93Um9vdE1hcCgpOworICAgIHJldHVybiBzX21hcDsKK30KKworTm9kZSogSFRNTElu
cHV0RWxlbWVudDo6c2hhZG93KCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHRvIG90aGVyIGlu
cHV0IHR5cGVzLgorICAgIGlmIChpbnB1dFR5cGUoKSAhPSBSQU5HRSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0J3Mgbm90IGlsbGVnYWwg
dG8gcXVlcnkgc2hhZG93KCkgcHJpb3IKKyAgICAvLyB0byBjcmVhdGlvbiBvZiB0aGUgaW5wdXQg
dHlwZSwgYnV0IGl0J3MgYW4gaW5kaWNhdG9yIHRoYXQgc29tZXRoaW5nCisgICAgLy8gZWxzZSBo
YWQgZ29uZSB3cm9uZy4KKyAgICBBU1NFUlQoc2hhZG93Um9vdE1hcCgpLT5jb250YWlucyh0aGlz
KSk7CisgICAgcmV0dXJuIHNoYWRvd1Jvb3RNYXAoKS0+Z2V0KHRoaXMpLmdldCgpOworfQorCit2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIC8vIEZJ
WE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMuCisgICAgaWYgKGlucHV0VHlwZSgpICE9
IFJBTkdFKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFzaGFkb3dSb290TWFwKCktPmNv
bnRhaW5zKHRoaXMpKTsKKyAgICBSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiB0aHVtYiA9IFNs
aWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKHRoaXMpOworICAgIHNoYWRvd1Jvb3RNYXAoKS0+c2V0
KHRoaXMsIHRodW1iLmdldCgpKTsKK30KKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVk
IHVwIHRvIEVsZW1lbnQgYW5kIHJlbW92YWwvY3JlYXRpb24gaGFuZGxpbmcgbWFkZQorLy8gICAg
ICAgIGdlbmVyaWMuCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1N1YnRyZWUo
KQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMuCisgICAgaWYg
KGlucHV0VHlwZSgpICE9IFJBTkdFKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHNoYWRv
d1Jvb3RNYXAoKS0+Y29udGFpbnModGhpcykpOworICAgIFJlZlB0cjxOb2RlPiB0aHVtYiA9IHNo
YWRvd1Jvb3RNYXAoKS0+dGFrZSh0aGlzKTsKKyAgICBkb2N1bWVudCgpLT5yZW1vdmVGb2N1c2Vk
Tm9kZU9mU3VidHJlZSh0aHVtYi5nZXQoKSk7CisKKyAgICBpZiAodGh1bWItPmluRG9jdW1lbnQo
KSkKKyAgICAgICAgdGh1bWItPnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICBlbHNlCisgICAg
ICAgIHRodW1iLT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7Cit9CisKICNpZiBFTkFCTEUoV0NTUykK
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKQog
ewpAQCAtMzAwMyw0ICszMDY3LDE1OCBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3BlZWNo
RW5hYmxlZCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorLy8gRklYTUU6IE1vdmUgdG8gaXRzIG93biBj
bGFzc2VzCitSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoTm9kZSogbm9kZSkK
KyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6
OmxheW91dCgpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgd2F5IHRv
IG5vdCBoYXJkLWNvZGUgdGhpcy4KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwYXJl
bnQoKS0+c3R5bGUoKTsKKyAgICBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlk
ZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpOworICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFuY2Uo
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFwcGVh
cmFuY2UoTWVkaWFTbGlkZXJUaHVtYlBhcnQpOworICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQorICAgICAgICBzdHlsZSgpLT5z
ZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKKworICAgIGlmIChzdHls
ZSgpLT5oYXNBcHBlYXJhbmNlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBh
c3MgdGhlIHN0eWxlLCBub3QgdGhlIHJlbmRlcmVyLCB0byB0aGUgdGhlbWUuCisgICAgICAgIHRo
ZW1lKCktPmFkanVzdFNsaWRlclRodW1iU2l6ZSh0aGlzKTsKKyAgICB9CisgICAgUmVuZGVyQmxv
Y2s6OmxheW91dCgpOworfQorCitpbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50OjpTbGlkZXJUaHVt
YkVsZW1lbnQoRWxlbWVudCogc2hhZG93SG9zdCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRh
Zywgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fc2hhZG93SG9zdChzaGFkb3dIb3N0
KQorICAgICwgbV9pbkRyYWdNb2RlKGZhbHNlKQoreworfQorCitpbmxpbmUgUGFzc1JlZlB0cjxT
bGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKEVsZW1lbnQqIHNo
YWRvd0hvc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQo
c2hhZG93SG9zdCkpOworfQorCitSZW5kZXJPYmplY3QqIFNsaWRlclRodW1iRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNsaWRlclRodW1iKHRoaXMpOworfQorCit2b2lkIFNsaWRl
clRodW1iRWxlbWVudDo6ZHJhZ0Zyb20oY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIHNl
dFBvc2l0aW9uKHBvaW50KTsKKyAgICBzdGFydERyYWdnaW5nKCk7Cit9CisKK3ZvaWQgU2xpZGVy
VGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAg
Ly8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBzaGFkb3dQYXJlbnROb2RlIGlzIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudC4KKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dQYXJlbnROb2RlKCkpOworICAgIEFTU0VS
VChpbnB1dCk7CisgICAgQVNTRVJUKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQocmVu
ZGVyZXIoKSk7CisKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm47CisgICAgSW50UG9pbnQgb2Zmc2V0ID0gcm91bmRlZEludFBvaW50KGlu
cHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlKSk7Cisg
ICAgUmVuZGVyU3R5bGUqIHNsaWRlclN0eWxlID0gaW5wdXQtPnJlbmRlcmVyKCktPnN0eWxlKCk7
CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gc2xpZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlk
ZXJWZXJ0aWNhbFBhcnQgfHwgc2xpZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVt
ZVNsaWRlclBhcnQ7CisKKyAgICBpbnQgdHJhY2tTaXplOworICAgIGludCBwb3NpdGlvbjsKKyAg
ICBpbnQgY3VycmVudFBvc2l0aW9uOworICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAgIHRy
YWNrU2l6ZSA9IGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEhlaWdodCgpIC0gcmVuZGVyQm94
KCktPmhlaWdodCgpOworICAgICAgICBwb3NpdGlvbiA9IG9mZnNldC55KCkgLSByZW5kZXJCb3go
KS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSByZW5kZXJCb3goKS0+
eSgpIC0gaW5wdXQtPnJlbmRlckJveCgpLT5jb250ZW50Qm94UmVjdCgpLnkoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0cmFja1NpemUgPSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRXaWR0
aCgpIC0gcmVuZGVyQm94KCktPndpZHRoKCk7CisgICAgICAgIHBvc2l0aW9uID0gb2Zmc2V0Lngo
KSAtIHJlbmRlckJveCgpLT53aWR0aCgpIC8gMjsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uID0g
cmVuZGVyQm94KCktPngoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEJveFJlY3QoKS54
KCk7CisgICAgfQorICAgIHBvc2l0aW9uID0gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tTaXpl
KSk7CisKKyAgICBTdGVwUmFuZ2UgcmFuZ2UoaW5wdXQpOworICAgIGRvdWJsZSBmcmFjdGlvbiA9
IHN0YXRpY19jYXN0PGRvdWJsZT4ocG9zaXRpb24pIC8gdHJhY2tTaXplOworICAgIGlmIChpc1Zl
cnRpY2FsKQorICAgICAgICBmcmFjdGlvbiA9IDEgLSBmcmFjdGlvbjsKKyAgICBkb3VibGUgdmFs
dWUgPSByYW5nZS5jbGFtcFZhbHVlKHJhbmdlLnZhbHVlRnJvbVByb3BvcnRpb24oZnJhY3Rpb24p
KTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vIGxvbmdlciBiZWluZyBzZXQgZnJvbSByZW5k
ZXJlci4KKyAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoc2VyaWFsaXplRm9yTnVtYmVy
VHlwZSh2YWx1ZSkpOworCisgICAgLy8gRklYTUU6IFdoeSBleGl0IGhlcmUgYW5kIG5vdCBlYXJs
aWVyLCBiZWZvcmUgc2V0dGluZyB0aGUgdmFsdWUgYWdhaW4/CisgICAgaWYgKHBvc2l0aW9uID09
IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIoKS0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogSXQgc2VlbXMgbGlrZSB0aGlzIGNv
dWxkIHNlbmQgZXh0cmEgY2hhbmdlIGV2ZW50cyBpZiB0aGUgc2FtZSB2YWx1ZSBpcyBzZXQKKyAg
ICAvLyBtdWx0aXBsZSB0aW1lcyB3aXRoIG5vIGxheW91dCBpbiBiZXR3ZWVuLgorICAgIGlucHV0
LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKK30KKwordm9pZCBTbGlkZXJUaHVt
YkVsZW1lbnQ6OnN0YXJ0RHJhZ2dpbmcoKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2Fw
dHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAgICAgICBtX2luRHJhZ01vZGUgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Cisg
ICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VF
dmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CisKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpc0xlZnRCdXR0b24pIHsKKyAgICAgICAgc3RhcnREcmFn
Z2luZygpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNldXBF
dmVudCAmJiBpc0xlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKG1faW5EcmFnTW9kZSkgeworICAg
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUoMCk7CisgICAgICAgICAgICBtX2luRHJhZ01vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0
KHRydWUpOworICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBzZXREZWZh
dWx0SGFuZGxlZCBoZXJlLCBidXQgd2UgbmVlZCB0byBmYWxsIHRocm91Z2ggdG8ga2VlcAorICAg
ICAgICAgICAgLy8gICAgICAgIE1lZGlhRWxlbWVudCBiaXRzIHdvcmtpbmcuIEFkZCBzZXREZWZh
dWx0SGFuZGxlZCBoZXJlIG9uY2UgTWVkaWFFbGVtZW50IGlzCisgICAgICAgICAgICAvLyAgICAg
ICAgcmVmYWN0b3JlZCB0byB1c2Ugc2FuZSBzaGFkb3cgRE9NLgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1v
dXNlbW92ZUV2ZW50KSB7CisgICAgICAgIGlmIChtX2luRHJhZ01vZGUpIHsKKyAgICAgICAgICAg
IHNldFBvc2l0aW9uKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7CisgICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKK30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRldGFjaCgpCit7CisgICAgaWYg
KG1faW5EcmFnTW9kZSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5n
TW91c2VFdmVudHNOb2RlKDApOworICAgIH0KKyAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA2NTdiNDY4
MTNjNjc3NTFlYmI1ZDA3MTc4OGJmZTUxNzI3ZjBlY2VjLi4yZDAwYzQwOGFhMzAxMDdmODJlMWUy
Y2FlNWI5NGY3ODY2YmMyYjA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTIxNSw2ICsy
MTUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdDU1MpCiAgICAgdm9pZCBzZXRXYXBJbnB1dEZv
cm1hdChTdHJpbmcmIG1hc2spOwogI2VuZGlmCisgICAgdmlydHVhbCBOb2RlKiBzaGFkb3coKTsK
IAogcHJvdGVjdGVkOgogICAgIEhUTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwpAQCAtMzA4LDcgKzMwOSw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKCk7Ci0gICAgCisKICAgICB2b2lkIGhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEV2ZW50Kik7CiAgICAgUGFzc1JlZlB0cjxIVE1M
Rm9ybUVsZW1lbnQ+IGNyZWF0ZVRlbXBvcmFyeUZvcm1Gb3JJc0luZGV4KCk7CiAgICAgLy8gSGVs
cGVyIGZvciBnZXRBbGxvd2VkVmFsdWVTdGVwKCk7CkBAIC0zMzIsNiArMzMzLDEwIEBAIHByaXZh
dGU6CiAgICAgLy8gREFURVRJTUVMT0NBTCwgTU9OVEgsIFRJTUUsIGFuZCBXRUVLLgogICAgIFN0
cmluZyBzZXJpYWxpemVGb3JEYXRlVGltZVR5cGVzKGRvdWJsZSkgY29uc3Q7CiAKKyAgICAvLyBD
cmVhdGUgKGFuZCByZW1vdmUpIHRoZSBzaGFkb3cgc3VidHJlZSBmb3IgZWxlbWVudHMgdGhhdCBy
ZXF1aXJlIGl0LgorICAgIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOworICAgIHZvaWQgcmVt
b3ZlU2hhZG93U3VidHJlZSgpOworCiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgIEhUTUxEYXRh
TGlzdEVsZW1lbnQqIGRhdGFMaXN0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAyM2MyMmFhMjJmYzExY2JkNmRkODlkMDQ5MjRkMDYy
NTQyZTk3NzQ3Li45Mjc0Y2JmOGM1NTIzMTBlN2NjYTBhZjVmMmJhNWYxNmIyODI0Y2EwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01OTMsMTMgKzU5MywxMyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBu
b2RlSWQsIGxvbmcqIG91dE5vZGVJZCwgUgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUg
Tm9kZSdzIEV2ZW50IEFuY2VzdG9ycyAobm90IGluY2x1ZGluZyBzZWxmKQotICAgIFZlY3RvcjxS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gPiBhbmNlc3RvcnM7CisgICAgVmVjdG9yPEV2ZW50QW5jZXN0
b3I+IGFuY2VzdG9yczsKICAgICBub2RlLT5ldmVudEFuY2VzdG9ycyhhbmNlc3RvcnMpOwogCiAg
ICAgLy8gTm9kZXMgYW5kIHRoZWlyIExpc3RlbmVycyBmb3IgdGhlIGNvbmNlcm5lZCBldmVudCB0
eXBlcyAob3JkZXIgaXMgdG9wIHRvIGJvdHRvbSkKICAgICBWZWN0b3I8RXZlbnRMaXN0ZW5lcklu
Zm8+IGV2ZW50SW5mb3JtYXRpb247CiAgICAgZm9yIChzaXplX3QgaSA9IGFuY2VzdG9ycy5zaXpl
KCk7IGk7IC0taSkgewotICAgICAgICBDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGFuY2VzdG9y
c1tpIC0gMV0uZ2V0KCk7CisgICAgICAgIENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0
b3JzW2kgLSAxXS5hbmNlc3RvcigpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV2
ZW50VHlwZXNMZW5ndGg7ICsraikgewogICAgICAgICAgICAgQXRvbWljU3RyaW5nJiB0eXBlID0g
ZXZlbnRUeXBlc1tqXTsKICAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aGFzRXZlbnRMaXN0ZW5l
cnModHlwZSkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDk1MGU4NTdlM2I3ODBlZTM3NjNmNjQw
NzU3NGMwMjg3ZDY4YjJjNWUuLjA4ZmI3M2IyZWI5NWQ0NjNlODNjNzAwNjAyZmNkODk5YzM2MTI1
OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xNzcyLDYgKzE3NzIsNyBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29u
c3QgUGxhdGZvcm1NbwogICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgYSB0ZXh0IG5v
ZGUsIGRpc3BhdGNoIG9uIHRoZSBwYXJlbnQgbm9kZSAtIHJkYXI6Ly80MTk2NjQ2CiAgICAgICAg
IGlmIChyZXN1bHQgJiYgcmVzdWx0LT5pc1RleHROb2RlKCkpCiAgICAgICAgICAgICByZXN1bHQg
PSByZXN1bHQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBwcm9w
ZXIgcmUtdGFyZ2V0aW5nIG9mIGV2ZW50cyBpbnNpZGUgb2YgdGhlIHNoYWRvdyB0cmVlLgogICAg
ICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5zaGFkb3dBbmNl
c3Rvck5vZGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRl
eCA4NzBmMGViNDZiZTM4MTY4YzU5MDgyODljYmU5NGJmNzU1YWVlZTIyLi4zNTZjYzUwZWMzYzRm
ZmMxZTNiYzMzYTE1MTAwYzI2NWZhYzY2MDk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5jcHAKQEAgLTgwMCw3ICs4MDAsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICBpZiAo
YXBwZWFyYW5jZSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIG9wdGlvbi5vcmllbnRh
dGlvbiA9IFF0OjpWZXJ0aWNhbDsKIAotICAgIGlmIChyZW5kZXJTbGlkZXItPmluRHJhZ01vZGUo
KSkgeworICAgIFNsaWRlclRodW1iRWxlbWVudCogc2xpZGVyVGh1bWIgPSB0b1NsaWRlclRodW1i
RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVuZGVyU2xpZGVyLT5ub2RlKCkpLT5zaGFk
b3coKSk7CisgICAgaWYgKCFzbGlkZXJUaHVtYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoc2xpZGVyVGh1bWItPmluRHJhZ01vZGUoKSkgewogICAgICAgICBvcHRpb24uYWN0aXZl
U3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBhYWViM2UyNWNjMzRiNzdiMzViY2I1NGQ3OTVl
OGMxM2FiYWExMjg2Li5jMjhkYzQxNWIxMGQzNWE4ODIyZmNlMDgyMDk4NTQ4MzJhYzVlOTI3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC00MjMsNiAr
NDIzLDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0
YWNoKCkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyB3aG9sZSBtZXRob2QgbmVlZHMgdG8gYmUgcmVt
b3ZlZC4gSXQgZHVwbGljYXRlcyB0aGUgd29yayBvZiBFbGVtZW50OjphdHRhY2goKQogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKICAgICBpZiAoIXN0
eWxlKQogICAgICAgICByZXR1cm47CkBAIC00NDMsNiArNDQ0LDggQEAgdm9pZCBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIHBhcmVudCgpLT5yZW5kZXJlcigpLT5h
ZGRDaGlsZChyZW5kZXJlciwgc2libGluZyA/IHNpYmxpbmctPnJlbmRlcmVyKCkgOiAwKTsKICAg
ICB9ICAKICAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKKyAgICBpZiAoTm9kZSogc2hhZG93
Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKIH0KIAogdm9p
ZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKQEAgLTcwNiw4ICs3MDks
OCBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRDdXJyZW50VGltZSh0
aW1lLCBlYyk7CiAgICAgfQogCi0gICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNs
aWRlcihyZW5kZXJlcigpKTsKLSAgICBpZiAoc2xpZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgp
KQorICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWIgPSB0b1NsaWRlclRodW1iRWxlbWVudChz
aGFkb3coKSk7CisgICAgaWYgKHRodW1iICYmIHRodW1iLT5pbkRyYWdNb2RlKCkpCiAgICAgICAg
IHRvUmVuZGVyTWVkaWEobWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpLT51cGRhdGVUaW1lRGlz
cGxheSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBF
dmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGUyMDBmZjlkNmJkZTc3MTVh
MDYxNmQyZjI3ZGVlZTU0ZmMxMzFlY2EuLmYzZGEyM2IzNGEwYmVmMzA2M2Y2Mjk0MWRmNzRkNGMw
YWFiNTRhNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjM3Niw2ICsyMzc2
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyT2JqZWN0OjpnZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgUmUKICAgICB9CiAKICAgICBOb2RlKiBuID0gbm9k
ZSgpOworICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIG4t
PnBhcmVudE9ySG9zdE5vZGUoKQogICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkp
CiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFuKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5jcHAKaW5kZXggYTFiYzcxYWQxMzFmYjM0ZWViMDJlNTdmZmMyMzFhZjgyMDM1
MTIxZi4uMmVlY2U5NmQ1MGRiNzk4MTJlYWY3NzczN2RjOGMxMTAxNDY3OTZjMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTbGlkZXIuY3BwCkBAIC01Miw5OCArNTIsNiBAQCBzdGF0aWMgZG91YmxlIHNs
aWRlclBvc2l0aW9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIHJhbmdl
LnByb3BvcnRpb25Gcm9tVmFsdWUocmFuZ2UudmFsdWVGcm9tRWxlbWVudChlbGVtZW50KSk7CiB9
CiAKLWNsYXNzIFNsaWRlclRodW1iRWxlbWVudCA6IHB1YmxpYyBTaGFkb3dCbG9ja0VsZW1lbnQg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gY3Jl
YXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOwotCi0gICAgYm9vbCBpbkRyYWdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbkRyYWdNb2RlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLQotcHJp
dmF0ZTogICAgICAgIAotICAgIFNsaWRlclRodW1iRWxlbWVudChIVE1MRWxlbWVudCogc2hhZG93
UGFyZW50KTsKLQotICAgIEZsb2F0UG9pbnQgbV9vZmZzZXRUb1RodW1iOwotICAgIGJvb2wgbV9p
bkRyYWdNb2RlOwotfTsKLQotaW5saW5lIFNsaWRlclRodW1iRWxlbWVudDo6U2xpZGVyVGh1bWJF
bGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0gICAgOiBTaGFkb3dCbG9ja0VsZW1l
bnQoc2hhZG93UGFyZW50KQotICAgICwgbV9pbkRyYWdNb2RlKGZhbHNlKQotewotfQotCi1pbmxp
bmUgUGFzc1JlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodW1iRWxlbWVudDo6Y3Jl
YXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTbGlkZXJUaHVtYkVsZW1lbnQoc2hhZG93UGFyZW50KSk7Ci19Ci0KLXZvaWQgU2xpZGVyVGh1
bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBTaGFkb3dCbG9ja0VsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
TW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7
Ci0gICAgYm9vbCBpc0xlZnRCdXR0b24gPSBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0
dG9uOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsK
LQotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlz
TGVmdEJ1dHRvbikgewotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiByZW5kZXJl
cigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVy
KHJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmIChzbGlkZXIpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc2xpZGVyLT5tb3VzZUV2ZW50SXNJblRodW1iKG1vdXNlRXZlbnQpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdGVkIHRoZSB0aHVtYiwgd2Ugd2FudCB0
aGUgY3Vyc29yIHRvIGFsd2F5cyBzdGF5IGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBz
YW1lIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0aHVtYi4KLSAgICAgICAgICAgICAgICAgICAg
bV9vZmZzZXRUb1RodW1iID0gc2xpZGVyLT5tb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYihtb3VzZUV2
ZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBhcmUgb3V0c2lkZSB0aGUgdGh1bWIsIG1vdmUgdGhlIHRodW1iIHRvIHRoZSBwb2ludCB3ZXJl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNsaWNrZWQuIFdlJ2xsIGJlIGV4YWN0bHkgYXQg
dGhlIGNlbnRlciBvZiB0aGUgdGh1bWIuCi0gICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9U
aHVtYi5zZXRYKDApOwotICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRvVGh1bWIuc2V0WSgw
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtX2luRHJhZ01vZGUgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoc2hhZG93UGFyZW50KCkpOwotICAgICAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7Ci0gICAgICAgIGlm
IChtX2luRHJhZ01vZGUpIHsKLSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0
Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAotICAgICAgICAgICAgbV9pbkRyYWdN
b2RlID0gZmFsc2U7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewotICAgICAgICBpZiAobV9pbkRyYWdNb2Rl
ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIFJl
bmRlclNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKS0+cGFyZW50KCkp
OwotICAgICAgICAgICAgaWYgKHNsaWRlcikgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
Y3VyUG9pbnQgPSBzbGlkZXItPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxv
Y2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBldmVudE9m
ZnNldChjdXJQb2ludC54KCkgKyBtX29mZnNldFRvVGh1bWIueCgpLCBjdXJQb2ludC55KCkgKyBt
X29mZnNldFRvVGh1bWIueSgpKTsKLSAgICAgICAgICAgICAgICBzbGlkZXItPnNldFZhbHVlRm9y
UG9zaXRpb24oc2xpZGVyLT5wb3NpdGlvbkZvck9mZnNldChldmVudE9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFNoYWRvd0Jsb2Nr
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgU2xpZGVyVGh1
bWJFbGVtZW50OjpkZXRhY2goKQotewotICAgIGlmIChtX2luRHJhZ01vZGUpIHsKLSAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAK
LSAgICB9Ci0gICAgU2hhZG93QmxvY2tFbGVtZW50OjpkZXRhY2goKTsKLX0KLQogUmVuZGVyU2xp
ZGVyOjpSZW5kZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICA6IFJlbmRl
ckJsb2NrKGVsZW1lbnQpCiB7CkBAIC0xNTEsOCArNTksNiBAQCBSZW5kZXJTbGlkZXI6OlJlbmRl
clNsaWRlcihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogCiBSZW5kZXJTbGlkZXI6On5SZW5k
ZXJTbGlkZXIoKQogewotICAgIGlmIChtX3RodW1iKQotICAgICAgICBtX3RodW1iLT5kZXRhY2go
KTsKIH0KIAogaW50IFJlbmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBj
b25zdApAQCAtMTkzLDUwICs5OSwzNSBAQCB2b2lkIFJlbmRlclNsaWRlcjo6Y2FsY1ByZWZXaWR0
aHMoKQogdm9pZCBSZW5kZXJTbGlkZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgUmVuZGVyQmxvY2s6OnN0
eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAgIGlmIChtX3RodW1iKQotICAgICAg
ICBtX3RodW1iLT5yZW5kZXJlcigpLT5zZXRTdHlsZShjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkp
KTsKLQogICAgIHNldFJlcGxhY2VkKGlzSW5saW5lKCkpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBSZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQorc3RhdGljIFJlbmRlckJveCogdGh1bWJSZW5kZXJCb3goTm9kZSogbm9k
ZSkKIHsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBw
c2V1ZG9TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFNMSURFUl9USFVNQik7Ci0gICAgaWYg
KHBzZXVkb1N0eWxlKQotICAgICAgICAvLyBXZSBtYXkgYmUgc2hhcmluZyBzdHlsZSB3aXRoIGFu
b3RoZXIgc2xpZGVyLCBidXQgd2UgbXVzdCBub3Qgc2hhcmUgdGhlIHRodW1iIHN0eWxlLgotICAg
ICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwc2V1ZG9TdHlsZSk7Ci0gICAgZWxzZQot
ICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLQotICAgIGlmIChwYXJlbnRT
dHlsZSkKLSAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKLQotICAgIHN0
eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAgIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgc3R5bGUtPnNldEFwcGVhcmFuY2Uo
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwotICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRBcHBl
YXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOwotICAgIGVsc2UgaWYgKHBhcmVudFN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZS0+c2V0
QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxl
LT5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLQotICAgIHJldHVy
biBzdHlsZS5yZWxlYXNlKCk7CisgICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYiA9IHRvU2xp
ZGVyVGh1bWJFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+c2hh
ZG93KCkpOworICAgIHJldHVybiB0aHVtYiA/IHRvUmVuZGVyQm94KHRodW1iLT5yZW5kZXJlcigp
KSA6IDA7CiB9CiAKIEludFJlY3QgUmVuZGVyU2xpZGVyOjp0aHVtYlJlY3QoKQogewotICAgIGlm
ICghbV90aHVtYikKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRodW1iUmVuZGVyQm94KG5v
ZGUoKSk7CisgICAgaWYgKCFyZW5kZXJCb3gpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAK
LSAgICBJbnRSZWN0IHRodW1iUmVjdDsKLSAgICBSZW5kZXJCb3gqIHRodW1iID0gdG9SZW5kZXJC
b3gobV90aHVtYi0+cmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIHJlbmRlckJveC0+ZnJhbWVSZWN0
KCk7Cit9CiAKLSAgICB0aHVtYlJlY3Quc2V0V2lkdGgodGh1bWItPnN0eWxlKCktPndpZHRoKCku
Y2FsY01pblZhbHVlKGNvbnRlbnRXaWR0aCgpKSk7Ci0gICAgdGh1bWJSZWN0LnNldEhlaWdodCh0
aHVtYi0+c3R5bGUoKS0+aGVpZ2h0KCkuY2FsY01pblZhbHVlKGNvbnRlbnRIZWlnaHQoKSkpOwor
dm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKworICAgIC8vIEZJWE1FOiBFbGltaW5hdGUg
dGhpcyB0d2Vha2luZyBvZiB0aGUgdGh1bWIgcmVjdCBjb21wbGV0ZWx5LiBJdCBzaG91bGQgbm90
IGJlIG5lY2Vzc2FyeS4KKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRodW1iUmVuZGVyQm94
KG5vZGUoKSk7CisgICAgaWYgKCFyZW5kZXJCb3gpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFJlY3QgdGh1bWJSZWN0ID0gcmVuZGVyQm94LT5mcmFtZVJlY3QoKTsKIAogICAgIGRvdWJsZSBm
cmFjdGlvbiA9IHNsaWRlclBvc2l0aW9uKHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihu
b2RlKCkpKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsKQEAg
LTI0OCwxNzkgKzEzOSw3IEBAIEludFJlY3QgUmVuZGVyU2xpZGVyOjp0aHVtYlJlY3QoKQogICAg
ICAgICB0aHVtYlJlY3Quc2V0WShjb250ZW50UmVjdC55KCkgKyAoY29udGVudFJlY3QuaGVpZ2h0
KCkgLSB0aHVtYlJlY3QuaGVpZ2h0KCkpIC8gMik7CiAgICAgfQogCi0gICAgcmV0dXJuIHRodW1i
UmVjdDsKLX0KLQotdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCi17Ci0gICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwotCi0gICAgUmVuZGVyQm94KiB0aHVtYiA9IG1fdGh1bWIgPyB0b1JlbmRl
ckJveChtX3RodW1iLT5yZW5kZXJlcigpKSA6IDA7Ci0KLSAgICBJbnRTaXplIGJhc2VTaXplKGJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpLCBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOwotCi0gICAg
aWYgKHRodW1iKSB7Ci0gICAgICAgIC8vIEFsbG93IHRoZSB0aGVtZSB0byBzZXQgdGhlIHNpemUg
b2YgdGhlIHRodW1iLgotICAgICAgICBpZiAodGh1bWItPnN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBhc3MgdGhlIHN0eWxlLCBu
b3QgdGhlIHJlbmRlcmVyLCB0byB0aGUgdGhlbWUuCi0gICAgICAgICAgICB0aGVtZSgpLT5hZGp1
c3RTbGlkZXJUaHVtYlNpemUodGh1bWIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVNpemUu
ZXhwYW5kKHRodW1iLT5zdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5WYWx1ZSgwKSwgdGh1bWItPnN0
eWxlKCktPmhlaWdodCgpLmNhbGNNaW5WYWx1ZSgwKSk7Ci0gICAgfQotCi0gICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwot
Ci0gICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwotCi0gICAgc2V0U2l6ZShiYXNlU2l6ZSk7
Ci0gICAgY2FsY1dpZHRoKCk7Ci0gICAgY2FsY0hlaWdodCgpOwotCi0gICAgaWYgKHRodW1iKSB7
Ci0gICAgICAgIGlmIChvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgICAgIHRodW1iLT5zZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKLQotICAgICAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBzaXplKCkpOwotCi0gICAgICAgIEludFJl
Y3Qgb2xkVGh1bWJSZWN0ID0gdGh1bWItPmZyYW1lUmVjdCgpOwotCi0gICAgICAgIHRodW1iLT5s
YXlvdXRJZk5lZWRlZCgpOwotCi0gICAgICAgIEludFJlY3QgcmVjdCA9IHRodW1iUmVjdCgpOwot
ICAgICAgICB0aHVtYi0+c2V0RnJhbWVSZWN0KHJlY3QpOwotICAgICAgICBpZiAodGh1bWItPmNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQotICAgICAgICAgICAgdGh1bWItPnJlcGFpbnRE
dXJpbmdMYXlvdXRJZk1vdmVkKG9sZFRodW1iUmVjdCk7Ci0KLSAgICAgICAgc3RhdGVQdXNoZXIu
cG9wKCk7Ci0gICAgICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkKHRodW1iKTsKLSAgICB9Ci0KLSAg
ICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7ICAgIAotCi0gICAgc2V0TmVlZHNMYXlv
dXQoZmFsc2UpOwotfQotCi12b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQot
ewotICAgIC8vIExheW91dCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgdGh1bWIncyBzaXplIGFuZCBw
b3NpdGlvbi4KLSAgICBpZiAoIW1fdGh1bWIpIHsKLSAgICAgICAgbV90aHVtYiA9IFNsaWRlclRo
dW1iRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSgpKSk7Ci0g
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGh1bWJTdHlsZSA9IGNyZWF0ZVRodW1iU3R5bGUo
c3R5bGUoKSk7Ci0gICAgICAgIG1fdGh1bWItPnNldFJlbmRlcmVyKG1fdGh1bWItPmNyZWF0ZVJl
bmRlcmVyKHJlbmRlckFyZW5hKCksIHRodW1iU3R5bGUuZ2V0KCkpKTsKLSAgICAgICAgbV90aHVt
Yi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUodGh1bWJTdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICBt
X3RodW1iLT5zZXRBdHRhY2hlZCgpOwotICAgICAgICBtX3RodW1iLT5zZXRJbkRvY3VtZW50KCk7
Ci0gICAgICAgIGFkZENoaWxkKG1fdGh1bWItPnJlbmRlcmVyKCkpOwotICAgIH0KLSAgICBzZXRO
ZWVkc0xheW91dCh0cnVlKTsKLX0KLQotYm9vbCBSZW5kZXJTbGlkZXI6Om1vdXNlRXZlbnRJc0lu
VGh1bWIoTW91c2VFdmVudCogZXZ0KQotewotICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKFZJREVPKQot
ICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0IHx8IHN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpIHsKLSAgICAgICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50ICpzbGlkZXJUaHVtYiA9IHN0YXRpY19jYXN0PE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudCo+KG1fdGh1bWItPnJlbmRlcmVyKCktPm5vZGUoKSk7Ci0gICAgICAg
IHJldHVybiBzbGlkZXJUaHVtYi0+aGl0VGVzdChldnQtPmFic29sdXRlTG9jYXRpb24oKSk7Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5k
ZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5i
b3JkZXJCb3hSZWN0KCk7Ci0gICAgcmV0dXJuIHRodW1iQm91bmRzLmNvbnRhaW5zKHJvdW5kZWRJ
bnRQb2ludChsb2NhbFBvaW50KSk7Ci19Ci0KLUZsb2F0UG9pbnQgUmVuZGVyU2xpZGVyOjptb3Vz
ZUV2ZW50T2Zmc2V0VG9UaHVtYihNb3VzZUV2ZW50KiBldnQpCi17Ci0gICAgQVNTRVJUKG1fdGh1
bWIgJiYgbV90aHVtYi0+cmVuZGVyZXIoKSk7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0g
bV90aHVtYi0+cmVuZGVyQm94KCktPmFic29sdXRlVG9Mb2NhbChldnQtPmFic29sdXRlTG9jYXRp
b24oKSwgZmFsc2UsIHRydWUpOwotICAgIEludFJlY3QgdGh1bWJCb3VuZHMgPSBtX3RodW1iLT5y
ZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpOwotICAgIEZsb2F0UG9pbnQgb2Zmc2V0OwotICAg
IG9mZnNldC5zZXRYKHRodW1iQm91bmRzLngoKSArIHRodW1iQm91bmRzLndpZHRoKCkgLyAyIC0g
bG9jYWxQb2ludC54KCkpOwotICAgIG9mZnNldC5zZXRZKHRodW1iQm91bmRzLnkoKSArIHRodW1i
Qm91bmRzLmhlaWdodCgpIC8gMiAtIGxvY2FsUG9pbnQueSgpKTsKLSAgICByZXR1cm4gb2Zmc2V0
OwotfQotCi12b2lkIFJlbmRlclNsaWRlcjo6c2V0VmFsdWVGb3JQb3NpdGlvbihpbnQgcG9zaXRp
b24pCi17Ci0gICAgaWYgKCFtX3RodW1iIHx8ICFtX3RodW1iLT5yZW5kZXJlcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyB2
YWx1ZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24sIGFuZCBzZW5kIGl0IHRvIHRoZSBlbGVtZW50Lgot
ICAgIFN0ZXBSYW5nZSByYW5nZShlbGVtZW50KTsKLSAgICBkb3VibGUgZnJhY3Rpb24gPSBzdGF0
aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIHRyYWNrU2l6ZSgpOwotICAgIGlmIChzdHlsZSgp
LT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIGZyYWN0aW9uID0gMSAtIGZy
YWN0aW9uOwotICAgIGRvdWJsZSB2YWx1ZSA9IHJhbmdlLmNsYW1wVmFsdWUocmFuZ2UudmFsdWVG
cm9tUHJvcG9ydGlvbihmcmFjdGlvbikpOwotICAgIGVsZW1lbnQtPnNldFZhbHVlRnJvbVJlbmRl
cmVyKHNlcmlhbGl6ZUZvck51bWJlclR5cGUodmFsdWUpKTsKLQotICAgIC8vIEFsc28gdXBkYXRl
IHRoZSBwb3NpdGlvbiBpZiBhcHByb3ByaWF0ZS4KLSAgICBpZiAocG9zaXRpb24gIT0gY3VycmVu
dFBvc2l0aW9uKCkpIHsKLSAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IEl0IHNlZW1zIGxpa2UgdGhpcyBjb3VsZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVu
dHMgaWYgdGhlIHNhbWUgdmFsdWUgaXMgc2V0Ci0gICAgICAgIC8vIG11bHRpcGxlIHRpbWVzIHdp
dGggbm8gbGF5b3V0IGluIGJldHdlZW4uCi0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCgpOwotICAgIH0KLX0KLQotaW50IFJlbmRlclNsaWRlcjo6cG9zaXRp
b25Gb3JPZmZzZXQoY29uc3QgSW50UG9pbnQmIHApCi17Ci0gICAgaWYgKCFtX3RodW1iIHx8ICFt
X3RodW1iLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBwb3NpdGlv
bjsKLSAgICBpZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8
fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAg
ICBwb3NpdGlvbiA9IHAueSgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPmhlaWdodCgpIC8gMjsK
LSAgICBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gcC54KCkgLSBtX3RodW1iLT5yZW5kZXJCb3go
KS0+d2lkdGgoKSAvIDI7Ci0gICAgCi0gICAgcmV0dXJuIG1heCgwLCBtaW4ocG9zaXRpb24sIHRy
YWNrU2l6ZSgpKSk7Ci19Ci0KLWludCBSZW5kZXJTbGlkZXI6OmN1cnJlbnRQb3NpdGlvbigpCi17
Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAgIEFTU0VSVChtX3RodW1iLT5yZW5kZXJlcigpKTsK
LQotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8
IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAg
IHJldHVybiB0b1JlbmRlckJveChtX3RodW1iLT5yZW5kZXJlcigpKS0+eSgpIC0gY29udGVudEJv
eFJlY3QoKS55KCk7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG1fdGh1bWItPnJlbmRlcmVyKCkp
LT54KCkgLSBjb250ZW50Qm94UmVjdCgpLngoKTsKLX0KLQotaW50IFJlbmRlclNsaWRlcjo6dHJh
Y2tTaXplKCkKLXsKLSAgICBBU1NFUlQobV90aHVtYik7Ci0gICAgQVNTRVJUKG1fdGh1bWItPnJl
bmRlcmVyKCkpOwotCi0gICAgaWYgKHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0
aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFy
dCkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQoKSAtIG1fdGh1bWItPnJlbmRlckJveCgp
LT5oZWlnaHQoKTsKLSAgICByZXR1cm4gY29udGVudFdpZHRoKCkgLSBtX3RodW1iLT5yZW5kZXJC
b3goKS0+d2lkdGgoKTsKLX0KLQotdm9pZCBSZW5kZXJTbGlkZXI6OmZvcndhcmRFdmVudChFdmVu
dCogZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBN
b3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsK
LSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAgICAgICAgIGlm
ICghbW91c2VFdmVudElzSW5UaHVtYihtb3VzZUV2ZW50KSkgewotICAgICAgICAgICAgICAgIElu
dFBvaW50IGV2ZW50T2Zmc2V0ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Mb2NhbChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgICAgICAgICAg
ICAgc2V0VmFsdWVGb3JQb3NpdGlvbihwb3NpdGlvbkZvck9mZnNldChldmVudE9mZnNldCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV90aHVtYi0+ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLWJvb2wgUmVuZGVyU2xpZGVyOjppbkRyYWdNb2RlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV90aHVtYiAmJiBtX3RodW1iLT5pbkRyYWdNb2RlKCk7Cisg
ICAgcmVuZGVyQm94LT5zZXRGcmFtZVJlY3QodGh1bWJSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAppbmRleCBmYzhjZTI0NTVhM2YwZjZi
ZDg3NjkxZTlhNjRjMmZkNzkzMmE0OGNlLi5lZmJkYTc3OTc5ZjIyODVlZWU1Mzg1OGJlNDcwOGI4
Nzc3MzJhZDdjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaApAQCAtMjEsMjMgKzIxLDYwIEBA
CiAjaWZuZGVmIFJlbmRlclNsaWRlcl9oCiAjZGVmaW5lIFJlbmRlclNsaWRlcl9oCiAKKyNpbmNs
dWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAgICAgY2xhc3Mg
TW91c2VFdmVudDsKLSAgICBjbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQ7Ci0gICAgCisKKy8vIEZJ
WE1FOiBNT1ZFIFRPIFNFUEFSQVRFIENMQVNTISEhCitjbGFzcyBSZW5kZXJTbGlkZXJUaHVtYiA6
IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyU2xpZGVyVGh1bWIoTm9k
ZSopOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisKK2NsYXNzIFNsaWRlclRodW1i
RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBjcmVhdGUoRWxlbWVudCogc2hhZG93SG9zdCk7
CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
LCBSZW5kZXJTdHlsZSopOworCisgICAgdm9pZCBkcmFnRnJvbShjb25zdCBJbnRQb2ludCYpOwor
ICAgIGJvb2wgaW5EcmFnTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5EcmFnTW9kZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CisgICAgdmlydHVhbCBQc2V1ZG9JZCBzdHlsZVBzZXVkb0lkKCkgY29u
c3QgeyByZXR1cm4gU0xJREVSX1RIVU1COyB9CisgICAgdmlydHVhbCBib29sIGlzU2hhZG93Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNldFBvc2l0
aW9uKGNvbnN0IEludFBvaW50Jik7CisgICAgdm9pZCBzdGFydERyYWdnaW5nKCk7CisKKyAgICBT
bGlkZXJUaHVtYkVsZW1lbnQoRWxlbWVudCogc2hhZG93SG9zdCk7CisgICAgdmlydHVhbCBDb250
YWluZXJOb2RlKiBzaGFkb3dQYXJlbnROb2RlKCkgeyByZXR1cm4gbV9zaGFkb3dIb3N0OyB9CisK
KyAgICBGbG9hdFBvaW50IG1fb2Zmc2V0VG9UaHVtYjsKKyAgICBFbGVtZW50KiBtX3NoYWRvd0hv
c3Q7CisgICAgYm9vbCBtX2luRHJhZ01vZGU7Cit9OworCitpbmxpbmUgU2xpZGVyVGh1bWJFbGVt
ZW50KiB0b1NsaWRlclRodW1iRWxlbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9k
ZSB8fCBub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTbGlk
ZXJUaHVtYkVsZW1lbnQqPihub2RlKTsKK30KKworCiAgICAgY2xhc3MgUmVuZGVyU2xpZGVyIDog
cHVibGljIFJlbmRlckJsb2NrIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlclNsaWRlcihI
VE1MSW5wdXRFbGVtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflJlbmRlclNsaWRlcigpOwogCi0g
ICAgICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7Ci0gICAgICAgIGJvb2wgaW5EcmFnTW9k
ZSgpIGNvbnN0OwogICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCgpOwotCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNsaWRlciI7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDUsMjggKzgyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7
Ci0KLSAgICAgICAgYm9vbCBtb3VzZUV2ZW50SXNJblRodW1iKE1vdXNlRXZlbnQqKTsKLSAgICAg
ICAgRmxvYXRQb2ludCBtb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYihNb3VzZUV2ZW50Kik7Ci0KLSAg
ICAgICAgdm9pZCBzZXRWYWx1ZUZvclBvc2l0aW9uKGludCBwb3NpdGlvbik7Ci0gICAgICAgIHZv
aWQgc2V0UG9zaXRpb25Gcm9tVmFsdWUoKTsKLSAgICAgICAgaW50IHBvc2l0aW9uRm9yT2Zmc2V0
KGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAgICAgaW50IGN1cnJlbnRQb3NpdGlvbigpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVz
Rm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0KLSAgICAgICAgaW50IHRyYWNrU2l6ZSgpOwotCi0g
ICAgICAgIFJlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IG1fdGh1bWI7Ci0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFNsaWRlclRodW1iRWxlbWVudDsKICAgICB9OwogCiAgICAgaW5saW5lIFJlbmRl
clNsaWRlciogdG9SZW5kZXJTbGlkZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKaW5kZXggZDkwYmJjMjZhNjkz
NTgyMWQyNWQ3YWFiODZlZDU4YmEwMWIyNzA5Yy4uNTdjZDEyNDEzYTQxYmVlYWJhYjJjOTFiNjI1
ODkyM2YyNWY3MzU3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcApAQCAtNjc3LDcgKzY3Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiBpCiBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8v
IE1ha2UgYSB0aHVtYiBzaW1pbGFyIHRvIHRoZSBzY3JvbGxiYXIgdGh1bWIuCi0gICAgY29uc3Qg
Ym9vbCBob3ZlcmVkID0gaXNIb3ZlcmVkKG8pIHx8IHRvUmVuZGVyU2xpZGVyKG8tPnBhcmVudCgp
KS0+aW5EcmFnTW9kZSgpOworICAgIGNvbnN0IGJvb2wgaG92ZXJlZCA9IGlzSG92ZXJlZChvKSB8
fCB0b1NsaWRlclRodW1iRWxlbWVudChvLT5ub2RlKCkpLT5pbkRyYWdNb2RlKCk7CiAgICAgY29u
c3QgaW50IG1pZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7CiAgICAgY29uc3QgaW50
IG1pZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOwogICAgIGNvbnN0IGJvb2wgdmVy
dGljYWwgPSAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKaW5k
ZXggYmU2NzBmZjg5ZTYwMjYyYjA3M2Y1N2RjMjA1NjQwODMwODI2MDBlNC4uOTMxMjYyZTI0NjFk
MjQxMDk0NTQ1N2JhMTE5MzJjZGJjYzdkYzhkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKQEAgLTU0OCw3ICs1NDgsNyBAQCB1bnNpZ25lZCBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVj
dCogbykKICAgICAgICAgcmVzdWx0ID0gVFVTX0RJU0FCTEVEOwogICAgIGVsc2UgaWYgKHN1cHBv
cnRzRm9jdXMoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQoby0+cGFyZW50
KCkpKQogICAgICAgICByZXN1bHQgPSBUVVNfRk9DVVNFRDsKLSAgICBlbHNlIGlmICh0b1JlbmRl
clNsaWRlcihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKSkKKyAgICBlbHNlIGlmICh0b1NsaWRl
clRodW1iRWxlbWVudChvLT5ub2RlKCkpLT5pbkRyYWdNb2RlKCkpCiAgICAgICAgIHJlc3VsdCA9
IFRVU19QUkVTU0VEOwogICAgIGVsc2UgaWYgKGlzSG92ZXJlZChvKSkKICAgICAgICAgcmVzdWx0
ID0gVFVTX0hPVDsKQEAgLTU3Miw3ICs1NzIsNyBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sUwog
ICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCkgewogICAgICAgICBpZiAoIWlzRW5hYmxlZChvLT5wYXJlbnQo
KSkpCiAgICAgICAgICAgICByZXN1bHQgPSBERkNTX0lOQUNUSVZFOwotICAgICAgICBlbHNlIGlm
ICh0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKSkgLy8gQWN0aXZlIHN1
cGVyc2VkZXMgaG92ZXIKKyAgICAgICAgZWxzZSBpZiAodG9TbGlkZXJUaHVtYkVsZW1lbnQoby0+
bm9kZSgpKS0+aW5EcmFnTW9kZSgpKSAvLyBBY3RpdmUgc3VwZXJzZWRlcyBob3ZlcgogICAgICAg
ICAgICAgcmVzdWx0ID0gREZDU19QVVNIRUQ7CiAgICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChv
KSkKICAgICAgICAgICAgIHJlc3VsdCA9IERGQ1NfSE9UOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQppbmRleCA3OTgyODM0YjI5NmE4Mzg1MzRhYWJkYThkODUzYjI5Y2E5MDg4YmJlLi5j
YjU0YmRlOGVmNGY1MWVmNTZmOTQ4NTlhYmFkZThlMDY3YTc5ZDk4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQpAQCAtMTM0MSw3ICsxMzQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmYKICAgICBlbHNlCiAgICAgICAgIG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJIb3Jp
em9udGFsUHJlc3NlZDsKIAotICAgIGJvb2wgcHJlc3NlZCA9IHRvUmVuZGVyU2xpZGVyKG8tPnBh
cmVudCgpKS0+aW5EcmFnTW9kZSgpOworICAgIGJvb2wgcHJlc3NlZCA9IHRvU2xpZGVyVGh1bWJF
bGVtZW50KG8tPm5vZGUoKSktPmluRHJhZ01vZGUoKTsKIAogICAgIGlmIChvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIG1faXNTbGlk
ZXJUaHVtYlZlcnRpY2FsUHJlc3NlZCA9IHByZXNzZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVNhZmFyaS5jcHAKaW5kZXggMDdiOGViOGI2MmUzMjEwZmI1ODQ2YTRhMWU2ZTMyMmFmZmVh
MzA3YS4uZDllMTQ3NjdmODM4ZjViNjQwOWU1ZGJmNjA3ZjYzMzBlMTY5OTA4MyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAtMTAwNCw3ICsxMDA0LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnQKIAogICAgIEFTU0VSVChvLT5wYXJlbnQoKS0+aXNTbGlkZXIo
KSk7CiAKLSAgICBib29sIHByZXNzZWQgPSB0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQoKSktPmlu
RHJhZ01vZGUoKTsKKyAgICBib29sIHByZXNzZWQgPSB0b1NsaWRlclRodW1iRWxlbWVudChvLT5u
b2RlKCkpLT5pbkRyYWdNb2RlKCk7CiAgICAgVGhlbWVDb250cm9sU3RhdGUgc3RhdGUgPSBkZXRl
cm1pbmVTdGF0ZShvLT5wYXJlbnQoKSk7CiAgICAgc3RhdGUgJj0gflNhZmFyaVRoZW1lOjpQcmVz
c2VkU3RhdGU7CiAgICAgaWYgKHByZXNzZWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5j
cHAKaW5kZXggNDU5NjVlNmViYjgzY2RiYTc2YTM3ZjkyZTNiM2Y2ZjBmOWFjYzNmMy4uOTA4MTky
ZmJiOGMyY2ZjNmJlZmZjNzlkZTlmZTJkMTI1MTgyNzExNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2lu
OjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICAgICAgcmVz
dWx0ID0gVFVTX0RJU0FCTEVEOwogICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQoby0+cGFyZW50KCkpKQogICAgICAgICByZXN1
bHQgPSBUVVNfRk9DVVNFRDsKLSAgICBlbHNlIGlmICh0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQo
KSktPmluRHJhZ01vZGUoKSkKKyAgICBlbHNlIGlmICh0b1NsaWRlclRodW1iRWxlbWVudChvLT5u
b2RlKCkpLT5pbkRyYWdNb2RlKCkpCiAgICAgICAgIHJlc3VsdCA9IFRVU19QUkVTU0VEOwogICAg
IGVsc2UgaWYgKGlzSG92ZXJlZChvKSkKICAgICAgICAgcmVzdWx0ID0gVFVTX0hPVDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67571</attachid>
            <date>2010-09-14 10:06:37 -0700</date>
            <delta_ts>2010-12-10 15:06:32 -0800</delta_ts>
            <desc>Capture state before breaking up into smaller patches</desc>
            <filename>bug-44907-20100914100635.patch</filename>
            <type>text/plain</type>
            <size>58276</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTRiOGIyODBmZWVlYzg2NzA1YzU5MjlmZTc1NmFiNjVlZWVlM2RlNC4uY2M1Yjg3MTRhZjkyMGY3
YzNlZjQzZWY1YThkNjdlNDJlYWQ5YTAwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOS0wMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIGlucHV0W3R5cGU9cmFuZ2Vd
IHRvIHVzZSBhIG1vcmUgbmF0dXJhbCBzaGFkb3cgRE9NIG1vZGVsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MDcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICBSRUFMIFRISU5HIENPTUlORyBTT09OLgorCiAyMDEw
LTA5LTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDgzMTk2
MjBjYThjZWExM2I1OGJmNjIxNTYzZDhiMmYyNzRiYjkyNDUuLmU5NWI5YjJhMTQzYzAzZDJkMmZl
MmU3NzMxODE4ZTI2MWMxMTVkMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04MjQs
MTIgKzgyNCw3IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJl
c29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiB7CiAgICAgbV9jaGVja2VyLm1f
cHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKIAotICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJl
bnROb2RlKCkgOiAwOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoIW1fcGFyZW50Tm9kZSAm
JiBlICYmIGUtPmlzU1ZHRWxlbWVudCgpICYmIGUtPmlzU2hhZG93Tm9kZSgpKQotICAgICAgICBt
X3BhcmVudE5vZGUgPSBlLT5zaGFkb3dQYXJlbnROb2RlKCk7Ci0jZW5kaWYKKyAgICBtX3BhcmVu
dE5vZGUgPSBlID8gZS0+cGFyZW50T3JIb3N0Tm9kZSgpIDogMDsKIAogICAgIGlmIChwYXJlbnRT
dHlsZSkKICAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwpAQCAtMTE4MCw3ICsx
MTc1LDI3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Rm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsCiAKICAgICBtX2NoZWNrZXIubV9tYXRj
aFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwogCi0gICAgbV9z
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgYW4g
ZWxlbWVudCB3YW50cyB0byBzdGFydCBzdHlsZSBmcm9tIGEgcHJlLWRlZmluZWQgcHNldWRvSWQu
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgaG9ycmlkLCBiZWNhdXNlIHdlIHJlc29sdmUgdGhlIHN0
eWxlIHR3aWNlLgorICAgIFJlbmRlclN0eWxlKiBpbml0aWFsU3R5bGUgPSAwOworICAgIGlmIChl
LT5zdHlsZVBzZXVkb0lkKCkgIT0gTk9QU0VVRE8pIHsKKyAgICAgICAgTm9kZSogcGFyZW50ID0g
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGdpYW50
IGhhY2ssIG5lZWRlZCB0byB3aXJlIHVwIE1lZGlhIHRpbWVsaW5lIGFuZCB2b2x1bWUKKyAgICAg
ICAgLy8gICAgICAgIGVsZW1lbnRzLgorICAgICAgICBpZiAoTm9kZSogc2hhZG93Um9vdCA9IHBh
cmVudC0+c2hhZG93VHJlZVJvb3ROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQgPSBzaGFkb3dS
b290LT5zaGFkb3dQYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5y
ZW5kZXJlcigpKSB7CisgICAgICAgICAgICBpbml0aWFsU3R5bGUgPSBwYXJlbnQtPnJlbmRlcmVy
KCktPmdldENhY2hlZFBzZXVkb1N0eWxlKGUtPnN0eWxlUHNldWRvSWQoKSk7CisgICAgICAgICAg
ICAvLyBSZS1pbml0aWFsaXplIG1fZWxlbWVudCBhbmQgbV9zdHlsZWRFbGVtZW50IHRoYXQgd2Vy
ZSBkaXJ0aWVkIGJ5IGdldENhY2hlZFBzZXVkb1N0eWxlIGNhbGwuCisgICAgICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRyYW5zaWVudCBDU1NTdHlsZVNlbGVjdG9yIG1lbWJlcnMgdG8gZWxpbWlu
YXRlIHRoZSBuZWVkCisgICAgICAgICAgICAvLyBmb3IgdGhpcyBmaXh1cC4KKyAgICAgICAgICAg
IGluaXRFbGVtZW50KGUpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbml0aWFsU3R5bGUp
CisgICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoaW5pdGlhbFN0eWxlKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBp
ZiAobV9wYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRT
dHlsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9odG1sLmNzcyBiL1dlYkNvcmUvY3NzL2h0
bWwuY3NzCmluZGV4IGQ2NWFjYjAzNzcxNDBmYmM1OGNmMDliMDRkMzE4ZGQ0ZmQxM2U5OWIuLmIx
MDY0Mjg1NTIwMmI1ZjdiOTBhNTFhODQwNTNlYTUzYjRlN2IzMWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL2h0bWwuY3NzCisrKyBiL1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC00NDgsNiArNDQ4
LDcgQEAgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAKIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJr
aXQtc2xpZGVyLXRodW1iIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhv
cml6b250YWw7CisgICAgZGlzcGxheTogYmxvY2s7CiB9CiAKIGlucHV0W3R5cGU9ImJ1dHRvbiJd
OmRpc2FibGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0icmVz
ZXQiXTpkaXNhYmxlZCwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3Nz
IGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKaW5kZXggNmEwZjE0YjAwZDc3OTNjYzRj
YTZjNGU1NmEwZTFiN2M2MmM0NWVmNy4uOTY0ZDA0MzMxN2JiMGY5YTgyY2Y4NmY4ODJhMzNmMmVl
M2I0YWZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIv
V2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKQEAgLTg4LDYgKzg4LDEzIEBAIGF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy10aW1lbGluZSB7CiAgICAgcGFkZGluZzogMHB4IDJweDsKIH0KIAorYXVkaW86Oi13ZWJr
aXQtc2xpZGVyLXRodW1iLCB2aWRlbzo6LXdlYmtpdC1zbGlkZXItdGh1bWIgeworICAgIC8qIFVu
Zm9ydHVuYXRlbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBzZXR0aW5nIG9mIGFwcGVhcmFuY2UgaXMg
aGFyZC1jb2RlZCBpbiBSZW5kZXJTbGlkZXJUaHVtYjo6bGF5b3V0KCksCisgICAgICAgYnV0IHdl
IG5lZWQgdG8gaGF2ZSBhbiBhcHBlYXJhbmNlIG9mIHNvbWUgc29ydCB0byBzdGFydCBwYWludGlu
Zy4gKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6b250YWw7Cisg
ICAgZGlzcGxheTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZv
bHVtZS1zbGlkZXItY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1
bWUtc2xpZGVyLWNvbnRhaW5lciB7CiAgICAgZGlzcGxheTogbm9uZTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKaW5kZXggMmRkNTBiYjdjNGZlMGI1YjkxYmE1MTJjYjY4Y2Q2Y2M1N2NlNDU3OC4uYTkw
OWM0YjQyNTRkOGMwYzgxNjgxNDNhYzU0NGIwZjNjMGEyODY2ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKQEAgLTk5NSw3ICs5OTUsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGlsZEluc2VydGVkKE5v
ZGUqIGNoaWxkKQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3Vt
ZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCi0gICAgaWYgKGMtPnBhcmVudE5v
ZGUoKSAmJiBjLT5wYXJlbnROb2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICBOb2RlKiBwYXJlbnRP
ckhvc3ROb2RlID0gYy0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIGlmIChwYXJlbnRPckhvc3RO
b2RlICYmIHBhcmVudE9ySG9zdE5vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgYy0+aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBlbHNlCiAgICAgICAgIGMtPmluc2VydGVkSW50b1RyZWUo
dHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCmluZGV4IDVmNTNjMmRkZGU3M2YxY2ZjZTU4MTZlZGRmYTc1MGRhMjBkMGNj
M2MuLmFkYmQyNjc2MDYzODg5NjdkZDI0ZTQ1MTY5NTdjNDdhZjU0MDJjZGEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC04MDQsNiArODA0LDggQEAgdm9pZCBFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAg
ICAgLy8gbmVlZCB0byBkbyBzdXBlcmNsYXNzIHByb2Nlc3NpbmcgZmlyc3Qgc28gaW5Eb2N1bWVu
dCgpIGlzIHRydWUKICAgICAvLyBieSB0aGUgdGltZSB3ZSByZWFjaCB1cGRhdGVJZAogICAgIENv
bnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgaWYgKE5vZGUqIHNoYWRv
d05vZGUgPSBzaGFkb3coKSkKKyAgICAgICAgc2hhZG93Tm9kZS0+aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKIAogICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkg
ewpAQCAtODI1LDYgKzgyNywyNiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KQogICAgIH0KIAogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAg
ICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFkb3dOb2RlLT5y
ZW1vdmVkRnJvbURvY3VtZW50KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApCit7CisgICAgQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVw
KTsKKyAgICBpZiAoIWRlZXApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoTm9kZSogc2hhZG93
Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFkb3dOb2RlLT5pbnNlcnRlZEludG9UcmVlKHRy
dWUpOworfQorCit2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7Cisg
ICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOworICAgIGlmICghZGVlcCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93KCkpCisg
ICAgICAgIHNoYWRvd05vZGUtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjphdHRhY2goKQpAQCAtODM0LDYgKzg1Niw4IEBAIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkK
IAogICAgIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKICAgICBDb250YWluZXJOb2RlOjphdHRh
Y2goKTsKKyAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvdygpKQorICAgICAgICBzaGFk
b3dOb2RlLT5hdHRhY2goKTsKICAgICBpZiAoaGFzUmFyZURhdGEoKSkgeyAgIAogICAgICAgICBF
bGVtZW50UmFyZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOwogICAgICAgICBpZiAoZGF0YS0+bmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goKSkgewpAQCAtODU1LDYgKzg3
OSw4IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoKCkKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAg
ICAgICAgcmFyZURhdGEoKS0+cmVzZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgQ29udGFpbmVyTm9k
ZTo6ZGV0YWNoKCk7CisgICAgaWYgKE5vZGUqIHNoYWRvd05vZGUgPSBzaGFkb3coKSkKKyAgICAg
ICAgc2hhZG93Tm9kZS0+ZGV0YWNoKCk7CiAKICAgICBSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMoKTsKIH0KQEAgLTkwOCwxMCArOTM0LDggQEAgdm9pZCBFbGVtZW50
OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgYm9vbCBoYXNQb3NpdGlvbmFs
UnVsZXMgPSBuZWVkc1N0eWxlUmVjYWxjKCkgJiYgY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHls
ZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgYm9vbCBoYXNEaXJl
Y3RBZGphY2VudFJ1bGVzID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5B
ZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogCi0jaWYgRU5BQkxFKFNWRykKLSAgICBp
ZiAoIWhhc1BhcmVudFN0eWxlICYmIGlzU2hhZG93Tm9kZSgpICYmIGlzU1ZHRWxlbWVudCgpKQor
ICAgIGlmICghaGFzUGFyZW50U3R5bGUgJiYgaXNTaGFkb3dOb2RlKCkpCiAgICAgICAgIGhhc1Bh
cmVudFN0eWxlID0gdHJ1ZTsKLSNlbmRpZgogCiAgICAgaWYgKChjaGFuZ2UgPiBOb0NoYW5nZSB8
fCBuZWVkc1N0eWxlUmVjYWxjKCkpKSB7CiAgICAgICAgIGlmIChoYXNSYXJlRGF0YSgpKQpAQCAt
OTkwLDYgKzEwMTQsMTEgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBj
aGFuZ2UpCiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBmb3Jj
ZUNoZWNrT2ZOZXh0RWxlbWVudFNpYmxpbmcgPSBjaGlsZFJ1bGVzQ2hhbmdlZCAmJiBoYXNEaXJl
Y3RBZGphY2VudFJ1bGVzOwogICAgIH0KKyAgICAvLyBUaGlzIGRvZXMgbm90IGNhcmUgYWJvdXQg
c2libGluZyBjb21iaW5hdG9ycywgYnV0IGN1cnJlbnRseSB3ZSBoYXZlIG5vIHNoYWRvdyBET00g
ZWxlbWVudHMgdGhhdCBuZWVkIHRoYXQgYXQgdGhlIG1vbWVudC4KKyAgICBpZiAoTm9kZSogc2hh
ZG93Tm9kZSA9IHNoYWRvdygpKSB7CisgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBz
aGFkb3dOb2RlLT5pc1RleHROb2RlKCkgfHwgc2hhZG93Tm9kZS0+Y2hpbGROZWVkc1N0eWxlUmVj
YWxjKCkgfHwgc2hhZG93Tm9kZS0+bmVlZHNTdHlsZVJlY2FsYygpKQorICAgICAgICAgICAgc2hh
ZG93Tm9kZS0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKKyAgICB9CiAKICAgICBjbGVhck5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtMTY0Nyw0
ICsxNjc2LDkgQEAgdm9pZCBFbGVtZW50Ojp3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbih1bnNpZ25l
ZCBzaG9ydCBmbGFncykKIH0KICNlbmRpZiAgICAKIAorTm9kZSogRWxlbWVudDo6c2hhZG93KCkK
K3sKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGQ5
YTUwODU0OGUwNjcwOGFiOTBiMTZiOWRkYzcxMWVmMzQ4NjU1MTQuLjQ0NDE3MTE0OTQxYmNiMmU2
OGM1ZDQ0NDY0Yjc1MmQxMDA0ZjM4YmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTMwOCw2ICszMDgsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgd2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4odW5zaWduZWQgc2hvcnQgZmxhZ3Mp
OwogI2VuZGlmCiAKKyAgICAvLyBGSVhNRTogTWFrZSBub24tdmlydHVhbC4KKyAgICB2aXJ0dWFs
IE5vZGUqIHNoYWRvdygpOworICAgIC8vIFRoaXMgaXMgYW4gZXF1aXZhbGVudCBvZiB4Ymw6cHNl
dWRvIGF0dHJpYnV0ZS4KKyAgICB2aXJ0dWFsIFBzZXVkb0lkIHN0eWxlUHNldWRvSWQoKSBjb25z
dCB7IHJldHVybiBOT1BTRVVETzsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5
cGUgdHlwZSkKICAgICAgICAgOiBDb250YWluZXJOb2RlKGRvY3VtZW50LCB0eXBlKQpAQCAtMzE3
LDYgKzMyMiw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9E
b2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZWRGcm9tVHJlZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJv
b2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUq
IGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9uIG9mIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoKSBjYWxscyB0aGUg
Zm9sbG93aW5nIHR3byBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDhmZjgyMmE0YzQxNDY0YTFjMzcwNDA4MjU1
OTM4YTlhNTBmYWUzMjIuLmUwNDI5YzljOTk4NzFiNjYzNDlhNGY1YmM5YmM1YjVjNTUzNzVhMTIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC0xMTUsNiArMTE1LDY4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0
YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAw
OwogCisvLyBGSVhNRTogTW92ZSB0byBhIHNlcGFyYXRlIGZpbGUuCitFdmVudEFuY2VzdG9yOjpF
dmVudEFuY2VzdG9yKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yLCBFdmVudFRhcmdldCogdGFyZ2V0
KQorICAgIDogbV9hbmNlc3RvcihhbmNlc3RvcikKKyAgICAsIG1fdGFyZ2V0KHRhcmdldCkKK3sK
K30KKworQ29udGFpbmVyTm9kZSogRXZlbnRBbmNlc3Rvcjo6YW5jZXN0b3IoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2FuY2VzdG9yLmdldCgpOworfQorCitFdmVudFRhcmdldCogRXZlbnRBbmNl
c3Rvcjo6dGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXQuZ2V0KCk7Cit9CisK
KyNpZiBFTkFCTEUoU1ZHKQorc3RhdGljIGlubGluZSBTVkdFbGVtZW50SW5zdGFuY2UqIGV2ZW50
VGFyZ2V0QXNTVkdFbGVtZW50SW5zdGFuY2UoTm9kZSogcmVmZXJlbmNlTm9kZSkKK3sKKyAgICBB
U1NFUlQocmVmZXJlbmNlTm9kZSk7CisgICAgaWYgKCFyZWZlcmVuY2VOb2RlLT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBTcGVjOiBUaGUgZXZlbnQgaGFuZGxp
bmcgZm9yIHRoZSBub24tZXhwb3NlZCB0cmVlIHdvcmtzIGFzIGlmIHRoZSByZWZlcmVuY2VkIGVs
ZW1lbnQgaGFkIGJlZW4gdGV4dHVhbGx5IGluY2x1ZGVkCisgICAgLy8gYXMgYSBkZWVwbHkgY2xv
bmVkIGNoaWxkIG9mIHRoZSAndXNlJyBlbGVtZW50LCBleGNlcHQgdGhhdCBldmVudHMgYXJlIGRp
c3BhdGNoZWQgdG8gdGhlIFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzCisgICAgZm9yIChOb2Rl
KiBuID0gcmVmZXJlbmNlTm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgICAgICBp
ZiAoIW4tPmlzU2hhZG93Tm9kZSgpIHx8ICFuLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIENvbnRhaW5lck5vZGUqIHNoYWRvd1RyZWVQYXJlbnRFbGVt
ZW50ID0gbi0+c2hhZG93UGFyZW50Tm9kZSgpOworICAgICAgICBBU1NFUlQoc2hhZG93VHJlZVBh
cmVudEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpOworCisgICAgICAgIGlm
IChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVu
dCo+KHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50KS0+aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVu
dChyZWZlcmVuY2VOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEV2ZW50VGFyZ2V0KiBl
dmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKQor
eworICAgIEFTU0VSVChyZWZlcmVuY2VOb2RlKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYg
KFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBldmVudFRhcmdldEFzU1ZHRWxlbWVudElu
c3RhbmNlKHJlZmVyZW5jZU5vZGUpKSB7CisgICAgICAgIEFTU0VSVChpbnN0YW5jZS0+c2hhZG93
VHJlZUVsZW1lbnQoKSA9PSByZWZlcmVuY2VOb2RlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNl
OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7Cit9CisKK3ZvaWQg
RXZlbnRBbmNlc3Rvcjo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAorewor
ICAgIGV2ZW50LT5zZXRUYXJnZXQodGFyZ2V0KCkpOworICAgIGV2ZW50LT5zZXRDdXJyZW50VGFy
Z2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKCkpKTsKKyAg
ICBtX2FuY2VzdG9yLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudCk7Cit9CisKIGJvb2wgTm9kZTo6
aXNTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
CiB7CiAgICAgcmV0dXJuIERPTUltcGxlbWVudGF0aW9uOjpoYXNGZWF0dXJlKGZlYXR1cmUsIHZl
cnNpb24pOwpAQCAtNzIwLDkgKzc4Miw5IEBAIGlubGluZSB2b2lkIE5vZGU6OnNldFN0eWxlQ2hh
bmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogCiBpbmxpbmUgdm9pZCBOb2RlOjptYXJr
QW5jZXN0b3JzV2l0aENoaWxkTmVlZHNTdHlsZVJlY2FsYygpCiB7Ci0gICAgZm9yIChOb2RlKiBw
ID0gcGFyZW50Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsgcCA9IHAt
PnBhcmVudE5vZGUoKSkKKyAgICBmb3IgKE5vZGUqIHAgPSBwYXJlbnRPckhvc3ROb2RlKCk7IHAg
JiYgIXAtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOyBwID0gcC0+cGFyZW50T3JIb3N0Tm9kZSgp
KQogICAgICAgICBwLT5zZXRDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAKKwogICAgIGlm
IChkb2N1bWVudCgpLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+c2NoZWR1bGVTdHlsZVJlY2FsYygpOwogfQpAQCAtMTMxOSw3ICsxMzgxLDcgQEAgdm9pZCBO
b2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKIAogICAgIEFTU0VSVCghcmVuZGVyZXIoKSk7
CiAgICAgCi0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyAgICAKKyAgICBOb2RlKiBw
YXJlbnQgPSBwYXJlbnRPckhvc3ROb2RlKCk7CiAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgCiAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKQEAg
LTE0NDIsNiArMTUwNCwxMyBAQCBib29sIE5vZGU6OmlzSW5TaGFkb3dUcmVlKCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK0NvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE9ySG9zdE5vZGUoKQor
eworICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpCisgICAgICAg
IHJldHVybiBwYXJlbnQ7CisgICAgcmV0dXJuIHNoYWRvd1BhcmVudE5vZGUoKTsKK30KKwogYm9v
bCBOb2RlOjppc0Jsb2NrRmxvdygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+aXNCbG9ja0Zsb3coKTsKQEAgLTIyNjUsMTQgKzIzMzQsOSBAQCB2b2lkIE5v
ZGU6OmdldFN1YnJlc291cmNlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKICAg
ICBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiB9CiAKLUNvbnRhaW5lck5vZGUq
IE5vZGU6OmV2ZW50UGFyZW50Tm9kZSgpCi17Ci0gICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKLX0K
LQogTm9kZSogTm9kZTo6ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkKIHsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+ZXZlbnRQYXJlbnROb2Rl
KCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSB7CiAgICAgICAgIC8vIEZvciBpbWFnZW1hcHMsIHRoZSBlbmNsb3Np
bmcgbGluayBub2RlIGlzIHRoZSBhc3NvY2lhdGVkIGFyZWEgZWxlbWVudCBub3QgdGhlIGltYWdl
IGl0c2VsZi4KICAgICAgICAgLy8gU28gd2UgZG9uJ3QgbGV0IGltYWdlcyBiZSB0aGUgZW5jbG9z
aW5nTGlua05vZGUsIGV2ZW4gdGhvdWdoIGlzTGluayBzb21ldGltZXMgcmV0dXJucyB0cnVlCiAg
ICAgICAgIC8vIGZvciB0aGVtLgpAQCAtMjUxMCw1NCArMjU3NCwyMSBAQCB2b2lkIE5vZGU6Omhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkKICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZl
bnQpOwogfQogCi0jaWYgRU5BQkxFKFNWRykKLXN0YXRpYyBpbmxpbmUgU1ZHRWxlbWVudEluc3Rh
bmNlKiBldmVudFRhcmdldEFzU1ZHRWxlbWVudEluc3RhbmNlKE5vZGUqIHJlZmVyZW5jZU5vZGUp
Ci17Ci0gICAgQVNTRVJUKHJlZmVyZW5jZU5vZGUpOwotICAgIGlmICghcmVmZXJlbmNlTm9kZS0+
aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gU3BlYzogVGhlIGV2
ZW50IGhhbmRsaW5nIGZvciB0aGUgbm9uLWV4cG9zZWQgdHJlZSB3b3JrcyBhcyBpZiB0aGUgcmVm
ZXJlbmNlZCBlbGVtZW50IGhhZCBiZWVuIHRleHR1YWxseSBpbmNsdWRlZAotICAgIC8vIGFzIGEg
ZGVlcGx5IGNsb25lZCBjaGlsZCBvZiB0aGUgJ3VzZScgZWxlbWVudCwgZXhjZXB0IHRoYXQgZXZl
bnRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBTVkdFbGVtZW50SW5zdGFuY2Ugb2JqZWN0cwotICAg
IGZvciAoTm9kZSogbiA9IHJlZmVyZW5jZU5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgaWYgKCFuLT5pc1NoYWRvd05vZGUoKSB8fCAhbi0+aXNTVkdFbGVtZW50KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDb250YWluZXJOb2RlKiBzaGFkb3dUcmVl
UGFyZW50RWxlbWVudCA9IG4tPnNoYWRvd1BhcmVudE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHNo
YWRvd1RyZWVQYXJlbnRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp1c2VUYWcpKTsKLQot
ICAgICAgICBpZiAoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PFNW
R1VzZUVsZW1lbnQqPihzaGFkb3dUcmVlUGFyZW50RWxlbWVudCktPmluc3RhbmNlRm9yU2hhZG93
VHJlZUVsZW1lbnQocmVmZXJlbmNlTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBFdmVu
dFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJl
bmNlTm9kZSkKLXsKLSAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7Ci0KLSNpZiBFTkFCTEUoU1ZH
KQotICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gZXZlbnRUYXJnZXRBc1NW
R0VsZW1lbnRJbnN0YW5jZShyZWZlcmVuY2VOb2RlKSkgewotICAgICAgICBBU1NFUlQoaW5zdGFu
Y2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgPT0gcmVmZXJlbmNlTm9kZSk7Ci0gICAgICAgIHJldHVy
biBpbnN0YW5jZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwot
fQotCi12b2lkIE5vZGU6OmV2ZW50QW5jZXN0b3JzKFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gPiAmYW5jZXN0b3JzKQordm9pZCBOb2RlOjpldmVudEFuY2VzdG9ycyhWZWN0b3I8RXZlbnRB
bmNlc3Rvcj4gJmFuY2VzdG9ycywgRXZlbnRUYXJnZXQqIG9sZFRhcmdldCkKIHsKICAgICBpZiAo
aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBl
dmVudFBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPmV2ZW50UGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbnRlZ3JhdGUgYmV0dGVyIHdpdGggU1ZH
IHNoYWRvdyBzdHVmZiwgd2hpY2ggc2VlbXMgdmVyeSBzaW1pbGFyLgorICAgICAgICBFdmVudFRh
cmdldCogdGFyZ2V0ID0gaXNTaGFkb3dOb2RlKCkgPyBzaGFkb3dQYXJlbnROb2RlKCkgOiBvbGRU
YXJnZXQ7CisgICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBwYXJlbnRPckhv
c3ROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRPckhvc3ROb2Rl
KCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgLy8gU2tpcCA8dXNlPiBzaGFkb3cg
dHJlZSBlbGVtZW50cy4KICAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aXNTVkdFbGVtZW50KCkg
JiYgYW5jZXN0b3ItPmlzU2hhZG93Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
I2VuZGlmCi0gICAgICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICAgICAg
ICAgIGFuY2VzdG9ycy5hcHBlbmQoRXZlbnRBbmNlc3RvcihhbmNlc3RvciwgdGFyZ2V0KSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGJpdCB1Z2x5LiBXZSBzaG91bGQgZWxpbWlu
YXRlIHRoZXNlIG11bHRpcGxlIGNhbGxzIHRvIHNoYWRvd1BhcmVudE5vZGUoKQorICAgICAgICAg
ICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd05vZGUoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQg
PSBhbmNlc3Rvci0+c2hhZG93UGFyZW50Tm9kZSgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MjU3Myw3ICsyNjA0LDcgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IHBycEV2ZW50KQogICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudC5yZWxl
YXNlKCkpOwogfQogCi1zdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIFZlY3RvcjxS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3JzKQorc3RhdGljIGJvb2wgZXZlbnRIYXNM
aXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93
LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8RXZlbnRBbmNlc3Rvcj4mIGFuY2VzdG9ycykKIHsK
ICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTgyLDcgKzI2MTMsNyBAQCBzdGF0aWMgYm9vbCBl
dmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93
KiB3aW5kb3csCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogYW5j
ZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7CisgICAgICAgIENvbnRhaW5lck5vZGUqIGFuY2Vz
dG9yID0gYW5jZXN0b3JzW2ldLmFuY2VzdG9yKCk7CiAgICAgICAgIGlmIChhbmNlc3Rvci0+aGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KQEAgLTI2MDIsMTUgKzI2MzMsMTYgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICAvLyBJZiB0aGUgbm9kZSBpcyBub3Qg
aW4gYSBkb2N1bWVudCBqdXN0IHNlbmQgdGhlIGV2ZW50IHRvIGl0LgogICAgIC8vIEJlIHN1cmUg
dG8gcmVmIGFsbCBvZiBub2RlcyBzaW5jZSBldmVudCBoYW5kbGVycyBjb3VsZCByZXN1bHQgaW4g
dGhlIGxhc3QgcmVmZXJlbmNlIGdvaW5nIGF3YXkuCiAgICAgUmVmUHRyPE5vZGU+IHRoaXNOb2Rl
KHRoaXMpOwotICAgIFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiBhbmNlc3RvcnM7Ci0g
ICAgZXZlbnRBbmNlc3RvcnMoYW5jZXN0b3JzKTsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG9s
ZFRhcmdldChldmVudC0+dGFyZ2V0KCkpOworICAgIFZlY3RvcjxFdmVudEFuY2VzdG9yPiBhbmNl
c3RvcnM7CisgICAgZXZlbnRBbmNlc3RvcnMoYW5jZXN0b3JzLCBvbGRUYXJnZXQuZ2V0KCkpOwog
CiAgICAgLy8gU2V0IHVwIGEgcG9pbnRlciB0byBpbmRpY2F0ZSB3aGV0aGVyIC8gd2hlcmUgdG8g
ZGlzcGF0Y2ggd2luZG93IGV2ZW50cy4KICAgICAvLyBXZSBkb24ndCBkaXNwYXRjaCBsb2FkIGV2
ZW50cyB0byB0aGUgd2luZG93LiBUaGF0IHF1aXJrIHdhcyBvcmlnaW5hbGx5CiAgICAgLy8gYWRk
ZWQgYmVjYXVzZSBNb3ppbGxhIGRvZXNuJ3QgcHJvcGFnYXRlIGxvYWQgZXZlbnRzIHRvIHRoZSB3
aW5kb3cgb2JqZWN0LgogICAgIERPTVdpbmRvdyogdGFyZ2V0Rm9yV2luZG93RXZlbnRzID0gMDsK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubG9hZEV2ZW50KSB7Ci0gICAg
ICAgIE5vZGUqIHRvcExldmVsQ29udGFpbmVyID0gYW5jZXN0b3JzLmlzRW1wdHkoKSA/IHRoaXMg
OiBhbmNlc3RvcnMubGFzdCgpLmdldCgpOworICAgICAgICBOb2RlKiB0b3BMZXZlbENvbnRhaW5l
ciA9IGFuY2VzdG9ycy5pc0VtcHR5KCkgPyB0aGlzIDogYW5jZXN0b3JzLmxhc3QoKS5hbmNlc3Rv
cigpOwogICAgICAgICBpZiAodG9wTGV2ZWxDb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCiAg
ICAgICAgICAgICB0YXJnZXRGb3JXaW5kb3dFdmVudHMgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHRvcExldmVsQ29udGFpbmVyKS0+ZG9tV2luZG93KCk7CiAgICAgfQpAQCAtMjY0MCwxNSArMjY3
MiwxNCBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQogICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAgICAgfQogICAg
IGZvciAoc2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgQ29u
dGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaSAtIDFdLmdldCgpOwotICAgICAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhhbmNlc3RvcikpOwotICAgICAgICBhbmNlc3Rvci0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQu
Z2V0KCkpOworICAgICAgICBhbmNlc3RvcnNbaSAtIDFdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50
LmdldCgpKTsKICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAg
ICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAogICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogCisgICAgZXZlbnQtPnNldFRhcmdldChvbGRUYXJn
ZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKHRoaXMpKTsKICAgICBoYW5kbGVMb2NhbEV2ZW50cyhldmVudC5n
ZXQoKSk7CiAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKQEAgLTI2NjAsOSAr
MjY5MSw3IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gcHJwRXZlbnQpCiAKICAgICAgICAgc2l6ZV90IHNpemUgPSBhbmNlc3RvcnMuc2l6ZSgpOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAg
Q29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3RvcikpOwotICAgICAgICAgICAgYW5jZXN0b3ItPmhhbmRsZUxvY2FsRXZlbnRz
KGV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGFuY2VzdG9yc1tpXS5oYW5kbGVMb2NhbEV2ZW50
cyhldmVudC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBl
ZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAgICBnb3RvIGRvbmVE
aXNwYXRjaGluZzsKICAgICAgICAgfQpAQCAtMjY3NSw2ICsyNzA0LDcgQEAgYm9vbCBOb2RlOjpk
aXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICB9CiAK
IGRvbmVEaXNwYXRjaGluZzoKKyAgICBldmVudC0+c2V0VGFyZ2V0KG9sZFRhcmdldC5nZXQoKSk7
CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CiAgICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoMCk7CiAKQEAgLTI2OTUsNyArMjcyNSw3IEBAIGRvbmVEaXNwYXRjaGluZzoKICAgICAgICAg
aWYgKGV2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gYW5jZXN0
b3JzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNl
c3RvcnNbaV0uYW5jZXN0b3IoKTsKICAgICAgICAgICAgICAgICBhbmNlc3Rvci0+ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJDb3JlL2RvbS9O
b2RlLmgKaW5kZXggNTg3ZWZmZDBmZTgyMjc0NzY5NTUwNjQ0ZTkyZGVmNWE4MzkyOTQwYS4uOGUw
NmJkZWE3ZTMxMzAxMTdlZDQ5YjMzMzQ5NDJhY2M0MTgxMzhiYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtODYsNiArODYsMjAgQEAg
ZW51bSBTdHlsZUNoYW5nZVR5cGUgewogICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlID0gMyA8PCBu
b2RlU3R5bGVDaGFuZ2VTaGlmdAogfTsKIAorLy8gRklYTUU6IE1vdmUgdG8gc2VwYXJhdGUgZmls
ZS4KK2NsYXNzIEV2ZW50QW5jZXN0b3IgeworcHVibGljOgorICAgIEV2ZW50QW5jZXN0b3IoQ29u
dGFpbmVyTm9kZSogYW5jZXN0b3IsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpOworCisgICAgQ29udGFp
bmVyTm9kZSogYW5jZXN0b3IoKSBjb25zdDsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0KCkgY29u
c3Q7CisgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNvbnN0OworCitwcml2YXRl
OgorICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX2FuY2VzdG9yOworICAgIFJlZlB0cjxFdmVu
dFRhcmdldD4gbV90YXJnZXQ7Cit9OworCiBjbGFzcyBOb2RlIDogcHVibGljIEV2ZW50VGFyZ2V0
LCBwdWJsaWMgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPiwgcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSB7CiAgICAgZnJpZW5kIGNsYXNzIERvY3VtZW50OwogcHVibGljOgpAQCAtMjEyLDE1ICsyMjYs
MTQgQEAgcHVibGljOgogICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIE5vZGUq
IHNoYWRvd1RyZWVSb290Tm9kZSgpOwogICAgIGJvb2wgaXNJblNoYWRvd1RyZWUoKTsKLQotICAg
IC8vIFRoZSBub2RlJ3MgcGFyZW50IGZvciB0aGUgcHVycG9zZSBvZiBldmVudCBjYXB0dXJlIGFu
ZCBidWJibGluZy4KLSAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUqIGV2ZW50UGFyZW50Tm9kZSgp
OworICAgIC8vIE5vZGUncyBwYXJlbnQgb3Igc2hhZG93IHRyZWUgaG9zdC4KKyAgICBDb250YWlu
ZXJOb2RlKiBwYXJlbnRPckhvc3ROb2RlKCk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBlbmNsb3Np
bmcgZXZlbnQgcGFyZW50IG5vZGUgKG9yIHNlbGYpIHRoYXQsIHdoZW4gY2xpY2tlZCwgd291bGQg
dHJpZ2dlciBhIG5hdmlnYXRpb24uCiAgICAgTm9kZSogZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50
T3JTZWxmKCk7CiAKICAgICAvLyBOb2RlIGFuY2VzdG9ycyB3aGVuIGNvbmNlcm5lZCBhYm91dCBl
dmVudCBmbG93Ci0gICAgdm9pZCBldmVudEFuY2VzdG9ycyhWZWN0b3I8UmVmUHRyPENvbnRhaW5l
ck5vZGU+ID4gJmFuY2VzdG9ycyk7CisgICAgdm9pZCBldmVudEFuY2VzdG9ycyhWZWN0b3I8RXZl
bnRBbmNlc3Rvcj4gJmFuY2VzdG9ycywgRXZlbnRUYXJnZXQqKTsKIAogICAgIGJvb2wgaXNCbG9j
a0Zsb3coKSBjb25zdDsKICAgICBib29sIGlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1RleHQuY3Bw
CmluZGV4IDkyOGI5NzU5NmU1Njk5YjU3OWY5M2FhODUzZTViZTViZWIxOGYwMzguLjY3ODRlOTFl
MmM0YzdiZmQ0NzY4Y2M0ZDQxZjcwYmMyMDJjNjI0OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1RleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC0yMzcsMTAgKzIzNywxMSBA
QCBib29sIFRleHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQogCiBSZW5k
ZXJPYmplY3QqIFRleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVy
U3R5bGUqKQogeworICAgIE5vZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsK
ICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpCisg
ICAgaWYgKHBhcmVudE9ySG9zdC0+aXNTVkdFbGVtZW50KCkKICNpZiBFTkFCTEUoU1ZHX0ZPUkVJ
R05fT0JKRUNUKQotICAgICAgICAmJiAhcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVz
Ojpmb3JlaWduT2JqZWN0VGFnKQorICAgICAgICAmJiAhcGFyZW50T3JIb3N0LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2VuZGlmCiAgICAgKQogICAgICAgICByZXR1
cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lVGV4dCh0aGlzLCBkYXRhSW1wbCgpKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBlOTA1MjViYzFkNWVhMTk4NTNhYzk1ZDJhMzBj
MjNkZGNjNTQ2NGY3Li4xOTBkZThmN2ZiMzcxYzZmODY5MWM2YjI0YTc3Y2I1MWUxYWViMGIyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xODAsNiArMTgwLDcgQEAgSFRNTElucHV0
RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIC8vIE5lZWQgdG8gcmVtb3ZlIHRoaXMg
ZnJvbSB0aGUgZm9ybSB3aGlsZSBpdCBpcyBzdGlsbCBhbiBIVE1MSW5wdXRFbGVtZW50LAogICAg
IC8vIHNvIGNhbid0IHdhaXQgZm9yIHRoZSBiYXNlIGNsYXNzJ3MgZGVzdHJ1Y3RvciB0byBkbyBp
dC4KICAgICByZW1vdmVGcm9tRm9ybSgpOworICAgIHJlbW92ZVNoYWRvd1N1YnRyZWUoKTsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUo
KSBjb25zdApAQCAtOTAxLDYgKzkwMiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5w
dXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKICAgICAgICAgICAgIGJvb2wgd2FzQXR0YWNoZWQgPSBh
dHRhY2hlZCgpOwogICAgICAgICAgICAgaWYgKHdhc0F0dGFjaGVkKQogICAgICAgICAgICAgICAg
IGRldGFjaCgpOworICAgICAgICAgICAgcmVtb3ZlU2hhZG93U3VidHJlZSgpOwogCiAgICAgICAg
ICAgICBib29sIGRpZFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0
ZSgpOwogICAgICAgICAgICAgYm9vbCB3YXNQYXNzd29yZEZpZWxkID0gaW5wdXRUeXBlKCkgPT0g
UEFTU1dPUkQ7CkBAIC05MzYsNiArOTM4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJ
bnB1dFR5cGUoY29uc3QgU3RyaW5nJiB0KQogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVD
aGFuZ2VkKGFsaWduLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNyZWF0
ZVNoYWRvd1N1YnRyZWUoKTsKICAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkgewogICAgICAg
ICAgICAgICAgIGF0dGFjaCgpOwogICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpID09IHRoaXMpCkBAIC0xNzE0LDcgKzE3MTcsMTEgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVu
dCkKICAgICAgICAgICAgIGlmIChpc1RleHRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBhbGwgaW5wdXQgdHlwZXMg
ZG8gdGhpcyBpbnN0ZWFkIG9mIHVwZGF0ZUZyb21FbGVtZW50LgorICAgICAgICBpZiAoaW5wdXRU
eXBlKCkgPT0gUkFOR0UgJiYgcmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNl
dE5lZWRzTGF5b3V0KHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIs
IHNhbml0aXplVmFsdWUodmFsdWUpKTsKIApAQCAtMjUzMyw4ICsyNTQwLDE1IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgIGlmIChp
c1RleHRGaWVsZCgpICYmIHJlbmRlcmVyKCkgJiYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZ0
LT5pc0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9j
dXNFdmVudCkpCiAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVy
KCkpLT5mb3J3YXJkRXZlbnQoZXZ0KTsKIAotICAgIGlmIChpbnB1dFR5cGUoKSA9PSBSQU5HRSAm
JiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2dC0+aXNEcmFnRXZlbnQo
KSB8fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKLSAgICAgICAgdG9SZW5kZXJTbGlkZXIocmVuZGVy
ZXIoKSktPmZvcndhcmRFdmVudChldnQpOworICAgIGlmIChpbnB1dFR5cGUoKSA9PSBSQU5HRSAm
JiByZW5kZXJlcigpICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgTW91c2VFdmVu
dCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAgICBp
ZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZl
bnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgIFNsaWRlclRodW1iRWxl
bWVudCogdGh1bWIgPSB0b1NsaWRlclRodW1iRWxlbWVudChzaGFkb3coKSk7CisgICAgICAgICAg
ICBBU1NFUlQodGh1bWIpOworICAgICAgICAgICAgdGh1bWItPmRyYWdGcm9tKG1vdXNlRXZlbnQt
PmFic29sdXRlTG9jYXRpb24oKSk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAoIWNhbGxCYXNlQ2xhc3NFYXJseSAmJiAh
ZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CkBAIC0yOTc1LDYgKzI5ODksNTYgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiAgICAgfQog
fQogCisvLyBGSVhNRTogT25jZSBtb3N0IG9mIHRoZSBzaGFkb3cgRE9NIGlzIGhhbmRsZWQgdGhp
cyB3YXksIHdlIHNob3VsZCBtb3ZlIHRoaXMKKy8vICAgICAgICB0byBFbGVtZW50LgordHlwZWRl
ZiBIYXNoTWFwPEhUTUxJbnB1dEVsZW1lbnQqLCBSZWZQdHI8Tm9kZT4gPiBTaGFkb3dSb290TWFw
Oworc3RhdGljIFNoYWRvd1Jvb3RNYXAqIHNoYWRvd1Jvb3RNYXAoKQoreworICAgIHN0YXRpYyBT
aGFkb3dSb290TWFwKiBzX21hcCA9IDA7CisgICAgaWYgKCFzX21hcCkKKyAgICAgICAgc19tYXAg
PSBuZXcgU2hhZG93Um9vdE1hcCgpOworICAgIHJldHVybiBzX21hcDsKK30KKworTm9kZSogSFRN
TElucHV0RWxlbWVudDo6c2hhZG93KCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHRvIG90aGVy
IGlucHV0IHR5cGVzLgorICAgIGlmIChpbnB1dFR5cGUoKSAhPSBSQU5HRSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0J3Mgbm90IGlsbGVn
YWwgdG8gcXVlcnkgc2hhZG93KCkgcHJpb3IKKyAgICAvLyB0byBjcmVhdGlvbiBvZiB0aGUgaW5w
dXQgdHlwZSwgYnV0IGl0J3MgYW4gaW5kaWNhdG9yIHRoYXQgc29tZXRoaW5nCisgICAgLy8gZWxz
ZSBoYWQgZ29uZSB3cm9uZy4KKyAgICBBU1NFUlQoc2hhZG93Um9vdE1hcCgpLT5jb250YWlucyh0
aGlzKSk7CisgICAgcmV0dXJuIHNoYWRvd1Jvb3RNYXAoKS0+Z2V0KHRoaXMpLmdldCgpOworfQor
Cit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIC8v
IEZJWE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMuCisgICAgaWYgKGlucHV0VHlwZSgp
ICE9IFJBTkdFKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFzaGFkb3dSb290TWFwKCkt
PmNvbnRhaW5zKHRoaXMpKTsKKyAgICBSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiB0aHVtYiA9
IFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKHRoaXMpOworICAgIHNoYWRvd1Jvb3RNYXAoKS0+
c2V0KHRoaXMsIHRodW1iLmdldCgpKTsKK30KKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1v
dmVkIHVwIHRvIEVsZW1lbnQgYW5kIHJlbW92YWwvY3JlYXRpb24gaGFuZGxpbmcgbWFkZQorLy8g
ICAgICAgIGdlbmVyaWMuCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1N1YnRy
ZWUoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgdG8gb3RoZXIgaW5wdXQgdHlwZXMuCisgICAg
aWYgKGlucHV0VHlwZSgpICE9IFJBTkdFKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHNo
YWRvd1Jvb3RNYXAoKS0+Y29udGFpbnModGhpcykpOworICAgIFJlZlB0cjxOb2RlPiB0aHVtYiA9
IHNoYWRvd1Jvb3RNYXAoKS0+dGFrZSh0aGlzKTsKKyAgICBkb2N1bWVudCgpLT5yZW1vdmVGb2N1
c2VkTm9kZU9mU3VidHJlZSh0aHVtYi5nZXQoKSk7CisKKyAgICBpZiAodGh1bWItPmluRG9jdW1l
bnQoKSkKKyAgICAgICAgdGh1bWItPnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICBlbHNlCisg
ICAgICAgIHRodW1iLT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7Cit9CisKICNpZiBFTkFCTEUoV0NT
UykKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNr
KQogewpAQCAtMzAyMCw0ICszMDg0LDE1OCBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3Bl
ZWNoRW5hYmxlZCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorLy8gRklYTUU6IE1vdmUgdG8gaXRzIG93
biBjbGFzc2VzCitSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoTm9kZSogbm9k
ZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVuZGVyU2xpZGVyVGh1
bWI6OmxheW91dCgpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgd2F5
IHRvIG5vdCBoYXJkLWNvZGUgdGhpcy4KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBw
YXJlbnQoKS0+c3R5bGUoKTsKKyAgICBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFuY2UoU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpOworICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFu
Y2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAgZWxzZSBpZiAocGFyZW50U3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQpCisgICAgICAgIHN0eWxlKCktPnNldEFw
cGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVtYlBhcnQpOworICAgIGVsc2UgaWYgKHBhcmVudFN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQorICAgICAgICBzdHlsZSgp
LT5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKKworICAgIGlmIChz
dHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHBhc3MgdGhlIHN0eWxlLCBub3QgdGhlIHJlbmRlcmVyLCB0byB0aGUgdGhlbWUuCisgICAgICAg
IHRoZW1lKCktPmFkanVzdFNsaWRlclRodW1iU2l6ZSh0aGlzKTsKKyAgICB9CisgICAgUmVuZGVy
QmxvY2s6OmxheW91dCgpOworfQorCitpbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50OjpTbGlkZXJU
aHVtYkVsZW1lbnQoRWxlbWVudCogc2hhZG93SG9zdCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRp
dlRhZywgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fc2hhZG93SG9zdChzaGFkb3dI
b3N0KQorICAgICwgbV9pbkRyYWdNb2RlKGZhbHNlKQoreworfQorCitpbmxpbmUgUGFzc1JlZlB0
cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKEVsZW1lbnQq
IHNoYWRvd0hvc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJUaHVtYkVsZW1l
bnQoc2hhZG93SG9zdCkpOworfQorCitSZW5kZXJPYmplY3QqIFNsaWRlclRodW1iRWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNsaWRlclRodW1iKHRoaXMpOworfQorCit2b2lkIFNs
aWRlclRodW1iRWxlbWVudDo6ZHJhZ0Zyb20oY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAg
IHNldFBvc2l0aW9uKHBvaW50KTsKKyAgICBzdGFydERyYWdnaW5nKCk7Cit9CisKK3ZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7Cisg
ICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBzaGFkb3dQYXJlbnROb2RlIGlzIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudC4KKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dQYXJlbnROb2RlKCkpOworICAgIEFT
U0VSVChpbnB1dCk7CisgICAgQVNTRVJUKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQo
cmVuZGVyZXIoKSk7CisKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
KQorICAgICAgICByZXR1cm47CisgICAgSW50UG9pbnQgb2Zmc2V0ID0gcm91bmRlZEludFBvaW50
KGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlKSk7
CisgICAgUmVuZGVyU3R5bGUqIHNsaWRlclN0eWxlID0gaW5wdXQtPnJlbmRlcmVyKCktPnN0eWxl
KCk7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gc2xpZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJWZXJ0aWNhbFBhcnQgfHwgc2xpZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZv
bHVtZVNsaWRlclBhcnQ7CisKKyAgICBpbnQgdHJhY2tTaXplOworICAgIGludCBwb3NpdGlvbjsK
KyAgICBpbnQgY3VycmVudFBvc2l0aW9uOworICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAg
IHRyYWNrU2l6ZSA9IGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEhlaWdodCgpIC0gcmVuZGVy
Qm94KCktPmhlaWdodCgpOworICAgICAgICBwb3NpdGlvbiA9IG9mZnNldC55KCkgLSByZW5kZXJC
b3goKS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSByZW5kZXJCb3go
KS0+eSgpIC0gaW5wdXQtPnJlbmRlckJveCgpLT5jb250ZW50Qm94UmVjdCgpLnkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0cmFja1NpemUgPSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRX
aWR0aCgpIC0gcmVuZGVyQm94KCktPndpZHRoKCk7CisgICAgICAgIHBvc2l0aW9uID0gb2Zmc2V0
LngoKSAtIHJlbmRlckJveCgpLT53aWR0aCgpIC8gMjsKKyAgICAgICAgY3VycmVudFBvc2l0aW9u
ID0gcmVuZGVyQm94KCktPngoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEJveFJlY3Qo
KS54KCk7CisgICAgfQorICAgIHBvc2l0aW9uID0gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tT
aXplKSk7CisKKyAgICBTdGVwUmFuZ2UgcmFuZ2UoaW5wdXQpOworICAgIGRvdWJsZSBmcmFjdGlv
biA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocG9zaXRpb24pIC8gdHJhY2tTaXplOworICAgIGlmIChp
c1ZlcnRpY2FsKQorICAgICAgICBmcmFjdGlvbiA9IDEgLSBmcmFjdGlvbjsKKyAgICBkb3VibGUg
dmFsdWUgPSByYW5nZS5jbGFtcFZhbHVlKHJhbmdlLnZhbHVlRnJvbVByb3BvcnRpb24oZnJhY3Rp
b24pKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vIGxvbmdlciBiZWluZyBzZXQgZnJvbSBy
ZW5kZXJlci4KKyAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoc2VyaWFsaXplRm9yTnVt
YmVyVHlwZSh2YWx1ZSkpOworCisgICAgLy8gRklYTUU6IFdoeSBleGl0IGhlcmUgYW5kIG5vdCBl
YXJsaWVyLCBiZWZvcmUgc2V0dGluZyB0aGUgdmFsdWUgYWdhaW4/CisgICAgaWYgKHBvc2l0aW9u
ID09IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogSXQgc2VlbXMgbGlrZSB0aGlz
IGNvdWxkIHNlbmQgZXh0cmEgY2hhbmdlIGV2ZW50cyBpZiB0aGUgc2FtZSB2YWx1ZSBpcyBzZXQK
KyAgICAvLyBtdWx0aXBsZSB0aW1lcyB3aXRoIG5vIGxheW91dCBpbiBiZXR3ZWVuLgorICAgIGlu
cHV0LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKK30KKwordm9pZCBTbGlkZXJU
aHVtYkVsZW1lbnQ6OnN0YXJ0RHJhZ2dpbmcoKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0
Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAgICAgICBtX2luRHJhZ01vZGUgPSB0
cnVlOworICAgIH0KK30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7
CisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91
c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CisKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpc0xlZnRCdXR0b24pIHsKKyAgICAgICAgc3RhcnRE
cmFnZ2luZygpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCAmJiBpc0xlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKG1faW5EcmFnTW9kZSkgewor
ICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAg
ICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50
c05vZGUoMCk7CisgICAgICAgICAgICBtX2luRHJhZ01vZGUgPSBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5
b3V0KHRydWUpOworICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBzZXRE
ZWZhdWx0SGFuZGxlZCBoZXJlLCBidXQgd2UgbmVlZCB0byBmYWxsIHRocm91Z2ggdG8ga2VlcAor
ICAgICAgICAgICAgLy8gICAgICAgIE1lZGlhRWxlbWVudCBiaXRzIHdvcmtpbmcuIEFkZCBzZXRE
ZWZhdWx0SGFuZGxlZCBoZXJlIG9uY2UgTWVkaWFFbGVtZW50IGlzCisgICAgICAgICAgICAvLyAg
ICAgICAgcmVmYWN0b3JlZCB0byB1c2Ugc2FuZSBzaGFkb3cgRE9NLgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
Lm1vdXNlbW92ZUV2ZW50KSB7CisgICAgICAgIGlmIChtX2luRHJhZ01vZGUpIHsKKyAgICAgICAg
ICAgIHNldFBvc2l0aW9uKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7CisgICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKK30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRldGFjaCgpCit7CisgICAg
aWYgKG1faW5EcmFnTW9kZSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlKDApOworICAgIH0KKyAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNo
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBlMDIz
Nzk2YjdkYTA1MzM3NmJmYTRjYmYxOGRiMTk2ODk4NTdlZmU0Li43ZGM4MDNkZDIxYTc5ODA0Yjc2
YTk2MWExZjY1ZDYwNDEzMjU4MzRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTIxNSw2
ICsyMTUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdDU1MpCiAgICAgdm9pZCBzZXRXYXBJbnB1
dEZvcm1hdChTdHJpbmcmIG1hc2spOwogI2VuZGlmCisgICAgdmlydHVhbCBOb2RlKiBzaGFkb3co
KTsKIAogcHJvdGVjdGVkOgogICAgIEhUTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwpAQCAtMzEwLDcgKzMxMSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0Owog
CiAgICAgdm9pZCB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKCk7Ci0gICAgCisKICAgICB2b2lk
IGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEV2ZW50Kik7CiAgICAgUGFzc1JlZlB0cjxI
VE1MRm9ybUVsZW1lbnQ+IGNyZWF0ZVRlbXBvcmFyeUZvcm1Gb3JJc0luZGV4KCk7CiAgICAgLy8g
SGVscGVyIGZvciBnZXRBbGxvd2VkVmFsdWVTdGVwKCk7CkBAIC0zMzQsNiArMzM1LDEwIEBAIHBy
aXZhdGU6CiAgICAgLy8gREFURVRJTUVMT0NBTCwgTU9OVEgsIFRJTUUsIGFuZCBXRUVLLgogICAg
IFN0cmluZyBzZXJpYWxpemVGb3JEYXRlVGltZVR5cGVzKGRvdWJsZSkgY29uc3Q7CiAKKyAgICAv
LyBDcmVhdGUgKGFuZCByZW1vdmUpIHRoZSBzaGFkb3cgc3VidHJlZSBmb3IgZWxlbWVudHMgdGhh
dCByZXF1aXJlIGl0LgorICAgIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOworICAgIHZvaWQg
cmVtb3ZlU2hhZG93U3VidHJlZSgpOworCiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgIEhUTUxE
YXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAyM2MyMmFhMjJmYzExY2JkNmRkODlkMDQ5MjRk
MDYyNTQyZTk3NzQ3Li4xZWJmNWM2MzQ5YmFiZGM1YTQ3Nzc2NzQ1MmFhMDc2NWU5MzQ4YTg4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01OTMsMTMgKzU5Mywx
MyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9u
ZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCwgUgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBU
aGUgTm9kZSdzIEV2ZW50IEFuY2VzdG9ycyAobm90IGluY2x1ZGluZyBzZWxmKQotICAgIFZlY3Rv
cjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiBhbmNlc3RvcnM7Ci0gICAgbm9kZS0+ZXZlbnRBbmNl
c3RvcnMoYW5jZXN0b3JzKTsKKyAgICBWZWN0b3I8RXZlbnRBbmNlc3Rvcj4gYW5jZXN0b3JzOwor
ICAgIG5vZGUtPmV2ZW50QW5jZXN0b3JzKGFuY2VzdG9ycywgbm9kZSk7CiAKICAgICAvLyBOb2Rl
cyBhbmQgdGhlaXIgTGlzdGVuZXJzIGZvciB0aGUgY29uY2VybmVkIGV2ZW50IHR5cGVzIChvcmRl
ciBpcyB0b3AgdG8gYm90dG9tKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gZXZlbnRJ
bmZvcm1hdGlvbjsKICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1p
KSB7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2kgLSAxXS5n
ZXQoKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaSAtIDFd
LmFuY2VzdG9yKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZXZlbnRUeXBlc0xl
bmd0aDsgKytqKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcmIHR5cGUgPSBldmVudFR5cGVz
W2pdOwogICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5oYXNFdmVudExpc3RlbmVycyh0eXBlKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYmVjNTVkZTljMDZiNWViMzgzOGFmOTZmNTI2YWRjMWY5
MzY1M2ZkNS4uZWExYTgzN2NkZGM0M2ZmNWFlNWU3NGYwY2Q4OGNjYTQyOWIyNGM1ZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTE3NjQsNiArMTc2NCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1
cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZShOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9y
bU1vCiAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgbm9kZSBpcyBhIHRleHQgbm9kZSwgZGlzcGF0
Y2ggb24gdGhlIHBhcmVudCBub2RlIC0gcmRhcjovLzQxOTY2NDYKICAgICAgICAgaWYgKHJlc3Vs
dCAmJiByZXN1bHQtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+
cGFyZW50Tm9kZSgpOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHByb3BlciByZS10YXJn
ZXRpbmcgb2YgZXZlbnRzIGluc2lkZSBvZiB0aGUgc2hhZG93IHRyZWUuCiAgICAgICAgIGlmIChy
ZXN1bHQpCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDg3MGYwZWI0
NmJlMzgxNjhjNTkwODI4OWNiZTk0YmY3NTVhZWVlMjIuLjM1NmNjNTBlYzNjNGZmYzFlM2JjMzNh
MTUxMDBjMjY1ZmFjNjYwOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApA
QCAtODAwLDcgKzgwMCwxMSBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAogICAgIGlmIChhcHBlYXJhbmNl
ID09IFNsaWRlclZlcnRpY2FsUGFydCkKICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6
OlZlcnRpY2FsOwogCi0gICAgaWYgKHJlbmRlclNsaWRlci0+aW5EcmFnTW9kZSgpKSB7CisgICAg
U2xpZGVyVGh1bWJFbGVtZW50KiBzbGlkZXJUaHVtYiA9IHRvU2xpZGVyVGh1bWJFbGVtZW50KHN0
YXRpY19jYXN0PEVsZW1lbnQqPihyZW5kZXJTbGlkZXItPm5vZGUoKSktPnNoYWRvdygpKTsKKyAg
ICBpZiAoIXNsaWRlclRodW1iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzbGlk
ZXJUaHVtYi0+aW5EcmFnTW9kZSgpKSB7CiAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9s
cyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwogICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0
eWxlOjpTdGF0ZV9TdW5rZW47CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCmluZGV4IGFhZWIzZTI1Y2MzNGI3N2IzNWJjYjU0ZDc5NWU4YzEzYWJhYTEy
ODYuLmMyOGRjNDE1YjEwZDM1YTg4MjJmY2UwODIwOTg1NDgzMmFjNWU5MjcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTQyMyw2ICs0MjMsNyBAQCBi
b29sIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSogc3R5bGUpCiAKIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2goKQogewor
ICAgIC8vIEZJWE1FOiBUaGlzIHdob2xlIG1ldGhvZCBuZWVkcyB0byBiZSByZW1vdmVkLiBJdCBk
dXBsaWNhdGVzIHRoZSB3b3JrIG9mIEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwogICAgIGlmICghc3R5bGUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQ0Myw2ICs0NDQsOCBAQCB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxl
bWVudDo6YXR0YWNoKCkKICAgICAgICAgcGFyZW50KCktPnJlbmRlcmVyKCktPmFkZENoaWxkKHJl
bmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+cmVuZGVyZXIoKSA6IDApOwogICAgIH0gIAogICAg
IENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOworICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hh
ZG93KCkpCisgICAgICAgIHNoYWRvd05vZGUtPmF0dGFjaCgpOwogfQogCiB2b2lkIE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudDo6dXBkYXRlU3R5bGUoKQpAQCAtNzA2LDggKzcwOSw4IEBAIHZvaWQg
TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldEN1cnJlbnRUaW1lKHRpbWUsIGVjKTsK
ICAgICB9CiAKLSAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRl
cmVyKCkpOwotICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5pbkRyYWdNb2RlKCkpCisgICAgU2xp
ZGVyVGh1bWJFbGVtZW50KiB0aHVtYiA9IHRvU2xpZGVyVGh1bWJFbGVtZW50KHNoYWRvdygpKTsK
KyAgICBpZiAodGh1bWIgJiYgdGh1bWItPmluRHJhZ01vZGUoKSkKICAgICAgICAgdG9SZW5kZXJN
ZWRpYShtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZTIwMGZmOWQ2YmRlNzcxNWEwNjE2ZDJmMjdk
ZWVlNTRmYzEzMWVjYS4uZjNkYTIzYjM0YTBiZWYzMDYzZjYyOTQxZGY3NGQ0YzBhYWI1NGE1OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMzc2LDYgKzIzNzYsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
UHNldWRvSWQgcHNldWRvLCBSZQogICAgIH0KIAogICAgIE5vZGUqIG4gPSBub2RlKCk7CisgICAg
Ly8gRklYTUU6IEludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgbi0+cGFyZW50T3JI
b3N0Tm9kZSgpCiAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAg
biA9IG4tPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIW4pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcAppbmRleCBhMWJjNzFhZDEzMWZiMzRlZWIwMmU1N2ZmYzIzMWFmODIwMzUxMjFmLi4yZWVj
ZTk2ZDUwZGI3OTgxMmVhZjc3NzM3ZGM4YzExMDE0Njc5NmMyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKQEAgLTUyLDk4ICs1Miw2IEBAIHN0YXRpYyBkb3VibGUgc2xpZGVyUG9zaXRp
b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gcmFuZ2UucHJvcG9ydGlv
bkZyb21WYWx1ZShyYW5nZS52YWx1ZUZyb21FbGVtZW50KGVsZW1lbnQpKTsKIH0KIAotY2xhc3Mg
U2xpZGVyVGh1bWJFbGVtZW50IDogcHVibGljIFNoYWRvd0Jsb2NrRWxlbWVudCB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBjcmVhdGUoSFRNTEVs
ZW1lbnQqIHNoYWRvd1BhcmVudCk7Ci0KLSAgICBib29sIGluRHJhZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2luRHJhZ01vZGU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotCi1wcml2YXRlOiAgICAg
ICAgCi0gICAgU2xpZGVyVGh1bWJFbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOwot
Ci0gICAgRmxvYXRQb2ludCBtX29mZnNldFRvVGh1bWI7Ci0gICAgYm9vbCBtX2luRHJhZ01vZGU7
Ci19OwotCi1pbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50OjpTbGlkZXJUaHVtYkVsZW1lbnQoSFRN
TEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKLSAgICA6IFNoYWRvd0Jsb2NrRWxlbWVudChzaGFkb3dQ
YXJlbnQpCi0gICAgLCBtX2luRHJhZ01vZGUoZmFsc2UpCi17Ci19Ci0KLWlubGluZSBQYXNzUmVm
UHRyPFNsaWRlclRodW1iRWxlbWVudD4gU2xpZGVyVGh1bWJFbGVtZW50OjpjcmVhdGUoSFRNTEVs
ZW1lbnQqIHNoYWRvd1BhcmVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNsaWRlclRo
dW1iRWxlbWVudChzaGFkb3dQYXJlbnQpKTsKLX0KLQotdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIGlmICghZXZlbnQtPmlz
TW91c2VFdmVudCgpKSB7Ci0gICAgICAgIFNoYWRvd0Jsb2NrRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNb3VzZUV2ZW50
KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICBib29s
IGlzTGVmdEJ1dHRvbiA9IG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b247Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotCi0gICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXNMZWZ0QnV0dG9u
KSB7Ci0gICAgICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpICYmIHJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlclNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIo
KS0+cGFyZW50KCkpOwotICAgICAgICAgICAgaWYgKHNsaWRlcikgewotICAgICAgICAgICAgICAg
IGlmIChzbGlkZXItPm1vdXNlRXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2Ugc2VsZWN0ZWQgdGhlIHRodW1iLCB3ZSB3YW50IHRoZSBjdXJzb3Ig
dG8gYWx3YXlzIHN0YXkgYXQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgcG9zaXRp
b24gcmVsYXRpdmUgdG8gdGhlIHRodW1iLgotICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRv
VGh1bWIgPSBzbGlkZXItPm1vdXNlRXZlbnRPZmZzZXRUb1RodW1iKG1vdXNlRXZlbnQpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBvdXRz
aWRlIHRoZSB0aHVtYiwgbW92ZSB0aGUgdGh1bWIgdG8gdGhlIHBvaW50IHdlcmUKLSAgICAgICAg
ICAgICAgICAgICAgLy8gd2UgY2xpY2tlZC4gV2UnbGwgYmUgZXhhY3RseSBhdCB0aGUgY2VudGVy
IG9mIHRoZSB0aHVtYi4KLSAgICAgICAgICAgICAgICAgICAgbV9vZmZzZXRUb1RodW1iLnNldFgo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9UaHVtYi5zZXRZKDApOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1faW5EcmFnTW9kZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1
cmluZ01vdXNlRXZlbnRzTm9kZShzaGFkb3dQYXJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCAmJiBpc0xlZnRCdXR0b24pIHsKLSAgICAgICAgaWYgKG1faW5EcmFn
TW9kZSkgewotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdN
b3VzZUV2ZW50c05vZGUoMCk7ICAgICAgCi0gICAgICAgICAgICBtX2luRHJhZ01vZGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAgICAgIGlmIChtX2luRHJhZ01vZGUgJiYgcmVuZGVy
ZXIoKSAmJiByZW5kZXJlcigpLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVyU2xpZGVy
KiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpLT5wYXJlbnQoKSk7Ci0gICAgICAg
ICAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjdXJQb2ludCA9
IHNsaWRlci0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwg
ZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgICAgIEludFBvaW50IGV2ZW50T2Zmc2V0KGN1clBv
aW50LngoKSArIG1fb2Zmc2V0VG9UaHVtYi54KCksIGN1clBvaW50LnkoKSArIG1fb2Zmc2V0VG9U
aHVtYi55KCkpOwotICAgICAgICAgICAgICAgIHNsaWRlci0+c2V0VmFsdWVGb3JQb3NpdGlvbihz
bGlkZXItPnBvc2l0aW9uRm9yT2Zmc2V0KGV2ZW50T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgU2hhZG93QmxvY2tFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmRldGFjaCgpCi17Ci0gICAgaWYgKG1faW5EcmFnTW9kZSkgewotICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAotICAgIH0KLSAg
ICBTaGFkb3dCbG9ja0VsZW1lbnQ6OmRldGFjaCgpOwotfQotCiBSZW5kZXJTbGlkZXI6OlJlbmRl
clNsaWRlcihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyQmxvY2soZWxl
bWVudCkKIHsKQEAgLTE1MSw4ICs1OSw2IEBAIFJlbmRlclNsaWRlcjo6UmVuZGVyU2xpZGVyKEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAKIFJlbmRlclNsaWRlcjo6flJlbmRlclNsaWRlcigp
CiB7Ci0gICAgaWYgKG1fdGh1bWIpCi0gICAgICAgIG1fdGh1bWItPmRldGFjaCgpOwogfQogCiBp
bnQgUmVuZGVyU2xpZGVyOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CkBAIC0x
OTMsNTAgKzk5LDM1IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpjYWxjUHJlZldpZHRocygpCiB2b2lk
IFJlbmRlclNsaWRlcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAgaWYgKG1fdGh1bWIpCi0gICAgICAgIG1fdGh1bWIt
PnJlbmRlcmVyKCktPnNldFN0eWxlKGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSkpOwotCiAgICAg
c2V0UmVwbGFjZWQoaXNJbmxpbmUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJl
bmRlclNsaWRlcjo6Y3JlYXRlVGh1bWJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpCitzdGF0aWMgUmVuZGVyQm94KiB0aHVtYlJlbmRlckJveChOb2RlKiBub2RlKQogewotICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxl
ID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0xJREVSX1RIVU1CKTsKLSAgICBpZiAocHNldWRvU3R5
bGUpCi0gICAgICAgIC8vIFdlIG1heSBiZSBzaGFyaW5nIHN0eWxlIHdpdGggYW5vdGhlciBzbGlk
ZXIsIGJ1dCB3ZSBtdXN0IG5vdCBzaGFyZSB0aGUgdGh1bWIgc3R5bGUuCi0gICAgICAgIHN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKTsKLSAgICBlbHNlCi0gICAgICAgIHN0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotCi0gICAgaWYgKHBhcmVudFN0eWxlKQotICAg
ICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwotCi0gICAgc3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOwotCi0gICAgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xp
ZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZS0+c2V0QXBwZWFyYW5jZShTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKLSAgICAgICAgc3R5bGUtPnNldEFwcGVhcmFuY2UoU2xp
ZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRBcHBlYXJhbmNl
KE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgc3R5bGUtPnNldEFwcGVh
cmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotCi0gICAgcmV0dXJuIHN0eWxlLnJl
bGVhc2UoKTsKKyAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRodW1iID0gdG9TbGlkZXJUaHVtYkVs
ZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpLT5zaGFkb3coKSk7Cisg
ICAgcmV0dXJuIHRodW1iID8gdG9SZW5kZXJCb3godGh1bWItPnJlbmRlcmVyKCkpIDogMDsKIH0K
IAogSW50UmVjdCBSZW5kZXJTbGlkZXI6OnRodW1iUmVjdCgpCiB7Ci0gICAgaWYgKCFtX3RodW1i
KQorICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdGh1bWJSZW5kZXJCb3gobm9kZSgpKTsKKyAg
ICBpZiAoIXJlbmRlckJveCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJl
Y3QgdGh1bWJSZWN0OwotICAgIFJlbmRlckJveCogdGh1bWIgPSB0b1JlbmRlckJveChtX3RodW1i
LT5yZW5kZXJlcigpKTsKKyAgICByZXR1cm4gcmVuZGVyQm94LT5mcmFtZVJlY3QoKTsKK30KIAot
ICAgIHRodW1iUmVjdC5zZXRXaWR0aCh0aHVtYi0+c3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFs
dWUoY29udGVudFdpZHRoKCkpKTsKLSAgICB0aHVtYlJlY3Quc2V0SGVpZ2h0KHRodW1iLT5zdHls
ZSgpLT5oZWlnaHQoKS5jYWxjTWluVmFsdWUoY29udGVudEhlaWdodCgpKSk7Cit2b2lkIFJlbmRl
clNsaWRlcjo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisgICAgUmVu
ZGVyQmxvY2s6OmxheW91dCgpOworCisgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIHR3ZWFr
aW5nIG9mIHRoZSB0aHVtYiByZWN0IGNvbXBsZXRlbHkuIEl0IHNob3VsZCBub3QgYmUgbmVjZXNz
YXJ5LgorICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdGh1bWJSZW5kZXJCb3gobm9kZSgpKTsK
KyAgICBpZiAoIXJlbmRlckJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCB0aHVt
YlJlY3QgPSByZW5kZXJCb3gtPmZyYW1lUmVjdCgpOwogCiAgICAgZG91YmxlIGZyYWN0aW9uID0g
c2xpZGVyUG9zaXRpb24oc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSkpOwog
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwpAQCAtMjQ4LDE3OSAr
MTM5LDcgQEAgSW50UmVjdCBSZW5kZXJTbGlkZXI6OnRodW1iUmVjdCgpCiAgICAgICAgIHRodW1i
UmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSArIChjb250ZW50UmVjdC5oZWlnaHQoKSAtIHRodW1i
UmVjdC5oZWlnaHQoKSkgLyAyKTsKICAgICB9CiAKLSAgICByZXR1cm4gdGh1bWJSZWN0OwotfQot
Ci12b2lkIFJlbmRlclNsaWRlcjo6bGF5b3V0KCkKLXsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQo
KSk7Ci0KLSAgICBSZW5kZXJCb3gqIHRodW1iID0gbV90aHVtYiA/IHRvUmVuZGVyQm94KG1fdGh1
bWItPnJlbmRlcmVyKCkpIDogMDsKLQotICAgIEludFNpemUgYmFzZVNpemUoYm9yZGVyQW5kUGFk
ZGluZ1dpZHRoKCksIGJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7Ci0KLSAgICBpZiAodGh1bWIp
IHsKLSAgICAgICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdGh1
bWIuCi0gICAgICAgIGlmICh0aHVtYi0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcGFzcyB0aGUgc3R5bGUsIG5vdCB0aGUgcmVu
ZGVyZXIsIHRvIHRoZSB0aGVtZS4KLSAgICAgICAgICAgIHRoZW1lKCktPmFkanVzdFNsaWRlclRo
dW1iU2l6ZSh0aHVtYik7Ci0gICAgICAgIH0KLQotICAgICAgICBiYXNlU2l6ZS5leHBhbmQodGh1
bWItPnN0eWxlKCktPndpZHRoKCkuY2FsY01pblZhbHVlKDApLCB0aHVtYi0+c3R5bGUoKS0+aGVp
Z2h0KCkuY2FsY01pblZhbHVlKDApKTsKLSAgICB9Ci0KLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVw
YWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7Ci0KLSAgICBJbnRT
aXplIG9sZFNpemUgPSBzaXplKCk7Ci0KLSAgICBzZXRTaXplKGJhc2VTaXplKTsKLSAgICBjYWxj
V2lkdGgoKTsKLSAgICBjYWxjSGVpZ2h0KCk7Ci0KLSAgICBpZiAodGh1bWIpIHsKLSAgICAgICAg
aWYgKG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICAgICAgdGh1bWItPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOwotCi0gICAgICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0
ZVB1c2hlcih2aWV3KCksIHRoaXMsIHNpemUoKSk7Ci0KLSAgICAgICAgSW50UmVjdCBvbGRUaHVt
YlJlY3QgPSB0aHVtYi0+ZnJhbWVSZWN0KCk7Ci0KLSAgICAgICAgdGh1bWItPmxheW91dElmTmVl
ZGVkKCk7Ci0KLSAgICAgICAgSW50UmVjdCByZWN0ID0gdGh1bWJSZWN0KCk7Ci0gICAgICAgIHRo
dW1iLT5zZXRGcmFtZVJlY3QocmVjdCk7Ci0gICAgICAgIGlmICh0aHVtYi0+Y2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICB0aHVtYi0+cmVwYWludER1cmluZ0xheW91
dElmTW92ZWQob2xkVGh1bWJSZWN0KTsKLQotICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKLSAg
ICAgICAgYWRkT3ZlcmZsb3dGcm9tQ2hpbGQodGh1bWIpOwotICAgIH0KLQotICAgIHJlcGFpbnRl
ci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsgICAgCi0KLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7
Ci19Ci0KLXZvaWQgUmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgLy8g
TGF5b3V0IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSB0aHVtYidzIHNpemUgYW5kIHBvc2l0aW9uLgot
ICAgIGlmICghbV90aHVtYikgewotICAgICAgICBtX3RodW1iID0gU2xpZGVyVGh1bWJFbGVtZW50
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKLSAgICAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiB0aHVtYlN0eWxlID0gY3JlYXRlVGh1bWJTdHlsZShzdHlsZSgpKTsK
LSAgICAgICAgbV90aHVtYi0+c2V0UmVuZGVyZXIobV90aHVtYi0+Y3JlYXRlUmVuZGVyZXIocmVu
ZGVyQXJlbmEoKSwgdGh1bWJTdHlsZS5nZXQoKSkpOwotICAgICAgICBtX3RodW1iLT5yZW5kZXJl
cigpLT5zZXRTdHlsZSh0aHVtYlN0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgIG1fdGh1bWItPnNl
dEF0dGFjaGVkKCk7Ci0gICAgICAgIG1fdGh1bWItPnNldEluRG9jdW1lbnQoKTsKLSAgICAgICAg
YWRkQ2hpbGQobV90aHVtYi0+cmVuZGVyZXIoKSk7Ci0gICAgfQotICAgIHNldE5lZWRzTGF5b3V0
KHRydWUpOwotfQotCi1ib29sIFJlbmRlclNsaWRlcjo6bW91c2VFdmVudElzSW5UaHVtYihNb3Vz
ZUV2ZW50KiBldnQpCi17Ci0gICAgaWYgKCFtX3RodW1iIHx8ICFtX3RodW1iLT5yZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQgfHwgc3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkgewotICAgICAgICBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgKnNsaWRlclRodW1iID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sSW5wdXRF
bGVtZW50Kj4obV90aHVtYi0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIHNs
aWRlclRodW1iLT5oaXRUZXN0KGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5h
YnNvbHV0ZVRvTG9jYWwoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAg
ICBJbnRSZWN0IHRodW1iQm91bmRzID0gbV90aHVtYi0+cmVuZGVyQm94KCktPmJvcmRlckJveFJl
Y3QoKTsKLSAgICByZXR1cm4gdGh1bWJCb3VuZHMuY29udGFpbnMocm91bmRlZEludFBvaW50KGxv
Y2FsUG9pbnQpKTsKLX0KLQotRmxvYXRQb2ludCBSZW5kZXJTbGlkZXI6Om1vdXNlRXZlbnRPZmZz
ZXRUb1RodW1iKE1vdXNlRXZlbnQqIGV2dCkKLXsKLSAgICBBU1NFUlQobV90aHVtYiAmJiBtX3Ro
dW1iLT5yZW5kZXJlcigpKTsKLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5y
ZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxz
ZSwgdHJ1ZSk7Ci0gICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlckJveCgp
LT5ib3JkZXJCb3hSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBvZmZzZXQ7Ci0gICAgb2Zmc2V0LnNl
dFgodGh1bWJCb3VuZHMueCgpICsgdGh1bWJCb3VuZHMud2lkdGgoKSAvIDIgLSBsb2NhbFBvaW50
LngoKSk7Ci0gICAgb2Zmc2V0LnNldFkodGh1bWJCb3VuZHMueSgpICsgdGh1bWJCb3VuZHMuaGVp
Z2h0KCkgLyAyIC0gbG9jYWxQb2ludC55KCkpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZv
aWQgUmVuZGVyU2xpZGVyOjpzZXRWYWx1ZUZvclBvc2l0aW9uKGludCBwb3NpdGlvbikKLXsKLSAg
ICBpZiAoIW1fdGh1bWIgfHwgIW1fdGh1bWItPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obm9kZSgpKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHZhbHVlIGJhc2Vk
IG9uIHRoZSBwb3NpdGlvbiwgYW5kIHNlbmQgaXQgdG8gdGhlIGVsZW1lbnQuCi0gICAgU3RlcFJh
bmdlIHJhbmdlKGVsZW1lbnQpOwotICAgIGRvdWJsZSBmcmFjdGlvbiA9IHN0YXRpY19jYXN0PGRv
dWJsZT4ocG9zaXRpb24pIC8gdHJhY2tTaXplKCk7Ci0gICAgaWYgKHN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgZnJhY3Rpb24gPSAxIC0gZnJhY3Rpb247Ci0g
ICAgZG91YmxlIHZhbHVlID0gcmFuZ2UuY2xhbXBWYWx1ZShyYW5nZS52YWx1ZUZyb21Qcm9wb3J0
aW9uKGZyYWN0aW9uKSk7Ci0gICAgZWxlbWVudC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoc2VyaWFs
aXplRm9yTnVtYmVyVHlwZSh2YWx1ZSkpOwotCi0gICAgLy8gQWxzbyB1cGRhdGUgdGhlIHBvc2l0
aW9uIGlmIGFwcHJvcHJpYXRlLgotICAgIGlmIChwb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24o
KSkgewotICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKLQotICAgICAgICAvLyBGSVhNRTog
SXQgc2VlbXMgbGlrZSB0aGlzIGNvdWxkIHNlbmQgZXh0cmEgY2hhbmdlIGV2ZW50cyBpZiB0aGUg
c2FtZSB2YWx1ZSBpcyBzZXQKLSAgICAgICAgLy8gbXVsdGlwbGUgdGltZXMgd2l0aCBubyBsYXlv
dXQgaW4gYmV0d2Vlbi4KLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjpwb3NpdGlvbkZvck9mZnNl
dChjb25zdCBJbnRQb2ludCYgcCkKLXsKLSAgICBpZiAoIW1fdGh1bWIgfHwgIW1fdGh1bWItPnJl
bmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHBvc2l0aW9uOwotICAgIGlm
IChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHBvc2l0aW9u
ID0gcC55KCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAyOwotICAgIGVsc2UK
LSAgICAgICAgcG9zaXRpb24gPSBwLngoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT53aWR0aCgp
IC8gMjsKLSAgICAKLSAgICByZXR1cm4gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tTaXplKCkp
KTsKLX0KLQotaW50IFJlbmRlclNsaWRlcjo6Y3VycmVudFBvc2l0aW9uKCkKLXsKLSAgICBBU1NF
UlQobV90aHVtYik7Ci0gICAgQVNTRVJUKG1fdGh1bWItPnJlbmRlcmVyKCkpOwotCi0gICAgaWYg
KHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+
YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcmV0dXJuIHRv
UmVuZGVyQm94KG1fdGh1bWItPnJlbmRlcmVyKCkpLT55KCkgLSBjb250ZW50Qm94UmVjdCgpLnko
KTsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3gobV90aHVtYi0+cmVuZGVyZXIoKSktPngoKSAtIGNv
bnRlbnRCb3hSZWN0KCkueCgpOwotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjp0cmFja1NpemUoKQot
ewotICAgIEFTU0VSVChtX3RodW1iKTsKLSAgICBBU1NFUlQobV90aHVtYi0+cmVuZGVyZXIoKSk7
Ci0KLSAgICBpZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8
fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAg
ICByZXR1cm4gY29udGVudEhlaWdodCgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPmhlaWdodCgp
OwotICAgIHJldHVybiBjb250ZW50V2lkdGgoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT53aWR0
aCgpOwotfQotCi12b2lkIFJlbmRlclNsaWRlcjo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkK
LXsKLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIE1vdXNlRXZlbnQq
IG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VF
dmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICAgICAgaWYgKCFtb3VzZUV2
ZW50SXNJblRodW1iKG1vdXNlRXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgZXZl
bnRPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZUZvclBvc2l0aW9uKHBvc2l0aW9uRm9yT2Zmc2V0KGV2ZW50T2Zmc2V0KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3RodW1iLT5kZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotYm9vbCBSZW5kZXJTbGlkZXI6OmluRHJhZ01vZGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3RodW1iICYmIG1fdGh1bWItPmluRHJhZ01vZGUoKTsKKyAgICByZW5kZXJC
b3gtPnNldEZyYW1lUmVjdCh0aHVtYlJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCmluZGV4IGZjOGNlMjQ1NWEzZjBmNmJkODc2OTFlOWE2
NGMyZmQ3OTMyYTQ4Y2UuLmVmYmRhNzc5NzlmMjI4NWVlZTUzODU4YmU0NzA4Yjg3NzczMmFkN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCkBAIC0yMSwyMyArMjEsNjAgQEAKICNpZm5kZWYg
UmVuZGVyU2xpZGVyX2gKICNkZWZpbmUgUmVuZGVyU2xpZGVyX2gKIAorI2luY2x1ZGUgIkhUTUxE
aXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgSFRNTElucHV0RWxlbWVudDsKICAgICBjbGFzcyBNb3VzZUV2ZW50
OwotICAgIGNsYXNzIFNsaWRlclRodW1iRWxlbWVudDsKLSAgICAKKworLy8gRklYTUU6IE1PVkUg
VE8gU0VQQVJBVEUgQ0xBU1MhISEKK2NsYXNzIFJlbmRlclNsaWRlclRodW1iIDogcHVibGljIFJl
bmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTbGlkZXJUaHVtYihOb2RlKik7CisgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOworfTsKKworY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50IDog
cHVibGljIEhUTUxEaXZFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
bGlkZXJUaHVtYkVsZW1lbnQ+IGNyZWF0ZShFbGVtZW50KiBzaGFkb3dIb3N0KTsKKworICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0
eWxlKik7CisKKyAgICB2b2lkIGRyYWdGcm9tKGNvbnN0IEludFBvaW50Jik7CisgICAgYm9vbCBp
bkRyYWdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbkRyYWdNb2RlOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKKyAgICB2aXJ0dWFsIFBzZXVkb0lkIHN0eWxlUHNldWRvSWQoKSBjb25zdCB7IHJldHVy
biBTTElERVJfVEhVTUI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoKTsKKworICAgIFNsaWRlclRodW1i
RWxlbWVudChFbGVtZW50KiBzaGFkb3dIb3N0KTsKKyAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUq
IHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd0hvc3Q7IH0KKworICAgIEZsb2F0
UG9pbnQgbV9vZmZzZXRUb1RodW1iOworICAgIEVsZW1lbnQqIG1fc2hhZG93SG9zdDsKKyAgICBi
b29sIG1faW5EcmFnTW9kZTsKK307CisKK2lubGluZSBTbGlkZXJUaHVtYkVsZW1lbnQqIHRvU2xp
ZGVyVGh1bWJFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNsaWRlclRodW1iRWxl
bWVudCo+KG5vZGUpOworfQorCisKICAgICBjbGFzcyBSZW5kZXJTbGlkZXIgOiBwdWJsaWMgUmVu
ZGVyQmxvY2sgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVyU2xpZGVyKEhUTUxJbnB1dEVs
ZW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+UmVuZGVyU2xpZGVyKCk7CiAKLSAgICAgICAgdm9p
ZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsKLSAgICAgICAgYm9vbCBpbkRyYWdNb2RlKCkgY29uc3Q7
CiAgICAgICAgIEludFJlY3QgdGh1bWJSZWN0KCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU2xp
ZGVyIjsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTbGlkZXIoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CkBAIC00NSwyOCArODIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLQotICAgICAg
ICBib29sIG1vdXNlRXZlbnRJc0luVGh1bWIoTW91c2VFdmVudCopOwotICAgICAgICBGbG9hdFBv
aW50IG1vdXNlRXZlbnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqKTsKLQotICAgICAgICB2b2lk
IHNldFZhbHVlRm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKTsKLSAgICAgICAgdm9pZCBzZXRQb3Np
dGlvbkZyb21WYWx1ZSgpOwotICAgICAgICBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoY29uc3QgSW50
UG9pbnQmKTsKLQotICAgICAgICBpbnQgY3VycmVudFBvc2l0aW9uKCk7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHls
ZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLQotICAgICAgICBpbnQgdHJhY2tTaXplKCk7Ci0KLSAgICAgICAgUmVm
UHRyPFNsaWRlclRodW1iRWxlbWVudD4gbV90aHVtYjsKLQotICAgICAgICBmcmllbmQgY2xhc3Mg
U2xpZGVyVGh1bWJFbGVtZW50OwogICAgIH07CiAKICAgICBpbmxpbmUgUmVuZGVyU2xpZGVyKiB0
b1JlbmRlclNsaWRlcihSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAppbmRleCBkOTBiYmMyNmE2OTM1ODIxZDI1ZDdh
YWI4NmVkNThiYTAxYjI3MDljLi41N2NkMTI0MTNhNDFiZWVhYmFiMmM5MWI2MjU4OTIzZjI1Zjcz
NTcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tp
YS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3Bw
CkBAIC02NzcsNyArNjc3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIGkKIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gTWFrZSBhIHRo
dW1iIHNpbWlsYXIgdG8gdGhlIHNjcm9sbGJhciB0aHVtYi4KLSAgICBjb25zdCBib29sIGhvdmVy
ZWQgPSBpc0hvdmVyZWQobykgfHwgdG9SZW5kZXJTbGlkZXIoby0+cGFyZW50KCkpLT5pbkRyYWdN
b2RlKCk7CisgICAgY29uc3QgYm9vbCBob3ZlcmVkID0gaXNIb3ZlcmVkKG8pIHx8IHRvU2xpZGVy
VGh1bWJFbGVtZW50KG8tPm5vZGUoKSktPmluRHJhZ01vZGUoKTsKICAgICBjb25zdCBpbnQgbWlk
eCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMjsKICAgICBjb25zdCBpbnQgbWlkeSA9IHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7CiAgICAgY29uc3QgYm9vbCB2ZXJ0aWNhbCA9IChv
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAppbmRleCBiZTY3MGZm
ODllNjAyNjJiMDczZjU3ZGMyMDU2NDA4MzA4MjYwMGU0Li45MzEyNjJlMjQ2MWQyNDEwOTQ1NDU3
YmExMTkzMmNkYmNjN2RjOGRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtV2luLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtV2luLmNwcApAQCAtNTQ4LDcgKzU0OCw3IEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OmRldGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAg
ICAgICByZXN1bHQgPSBUVVNfRElTQUJMRUQ7CiAgICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhv
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvLT5wYXJlbnQoKSkpCiAgICAg
ICAgIHJlc3VsdCA9IFRVU19GT0NVU0VEOwotICAgIGVsc2UgaWYgKHRvUmVuZGVyU2xpZGVyKG8t
PnBhcmVudCgpKS0+aW5EcmFnTW9kZSgpKQorICAgIGVsc2UgaWYgKHRvU2xpZGVyVGh1bWJFbGVt
ZW50KG8tPm5vZGUoKSktPmluRHJhZ01vZGUoKSkKICAgICAgICAgcmVzdWx0ID0gVFVTX1BSRVNT
RUQ7CiAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfSE9U
OwpAQCAtNTcyLDcgKzU3Miw3IEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmRl
dGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTCiAgICAgaWYgKHBh
cnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KSB7CiAgICAgICAgIGlmICghaXNFbmFibGVkKG8tPnBhcmVudCgpKSkKICAgICAg
ICAgICAgIHJlc3VsdCA9IERGQ1NfSU5BQ1RJVkU7Ci0gICAgICAgIGVsc2UgaWYgKHRvUmVuZGVy
U2xpZGVyKG8tPnBhcmVudCgpKS0+aW5EcmFnTW9kZSgpKSAvLyBBY3RpdmUgc3VwZXJzZWRlcyBo
b3ZlcgorICAgICAgICBlbHNlIGlmICh0b1NsaWRlclRodW1iRWxlbWVudChvLT5ub2RlKCkpLT5p
bkRyYWdNb2RlKCkpIC8vIEFjdGl2ZSBzdXBlcnNlZGVzIGhvdmVyCiAgICAgICAgICAgICByZXN1
bHQgPSBERkNTX1BVU0hFRDsKICAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKG8pKQogICAgICAg
ICAgICAgcmVzdWx0ID0gREZDU19IT1Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmlu
ZGV4IDc5ODI4MzRiMjk2YTgzODUzNGFhYmRhOGQ4NTNiMjljYTkwODhiYmUuLmNiNTRiZGU4ZWY0
ZjUxZWY1NmY5NDg1OWFiYWRlOGUwNjdhNzlkOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAg
IGVsc2UKICAgICAgICAgb2xkUHJlc3NlZCA9IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVz
c2VkOwogCi0gICAgYm9vbCBwcmVzc2VkID0gdG9SZW5kZXJTbGlkZXIoby0+cGFyZW50KCkpLT5p
bkRyYWdNb2RlKCk7CisgICAgYm9vbCBwcmVzc2VkID0gdG9TbGlkZXJUaHVtYkVsZW1lbnQoby0+
bm9kZSgpKS0+aW5EcmFnTW9kZSgpOwogCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgbV9pc1NsaWRlclRodW1iVmVy
dGljYWxQcmVzc2VkID0gcHJlc3NlZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lU2FmYXJpLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmNwcAppbmRleCAwN2I4ZWI4YjYyZTMyMTBmYjU4NDZhNGExZTZlMzIyYWZmZWEzMDdhLi5kOWUx
NDc2N2Y4MzhmNWI2NDA5ZTVkYmY2MDdmNjMzMGUxNjk5MDgzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVTYWZhcmkuY3BwCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludAogCiAgICAgQVNTRVJUKG8tPnBhcmVudCgpLT5pc1NsaWRlcigpKTsKIAotICAg
IGJvb2wgcHJlc3NlZCA9IHRvUmVuZGVyU2xpZGVyKG8tPnBhcmVudCgpKS0+aW5EcmFnTW9kZSgp
OworICAgIGJvb2wgcHJlc3NlZCA9IHRvU2xpZGVyVGh1bWJFbGVtZW50KG8tPm5vZGUoKSktPmlu
RHJhZ01vZGUoKTsKICAgICBUaGVtZUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGRldGVybWluZVN0YXRl
KG8tPnBhcmVudCgpKTsKICAgICBzdGF0ZSAmPSB+U2FmYXJpVGhlbWU6OlByZXNzZWRTdGF0ZTsK
ICAgICBpZiAocHJlc3NlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRleCBi
NGZiOGViMjFlMDM2MGMwN2EwMTBjZTc1ZjJkOWEwNjE2OTgzOTYxLi44YzdlYzZlZWMzZTAzNTA2
MjA5YmQ3ZTcyZTAzNjQ5YTE0NzE5OWYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
Y3BwCkBAIC00MjksNyArNDI5LDcgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWlu
ZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgICAgICByZXN1bHQgPSBUVVNf
RElTQUJMRUQ7CiAgICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkpICYmIGlzRm9jdXNlZChvLT5wYXJlbnQoKSkpCiAgICAgICAgIHJlc3VsdCA9IFRVU19G
T0NVU0VEOwotICAgIGVsc2UgaWYgKHRvUmVuZGVyU2xpZGVyKG8tPnBhcmVudCgpKS0+aW5EcmFn
TW9kZSgpKQorICAgIGVsc2UgaWYgKHRvU2xpZGVyVGh1bWJFbGVtZW50KG8tPm5vZGUoKSktPmlu
RHJhZ01vZGUoKSkKICAgICAgICAgcmVzdWx0ID0gVFVTX1BSRVNTRUQ7CiAgICAgZWxzZSBpZiAo
aXNIb3ZlcmVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfSE9UOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRl
eCAxYjE5ZjI1NDhhYWQ0ZGJhMGMxYzMwYjlhNTkzNjY0ZmE4ZTVjMDg5Li5iOWM5YTY2NzExM2M3
MDc3MThhMmIyM2I1Yzc3MTUwZjFkNDgxMDY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtMzMyLDEzICsz
MzIsNiBAQCB2b2lkIFNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiAgICAgY2xlYXJJc1N5bmNocm9uaXppbmdTVkdB
dHRyaWJ1dGVzKCk7CiB9CiAKLUNvbnRhaW5lck5vZGUqIFNWR0VsZW1lbnQ6OmV2ZW50UGFyZW50
Tm9kZSgpCi17Ci0gICAgaWYgKENvbnRhaW5lck5vZGUqIHNoYWRvd1BhcmVudCA9IHNoYWRvd1Bh
cmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHNoYWRvd1BhcmVudDsKLSAgICByZXR1cm4gU3R5
bGVkRWxlbWVudDo6ZXZlbnRQYXJlbnROb2RlKCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgKaW5kZXggZmIyODI3OWNmODU1NjcxODdkMzM4YzdhZjE2MGVjMDZkYTBh
Yzc3Yi4uMTI3MWM3YjQzYThhYTY2MzQ2OGZkNThhZDAyM2NiZjUxZjgyYmYyMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aApAQCAtOTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzU3VwcG9ydGVkKFN0cmluZ0ltcGwqIGZlYXR1cmUsIFN0cmluZ0ltcGwqIHZlcnNp
b24pIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogZXZlbnRQYXJlbnRO
b2RlKCk7Ci0KICAgICAgICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxp
bmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpIHsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76266</attachid>
            <date>2010-12-10 15:06:35 -0800</date>
            <delta_ts>2011-01-11 16:41:39 -0800</delta_ts>
            <desc>WIP: Reconstruct based on prior patches.</desc>
            <filename>bug-44907-20101210150634.patch</filename>
            <type>text/plain</type>
            <size>41901</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmVhZjMzNzMw
MjJkNThjN2FlMmQ4ZjdlMzI4NzU5ZDZlOTM5MDQ0My4uZmExNDhjZWQ1Mjk1NjNhMjY5NjAxZDRj
MGI4MjQ1MmI0NzMzMjMzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTkxNyw2ICs5MTcsOCBAQAogCQk0MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUgLyog
U2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsgfTsK
IAkJNDEzOEQzMzUxMjQ0MDU0ODAwMzIzRDMzIC8qIEV2ZW50Q29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEzOEQzMzMxMjQ0MDU0ODAwMzIz
RDMzIC8qIEV2ZW50Q29udGV4dC5oICovOyB9OwogCQk0MTM4RDMzNjEyNDQwNTQ4MDAzMjNEMzMg
LyogRXZlbnRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxMzhEMzM0MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICov
OyB9OworCQk0MTUwRjhCOTEyQjJBRDY0MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwRjhCNzEy
QjJBRDY0MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmggKi87IH07CisJCTQxNTBGOEJB
MTJCMkFENjQwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY4QjgxMkIyQUQ2NDAwMDhDODYw
IC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgKi87IH07CiAJCTQxNjJBNDUwMTAxMTQ1QUUwMERG
RjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNjJBNDREMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTExMDExNDVBRTAwREZGM0VE
IC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNjJBNDRFMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRX
b3JrZXJDb250ZXh0LmggKi87IH07CiAJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0Rl
ZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNh
dGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CkBAIC03MjA4LDYgKzcyMTAsOCBAQAog
CQk0MTI3RDUzNjBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTM4RDMzMzEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50Q29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTM4RDMzNDEyNDQwNTQ4MDAzMjNEMzMgLyogRXZl
bnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNTBGOEI3MTJCMkFE
NjQwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2xpZGVyVGh1bWJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQxNTBGOEI4MTJCMkFENjQwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2xpZGVyVGh1bWJFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2MkE0NEQxMDExNDVBRTAwREZG
M0VEIC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHA7IHBhdGggPSB3b3JrZXJz
L0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTYyQTQ0RTEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lmg7
IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE2MkE0NEYxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtl
ckNvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERlZGljYXRlZFdvcmtlckNvbnRl
eHQuaWRsOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODcwLDYgKzE4ODc0LDggQEAKIAkJCQkwODRBRUJF
MzBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5oICovLAogCQkJCUJDN0ZBNjgwMEQx
RjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCAqLywKIAkJCQlCQzdGQTY3RjBE
MUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oICovLAorCQkJCTQxNTBGOEI4MTJC
MkFENjQwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwICovLAorCQkJCTQxNTBGOEI3
MTJCMkFENjQwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCAqLywKIAkJCQlEMDFBMjdB
QjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgKi8sCiAJCQkJRDAxQTI3
QUMxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuaCAqLywKIAkJCQlDRUEzOTQ5
QTExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCAqLywKQEAgLTIx
NTM2LDYgKzIxNTQyLDcgQEAKIAkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxl
Rm9udERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAv
KiBTaW5rRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUNEMEVGODZENDcwMDlE
MENBRiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTUw
RjhCOTEyQjJBRDY0MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0QjZGQTZGNDBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNEFGRDAwQzBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDMwMiw2ICsyNDMwOSw3IEBACiAJCQkJQjJBRkZD
N0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTEzMjdENjExMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUU5MTFDQzBFRjg2RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MTUwRjhCQTEyQjJBRDY0MDAwOEM4NjAg
LyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRCNkZBNkY1MEMz
OUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEI2
RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUU0QUZEMDBCMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggNTMzODhlZDUzY2E2NWIyYTkzZTM0
OTg2YmU2MzAzM2I5ZjNmZTc5Ny4uNDQ5NDg0NzlkMTY0MDE0YmFjOGYxMjY2MjZhM2E5YWMwODMy
MDk1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTc1OSwxMiArNzU5LDcgQEAgaW5s
aW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW4KIHsKICAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9IHBz
ZXVkb0lEOwogCi0gICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGUoKSA6IDA7Ci0K
LSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghbV9wYXJlbnROb2RlICYmIGUgJiYgZS0+aXNTVkdF
bGVtZW50KCkgJiYgZS0+aXNTaGFkb3dOb2RlKCkpCi0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGUt
PnNoYWRvd1BhcmVudE5vZGUoKTsKLSNlbmRpZgorICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5w
YXJlbnRPckhvc3ROb2RlKCkgOiAwOwogCiAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBt
X3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7CkBAIC0xMTQzLDYgKzExMzgsOCBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCogZSwgUmVuZGVyU3R5bAogCiAgICAgaWYgKGUtPnBzZXVkb0VsZW1lbnRJZCgpICE9IE5PUFNF
VURPKSB7CiAgICAgICAgIE5vZGUqIHBhcmVudCA9IGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAg
ICAgICAgaWYgKE5vZGUqIHNoYWRvd1Jvb3QgPSBwYXJlbnQtPnNoYWRvd1RyZWVSb290Tm9kZSgp
KQorICAgICAgICAgICAgcGFyZW50ID0gc2hhZG93Um9vdC0+c2hhZG93SG9zdCgpOwogICAgICAg
ICBpZiAocGFyZW50ICYmIHBhcmVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBzZXVkb1N0eWxlID0gcGFyZW50LT5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9T
dHlsZShlLT5wc2V1ZG9FbGVtZW50SWQoKSk7CiAgICAgICAgICAgICBpZiAocHNldWRvU3R5bGUp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9odG1sLmNzcyBiL1dlYkNvcmUvY3NzL2h0bWwuY3Nz
CmluZGV4IDgyM2Y1ZjMyZGI0ODRkN2M5NmExYzcwNTUyOTljMDRhZTYxYmE2ZTUuLmQ2ZmJiZGZi
ZTEzODVkNTE3YWNlOTkwY2IxYzkxNWVlMGY1YjJkNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L2h0bWwuY3NzCisrKyBiL1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC00NzQsNiArNDc0LDcgQEAg
aW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAKIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQtc2xp
ZGVyLXRodW1iIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6b250
YWw7CisgICAgZGlzcGxheTogYmxvY2s7CiB9CiAKIGlucHV0W3R5cGU9ImJ1dHRvbiJdOmRpc2Fi
bGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0icmVzZXQiXTpk
aXNhYmxlZCwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3NzIGIvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKaW5kZXggNmEwZjE0YjAwZDc3OTNjYzRjYTZjNGU1
NmEwZTFiN2M2MmM0NWVmNy4uOTY0ZDA0MzMxN2JiMGY5YTgyY2Y4NmY4ODJhMzNmMmVlM2I0YWZl
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvV2ViQ29y
ZS9jc3MvbWVkaWFDb250cm9scy5jc3MKQEAgLTg4LDYgKzg4LDEzIEBAIGF1ZGlvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
aW1lbGluZSB7CiAgICAgcGFkZGluZzogMHB4IDJweDsKIH0KIAorYXVkaW86Oi13ZWJraXQtc2xp
ZGVyLXRodW1iLCB2aWRlbzo6LXdlYmtpdC1zbGlkZXItdGh1bWIgeworICAgIC8qIFVuZm9ydHVu
YXRlbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBzZXR0aW5nIG9mIGFwcGVhcmFuY2UgaXMgaGFyZC1j
b2RlZCBpbiBSZW5kZXJTbGlkZXJUaHVtYjo6bGF5b3V0KCksCisgICAgICAgYnV0IHdlIG5lZWQg
dG8gaGF2ZSBhbiBhcHBlYXJhbmNlIG9mIHNvbWUgc29ydCB0byBzdGFydCBwYWludGluZy4gKi8K
KyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6b250YWw7CisgICAgZGlz
cGxheTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1z
bGlkZXItY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xp
ZGVyLWNvbnRhaW5lciB7CiAgICAgZGlzcGxheTogbm9uZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMzBkMjM5
YjllNDQ0MTRkZGVmZTdmNWViNmE3YzMxZGNmZDVlMjgyYy4uZTJiZjVkMGM1NjViODRkYTVjY2Rj
NDgzNDZmMDE1YzNmNGQyODE3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEwODIsOCArMTA4MiwxMCBAQCB2b2lk
IEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogewogICAgIEFT
U0VSVChub2RlKTsKIAotICAgIC8vIEZJWE1FOiBPbmNlIGFsbCBpbnN0YW5jZXMgb2Ygc2hhZG93
IERPTSBhcmUgY29udmVydGVkIHRvIHVzZSB0aGlzIGNvZGUsIGFkZCBzZXR0aW5nIG9mIHNoYWRv
dyBob3N0IChzaGFkb3dQYXJlbnQpIG9uIG5vZGUuCi0gICAgZW5zdXJlUmFyZURhdGEoKS0+bV9z
aGFkb3dSb290ID0gbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gcm9vdCA9IG5vZGU7CisgICAgY2xl
YXJTaGFkb3dSb290KCk7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+bV9zaGFkb3dSb290ID0gcm9v
dDsKKyAgICByb290LT5zZXRTaGFkb3dIb3N0KHRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OmNs
ZWFyU2hhZG93Um9vdCgpCkBAIC0xMDkyLDggKzEwOTQsMTAgQEAgdm9pZCBFbGVtZW50OjpjbGVh
clNoYWRvd1Jvb3QoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8Tm9kZT4gc2hhZG93
Um9vdCA9IHJhcmVEYXRhKCktPm1fc2hhZG93Um9vdC5yZWxlYXNlKCk7CisgICAgaWYgKCFzaGFk
b3dSb290KQorICAgICAgICByZXR1cm47CiAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5v
ZGVPZlN1YnRyZWUoc2hhZG93Um9vdC5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IE9uY2UgYWxsIGlu
c3RhbmNlcyBvZiBzaGFkb3cgRE9NIGFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoaXMgY29kZSwgYWRk
IGNsZWFyaW5nIG9mIHNoYWRvdyBob3N0IChzaGFkb3dQYXJlbnQpLgorICAgIHNoYWRvd1Jvb3Qt
PnNldFNoYWRvd0hvc3QoMCk7CiAgICAgaWYgKHNoYWRvd1Jvb3QtPmluRG9jdW1lbnQoKSkKICAg
ICAgICAgc2hhZG93Um9vdC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIGVsc2UKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuaCBiL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAxYzVj
NWM0MDM4YWZmNWYwNmFmOTE5YjQ4YmUwYjhlYjU0MGQ1NDRhLi40ZDI4ZWE0NmQyNGZkNTgwZjRh
MWJmZDEzZGUxN2MwOWU3MzRkNTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysr
IGIvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC01NTMsNiArNTUzLDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAKKyAgICBFbGVtZW50KiBz
aGFkb3dIb3N0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaGFkb3dIb3N0KEVsZW1lbnQqKTsKKwog
I2lmIFVTRShKU0MpCiAgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzKEpTQzo6TWFya1N0YWNr
JiBtYXJrU3RhY2ssIEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKQEAgLTYz
Nyw5ICs2NDAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSgpIGNv
bnN0OwogICAgIE5vZGVSYXJlRGF0YSogZW5zdXJlUmFyZURhdGEoKTsKIAotICAgIEVsZW1lbnQq
IHNoYWRvd0hvc3QoKSBjb25zdDsKLSAgICB2b2lkIHNldFNoYWRvd0hvc3QoRWxlbWVudCopOwot
CiBwcml2YXRlOgogI2lmIFVTRShKU0MpCiAgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xv
dyhKU0M6Ok1hcmtTdGFjayYsIEpTQzo6SlNHbG9iYWxEYXRhJik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vU2xpZGVyVGh1bWJF
bGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDM1NmIxZTRjMzIyYjkzMjhlYmM3ODExNTRmODNlOWQ3
ODQyZThiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vU2xpZGVyVGh1bWJFbGVtZW50
LmNwcApAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogRmlndXJl
IG91dCBob3cgdG8gbm90IGhhcmQtY29kZSBjYXNjYWRpbmcgYXBwZWFyYW5jZSBkZXBlbmRlbmNp
ZXMgYW5kIGtpbGwgdGhpcyBjbGFzcy4KK2NsYXNzIFJlbmRlclNsaWRlclRodW1iIDogcHVibGlj
IFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTbGlkZXJUaHVtYihOb2RlKik7Cisg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworfTsKKworUmVuZGVyU2xpZGVyVGh1bWI6OlJlbmRl
clNsaWRlclRodW1iKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworfQor
Cit2b2lkIFJlbmRlclNsaWRlclRodW1iOjpsYXlvdXQoKQoreworICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IHBhcmVudCgpLT5zdHlsZSgpOworICAgIGlmIChwYXJlbnRTdHlsZS0+YXBw
ZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICAgICAgc3R5bGUoKS0+c2V0QXBw
ZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgZWxzZSBpZiAocGFyZW50U3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICAgICAgc3R5bGUo
KS0+c2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KTsKKyAgICBlbHNlIGlm
IChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyUGFydCkKKyAgICAgICAg
c3R5bGUoKS0+c2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFydCk7CisgICAgZWxzZSBp
ZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCisg
ICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQp
OworCisgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkgeworICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgcGFzcyB0aGUgc3R5bGUsIG5vdCB0aGUgcmVuZGVyZXIsIHRvIHRoZSB0
aGVtZS4KKyAgICAgICAgdGhlbWUoKS0+YWRqdXN0U2xpZGVyVGh1bWJTaXplKHRoaXMpOworICAg
IH0KKyAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Cit9CisKK1JlbmRlck9iamVjdCogU2xpZGVy
VGh1bWJFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2xpZGVyVGh1bWIodGhpcyk7
Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkcmFnRnJvbShjb25zdCBJbnRQb2ludCYg
cG9pbnQpCit7CisgICAgc2V0UG9zaXRpb24ocG9pbnQpOworICAgIHN0YXJ0RHJhZ2dpbmcoKTsK
K30KKworYm9vbCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmluRHJhZ01vZGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2luRHJhZ01vZGU7Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAg
ICBBU1NFUlQoaW5wdXQpOworICAgIEFTU0VSVChpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgQVNT
RVJUKHJlbmRlcmVyKCkpOworCisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKSB8fCAhcmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFBvaW50IG9mZnNldCA9IHJvdW5kZWRJbnRQ
b2ludChpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKHBvaW50LCBmYWxzZSwgdHJ1
ZSkpOworICAgIFJlbmRlclN0eWxlKiBzbGlkZXJTdHlsZSA9IGlucHV0LT5yZW5kZXJlcigpLT5z
dHlsZSgpOworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IHNsaWRlclN0eWxlLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHNsaWRlclN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVk
aWFWb2x1bWVTbGlkZXJQYXJ0OworCisgICAgaW50IHRyYWNrU2l6ZTsKKyAgICBpbnQgcG9zaXRp
b247CisgICAgaW50IGN1cnJlbnRQb3NpdGlvbjsKKyAgICBpZiAoaXNWZXJ0aWNhbCkgeworICAg
ICAgICB0cmFja1NpemUgPSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRIZWlnaHQoKSAtIHJl
bmRlckJveCgpLT5oZWlnaHQoKTsKKyAgICAgICAgcG9zaXRpb24gPSBvZmZzZXQueSgpIC0gcmVu
ZGVyQm94KCktPmhlaWdodCgpIC8gMjsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcmVuZGVy
Qm94KCktPnkoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudEJveFJlY3QoKS55KCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdHJhY2tTaXplID0gaW5wdXQtPnJlbmRlckJveCgpLT5jb250
ZW50V2lkdGgoKSAtIHJlbmRlckJveCgpLT53aWR0aCgpOworICAgICAgICBwb3NpdGlvbiA9IG9m
ZnNldC54KCkgLSByZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7CisgICAgICAgIGN1cnJlbnRQb3Np
dGlvbiA9IHJlbmRlckJveCgpLT54KCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRCb3hS
ZWN0KCkueCgpOworICAgIH0KKyAgICBwb3NpdGlvbiA9IG1heCgwLCBtaW4ocG9zaXRpb24sIHRy
YWNrU2l6ZSkpOworCisgICAgU3RlcFJhbmdlIHJhbmdlKGlucHV0KTsKKyAgICBkb3VibGUgZnJh
Y3Rpb24gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIHRyYWNrU2l6ZTsKKyAgICBp
ZiAoaXNWZXJ0aWNhbCkKKyAgICAgICAgZnJhY3Rpb24gPSAxIC0gZnJhY3Rpb247CisgICAgZG91
YmxlIHZhbHVlID0gcmFuZ2UuY2xhbXBWYWx1ZShyYW5nZS52YWx1ZUZyb21Qcm9wb3J0aW9uKGZy
YWN0aW9uKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBubyBsb25nZXIgYmVpbmcgc2V0IGZy
b20gcmVuZGVyZXIuCisgICAgaW5wdXQtPnNldFZhbHVlRnJvbVJlbmRlcmVyKHNlcmlhbGl6ZUZv
ck51bWJlclR5cGUodmFsdWUpKTsKKworICAgIC8vIEZJWE1FOiBXaHkgZXhpdCBoZXJlIGFuZCBu
b3QgZWFybGllciwgYmVmb3JlIHNldHRpbmcgdGhlIHZhbHVlIGFnYWluPworICAgIGlmIChwb3Np
dGlvbiA9PSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
KCktPnNldE5lZWRzTGF5b3V0KHRydWUpOworCisgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ug
dGhpcyBjb3VsZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVudHMgaWYgdGhlIHNhbWUgdmFsdWUgaXMg
c2V0CisgICAgLy8gbXVsdGlwbGUgdGltZXMgd2l0aCBubyBsYXlvdXQgaW4gYmV0d2Vlbi4KKyAg
ICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Cit9CisKK3ZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpzdGFydERyYWdnaW5nKCkKK3sKKyAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKKyAgICAgICAgbV9pbkRyYWdNb2Rl
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQo
KSkgeworICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0g
c3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBib29sIGlzTGVmdEJ1dHRvbiA9
IG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b247CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOworCisgICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7CisgICAgICAgIHN0
YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgJiYgaXNMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChtX2luRHJhZ01vZGUp
IHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQor
ICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlKDApOworICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dCh0cnVlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQg
c2V0RGVmYXVsdEhhbmRsZWQgaGVyZSwgYnV0IHdlIG5lZWQgdG8gZmFsbCB0aHJvdWdoIHRvIGtl
ZXAKKyAgICAgICAgICAgIC8vICAgICAgICBNZWRpYUVsZW1lbnQgYml0cyB3b3JraW5nLiBBZGQg
c2V0RGVmYXVsdEhhbmRsZWQgaGVyZSBvbmNlIE1lZGlhRWxlbWVudCBpcworICAgICAgICAgICAg
Ly8gICAgICAgIHJlZmFjdG9yZWQgdG8gdXNlIHNhbmUgc2hhZG93IERPTS4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW1vdmVFdmVudCkgeworICAgICAgICBpZiAobV9pbkRyYWdNb2RlKSB7CisgICAg
ICAgICAgICBzZXRQb3NpdGlvbihtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOworICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZXRhY2goKQorewor
ICAgIGlmIChtX2luRHJhZ01vZGUpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENh
cHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICB9CisgICAgSFRNTERpdkVsZW1lbnQ6OmRl
dGFjaCgpOworfQorCitQc2V1ZG9JZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OnBzZXVkb0VsZW1lbnRJ
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNMSURFUl9USFVNQjsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vU2xpZGVyVGh1bWJFbGVtZW50LmggYi9XZWJDb3JlL2RvbS9TbGlkZXJU
aHVtYkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjBkMmMyNGM3ZGZiNGY0MzhlMDM1OTRiZGE5YWI4
MzRhMzQ5ZjRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vU2xpZGVyVGh1bWJFbGVt
ZW50LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNsaWRlclRodW1i
RWxlbWVudF9oCisjZGVmaW5lIFNsaWRlclRodW1iRWxlbWVudF9oCisKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNsaWRlclRodW1iRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQqKTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKKyAgICB2b2lkIGRyYWdGcm9tKGNvbnN0IEludFBv
aW50Jik7CisgICAgYm9vbCBpbkRyYWdNb2RlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsK
KyAgICB2aXJ0dWFsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRJZCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHN0YXJ0
RHJhZ2dpbmcoKTsKKworICAgIFNsaWRlclRodW1iRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQp
OworCisgICAgRmxvYXRQb2ludCBtX29mZnNldFRvVGh1bWI7CisgICAgYm9vbCBtX2luRHJhZ01v
ZGU7Cit9OworCitpbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50KiB0b1NsaWRlclRodW1iRWxlbWVu
dChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc0hUTUxFbGVtZW50
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTbGlkZXJUaHVtYkVsZW1lbnQqPihub2RlKTsK
K30KKworaW5saW5lIFNsaWRlclRodW1iRWxlbWVudDo6U2xpZGVyVGh1bWJFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6ZGl2VGFnLCBk
b2N1bWVudCkKKyAgICAsIG1faW5EcmFnTW9kZShmYWxzZSkKK3sKK30KKworaW5saW5lIFBhc3NS
ZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJUaHVtYkVs
ZW1lbnQoZG9jdW1lbnQpKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCA3NmY4NjY1MGIzNjdiYzJhNjZmYzU1M2EwMThmM2VlMDQwYmI3YmQ0Li4yODFk
ZThjMzc0Njc0YTk3MDk1ZTQ0MGYyNTRkYzk3MGUxNDBkZTI0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0ZXBS
YW5nZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIK
QEAgLTU0Myw2ICs1NDQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQog
ICAgICAgICAgICAgYm9vbCBkaWRSZXNwZWN0SGVpZ2h0QW5kV2lkdGggPSByZXNwZWN0SGVpZ2h0
QW5kV2lkdGhBdHRycygpOwogICAgICAgICAgICAgbV9kZXByZWNhdGVkVHlwZU51bWJlciA9IG5l
d1R5cGU7CiAgICAgICAgICAgICBtX2lucHV0VHlwZSA9IElucHV0VHlwZTo6Y3JlYXRlKHRoaXMs
IHR5cGVTdHJpbmcpOworICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNyZWF0ZVNoYWRvd1N1YnRy
ZWUoKTsKICAgICAgICAgICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKICAgICAgICAg
ICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0
ZSgpOwogICAgICAgICAgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQgPSBkZXByZWNhdGVkSW5wdXRU
eXBlKCkgPT0gUEFTU1dPUkQ7CkBAIC0xMDcxLDcgKzEwNzMsMTEgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVu
dCkKICAgICAgICAgICAgIGlmIChpc1RleHRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBhbGwgaW5wdXQgdHlwZXMg
ZG8gdGhpcyBpbnN0ZWFkIG9mIHVwZGF0ZUZyb21FbGVtZW50LgorICAgICAgICBpZiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IFJBTkdFICYmIHJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5k
ZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0gZWxzZQogICAgICAgICBzZXRBdHRyaWJ1dGUo
dmFsdWVBdHRyLCBzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CiAKQEAgLTEzNzUsOCArMTM4MSwxOCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkK
ICAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVu
dCgpIHx8IGV2dC0+aXNEcmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmZvY3VzRXZlbnQpKQogICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZShyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiAKLSAgICBpZiAoZGVwcmVjYXRlZElu
cHV0VHlwZSgpID09IFJBTkdFICYmIHJlbmRlcmVyKCkgJiYgKGV2dC0+aXNNb3VzZUV2ZW50KCkg
fHwgZXZ0LT5pc0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50KCkpKQotICAgICAgICB0
b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CisgICAgLy8gRklY
TUU6IFJlcGxhY2Ugd2l0aCBJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50CisgICAgaWYg
KGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQU5HRSAmJiByZW5kZXJlcigpICYmIGV2dC0+aXNN
b3VzZUV2ZW50KCkpIHsKKyAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKKyAgICAgICAgICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWIgPSB0b1NsaWRlclRo
dW1iRWxlbWVudChzaGFkb3dSb290KCkpOworICAgICAgICAgICAgQVNTRVJUKHRodW1iKTsKKyAg
ICAgICAgICAgIGlmICh0aHVtYi0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgIHRodW1i
LT5kcmFnRnJvbShtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KIAogICAgIGlmICghY2FsbEJhc2VDbGFzc0Vhcmx5ICYmICFldnQtPmRlZmF1bHRIYW5k
bGVkKCkpCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZ0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3Bw
IGIvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5kZXggOGE3YTk3OTljMzE3YTI3Y2RjZWYz
NWUzMjE4YzdjYmY1MTJkY2M2Ni4uZTQzNTAyODFlYzQwNzZkZTUyODlmMjcxNThjZWVmNDQ2Yzg1
YmUzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTMyMSw2ICszMjEsMTAgQEAgYm9vbCBJbnB1dFR5cGU6
OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBldmVudC0+
aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCAmJiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5jaGFyQ29kZSgp
ID09ICdccic7CiB9CiAKK3ZvaWQgSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKK3sK
K30KKwogUmVuZGVyT2JqZWN0KiBJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJPYmplY3Q6
OmNyZWF0ZU9iamVjdChlbGVtZW50KCksIHN0eWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuaCBiL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCBmMjc1YWU4MTRk
MGE5NTczZjlkYTM4MmMyZDYzMjYwNjdhYjNlZWI3Li4wYmU5MDAyODgwOGNhNjRhZmQ5NmU2NWQ2
MmUxYThkNmMwODFmOTNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysr
IGIvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0xMjAsNiArMTIwLDcgQEAgcHVibGljOgog
ICAgIC8vIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCiAKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CiAKICAgICAvLyBQYXJzZXMgdGhl
IHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBlLCBhbmQgcmV0dXJuCiAgICAgLy8gdGhlIGRv
dWJsZSB2YWx1ZSBmb3IgdGhlIHBhcnNpbmcgcmVzdWx0IGlmIHRoZSBwYXJzaW5nCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9odG1sL1Jhbmdl
SW5wdXRUeXBlLmNwcAppbmRleCA1MDUyMGNkMWZiYTBiNGRmOTI0ZDBkNjZhMmMyY2IwZjc5MTli
ZTUyLi42YWY2Nzc4Y2UyZTAwMTM3Y2U5YWM4ZWVjZDMxMGQ0YTFmMmNjYjVlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9SYW5n
ZUlucHV0VHlwZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgorI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgogI2luY2x1ZGUgPGxpbWl0cz4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CkBAIC0xNzQsNiArMTc1LDExIEBAIGJvb2wgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25F
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBS
YW5nZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCit7CisgICAgZWxlbWVudCgpLT5z
ZXRTaGFkb3dSb290KFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKSkpOworfQorCiBSZW5kZXJPYmplY3QqIFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29uc3QKIHsKICAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyU2xpZGVyKGVsZW1lbnQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvUmFuZ2VJbnB1dFR5cGUuaCBiL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCmlu
ZGV4IDE0MjgwZTg2ZWFiZjM5YWVhOTk0NjFmZTNiMTRlYTE5MmJhNTBmZDUuLjFlZTdlMjE5YWFi
ZTlhMjk3NzQ0NThiYzEyNGJkZWQ5NTA3YjM4NzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9S
YW5nZUlucHV0VHlwZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCkBAIC01
NSw2ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAg
dmlydHVhbCBkb3VibGUgcGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0
OwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IDhkZmRjODE2Mzg2NGIwM2Mx
ZWU4MTFjMTcxNjQ4MmE0Y2U5YjRmNWUuLjU3YTk1M2ViYWJiMjdiOTQ2YjY5OGVhODZiMjcyYzYx
Y2IxNWJhMjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAK
QEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1
bWJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQ5LDYgKzQ1MCw4IEBA
IHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2goKQogICAgICAgICBwYXJlbnRO
b2RlKCktPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+
cmVuZGVyZXIoKSA6IDApOwogICAgIH0gIAogICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwor
ICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdCgpKQorICAgICAgICBzaGFkb3dO
b2RlLT5hdHRhY2goKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0
ZVN0eWxlKCkKQEAgLTcyNSw4ICs3MjgsOCBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIG1lZGlhRWxl
bWVudCgpLT5zZXRDdXJyZW50VGltZSh0aW1lLCBlYyk7CiAgICAgfQogCi0gICAgUmVuZGVyU2xp
ZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKTsKLSAgICBpZiAoc2xpZGVy
ICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQorICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWIg
PSB0b1NsaWRlclRodW1iRWxlbWVudChzaGFkb3dSb290KCkpOworICAgIGlmICh0aHVtYiAmJiB0
aHVtYi0+aW5EcmFnTW9kZSgpKQogICAgICAgICB0b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudCgp
LT5yZW5kZXJlcigpKS0+dXBkYXRlVGltZURpc3BsYXkoKTsKIAogICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcAppbmRleCAzOGU2MDg5ODhhY2E2MjRlN2QyOWZhN2JiOTM1ODExNDk3NGM3MmQ1Li4yZDYx
NjMzYjMwNWVmNTk2NTFmNjZjZjJlZGE0YjhhMDRlZWYxOTE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTaGFkb3dFbGVtZW50LmgiCisjaW5j
bHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU3RlcFJhbmdlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtNTMsOTkgKzU0LDYgQEAgc3RhdGljIGRvdWJs
ZSBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBy
YW5nZS5wcm9wb3J0aW9uRnJvbVZhbHVlKHJhbmdlLnZhbHVlRnJvbUVsZW1lbnQoZWxlbWVudCkp
OwogfQogCi1jbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQgOiBwdWJsaWMgU2hhZG93QmxvY2tFbGVt
ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+
IGNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKLQotICAgIGJvb2wgaW5EcmFnTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5EcmFnTW9kZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0g
ICAgdmlydHVhbCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50SWQoKSBjb25zdCB7IHJldHVybiBTTElE
RVJfVEhVTUI7IH0KLQotcHJpdmF0ZTogICAgICAgIAotICAgIFNsaWRlclRodW1iRWxlbWVudChI
VE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKLQotICAgIEZsb2F0UG9pbnQgbV9vZmZzZXRUb1Ro
dW1iOwotICAgIGJvb2wgbV9pbkRyYWdNb2RlOwotfTsKLQotaW5saW5lIFNsaWRlclRodW1iRWxl
bWVudDo6U2xpZGVyVGh1bWJFbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0gICAg
OiBTaGFkb3dCbG9ja0VsZW1lbnQoc2hhZG93UGFyZW50KQotICAgICwgbV9pbkRyYWdNb2RlKGZh
bHNlKQotewotfQotCi1pbmxpbmUgUGFzc1JlZlB0cjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRl
clRodW1iRWxlbWVudDo6Y3JlYXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQoc2hhZG93UGFyZW50KSk7Ci19
Ci0KLXZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKLXsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBTaGFk
b3dCbG9ja0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCk7Ci0gICAgYm9vbCBpc0xlZnRCdXR0b24gPSBtb3VzZUV2ZW50LT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
ID0gZXZlbnQtPnR5cGUoKTsKLQotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50ICYmIGlzTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+
ZnJhbWUoKSAmJiByZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRl
ciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlm
IChzbGlkZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2xpZGVyLT5tb3VzZUV2ZW50SXNJblRo
dW1iKG1vdXNlRXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdGVkIHRo
ZSB0aHVtYiwgd2Ugd2FudCB0aGUgY3Vyc29yIHRvIGFsd2F5cyBzdGF5IGF0Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBzYW1lIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0aHVtYi4KLSAg
ICAgICAgICAgICAgICAgICAgbV9vZmZzZXRUb1RodW1iID0gc2xpZGVyLT5tb3VzZUV2ZW50T2Zm
c2V0VG9UaHVtYihtb3VzZUV2ZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBhcmUgb3V0c2lkZSB0aGUgdGh1bWIsIG1vdmUgdGhlIHRodW1i
IHRvIHRoZSBwb2ludCB3ZXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNsaWNrZWQuIFdl
J2xsIGJlIGV4YWN0bHkgYXQgdGhlIGNlbnRlciBvZiB0aGUgdGh1bWIuCi0gICAgICAgICAgICAg
ICAgICAgIG1fb2Zmc2V0VG9UaHVtYi5zZXRYKDApOwotICAgICAgICAgICAgICAgICAgICBtX29m
ZnNldFRvVGh1bWIuc2V0WSgwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBtX2luRHJhZ01vZGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoc2hhZG93SG9z
dCgpKTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzTGVmdEJ1dHRv
bikgewotICAgICAgICBpZiAobV9pbkRyYWdNb2RlKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAKLSAgICAg
ICAgICAgIG1faW5EcmFnTW9kZSA9IGZhbHNlOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAgICAg
aWYgKG1faW5EcmFnTW9kZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRl
cmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmIChzbGlkZXIpIHsKLSAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IGN1clBvaW50ID0gc2xpZGVyLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VF
dmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
SW50UG9pbnQgZXZlbnRPZmZzZXQoY3VyUG9pbnQueCgpICsgbV9vZmZzZXRUb1RodW1iLngoKSwg
Y3VyUG9pbnQueSgpICsgbV9vZmZzZXRUb1RodW1iLnkoKSk7Ci0gICAgICAgICAgICAgICAgc2xp
ZGVyLT5zZXRWYWx1ZUZvclBvc2l0aW9uKHNsaWRlci0+cG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBTaGFkb3dCbG9ja0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQot
Ci12b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICBpZiAobV9pbkRyYWdN
b2RlKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQot
ICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50
c05vZGUoMCk7ICAgICAgCi0gICAgfQotICAgIFNoYWRvd0Jsb2NrRWxlbWVudDo6ZGV0YWNoKCk7
Ci19Ci0KIFJlbmRlclNsaWRlcjo6UmVuZGVyU2xpZGVyKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQogewpAQCAtMTUzLDggKzYxLDYgQEAgUmVu
ZGVyU2xpZGVyOjpSZW5kZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIAogUmVu
ZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkKIHsKLSAgICBpZiAobV90aHVtYikKLSAgICAgICAg
bV90aHVtYi0+ZGV0YWNoKCk7CiB9CiAKIGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRp
b24oRm9udEJhc2VsaW5lLCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBM
aW5lUG9zaXRpb25Nb2RlKSBjb25zdApAQCAtMTk2LDQwICsxMDIsMzYgQEAgdm9pZCBSZW5kZXJT
bGlkZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHZvaWQgUmVuZGVyU2xpZGVy
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7Ci0KLSAgICBpZiAobV90aHVtYikKLSAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIoKS0+
c2V0U3R5bGUoY3JlYXRlVGh1bWJTdHlsZShzdHlsZSgpKSk7Ci0KICAgICBzZXRSZXBsYWNlZChp
c0lubGluZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU2xpZGVyOjpj
cmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
KCktPnN0eWxlRm9yRWxlbWVudChtX3RodW1iLmdldCgpLCBzdHlsZSgpLCBmYWxzZSk7Ci0gICAg
dGh1bWJTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0KLSAgICBpZiAocGFyZW50U3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHRodW1iU3R5bGUtPnNl
dEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwotICAgIGVsc2UgaWYgKHBhcmVu
dFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIHRo
dW1iU3R5bGUtPnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7Ci0gICAg
ZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQpCi0g
ICAgICAgIHRodW1iU3R5bGUtPnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVtYlBhcnQpOwot
ICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlk
ZXJQYXJ0KQotICAgICAgICB0aHVtYlN0eWxlLT5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0KTsKIAotICAgIHJldHVybiB0aHVtYlN0eWxlLnJlbGVhc2UoKTsKK3N0YXRp
YyBSZW5kZXJCb3gqIHRodW1iUmVuZGVyQm94KE5vZGUqIG5vZGUpCit7CisgICAgU2xpZGVyVGh1
bWJFbGVtZW50KiB0aHVtYiA9IHRvU2xpZGVyVGh1bWJFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+c2hhZG93Um9vdCgpKTsKKyAgICByZXR1cm4gdGh1bWIgPyB0b1JlbmRlckJv
eCh0aHVtYi0+cmVuZGVyZXIoKSkgOiAwOwogfQogCiBJbnRSZWN0IFJlbmRlclNsaWRlcjo6dGh1
bWJSZWN0KCkKIHsKLSAgICBpZiAoIW1fdGh1bWIpCisgICAgUmVuZGVyQm94KiByZW5kZXJCb3gg
PSB0aHVtYlJlbmRlckJveChub2RlKCkpOworICAgIGlmICghcmVuZGVyQm94KQogICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCB0aHVtYlJlY3Q7Ci0gICAgUmVuZGVyQm94
KiB0aHVtYiA9IHRvUmVuZGVyQm94KG1fdGh1bWItPnJlbmRlcmVyKCkpOworICAgIHJldHVybiBy
ZW5kZXJCb3gtPmZyYW1lUmVjdCgpOworfQogCi0gICAgdGh1bWJSZWN0LnNldFdpZHRoKHRodW1i
LT5zdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5WYWx1ZShjb250ZW50V2lkdGgoKSkpOwotICAgIHRo
dW1iUmVjdC5zZXRIZWlnaHQodGh1bWItPnN0eWxlKCktPmhlaWdodCgpLmNhbGNNaW5WYWx1ZShj
b250ZW50SGVpZ2h0KCkpKTsKK3ZvaWQgUmVuZGVyU2xpZGVyOjpsYXlvdXQoKQoreworICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKKyAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CisKKyAgICAv
LyBGSVhNRTogRWxtaW5hdGUgdGhpcyB0d2Vha2luZyBvZiB0aGUgdGh1bWIgcmVjdCBjb21wbGV0
ZWx5LiBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4KKyAgICBSZW5kZXJCb3gqIHJlbmRlckJv
eCA9IHRodW1iUmVuZGVyQm94KG5vZGUoKSk7CisgICAgaWYgKCFyZW5kZXJCb3gpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFJlY3QgdGh1bWJSZWN0ID0gcmVuZGVyQm94LT5mcmFtZVJlY3Qo
KTsKIAogICAgIGRvdWJsZSBmcmFjdGlvbiA9IHNsaWRlclBvc2l0aW9uKHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihub2RlKCkpKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gY29u
dGVudEJveFJlY3QoKTsKQEAgLTI0MSwxODAgKzE0Myw3IEBAIEludFJlY3QgUmVuZGVyU2xpZGVy
Ojp0aHVtYlJlY3QoKQogICAgICAgICB0aHVtYlJlY3Quc2V0WShjb250ZW50UmVjdC55KCkgKyAo
Y29udGVudFJlY3QuaGVpZ2h0KCkgLSB0aHVtYlJlY3QuaGVpZ2h0KCkpIC8gMik7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRodW1iUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgp
Ci17Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotCi0gICAgUmVuZGVyQm94KiB0aHVtYiA9
IG1fdGh1bWIgPyB0b1JlbmRlckJveChtX3RodW1iLT5yZW5kZXJlcigpKSA6IDA7Ci0KLSAgICBJ
bnRTaXplIGJhc2VTaXplKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpLCBib3JkZXJBbmRQYWRkaW5n
SGVpZ2h0KCkpOwotCi0gICAgaWYgKHRodW1iKSB7Ci0gICAgICAgIC8vIEFsbG93IHRoZSB0aGVt
ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIHRodW1iLgotICAgICAgICBpZiAodGh1bWItPnN0eWxl
KCktPmhhc0FwcGVhcmFuY2UoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHBhc3MgdGhlIHN0eWxlLCBub3QgdGhlIHJlbmRlcmVyLCB0byB0aGUgdGhlbWUuCi0gICAgICAg
ICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUodGh1bWIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYmFzZVNpemUuZXhwYW5kKHRodW1iLT5zdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5W
YWx1ZSgwKSwgdGh1bWItPnN0eWxlKCktPmhlaWdodCgpLmNhbGNNaW5WYWx1ZSgwKSk7Ci0gICAg
fQotCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpOwotCi0gICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwotCi0gICAg
c2V0U2l6ZShiYXNlU2l6ZSk7Ci0gICAgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwotICAgIGNvbXB1
dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKLQotICAgIGlm
ICh0aHVtYikgewotICAgICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKCkpCi0gICAgICAgICAgICB0
aHVtYi0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7Ci0KLSAgICAgICAgTGF5b3V0
U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgc2l6ZSgpLCBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLQotICAgICAgICBJbnRSZWN0IG9sZFRo
dW1iUmVjdCA9IHRodW1iLT5mcmFtZVJlY3QoKTsKLQotICAgICAgICB0aHVtYi0+bGF5b3V0SWZO
ZWVkZWQoKTsKLQotICAgICAgICBJbnRSZWN0IHJlY3QgPSB0aHVtYlJlY3QoKTsKLSAgICAgICAg
dGh1bWItPnNldEZyYW1lUmVjdChyZWN0KTsKLSAgICAgICAgaWYgKHRodW1iLT5jaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKSkKLSAgICAgICAgICAgIHRodW1iLT5yZXBhaW50RHVyaW5nTGF5
b3V0SWZNb3ZlZChvbGRUaHVtYlJlY3QpOwotCi0gICAgICAgIHN0YXRlUHVzaGVyLnBvcCgpOwot
ICAgICAgICBhZGRPdmVyZmxvd0Zyb21DaGlsZCh0aHVtYik7Ci0gICAgfQotCi0gICAgcmVwYWlu
dGVyLnJlcGFpbnRBZnRlckxheW91dCgpOyAgICAKLQotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNl
KTsKLX0KLQotdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICAv
LyBMYXlvdXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHRodW1iJ3Mgc2l6ZSBhbmQgcG9zaXRpb24u
Ci0gICAgaWYgKCFtX3RodW1iKSB7Ci0gICAgICAgIG1fdGh1bWIgPSBTbGlkZXJUaHVtYkVsZW1l
bnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSkpOwotICAgICAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkp
OwotICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJlcihy
ZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdldCgpKSk7Ci0gICAgICAgIG1fdGh1bWItPnJlbmRl
cmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgbV90aHVtYi0+
c2V0QXR0YWNoZWQoKTsKLSAgICAgICAgbV90aHVtYi0+c2V0SW5Eb2N1bWVudCgpOwotICAgICAg
ICBhZGRDaGlsZChtX3RodW1iLT5yZW5kZXJlcigpKTsKLSAgICB9Ci0gICAgc2V0TmVlZHNMYXlv
dXQodHJ1ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50SXNJblRodW1iKE1v
dXNlRXZlbnQqIGV2dCkKLXsKLSAgICBpZiAoIW1fdGh1bWIgfHwgIW1fdGh1bWItPnJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBpZiAo
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyUGFydCB8fCBzdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KSB7Ci0gICAgICAgIE1lZGlhQ29udHJv
bElucHV0RWxlbWVudCAqc2xpZGVyVGh1bWIgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQqPihtX3RodW1iLT5yZW5kZXJlcigpLT5ub2RlKCkpOwotICAgICAgICByZXR1cm4g
c2xpZGVyVGh1bWItPmhpdFRlc3QoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwotICAgIH0KLSNl
bmRpZgotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV90aHVtYi0+cmVuZGVyQm94KCkt
PmFic29sdXRlVG9Mb2NhbChldnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOwot
ICAgIEludFJlY3QgdGh1bWJCb3VuZHMgPSBtX3RodW1iLT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94
UmVjdCgpOwotICAgIHJldHVybiB0aHVtYkJvdW5kcy5jb250YWlucyhyb3VuZGVkSW50UG9pbnQo
bG9jYWxQb2ludCkpOwotfQotCi1GbG9hdFBvaW50IFJlbmRlclNsaWRlcjo6bW91c2VFdmVudE9m
ZnNldFRvVGh1bWIoTW91c2VFdmVudCogZXZ0KQotewotICAgIEFTU0VSVChtX3RodW1iICYmIG1f
dGh1bWItPnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fdGh1bWIt
PnJlbmRlckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZh
bHNlLCB0cnVlKTsKLSAgICBJbnRSZWN0IHRodW1iQm91bmRzID0gbV90aHVtYi0+cmVuZGVyQm94
KCktPmJvcmRlckJveFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IG9mZnNldDsKLSAgICBvZmZzZXQu
c2V0WCh0aHVtYkJvdW5kcy54KCkgKyB0aHVtYkJvdW5kcy53aWR0aCgpIC8gMiAtIGxvY2FsUG9p
bnQueCgpKTsKLSAgICBvZmZzZXQuc2V0WSh0aHVtYkJvdW5kcy55KCkgKyB0aHVtYkJvdW5kcy5o
ZWlnaHQoKSAvIDIgLSBsb2NhbFBvaW50LnkoKSk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQot
dm9pZCBSZW5kZXJTbGlkZXI6OnNldFZhbHVlRm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKQotewot
ICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUgYmFz
ZWQgb24gdGhlIHBvc2l0aW9uLCBhbmQgc2VuZCBpdCB0byB0aGUgZWxlbWVudC4KLSAgICBTdGVw
UmFuZ2UgcmFuZ2UoZWxlbWVudCk7Ci0gICAgZG91YmxlIGZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPihwb3NpdGlvbikgLyB0cmFja1NpemUoKTsKLSAgICBpZiAoc3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0g
TWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBmcmFjdGlvbiA9IDEgLSBmcmFjdGlvbjsK
LSAgICBkb3VibGUgdmFsdWUgPSByYW5nZS5jbGFtcFZhbHVlKHJhbmdlLnZhbHVlRnJvbVByb3Bv
cnRpb24oZnJhY3Rpb24pKTsKLSAgICBlbGVtZW50LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihzZXJp
YWxpemVGb3JOdW1iZXJUeXBlKHZhbHVlKSk7Ci0KLSAgICAvLyBBbHNvIHVwZGF0ZSB0aGUgcG9z
aXRpb24gaWYgYXBwcm9wcmlhdGUuCi0gICAgaWYgKHBvc2l0aW9uICE9IGN1cnJlbnRQb3NpdGlv
bigpKSB7Ci0gICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwotCi0gICAgICAgIC8vIEZJWE1F
OiBJdCBzZWVtcyBsaWtlIHRoaXMgY291bGQgc2VuZCBleHRyYSBjaGFuZ2UgZXZlbnRzIGlmIHRo
ZSBzYW1lIHZhbHVlIGlzIHNldAotICAgICAgICAvLyBtdWx0aXBsZSB0aW1lcyB3aXRoIG5vIGxh
eW91dCBpbiBiZXR3ZWVuLgotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hh
bmdlRXZlbnQoKTsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJTbGlkZXI6OnBvc2l0aW9uRm9yT2Zm
c2V0KGNvbnN0IEludFBvaW50JiBwKQotewotICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgcG9zaXRpb247Ci0gICAg
aWYgKHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcG9zaXRp
b24gPSBwLnkoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKSAvIDI7Ci0gICAgZWxz
ZQotICAgICAgICBwb3NpdGlvbiA9IHAueCgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPndpZHRo
KCkgLyAyOwotICAgIAotICAgIHJldHVybiBtYXgoMCwgbWluKHBvc2l0aW9uLCB0cmFja1NpemUo
KSkpOwotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjpjdXJyZW50UG9zaXRpb24oKQotewotICAgIEFT
U0VSVChtX3RodW1iKTsKLSAgICBBU1NFUlQobV90aHVtYi0+cmVuZGVyZXIoKSk7Ci0KLSAgICBp
ZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBzdHlsZSgp
LT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICByZXR1cm4g
dG9SZW5kZXJCb3gobV90aHVtYi0+cmVuZGVyZXIoKSktPnkoKSAtIGNvbnRlbnRCb3hSZWN0KCku
eSgpOwotICAgIHJldHVybiB0b1JlbmRlckJveChtX3RodW1iLT5yZW5kZXJlcigpKS0+eCgpIC0g
Y29udGVudEJveFJlY3QoKS54KCk7Ci19Ci0KLWludCBSZW5kZXJTbGlkZXI6OnRyYWNrU2l6ZSgp
Ci17Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAgIEFTU0VSVChtX3RodW1iLT5yZW5kZXJlcigp
KTsKLQotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0
IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAg
ICAgIHJldHVybiBjb250ZW50SGVpZ2h0KCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+aGVpZ2h0
KCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPndp
ZHRoKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU2xpZGVyOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50
KQotewotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VFdmVu
dCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3Vz
ZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgICAgICBpZiAoIW1vdXNl
RXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBl
dmVudE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+
YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHNldFZh
bHVlRm9yUG9zaXRpb24ocG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRPZmZzZXQpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fdGh1bWItPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotfQotCi1ib29sIFJlbmRlclNsaWRlcjo6aW5EcmFnTW9kZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdGh1bWIgJiYgbV90aHVtYi0+aW5EcmFnTW9kZSgpOworICAgIHJlbmRl
ckJveC0+c2V0RnJhbWVSZWN0KHRodW1iUmVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKaW5kZXggMDM3NzlhMzlkYTY2ZmFmZDVjNmM4ZjRk
Y2RlNTE4MjA5M2ZhZDM5MC4uNjE4MDZkNWJkMDQ5MjBkYWViNmM1NGQ4Y2Y5YjIxMzcyYWM1OWE0
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKQEAgLTI3LDE1ICsyNywxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogICAgIGNsYXNzIE1v
dXNlRXZlbnQ7Ci0gICAgY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50OwogICAgIAogICAgIGNsYXNz
IFJlbmRlclNsaWRlciA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiAgICAgcHVibGljOgogICAgICAg
ICBSZW5kZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudCopOwogICAgICAgICB2aXJ0dWFsIH5SZW5k
ZXJTbGlkZXIoKTsKIAotICAgICAgICB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwotICAgICAg
ICBib29sIGluRHJhZ01vZGUoKSBjb25zdDsKICAgICAgICAgSW50UmVjdCB0aHVtYlJlY3QoKTsK
IAogICAgIHByaXZhdGU6CkBAIC00NSwyOCArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZp
cnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9u
Q29udGFpbmluZ0xpbmUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLQotICAgICAgICBib29sIG1v
dXNlRXZlbnRJc0luVGh1bWIoTW91c2VFdmVudCopOwotICAgICAgICBGbG9hdFBvaW50IG1vdXNl
RXZlbnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqKTsKLQotICAgICAgICB2b2lkIHNldFZhbHVl
Rm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKTsKLSAgICAgICAgdm9pZCBzZXRQb3NpdGlvbkZyb21W
YWx1ZSgpOwotICAgICAgICBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsK
LQotICAgICAgICBpbnQgY3VycmVudFBvc2l0aW9uKCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHlsZVJlY2FsY1By
b3BhZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IGNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKLQotICAgICAgICBpbnQgdHJhY2tTaXplKCk7Ci0KLSAgICAgICAgUmVmUHRyPFNsaWRl
clRodW1iRWxlbWVudD4gbV90aHVtYjsKLQotICAgICAgICBmcmllbmQgY2xhc3MgU2xpZGVyVGh1
bWJFbGVtZW50OwogICAgIH07CiAKICAgICBpbmxpbmUgUmVuZGVyU2xpZGVyKiB0b1JlbmRlclNs
aWRlcihSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
aW5kZXggYjYzMmQ5YTdkNTIzOWU0OGY5MDkyZWZlOWQ3NTJmMWFhODE2MDdiYi4uY2FiZDUzYjE3
YTY3NGM2NjAzODc5MDQ4NTMxNDQ1MmQyNjZiMWUwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0KQEAgLTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgIlJlbmRlclNsaWRlci5oIgogI2lt
cG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJT
bGlkZXJUaHVtYkVsZW1lbnQuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKICNpbXBvcnQgIlRo
ZW1lTWFjLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC0xMzQxLDcg
KzEzNDIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIGVsc2UKICAgICAgICAgb2xk
UHJlc3NlZCA9IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwogCi0gICAgYm9vbCBw
cmVzc2VkID0gdG9SZW5kZXJTbGlkZXIoby0+cGFyZW50KCkpLT5pbkRyYWdNb2RlKCk7CisgICAg
Ym9vbCBwcmVzc2VkID0gdG9TbGlkZXJUaHVtYkVsZW1lbnQoby0+bm9kZSgpKS0+aW5EcmFnTW9k
ZSgpOwogCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCkKICAgICAgICAgbV9pc1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkID0gcHJl
c3NlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78623</attachid>
            <date>2011-01-11 16:41:44 -0800</date>
            <delta_ts>2011-01-11 16:41:44 -0800</delta_ts>
            <desc>WIP: Putting all pieces together for the slider.</desc>
            <filename>bug-44907-20110111164142.patch</filename>
            <type>text/plain</type>
            <size>21471</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYzM0YTgzYTNmNmFmOTE4ZTc1NGVhNmQ5MGZmNTgzYmI3MWFhN2Q0Li5h
MGJmM2M3ZDMzMmU1OGMyYzczMzBjMzViNDdjZmZhMThlMTFjZTlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTAgQEAKKzIwMTEtMDEtMTEgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvciBpbnB1dFt0eXBlPXJhbmdlXSB0byB1c2UgYSBtb3JlIG5hdHVyYWwgc2hhZG93
IERPTSBtb2RlbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0OTA3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjppbml0Rm9yU3R5bGVSZXNvbHZlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6
CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
ZGVzdHJveVNoYWRvd1N1YnRyZWUpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAg
ICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgICogaHRtbC9SYW5nZUlucHV0
VHlwZS5oOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyVGh1bWI6OmxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRldGFjaCk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVt
YkVsZW1lbnQ6OlNsaWRlclRodW1iRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJU
aHVtYkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1NsaWRlclRodW1iRWxl
bWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNsaWRlcjo6flJlbmRlclNsaWRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6
OnRodW1iUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OnNsaWRlclRodW1iRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6Om1vdXNlRXZlbnRJc0luVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OnNldFZhbHVlRm9yUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTbGlkZXI6OnRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlk
ZXI6OmZvcndhcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmluRHJh
Z01vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaDoKKwogMjAxMS0wMS0w
OCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCmluZGV4IGUxZTYzOTM0NGFhOWIyMTk3ZTRiYzAxNDlhMmVkNjIwZjJkMzg1ZTcuLjYzNjNj
YTliNjZhYmFkNGY5NzRhMTZmNzEyOGYxYTg0ZDZlYWE2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTgyMiwxMiArODIyLDcgQEAgaW5saW5lIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHls
ZSogcGFyZW4KIHsKICAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lEOwogCi0g
ICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGUoKSA6IDA7Ci0KLSNpZiBFTkFCTEUo
U1ZHKQotICAgIGlmICghbV9wYXJlbnROb2RlICYmIGUgJiYgZS0+aXNTVkdFbGVtZW50KCkgJiYg
ZS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGUtPnNoYWRvd0hvc3Qo
KTsKLSNlbmRpZgorICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnRPckhvc3ROb2RlKCkg
OiAwOwogCiAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFy
ZW50U3R5bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAw
MDc2MzliMjFhZGRlMDM4MDUwYjcyNTAyYjIwNGExMDE3YjFkNDRlLi43ZDJhM2M1NDI5Mjc0NDRl
MDI4ZTBjOTIzMTJiNGViMTg4ZmNkMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKQEAgLTQ0Nyw3ICs0NDcsOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVR5cGUoKQogICAgIGJvb2wgbmVlZGVkQWN0aXZhdGlvbkNhbGxiYWNrID0gbmVlZHNBY3Rp
dmF0aW9uQ2FsbGJhY2soKTsKICAgICBib29sIGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCA9IG1f
aW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCk7CiAKKyAg
ICBtX2lucHV0VHlwZS0+ZGVzdHJveVNoYWRvd1N1YnRyZWUoKTsKICAgICBtX2lucHV0VHlwZSA9
IG5ld1R5cGUucmVsZWFzZSgpOworICAgIG1faW5wdXRUeXBlLT5jcmVhdGVTaGFkb3dTdWJ0cmVl
KCk7CiAKICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcAppbmRleCBiZTg2Mzk5YzA0MDc0ZjY5Nzc2YzlhNzEyYWEyMjU2ZmFmYTBlMmQ2
Li43MjlmMjA0ZWIxYTFlZDBiZmJiNTc1NmMzYWY0ZDFmMGMxODMzZTlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwCkBAIC0zNDksNiArMzQ5LDE1IEBAIFJlbmRlck9iamVjdCogSW5wdXRU
eXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QoZWxlbWVudCgpLCBzdHls
ZSk7CiB9CiAKK3ZvaWQgSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKK3sKK30KKwor
dm9pZCBJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkKK3sKKyAgICBlbGVtZW50KCkt
PnNldFNoYWRvd1Jvb3QoMCk7Cit9CisKIGRvdWJsZSBJbnB1dFR5cGU6OnBhcnNlVG9Eb3VibGUo
Y29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggNGQyNWE5NzRjMzAwYzI4
NzhmYmE2Mjg4MjRkMDcwNzRmZmZjOTI5YS4uYzM1MzdmNjI0ODkyMDE2Y2MyNjlkMmZkMmIzZjJk
ODZkMDE4NDMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0xNzEsNiArMTcxLDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55
RWxlbWVudCk7CiAgICAgdmlydHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigp
OwogCisKKyAgICAvLyBTaGFkb3cgdHJlZSBoYW5kbGluZworICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVTaGFkb3dTdWJ0cmVlKCk7CisgICAgdm9pZCBkZXN0cm95U2hhZG93U3VidHJlZSgpOworCiAg
ICAgLy8gTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCmluZGV4IDVk
NzFkYTc4Nzg3MTdjNmJmZDNlMzhlYTE0YmMyM2YzOTcwYjVjMjkuLjNmY2I2NDE1ZDMwYjQ4N2Jj
M2ZlY2ZlNDIxYzM2YzMwNzM1YTgzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
UmFuZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5
cGUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgog
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNp
bmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKICNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKICNp
bmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE4Niw2ICsx
ODcsMTEgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkK
ICAgICAgICAgdG9SZW5kZXJTbGlkZXIoZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Zm9yd2FyZEV2
ZW50KGV2ZW50KTsKIH0KIAordm9pZCBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJl
ZSgpCit7CisgICAgZWxlbWVudCgpLT5zZXRTaGFkb3dSb290KFNsaWRlclRodW1iRWxlbWVudDo6
Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkpOworfQorCiBSZW5kZXJPYmplY3QqIFJhbmdl
SW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KikgY29uc3QKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2xpZGVyKGVsZW1lbnQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKaW5kZXggN2YzNDFhNzY1NTcwY2Ex
OWZiYTZkY2ZmN2U1OGE5ZTZkMDYyM2YwZi4uNTdlYjI5OTljZGE1OWU1ZDI0NTcwY2NjNDgwYzBm
NjdmZmVkOTExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlw
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaApAQCAtNTgsNiAr
NTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5
Ym9hcmRFdmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7
CiAgICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmLCBkb3VibGUp
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCmlu
ZGV4IDU1MzAxYzE1YWIwNmQ0YWJhNDk2YTI3ODRkYzliZTY1YTA3MDE3Y2MuLmQyM2ZlYWU5ZTEy
NmY2OWE2NWQ5MjUxMWVmM2E2MTRlYjk3YzFjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApAQCAtMzcsMTMgKzM3LDUxIEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisvLyBGSVhNRTogRmluZCBhIHdheSB0byBjYXNjYWRlIGFwcGVhcmFuY2UgYW5kIGdl
dCByaWQgb2YgdGhpcyBjbGFzcy4KK2NsYXNzIFJlbmRlclNsaWRlclRodW1iIDogcHVibGljIFJl
bmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTbGlkZXJUaHVtYihOb2RlKik7CisgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOworfTsKKworCitSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVy
U2xpZGVyVGh1bWIoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisK
K3ZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OmxheW91dCgpCit7CisgICAgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gcGFyZW50KCktPnN0eWxlKCk7CisgICAgaWYgKHBhcmVudFN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgICAgICBzdHlsZSgpLT5zZXRBcHBl
YXJhbmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHls
ZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQorICAgICAgICBzdHlsZSgp
LT5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOworICAgIGVsc2UgaWYg
KHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0KQorICAgICAgICBz
dHlsZSgpLT5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKKyAgICBlbHNlIGlm
IChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKKyAg
ICAgICAgc3R5bGUoKS0+c2V0QXBwZWFyYW5jZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7
CisKKyAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBwYXNzIHRoZSBzdHlsZSwgbm90IHRoZSByZW5kZXJlciwgdG8gdGhlIHRo
ZW1lLgorICAgICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUodGhpcyk7CisgICAg
fQorICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKK30KKworUmVuZGVyT2JqZWN0KiBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUqKQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXJUaHVtYih0aGlzKTsK
K30KKwogdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogewogICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIFNo
YWRvd0Jsb2NrRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIEhU
TUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtOTMsNyArMTMxLDcgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAg
U2hhZG93QmxvY2tFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICBIVE1M
RGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKIHZvaWQgU2xpZGVy
VGh1bWJFbGVtZW50OjpkZXRhY2goKQpAQCAtMTAyLDcgKzE0MCw3IEBAIHZvaWQgU2xpZGVyVGh1
bWJFbGVtZW50OjpkZXRhY2goKQogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAogICAgIH0KLSAgICBTaGFkb3dCbG9ja0VsZW1l
bnQ6OmRldGFjaCgpOworICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAppbmRleCA1
MjIwZjJiZGFlZjBjYWEzNjhlMmIyZWIwMGFlYjYwMTFlZjc3OTVjLi43MjE5MTg2MjQzZmQ4ZGJl
OTQ3MzJmODQ0NGUyZTgxMDJiYTRhYTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaApAQCAtMzMsOCArMzMsOSBAQAogI2RlZmluZSBTbGlk
ZXJUaHVtYkVsZW1lbnRfaAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkhU
TUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRlICJTaGFkb3dFbGVtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsOSArNDQsOSBAQCBj
bGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRmxvYXRQb2ludDsKIAotY2xh
c3MgU2xpZGVyVGh1bWJFbGVtZW50IDogcHVibGljIFNoYWRvd0Jsb2NrRWxlbWVudCB7CitjbGFz
cyBTbGlkZXJUaHVtYkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gY3JlYXRlKEhUTUxFbGVt
ZW50KiBzaGFkb3dQYXJlbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNsaWRlclRodW1iRWxl
bWVudD4gY3JlYXRlKERvY3VtZW50Kik7CiAKICAgICBib29sIGluRHJhZ01vZGUoKSBjb25zdCB7
IHJldHVybiBtX2luRHJhZ01vZGU7IH0KIApAQCAtNTMsMjIgKzU0LDIzIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgc2hhZG93
UHNldWRvSWQoKSBjb25zdDsKIAotcHJpdmF0ZTogICAgICAgIAotICAgIFNsaWRlclRodW1iRWxl
bWVudChIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKK3ByaXZhdGU6CisgICAgU2xpZGVyVGh1
bWJFbGVtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogICAgIEZsb2F0UG9pbnQgbV9v
ZmZzZXRUb1RodW1iOwogICAgIGJvb2wgbV9pbkRyYWdNb2RlOwogfTsKIAotaW5saW5lIFNsaWRl
clRodW1iRWxlbWVudDo6U2xpZGVyVGh1bWJFbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJl
bnQpCi0gICAgOiBTaGFkb3dCbG9ja0VsZW1lbnQoc2hhZG93UGFyZW50KQoraW5saW5lIFNsaWRl
clRodW1iRWxlbWVudDo6U2xpZGVyVGh1bWJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6ZGl2VGFnLCBkb2N1bWVudCkKICAgICAsIG1f
aW5EcmFnTW9kZShmYWxzZSkKIHsKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJF
bGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFy
ZW50KQoraW5saW5lIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQoc2hhZG93UGFyZW50KSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQoZG9jdW1lbnQpKTsKIH0KIAogaW5saW5lIEF0b21p
Y1N0cmluZyBTbGlkZXJUaHVtYkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKQEAgLTc3
LDcgKzc5LDEyIEBAIGlubGluZSBBdG9taWNTdHJpbmcgU2xpZGVyVGh1bWJFbGVtZW50OjpzaGFk
b3dQc2V1ZG9JZCgpIGNvbnN0CiAgICAgcmV0dXJuIHNsaWRlclRodW1iOwogfQogCitpbmxpbmUg
U2xpZGVyVGh1bWJFbGVtZW50KiB0b1NsaWRlclRodW1iRWxlbWVudChOb2RlKiBub2RlKQorewor
ICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTbGlkZXJUaHVtYkVsZW1lbnQqPihub2RlKTsKIH0KIAorfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
CmluZGV4IGU1ZTVhZTU4YjZjMWVlNzRiOWFiOTk5YjE0ZTgzY2M2YmM2OTc0NzQuLjczY2FiODY4
ZjZkY2NlZjRlNGJkOGM5NzUxZDBmMWZmNDEyMjVkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtNDQ5LDYgKzQ0OSw4IEBA
IHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2goKQogICAgICAgICBwYXJlbnRO
b2RlKCktPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+
cmVuZGVyZXIoKSA6IDApOwogICAgIH0gIAogICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwor
ICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdCgpKQorICAgICAgICBzaGFkb3dO
b2RlLT5hdHRhY2goKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0
ZVN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXgg
NWVmZjgyNjIyNzBjYzdlNjMyNTZmN2JlY2VlYzRjZTY3MDAwZGI2My4uYjBkYzBkOWY5OGViMzYz
ZTAzNzk2MWFlZDY4ZTk4Zjc2ZTRhNjhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5jcHAKQEAgLTYxLDggKzYxLDYgQEAgUmVuZGVyU2xpZGVyOjpSZW5kZXJTbGlk
ZXIoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIAogUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xp
ZGVyKCkKIHsKLSAgICBpZiAobV90aHVtYikKLSAgICAgICAgbV90aHVtYi0+ZGV0YWNoKCk7CiB9
CiAKIGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29s
IC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25z
dApAQCAtMTAxLDM3ICs5OSwxNCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKQogICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxz
ZSk7IAogfQogCi12b2lkIFJlbmRlclNsaWRlcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAgaWYgKG1fdGh1bWIpCi0g
ICAgICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKGNyZWF0ZVRodW1iU3R5bGUoc3R5
bGUoKSkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTbGlkZXI6OmNyZWF0
ZVRodW1iU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gdGh1bWJTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+
c3R5bGVGb3JFbGVtZW50KG1fdGh1bWIuZ2V0KCksIHN0eWxlKCksIGZhbHNlKTsKLQotICAgIGlm
IChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAg
ICAgdGh1bWJTdHlsZS0+c2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0g
ICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFs
UGFydCkKLSAgICAgICAgdGh1bWJTdHlsZS0+c2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0KTsKLSAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhU2xpZGVyUGFydCkKLSAgICAgICAgdGh1bWJTdHlsZS0+c2V0QXBwZWFyYW5jZShNZWRpYVNs
aWRlclRodW1iUGFydCk7Ci0gICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHRodW1iU3R5bGUtPnNldEFwcGVhcmFu
Y2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotCi0gICAgcmV0dXJuIHRodW1iU3R5bGUu
cmVsZWFzZSgpOwotfQotCiBJbnRSZWN0IFJlbmRlclNsaWRlcjo6dGh1bWJSZWN0KCkKIHsKLSAg
ICBpZiAoIW1fdGh1bWIpCisgICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBz
bGlkZXJUaHVtYkVsZW1lbnQoKTsKKyAgICBpZiAoIXRodW1iRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKIAogICAgIEludFJlY3QgdGh1bWJSZWN0OwotICAgIFJlbmRlckJveCog
dGh1bWIgPSB0b1JlbmRlckJveChtX3RodW1iLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJCb3gq
IHRodW1iID0gdG9SZW5kZXJCb3godGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKTsKIAogICAgIHRo
dW1iUmVjdC5zZXRXaWR0aCh0aHVtYi0+c3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoY29u
dGVudFdpZHRoKCkpKTsKICAgICB0aHVtYlJlY3Quc2V0SGVpZ2h0KHRodW1iLT5zdHlsZSgpLT5o
ZWlnaHQoKS5jYWxjTWluVmFsdWUoY29udGVudEhlaWdodCgpKSk7CkBAIC0xNTMsNyArMTI4LDgg
QEAgdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0
KCkpOwogCi0gICAgUmVuZGVyQm94KiB0aHVtYiA9IG1fdGh1bWIgPyB0b1JlbmRlckJveChtX3Ro
dW1iLT5yZW5kZXJlcigpKSA6IDA7CisgICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1l
bnQgPSBzbGlkZXJUaHVtYkVsZW1lbnQoKTsKKyAgICBSZW5kZXJCb3gqIHRodW1iID0gdGh1bWJF
bGVtZW50ID8gdG9SZW5kZXJCb3godGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKSA6IDA7CiAKICAg
ICBJbnRTaXplIGJhc2VTaXplKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpLCBib3JkZXJBbmRQYWRk
aW5nSGVpZ2h0KCkpOwogCkBAIC0yMDAsNDMgKzE3NiwzNSBAQCB2b2lkIFJlbmRlclNsaWRlcjo6
bGF5b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyU2xp
ZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCitTbGlkZXJUaHVtYkVsZW1lbnQqIFJlbmRlclNsaWRl
cjo6c2xpZGVyVGh1bWJFbGVtZW50KCkgY29uc3QKIHsKLSAgICAvLyBMYXlvdXQgd2lsbCB0YWtl
IGNhcmUgb2YgdGhlIHRodW1iJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uCi0gICAgaWYgKCFtX3RodW1i
KSB7Ci0gICAgICAgIG1fdGh1bWIgPSBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSkpOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkpOwotICAgICAgICBtX3RodW1i
LT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0aHVt
YlN0eWxlLmdldCgpKSk7Ci0gICAgICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRo
dW1iU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgbV90aHVtYi0+c2V0QXR0YWNoZWQoKTsKLSAg
ICAgICAgbV90aHVtYi0+c2V0SW5Eb2N1bWVudCgpOwotICAgICAgICBhZGRDaGlsZChtX3RodW1i
LT5yZW5kZXJlcigpKTsKLSAgICB9Ci0gICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgcmV0
dXJuIHRvU2xpZGVyVGh1bWJFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5z
aGFkb3dSb290KCkpOwogfQogCiBib29sIFJlbmRlclNsaWRlcjo6bW91c2VFdmVudElzSW5UaHVt
YihNb3VzZUV2ZW50KiBldnQpCiB7Ci0gICAgaWYgKCFtX3RodW1iIHx8ICFtX3RodW1iLT5yZW5k
ZXJlcigpKQorICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1
bWJFbGVtZW50KCk7CisgICAgaWYgKCF0aHVtYkVsZW1lbnQgfHwgIXRodW1iRWxlbWVudC0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0IHx8IHN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpIHsKLSAgICAgICAgTWVkaWFD
b250cm9sSW5wdXRFbGVtZW50ICpzbGlkZXJUaHVtYiA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJv
bElucHV0RWxlbWVudCo+KG1fdGh1bWItPnJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAgIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCogc2xpZGVyVGh1bWIgPSBzdGF0aWNfY2FzdDxNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQqPih0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCktPm5vZGUoKSk7CiAg
ICAgICAgIHJldHVybiBzbGlkZXJUaHVtYi0+aGl0VGVzdChldnQtPmFic29sdXRlTG9jYXRpb24o
KSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1i
LT5yZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlckJv
eCgpLT5ib3JkZXJCb3hSZWN0KCk7CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gdGh1bWJF
bGVtZW50LT5yZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlv
bigpLCBmYWxzZSwgdHJ1ZSk7CisgICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IHRodW1iRWxlbWVu
dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKTsKICAgICByZXR1cm4gdGh1bWJCb3VuZHMu
Y29udGFpbnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKIH0KIAogRmxvYXRQb2ludCBS
ZW5kZXJTbGlkZXI6Om1vdXNlRXZlbnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqIGV2dCkKIHsK
LSAgICBBU1NFUlQobV90aHVtYiAmJiBtX3RodW1iLT5yZW5kZXJlcigpKTsKLSAgICBGbG9hdFBv
aW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKGV2
dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgSW50UmVjdCB0aHVtYkJv
dW5kcyA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCk7CisgICAgU2xpZGVy
VGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBzbGlkZXJUaHVtYkVsZW1lbnQoKTsKKyAgICBB
U1NFUlQodGh1bWJFbGVtZW50ICYmIHRodW1iRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgRmxv
YXRQb2ludCBsb2NhbFBvaW50ID0gdGh1bWJFbGVtZW50LT5yZW5kZXJCb3goKS0+YWJzb2x1dGVU
b0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CisgICAgSW50UmVj
dCB0aHVtYkJvdW5kcyA9IHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3Qo
KTsKICAgICBGbG9hdFBvaW50IG9mZnNldDsKICAgICBvZmZzZXQuc2V0WCh0aHVtYkJvdW5kcy54
KCkgKyB0aHVtYkJvdW5kcy53aWR0aCgpIC8gMiAtIGxvY2FsUG9pbnQueCgpKTsKICAgICBvZmZz
ZXQuc2V0WSh0aHVtYkJvdW5kcy55KCkgKyB0aHVtYkJvdW5kcy5oZWlnaHQoKSAvIDIgLSBsb2Nh
bFBvaW50LnkoKSk7CkBAIC0yNDUsNyArMjEzLDggQEAgRmxvYXRQb2ludCBSZW5kZXJTbGlkZXI6
Om1vdXNlRXZlbnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqIGV2dCkKIAogdm9pZCBSZW5kZXJT
bGlkZXI6OnNldFZhbHVlRm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKQogewotICAgIGlmICghbV90
aHVtYiB8fCAhbV90aHVtYi0+cmVuZGVyZXIoKSkKKyAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRo
dW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOworICAgIGlmICghdGh1bWJFbGVtZW50
IHx8ICF0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bm9kZSgpKTsKQEAgLTI3MCw0MCArMjM5LDQ1IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpzZXRWYWx1
ZUZvclBvc2l0aW9uKGludCBwb3NpdGlvbikKIAogaW50IFJlbmRlclNsaWRlcjo6cG9zaXRpb25G
b3JPZmZzZXQoY29uc3QgSW50UG9pbnQmIHApCiB7Ci0gICAgaWYgKCFtX3RodW1iIHx8ICFtX3Ro
dW1iLT5yZW5kZXJlcigpKQorICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0g
c2xpZGVyVGh1bWJFbGVtZW50KCk7CisgICAgaWYgKCF0aHVtYkVsZW1lbnQgfHwgIXRodW1iRWxl
bWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgcG9zaXRpb247
CiAgICAgaWYgKHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwg
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAg
cG9zaXRpb24gPSBwLnkoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKSAvIDI7Cisg
ICAgICAgIHBvc2l0aW9uID0gcC55KCkgLSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT5oZWln
aHQoKSAvIDI7CiAgICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHAueCgpIC0gbV90aHVtYi0+
cmVuZGVyQm94KCktPndpZHRoKCkgLyAyOworICAgICAgICBwb3NpdGlvbiA9IHAueCgpIC0gdGh1
bWJFbGVtZW50LT5yZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7CiAgICAgCiAgICAgcmV0dXJuIG1h
eCgwLCBtaW4ocG9zaXRpb24sIHRyYWNrU2l6ZSgpKSk7CiB9CiAKIGludCBSZW5kZXJTbGlkZXI6
OmN1cnJlbnRQb3NpdGlvbigpCiB7Ci0gICAgQVNTRVJUKG1fdGh1bWIpOwotICAgIEFTU0VSVCht
X3RodW1iLT5yZW5kZXJlcigpKTsKKyAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRodW1iRWxlbWVu
dCA9IHNsaWRlclRodW1iRWxlbWVudCgpOworICAgIEFTU0VSVCh0aHVtYkVsZW1lbnQgJiYgdGh1
bWJFbGVtZW50LT5yZW5kZXJlcigpKTsKIAogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZv
bHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChtX3RodW1iLT5yZW5k
ZXJlcigpKS0+eSgpIC0gY29udGVudEJveFJlY3QoKS55KCk7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
Qm94KG1fdGh1bWItPnJlbmRlcmVyKCkpLT54KCkgLSBjb250ZW50Qm94UmVjdCgpLngoKTsKKyAg
ICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KHRodW1iRWxlbWVudC0+cmVuZGVyZXIoKSktPnkoKSAt
IGNvbnRlbnRCb3hSZWN0KCkueSgpOworICAgIHJldHVybiB0b1JlbmRlckJveCh0aHVtYkVsZW1l
bnQtPnJlbmRlcmVyKCkpLT54KCkgLSBjb250ZW50Qm94UmVjdCgpLngoKTsKIH0KIAogaW50IFJl
bmRlclNsaWRlcjo6dHJhY2tTaXplKCkKIHsKLSAgICBBU1NFUlQobV90aHVtYik7Ci0gICAgQVNT
RVJUKG1fdGh1bWItPnJlbmRlcmVyKCkpOworICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJF
bGVtZW50ID0gc2xpZGVyVGh1bWJFbGVtZW50KCk7CisgICAgQVNTRVJUKHRodW1iRWxlbWVudCAm
JiB0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKHN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQoKSAtIG1f
dGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKLSAgICByZXR1cm4gY29udGVudFdpZHRoKCkg
LSBtX3RodW1iLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRI
ZWlnaHQoKSAtIHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPmhlaWdodCgpOworICAgIHJldHVy
biBjb250ZW50V2lkdGgoKSAtIHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPndpZHRoKCk7CiB9
CiAKIHZvaWQgUmVuZGVyU2xpZGVyOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogeworICAg
IFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1bWJFbGVtZW50KCk7
CisgICAgaWYgKCF0aHVtYkVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChldmVu
dC0+aXNNb3VzZUV2ZW50KCkpIHsKICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CkBAIC0zMTQsMTIgKzI4OCwxMyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6
Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fdGh1
bWItPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgIHRodW1iRWxlbWVudC0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKIGJvb2wgUmVuZGVyU2xpZGVyOjppbkRyYWdNb2Rl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90aHVtYiAmJiBtX3RodW1iLT5pbkRyYWdNb2RlKCk7
CisgICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBzbGlkZXJUaHVtYkVsZW1l
bnQoKTsKKyAgICByZXR1cm4gdGh1bWJFbGVtZW50ICYmIHRodW1iRWxlbWVudC0+aW5EcmFnTW9k
ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmgKaW5kZXggMDM3NzlhMzlkYTY2ZmFmZDVjNmM4ZjRkY2RlNTE4MjA5M2Zh
ZDM5MC4uYmE4ZWY2OWZlYTYxODMwOGNjMjA0ZGIwMGIxN2YzYzcyMzIyYjE3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaApAQCAtNDUsOCArNDUsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJh
c2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1v
ZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIAor
ICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSwgYWNjZXNzaW5nIHNsaWRlclRodW1iRWxlbWVu
dCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBpbiB0aGlzIGNsYXNzLgorICAgICAgICBTbGlkZXJU
aHVtYkVsZW1lbnQqIHNsaWRlclRodW1iRWxlbWVudCgpIGNvbnN0OwogICAgICAgICBib29sIG1v
dXNlRXZlbnRJc0luVGh1bWIoTW91c2VFdmVudCopOwogICAgICAgICBGbG9hdFBvaW50IG1vdXNl
RXZlbnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqKTsKIApAQCAtNTYsMTYgKzU3LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBpbnQgY3VycmVudFBvc2l0aW9uKCk7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLQogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNG
b3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLQogICAgICAgICBpbnQgdHJhY2tTaXplKCk7CiAKLSAg
ICAgICAgUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gbV90aHVtYjsKLQogICAgICAgICBmcmll
bmQgY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50OwogICAgIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>