<?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>143684</bug_id>
          
          <creation_ts>2015-04-13 17:08:54 -0700</creation_ts>
          <short_desc>Expand test infrastructure to support scrolling tests (Part 2)</short_desc>
          <delta_ts>2015-06-17 15:19:36 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=144131</see_also>
          <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>143286</dependson>
    
    <dependson>143732</dependson>
    
    <dependson>144427</dependson>
          <blocked>146081</blocked>
    
    <blocked>144131</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085008</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-13 17:08:54 -0700</bug_when>
    <thetext>Part 2: Connect new testing infrastructure to WebCore.

Our scrolling tests currently rely on large timeouts to ensure that tests work properly. This is because we need to wait to check our final DOM state until any scroll-generated animations complete. For example, we need to wait until any rubber banding or scroll-snap animations complete before we can determine if the scroll gesture moved us to the proper location.

This change adds a new test EventSender object method called &quot;callAfterScrollingCompletes&quot;. This new method will be called when the scroll animations are finished, greatly reducing the need for arbitrary timeouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088277</commentid>
    <comment_count>1</comment_count>
      <attachid>251561</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-24 11:31:09 -0700</bug_when>
    <thetext>Created attachment 251561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089598</commentid>
    <comment_count>2</comment_count>
      <attachid>251561</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-28 10:37:24 -0700</bug_when>
    <thetext>Comment on attachment 251561
Patch

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

&gt; Source/WebCore/dom/Element.cpp:883
&gt; +static void connectScrollAnimatorToTestTrigger(RenderBox&amp; renderer, Document&amp; document)
&gt; +{
&gt; +    if (!document.frame())
&gt; +        return;
&gt; +    
&gt; +    ScrollableArea* scrollableArea = nullptr;
&gt; +    if (is&lt;RenderListBox&gt;(renderer))
&gt; +        scrollableArea = downcast&lt;RenderListBox&gt;(&amp;renderer);
&gt; +    else
&gt; +        scrollableArea = renderer.layer();
&gt; +
&gt; +    if (!scrollableArea)
&gt; +        return;
&gt; +
&gt; +    scrollableArea-&gt;scrollAnimator().setWheelEventTestTrigger(document.frame()-&gt;mainFrame().testTrigger());

I don&apos;t think we should be running any of this code if not in a testing environment. There needs to be some &quot;fast return&quot; path that early returns outside of DRT/WTR.

&gt; Source/WebCore/dom/Element.cpp:891
&gt; +        connectScrollAnimatorToTestTrigger(*renderer, document());

Don&apos;t this and scrollTop() both bottleneck through some lower-level programmatic scroll code where you could set up the trigger?

&gt; Source/WebCore/page/MainFrame.cpp:134
&gt; +RefPtr&lt;WheelEventTestTrigger&gt; MainFrame::ensureTestTrigger()

ensure() should return a Ref&lt;&gt;.

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:303
&gt; +    frameView.scrollAnimator().setWheelEventTestTrigger(m_page-&gt;mainFrame().testTrigger());
&gt; +    scrollingTree()-&gt;setWheelEventTestTrigger(m_page-&gt;mainFrame().testTrigger());
&gt; +    if (const auto&amp; trigger = m_page-&gt;mainFrame().testTrigger())
&gt; +        trigger-&gt;removeTestDeferralForReason(reinterpret_cast&lt;WheelEventTestTrigger::ScrollableAreaIdentifier&gt;(scrollingNodeID), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
&gt; +#endif

Again we should avoid running all this code when not testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089626</commentid>
    <comment_count>3</comment_count>
      <attachid>251561</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-28 11:06:47 -0700</bug_when>
    <thetext>Comment on attachment 251561
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:883
&gt;&gt; +    scrollableArea-&gt;scrollAnimator().setWheelEventTestTrigger(document.frame()-&gt;mainFrame().testTrigger());
&gt; 
&gt; I don&apos;t think we should be running any of this code if not in a testing environment. There needs to be some &quot;fast return&quot; path that early returns outside of DRT/WTR.

Maybe I could add a WebKit preference flag that could be set by clients who want to activate this code? Maybe &quot;Internals&quot; would be the right place to switch this on?

&gt;&gt; Source/WebCore/dom/Element.cpp:891
&gt;&gt; +        connectScrollAnimatorToTestTrigger(*renderer, document());
&gt; 
&gt; Don&apos;t this and scrollTop() both bottleneck through some lower-level programmatic scroll code where you could set up the trigger?

I&apos;ll see if I can confirm this.

&gt;&gt; Source/WebCore/page/MainFrame.cpp:134
&gt;&gt; +RefPtr&lt;WheelEventTestTrigger&gt; MainFrame::ensureTestTrigger()
&gt; 
&gt; ensure() should return a Ref&lt;&gt;.

OK!

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:303
&gt;&gt; +#endif
&gt; 
&gt; Again we should avoid running all this code when not testing.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089762</commentid>
    <comment_count>4</comment_count>
      <attachid>251891</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-28 15:31:37 -0700</bug_when>
    <thetext>Created attachment 251891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089764</commentid>
    <comment_count>5</comment_count>
      <attachid>251892</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-28 15:36:29 -0700</bug_when>
    <thetext>Created attachment 251892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089767</commentid>
    <comment_count>6</comment_count>
      <attachid>251561</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-28 15:37:45 -0700</bug_when>
    <thetext>Comment on attachment 251561
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:891
&gt;&gt;&gt; +        connectScrollAnimatorToTestTrigger(*renderer, document());
&gt;&gt; 
&gt;&gt; Don&apos;t this and scrollTop() both bottleneck through some lower-level programmatic scroll code where you could set up the trigger?
&gt; 
&gt; I&apos;ll see if I can confirm this.

Yes -- they all pass through RenderLayer, but they lose access to the document. I can do it one step above (in RenderBox, and RenderListBox).

&gt;&gt;&gt; Source/WebCore/page/MainFrame.cpp:134
&gt;&gt;&gt; +RefPtr&lt;WheelEventTestTrigger&gt; MainFrame::ensureTestTrigger()
&gt;&gt; 
&gt;&gt; ensure() should return a Ref&lt;&gt;.
&gt; 
&gt; OK!

Actually, the nullability of this trigger value is important as a means of identifying when testing is happening. When the WheelEventTestTrigger is a nullptr, we don&apos;t want to do any processing.

&gt;&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:303
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; Again we should avoid running all this code when not testing.
&gt; 
&gt; OK!

You won&apos;t have a test trigger when not testing, so the only code we run here is to set &apos;nullptr&apos; in the scroll animator and the scrolling tree. We want to do this each pass in case the user activates testing via JS during a test run. Later, when they turn testing off we want to make sure that state gets propagated to the scrolling tree and scroll animators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090181</commentid>
    <comment_count>7</comment_count>
      <attachid>251995</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-29 15:38:56 -0700</bug_when>
    <thetext>Created attachment 251995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090187</commentid>
    <comment_count>8</comment_count>
      <attachid>251995</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-29 15:43:30 -0700</bug_when>
    <thetext>Comment on attachment 251995
Patch

Revised based on smfr&apos;s comments:
1. Add a new &apos;quick&apos; flag for checking if we are in &apos;testing&apos; mode.
2. Do not manipulate the scrollTree directly. Instead, update our testing state when the scrollTree syncs (and when we begin a scroll operation).

Since all of the access to the test code was of the form &quot;page-&gt;frame-&gt;mainFrame-&gt;testTrigger&quot;, I moved the trigger code to Page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090197</commentid>
    <comment_count>9</comment_count>
      <attachid>251995</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-29 15:59:15 -0700</bug_when>
    <thetext>Comment on attachment 251995
Patch

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

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:1834
&gt; +

This should be wrapped in &quot;#if !PLATFORM(IOS)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090198</commentid>
    <comment_count>10</comment_count>
      <attachid>251995</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-29 16:01:34 -0700</bug_when>
    <thetext>Comment on attachment 251995
Patch

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

&gt; Source/WebCore/page/Page.h:447
&gt; +    WEBCORE_EXPORT bool isUnderTest() const { return m_isUnderTest; }
&gt; +    void setIsUnderTest(bool isUnderTest) { m_isUnderTest = isUnderTest; }

This name is much too generic. What about all the other kinds of testing that happens?

I&apos;d call this expectsWheelEventTriggers or something.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:907
&gt; +    if (auto* trigger = testTrigger())

It this...

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:1363
&gt; +    if (m_wheelEventTestTrigger)

different from this?

&gt; Source/WebCore/rendering/RenderBox.cpp:597
&gt; +static void connectScrollAnimatorToTestTrigger(RenderLayer* layer, Frame* frame)

Maybe call this setupWheelEventTestTrigger()?

&gt; Source/WebCore/rendering/RenderBox.cpp:599
&gt; +    if (!layer || !frame)

You should pass RenderLayer&amp;, since the caller dereferences it just below.

&gt; Source/WebCore/rendering/RenderBox.cpp:606
&gt; +    layer-&gt;scrollAnimator().setWheelEventTestTrigger(page-&gt;testTrigger());

Could you put this code in RenderLayer::scrollToOffset()?

&gt; Source/WebCore/rendering/RenderListBox.cpp:666
&gt; +static void connectScrollAnimatorToTestTrigger(RenderListBox&amp; renderer, Frame* frame)

Don&apos;t really like the &quot;connect&quot; terminology again.

&gt; Source/WebCore/testing/js/WebCoreTestSupport.cpp:99
&gt; +    page-&gt;setIsUnderTest(false);
&gt; +    page-&gt;clearTrigger();

These always go hand-in-hand. Seems like Page::isUnderTest could just return whether the trigger is non-null.

&gt; Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp:145
&gt; +            if (WebPage* webPage = WebProcess::singleton().webPage(pageID)) {
&gt; +                if (Page* page = webPage-&gt;corePage()) {
&gt; +                    if (page-&gt;isUnderTest()) {
&gt; +                        if (const auto&amp; trigger = page-&gt;testTrigger())
&gt; +                            trigger-&gt;deferTestsForReason(reinterpret_cast&lt;WheelEventTestTrigger::ScrollableAreaIdentifier&gt;(webPage-&gt;corePage()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
&gt; +                    }
&gt; +                }
&gt; +            }

So many ifs!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090247</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-29 17:30:17 -0700</bug_when>
    <thetext>Committed r183595: &lt;http://trac.webkit.org/changeset/183595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090316</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-04-29 19:47:42 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Committed r183595: &lt;http://trac.webkit.org/changeset/183595&gt;

EFL port has broken since r183595. Build fix - http://trac.webkit.org/changeset/183605.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090354</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-29 21:45:37 -0700</bug_when>
    <thetext>Mac Build Fix:
https://trac.webkit.org/r183616</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251561</attachid>
            <date>2015-04-24 11:31:09 -0700</date>
            <delta_ts>2015-04-28 15:31:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143684-20150424113003.patch</filename>
            <type>text/plain</type>
            <size>35978</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE1LTA0LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4cGFuZCB0ZXN0IGluZnJh
c3RydWN0dXJlIHRvIHN1cHBvcnQgc2Nyb2xsaW5nIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIwMzc1NTE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSB2YXJpb3VzIGZhc3Qvc2Nyb2xsaW5nIGFuZCBwbGF0Zm9ybS9tYWMt
d2syL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nIHRlc3RzLgorCisgICAgICAgIFRoaXMgc2VyaWVz
IG9mIGNoYW5nZXMgYWRkcyBhIG5ldyBzaW5nbGV0b24gY2xhc3MsICdXaGVlbEV2ZW50VGVzdFRy
aWdnZXInLCB3aGljaCBlbmNhcHN1bGF0ZXMgYQorICAgICAgICBmdW5jdGlvbiBvYmplY3QgdG8g
YmUgZmlyZWQgd2hlbiBzY3JvbGwgZXZlbnRzIGFyZSBmaW5pc2hlZC4gVGhlIG9iamVjdCBhbHNv
IGtlZXBzIHRyYWNrIG9mIHJlYXNvbnMKKyAgICAgICAgd2h5IHRoZSB0ZXN0IHNob3VsZCBub3Qg
eWV0IGZpcmUgKGUuZy4sICdydWJiZXJiYW5kaW5nJyBpcyBhY3RpdmUpIHNvIHRoYXQgdGVzdHMg
ZG8gbm90IGluY29ycmVjdGx5CisgICAgICAgIGNoZWNrIHJlbmRlcmluZyBzdGF0ZSBpbiB0aGUg
bWlkZGxlIG9mIGFuIGFuaW1hdGlvbi4KKworICAgICAgICBTd2l0Y2ggZnJvbSB0aGUgb3JpZ2lu
YWwgV2Vha1B0ciBkZXNpZ24gdG8gVGhyZWFkU2FmZVJlZlB0ciwgYmVjYXVzZSBXZWFrUHRyIGNh
bm5vdCBiZSBzaGFyZWQKKyAgICAgICAgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25uZWN0U2Nyb2xsQW5p
bWF0b3JUb1Rlc3RUcmlnZ2VyKTogSGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2V0U2Nyb2xsTGVmdCk6IENhbGwgJ2Nvbm5lY3RTY3JvbGxBbmltYXRvclRvVGVz
dFRyaWdnZXInIHRvIGNvbm5lY3QgdGhlIFNjcm9sbEFuaW1hdG9yCisgICAgICAgIHRvIHRoZSBN
YWluRnJhbWUgc28gdGhhdCBmdXR1cmUgc2Nyb2xsIG9wZXJhdGlvbnMgY2FuIG5vdGlmeSB0aGUg
dGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9s
bFRvcCk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KTogTWFrZSBzdXJlIFNjcm9sbEFuaW1hdG9yIGtub3dz
IGFib3V0IGFueSBhY3RpdmUgdGVzdCB0cmlnZ2VyLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWRBZGRTY3JvbGxiYXIpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL01haW5GcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluRnJhbWU6OnRlc3RUcmlnZ2VyKTogU3dpdGNoIHRv
IFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5GcmFtZTo6ZW5zdXJlVGVzdFRyaWdnZXIp
OiBEaXR0by4KKyAgICAgICAgKiBwYWdlL01haW5GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyKTogUmVtb3ZlIFdlYWtQdHIgY29kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Y3JlYXRlV2Vha1B0cik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaDoKKyAgICAgICAg
KiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKTogTWFrZSBzdXJlIHRoZSBzY3Jv
bGwgYW5pbWF0b3Iga25vd3MgYWJvdXQKKyAgICAgICAgYW55IGFjdGl2ZSB0ZXN0IHRyaWdnZXIg
b2JqZWN0LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBk
YXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKTogTm90aWZ5IFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcgorICAgICAgICB0aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkIGlzIHN5bmNlZCB3aXRo
IHRoZSBtYWluIHRocmVhZC4gQWxzbyBtYWtlIHN1cmUgdGhlIFNjcm9sbEFuaW1hdG9yIGFuZCBT
Y3JvbGxpbmdUcmVlCisgICAgICAgIGtub3cgYWJvdXQgYW55IGFjdGl2ZSB0ZXN0IHRyaWdnZXJz
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWU6OnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik6IEFkZGVkIHZp
cnR1YWwgc3R1YiBmb3IgdGhpcyBiYXNlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZTo6dGVzdFRyaWdnZXIpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuaDogSG9sZCBhIFJlZlB0ciB0byB0aGUgV2hlZWxFdmVudFRl
c3RUcmlnZ2VyLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp0ZXN0VHJpZ2dlcik6IEFkZCBtZXRob2Qg
dG8gc2F0aXNmeSBjbGllbnQgcHJvdG9jb2wgZm9yIFNjcm9sbENvbnRyb2xsZXIuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KTogVGVsbCB0aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHdoZXRoZXIgdGhlIHRlc3Rz
CisgICAgICAgIG5lZWQgdG8gd2FpdCBmb3IgYSBzY3JvbGwgdGhyZWFkIHN5bmMgdG8gb2NjdXIu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogSG9sZCBhIFJlZlB0ciB0byB0
aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyLiAKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpTY3JvbGxBbmltYXRvcjo6c2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRy
b2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcik6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdG8g
aG9sZCB0ZXN0cyB1bnRpbCBydWJiZXIgYmFuZAorICAgICAgICBzbmFwcGluZyBpcyBjb21wbGV0
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0b3BTbmFwUnViYmVyYmFu
ZFRpbWVyKTogTm90aWZ5IHRlc3QgdHJpZ2dlciB0aGF0IHJ1YmJlciBiYW5kIHNuYXBwaW5nIGlz
IGRvbmUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdGFydFNjcm9sbFNu
YXBUaW1lcik6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdG8gaG9sZCB0ZXN0cyB1bnRpbCBzY3JvbGwg
c25hcHBpbmcKKyAgICAgICAgaXMgY29tcGxldGUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxD
b250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcFRpbWVyKTogTm90aWZ5IHRlc3QgdHJpZ2dlciB0aGF0
IHNjcm9sbCBzbmFwcGluZyBpcyBkb25lLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5k
Q29udGVudEFyZWFTY3JvbGxlZFNvb24pOiBOb3RpZnkgdGVzdCB0cmlnZ2VyIHRvIGhvbGQgdGVz
dHMgdW50aWwgdGhlIGNvbnRlbnQKKyAgICAgICAgc2Nyb2xsaW5nIGlzIGNvbXBsZXRlLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVk
VGltZXJGaXJlZCk6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdGhhdCBjb250ZW50IHNjcm9sbGluZyBp
cyBkb25lLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKTogTWFrZSBzdXJlIHRoZSBTY3Jv
bGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZlIHRlc3QgdHJpZ2dlcnMuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEJveDo6Y3JlYXRlU2Nyb2xsYmFyKTogRGl0dG8uCisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVu
dFN0YXRlKTogUmVzZXQgYW55IHRlc3QgcmVmZXJyYWxzIGFuZCBjbGVhbiB1cCBhbnkgdHJpZ2dl
cnMgcHJpb3IgdG8KKyAgICAgICAgc3RhcnRpbmcgdGhlIG5leHQgdGVzdC4KKwogMjAxNS0wNC0y
NCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBPd25Q
dHIgYW5kIFBhc3NPd25QdHIgdXNlcyB0byBzdGQ6OnVuaXF1ZV9wdHIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA3IERhdmlk
IFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIw
MDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01OCw2ICs1
OCw3IEBACiAjaW5jbHVkZSAiSFRNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc2Vy
dGlvblBvaW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1haW5G
cmFtZS5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmgiCiAjaW5j
bHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKQEAg
LTY1LDYgKzY2LDcgQEAKICNpbmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpA
QCAtNzMsNiArNzUsNyBAQAogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JRdWVyeS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC04MCw2ICs4Myw3IEBA
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5o
IgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5j
bHVkZSAiWE1MTmFtZXMuaCIKQEAgLTg2MiwxMSArODY2LDI5IEBAIGludCBFbGVtZW50OjpzY3Jv
bGxUb3AoKQogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBjb25uZWN0U2Nyb2xsQW5p
bWF0b3JUb1Rlc3RUcmlnZ2VyKFJlbmRlckJveCYgcmVuZGVyZXIsIERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIGlmIChp
czxSZW5kZXJMaXN0Qm94PihyZW5kZXJlcikpCisgICAgICAgIHNjcm9sbGFibGVBcmVhID0gZG93
bmNhc3Q8UmVuZGVyTGlzdEJveD4oJnJlbmRlcmVyKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gcmVuZGVyZXIubGF5ZXIoKTsKKworICAgIGlmICghc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigp
LnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihkb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS50
ZXN0VHJpZ2dlcigpKTsKK30KKyAgICAKIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsTGVmdChpbnQg
bmV3TGVmdCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCiAgICAgaWYgKFJlbmRlckJveCogcmVuZGVyZXIgPSByZW5kZXJCb3goKSkg
eworICAgICAgICBjb25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyKCpyZW5kZXJlciwg
ZG9jdW1lbnQoKSk7CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KHN0YXRpY19jYXN0
PGludD4obmV3TGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSkpOwogICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKICAgICAg
ICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxlZFByb2dyYW1tYXRpY2FsbHkodHJ1ZSk7
CkBAIC04NzgsNiArOTAwLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1Rv
cCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogCiAgICAgaWYgKFJlbmRlckJveCogcmVuZGVyZXIgPSByZW5kZXJCb3goKSkgeworICAgICAg
ICBjb25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyKCpyZW5kZXJlciwgZG9jdW1lbnQo
KSk7CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3Aoc3RhdGljX2Nhc3Q8aW50PihuZXdU
b3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpKTsKICAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCiAgICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+c2V0U2Nyb2xsZWRQcm9ncmFtbWF0aWNhbGx5KHRydWUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTgzMjY1KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBACiAj
aW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
ICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KQEAgLTEyNjUsNyArMTI2Niw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxv
d1N1YnRyZWUKICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBpbml0aWFsIGhNb2RlIHRv
IEFsd2F5c09mZiBpZiB3ZSdyZSBhdXRvLgogICAgICAgICAgICAgICAgICAgICBpZiAoaE1vZGUg
PT0gU2Nyb2xsYmFyQXV0bykKICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvcml6b250YWxT
Y3JvbGxiYXJNb2RlKFNjcm9sbGJhckFsd2F5c09mZik7IC8vIFRoaXMgY2F1c2VzIGEgaG9yaXpv
bnRhbCBzY3JvbGxiYXIgdG8gZGlzYXBwZWFyLgotCisgICAgICAgICAgICAgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lKCkubWFpbkZyYW1lKCku
dGVzdFRyaWdnZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgIHNldFNjcm9sbGJhck1vZGVzKGhN
b2RlLCB2TW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNldFNjcm9sbGJhcnNTdXBwcmVzc2Vk
KGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTIwNDQsNiArMjA0NSw3
IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCAKIHsKICAgICBUZW1w
b3JhcnlDaGFuZ2U8Ym9vbD4gY2hhbmdlSW5Qcm9ncmFtbWF0aWNTY3JvbGwobV9pblByb2dyYW1t
YXRpY1Njcm9sbCwgdHJ1ZSk7CiAgICAgbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yID0g
bnVsbHB0cjsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihm
cmFtZSgpLm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIFNjcm9sbFZpZXc6OnNldFNj
cm9sbFBvc2l0aW9uKHNjcm9sbFBvaW50KTsKIH0KIApAQCAtNDU1Niw2ICs0NTU4LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTAogdm9pZCBGcmFtZVZpZXc6OmRp
ZEFkZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCiB7CiAgICAgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihzY3Jv
bGxiYXIsIG9yaWVudGF0aW9uKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRU
ZXN0VHJpZ2dlcihmcmFtZSgpLm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPmhh
bmRsZVNjcm9sbGJhclVwZGF0ZSh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TWFpbkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFt
ZS5jcHAJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nU3RhdGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldoZWVsRXZl
bnREZWx0YVRyYWNrZXIuaCIKLSNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEy
NywxNyArMTI2LDE3IEBAIHZvaWQgTWFpbkZyYW1lOjpwb3BMYXRjaGluZ1N0YXRlKCkKIH0KICNl
bmRpZgogCi1XaGVlbEV2ZW50VGVzdFRyaWdnZXIqIE1haW5GcmFtZTo6dGVzdFRyaWdnZXIoKSBj
b25zdAorUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gTWFpbkZyYW1lOjp0ZXN0VHJpZ2dl
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGVzdFRyaWdnZXIuZ2V0KCk7CisgICAgcmV0dXJu
IG1fdGVzdFRyaWdnZXI7CiB9CiAKLVdoZWVsRXZlbnRUZXN0VHJpZ2dlciogTWFpbkZyYW1lOjpl
bnN1cmVUZXN0VHJpZ2dlcigpCitSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBNYWluRnJh
bWU6OmVuc3VyZVRlc3RUcmlnZ2VyKCkKIHsKICAgICBpZiAoIW1fdGVzdFRyaWdnZXIpCi0gICAg
ICAgIG1fdGVzdFRyaWdnZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cj4oKTsKKyAgICAgICAgbV90ZXN0VHJpZ2dlciA9IGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50VGVz
dFRyaWdnZXIoKSk7CiAKLSAgICByZXR1cm4gbV90ZXN0VHJpZ2dlci5nZXQoKTsKKyAgICByZXR1
cm4gbV90ZXN0VHJpZ2dlcjsKIH0KIAogdm9pZCBNYWluRnJhbWU6OmNsZWFyVHJpZ2dlcigpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmgJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgTWFpbkZyYW1lX2gKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszOCw2IEBAIGNsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjsKIGNsYXNzIFNjcm9sbExhdGNoaW5nU3RhdGU7CiBjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOwogY2xhc3MgV2hlZWxFdmVudERlbHRhVHJhY2tlcjsKLWNsYXNzIFdoZWVsRXZlbnRU
ZXN0VHJpZ2dlcjsKIAogY2xhc3MgTWFpbkZyYW1lIGZpbmFsIDogcHVibGljIEZyYW1lIHsKIHB1
YmxpYzoKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkgY29uc3Q7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRlc3RUcmlnZ2VyKCkg
Y29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiBlbnN1cmVU
ZXN0VHJpZ2dlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI+IHRlc3RUcmlnZ2VyKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFdo
ZWVsRXZlbnRUZXN0VHJpZ2dlcj4gZW5zdXJlVGVzdFRyaWdnZXIoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsZWFyVHJpZ2dlcigpOwogCiBwcml2YXRlOgpAQCAtODEsNyArODEsNyBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBt
X3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKICNlbmRpZgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdnZXI7CisgICAgUmVmUHRy
PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gbV90ZXN0VHJpZ2dlcjsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXaGVlbEV2ZW50RGVsdGFUcmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNr
ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4gbV9wYWdlT3Zl
cmxheUNvbnRyb2xsZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0
VHJpZ2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50
VGVzdFRyaWdnZXIuY3BwCShyZXZpc2lvbiAxODMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpXaGVlbEV2
ZW50VGVzdFRyaWdnZXIoKQogICAgIDogbV90ZXN0VHJpZ2dlclRpbWVyKFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJldoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6dHJpZ2dlclRlc3RUaW1lckZpcmVk
KQotICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQogewogfQogCi1XZWFrUHRyPFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcj4gV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpjcmVhdGVXZWFrUHRyKCkKLXsK
LSAgICByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7Ci19Ci0KIHZvaWQg
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpjbGVhckFsbFRlc3REZWZlcnJhbHMoKQogewogICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgJKHJldmlzaW9u
IDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxMyBAQAogI2luY2x1ZGUgPG11dGV4PgogI2lu
Y2x1ZGUgPHNldD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHsKK2NsYXNzIFdoZWVsRXZlbnRU
ZXN0VHJpZ2dlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXaGVlbEV2ZW50VGVzdFRyaWdnZXIp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXaGVlbEV2ZW50VGVzdFRy
aWdnZXIoKTsKQEAgLTU2LDE1ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUZXN0
RGVmZXJyYWxGb3JSZWFzb24oU2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBEZWZlclRlc3RUcmln
Z2VyUmVhc29uKTsKICAgICB2b2lkIHRyaWdnZXJUZXN0VGltZXJGaXJlZCgpOwogCi0gICAgV2Vh
a1B0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IGNyZWF0ZVdlYWtQdHIoKTsKLQogcHJpdmF0ZToK
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV90ZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2s7CiAg
ICAgUnVuTG9vcDo6VGltZXI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3Rlc3RUcmlnZ2VyVGlt
ZXI7CiAgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fdGVzdFRyaWdnZXJNdXRleDsKICAgICBXVEY6
Okhhc2hNYXA8dm9pZCosIHN0ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJSZWFzb24+PiBtX2RlZmVy
VGVzdFRyaWdnZXJSZWFzb25zOwotCi0gICAgV2Vha1B0ckZhY3Rvcnk8V2hlZWxFdmVudFRlc3RU
cmlnZ2VyPiBtX3dlYWtQdHJGYWN0b3J5OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMTgzMjY1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgIldoZWVs
RXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL09iamNSdW50aW1lRXh0cmFz
Lmg+CkBAIC04ODIsNiArODgzLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFy
ZUZvcldoZQogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlmIChzY3JvbGxhYmxlQXJlYSkK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRl
c3RUcmlnZ2VyKG1fZnJhbWUubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7CisKICAgICBTY3Jv
bGxMYXRjaGluZ1N0YXRlKiBsYXRjaGluZ1N0YXRlID0gbV9mcmFtZS5tYWluRnJhbWUoKS5sYXRj
aGluZ1N0YXRlKCk7CiAgICAgaWYgKHdoZWVsRXZlbnQuc2hvdWxkQ29uc2lkZXJMYXRjaGluZygp
KSB7CiAgICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyICYmIHNjcm9sbGFibGVBcmVhKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTgzMjY1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsMTIgKzM0LDE0IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmln
Z2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjkzLDYgKzI5NSwxMyBAQCB2b2lk
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjCiAKICAgICBGcmFtZVZpZXcmIGZy
YW1lVmlldyA9ICpmcmFtZVZpZXdQdHI7CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBmcmFt
ZVZpZXcuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIobV9wYWdlLT5t
YWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKTsKKyAgICBzY3JvbGxpbmdUcmVlKCktPnNldFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcihtX3BhZ2UtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOworICAg
IGlmIChjb25zdCBhdXRvJiB0cmlnZ2VyID0gbV9wYWdlLT5tYWluRnJhbWUoKS50ZXN0VHJpZ2dl
cigpKQorICAgICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRl
cnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
cj4oc2Nyb2xsaW5nTm9kZUlEKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxpbmdUaHJl
YWRTeW5jTmVlZGVkKTsKKyNlbmRpZgorCiAgICAgaWYgKHNjcm9sbGluZ05vZGVJRCA9PSBmcmFt
ZVZpZXcuc2Nyb2xsTGF5ZXJJRCgpKSB7CiAgICAgICAgIGJvb2wgb2xkUHJvZ3JhbW1hdGljU2Ny
b2xsID0gZnJhbWVWaWV3LmluUHJvZ3JhbW1hdGljU2Nyb2xsKCk7CiAgICAgICAgIGZyYW1lVmll
dy5zZXRJblByb2dyYW1tYXRpY1Njcm9sbChwcm9ncmFtbWF0aWNTY3JvbGwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkocmV2aXNpb24g
MTgzMjY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgU2Nyb2xsaW5n
U3RhdGVUcmVlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2RlOwogY2xhc3MgU2Nyb2xsaW5nVHJl
ZU5vZGU7CiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTsKK2NsYXNzIFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxTY3JvbGxpbmdUcmVlPiB7CiBwdWJsaWM6CkBAIC0xMzUsNyArMTM2LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZml4ZWRPclN0aWNreU5vZGVDb3VudCk7CiAgICAg
ICAgIC0tbV9maXhlZE9yU3RpY2t5Tm9kZUNvdW50OwogICAgIH0KLSAgICAKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcj4mJikgeyAvKiBkbyBub3RoaW5nICovIH0KKyAgICB2aXJ0dWFsIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHNldE1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKEZsb2F0UG9pbnQpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
VGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDE4MzI2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDEyICszMCwxNCBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVU
cmVlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRU
ZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I7CitjbGFzcyBXaGVlbEV2ZW50VGVzdFRyaWdnZXI7CiAKIC8vIFRoZSBUaHJl
YWRlZFNjcm9sbGluZ1RyZWUgY2xhc3MgbGl2ZXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IG9uIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkIGFuZCBtYW5hZ2VzIHRoZQogLy8gaGllcmFyY2h5IG9mIHNjcm9sbGFi
bGUgcmVnaW9ucyBvbiB0aGUgcGFnZS4gSXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRj
aGluZyBldmVudHMKQEAgLTU2LDYgKzU4LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGUoKSBvdmVycmlkZTsKIAorICAgIHZvaWQgc2V0V2hlZWxFdmVudFRlc3RUcmln
Z2VyKFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+JiYgdGVzdFRyaWdnZXIpIG92ZXJyaWRl
IHsgbV93aGVlbEV2ZW50VGVzdFRyaWdnZXIgPSB0ZXN0VHJpZ2dlcjsgfQorICAgIFdoZWVsRXZl
bnRUZXN0VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3do
ZWVsRXZlbnRUZXN0VHJpZ2dlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
VGhyZWFkZWRTY3JvbGxpbmdUcmVlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqKTsKIApAQCAt
NjcsNiArNzIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Ro
cmVhZGVkU2Nyb2xsaW5nVHJlZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAor
ICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fd2hlZWxFdmVudFRlc3RUcmlnZ2Vy
OwogICAgIFJlZlB0cjxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYy5oCShyZXZpc2lvbiAxODMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OSw2ICs3OSw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzQWxyZWFkeVBpbm5lZElu
RGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFNjcm9sbEV2ZW50
QXhpcyk7CiAKKyAgICBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRlc3RUcmlnZ2VyKCkgY29uc3Qg
b3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMp
CiAgICAgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4
aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjLm1tCShyZXZpc2lvbiAxODMyNjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAiU2V0dGluZ3MuaCIK
ICNpbXBvcnQgIlRpbGVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgorI2ltcG9y
dCAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgogI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC02Nyw2ICs2OCwxMSBAQCBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp+U2NyCiB7CiB9CiAKK1doZWVsRXZl
bnRUZXN0VHJpZ2dlciogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6dGVzdFRy
aWdnZXIoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxpbmdUcmVlKCkudGVzdFRyaWdnZXIo
KTsKK30KKwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiBzdGF0aWMgaW5saW5lIFZlY3Rv
cjxMYXlvdXRVbml0PiBjb252ZXJ0VG9MYXlvdXRVbml0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiBz
bmFwT2Zmc2V0c0FzRmxvYXQpCiB7CkBAIC0xNzIsNiArMTc4LDE1IEBAIHZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzoKICAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOwogICAgIH0KIAorI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoYXV0
byogdHJpZ2dlciA9IHRlc3RUcmlnZ2VyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUo
KS5zaG91bGRIYW5kbGVXaGVlbEV2ZW50U3luY2hyb25vdXNseSh3aGVlbEV2ZW50KSkKKyAgICAg
ICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPihzY3Jv
bGxpbmdOb2RlSUQoKSksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3lu
Y05lZWRlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyaWdnZXItPmRlZmVyVGVzdHNG
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4oc2Nyb2xsaW5nTm9kZUlEKCkpLCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOworICAgIH0KKyNlbmRpZgorICAgIAogICAg
IG1fc2Nyb2xsQ29udHJvbGxlci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgIHNj
cm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5n
Tm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uod2hl
ZWxFdmVudC5waGFzZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAkocmV2aXNpb24gMTgzMjY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAt
NDksNiArNTAsNyBAQCBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50
OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBXaGVlbEV2
ZW50VGVzdFRyaWdnZXI7CiAKICNpZiAoRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKSkgJiYgUExBVEZPUk0oTUFDKQogY2xhc3MgU2Nyb2xsQW5pbWF0b3Ig
OiBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewpAQCAtMTE3LDYgKzExOSwxMSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihS
ZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiYmIHRlc3RUcmlnZ2VyKSB7IG1fd2hlZWxFdmVu
dFRlc3RUcmlnZ2VyID0gdGVzdFRyaWdnZXI7IH0KKyNpZiAoRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSkgJiYgUExBVEZPUk0oTUFDKQorICAgIFdoZWVs
RXZlbnRUZXN0VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3doZWVsRXZlbnRUZXN0VHJpZ2dlci5nZXQoKTsgfQorI2VuZGlmCisgICAgCiAjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogICAgIGJvb2wgcHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CkBAIC0xMjgsNiArMTM1LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxv
YXRTaXplJiBkZWx0YSk7CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsK
KyAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3doZWVsRXZlbnRUZXN0VHJpZ2dl
cjsKICNpZiAoRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KSkgJiYgUExBVEZPUk0oTUFDKQogICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9s
bGVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7
CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjsKIAog
Y2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7CiBwcm90ZWN0ZWQ6CkBAIC03NSw2ICs3Niw4
IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgcGFnZSB0byBzY3JvbGwgdG8gdGhlIG5lYXJlc3QgYm91
bmRhcnkgcG9pbnQuCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3Vu
ZHNJZk5lY2Vzc2FyeSgpID0gMDsKIAorICAgIHZpcnR1YWwgV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
KiB0ZXN0VHJpZ2dlcigpIGNvbnN0ID0gMDsKKwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
ICYmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25B
eGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlh
dGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1t
CShyZXZpc2lvbiAxODMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8c3lz
L3N5c2N0bC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKQEAgLTQxMSw2ICs0MTIsOSBAQCB2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhCiB7CiAgICAgbV9jbGllbnQu
c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7CiAgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyLnN0
YXJ0UmVwZWF0aW5nKDEuMCAvIDYwLjApOworCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSBtX2Ns
aWVudC50ZXN0VHJpZ2dlcigpKQorICAgICAgICB0cmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29u
KHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlJ1YmJlcmJhbmRJblByb2dy
ZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1l
cigpCkBAIC00MTgsNiArNDIyLDkgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1
YmJlcmJhbgogICAgIG1fY2xpZW50LnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CiAgICAgbV9z
bmFwUnViYmVyYmFuZFRpbWVyLnN0b3AoKTsKICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0Fj
dGl2ZSA9IGZhbHNlOworICAgIAorICAgIGlmIChhdXRvKiB0cmlnZ2VyID0gbV9jbGllbnQudGVz
dFRyaWdnZXIoKSkKKyAgICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29u
KHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlJ1YmJlcmJhbmRJblByb2dy
ZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCkBAIC02
MTMsNiArNjIwLDEyIEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTY3JvbGxTbmFwVGkK
ICAgICAgICAgbV9jbGllbnQuc3RhcnRTY3JvbGxTbmFwVGltZXIoYXhpcyk7CiAgICAgICAgIHNj
cm9sbFNuYXBUaW1lci5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKICAgICB9CisKKyAgICBp
ZiAoIW1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2ZSgpICYmICFtX3ZlcnRpY2Fs
U2Nyb2xsU25hcFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChh
dXRvKiB0cmlnZ2VyID0gbV9jbGllbnQudGVzdFRyaWdnZXIoKSkKKyAgICAgICAgdHJpZ2dlci0+
ZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
OjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3Rv
cFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKQEAgLTYyMCw2ICs2MzMsMTIg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcFRpbQogICAgIG1fY2xpZW50
LnN0b3BTY3JvbGxTbmFwVGltZXIoYXhpcyk7CiAgICAgUnVuTG9vcDo6VGltZXI8U2Nyb2xsQ29u
dHJvbGxlcj4mIHNjcm9sbFNuYXBUaW1lciA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyIDogbV92ZXJ0aWNhbFNjcm9sbFNu
YXBUaW1lcjsKICAgICBzY3JvbGxTbmFwVGltZXIuc3RvcCgpOworICAgIAorICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSB8fCBtX3ZlcnRpY2FsU2Nyb2xsU25h
cFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiB0cmln
Z2VyID0gbV9jbGllbnQudGVzdFRyaWdnZXIoKSkKKyAgICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVz
dERlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2Vy
OjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6
OlNjcm9sbFNuYXBJblByb2dyZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpob3Jp
em9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gMTgzMjY1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQ5LDYgKzEzNDksOSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZW5k
Q29udGVudEFyZWFTCiAKICAgICBpZiAoIW1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuc3RhcnRP
bmVTaG90KDApOworCisgICAgaWYgKG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyKQorICAgICAgICBt
X3doZWVsRXZlbnRUZXN0VHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlz
KSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7CiB9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZs
b2F0U2l6ZSYgZGVsdGEpCkBAIC0xMzYzLDYgKzEzNjYsOSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpzZW5kQ29udGVudEFyZWFTCiB7CiAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQobV9j
b250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7CiAgICAgbV9jb250ZW50QXJlYVNj
cm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKG1fd2hlZWxF
dmVudFRlc3RUcmlnZ2VyKQorICAgICAgICBtX3doZWVsRXZlbnRUZXN0VHJpZ2dlci0+cmVtb3Zl
VGVzdERlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1
bWIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJPdmVyZmxv
d0V2ZW50LmgiCiAjaW5jbHVkZSAiT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgpAQCAtMTE5LDYgKzEyMCw3IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAj
aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzA3NSw2ICszMDc3LDcgQEAgUGFzc1JlZlB0cjxT
Y3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdAogICAgIGVsc2UgewogICAgICAgICB3aWRnZXQg
PSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJl
Z3VsYXJTY3JvbGxiYXIpOwogICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBv
cmllbnRhdGlvbik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RU
cmlnZ2VyKHJlbmRlcmVyKCkuZnJhbWUoKS5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKTsKICAg
ICB9CiAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0Lmdl
dCgpKTsKICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNs
dWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCkBAIC01MywxMSArNTQsMTMgQEAKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8
bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKQEAgLTgwNiw2ICs4MDksNyBA
QCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlzdEJveDo6Y3JlCiAgICAgZWxzZSB7CiAg
ICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBW
ZXJ0aWNhbFNjcm9sbGJhciwgdGhlbWUoKS5zY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoTGlz
dGJveFBhcnQpKTsKICAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgVmVydGlj
YWxTY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcihmcmFtZSgpLm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIH0KICAgICB2
aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKICAgICByZXR1cm4gd2lk
Z2V0LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJl
dmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwOCwxMSArMzA4LDEyIEBAIHZvaWQgSW50ZXJuYWxzOjpyZXNl
dFRvQ29uc2lzdGVudFN0YXRlKFAKICAgICBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNl
cygpLT5zZXRDYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZShlbXB0eVN0cmluZygpKTsKICAgICBw
YWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLT5zZXRUZXN0aW5nTW9kZShmYWxzZSk7
CiAjZW5kaWYKLSAgICBpZiAoIXBhZ2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmVkaXRv
cigpLnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7Ci0gICAgaWYgKHBhZ2UtPm1haW5G
cmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgcGFnZS0+
bWFpbkZyYW1lKCkuZWRpdG9yKCkudG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKTsKLSAgICBw
YWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGVhclRlc3RpbmdPdmVycmlkZXMoKTsKKyAgICBN
YWluRnJhbWUmIG1haW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOworICAgIGlmICghbWFpbkZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAg
IG1haW5GcmFtZS5lZGl0b3IoKS50b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOworICAg
IGlmIChtYWluRnJhbWUuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKQorICAgICAg
ICBtYWluRnJhbWUuZWRpdG9yKCkudG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKTsKKyAgICBt
YWluRnJhbWUubG9hZGVyKCkuY2xlYXJUZXN0aW5nT3ZlcnJpZGVzKCk7CiAgICAgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigpLnNldERlZmF1bHRPcmlnaW5RdW90YShBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpKTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgTWVk
aWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlc2V0UmVzdHJpY3Rpb25zKCk7CkBA
IC0zMjcsNiArMzI4LDEwIEBAIHZvaWQgSW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRl
KFAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCiAgICAgTW9ja0NvbnRlbnRGaWx0ZXJT
ZXR0aW5nczo6cmVzZXQoKTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgbWFp
bkZyYW1lLmNsZWFyVHJpZ2dlcigpOworI2VuZGlmCiB9CiAKIEludGVybmFsczo6SW50ZXJuYWxz
KERvY3VtZW50KiBkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDE4MzI2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCB2b2lkIG1vbml0b3JXaGVlbEV2ZW50cyhXZWJDb3JlOjpGcmFtZSYg
CiAKIHZvaWQgc2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1lcihXZWJDb3Jl
OjpGcmFtZSYgZnJhbWUsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBqc0NhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0cmlnZ2VyID0gZnJh
bWUubWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKKyAgICBhdXRvIHRyaWdnZXIgPSBm
cmFtZS5tYWluRnJhbWUoKS5lbnN1cmVUZXN0VHJpZ2dlcigpOwogICAgIEpTVmFsdWVQcm90ZWN0
KGNvbnRleHQsIGpzQ2FsbGJhY2tGdW5jdGlvbik7CiAgICAgCiAgICAgdHJpZ2dlci0+c2V0VGVz
dENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1lcihbPV0odm9pZCkgewpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTgzMjY1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDQtMjQgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwYW5kIHRlc3QgaW5mcmFzdHJ1Y3R1cmUg
dG8gc3VwcG9ydCBzY3JvbGxpbmcgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MzY4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjAzNzU1
MTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAg
IChXS0J1bmRsZVBhZ2VSZWdpc3RlclNjcm9sbE9wZXJhdGlvbkNvbXBsZXRpb25DYWxsYmFjayk6
IFVzZSAnYXV0bycgc3ludGF4LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcik6
IE1ha2Ugc3VyZSBzY3JvbGwgYW5pbWF0b3Iga25vd3MgYWJvdXQgYW55CisgICAgICAgIGFjdGl2
ZSB0ZXN0IHRyaWdnZXJzLgorCiAyMDE1LTA0LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb252ZXJ0IE93blB0ciBhbmQgUGFzc093blB0ciB1c2VzIHRvIHN0
ZDo6dW5pcXVlX3B0cgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNp
b24gMTgzMjY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTYsNyArNTk2LDcgQEAg
dm9pZCBXS0J1bmRsZVBhZ2VSZWdpc3RlclNjcm9sbE9wZXJhdGlvbgogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0VHJpZ2dl
ciogdHJpZ2dlciA9IHBhZ2UtPm1haW5GcmFtZSgpLmVuc3VyZVRlc3RUcmlnZ2VyKCk7CisgICAg
YXV0byB0cmlnZ2VyID0gcGFnZS0+bWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKICAg
ICB0cmlnZ2VyLT5zZXRUZXN0Q2FsbGJhY2tBbmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKFs9XSgp
IHsKICAgICAgICAgY2FsbGJhY2soY29udGV4dCk7CiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNp
b24gMTgzMjY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDE1ICs2NywxOCBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9TY3JvbGxBbmltYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5oPgogI2ltcG9ydCA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNjU3
LDYgKzY2MCw4IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVMKICAg
ICAgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyLmdldCgpXTsKICAgICB9CiAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3Jp
ZW50YXRpb24pOworICAgIGlmIChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KSkKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoZnJh
bWUtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUo
KS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwogICAgIHJldHVybiB3aWRnZXQucmVs
ZWFzZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251891</attachid>
            <date>2015-04-28 15:31:37 -0700</date>
            <delta_ts>2015-04-28 15:36:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143684-20150428153027.patch</filename>
            <type>text/plain</type>
            <size>34484</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE1LTA0LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4cGFuZCB0ZXN0IGluZnJh
c3RydWN0dXJlIHRvIHN1cHBvcnQgc2Nyb2xsaW5nIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIwMzc1NTE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSB2YXJpb3VzIGZhc3Qvc2Nyb2xsaW5nIGFuZCBwbGF0Zm9ybS9tYWMt
d2syL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nIHRlc3RzLgorCisgICAgICAgIFRoaXMgc2VyaWVz
IG9mIGNoYW5nZXMgYWRkcyBhIG5ldyBzaW5nbGV0b24gY2xhc3MsICdXaGVlbEV2ZW50VGVzdFRy
aWdnZXInLCB3aGljaCBlbmNhcHN1bGF0ZXMgYQorICAgICAgICBmdW5jdGlvbiBvYmplY3QgdG8g
YmUgZmlyZWQgd2hlbiBzY3JvbGwgZXZlbnRzIGFyZSBmaW5pc2hlZC4gVGhlIG9iamVjdCBhbHNv
IGtlZXBzIHRyYWNrIG9mIHJlYXNvbnMKKyAgICAgICAgd2h5IHRoZSB0ZXN0IHNob3VsZCBub3Qg
eWV0IGZpcmUgKGUuZy4sICdydWJiZXJiYW5kaW5nJyBpcyBhY3RpdmUpIHNvIHRoYXQgdGVzdHMg
ZG8gbm90IGluY29ycmVjdGx5CisgICAgICAgIGNoZWNrIHJlbmRlcmluZyBzdGF0ZSBpbiB0aGUg
bWlkZGxlIG9mIGFuIGFuaW1hdGlvbi4KKworICAgICAgICBTd2l0Y2ggZnJvbSB0aGUgb3JpZ2lu
YWwgV2Vha1B0ciBkZXNpZ24gdG8gVGhyZWFkU2FmZVJlZlB0ciwgYmVjYXVzZSBXZWFrUHRyIGNh
bm5vdCBiZSBzaGFyZWQKKyAgICAgICAgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Omxh
eW91dCk6IE1ha2Ugc3VyZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZlIHRl
c3QgdHJpZ2dlci4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZGlkQWRkU2Nyb2xsYmFy
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWFpbkZyYW1lOjp0ZXN0VHJpZ2dlcik6IFN3aXRjaCB0byBSZWZQdHIuCisgICAgICAgIChX
ZWJDb3JlOjpNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKTogRGl0dG8uCisgICAgICAgICog
cGFnZS9NYWluRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRU
ZXN0VHJpZ2dlcik6IFJlbW92ZSBXZWFrUHRyIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OmNyZWF0ZVdlYWtQdHIpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBh
cmVGb3JXaGVlbEV2ZW50cyk6IE1ha2Ugc3VyZSB0aGUgc2Nyb2xsIGFuaW1hdG9yIGtub3dzIGFi
b3V0CisgICAgICAgIGFueSBhY3RpdmUgdGVzdCB0cmlnZ2VyIG9iamVjdC4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0
ZXJBc3luY1Njcm9sbCk6IE5vdGlmeSBXaGVlbEV2ZW50VGVzdFRyaWdnZXIKKyAgICAgICAgdGhh
dCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBpcyBzeW5jZWQgd2l0aCB0aGUgbWFpbiB0aHJlYWQuIEFs
c28gbWFrZSBzdXJlIHRoZSBTY3JvbGxBbmltYXRvciBhbmQgU2Nyb2xsaW5nVHJlZQorICAgICAg
ICBrbm93IGFib3V0IGFueSBhY3RpdmUgdGVzdCB0cmlnZ2Vycy4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
OjpzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIpOiBBZGRlZCB2aXJ0dWFsIHN0dWIgZm9yIHRoaXMg
YmFzZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnRlc3RUcmlnZ2Vy
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVl
Lmg6IEhvbGQgYSBSZWZQdHIgdG8gdGhlIFdoZWVsRXZlbnRUZXN0VHJpZ2dlci4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5o
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYzo6dGVzdFRyaWdnZXIpOiBBZGQgbWV0aG9kIHRvIHNhdGlzZnkgY2xpZW50IHBy
b3RvY29sIGZvciBTY3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6IFRlbGwgdGhlIFdo
ZWVsRXZlbnRUZXN0VHJpZ2dlciB3aGV0aGVyIHRoZSB0ZXN0cworICAgICAgICBuZWVkIHRvIHdh
aXQgZm9yIGEgc2Nyb2xsIHRocmVhZCBzeW5jIHRvIG9jY3VyLgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmg6IEhvbGQgYSBSZWZQdHIgdG8gdGhlIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlci4gCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6
OnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Ny
b2xsQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdGFydFNuYXBSdWJi
ZXJiYW5kVGltZXIpOiBOb3RpZnkgdGVzdCB0cmlnZ2VyIHRvIGhvbGQgdGVzdHMgdW50aWwgcnVi
YmVyIGJhbmQKKyAgICAgICAgc25hcHBpbmcgaXMgY29tcGxldGUuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6IE5vdGlmeSB0ZXN0
IHRyaWdnZXIgdGhhdCBydWJiZXIgYmFuZCBzbmFwcGluZyBpcyBkb25lLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTY3JvbGxTbmFwVGltZXIpOiBOb3RpZnkgdGVz
dCB0cmlnZ2VyIHRvIGhvbGQgdGVzdHMgdW50aWwgc2Nyb2xsIHNuYXBwaW5nCisgICAgICAgIGlz
IGNvbXBsZXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9s
bFNuYXBUaW1lcik6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdGhhdCBzY3JvbGwgc25hcHBpbmcgaXMg
ZG9uZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRT
b29uKTogTm90aWZ5IHRlc3QgdHJpZ2dlciB0byBob2xkIHRlc3RzIHVudGlsIHRoZSBjb250ZW50
CisgICAgICAgIHNjcm9sbGluZyBpcyBjb21wbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpOiBOb3RpZnkg
dGVzdCB0cmlnZ2VyIHRoYXQgY29udGVudCBzY3JvbGxpbmcgaXMgZG9uZS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTY3JvbGxB
bmltYXRvclRvVGVzdFRyaWdnZXIpOiBIZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOiBDYWxsICdjb25uZWN0U2Nyb2xsQW5pbWF0b3JU
b1Rlc3RUcmlnZ2VyJyB0byBjb25uZWN0IHRoZSBTY3JvbGxBbmltYXRvcgorICAgICAgICB0byB0
aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHNvIHRoYXQgZnV0dXJlIHNjcm9sbCBvcGVyYXRpb25z
IGNhbiBub3RpZnkgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xs
YmFyKTogTWFrZSBzdXJlIHRoZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZl
IHRlc3QgdHJpZ2dlcnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcik6IEhl
bHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9s
bExlZnQpOiBDYWxsICdjb25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyJyB0byBjb25u
ZWN0IHRoZSBTY3JvbGxBbmltYXRvcgorICAgICAgICB0byB0aGUgV2hlZWxFdmVudFRlc3RUcmln
Z2VyIHNvIHRoYXQgZnV0dXJlIHNjcm9sbCBvcGVyYXRpb25zIGNhbiBub3RpZnkgdGhlIHRlc3Qg
aW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3Jv
bGxUb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNyZWF0ZVNj
cm9sbGJhcik6IERpdHRvLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6IFJlc2V0IGFu
eSB0ZXN0IHJlZmVycmFscyBhbmQgY2xlYW4gdXAgYW55IHRyaWdnZXJzIHByaW9yIHRvCisgICAg
ICAgIHN0YXJ0aW5nIHRoZSBuZXh0IHRlc3QuCisKIDIwMTUtMDQtMjggIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBTaGFyZWRCdWZmZXI6OmNv
cHkgaXMgbm90IGNvbXB1dGluZyB0aGUgYnVmZmVyIHNpemUgY29ycmVjdGx5IHdoZW4gaGF2aW5n
IG1fZGF0YUFycmF5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
ODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1
ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtMTI2NSw3ICsxMjY2LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogICAgICAgICAgICAgICAgICAgICAvLyBT
ZXQgdGhlIGluaXRpYWwgaE1vZGUgdG8gQWx3YXlzT2ZmIGlmIHdlJ3JlIGF1dG8uCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChoTW9kZSA9PSBTY3JvbGxiYXJBdXRvKQogICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQWx3YXlzT2ZmKTsg
Ly8gVGhpcyBjYXVzZXMgYSBob3Jpem9udGFsIHNjcm9sbGJhciB0byBkaXNhcHBlYXIuCi0KKyAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIoZnJhbWUoKS5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKTsKICAgICAgICAgICAgICAgICAg
ICAgc2V0U2Nyb2xsYmFyTW9kZXMoaE1vZGUsIHZNb2RlKTsKICAgICAgICAgICAgICAgICAgICAg
c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZQpAQCAtMjA0NCw2ICsyMDQ1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IAogewogICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBjaGFuZ2VJblByb2dyYW1t
YXRpY1Njcm9sbChtX2luUHJvZ3JhbW1hdGljU2Nyb2xsLCB0cnVlKTsKICAgICBtX21haW50YWlu
U2Nyb2xsUG9zaXRpb25BbmNob3IgPSBudWxscHRyOworICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lKCkubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7
CiAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOwogfQogCkBA
IC00NTU2LDYgKzQ1NTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMCiB2b2lkIEZyYW1lVmlldzo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBTY3JvbGxhYmxlQXJl
YTo6ZGlkQWRkU2Nyb2xsYmFyKHNjcm9sbGJhciwgb3JpZW50YXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lKCkubWFpbkZyYW1lKCkudGVz
dFRyaWdnZXIoKSk7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNo
ZSgpKQogICAgICAgICBjYWNoZS0+aGFuZGxlU2Nyb2xsYmFyVXBkYXRlKHRoaXMpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudERlbHRhVHJhY2tlci5oIgotI2luY2x1ZGUgIldoZWVs
RXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDE3ICsxMjYsMTcgQEAgdm9pZCBNYWluRnJhbWU6OnBv
cExhdGNoaW5nU3RhdGUoKQogfQogI2VuZGlmCiAKLVdoZWVsRXZlbnRUZXN0VHJpZ2dlciogTWFp
bkZyYW1lOjp0ZXN0VHJpZ2dlcigpIGNvbnN0CitSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2Vy
PiBNYWluRnJhbWU6OnRlc3RUcmlnZ2VyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXN0VHJp
Z2dlci5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXN0VHJpZ2dlcjsKIH0KIAotV2hlZWxFdmVudFRl
c3RUcmlnZ2VyKiBNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKCkKK1JlZlB0cjxXaGVlbEV2
ZW50VGVzdFRyaWdnZXI+IE1haW5GcmFtZTo6ZW5zdXJlVGVzdFRyaWdnZXIoKQogewogICAgIGlm
ICghbV90ZXN0VHJpZ2dlcikKLSAgICAgICAgbV90ZXN0VHJpZ2dlciA9IHN0ZDo6bWFrZV91bmlx
dWU8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPigpOworICAgICAgICBtX3Rlc3RUcmlnZ2VyID0gYWRv
cHRSZWYobmV3IFdoZWVsRXZlbnRUZXN0VHJpZ2dlcigpKTsKIAotICAgIHJldHVybiBtX3Rlc3RU
cmlnZ2VyLmdldCgpOworICAgIHJldHVybiBtX3Rlc3RUcmlnZ2VyOwogfQogCiB2b2lkIE1haW5G
cmFtZTo6Y2xlYXJUcmlnZ2VyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaAkocmV2aXNp
b24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNYWluRnJhbWVfaAogCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDcgKzM4LDYgQEAgY2xh
c3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKIGNs
YXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyOwotY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBNYWluRnJhbWUgZmlu
YWwgOiBwdWJsaWMgRnJhbWUgewogcHVibGljOgpAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBXaGVlbEV2
ZW50VGVzdFRyaWdnZXIqIGVuc3VyZVRlc3RUcmlnZ2VyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gdGVzdFRyaWdnZXIoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBlbnN1cmVUZXN0VHJp
Z2dlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJUcmlnZ2VyKCk7CiAKIHByaXZh
dGU6CkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKICNlbmRp
ZgogI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gbV90
ZXN0VHJpZ2dlcjsKKyAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3Rlc3RUcmln
Z2VyOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVj
ZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZU92ZXJs
YXlDb250cm9sbGVyPiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHJldmlzaW9uIDE4MzQ5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXaGVlbEV2
ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpCiAgICAgOiBtX3Rlc3RUcmln
Z2VyVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
Ojp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpCi0gICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiB7
CiB9CiAKLVdlYWtQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OmNyZWF0ZVdlYWtQdHIoKQotewotICAgIHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0
ZVdlYWtQdHIoKTsKLX0KLQogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmNsZWFyQWxsVGVz
dERlZmVycmFscygpCiB7CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV90
ZXN0VHJpZ2dlck11dGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRl
c3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50
VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9X
aGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEzIEBA
CiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIgeworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcigpOwpAQCAtNTYsMTUgKzU3LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24pOwogICAgIHZvaWQgdHJpZ2dlclRlc3RU
aW1lckZpcmVkKCk7CiAKLSAgICBXZWFrUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gY3JlYXRl
V2Vha1B0cigpOwotCiBwcml2YXRlOgogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3Rlc3RO
b3RpZmljYXRpb25DYWxsYmFjazsKICAgICBSdW5Mb29wOjpUaW1lcjxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI+IG1fdGVzdFRyaWdnZXJUaW1lcjsKICAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV90ZXN0
VHJpZ2dlck11dGV4OwogICAgIFdURjo6SGFzaE1hcDx2b2lkKiwgc3RkOjpzZXQ8RGVmZXJUZXN0
VHJpZ2dlclJlYXNvbj4+IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnM7Ci0KLSAgICBXZWFrUHRy
RmFjdG9yeTxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fd2Vha1B0ckZhY3Rvcnk7CiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZp
c2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvT2JqY1J1bnRpbWVFeHRyYXMuaD4KQEAgLTg4Miw2ICs4ODMsOSBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlCiAgICAgICAgIH0KICAgICB9CiAgICAgCisg
ICAgaWYgKHNjcm9sbGFibGVBcmVhKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5p
bWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIobV9mcmFtZS5tYWluRnJhbWUoKS50ZXN0
VHJpZ2dlcigpKTsKKwogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUgPSBt
X2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKICAgICBpZiAod2hlZWxFdmVudC5z
aG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250YWlu
ZXIgJiYgc2Nyb2xsYWJsZUFyZWEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZp
c2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTQgQEAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29uc3RyYWludHMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdT
dGF0ZVN0aWNreU5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNs
dWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0yOTMsNiArMjk1LDEzIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRl
U2MKIAogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gKmZyYW1lVmlld1B0cjsKIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIGZyYW1lVmlldy5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcihtX3BhZ2UtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOworICAgIHNj
cm9sbGluZ1RyZWUoKS0+c2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKG1fcGFnZS0+bWFpbkZyYW1l
KCkudGVzdFRyaWdnZXIoKSk7CisgICAgaWYgKGNvbnN0IGF1dG8mIHRyaWdnZXIgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3RE
ZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPihzY3JvbGxpbmdOb2RlSUQpLCBXaGVlbEV2ZW50VGVz
dFRyaWdnZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOworI2VuZGlmCisKICAgICBpZiAo
c2Nyb2xsaW5nTm9kZUlEID09IGZyYW1lVmlldy5zY3JvbGxMYXllcklEKCkpIHsKICAgICAgICAg
Ym9vbCBvbGRQcm9ncmFtbWF0aWNTY3JvbGwgPSBmcmFtZVZpZXcuaW5Qcm9ncmFtbWF0aWNTY3Jv
bGwoKTsKICAgICAgICAgZnJhbWVWaWV3LnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKHByb2dyYW1t
YXRpY1Njcm9sbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiAr
NDMsNyBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZU5v
ZGU7CiBjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBTY3JvbGxpbmdU
cmVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjcm9sbGluZ1RyZWU+IHsKIHB1Ymxp
YzoKQEAgLTEzNSw3ICsxMzYsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9maXhlZE9y
U3RpY2t5Tm9kZUNvdW50KTsKICAgICAgICAgLS1tX2ZpeGVkT3JTdGlja3lOb2RlQ291bnQ7CiAg
ICAgfQotICAgIAorCisgICAgdmlydHVhbCB2b2lkIHNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihS
ZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiYmKSB7IC8qIGRvIG5vdGhpbmcgKi8gfQorICAg
IHZpcnR1YWwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oRmxvYXRQb2ludCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUu
aAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTIgKzMwLDE0IEBACiAKICNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgi
CisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjsKIAogLy8gVGhlIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSBjbGFzcyBsaXZlcyBhbG1v
c3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgYW5kIG1hbmFnZXMgdGhlCiAv
LyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRoZSBwYWdlLiBJdCdzIGFsc28g
cmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpAQCAtNTYsNiArNTgsOSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCisgICAgdm9p
ZCBzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4m
JiB0ZXN0VHJpZ2dlcikgb3ZlcnJpZGUgeyBtX3doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHRlc3RU
cmlnZ2VyOyB9CisgICAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLmdldCgpOyB9CisKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBUaHJlYWRlZFNjcm9sbGluZ1RyZWUoQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvciopOwogCkBAIC02Nyw2ICs3Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzVGhyZWFkZWRTY3JvbGxpbmdUcmVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4g
bV93aGVlbEV2ZW50VGVzdFRyaWdnZXI7CiAgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3I+IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgJKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDggQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiwgU2Nyb2xsRXZlbnRBeGlzKTsKIAorICAgIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
ciogdGVzdFRyaWdnZXIoKSBjb25zdCBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApICYmIFBMQVRGT1JNKE1BQykKICAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhp
cyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4
MzQ5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW1wb3J0ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIldlYkxheWVyLmgiCisjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAogI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUu
aD4KQEAgLTY3LDYgKzY4LDExIEBAIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6
On5TY3IKIHsKIH0KIAorV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlTWFjOjp0ZXN0VHJpZ2dlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9s
bGluZ1RyZWUoKS50ZXN0VHJpZ2dlcigpOworfQorCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIHN0YXRpYyBpbmxpbmUgVmVjdG9yPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVuaXRz
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzQXNGbG9hdCkKIHsKQEAgLTE3Miw2ICsx
NzgsMTUgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogICAgICAg
ICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpO
T107CiAgICAgfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQorICAgIGlmIChhdXRvKiB0cmlnZ2VyID0gdGVzdFRyaWdnZXIoKSkgeworICAg
ICAgICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnNob3VsZEhhbmRsZVdoZWVsRXZlbnRTeW5jaHJvbm91
c2x5KHdoZWVsRXZlbnQpKQorICAgICAgICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFs
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHNjcm9sbGluZ05vZGVJRCgpKSwgV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpTY3JvbGxpbmdUaHJlYWRTeW5jTmVlZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPihzY3JvbGxpbmdOb2RlSUQo
KSksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3luY05lZWRlZCk7Cisg
ICAgfQorI2VuZGlmCisgICAgCiAgICAgbV9zY3JvbGxDb250cm9sbGVyLmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9k
ZSh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLmhh
bmRsZVdoZWVsRXZlbnRQaGFzZSh3aGVlbEV2ZW50LnBoYXNlKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogCkBAIC00OSw2ICs1MCw3IEBAIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNj
cm9sbGJhcjsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjsKIAogI2lmIChFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFURk9STShNQUMp
CiBjbGFzcyBTY3JvbGxBbmltYXRvciA6IHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7
CkBAIC0xMTcsNiArMTE5LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZvaWQgc2V0
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+JiYgdGVz
dFRyaWdnZXIpIHsgbV93aGVlbEV2ZW50VGVzdFRyaWdnZXIgPSB0ZXN0VHJpZ2dlcjsgfQorI2lm
IChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQ
TEFURk9STShNQUMpCisgICAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLmdldCgpOyB9Cisj
ZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMp
CiAgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsK
QEAgLTEyOCw2ICsxMzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKTsKIAogICAgIFNjcm9sbGFibGVB
cmVhJiBtX3Njcm9sbGFibGVBcmVhOworICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+
IG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogI2lmIChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8
fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFURk9STShNQUMpCiAgICAgU2Nyb2xsQ29u
dHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4MzQ5
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKIHBy
b3RlY3RlZDoKQEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgogICAgIC8vIHRoZSBwYWdlIHRvIHNj
cm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOwogCisgICAgdmlydHVh
bCBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRlc3RUcmlnZ2VyKCkgY29uc3QgPSAwOworCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZs
b2F0IGRlbHRhKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbENvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRy
aWdnZXIuaCIKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
IApAQCAtNDExLDYgKzQxMiw5IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTbmFwUnVi
YmVyYmEKIHsKICAgICBtX2NsaWVudC5zdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKICAgICBt
X3NuYXBSdWJiZXJiYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAuMCk7CisKKyAgICBp
ZiAoYXV0byogdHJpZ2dlciA9IG1fY2xpZW50LnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdn
ZXItPmRlZmVyVGVzdHNGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6UnViYmVyYmFuZEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKQEAgLTQxOCw2ICs0MjIsOSBAQCB2b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnN0b3BTbmFwUnViYmVyYmFuCiAgICAgbV9jbGllbnQuc3RvcFNuYXBSdWJi
ZXJiYW5kVGltZXIoKTsKICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIuc3RvcCgpOwogICAgIG1f
c25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0gZmFsc2U7CisgICAgCisgICAgaWYgKGF1dG8q
IHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dlcigpKQorICAgICAgICB0cmlnZ2VyLT5yZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6UnViYmVyYmFuZEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNuYXBSdWJiZXJCYW5kKCkKQEAgLTYxMyw2ICs2MjAsMTIgQEAgdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzdGFydFNjcm9sbFNuYXBUaQogICAgICAgICBtX2NsaWVudC5zdGFydFNjcm9sbFNuYXBU
aW1lcihheGlzKTsKICAgICAgICAgc2Nyb2xsU25hcFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMCAv
IDYwLjApOwogICAgIH0KKworICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmlz
QWN0aXZlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dl
cigpKQorICAgICAgICB0cmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nh
c3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMp
LCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbFNuYXBJblByb2dyZXNzKTsKIH0KIAogdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQpAQCAtNjIwLDYgKzYzMywxMiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BTY3Jv
bGxTbmFwVGltCiAgICAgbV9jbGllbnQuc3RvcFNjcm9sbFNuYXBUaW1lcihheGlzKTsKICAgICBS
dW5Mb29wOjpUaW1lcjxTY3JvbGxDb250cm9sbGVyPiYgc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9
PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGlt
ZXIgOiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOwogICAgIHNjcm9sbFNuYXBUaW1lci5zdG9w
KCk7CisgICAgCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2ZSgp
IHx8IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dlcigpKQorICAg
ICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2Fz
dDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyks
IFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsU25hcEluUHJvZ3Jlc3MpOwogfQogCiB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
CShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNDksNiArMTM0OSw5IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIAogICAgIGlmICghbV9zZW5kQ29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBpZiAobV93aGVlbEV2ZW50
VGVzdFRyaWdnZXIpCisgICAgICAgIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLT5kZWZlclRlc3Rz
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkNvbnRlbnRT
Y3JvbGxJblByb2dyZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRl
bnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKQEAgLTEzNjMsNiArMTM2Niw5
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIHsKICAgICBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRh
KTsKICAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gRmxvYXRTaXpl
KCk7CisKKyAgICBpZiAobV93aGVlbEV2ZW50VGVzdFRyaWdnZXIpCisgICAgICAgIG1fd2hlZWxF
dmVudFRlc3RUcmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRf
Y2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhp
cyksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwogfQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29u
c3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAg
KiAgICAgICAgICAgKEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKQEAgLTU5LDYg
KzYwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3Rh
dGUuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtNTkzLDE2ICs1OTUsMzEgQEAgaW50
IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgPyBsYXllcigpLT5zY3JvbGxZT2Zmc2V0KCkgOiAwOwogfQogCitzdGF0aWMgdm9pZCBjb25u
ZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyKFJlbmRlckxheWVyKiBsYXllciwgRnJhbWUq
IGZyYW1lKQoreworICAgIGlmICghbGF5ZXIgfHwgIWZyYW1lKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWZyYW1lLT5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBsYXllci0+c2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIoZnJhbWUtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOworfQorCiB2b2lkIFJlbmRlckJv
eDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgIGNvbm5lY3RTY3JvbGxB
bmltYXRvclRvVGVzdFRyaWdnZXIobGF5ZXIoKSwgZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICAg
ICAgbGF5ZXIoKS0+c2Nyb2xsVG9YT2Zmc2V0KG5ld0xlZnQsIFJlbmRlckxheWVyOjpTY3JvbGxP
ZmZzZXRDbGFtcGVkKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3Ao
aW50IG5ld1RvcCkKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgIGNvbm5lY3RTY3JvbGxBbmltYXRvclRvVGVzdFRyaWdn
ZXIobGF5ZXIoKSwgZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICAgICAgbGF5ZXIoKS0+c2Nyb2xs
VG9ZT2Zmc2V0KG5ld1RvcCwgUmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQpOworICAg
IH0KIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxODM0OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgog
I2luY2x1ZGUgIk92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
QEAgLTExOSw2ICsxMjAsNyBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTMwNzUsNiArMzA3Nyw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBS
ZW5kZXJMYXllcjo6Y3JlYXQKICAgICBlbHNlIHsKICAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xs
YmFyKTsKICAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24p
OworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihyZW5k
ZXJlcigpLmZyYW1lKCkubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7CiAgICAgfQogICAgIHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CiAgICAg
cmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNTMsMTEgKzU0LDEzIEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgor
I2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNp
bmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogCkBAIC02NjEsMTMgKzY2NCwyMSBAQCBpbnQgUmVu
ZGVyTGlzdEJveDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICByZXR1cm4gbV9pbmRleE9mZnNldCAq
IGl0ZW1IZWlnaHQoKTsKIH0KIAorc3RhdGljIHZvaWQgY29ubmVjdFNjcm9sbEFuaW1hdG9yVG9U
ZXN0VHJpZ2dlcihSZW5kZXJMaXN0Qm94JiByZW5kZXJlciwgRnJhbWUqIGZyYW1lKQoreworICAg
IGlmICghZnJhbWUgfHwgIWZyYW1lLT5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZW5kZXJlci5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRU
ZXN0VHJpZ2dlcihmcmFtZS0+bWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7Cit9CisKIHZvaWQg
UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCiB7CiAgICAgLy8gRGV0ZXJt
aW5lIGFuIGluZGV4IGFuZCBzY3JvbGwgdG8gaXQuICAgIAogICAgIGludCBpbmRleCA9IG5ld1Rv
cCAvIGl0ZW1IZWlnaHQoKTsKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG51bUl0ZW1z
KCkgfHwgaW5kZXggPT0gbV9pbmRleE9mZnNldCkKICAgICAgICAgcmV0dXJuOwotICAgIAorICAg
IGNvbm5lY3RTY3JvbGxBbmltYXRvclRvVGVzdFRyaWdnZXIoKnRoaXMsIGRvY3VtZW50KCkuZnJh
bWUoKSk7CiAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKFZlcnRpY2FsU2Nyb2xs
YmFyLCBpbmRleCk7CiB9CiAKQEAgLTgwNiw2ICs4MTcsNyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gUmVuZGVyTGlzdEJveDo6Y3JlCiAgICAgZWxzZSB7CiAgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgdGhl
bWUoKS5zY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKICAgICAgICAg
ZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihmcmFtZSgpLm1haW5G
cmFtZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIH0KICAgICB2aWV3KCkuZnJhbWVWaWV3KCkuYWRk
Q2hpbGQod2lkZ2V0LmdldCgpKTsKICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJ
KHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRl
c3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIG1vbml0
b3JXaGVlbEV2ZW50cyhXZWJDb3JlOjpGcmFtZSYgCiAKIHZvaWQgc2V0VGVzdENhbGxiYWNrQW5k
U3RhcnROb3RpZmljYXRpb25UaW1lcihXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBqc0NhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKiB0cmlnZ2VyID0gZnJhbWUubWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRy
aWdnZXIoKTsKKyAgICBhdXRvIHRyaWdnZXIgPSBmcmFtZS5tYWluRnJhbWUoKS5lbnN1cmVUZXN0
VHJpZ2dlcigpOwogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGpzQ2FsbGJhY2tGdW5jdGlv
bik7CiAgICAgCiAgICAgdHJpZ2dlci0+c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRp
b25UaW1lcihbPV0odm9pZCkgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNDkzKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTUtMDQtMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgRXhwYW5kIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBzY3JvbGxpbmcgdGVzdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzY4NAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjAzNzU1MTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VSZWdpc3RlclNjcm9s
bE9wZXJhdGlvbkNvbXBsZXRpb25DYWxsYmFjayk6IFVzZSAnYXV0bycgc3ludGF4LgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcik6IE1ha2Ugc3VyZSBzY3JvbGwgYW5pbWF0b3Ig
a25vd3MgYWJvdXQgYW55CisgICAgICAgIGFjdGl2ZSB0ZXN0IHRyaWdnZXJzLgorCiAyMDE1LTA0
LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1bTWFj
XSBVcGRhdGUgV2ViQ29udGVudCBwcm9jZXNzJyBzYW5kYm94IHByb2ZpbGUgZm9yIEFXRApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTgzNDkzKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTYsNyArNTk2LDcgQEAgdm9pZCBXS0J1bmRsZVBhZ2VS
ZWdpc3RlclNjcm9sbE9wZXJhdGlvbgogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0VHJpZ2dlciogdHJpZ2dlciA9IHBhZ2Ut
Pm1haW5GcmFtZSgpLmVuc3VyZVRlc3RUcmlnZ2VyKCk7CisgICAgYXV0byB0cmlnZ2VyID0gcGFn
ZS0+bWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKICAgICB0cmlnZ2VyLT5zZXRUZXN0
Q2FsbGJhY2tBbmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKFs9XSgpIHsKICAgICAgICAgY2FsbGJh
Y2soY29udGV4dCk7CiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMTgzNDkzKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDE1ICs2OCwxOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2lu
RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmlt
YXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+CisjaW1wb3J0IDxXZWJD
b3JlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNjYwLDYgKzY2Myw4IEBA
IFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVMKICAgICAgICAgW21fY29u
dGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpXTsK
ICAgICB9CiAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKSkKKyAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoZnJhbWUtPm1haW5GcmFt
ZSgpLnRlc3RUcmlnZ2VyKCkpOwogICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5h
ZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwogICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251892</attachid>
            <date>2015-04-28 15:36:29 -0700</date>
            <delta_ts>2015-04-29 15:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143684-20150428153520.patch</filename>
            <type>text/plain</type>
            <size>34384</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE1LTA0LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4cGFuZCB0ZXN0IGluZnJh
c3RydWN0dXJlIHRvIHN1cHBvcnQgc2Nyb2xsaW5nIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIwMzc1NTE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSB2YXJpb3VzIGZhc3Qvc2Nyb2xsaW5nIGFuZCBwbGF0Zm9ybS9tYWMt
d2syL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nIHRlc3RzLgorCisgICAgICAgIFRoaXMgc2VyaWVz
IG9mIGNoYW5nZXMgYWRkcyBhIG5ldyBzaW5nbGV0b24gY2xhc3MsICdXaGVlbEV2ZW50VGVzdFRy
aWdnZXInLCB3aGljaCBlbmNhcHN1bGF0ZXMgYQorICAgICAgICBmdW5jdGlvbiBvYmplY3QgdG8g
YmUgZmlyZWQgd2hlbiBzY3JvbGwgZXZlbnRzIGFyZSBmaW5pc2hlZC4gVGhlIG9iamVjdCBhbHNv
IGtlZXBzIHRyYWNrIG9mIHJlYXNvbnMKKyAgICAgICAgd2h5IHRoZSB0ZXN0IHNob3VsZCBub3Qg
eWV0IGZpcmUgKGUuZy4sICdydWJiZXJiYW5kaW5nJyBpcyBhY3RpdmUpIHNvIHRoYXQgdGVzdHMg
ZG8gbm90IGluY29ycmVjdGx5CisgICAgICAgIGNoZWNrIHJlbmRlcmluZyBzdGF0ZSBpbiB0aGUg
bWlkZGxlIG9mIGFuIGFuaW1hdGlvbi4KKworICAgICAgICBTd2l0Y2ggZnJvbSB0aGUgb3JpZ2lu
YWwgV2Vha1B0ciBkZXNpZ24gdG8gVGhyZWFkU2FmZVJlZlB0ciwgYmVjYXVzZSBXZWFrUHRyIGNh
bm5vdCBiZSBzaGFyZWQKKyAgICAgICAgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Omxh
eW91dCk6IE1ha2Ugc3VyZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZlIHRl
c3QgdHJpZ2dlci4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZGlkQWRkU2Nyb2xsYmFy
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWFpbkZyYW1lOjp0ZXN0VHJpZ2dlcik6IFN3aXRjaCB0byBSZWZQdHIuCisgICAgICAgIChX
ZWJDb3JlOjpNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKTogRGl0dG8uCisgICAgICAgICog
cGFnZS9NYWluRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRU
ZXN0VHJpZ2dlcik6IFJlbW92ZSBXZWFrUHRyIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OmNyZWF0ZVdlYWtQdHIpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBh
cmVGb3JXaGVlbEV2ZW50cyk6IE1ha2Ugc3VyZSB0aGUgc2Nyb2xsIGFuaW1hdG9yIGtub3dzIGFi
b3V0CisgICAgICAgIGFueSBhY3RpdmUgdGVzdCB0cmlnZ2VyIG9iamVjdC4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0
ZXJBc3luY1Njcm9sbCk6IE5vdGlmeSBXaGVlbEV2ZW50VGVzdFRyaWdnZXIKKyAgICAgICAgdGhh
dCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBpcyBzeW5jZWQgd2l0aCB0aGUgbWFpbiB0aHJlYWQuIEFs
c28gbWFrZSBzdXJlIHRoZSBTY3JvbGxBbmltYXRvciBhbmQgU2Nyb2xsaW5nVHJlZQorICAgICAg
ICBrbm93IGFib3V0IGFueSBhY3RpdmUgdGVzdCB0cmlnZ2Vycy4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
OjpzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIpOiBBZGRlZCB2aXJ0dWFsIHN0dWIgZm9yIHRoaXMg
YmFzZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnRlc3RUcmlnZ2Vy
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVl
Lmg6IEhvbGQgYSBSZWZQdHIgdG8gdGhlIFdoZWVsRXZlbnRUZXN0VHJpZ2dlci4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5o
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYzo6dGVzdFRyaWdnZXIpOiBBZGQgbWV0aG9kIHRvIHNhdGlzZnkgY2xpZW50IHBy
b3RvY29sIGZvciBTY3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6IFRlbGwgdGhlIFdo
ZWVsRXZlbnRUZXN0VHJpZ2dlciB3aGV0aGVyIHRoZSB0ZXN0cworICAgICAgICBuZWVkIHRvIHdh
aXQgZm9yIGEgc2Nyb2xsIHRocmVhZCBzeW5jIHRvIG9jY3VyLgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmg6IEhvbGQgYSBSZWZQdHIgdG8gdGhlIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlci4gCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6
OnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Ny
b2xsQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdGFydFNuYXBSdWJi
ZXJiYW5kVGltZXIpOiBOb3RpZnkgdGVzdCB0cmlnZ2VyIHRvIGhvbGQgdGVzdHMgdW50aWwgcnVi
YmVyIGJhbmQKKyAgICAgICAgc25hcHBpbmcgaXMgY29tcGxldGUuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6IE5vdGlmeSB0ZXN0
IHRyaWdnZXIgdGhhdCBydWJiZXIgYmFuZCBzbmFwcGluZyBpcyBkb25lLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTY3JvbGxTbmFwVGltZXIpOiBOb3RpZnkgdGVz
dCB0cmlnZ2VyIHRvIGhvbGQgdGVzdHMgdW50aWwgc2Nyb2xsIHNuYXBwaW5nCisgICAgICAgIGlz
IGNvbXBsZXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9s
bFNuYXBUaW1lcik6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdGhhdCBzY3JvbGwgc25hcHBpbmcgaXMg
ZG9uZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRT
b29uKTogTm90aWZ5IHRlc3QgdHJpZ2dlciB0byBob2xkIHRlc3RzIHVudGlsIHRoZSBjb250ZW50
CisgICAgICAgIHNjcm9sbGluZyBpcyBjb21wbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpOiBOb3RpZnkg
dGVzdCB0cmlnZ2VyIHRoYXQgY29udGVudCBzY3JvbGxpbmcgaXMgZG9uZS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTY3JvbGxB
bmltYXRvclRvVGVzdFRyaWdnZXIpOiBIZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOiBDYWxsICdjb25uZWN0U2Nyb2xsQW5pbWF0b3JU
b1Rlc3RUcmlnZ2VyJyB0byBjb25uZWN0IHRoZSBTY3JvbGxBbmltYXRvcgorICAgICAgICB0byB0
aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHNvIHRoYXQgZnV0dXJlIHNjcm9sbCBvcGVyYXRpb25z
IGNhbiBub3RpZnkgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xs
YmFyKTogTWFrZSBzdXJlIHRoZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZl
IHRlc3QgdHJpZ2dlcnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcik6IEhl
bHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9s
bExlZnQpOiBDYWxsICdjb25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyJyB0byBjb25u
ZWN0IHRoZSBTY3JvbGxBbmltYXRvcgorICAgICAgICB0byB0aGUgV2hlZWxFdmVudFRlc3RUcmln
Z2VyIHNvIHRoYXQgZnV0dXJlIHNjcm9sbCBvcGVyYXRpb25zIGNhbiBub3RpZnkgdGhlIHRlc3Qg
aW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3Jv
bGxUb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNyZWF0ZVNj
cm9sbGJhcik6IERpdHRvLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6IFJlc2V0IGFu
eSB0ZXN0IHJlZmVycmFscyBhbmQgY2xlYW4gdXAgYW55IHRyaWdnZXJzIHByaW9yIHRvCisgICAg
ICAgIHN0YXJ0aW5nIHRoZSBuZXh0IHRlc3QuCisKIDIwMTUtMDQtMjggIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBTaGFyZWRCdWZmZXI6OmNv
cHkgaXMgbm90IGNvbXB1dGluZyB0aGUgYnVmZmVyIHNpemUgY29ycmVjdGx5IHdoZW4gaGF2aW5n
IG1fZGF0YUFycmF5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
ODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1
ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtMTI2NSw3ICsxMjY2LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogICAgICAgICAgICAgICAgICAgICAvLyBT
ZXQgdGhlIGluaXRpYWwgaE1vZGUgdG8gQWx3YXlzT2ZmIGlmIHdlJ3JlIGF1dG8uCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChoTW9kZSA9PSBTY3JvbGxiYXJBdXRvKQogICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQWx3YXlzT2ZmKTsg
Ly8gVGhpcyBjYXVzZXMgYSBob3Jpem9udGFsIHNjcm9sbGJhciB0byBkaXNhcHBlYXIuCi0KKyAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIoZnJhbWUoKS5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigpKTsKICAgICAgICAgICAgICAgICAg
ICAgc2V0U2Nyb2xsYmFyTW9kZXMoaE1vZGUsIHZNb2RlKTsKICAgICAgICAgICAgICAgICAgICAg
c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZQpAQCAtMjA0NCw2ICsyMDQ1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IAogewogICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBjaGFuZ2VJblByb2dyYW1t
YXRpY1Njcm9sbChtX2luUHJvZ3JhbW1hdGljU2Nyb2xsLCB0cnVlKTsKICAgICBtX21haW50YWlu
U2Nyb2xsUG9zaXRpb25BbmNob3IgPSBudWxscHRyOworICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lKCkubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7
CiAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOwogfQogCkBA
IC00NTU2LDYgKzQ1NTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMCiB2b2lkIEZyYW1lVmlldzo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBTY3JvbGxhYmxlQXJl
YTo6ZGlkQWRkU2Nyb2xsYmFyKHNjcm9sbGJhciwgb3JpZW50YXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lKCkubWFpbkZyYW1lKCkudGVz
dFRyaWdnZXIoKSk7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNo
ZSgpKQogICAgICAgICBjYWNoZS0+aGFuZGxlU2Nyb2xsYmFyVXBkYXRlKHRoaXMpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudERlbHRhVHJhY2tlci5oIgotI2luY2x1ZGUgIldoZWVs
RXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDE3ICsxMjYsMTcgQEAgdm9pZCBNYWluRnJhbWU6OnBv
cExhdGNoaW5nU3RhdGUoKQogfQogI2VuZGlmCiAKLVdoZWVsRXZlbnRUZXN0VHJpZ2dlciogTWFp
bkZyYW1lOjp0ZXN0VHJpZ2dlcigpIGNvbnN0CitSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2Vy
PiBNYWluRnJhbWU6OnRlc3RUcmlnZ2VyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXN0VHJp
Z2dlci5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXN0VHJpZ2dlcjsKIH0KIAotV2hlZWxFdmVudFRl
c3RUcmlnZ2VyKiBNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKCkKK1JlZlB0cjxXaGVlbEV2
ZW50VGVzdFRyaWdnZXI+IE1haW5GcmFtZTo6ZW5zdXJlVGVzdFRyaWdnZXIoKQogewogICAgIGlm
ICghbV90ZXN0VHJpZ2dlcikKLSAgICAgICAgbV90ZXN0VHJpZ2dlciA9IHN0ZDo6bWFrZV91bmlx
dWU8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPigpOworICAgICAgICBtX3Rlc3RUcmlnZ2VyID0gYWRv
cHRSZWYobmV3IFdoZWVsRXZlbnRUZXN0VHJpZ2dlcigpKTsKIAotICAgIHJldHVybiBtX3Rlc3RU
cmlnZ2VyLmdldCgpOworICAgIHJldHVybiBtX3Rlc3RUcmlnZ2VyOwogfQogCiB2b2lkIE1haW5G
cmFtZTo6Y2xlYXJUcmlnZ2VyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaAkocmV2aXNp
b24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNYWluRnJhbWVfaAogCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDcgKzM4LDYgQEAgY2xh
c3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKIGNs
YXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyOwotY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBNYWluRnJhbWUgZmlu
YWwgOiBwdWJsaWMgRnJhbWUgewogcHVibGljOgpAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBXaGVlbEV2
ZW50VGVzdFRyaWdnZXIqIGVuc3VyZVRlc3RUcmlnZ2VyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gdGVzdFRyaWdnZXIoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBlbnN1cmVUZXN0VHJp
Z2dlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJUcmlnZ2VyKCk7CiAKIHByaXZh
dGU6CkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKICNlbmRp
ZgogI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gbV90
ZXN0VHJpZ2dlcjsKKyAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3Rlc3RUcmln
Z2VyOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVj
ZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZU92ZXJs
YXlDb250cm9sbGVyPiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHJldmlzaW9uIDE4MzQ5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXaGVlbEV2
ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpCiAgICAgOiBtX3Rlc3RUcmln
Z2VyVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
Ojp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpCi0gICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiB7
CiB9CiAKLVdlYWtQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OmNyZWF0ZVdlYWtQdHIoKQotewotICAgIHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0
ZVdlYWtQdHIoKTsKLX0KLQogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmNsZWFyQWxsVGVz
dERlZmVycmFscygpCiB7CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV90
ZXN0VHJpZ2dlck11dGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRl
c3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50
VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9X
aGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEzIEBA
CiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIgeworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcigpOwpAQCAtNTYsMTUgKzU3LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24pOwogICAgIHZvaWQgdHJpZ2dlclRlc3RU
aW1lckZpcmVkKCk7CiAKLSAgICBXZWFrUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gY3JlYXRl
V2Vha1B0cigpOwotCiBwcml2YXRlOgogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3Rlc3RO
b3RpZmljYXRpb25DYWxsYmFjazsKICAgICBSdW5Mb29wOjpUaW1lcjxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI+IG1fdGVzdFRyaWdnZXJUaW1lcjsKICAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV90ZXN0
VHJpZ2dlck11dGV4OwogICAgIFdURjo6SGFzaE1hcDx2b2lkKiwgc3RkOjpzZXQ8RGVmZXJUZXN0
VHJpZ2dlclJlYXNvbj4+IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnM7Ci0KLSAgICBXZWFrUHRy
RmFjdG9yeTxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fd2Vha1B0ckZhY3Rvcnk7CiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZp
c2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvT2JqY1J1bnRpbWVFeHRyYXMuaD4KQEAgLTg4Miw2ICs4ODMsOSBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlCiAgICAgICAgIH0KICAgICB9CiAgICAgCisg
ICAgaWYgKHNjcm9sbGFibGVBcmVhKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5p
bWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIobV9mcmFtZS5tYWluRnJhbWUoKS50ZXN0
VHJpZ2dlcigpKTsKKwogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUgPSBt
X2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKICAgICBpZiAod2hlZWxFdmVudC5z
aG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250YWlu
ZXIgJiYgc2Nyb2xsYWJsZUFyZWEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZp
c2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTQgQEAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29uc3RyYWludHMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdT
dGF0ZVN0aWNreU5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNs
dWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0yOTMsNiArMjk1LDEzIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRl
U2MKIAogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gKmZyYW1lVmlld1B0cjsKIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIGZyYW1lVmlldy5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcihtX3BhZ2UtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOworICAgIHNj
cm9sbGluZ1RyZWUoKS0+c2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKG1fcGFnZS0+bWFpbkZyYW1l
KCkudGVzdFRyaWdnZXIoKSk7CisgICAgaWYgKGNvbnN0IGF1dG8mIHRyaWdnZXIgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3RE
ZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPihzY3JvbGxpbmdOb2RlSUQpLCBXaGVlbEV2ZW50VGVz
dFRyaWdnZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOworI2VuZGlmCisKICAgICBpZiAo
c2Nyb2xsaW5nTm9kZUlEID09IGZyYW1lVmlldy5zY3JvbGxMYXllcklEKCkpIHsKICAgICAgICAg
Ym9vbCBvbGRQcm9ncmFtbWF0aWNTY3JvbGwgPSBmcmFtZVZpZXcuaW5Qcm9ncmFtbWF0aWNTY3Jv
bGwoKTsKICAgICAgICAgZnJhbWVWaWV3LnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKHByb2dyYW1t
YXRpY1Njcm9sbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiAr
NDMsNyBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZU5v
ZGU7CiBjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBTY3JvbGxpbmdU
cmVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjcm9sbGluZ1RyZWU+IHsKIHB1Ymxp
YzoKQEAgLTEzNSw3ICsxMzYsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9maXhlZE9y
U3RpY2t5Tm9kZUNvdW50KTsKICAgICAgICAgLS1tX2ZpeGVkT3JTdGlja3lOb2RlQ291bnQ7CiAg
ICAgfQotICAgIAorCisgICAgdmlydHVhbCB2b2lkIHNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihS
ZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiYmKSB7IC8qIGRvIG5vdGhpbmcgKi8gfQorICAg
IHZpcnR1YWwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oRmxvYXRQb2ludCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUu
aAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTIgKzMwLDE0IEBACiAKICNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgi
CisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjsKIAogLy8gVGhlIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSBjbGFzcyBsaXZlcyBhbG1v
c3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgYW5kIG1hbmFnZXMgdGhlCiAv
LyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRoZSBwYWdlLiBJdCdzIGFsc28g
cmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpAQCAtNTYsNiArNTgsOSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCisgICAgdm9p
ZCBzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4m
JiB0ZXN0VHJpZ2dlcikgb3ZlcnJpZGUgeyBtX3doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHRlc3RU
cmlnZ2VyOyB9CisgICAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLmdldCgpOyB9CisKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBUaHJlYWRlZFNjcm9sbGluZ1RyZWUoQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvciopOwogCkBAIC02Nyw2ICs3Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzVGhyZWFkZWRTY3JvbGxpbmdUcmVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4g
bV93aGVlbEV2ZW50VGVzdFRyaWdnZXI7CiAgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3I+IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgJKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDggQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiwgU2Nyb2xsRXZlbnRBeGlzKTsKIAorICAgIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
ciogdGVzdFRyaWdnZXIoKSBjb25zdCBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApICYmIFBMQVRGT1JNKE1BQykKICAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhp
cyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4
MzQ5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW1wb3J0ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIldlYkxheWVyLmgiCisjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAogI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUu
aD4KQEAgLTY3LDYgKzY4LDExIEBAIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6
On5TY3IKIHsKIH0KIAorV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlTWFjOjp0ZXN0VHJpZ2dlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9s
bGluZ1RyZWUoKS50ZXN0VHJpZ2dlcigpOworfQorCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIHN0YXRpYyBpbmxpbmUgVmVjdG9yPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVuaXRz
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzQXNGbG9hdCkKIHsKQEAgLTE3Miw2ICsx
NzgsMTUgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogICAgICAg
ICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpO
T107CiAgICAgfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQorICAgIGlmIChhdXRvKiB0cmlnZ2VyID0gdGVzdFRyaWdnZXIoKSkgeworICAg
ICAgICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnNob3VsZEhhbmRsZVdoZWVsRXZlbnRTeW5jaHJvbm91
c2x5KHdoZWVsRXZlbnQpKQorICAgICAgICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFs
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHNjcm9sbGluZ05vZGVJRCgpKSwgV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpTY3JvbGxpbmdUaHJlYWRTeW5jTmVlZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPihzY3JvbGxpbmdOb2RlSUQo
KSksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3luY05lZWRlZCk7Cisg
ICAgfQorI2VuZGlmCisgICAgCiAgICAgbV9zY3JvbGxDb250cm9sbGVyLmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9k
ZSh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLmhh
bmRsZVdoZWVsRXZlbnRQaGFzZSh3aGVlbEV2ZW50LnBoYXNlKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogCkBAIC00OSw2ICs1MCw3IEBAIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNj
cm9sbGJhcjsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjsKIAogI2lmIChFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFURk9STShNQUMp
CiBjbGFzcyBTY3JvbGxBbmltYXRvciA6IHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7
CkBAIC0xMTcsNiArMTE5LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZvaWQgc2V0
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+JiYgdGVz
dFRyaWdnZXIpIHsgbV93aGVlbEV2ZW50VGVzdFRyaWdnZXIgPSB0ZXN0VHJpZ2dlcjsgfQorI2lm
IChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQ
TEFURk9STShNQUMpCisgICAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLmdldCgpOyB9Cisj
ZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMp
CiAgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsK
QEAgLTEyOCw2ICsxMzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKTsKIAogICAgIFNjcm9sbGFibGVB
cmVhJiBtX3Njcm9sbGFibGVBcmVhOworICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+
IG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogI2lmIChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8
fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFURk9STShNQUMpCiAgICAgU2Nyb2xsQ29u
dHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4MzQ5
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOwogCiBjbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKIHBy
b3RlY3RlZDoKQEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgogICAgIC8vIHRoZSBwYWdlIHRvIHNj
cm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOwogCisgICAgdmlydHVh
bCBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRlc3RUcmlnZ2VyKCkgY29uc3QgPSAwOworCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZs
b2F0IGRlbHRhKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbENvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE4MzQ5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRy
aWdnZXIuaCIKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
IApAQCAtNDExLDYgKzQxMiw5IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTbmFwUnVi
YmVyYmEKIHsKICAgICBtX2NsaWVudC5zdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKICAgICBt
X3NuYXBSdWJiZXJiYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAuMCk7CisKKyAgICBp
ZiAoYXV0byogdHJpZ2dlciA9IG1fY2xpZW50LnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdn
ZXItPmRlZmVyVGVzdHNGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6UnViYmVyYmFuZEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKQEAgLTQxOCw2ICs0MjIsOSBAQCB2b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnN0b3BTbmFwUnViYmVyYmFuCiAgICAgbV9jbGllbnQuc3RvcFNuYXBSdWJi
ZXJiYW5kVGltZXIoKTsKICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIuc3RvcCgpOwogICAgIG1f
c25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0gZmFsc2U7CisgICAgCisgICAgaWYgKGF1dG8q
IHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dlcigpKQorICAgICAgICB0cmlnZ2VyLT5yZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6UnViYmVyYmFuZEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNuYXBSdWJiZXJCYW5kKCkKQEAgLTYxMyw2ICs2MjAsMTIgQEAgdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzdGFydFNjcm9sbFNuYXBUaQogICAgICAgICBtX2NsaWVudC5zdGFydFNjcm9sbFNuYXBU
aW1lcihheGlzKTsKICAgICAgICAgc2Nyb2xsU25hcFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMCAv
IDYwLjApOwogICAgIH0KKworICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmlz
QWN0aXZlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dl
cigpKQorICAgICAgICB0cmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nh
c3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMp
LCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbFNuYXBJblByb2dyZXNzKTsKIH0KIAogdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQpAQCAtNjIwLDYgKzYzMywxMiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BTY3Jv
bGxTbmFwVGltCiAgICAgbV9jbGllbnQuc3RvcFNjcm9sbFNuYXBUaW1lcihheGlzKTsKICAgICBS
dW5Mb29wOjpUaW1lcjxTY3JvbGxDb250cm9sbGVyPiYgc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9
PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGlt
ZXIgOiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOwogICAgIHNjcm9sbFNuYXBUaW1lci5zdG9w
KCk7CisgICAgCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2ZSgp
IHx8IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSBtX2NsaWVudC50ZXN0VHJpZ2dlcigpKQorICAg
ICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2Fz
dDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyks
IFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsU25hcEluUHJvZ3Jlc3MpOwogfQogCiB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
CShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNDksNiArMTM0OSw5IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIAogICAgIGlmICghbV9zZW5kQ29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBpZiAobV93aGVlbEV2ZW50
VGVzdFRyaWdnZXIpCisgICAgICAgIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLT5kZWZlclRlc3Rz
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkNvbnRlbnRT
Y3JvbGxJblByb2dyZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRl
bnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKQEAgLTEzNjMsNiArMTM2Niw5
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIHsKICAgICBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRh
KTsKICAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gRmxvYXRTaXpl
KCk7CisKKyAgICBpZiAobV93aGVlbEV2ZW50VGVzdFRyaWdnZXIpCisgICAgICAgIG1fd2hlZWxF
dmVudFRlc3RUcmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRf
Y2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhp
cyksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwogfQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29u
c3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAg
KiAgICAgICAgICAgKEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKQEAgLTU5LDYg
KzYwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3Rh
dGUuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtNTkzLDE2ICs1OTUsMjggQEAgaW50
IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgPyBsYXllcigpLT5zY3JvbGxZT2Zmc2V0KCkgOiAwOwogfQogCitzdGF0aWMgdm9pZCBjb25u
ZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyKFJlbmRlckxheWVyKiBsYXllciwgRnJhbWUq
IGZyYW1lKQoreworICAgIGlmICghbGF5ZXIgfHwgIWZyYW1lKQorICAgICAgICByZXR1cm47CisK
KyAgICBsYXllci0+c2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoZnJh
bWUtPm1haW5GcmFtZSgpLnRlc3RUcmlnZ2VyKCkpOworfQorCiB2b2lkIFJlbmRlckJveDo6c2V0
U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCisg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgIGNvbm5lY3RTY3JvbGxBbmltYXRv
clRvVGVzdFRyaWdnZXIobGF5ZXIoKSwgZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICAgICAgbGF5
ZXIoKS0+c2Nyb2xsVG9YT2Zmc2V0KG5ld0xlZnQsIFJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRD
bGFtcGVkKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCkKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpKSB7CisgICAgICAgIGNvbm5lY3RTY3JvbGxBbmltYXRvclRvVGVzdFRyaWdnZXIobGF5
ZXIoKSwgZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZT2Zm
c2V0KG5ld1RvcCwgUmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQpOworICAgIH0KIH0K
IAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxODM0OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1
ZGUgIk92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEx
OSw2ICsxMjAsNyBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTMwNzUsNiArMzA3Nyw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJM
YXllcjo6Y3JlYXQKICAgICBlbHNlIHsKICAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsK
ICAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOworICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihyZW5kZXJlcigp
LmZyYW1lKCkubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7CiAgICAgfQogICAgIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CiAgICAgcmV0dXJu
IHdpZGdldC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNp
bmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgi
CiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhaW50SW5mby5oIgpAQCAtNTMsMTEgKzU0LDEzIEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgor
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1
ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRl
IDx3dGYvU3RhY2tTdGF0cy5oPgogCkBAIC02NjEsMTMgKzY2NCwyMSBAQCBpbnQgUmVuZGVyTGlz
dEJveDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICByZXR1cm4gbV9pbmRleE9mZnNldCAqIGl0ZW1I
ZWlnaHQoKTsKIH0KIAorc3RhdGljIHZvaWQgY29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJp
Z2dlcihSZW5kZXJMaXN0Qm94JiByZW5kZXJlciwgRnJhbWUqIGZyYW1lKQoreworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLnNjcm9sbEFuaW1hdG9yKCku
c2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKGZyYW1lLT5tYWluRnJhbWUoKS50ZXN0VHJpZ2dlcigp
KTsKK30KKwogdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKIHsK
ICAgICAvLyBEZXRlcm1pbmUgYW4gaW5kZXggYW5kIHNjcm9sbCB0byBpdC4gICAgCiAgICAgaW50
IGluZGV4ID0gbmV3VG9wIC8gaXRlbUhlaWdodCgpOwogICAgIGlmIChpbmRleCA8IDAgfHwgaW5k
ZXggPj0gbnVtSXRlbXMoKSB8fCBpbmRleCA9PSBtX2luZGV4T2Zmc2V0KQogICAgICAgICByZXR1
cm47Ci0gICAgCisgICAgY29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcigqdGhpcywg
ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
VmVydGljYWxTY3JvbGxiYXIsIGluZGV4KTsKIH0KIApAQCAtODA2LDYgKzgxNyw3IEBAIFBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMaXN0Qm94OjpjcmUKICAgICBlbHNlIHsKICAgICAgICAg
d2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIFZlcnRpY2Fs
U2Nyb2xsYmFyLCB0aGVtZSgpLnNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChMaXN0Ym94UGFy
dCkpOwogICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBWZXJ0aWNhbFNjcm9s
bGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2Vy
KGZyYW1lKCkubWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7CiAgICAgfQogICAgIHZpZXcoKS5m
cmFtZVZpZXcoKS5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwogICAgIHJldHVybiB3aWRnZXQucmVs
ZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBv
cnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRl
c3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMTgzNDkzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIHZvaWQgbW9uaXRvcldoZWVsRXZlbnRzKFdlYkNvcmU6OkZyYW1lJiAKIAogdm9pZCBzZXRU
ZXN0Q2FsbGJhY2tBbmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGpzQ2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRyaWdnZXIgPSBmcmFtZS5tYWluRnJhbWUo
KS5lbnN1cmVUZXN0VHJpZ2dlcigpOworICAgIGF1dG8gdHJpZ2dlciA9IGZyYW1lLm1haW5GcmFt
ZSgpLmVuc3VyZVRlc3RUcmlnZ2VyKCk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwganND
YWxsYmFja0Z1bmN0aW9uKTsKICAgICAKICAgICB0cmlnZ2VyLT5zZXRUZXN0Q2FsbGJhY2tBbmRT
dGFydE5vdGlmaWNhdGlvblRpbWVyKFs9XSh2b2lkKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODM0OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxNS0wNC0yNCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KKworICAgICAgICBFeHBhbmQgdGVzdCBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHNj
cm9sbGluZyB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzNjg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMDM3NTUxNj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFn
ZVJlZ2lzdGVyU2Nyb2xsT3BlcmF0aW9uQ29tcGxldGlvbkNhbGxiYWNrKTogVXNlICdhdXRvJyBz
eW50YXguCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKTogTWFrZSBzdXJlIHNj
cm9sbCBhbmltYXRvciBrbm93cyBhYm91dCBhbnkKKyAgICAgICAgYWN0aXZlIHRlc3QgdHJpZ2dl
cnMuCisKIDIwMTUtMDQtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV0syXVtNYWNdIFVwZGF0ZSBXZWJDb250ZW50IHByb2Nlc3MnIHNhbmRib3ggcHJvZmls
ZSBmb3IgQVdECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAx
ODM0OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lk
IFdLQnVuZGxlUGFnZVJlZ2lzdGVyU2Nyb2xsT3BlcmF0aW9uCiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0
cmlnZ2VyID0gcGFnZS0+bWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKKyAgICBhdXRv
IHRyaWdnZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5lbnN1cmVUZXN0VHJpZ2dlcigpOwogICAgIHRy
aWdnZXItPnNldFRlc3RDYWxsYmFja0FuZFN0YXJ0Tm90aWZpY2F0aW9uVGltZXIoWz1dKCkgewog
ICAgICAgICBjYWxsYmFjayhjb250ZXh0KTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCShyZXZpc2lvbiAx
ODM0OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDE4IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxGb3JtRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Njcm9sbEFuaW1hdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VVSUQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmg+CiAjaW1wb3J0IDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC02
NjAsNiArNjYzLDggQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRlUwog
ICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX3ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXIuZ2V0KCldOwogICAgIH0KICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBv
cmllbnRhdGlvbik7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdlYkZyYW1lKCktPmNvcmVGcmFt
ZSgpKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihm
cmFtZS0+bWFpbkZyYW1lKCkudGVzdFRyaWdnZXIoKSk7CiAgICAgcGx1Z2luVmlldygpLT5mcmFt
ZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CiAgICAgcmV0dXJuIHdpZGdldC5y
ZWxlYXNlKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251995</attachid>
            <date>2015-04-29 15:38:56 -0700</date>
            <delta_ts>2015-04-29 16:01:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143684-20150429153746.patch</filename>
            <type>text/plain</type>
            <size>45152</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE1LTA0LTI5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4cGFuZCB0ZXN0IGluZnJh
c3RydWN0dXJlIHRvIHN1cHBvcnQgc2Nyb2xsaW5nIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIwMzc1NTE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSB2YXJpb3VzIGZhc3Qvc2Nyb2xsaW5nIGFuZCBwbGF0Zm9ybS9tYWMt
d2syL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nIHRlc3RzLgorCisgICAgICAgIFRoaXMgc2VyaWVz
IG9mIGNoYW5nZXMgYWRkcyBhIG5ldyBzaW5nbGV0b24gY2xhc3MsICdXaGVlbEV2ZW50VGVzdFRy
aWdnZXInLCB3aGljaCBlbmNhcHN1bGF0ZXMgYQorICAgICAgICBmdW5jdGlvbiBvYmplY3QgdG8g
YmUgZmlyZWQgd2hlbiBzY3JvbGwgZXZlbnRzIGFyZSBmaW5pc2hlZC4gVGhlIG9iamVjdCBhbHNv
IGtlZXBzIHRyYWNrIG9mIHJlYXNvbnMKKyAgICAgICAgd2h5IHRoZSB0ZXN0IHNob3VsZCBub3Qg
eWV0IGZpcmUgKGUuZy4sICdydWJiZXJiYW5kaW5nJyBpcyBhY3RpdmUpIHNvIHRoYXQgdGVzdHMg
ZG8gbm90IGluY29ycmVjdGx5CisgICAgICAgIGNoZWNrIHJlbmRlcmluZyBzdGF0ZSBpbiB0aGUg
bWlkZGxlIG9mIGFuIGFuaW1hdGlvbi4KKworICAgICAgICBTd2l0Y2ggZnJvbSB0aGUgb3JpZ2lu
YWwgV2Vha1B0ciBkZXNpZ24gdG8gVGhyZWFkU2FmZVJlZlB0ciwgYmVjYXVzZSBXZWFrUHRyIGNh
bm5vdCBiZSBzaGFyZWQKKyAgICAgICAgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Omxh
eW91dCk6IE1ha2Ugc3VyZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZlIHRl
c3QgdHJpZ2dlci4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZGlkQWRkU2Nyb2xsYmFy
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWFpbkZyYW1lOjp0ZXN0VHJpZ2dlcik6IE1vdmVkIHRvIFBhZ2UuCisgICAgICAgIChXZWJD
b3JlOjpNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9NYWluRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6dGVzdFRyaWdnZXIpOiBNb3ZlZCBmcm9tIE1haW5GcmFtZSwgYW5kIGNvbnZlcnRl
ZCB0byB1c2UgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZW5zdXJlVGVzdFRyaWdn
ZXIpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1doZWVs
RXZlbnRUZXN0VHJpZ2dlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OldoZWVsRXZlbnRUZXN0VHJpZ2dlcik6IFJlbW92ZSBXZWFrUHRyIGNvZGUuCisgICAg
ICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmNyZWF0ZVdlYWtQdHIpOiBEZWxl
dGVkLgorICAgICAgICAqIHBhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICog
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyk6IE1ha2Ugc3VyZSB0aGUgc2Nyb2xs
IGFuaW1hdG9yIGtub3dzIGFib3V0CisgICAgICAgIGFueSBhY3RpdmUgdGVzdCB0cmlnZ2VyIG9i
amVjdC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0
ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbCk6IE5vdGlmeSBXaGVlbEV2ZW50VGVzdFRy
aWdnZXIKKyAgICAgICAgdGhhdCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBpcyBzeW5jZWQgd2l0aCB0
aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogSG9s
ZCBhIFJlZlB0ciB0byB0aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyLiAKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6c2V0V2hlZWxFdmVudFRlc3RUcmln
Z2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcik6IE5vdGlmeSB0
ZXN0IHRyaWdnZXIgdG8gaG9sZCB0ZXN0cyB1bnRpbCBydWJiZXIgYmFuZAorICAgICAgICBzbmFw
cGluZyBpcyBjb21wbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0
b3BTbmFwUnViYmVyYmFuZFRpbWVyKTogTm90aWZ5IHRlc3QgdHJpZ2dlciB0aGF0IHJ1YmJlciBi
YW5kIHNuYXBwaW5nIGlzIGRvbmUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVy
OjpzdGFydFNjcm9sbFNuYXBUaW1lcik6IE5vdGlmeSB0ZXN0IHRyaWdnZXIgdG8gaG9sZCB0ZXN0
cyB1bnRpbCBzY3JvbGwgc25hcHBpbmcKKyAgICAgICAgaXMgY29tcGxldGUuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcFRpbWVyKTogTm90aWZ5IHRl
c3QgdHJpZ2dlciB0aGF0IHNjcm9sbCBzbmFwcGluZyBpcyBkb25lLgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUpOiBOb3RpZnkgdGVzdCB0cmlnZ2VyIHRo
YXQgYSBjb250ZW50IHNjcm9sbCBpcyBpbiBwcm9ncmVzcy4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKTogTm90aWZ5IHRlc3QgdHJpZ2dl
ciB0aGF0IGEgY29udGVudCBzY3JvbGwgaXMgZmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKTogTm90aWZ5IHRl
c3QgdHJpZ2dlciB0byBob2xkIHRlc3RzIHVudGlsIHRoZSBjb250ZW50CisgICAgICAgIHNjcm9s
bGluZyBpcyBjb21wbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpOiBOb3RpZnkgdGVzdCB0cmlnZ2VyIHRo
YXQgY29udGVudCBzY3JvbGxpbmcgaXMgZG9uZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTY3JvbGxBbmltYXRvclRvVGVzdFRy
aWdnZXIpOiBIZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNl
dFNjcm9sbExlZnQpOiBDYWxsICdjb25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyJyB0
byBjb25uZWN0IHRoZSBTY3JvbGxBbmltYXRvcgorICAgICAgICB0byB0aGUgV2hlZWxFdmVudFRl
c3RUcmlnZ2VyIHNvIHRoYXQgZnV0dXJlIHNjcm9sbCBvcGVyYXRpb25zIGNhbiBub3RpZnkgdGhl
IHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFRvcCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKTogTWFrZSBzdXJl
IHRoZSBTY3JvbGxBbmltYXRvciBrbm93cyBhYm91dCBhbnkgYWN0aXZlIHRlc3QgdHJpZ2dlcnMu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcik6IEhlbHBlciBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbExlZnQpOiBDYWxsICdj
b25uZWN0U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyJyB0byBjb25uZWN0IHRoZSBTY3JvbGxB
bmltYXRvcgorICAgICAgICB0byB0aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHNvIHRoYXQgZnV0
dXJlIHNjcm9sbCBvcGVyYXRpb25zIGNhbiBub3RpZnkgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3ApOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNyZWF0ZVNjcm9sbGJhcik6IERpdHRv
LgorICAgICAgICAqIHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmVUZXN0U3VwcG9ydDo6bW9uaXRvcldoZWVsRXZlbnRzKTogTG9vayBmb3IgV2hlZWxF
dmVudFRlc3RUcmlnZ2VyIGluIFBhZ2UsIHJhdGhlciB0aGFuIE1haW5GcmFtZS4KKyAgICAgICAg
KFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25U
aW1lcik6IERpdHRvLgorCiAyMDE1LTA0LTI5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBzaG91bGQgYmUgZW51bSBjbGFz
cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTgzNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2
ICs4Nyw3IEBACiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKKyNpbmNsdWRlICJXaGVlbEV2
ZW50VGVzdFRyaWdnZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KQEAgLTEyNjUsNyArMTI2Niw5IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlv
dXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBpbml0
aWFsIGhNb2RlIHRvIEFsd2F5c09mZiBpZiB3ZSdyZSBhdXRvLgogICAgICAgICAgICAgICAgICAg
ICBpZiAoaE1vZGUgPT0gU2Nyb2xsYmFyQXV0bykKICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEhvcml6b250YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckFsd2F5c09mZik7IC8vIFRoaXMgY2F1
c2VzIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgdG8gZGlzYXBwZWFyLgotCisgICAgICAgICAgICAg
ICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBhZ2UgJiYgcGFnZS0+aXNVbmRlclRlc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2UtPnRlc3RUcmln
Z2VyKCkpOwogICAgICAgICAgICAgICAgICAgICBzZXRTY3JvbGxiYXJNb2RlcyhoTW9kZSwgdk1v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBzZXRTY3JvbGxiYXJzU3VwcHJlc3NlZChmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC0yMDQ5LDYgKzIwNTIsOSBAQCB2b2lk
IEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgCiB7CiAgICAgVGVtcG9yYXJ5Q2hh
bmdlPGJvb2w+IGNoYW5nZUluUHJvZ3JhbW1hdGljU2Nyb2xsKG1faW5Qcm9ncmFtbWF0aWNTY3Jv
bGwsIHRydWUpOwogICAgIG1fbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hvciA9IG51bGxwdHI7
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2Ut
PmlzVW5kZXJUZXN0KCkpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRl
c3RUcmlnZ2VyKHBhZ2UtPnRlc3RUcmlnZ2VyKCkpOwogICAgIFNjcm9sbFZpZXc6OnNldFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvaW50KTsKIH0KIApAQCAtNDU2MSw2ICs0NTY3LDkgQEAgdm9pZCBG
cmFtZVZpZXc6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTAogdm9pZCBGcmFtZVZpZXc6OmRpZEFk
ZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCiB7CiAgICAgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihzY3JvbGxi
YXIsIG9yaWVudGF0aW9uKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CisgICAg
aWYgKHBhZ2UgJiYgcGFnZS0+aXNVbmRlclRlc3QoKSkKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVzdFRyaWdnZXIoKSk7CiAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQogICAgICAgICBjYWNoZS0+
aGFuZGxlU2Nyb2xsYmFyVXBkYXRlKHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9NYWluRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZy
YW1lLmNwcAkocmV2aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiU2Nyb2xs
TGF0Y2hpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2hlZWxF
dmVudERlbHRhVHJhY2tlci5oIgotI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
MTI3LDIyICsxMjYsNCBAQCB2b2lkIE1haW5GcmFtZTo6cG9wTGF0Y2hpbmdTdGF0ZSgpCiB9CiAj
ZW5kaWYKIAotV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiBNYWluRnJhbWU6OnRlc3RUcmlnZ2VyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXN0VHJpZ2dlci5nZXQoKTsKLX0KLQotV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyKiBNYWluRnJhbWU6OmVuc3VyZVRlc3RUcmlnZ2VyKCkKLXsKLSAgICBpZiAo
IW1fdGVzdFRyaWdnZXIpCi0gICAgICAgIG1fdGVzdFRyaWdnZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4oKTsKLQotICAgIHJldHVybiBtX3Rlc3RUcmlnZ2VyLmdl
dCgpOwotfQotCi12b2lkIE1haW5GcmFtZTo6Y2xlYXJUcmlnZ2VyKCkKLXsKLSAgICBtX3Rlc3RU
cmlnZ2VyID0gbnVsbHB0cjsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9NYWlu
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCShy
ZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBAIGNsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlcjsK
IGNsYXNzIFNjcm9sbExhdGNoaW5nU3RhdGU7CiBjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOwogY2xhc3MgV2hlZWxFdmVudERlbHRhVHJhY2tlcjsKLWNsYXNzIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjsKIAogY2xhc3MgTWFpbkZyYW1lIGZpbmFsIDogcHVibGljIEZyYW1lIHsKIHB1Ymxp
YzoKQEAgLTY0LDEwICs2Myw2IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgV2hlZWxFdmVudFRlc3RUcmlnZ2VyKiB0ZXN0VHJpZ2dlcigpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFdoZWVsRXZlbnRUZXN0VHJpZ2dlciogZW5zdXJlVGVz
dFRyaWdnZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyVHJpZ2dlcigpOwotCiBw
cml2YXRlOgogICAgIE1haW5GcmFtZShQYWdlJiwgUGFnZUNvbmZpZ3VyYXRpb24mKTsKIApAQCAt
ODEsNyArNzYsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKICNlbmRp
ZgotICAgIHN0ZDo6dW5pcXVlX3B0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdn
ZXI7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2hlZWxFdmVudERlbHRhVHJhY2tlcj4gbV9yZWNl
bnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI+IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMjE0LDYgKzIxNCw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNvbmZpZ3VyYXRp
b24mIHBhZ2VDb25maWcKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VD
b25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKKyAgICAs
IG1faXNVbmRlclRlc3QoZmFsc2UpCiB7CiAgICAgc2V0VGltZXJUaHJvdHRsaW5nRW5hYmxlZCht
X3ZpZXdTdGF0ZSAmIFZpZXdTdGF0ZTo6SXNWaXN1YWxseUlkbGUpOwogCkBAIC0xNzI0LDQgKzE3
MjUsMjMgQEAgdm9pZCBQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldAogfQogI2Vu
ZGlmCiAKK1JlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IFBhZ2U6OnRlc3RUcmlnZ2VyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXN0VHJpZ2dlcjsKK30KKworV2hlZWxFdmVudFRlc3RU
cmlnZ2VyJiBQYWdlOjplbnN1cmVUZXN0VHJpZ2dlcigpCit7CisgICAgaWYgKCFtX3Rlc3RUcmln
Z2VyKQorICAgICAgICBtX3Rlc3RUcmlnZ2VyID0gYWRvcHRSZWYobmV3IFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcigpKTsKKyAgICAKKyAgICByZXR1cm4gKm1fdGVzdFRyaWdnZXI7Cit9CisKK3ZvaWQg
UGFnZTo6Y2xlYXJUcmlnZ2VyKCkKK3sKKyAgICBtX3Rlc3RUcmlnZ2VyID0gbnVsbHB0cjsKK30K
KyAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlz
aW9uIDE4MzU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAxMCwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKICNpbmNsdWRlICJW
aWV3U3RhdGUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldo
ZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00MzksNiArNDQwLDEyIEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHVpbnQ2NF90LCBib29sKTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gdGVzdFRyaWdnZXIoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBXaGVlbEV2ZW50VGVzdFRyaWdnZXImIGVuc3VyZVRlc3RUcmlnZ2VyKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclRyaWdnZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQorICAg
IHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0g
aXNVbmRlclRlc3Q7IH0KKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluaXRH
cm91cCgpOwogCkBAIC01ODYsMTIgKzU5MywxNCBAQCBwcml2YXRlOgogICAgIFJlZjxTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI+IG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwogICAgIFJlZlB0
cjxVc2VyQ29udGVudENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwogICAgIFJl
ZjxWaXNpdGVkTGlua1N0b3JlPiBtX3Zpc2l0ZWRMaW5rU3RvcmU7CisgICAgUmVmUHRyPFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcj4gbV90ZXN0VHJpZ2dlcjsKIAogICAgIEhhc2hTZXQ8Vmlld1N0YXRl
Q2hhbmdlT2JzZXJ2ZXIqPiBtX3ZpZXdTdGF0ZUNoYW5nZU9ic2VydmVyczsKIAogICAgIFNlc3Np
b25JRCBtX3Nlc3Npb25JRDsKIAogICAgIGJvb2wgbV9pc0Nsb3Npbmc7CisgICAgYm9vbCBtX2lz
VW5kZXJUZXN0OwogCiAgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1fbWVkaWFT
dGF0ZSB7IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9OwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHJldmlzaW9uIDE4MzU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpCiAgICAgOiBtX3Rlc3RU
cmlnZ2VyVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpCi0gICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMp
CiB7CiB9CiAKLVdlYWtQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OmNyZWF0ZVdlYWtQdHIoKQotewotICAgIHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNy
ZWF0ZVdlYWtQdHIoKTsKLX0KLQogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmNsZWFyQWxs
VGVzdERlZmVycmFscygpCiB7CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV90ZXN0VHJpZ2dlck11dGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2
ZW50VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEz
IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXaGVlbEV2ZW50VGVzdFRy
aWdnZXIgeworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcigpOwpAQCAtNTEsMjAgKzUyLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgU2Nyb2xsaW5nVGhyZWFkU3luY05lZWRlZCwKICAgICAgICAgQ29udGVu
dFNjcm9sbEluUHJvZ3Jlc3MKICAgICB9OwotICAgIHR5cGVkZWYgdm9pZCogU2Nyb2xsYWJsZUFy
ZWFJZGVudGlmaWVyOwotICAgIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24pOwotICAgIHZvaWQgcmVtb3ZlVGVz
dERlZmVycmFsRm9yUmVhc29uKFNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgRGVmZXJUZXN0VHJp
Z2dlclJlYXNvbik7CisgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXI7CisgICAgdm9pZCBXRUJDT1JFX0VYUE9SVCBkZWZlclRlc3RzRm9yUmVhc29uKFNjcm9s
bGFibGVBcmVhSWRlbnRpZmllciwgRGVmZXJUZXN0VHJpZ2dlclJlYXNvbik7CisgICAgdm9pZCBX
RUJDT1JFX0VYUE9SVCByZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oU2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyLCBEZWZlclRlc3RUcmlnZ2VyUmVhc29uKTsKICAgICB2b2lkIHRyaWdnZXJUZXN0
VGltZXJGaXJlZCgpOwogCi0gICAgV2Vha1B0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IGNyZWF0
ZVdlYWtQdHIoKTsKLQogcHJpdmF0ZToKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV90ZXN0
Tm90aWZpY2F0aW9uQ2FsbGJhY2s7CiAgICAgUnVuTG9vcDo6VGltZXI8V2hlZWxFdmVudFRlc3RU
cmlnZ2VyPiBtX3Rlc3RUcmlnZ2VyVGltZXI7CiAgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fdGVz
dFRyaWdnZXJNdXRleDsKLSAgICBXVEY6Okhhc2hNYXA8dm9pZCosIHN0ZDo6c2V0PERlZmVyVGVz
dFRyaWdnZXJSZWFzb24+PiBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zOwotCi0gICAgV2Vha1B0
ckZhY3Rvcnk8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIFdU
Rjo6SGFzaE1hcDxTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIHN0ZDo6c2V0PERlZmVyVGVzdFRy
aWdnZXJSZWFzb24+PiBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMTgz
NTY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgor
I2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL09i
amNSdW50aW1lRXh0cmFzLmg+CkBAIC04ODIsNiArODgzLDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpwbGF0Zm9ybVByZXBhcmVGb3JXaGUKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHBhZ2Ug
JiYgcGFnZS0+aXNVbmRlclRlc3QoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2UtPnRlc3RUcmlnZ2VyKCkpOwor
CiAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUubWFpbkZy
YW1lKCkubGF0Y2hpbmdTdGF0ZSgpOwogICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVy
TGF0Y2hpbmcoKSkgewogICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciAmJiBzY3JvbGxh
YmxlQXJlYSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MzU2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCwxNCBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJhaW50cy5o
IgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9k
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1ZGUgIldoZWVsRXZl
bnRUZXN0VHJpZ2dlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1NCw2ICszNTYs
MTQgQEAgdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVTYwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgaWYgKG1fcGFn
ZS0+aXNVbmRlclRlc3QoKSkgeworICAgICAgICAgICAgZnJhbWVWaWV3LnNjcm9sbEFuaW1hdG9y
KCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKG1fcGFnZS0+dGVzdFRyaWdnZXIoKSk7CisgICAg
ICAgICAgICBpZiAoY29uc3QgYXV0byYgdHJpZ2dlciA9IG1fcGFnZS0+dGVzdFRyaWdnZXIoKSkK
KyAgICAgICAgICAgICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVp
bnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRp
Zmllcj4obV9wYWdlKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxpbmdUaHJlYWRTeW5j
TmVlZGVkKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zNjQsNiArMzc0LDE0IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6dXBkYXRlU2MKICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldElzVXNlclNjcm9sbChmYWxz
ZSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uID09IFNldFNjcm9s
bGluZ0xheWVyUG9zaXRpb24pCiAgICAgICAgICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLm92
ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAgICAgaWYgKG1fcGFnZS0+aXNVbmRlclRlc3QoKSkgeworICAgICAgICAgICAgZnJhbWVWaWV3
LnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKG1fcGFnZS0+dGVzdFRy
aWdnZXIoKSk7CisgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgdHJpZ2dlciA9IG1fcGFnZS0+
dGVzdFRyaWdnZXIoKSkKKyAgICAgICAgICAgICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJy
YWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9s
bGFibGVBcmVhSWRlbnRpZmllcj4obV9wYWdlKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3Jv
bGxpbmdUaHJlYWRTeW5jTmVlZGVkKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4
MzU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNp
bmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTQ5LDYgKzUwLDcgQEAgY2xhc3Mg
RmxvYXRQb2ludDsKIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVB
cmVhOwogY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOwogCiAj
aWYgKEVOQUJMRShDU1NfU0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykpICYm
IFBMQVRGT1JNKE1BQykKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIDogcHJpdmF0ZSBTY3JvbGxDb250
cm9sbGVyQ2xpZW50IHsKQEAgLTExNyw2ICsxMTksMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIoUmVmUHRyPFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcj4mJiB0ZXN0VHJpZ2dlcikgeyBtX3doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHRlc3RU
cmlnZ2VyOyB9CisjaWYgKEVOQUJMRShDU1NfU0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJCRVJf
QkFORElORykpICYmIFBMQVRGT1JNKE1BQykKKyAgICBXaGVlbEV2ZW50VGVzdFRyaWdnZXIqIHRl
c3RUcmlnZ2VyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV93aGVlbEV2ZW50VGVzdFRyaWdn
ZXIuZ2V0KCk7IH0KKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYm
IFBMQVRGT1JNKE1BQykKICAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEFuaW1hdG9y
c0FuZFRpbWVycygpOwpAQCAtMTI4LDYgKzEzNSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpOwogCiAg
ICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgUmVmUHRyPFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcj4gbV93aGVlbEV2ZW50VGVzdFRyaWdnZXI7CiAjaWYgKEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykpICYmIFBMQVRGT1JNKE1BQykK
ICAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsYWJsZUFy
ZWE7CitjbGFzcyBXaGVlbEV2ZW50VGVzdFRyaWdnZXI7CiAKIGNsYXNzIFNjcm9sbENvbnRyb2xs
ZXJDbGllbnQgewogcHJvdGVjdGVkOgpAQCAtNzUsNiArNzYsOCBAQCBwdWJsaWM6CiAgICAgLy8g
dGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFyZXN0IGJvdW5kYXJ5IHBvaW50LgogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7
CiAKKyAgICB2aXJ0dWFsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlciogdGVzdFRyaWdnZXIoKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQ
TEFURk9STShNQUMpCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpID0gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkocmV2
aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29u
dHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogI2luY2x1ZGUgPHN5cy9zeXNj
dGwuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCkBAIC00MTEsNiArNDEyLDkgQEAgdm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzdGFydFNuYXBSdWJiZXJiYQogewogICAgIG1fY2xpZW50LnN0YXJ0
U25hcFJ1YmJlcmJhbmRUaW1lcigpOwogICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lci5zdGFydFJl
cGVhdGluZygxLjAgLyA2MC4wKTsKKworICAgIGlmIChhdXRvKiB0cmlnZ2VyID0gbV9jbGllbnQu
dGVzdFRyaWdnZXIoKSkKKyAgICAgICAgdHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihyZWlu
dGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlm
aWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7
CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQpA
QCAtNDE4LDYgKzQyMiw5IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJi
YW4KICAgICBtX2NsaWVudC5zdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOwogICAgIG1fc25hcFJ1
YmJlcmJhbmRUaW1lci5zdG9wKCk7CiAgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUg
PSBmYWxzZTsKKyAgICAKKyAgICBpZiAoYXV0byogdHJpZ2dlciA9IG1fY2xpZW50LnRlc3RUcmln
Z2VyKCkpCisgICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihyZWlu
dGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlm
aWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7
CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQpAQCAtNjEzLDYg
KzYyMCwxMiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcFRpCiAgICAg
ICAgIG1fY2xpZW50LnN0YXJ0U2Nyb2xsU25hcFRpbWVyKGF4aXMpOwogICAgICAgICBzY3JvbGxT
bmFwVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAuMCk7CiAgICAgfQorCisgICAgaWYgKCFt
X2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSAmJiAhbV92ZXJ0aWNhbFNjcm9s
bFNuYXBUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byog
dHJpZ2dlciA9IG1fY2xpZW50LnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdnZXItPmRlZmVy
VGVzdHNGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNj
cm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsU25hcEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BTY3Jv
bGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCkBAIC02MjAsNiArNjMzLDEyIEBAIHZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBUaW0KICAgICBtX2NsaWVudC5zdG9w
U2Nyb2xsU25hcFRpbWVyKGF4aXMpOwogICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9sbENvbnRyb2xs
ZXI+JiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA6IG1fdmVydGljYWxTY3JvbGxTbmFwVGlt
ZXI7CiAgICAgc2Nyb2xsU25hcFRpbWVyLnN0b3AoKTsKKyAgICAKKyAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsU25hcFRpbWVyLmlzQWN0aXZlKCkgfHwgbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdHJpZ2dlciA9
IG1fY2xpZW50LnRlc3RUcmlnZ2VyKCkpCisgICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3REZWZl
cnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3Jv
bGxTbmFwSW5Qcm9ncmVzcyk7CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6aG9yaXpvbnRh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtODg5LDYgKzg4OSwxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNj
cm9sbEdlCiAgICAgICAgIHJldHVybjsKIAogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8
fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKGF1dG8qIHRyaWdnZXIgPSB0ZXN0VHJp
Z2dlcigpKQorICAgICAgICB0cmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0
X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRo
aXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKKyNl
bmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkg
Y29uc3QKQEAgLTg5Nyw2ICs5MDIsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5k
U2Nyb2xsR2VzdAogICAgICAgICByZXR1cm47CiAKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlciBlbmRTY3JvbGxHZXN0dXJlXTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
IHx8IEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoYXV0byogdHJpZ2dlciA9IHRlc3RU
cmlnZ2VyKCkpCisgICAgICAgIHRyaWdnZXItPnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihy
ZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVu
dGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpDb250ZW50U2Nyb2xsSW5Qcm9n
cmVzcyk7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3Jv
bGxHZXN0dXJlKCkgY29uc3QKQEAgLTEzNDksNiArMTM1OSw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIAogICAgIGlmICghbV9zZW5kQ29udGVudEFyZWFTY3Jv
bGxlZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRU
aW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBpZiAobV93aGVlbEV2ZW50VGVzdFRyaWdnZXIp
CisgICAgICAgIG1fd2hlZWxFdmVudFRlc3RUcmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29uKHJl
aW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkNvbnRlbnRTY3JvbGxJblByb2dy
ZXNzKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKQEAgLTEzNjMsNiArMTM3Niw5IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIHsKICAgICBzZW5kQ29udGVudEFyZWFT
Y3JvbGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhKTsKICAgICBtX2Nv
bnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisKKyAgICBp
ZiAobV93aGVlbEV2ZW50VGVzdFRyaWdnZXIpCisgICAgICAgIG1fd2hlZWxFdmVudFRlc3RUcmln
Z2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2
ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYg
c2Nyb2xsZXJUaHVtYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
NSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAg
KEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01
OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bVN0YXRlLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTU5MywxNiArNTk0LDMyIEBA
IGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpID8gbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpIDogMDsKIH0KIAorc3RhdGljIHZvaWQg
Y29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcihSZW5kZXJMYXllciogbGF5ZXIsIEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWxheWVyIHx8ICFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlIHx8ICFw
YWdlLT5pc1VuZGVyVGVzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2Nyb2xs
QW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVzdFRyaWdnZXIoKSk7
Cit9CisKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogewotICAg
IGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAg
ICAgICAgY29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcihsYXllcigpLCBkb2N1bWVu
dCgpLmZyYW1lKCkpOwogICAgICAgICBsYXllcigpLT5zY3JvbGxUb1hPZmZzZXQobmV3TGVmdCwg
UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQpOworICAgIH0KIH0KIAogdm9pZCBSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogewotICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgY29ubmVjdFNjcm9s
bEFuaW1hdG9yVG9UZXN0VHJpZ2dlcihsYXllcigpLCBkb2N1bWVudCgpLmZyYW1lKCkpOwogICAg
ICAgICBsYXllcigpLT5zY3JvbGxUb1lPZmZzZXQobmV3VG9wLCBSZW5kZXJMYXllcjo6U2Nyb2xs
T2Zmc2V0Q2xhbXBlZCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQAogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUg
IlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0
VHJpZ2dlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTMwNzUsNiArMzA3NiwxMCBA
QCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0CiAgICAgZWxzZSB7CiAg
ICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBv
cmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSByZW5k
ZXJlcigpLmZyYW1lKCkucGFnZSgpKSB7CisgICAgICAgICAgICBpZiAocGFnZS0+aXNVbmRlclRl
c3QoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcihwYWdlLT50ZXN0VHJpZ2dlcigpKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwogICAgIHJl
dHVybiB3aWRnZXQucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTMg
QEAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCiAjaW5j
bHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKQEAgLTY2MSwxMyAr
NjYzLDI1IEBAIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3AoKSBjb25zdAogICAgIHJldHVy
biBtX2luZGV4T2Zmc2V0ICogaXRlbUhlaWdodCgpOwogfQogCitzdGF0aWMgdm9pZCBjb25uZWN0
U2Nyb2xsQW5pbWF0b3JUb1Rlc3RUcmlnZ2VyKFJlbmRlckxpc3RCb3gmIHJlbmRlcmVyLCBGcmFt
ZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5pc1VuZGVy
VGVzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5zY3JvbGxBbmltYXRvcigp
LnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihwYWdlLT50ZXN0VHJpZ2dlcigpKTsKK30KKwogdm9p
ZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKIHsKICAgICAvLyBEZXRl
cm1pbmUgYW4gaW5kZXggYW5kIHNjcm9sbCB0byBpdC4gICAgCiAgICAgaW50IGluZGV4ID0gbmV3
VG9wIC8gaXRlbUhlaWdodCgpOwogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbnVtSXRl
bXMoKSB8fCBpbmRleCA9PSBtX2luZGV4T2Zmc2V0KQogICAgICAgICByZXR1cm47Ci0gICAgCisg
ICAgY29ubmVjdFNjcm9sbEFuaW1hdG9yVG9UZXN0VHJpZ2dlcigqdGhpcywgZG9jdW1lbnQoKS5m
cmFtZSgpKTsKICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oVmVydGljYWxTY3Jv
bGxiYXIsIGluZGV4KTsKIH0KIApAQCAtODA2LDYgKzgyMCwxMCBAQCBQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gUmVuZGVyTGlzdEJveDo6Y3JlCiAgICAgZWxzZSB7CiAgICAgICAgIHdpZGdldCA9IFNj
cm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwg
dGhlbWUoKS5zY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKICAgICAg
ICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOworICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKSB7CisgICAgICAgICAgICBpZiAo
cGFnZS0+aXNVbmRlclRlc3QoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihwYWdlLT50ZXN0VHJpZ2dlcigpKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICB2aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKICAg
ICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiSW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAi
SlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CkBAIC02NywxOCArNjcsMzYgQEAgdm9pZCByZXNldElu
dGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgYwogCiB2b2lkIG1vbml0b3JXaGVlbEV2ZW50cyhX
ZWJDb3JlOjpGcmFtZSYgZnJhbWUpCiB7Ci0gICAgZnJhbWUubWFpbkZyYW1lKCkuZW5zdXJlVGVz
dFRyaWdnZXIoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+c2V0SXNVbmRlclRlc3QodHJ1ZSk7Cisg
ICAgcGFnZS0+ZW5zdXJlVGVzdFRyaWdnZXIoKTsKIH0KIAogdm9pZCBzZXRUZXN0Q2FsbGJhY2tB
bmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGpzQ2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBXaGVl
bEV2ZW50VGVzdFRyaWdnZXIqIHRyaWdnZXIgPSBmcmFtZS5tYWluRnJhbWUoKS5lbnN1cmVUZXN0
VHJpZ2dlcigpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBqc0NhbGxi
YWNrRnVuY3Rpb24pOwogICAgIAotICAgIHRyaWdnZXItPnNldFRlc3RDYWxsYmFja0FuZFN0YXJ0
Tm90aWZpY2F0aW9uVGltZXIoWz1dKHZvaWQpIHsKKyAgICBwYWdlLT5lbnN1cmVUZXN0VHJpZ2dl
cigpLnNldFRlc3RDYWxsYmFja0FuZFN0YXJ0Tm90aWZpY2F0aW9uVGltZXIoWz1dKHZvaWQpIHsK
ICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBqc0NhbGxiYWNrRnVuY3Rp
b24sIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIGpzQ2FsbGJhY2tGdW5jdGlvbik7CiAgICAgfSk7CiB9CiAKK3ZvaWQgY2xl
YXJXaGVlbEV2ZW50VGVzdFRyaWdnZXIoV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQoreworICAgIFBh
Z2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgcGFnZS0+c2V0SXNVbmRlclRlc3QoZmFsc2UpOworICAgIHBhZ2UtPmNsZWFy
VHJpZ2dlcigpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNv
cmVUZXN0U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNiAr
NDUsNyBAQCB2b2lkIGluamVjdEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYpCiB2b2lkIHJl
c2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZikgVEVTVF9TVVBQT1JUX0VYUE9SVDsKIHZv
aWQgbW9uaXRvcldoZWVsRXZlbnRzKFdlYkNvcmU6OkZyYW1lJikgVEVTVF9TVVBQT1JUX0VYUE9S
VDsKIHZvaWQgc2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1lcihXZWJDb3Jl
OjpGcmFtZSYsIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7
Cit2b2lkIGNsZWFyV2hlZWxFdmVudFRlc3RUcmlnZ2VyKFdlYkNvcmU6OkZyYW1lJikgVEVTVF9T
VVBQT1JUX0VYUE9SVDsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNS0wNC0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBhbmQgdGVzdCBpbmZyYXN0cnVjdHVyZSB0byBz
dXBwb3J0IHNjcm9sbGluZyB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMDM3NTUxNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
dGVzdCBwcm9ncmFtcyB0byBhY3RpdmF0ZSAoYW5kIGRlYWN0aXZhdGUpIHRoZSBuZXcgV2hlZWxF
dmVudFRlc3RUcmlnZ2VyIGxvZ2ljLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHA6CisgICAgICAgIChXS1BhZ2VDbGVhcldoZWVsRXZlbnRUZXN0VHJpZ2dlcnMpOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xl
YXJXaGVlbEV2ZW50VGVzdFRyaWdnZXIpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdlU3RhcnRNb25pdG9yaW5nU2Ny
b2xsT3BlcmF0aW9ucyk6IEludGVyYWN0IHdpdGggV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHRocm91
Z2gKKyAgICAgICAgdGhlIFBhZ2UsIHJhdGhlciB0aGFuIE1haW5GcmFtZS4KKyAgICAgICAgKFdL
QnVuZGxlUGFnZVJlZ2lzdGVyU2Nyb2xsT3BlcmF0aW9uQ29tcGxldGlvbkNhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKTogTWFrZSBzdXJlIHNjcm9s
bCBhbmltYXRvciBrbm93cyBhYm91dCBhbnkKKyAgICAgICAgYWN0aXZlIHRlc3QgdHJpZ2dlcnMu
CisgICAgICAgICogV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubW06CisgICAgICAgIChXZWJLaXQ6
OkV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCk6IElmIHRoZSB3aGVlbCBldmVudCB3YXMgcGFz
c2VkIHRvIHRoZSBzY3JvbGxpbmcgdGhyZWFkLAorICAgICAgICBkZWZlciB0ZXN0cyB1bnRpbCBh
IFNjcm9sbGluZyBUaHJlYWQgU3luYyBoYXMgb2NjdXJyZWQuCisgICAgICAgICogV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2xlYXJXaGVlbEV2ZW50VGVz
dFRyaWdnZXIpOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAg
KiBXZWJQYWdlL1dlYlBhZ2UubWVzc2FnZS5pbjogQWRkZWQgQ2xlYXJXaGVlbEV2ZW50VGVzdFRy
aWdnZXIgbWVzc2FnZS4KKwogMjAxNS0wNC0yOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgc2hvdWxkIGJlIGVudW0gY2xh
c3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTc5NCw0ICs1Nzk0LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRDaGFuZ2VCYWNrZ3JvdW5kQ28KICAgICBtX3BhZ2VDbGllbnQuZGlkQ2hhbmdlQmFja2dy
b3VuZENvbG9yKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpjbGVhcldoZWVsRXZlbnRUZXN0
VHJpZ2dlcigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyV2hlZWxFdmVudFRl
c3RUcmlnZ2VyKCksIG1fcGFnZUlEKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxODM1NjQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMzYsNiArMTAzNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENoYW5nZUJhY2tn
cm91bmRDb2xvcigpOwogICAgIHZvaWQgZGlkTGF5b3V0Rm9yQ3VzdG9tQ29udGVudFByb3ZpZGVy
KCk7CiAKKyAgICB2b2lkIGNsZWFyV2hlZWxFdmVudFRlc3RUcmlnZ2VyKCk7CisKIHByaXZhdGU6
CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCB1aW50NjRf
dCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDb25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIwMSw2ICsyMjAxLDEyIEBAIGJvb2wgV0tQ
YWdlSXNQbGF5aW5nQXVkaW8oV0tQYWdlUmVmIHBhZ2UKICAgICByZXR1cm4gdG9JbXBsKHBhZ2Up
LT5pc1BsYXlpbmdBdWRpbygpOwogfQogCit2b2lkIFdLUGFnZUNsZWFyV2hlZWxFdmVudFRlc3RU
cmlnZ2VyKFdLUGFnZVJlZiBwYWdlUmVmKQoreworICAgIHRvSW1wbChwYWdlUmVmKS0+Y2xlYXJX
aGVlbEV2ZW50VGVzdFRyaWdnZXIoKTsKK30KKworCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAKIC8vIC0tIERFUFJFQ0FURUQgLS0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBA
IFdLX0VYUE9SVCB2b2lkIFdLUGFnZVJlc3RvcmVGcm9tU2Vzc2lvblMKIAogV0tfRVhQT1JUIGRv
dWJsZSBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwogV0tfRVhQ
T1JUIHZvaWQgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFdLUGFnZVJlZiBwYWdl
LCBkb3VibGUgY3VzdG9tU2NhbGVGYWN0b3IpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlQ2xlYXJX
aGVlbEV2ZW50VGVzdFRyaWdnZXIoV0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBPUlQgYm9vbCBX
S1BhZ2VTdXBwb3J0c1RleHRab29tKFdLUGFnZVJlZiBwYWdlKTsKIFdLX0VYUE9SVCBkb3VibGUg
V0tQYWdlR2V0VGV4dFpvb21GYWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTgzNTY0KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODIsNyArNTgyLDggQEAgdm9pZCBXS0J1bmRsZVBhZ2VTdGFydE1vbml0b3Jp
bmdTY3JvbGxPcAogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+
bWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKKyAgICBwYWdlLT5zZXRJc1VuZGVyVGVz
dCh0cnVlKTsKKyAgICBwYWdlLT5lbnN1cmVUZXN0VHJpZ2dlcigpOwogfQogCiB2b2lkIFdLQnVu
ZGxlUGFnZVJlZ2lzdGVyU2Nyb2xsT3BlcmF0aW9uQ29tcGxldGlvbkNhbGxiYWNrKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VUZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIHZvaWQqIGNvbnRleHQpCkBAIC01OTIsMTIgKzU5MywxMCBAQCB2b2lkIFdLQnVuZGxl
UGFnZVJlZ2lzdGVyU2Nyb2xsT3BlcmF0aW9uCiAgICAgCiAgICAgV2ViS2l0OjpXZWJQYWdlKiB3
ZWJQYWdlID0gdG9JbXBsKHBhZ2VSZWYpOwogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSB3ZWJQ
YWdlID8gd2ViUGFnZS0+Y29yZVBhZ2UoKSA6IG51bGxwdHI7Ci0gICAgCiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmln
Z2VyKiB0cmlnZ2VyID0gcGFnZS0+bWFpbkZyYW1lKCkuZW5zdXJlVGVzdFRyaWdnZXIoKTsKLSAg
ICB0cmlnZ2VyLT5zZXRUZXN0Q2FsbGJhY2tBbmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKFs9XSgp
IHsKKyAgICBwYWdlLT5lbnN1cmVUZXN0VHJpZ2dlcigpLnNldFRlc3RDYWxsYmFja0FuZFN0YXJ0
Tm90aWZpY2F0aW9uVGltZXIoWz1dKCkgewogICAgICAgICBjYWxsYmFjayhjb250ZXh0KTsKICAg
ICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tCShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgs
MTUgKzY4LDE4IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6
ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGFzdGVib2FyZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJv
eE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VVSUQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBv
cnQgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC02NjAsNiArNjYzLDEyIEBAIFBhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVMKICAgICAgICAgW21fY29udGFpbmVyTGF5ZXIg
YWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpXTsKICAgICB9CiAgICAg
ZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOworICAgIGlmIChGcmFt
ZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdlLT5pc1VuZGVyVGVz
dCgpKQorICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RU
cmlnZ2VyKHBhZ2UtPnRlc3RUcmlnZ2VyKCkpOworICAgICAgICB9CisgICAgfQogICAgIHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwogICAgIHJl
dHVybiB3aWRnZXQucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDE4MzU2
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1doZWVsRXZlbnRUZXN0VHJpZ2dl
ci5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KIApAQCAtMTMxLDYgKzEzMiwyMCBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVu
dCh1aW50NjRfCiAgICAgICAgIH0KIAogICAgICAgICBTY3JvbGxpbmdUcmVlOjpFdmVudFJlc3Vs
dCByZXN1bHQgPSBzY3JvbGxpbmdUcmVlLT50cnlUb0hhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1X
aGVlbEV2ZW50KTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJC
RVJfQkFORElORykKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTY3JvbGxpbmdUcmVlOjpEaWRIYW5k
bGVFdmVudCkgeworICAgICAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IHdlYlBhZ2UtPmNvcmVQYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHBhZ2UtPmlzVW5kZXJUZXN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25z
dCBhdXRvJiB0cmlnZ2VyID0gcGFnZS0+dGVzdFRyaWdnZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmlnZ2VyLT5kZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHdlYlBhZ2Ut
PmNvcmVQYWdlKCkpLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNO
ZWVkZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBpZiAocmVzdWx0ID09IFNjcm9s
bGluZ1RyZWU6OkRpZEhhbmRsZUV2ZW50IHx8IHJlc3VsdCA9PSBTY3JvbGxpbmdUcmVlOjpEaWRO
b3RIYW5kbGVFdmVudCkgewogICAgICAgICAgICAgc2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQs
IHdoZWVsRXZlbnQsIHJlc3VsdCA9PSBTY3JvbGxpbmdUcmVlOjpEaWRIYW5kbGVFdmVudCk7CiAg
ICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MDMsNCAr
NDkwMywxMyBAQCB2b2lkIFdlYlBhZ2U6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uCiAgICAg
ICAgIHJldHVybkRhdGEgPSB3ZWJQcm9jZXNzLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMocmV0
dXJuVXNlckRhdGEub2JqZWN0KCkpOwogfQogCit2b2lkIFdlYlBhZ2U6OmNsZWFyV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wYWdlLT5zZXRJc1VuZGVyVGVzdChmYWxzZSk7CisgICAgbV9wYWdlLT5jbGVhclRyaWdn
ZXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE4MzU2NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMTcsNiArMTExNyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCk7CiAjZW5kaWYKIAorICAgIHZvaWQgY2xlYXJXaGVl
bEV2ZW50VGVzdFRyaWdnZXIoKTsKKwogICAgIHVpbnQ2NF90IG1fcGFnZUlEOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlBhZ2U+IG1fcGFnZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiAxODM1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDI0LDQgKzQyNCw1IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBzaG91bGRQbGF5KQogI2VuZGlmCiAKKyAg
ICBDbGVhcldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpCiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM1NzYpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wNC0yOSAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBhbmQgdGVz
dCBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHNjcm9sbGluZyB0ZXN0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjg0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yMDM3NTUxNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAg
ICAgICAgKHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyk6IE1ha2Ug
c3VyZSB0aGUgV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHN0YXRlIGlzCisgICAgICAgIHJlc2V0IGJl
Zm9yZSB0aGUgbmV4dCB0ZXN0IHJ1bi4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVU
b0NvbnNpc3RlbnRWYWx1ZXMpOiBEaXR0by4iCisKIDIwMTUtMDQtMjkgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlLWFmdGVyLWZyZWUgd2hlbiBpbnZh
bGlkYXRpbmcgV0tQYWdlRm9yY2VSZXBhaW50IGNhbGxiYWNrCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAxODM1NjQpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE1NCw2ICsxNTQsMTIgQEAgQGludGVyZmFjZSBXZWJWaWV3IChEZXRhaWxzKQogLSAoQk9PTClf
Zmx1c2hDb21wb3NpdGluZ0NoYW5nZXM7CiBAZW5kCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorQGlu
dGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3SW50ZXJuYWxGb3JUZXN0aW5nKQorLSAoV2ViQ29yZTo6
RnJhbWUqKV9tYWluQ29yZUZyYW1lOworQGVuZAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKIAogLy8gRGVjaWRpbmcgd2hlbiBpdCdzIE9LIHRv
IGR1bXAgb3V0IHRoZSBzdGF0ZSBpcyBhIGJpdCB0cmlja3kuICBBbGwgdGhlc2UgbXVzdCBiZSB0
cnVlOgpAQCAtMTgyMyw2ICsxODI5LDkgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25z
aXN0ZW50U3RhdAogICAgICAgICBnVGVzdFJ1bm5lci0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgp
OwogICAgIH0KIAorICAgIGlmIChXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBbd2ViVmlldyBfbWFp
bkNvcmVGcmFtZV0pCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6Y2xlYXJXaGVlbEV2ZW50
VGVzdFRyaWdnZXIoKmZyYW1lKTsKKwogI2lmICFQTEFURk9STShJT1MpCiAgICAgW3dlYlZpZXcg
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOllFU107CiAgICAgW3dlYlZpZXcgc2V0
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOk5PXTsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODM1NjQpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYwLDYgKzY2MCw4IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QK
ICAgICAvLyBSZS1zZXQgdG8gdGhlIGRlZmF1bHQgYmFja2luZyBzY2FsZSBmYWN0b3IgYnkgc2V0
dGluZyB0aGUgY3VzdG9tIHNjYWxlIGZhY3RvciB0byAwLgogICAgIFdLUGFnZVNldEN1c3RvbUJh
Y2tpbmdTY2FsZUZhY3RvcihtX21haW5XZWJWaWV3LT5wYWdlKCksIDApOwogCisgICAgV0tQYWdl
Q2xlYXJXaGVlbEV2ZW50VGVzdFRyaWdnZXIobV9tYWluV2ViVmlldy0+cGFnZSgpKTsKKwogI2lm
IFBMQVRGT1JNKEVGTCkKICAgICAvLyBFRkwgdXNlIGEgcmVhbCB3aW5kb3cgd2hpbGUgb3RoZXIg
cG9ydHMgc3VjaCBhcyBRdCBkb24ndC4KICAgICAvLyBJbiBFRkwsIHdlIG5lZWQgdG8gcmVzaXpl
IHRoZSB3aW5kb3cgdG8gdGhlIG9yaWdpbmFsIHNpemUgYWZ0ZXIgY2FsbHMgdG8gd2luZG93LnJl
c2l6ZVRvLgo=
</data>
<flag name="review"
          id="276818"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>