<?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>109898</bug_id>
          
          <creation_ts>2013-02-14 23:24:13 -0800</creation_ts>
          <short_desc>Make EventDispatcher take an Event object in its constructor.</short_desc>
          <delta_ts>2013-02-18 23:59:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110143</dependson>
          <blocked>109905</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jberlin</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>svillar</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833731</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-14 23:24:13 -0800</bug_when>
    <thetext>The benefit:
  EventDispatcher will become more *RAII*. We can calculate EventPath in the constructor if an Event object is available. We can also remove EventDispatcher::ensrueEventPath().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833743</commentid>
    <comment_count>1</comment_count>
      <attachid>188492</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-14 23:42:18 -0800</bug_when>
    <thetext>Created attachment 188492
Constructor takes an Event object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834153</commentid>
    <comment_count>2</comment_count>
      <attachid>188492</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-15 10:31:37 -0800</bug_when>
    <thetext>Comment on attachment 188492
Constructor takes an Event object.

I&apos;ll let the EWS elves to finish their work, but this is great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835117</commentid>
    <comment_count>3</comment_count>
      <attachid>188492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-17 21:53:30 -0800</bug_when>
    <thetext>Comment on attachment 188492
Constructor takes an Event object.

Clearing flags on attachment: 188492

Committed r143145: &lt;http://trac.webkit.org/changeset/143145&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835119</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-17 21:53:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835486</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-18 07:54:11 -0800</bug_when>
    <thetext>I am getting frequent crashes when I try to scroll a page with a track pad:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x00000001106af4cb WebCore::EventDispatcher::EventDispatcher(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::Event&gt;) + 283 (EventDispatcher.cpp:67)
1   com.apple.WebCore             	0x00000001106af39d WebCore::EventDispatcher::EventDispatcher(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::Event&gt;) + 29 (EventDispatcher.cpp:70)
2   com.apple.WebCore             	0x00000001106af2f3 WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::EventDispatchMediator&gt;) + 195 (EventDispatcher.cpp:54)
3   com.apple.WebCore             	0x0000000111334657 WebCore::Node::dispatchWheelEvent(WebCore::PlatformWheelEvent const&amp;) + 103 (Node.cpp:2402)
4   com.apple.WebCore             	0x00000001106c0739 WebCore::EventHandler::handleWheelEvent(WebCore::PlatformWheelEvent const&amp;) + 1161 (EventHandler.cpp:2375)
5   com.apple.WebKit2             	0x000000010dce7640 WebKit::handleWheelEvent(WebKit::WebWheelEvent const&amp;, WebCore::Page*) + 96 (WebPage.cpp:1615)
6   com.apple.WebKit2             	0x000000010dce7587 WebKit::WebPage::wheelEvent(WebKit::WebWheelEvent const&amp;) + 103 (WebPage.cpp:1625)
7   com.apple.WebKit2             	0x000000010da73e9b WebKit::EventDispatcher::dispatchWheelEvent(unsigned long long, WebKit::WebWheelEvent const&amp;) + 155 (EventDispatcher.cpp:131)
8   com.apple.WebKit2             	0x000000010da75262 WTF::FunctionWrapper&lt;void (WebKit::EventDispatcher::*)(unsigned long long, WebKit::WebWheelEvent const&amp;)&gt;::operator()(WebKit::EventDispatcher*, unsigned long long, WebKit::WebWheelEvent const&amp;) + 130 (Functional.h:274)
9   com.apple.WebKit2             	0x000000010da751d9 WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (WebKit::EventDispatcher::*)(unsigned long long, WebKit::WebWheelEvent const&amp;)&gt;, void (WebKit::EventDispatcher*, unsigned long long, WebKit::WebWheelEvent)&gt;::operator()() + 121 (Functional.h:550)
10  com.apple.WebCore             	0x000000011176f4de WTF::Function&lt;void ()&gt;::operator()() const + 142 (Functional.h:704)
11  com.apple.WebCore             	0x000000011176f250 WebCore::RunLoop::performWork() + 400 (RunLoop.cpp:93)
12  com.apple.WebCore             	0x000000011177054e WebCore::RunLoop::performWork(void*) + 62 (RunLoopCF.cpp:66)
13  com.apple.CoreFoundation      	0x00007fff8ed102b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835496</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-18 08:11:45 -0800</bug_when>
    <thetext>The WheelEventDispatchMediator constructor returns early without creating/setting the event if deltaX and deltaY are both 0:

WheelEventDispatchMediator::WheelEventDispatchMediator(const PlatformWheelEvent&amp; event, PassRefPtr&lt;AbstractView&gt; view)
{
    if (!(event.deltaX() || event.deltaY()))
        return;


and none of the downstream code checks to see if there is an event before the EventDispatcher constructor asserts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835632</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 11:04:34 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 110143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835881</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-18 18:24:14 -0800</bug_when>
    <thetext>Eric, Thank you for the reporting. I appreciate that.

I should have tested this patch interactively. I&apos;ve tested this patch only by layout tests. My bad.
Maybe, we should have a layout test so that we could catch the regression in the future.

Let me fix that.

(In reply to comment #6)
&gt; The WheelEventDispatchMediator constructor returns early without creating/setting the event if deltaX and deltaY are both 0:
&gt; 
&gt; WheelEventDispatchMediator::WheelEventDispatchMediator(const PlatformWheelEvent&amp; event, PassRefPtr&lt;AbstractView&gt; view)
&gt; {
&gt;     if (!(event.deltaX() || event.deltaY()))
&gt;         return;
&gt; 
&gt; 
&gt; and none of the downstream code checks to see if there is an event before the EventDispatcher constructor asserts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835928</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-18 21:07:17 -0800</bug_when>
    <thetext>*** Bug 110142 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835977</commentid>
    <comment_count>10</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-18 22:40:12 -0800</bug_when>
    <thetext>Let me re-land this. I&apos;ve fixed a crash and added a layout test to catch this kind of crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835982</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-18 22:44:25 -0800</bug_when>
    <thetext>Note that I couldn&apos;t reproduce the crash interactively since my environment does not issue such a PlatformWheelEvent. Therefore I&apos;ve added a layout test which caused a crash for the previous patch.
The crash doesn&apos;t happen in a new patch which I&apos;ll upload soon.

(In reply to comment #10)
&gt; Let me re-land this. I&apos;ve fixed a crash and added a layout test to catch this kind of crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836001</commentid>
    <comment_count>12</comment_count>
      <attachid>188999</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-18 23:13:08 -0800</bug_when>
    <thetext>Created attachment 188999
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836050</commentid>
    <comment_count>13</comment_count>
      <attachid>188999</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 23:59:18 -0800</bug_when>
    <thetext>Comment on attachment 188999
Patch for landing

Clearing flags on attachment: 188999

Committed r143303: &lt;http://trac.webkit.org/changeset/143303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836051</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 23:59:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188492</attachid>
            <date>2013-02-14 23:42:18 -0800</date>
            <delta_ts>2013-02-18 23:13:04 -0800</delta_ts>
            <desc>Constructor takes an Event object.</desc>
            <filename>bug-109898-20130215163844.patch</filename>
            <type>text/plain</type>
            <size>21486</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyNTMzMTc3NWQwMzU4
MzMxMTk1NjQyMjcwNWZkYzA4ODlkNmRmZS4uMzExOTNiZGU2YjBiOTk5ZDIwZGE4ZjNmOTFmODE0
OTNhZDI4YjZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAyLTE1ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIEV2ZW50RGlzcGF0
Y2hlciB0YWtlIGFuIEV2ZW50IG9iamVjdCBpbiBpdHMgY29uc3RydWN0b3IuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4OTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGF0IG1ha2VzIEV2ZW50RGlz
cGF0Y2hlciBtb3JlIFJBSUktbGlrZSBzbyB0aGF0IHdlIGNhbiBjYWxjdWxhdGUKKyAgICAgICAg
YW4gRXZlbnRQYXRoIGluIGl0cyBjb25zdHJ1Y3Rvci4gIEknbGwgcmVtb3ZlCisgICAgICAgIEV2
ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRQYXRoKCkgaW4gYSBmb2xsb3dpbmcgcGF0Y2guCisK
KyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGRv
bS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRj
aGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50UGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2sp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFy
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0
QnViYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50UG9zdFByb2Nlc3MpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuaDoKKyAgICAg
ICAgKEV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpldmVudCk6CisgICAg
ICAgICogZG9tL0ZvY3VzRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNFdmVudERp
c3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Qmx1ckV2
ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KToKKyAg
ICAgICAgKiBkb20vR2VzdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVF
dmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpkaXNwYXRjaEV2ZW50KToKKwogMjAxMy0wMi0xNCAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgRmFjdG9yIEV2ZW50IHJldGFyZ2V0aW5nIGNvZGUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwCmluZGV4IGEzMDljNjk1
NzA0NDI2NWQwYjUzYTAzNzkyZmZiOTU0MjMzYWU1MDcuLmEzY2E0YzhkNmIxYzU3NjZmNzViM2Y0
YjNjNTcwMmNiYzMwNzIwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoTWVkaWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
TWVkaWF0b3IuY3BwCkBAIC01MCw3ICs1MCw4IEBAIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6RXZl
bnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiBib29sIEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNo
ZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQobV9ldmVu
dC5nZXQoKSk7CisgICAgQVNTRVJUKG1fZXZlbnQuZ2V0KCkgPT0gZGlzcGF0Y2hlci0+ZXZlbnQo
KSk7CisgICAgcmV0dXJuIGRpc3BhdGNoZXItPmRpc3BhdGNoKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggNGM2
YzgzNTNjODgwMmFjYjc5YzdkMTAzM2U3ODg1MDRlOWY0OGE4OC4uZjEwYTE1OTJhZWM4ZDUyYjNk
ZjA0YWE3Njg0OThiZTQ5ODBjZTRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKQEAgLTUxLDI3ICs1MSwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcgogewogICAg
IEFTU0VSVCghTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7CiAKLSAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlKTsKKyAgICBFdmVu
dERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlLCBtZWRpYXRvci0+ZXZlbnQoKSk7CiAgICAgcmV0
dXJuIG1lZGlhdG9yLT5kaXNwYXRjaEV2ZW50KCZkaXNwYXRjaGVyKTsKIH0KIAotRXZlbnREaXNw
YXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKK0V2ZW50RGlzcGF0Y2hlcjo6RXZl
bnREaXNwYXRjaGVyKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIDog
bV9ub2RlKG5vZGUpCisgICAgLCBtX2V2ZW50KGV2ZW50KQogICAgICwgbV9ldmVudFBhdGhJbml0
aWFsaXplZChmYWxzZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChm
YWxzZSkKICNlbmRpZgogewogICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQobV9ldmVudC5n
ZXQoKSk7CisgICAgQVNTRVJUKCFtX2V2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2Ny
aXB0IGNvZGUgY2FuIGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3Qg
bnVsbC4KICAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CiB9CiAKLUV2ZW50
UGF0aCYgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudFBhdGgoRXZlbnQqIGV2ZW50KQorRXZl
bnRQYXRoJiBFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50UGF0aCgpCiB7CiAgICAgaWYgKG1f
ZXZlbnRQYXRoSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybiBtX2V2ZW50UGF0aDsKICAgICBt
X2V2ZW50UGF0aEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1
bGF0ZUV2ZW50UGF0aChtX25vZGUuZ2V0KCksIGV2ZW50LCBtX2V2ZW50UGF0aCk7CisgICAgRXZl
bnRSZXRhcmdldGVyOjpjYWxjdWxhdGVFdmVudFBhdGgobV9ub2RlLmdldCgpLCBtX2V2ZW50Lmdl
dCgpLCBtX2V2ZW50UGF0aCk7CiAgICAgcmV0dXJuIG1fZXZlbnRQYXRoOwogfQogCkBAIC05NSwx
NDAgKzk4LDEzOCBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
ayhOb2RlKiBub2RlLCBFdmVudCogdW5kZXJseWluZ0V2ZW50LAogICAgIGdOb2Rlc0Rpc3BhdGNo
aW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQobm9kZSk7CiAKICAgICBpZiAobW91c2VFdmVudE9wdGlv
bnMgPT0gU2VuZE1vdXNlT3ZlclVwRG93bkV2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVy
KG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5tb3VzZW92ZXJFdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5k
ZXJseWluZ0V2ZW50KSk7CisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlLCBTaW11bGF0ZWRN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBub2RlLT5kb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKS5kaXNwYXRjaCgpOwogCiAg
ICAgaWYgKG1vdXNlRXZlbnRPcHRpb25zICE9IFNlbmROb0V2ZW50cykKLSAgICAgICAgRXZlbnRE
aXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZp
ZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7CisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlLCBT
aW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBu
b2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKS5kaXNwYXRj
aCgpOwogICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCB2aXN1YWxPcHRpb25zID09IFNob3dQcmVz
c2VkTG9vayk7CiAgICAgaWYgKG1vdXNlRXZlbnRPcHRpb25zICE9IFNlbmROb0V2ZW50cykKLSAg
ICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG5vZGUtPmRvY3VtZW50KCkt
PmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworICAgICAgICBFdmVudERpc3BhdGNo
ZXIobm9kZSwgU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkp
LmRpc3BhdGNoKCk7CiAgICAgbm9kZS0+c2V0QWN0aXZlKGZhbHNlKTsKIAogICAgIC8vIGFsd2F5
cyBzZW5kIGNsaWNrCi0gICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2lt
dWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBub2RlLT5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBFdmVudERp
c3BhdGNoZXIobm9kZSwgU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZl
bnQpKS5kaXNwYXRjaCgpOwogCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mt
PnJlbW92ZShub2RlKTsKIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCitib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goKQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQoIW1fZXZlbnREaXNwYXRjaGVkKTsK
ICAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7CiAjZW5kaWYKLSAgICBSZWZQdHI8RXZlbnQ+
IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6dGFrZUNoaWxk
Tm9kZXNMYXp5U25hcHNob3QoKTsKIAotICAgIGV2ZW50LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdl
dGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKKyAg
ICBtX2V2ZW50LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKICAgICBBU1NFUlQoIU5vRXZlbnREaXNwYXRj
aEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChldmVu
dC0+dGFyZ2V0KCkpOwotICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEph
dmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0
IG5vdCBudWxsLgotICAgIGVuc3VyZUV2ZW50UGF0aChldmVudC5nZXQoKSk7Ci0gICAgV2luZG93
RXZlbnRDb250ZXh0IHdpbmRvd0V2ZW50Q29udGV4dChldmVudC5nZXQoKSwgbV9ub2RlLmdldCgp
LCB0b3BFdmVudENvbnRleHQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQobV9u
b2RlLT5kb2N1bWVudCgpLCAqZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dC53aW5kb3coKSwgbV9u
b2RlLmdldCgpLCBtX2V2ZW50UGF0aCk7CisgICAgQVNTRVJUKG1fZXZlbnQtPnRhcmdldCgpKTsK
KyAgICBlbnN1cmVFdmVudFBhdGgoKTsKKyAgICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93RXZl
bnRDb250ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkp
OworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKm1f
ZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dC53aW5kb3coKSwgbV9ub2RlLmdldCgpLCBtX2V2ZW50
UGF0aCk7CiAKICAgICB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdDsKLSAgICBp
ZiAoZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoZXZlbnQsIHByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICBpZiAoZGlzcGF0Y2hFdmVu
dEF0Q2FwdHVyaW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQpID09IENvbnRpbnVlRGlzcGF0
Y2hpbmcpCi0gICAgICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KGV2ZW50KSA9PSBD
b250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRBdEJ1YmJs
aW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQpOwotICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJv
Y2VzcyhldmVudCwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIGlmIChkaXNw
YXRjaEV2ZW50UHJlUHJvY2VzcyhwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29u
dGludWVEaXNwYXRjaGluZykKKyAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyh3
aW5kb3dFdmVudENvbnRleHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCisgICAgICAgICAgICBp
ZiAoZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKKyAgICAg
ICAgICAgICAgICBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyh3aW5kb3dFdmVudENvbnRleHQpOwor
ICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3Vs
dCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50
J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3Vu
ZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7
Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CisgICAgbV9ldmVudC0+c2V0VGFyZ2V0
KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7CisgICAgbV9ldmVudC0+c2V0Q3VycmVudFRh
cmdldCgwKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQo
Y29va2llKTsKIAotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBy
ZXR1cm4gIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotaW5saW5lIEV2ZW50RGlz
cGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2Vz
cyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50UHJlUHJvY2Vzcyh2b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJS
ZXN1bHQpCiB7CiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29t
ZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCi0gICAgcHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpKTsKLSAgICByZXR1cm4gKG1fZXZlbnRQYXRoLmlzRW1wdHkoKSB8fCBldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNw
YXRjaGluZzsKKyAgICBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgcmV0dXJuIChtX2V2ZW50
UGF0aC5pc0VtcHR5KCkgfHwgbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURp
c3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmco
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93RXZlbnRD
b250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dFdmVu
dENvbnRleHQpCiB7CiAgICAgLy8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0
YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgotICAgIGV2ZW50LT5z
ZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIG1fZXZlbnQtPnNldEV2
ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAKLSAgICBpZiAod2luZG93RXZlbnRD
b250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkpCisgICAgaWYgKHdpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50
cyhtX2V2ZW50LmdldCgpKSAmJiBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAg
ICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2V2ZW50
UGF0aC5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4
dCYgZXZlbnRDb250ZXh0ID0gKm1fZXZlbnRQYXRoW2ldOwogICAgICAgICBpZiAoZXZlbnRDb250
ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewotICAgICAgICAgICAgaWYgKGV2ZW50
LT5idWJibGVzKCkpCisgICAgICAgICAgICBpZiAobV9ldmVudC0+YnViYmxlcygpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50
OjpBVF9UQVJHRVQpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwotICAgICAgICBldmVudENvbnRleHQuaGFu
ZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRz
KG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBpZiAobV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCiAgICAgICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAogICAgIHJl
dHVybiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdFRhcmdldChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkKIHsKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBtX2V2ZW50UGF0aFswXS0+aGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOworICAgIG1fZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgbV9ldmVudFBhdGhbMF0tPmhh
bmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiBtX2V2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7
CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2
ZW50Q29udGV4dCYgd2luZG93Q29udGV4dCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0
aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoV2luZG93RXZlbnRD
b250ZXh0JiB3aW5kb3dDb250ZXh0KQogewotICAgIGlmIChldmVudC0+YnViYmxlcygpICYmICFl
dmVudC0+Y2FuY2VsQnViYmxlKCkpIHsKKyAgICBpZiAobV9ldmVudC0+YnViYmxlcygpICYmICFt
X2V2ZW50LT5jYW5jZWxCdWJibGUoKSkgewogICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2
ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkg
dXAuCi0gICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7
CisgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsK
IAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZXZlbnRQYXRoLnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50
Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gKm1fZXZlbnRQYXRoW2ldOwogICAgICAgICAgICAgaWYg
KGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpCi0gICAgICAgICAgICAg
ICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICAg
ICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJ
TkdfUEhBU0UpOwotICAgICAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkg
fHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2
ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4
dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtX2V2
ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogICAgICAgICB9Ci0gICAgICAg
IHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICB3
aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwogICAgIH0KICAg
ICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIHZvaWQgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3Modm9pZCogcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQpCiB7Ci0gICAgZXZlbnQtPnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6
OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwotICAgIGV2
ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwor
ICAgIG1fZXZlbnQtPnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRU
YXJnZXQoMCk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKIAogICAgIC8vIFBhc3Mg
dGhlIGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIgdG8gdGhlIHBvc3REaXNw
YXRjaEV2ZW50SGFuZGxlci4KLSAgICBtX25vZGUtPnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihl
dmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIG1fbm9kZS0+
cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCksIHByZURpc3BhdGNoRXZlbnRI
YW5kbGVyUmVzdWx0KTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hp
bGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZh
dWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMg
YW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIG5vdCBwYXJ0IG9m
IHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlmICghbV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CiAgICAgICAgIC8vIE5vbi1idWJibGlu
ZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIsIHRoZSBvbmUgZm9y
IHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9kZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7Ci0gICAg
ICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgbV9ub2RlLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBBU1NFUlQoIW1fZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgIGlmIChtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBGb3IgYnViYmxpbmcgZXZlbnRzLCBj
YWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNhbWUgdGFyZ2V0cyBpbiB0aGUKICAg
ICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcgcGhhc2UuCi0gICAgICAgIGlmIChl
dmVudC0+YnViYmxlcygpKSB7CisgICAgICAgIGlmIChtX2V2ZW50LT5idWJibGVzKCkpIHsKICAg
ICAgICAgICAgIHNpemVfdCBzaXplID0gbV9ldmVudFBhdGguc2l6ZSgpOwogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX2V2
ZW50UGF0aFtpXS0+bm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgICAgICBt
X2V2ZW50UGF0aFtpXS0+bm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAobV9ldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggOTkyZWFkODJkM2E2YWUyZjJhN2FhNTFkYTVlMDFj
YmQyM2U5NTk2OS4uZjAwMmY3NTk4MTM3YjFmNzQzMWQ5ZWMzZWQ5ODNjZGZiNDQ3ZWViYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIlNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsMjIgKzU4
LDI0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2so
Tm9kZSosIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNpbXVsYXRlZENsaWNrTW91c2VFdmVudE9w
dGlvbnMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyk7CiAKLSAgICBib29sIGRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKLSAgICBF
dmVudFBhdGgmIGVuc3VyZUV2ZW50UGF0aChFdmVudCopOworICAgIGJvb2wgZGlzcGF0Y2goKTsK
KyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAgRXZl
bnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQorICAgIEV2ZW50UGF0
aCYgZW5zdXJlRXZlbnRQYXRoKCk7CiAKIHByaXZhdGU6Ci0gICAgRXZlbnREaXNwYXRjaGVyKE5v
ZGUqKTsKKyAgICBFdmVudERpc3BhdGNoZXIoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAg
ICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOwogCi0gICAgRXZlbnREaXNw
YXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50
Piwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKLSAgICBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyhQYXNzUmVmUHRyPEV2ZW50
PiwgV2luZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBk
aXNwYXRjaEV2ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoUGFzc1JlZlB0cjxFdmVudD4s
IFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNz
KFBhc3NSZWZQdHI8RXZlbnQ+LCB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7
CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJlUHJvY2Vzcyh2
b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIEV2ZW50RGlzcGF0Y2hD
b250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFdpbmRvd0V2ZW50Q29udGV4dCYp
OworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCk7
CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhX
aW5kb3dFdmVudENvbnRleHQmKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyh2
b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CiAKICAgICBFdmVudFBhdGggbV9l
dmVudFBhdGg7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8RXZlbnQ+IG1f
ZXZlbnQ7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3OwogICAgIGJvb2wgbV9ldmVudFBh
dGhJbml0aWFsaXplZDsKICNpZm5kZWYgTkRFQlVHCkBAIC04MCwxMSArODMsNiBAQCBwcml2YXRl
OgogI2VuZGlmCiB9OwogCi1pbmxpbmUgTm9kZSogRXZlbnREaXNwYXRjaGVyOjpub2RlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOwotfQotCiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0ZvY3VzRXZlbnQuY3BwCmluZGV4IDE1YmE0MDFjYTE1ZTAyNDZhYzA0YmRhNTQxMTEzODJh
ZTcwNjllNWUuLjQ3M2Y3MWUwNjFlN2Q0NDIxOWZjNThjNmZlMTQ5MGZiODI2MGE4NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRm9jdXNFdmVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgRm9jdXNFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OkZvY3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNF
dmVudD4gZm8KIAogYm9vbCBGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVu
dChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgRXZlbnRSZXRhcmdl
dGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksIGRp
c3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgpKSk7CisgICAgRXZlbnRSZXRhcmdldGVy
OjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksIGRpc3Bh
dGNoZXItPmVuc3VyZUV2ZW50UGF0aCgpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlh
dG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIEJs
dXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OkJsdXJFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1Jl
ZlB0cjxGb2N1c0V2ZW50PiBmb2N1CiAKIGJvb2wgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6
ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAg
RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwg
KmV2ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgpKSk7CisgICAgRXZl
bnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2
ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aCgpKTsKICAgICByZXR1cm4gRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xMDks
NyArMTA5LDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJbkV2ZW50RGlz
cGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEZvY3VzRXZlbnQKIAogYm9vbCBGb2N1c0luRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hl
cikgY29uc3QKIHsKLSAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlz
cGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2
ZW50KCkpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0
Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKCkpOwog
ICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hl
cik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6Rm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxGb2N1c0V2ZQogCiBi
b29sIEZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlz
cGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVz
dEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+
ZW5zdXJlRXZlbnRQYXRoKGV2ZW50KCkpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZv
ckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5z
dXJlRXZlbnRQYXRoKCkpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3Bh
dGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9HZXN0dXJlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5jcHAK
aW5kZXggMzUzNjYwNzQ1NmE0MjZkOWYwZjgyNzQ0NDk0YTdlZjJjZGQ4ZjZjZi4uZTA2NzFmODlh
YjEzNDFlNmI4ZTVhYmQzOGFlMGYwMTE0NGMyMWE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0dlc3R1cmVFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVF
dmVudC5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBib29sIEdlc3R1cmVFdmVudERpc3BhdGNoTWVk
aWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjbwogICAg
IGlmIChkaXNwYXRjaGVyLT5ub2RlKCktPmRpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsKKyAgICBkaXNwYXRj
aGVyLT5kaXNwYXRjaCgpOwogICAgIEFTU0VSVCghZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgp
KTsKICAgICByZXR1cm4gZXZlbnQoKS0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudCgpLT5kZWZh
dWx0UHJldmVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VF
dmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggZDU5MmNh
OTg3OTlhNDNlMmQyYjE2NjZkNTk5YzAxNzE2YzY5MzEyNy4uZTcwZGUzNTEzYTczMGQwYzM2ZWQ0
ODExMGY2YjhkNzEzYTc5YzFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjYy
LDggKzI2Miw4IEBAIE1vdXNlRXZlbnQqIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpldmVu
dCgpIGNvbnN0CiBib29sIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50
KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKICAgICBpZiAoaXNTeW50aGV0
aWNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3Vz
ZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksICBkaXNwYXRjaGVyLT5lbnN1cmVF
dmVudFBhdGgoZXZlbnQoKSkpOwotICAgICAgICByZXR1cm4gZGlzcGF0Y2hlci0+ZGlzcGF0Y2hF
dmVudChldmVudCgpKTsKKyAgICAgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3VzZUV2
ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksICBkaXNwYXRjaGVyLT5lbnN1cmVFdmVu
dFBhdGgoKSk7CisgICAgICAgIHJldHVybiBkaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwogICAgIH0K
IAogICAgIGlmIChkaXNwYXRjaGVyLT5ub2RlKCktPmRpc2FibGVkKCkpIC8vIERvbid0IGV2ZW4g
c2VuZCBET00gZXZlbnRzIGZvciBkaXNhYmxlZCBjb250cm9scy4uCkBAIC0yNzUsOSArMjc1LDkg
QEAgYm9vbCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERp
c3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnMKICAgICBBU1NFUlQoIWV2ZW50KCktPnRhcmdldCgp
IHx8IGV2ZW50KCktPnRhcmdldCgpICE9IGV2ZW50KCktPnJlbGF0ZWRUYXJnZXQoKSk7CiAKICAg
ICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50KCktPnJlbGF0ZWRUYXJnZXQoKTsK
LSAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvck1vdXNlRXZlbnQoZGlzcGF0Y2hlci0+bm9k
ZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgpKSk7Cisg
ICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3VzZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUo
KSwgKmV2ZW50KCksICBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudFBhdGgoKSk7CiAKLSAgICBkaXNw
YXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOworICAgIGRpc3BhdGNoZXItPmRpc3BhdGNo
KCk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8
IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIAogICAgIGlmIChldmVudCgpLT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgZXZlbnQoKS0+ZGV0YWlsKCkgIT0gMikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188999</attachid>
            <date>2013-02-18 23:13:08 -0800</date>
            <delta_ts>2013-02-18 23:59:18 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-109898-20130219160930.patch</filename>
            <type>text/plain</type>
            <size>24917</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiOWEzNzBjMjgzODUy
YmM2NGI2MGU5NjU1N2JkYjAwYzgyOWNlZi4uNzNjMWQ5MmI0ZTcyNDA0MmQ2YzgzM2MwMTZjMjcy
NjM4MzJiMDY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAyLTE4ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIEV2ZW50RGlzcGF0
Y2hlciB0YWtlIGFuIEV2ZW50IG9iamVjdCBpbiBpdHMgY29uc3RydWN0b3IuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4OTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgUmUtbGFuZGluZyByMTQzMTQ1
LCB3aGljaCBjYXVzZWQgYSBjcmFzaCB3aGVuIGRlbHRhWCBhbmQgZGVsdGFZIG9mIGEgUGxhdGZv
cm1XaGVlbEV2ZW50IGFyZSBib3RoIHplcm8uCisKKyAgICAgICAgRml4ZWQgYSBjcmFzaCBieSBl
YXJseSBleGl0aW5nIGluIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiwgUGFz
c1JlZlB0cjxFdmVudERpc3BhdGNoZXIqPikKKyAgICAgICAgaWYgbWVkaWF0b3IncyBldmVudCgp
IHJldHVybnMgbnVsbC4KKworICAgICAgICBBbHNvIEFkZGVkIGEgbGF5b3V0IHRlc3QgdG8gY2F0
Y2ggdGhpcyBraW5kIG9mIGNyYXNoIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgVGVzdDogZmFz
dC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC13aXRoLWRlbHRhLXplcm8tY3Jhc2guaHRtbAor
CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIGRv
bS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6RXZl
bnREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJl
RXZlbnRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hT
aW11bGF0ZWRDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBy
ZVByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50QXRDYXB0dXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50QXRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0
Y2hlci5oOgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50RGlzcGF0Y2hlcjo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
OmV2ZW50KToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpCbHVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvY3VzSW5FdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3Bh
dGNoRXZlbnQpOgorICAgICAgICAqIGRvbS9HZXN0dXJlRXZlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2VzdHVyZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAg
ICAgICogZG9tL01vdXNlRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudERp
c3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIGRvbS9XaGVlbEV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNw
YXRjaEV2ZW50KToKKyAgICAgICAgQXNzZXJ0IGV2ZW50KCkgcmF0aGVyIHRoYW4gYW4gZWFybHkg
ZXhpdCBzaW5jZSB0aGlzIGNvZGUgcGF0aCBzaG91bGQgYmUgaGl0IG9ubHkgd2hlbiBldmVudCgp
IGlzIG5vbi1udWxsLgorCiAyMDEzLTAyLTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIE1lcmdlIGhhbmRsZVNwZWNpYWxDaGlsZCBpbnRvIGxheW91dEJsb2Nr
Q2hpbGRyZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVk
aWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAK
aW5kZXggYTMwOWM2OTU3MDQ0MjY1ZDBiNTNhMDM3OTJmZmI5NTQyMzNhZTUwNy4uYTNjYTRjOGQ2
YjFjNTc2NmY3NWIzZjRiM2M1NzAyY2JjMzA3MjA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKQEAgLTUwLDcgKzUwLDggQEAgRXZlbnREaXNwYXRj
aE1lZGlhdG9yOjpFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiAKIGJvb2wgRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0
Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICByZXR1cm4gZGlzcGF0Y2hlci0+ZGlzcGF0
Y2hFdmVudChtX2V2ZW50LmdldCgpKTsKKyAgICBBU1NFUlQobV9ldmVudC5nZXQoKSA9PSBkaXNw
YXRjaGVyLT5ldmVudCgpKTsKKyAgICByZXR1cm4gZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVy
LmNwcAppbmRleCA0YzZjODM1M2M4ODAyYWNiNzljN2QxMDMzZTc4ODUwNGU5ZjQ4YTg4Li5mZWIw
MTdlMjI5NTNhMGE1MmViMGEyNjFjM2IyNzVmMzFhNDExODRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNTAsMjggKzUwLDMyIEBAIHN0YXRpYyBIYXNoU2V0PE5v
ZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOwogYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3Bh
dGNoTWVkaWF0b3I+IG1lZGlhdG9yKQogewogICAgIEFTU0VSVCghTm9FdmVudERpc3BhdGNoQXNz
ZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0KLSAgICBFdmVudERpc3BhdGNo
ZXIgZGlzcGF0Y2hlcihub2RlKTsKKyAgICBpZiAoIW1lZGlhdG9yLT5ldmVudCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlLCBtZWRp
YXRvci0+ZXZlbnQoKSk7CiAgICAgcmV0dXJuIG1lZGlhdG9yLT5kaXNwYXRjaEV2ZW50KCZkaXNw
YXRjaGVyKTsKIH0KIAotRXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9k
ZSkKK0V2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQogICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBtX2V2ZW50KGV2ZW50
KQogICAgICwgbV9ldmVudFBhdGhJbml0aWFsaXplZChmYWxzZSkKICNpZm5kZWYgTkRFQlVHCiAg
ICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKICNlbmRpZgogewogICAgIEFTU0VSVChub2Rl
KTsKKyAgICBBU1NFUlQobV9ldmVudC5nZXQoKSk7CisgICAgQVNTRVJUKCFtX2V2ZW50LT50eXBl
KCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUgY2FuIGNyZWF0ZSBhbiBldmVudCB3aXRo
IGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4KICAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVu
dCgpLT52aWV3KCk7CiB9CiAKLUV2ZW50UGF0aCYgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVu
dFBhdGgoRXZlbnQqIGV2ZW50KQorRXZlbnRQYXRoJiBFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2
ZW50UGF0aCgpCiB7CiAgICAgaWYgKG1fZXZlbnRQYXRoSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJl
dHVybiBtX2V2ZW50UGF0aDsKICAgICBtX2V2ZW50UGF0aEluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aChtX25vZGUuZ2V0KCksIGV2ZW50
LCBtX2V2ZW50UGF0aCk7CisgICAgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVFdmVudFBhdGgo
bV9ub2RlLmdldCgpLCBtX2V2ZW50LmdldCgpLCBtX2V2ZW50UGF0aCk7CiAgICAgcmV0dXJuIG1f
ZXZlbnRQYXRoOwogfQogCkBAIC05NSwxNDAgKzk5LDEzOCBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiBub2RlLCBFdmVudCogdW5kZXJseWluZ0V2
ZW50LAogICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQobm9kZSk7CiAK
ICAgICBpZiAobW91c2VFdmVudE9wdGlvbnMgPT0gU2VuZE1vdXNlT3ZlclVwRG93bkV2ZW50cykK
LSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91
c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwgbm9kZS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7CisgICAgICAgIEV2ZW50RGlz
cGF0Y2hlcihub2RlLCBTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm1v
dXNlb3ZlckV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5n
RXZlbnQpKS5kaXNwYXRjaCgpOwogCiAgICAgaWYgKG1vdXNlRXZlbnRPcHRpb25zICE9IFNlbmRO
b0V2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2lt
dWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgbm9k
ZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7CisgICAgICAg
IEV2ZW50RGlzcGF0Y2hlcihub2RlLCBTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1
bmRlcmx5aW5nRXZlbnQpKS5kaXNwYXRjaCgpOwogICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCB2
aXN1YWxPcHRpb25zID09IFNob3dQcmVzc2VkTG9vayk7CiAgICAgaWYgKG1vdXNlRXZlbnRPcHRp
b25zICE9IFNlbmROb0V2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3Bh
dGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkp
OworICAgICAgICBFdmVudERpc3BhdGNoZXIobm9kZSwgU2ltdWxhdGVkTW91c2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIHVuZGVybHlpbmdFdmVudCkpLmRpc3BhdGNoKCk7CiAgICAgbm9kZS0+c2V0QWN0aXZl
KGZhbHNlKTsKIAogICAgIC8vIGFsd2F5cyBzZW5kIGNsaWNrCi0gICAgRXZlbnREaXNwYXRjaGVy
KG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5
aW5nRXZlbnQpKTsKKyAgICBFdmVudERpc3BhdGNoZXIobm9kZSwgU2ltdWxhdGVkTW91c2VFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZh
dWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKS5kaXNwYXRjaCgpOwogCiAgICAgZ05vZGVzRGlz
cGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKIH0KIAotYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCitib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goKQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NF
UlQoIW1fZXZlbnREaXNwYXRjaGVkKTsKICAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7CiAj
ZW5kaWYKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgQ2hpbGROb2Rl
c0xhenlTbmFwc2hvdDo6dGFrZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKIAotICAgIGV2ZW50
LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRS
dWxlcyhtX25vZGUuZ2V0KCkpKTsKKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdl
dGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKICAg
ICBBU1NFUlQoIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlk
ZGVuKCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwotICAgIEFTU0VSVCghZXZlbnQt
PnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50
IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgotICAgIGVuc3VyZUV2ZW50UGF0aChl
dmVudC5nZXQoKSk7Ci0gICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0V2ZW50Q29udGV4dChl
dmVudC5nZXQoKSwgbV9ub2RlLmdldCgpLCB0b3BFdmVudENvbnRleHQoKSk7Ci0gICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbERpc3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqZXZlbnQsIHdpbmRvd0V2
ZW50Q29udGV4dC53aW5kb3coKSwgbV9ub2RlLmdldCgpLCBtX2V2ZW50UGF0aCk7CisgICAgQVNT
RVJUKG1fZXZlbnQtPnRhcmdldCgpKTsKKyAgICBlbnN1cmVFdmVudFBhdGgoKTsKKyAgICBXaW5k
b3dFdmVudENvbnRleHQgd2luZG93RXZlbnRDb250ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5n
ZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKm1fZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dC53aW5kb3co
KSwgbV9ub2RlLmdldCgpLCBtX2V2ZW50UGF0aCk7CiAKICAgICB2b2lkKiBwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdDsKLSAgICBpZiAoZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoZXZlbnQs
IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQot
ICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKGV2ZW50LCB3aW5kb3dFdmVudENv
bnRleHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgICAgICBpZiAoZGlzcGF0Y2hF
dmVudEF0VGFyZ2V0KGV2ZW50KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAg
ICAgIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQpOwot
ICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhldmVudCwgcHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXJSZXN1bHQpOworICAgIGlmIChkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKKyAgICAgICAgaWYgKGRp
c3BhdGNoRXZlbnRBdENhcHR1cmluZyh3aW5kb3dFdmVudENvbnRleHQpID09IENvbnRpbnVlRGlz
cGF0Y2hpbmcpCisgICAgICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkgPT0gQ29u
dGludWVEaXNwYXRjaGluZykKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50QXRCdWJibGlu
Zyh3aW5kb3dFdmVudENvbnRleHQpOworICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhwcmVE
aXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBl
dmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAgICAvLyBv
dXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRv
d0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7
CisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Cisg
ICAgbV9ldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKIAotICAgIHJldHVybiAhZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgdm9pZCom
IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2Vzcyh2b2lkKiYg
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCiB7CiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0
IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMg
Z2V0IGEgY3JhY2suCi0gICAgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUt
PnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICByZXR1cm4gKG1fZXZl
bnRQYXRoLmlzRW1wdHkoKSB8fCBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURp
c3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKKyAgICBwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQo
KSk7CisgICAgcmV0dXJuIChtX2V2ZW50UGF0aC5pc0VtcHR5KCkgfHwgbV9ldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsK
IH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2
ZW50Q29udGV4dCYgd2luZG93RXZlbnRDb250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoV2luZG93
RXZlbnRDb250ZXh0JiB3aW5kb3dFdmVudENvbnRleHQpCiB7CiAgICAgLy8gVHJpZ2dlciBjYXB0
dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgb3Vy
IHdheSBkb3duLgotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhB
U0UpOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7
CiAKLSAgICBpZiAod2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpKSAmJiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYgKHdpbmRvd0V2ZW50
Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKSAmJiBtX2V2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSBtX2V2ZW50UGF0aC5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CiAg
ICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gKm1fZXZlbnRQYXRoW2ld
OwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkg
ewotICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCisgICAgICAgICAgICBpZiAobV9l
dmVudC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICBtX2V2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwot
ICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAg
ICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAgbV9ldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICAgICAgZXZlbnRD
b250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBpZiAobV9l
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9uZURpc3Bh
dGNoaW5nOwogICAgIH0KIAogICAgIHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1p
bmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2lubGluZSBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkK
IHsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBtX2V2
ZW50UGF0aFswXS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiBl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURp
c3BhdGNoaW5nOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
CisgICAgbV9ldmVudFBhdGhbMF0tPmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwor
ICAgIHJldHVybiBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVEaXNwYXRjaGlu
ZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93Q29udGV4dCkKK2lubGlu
ZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dEF0QnViYmxpbmcoV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dDb250ZXh0KQogewotICAgIGlm
IChldmVudC0+YnViYmxlcygpICYmICFldmVudC0+Y2FuY2VsQnViYmxlKCkpIHsKKyAgICBpZiAo
bV9ldmVudC0+YnViYmxlcygpICYmICFtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkgewogICAgICAg
ICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgYm90
dG9tIGFuZCB3b3JraW5nIG91ciB3YXkgdXAuCi0gICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZXZlbnRQ
YXRoLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gKm1fZXZlbnRQ
YXRoW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFz
VGFyZ2V0KCkpCi0gICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFU
X1RBUkdFVCk7CisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0
RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwotICAgICAgICAgICAgZXZlbnRDb250
ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAg
ICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsK
KyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgp
KTsKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBtX2V2
ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNo
aW5nOwogICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMo
ZXZlbnQuZ2V0KCkpOworICAgICAgICB3aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1f
ZXZlbnQuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0K
IAotaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3Mo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVz
dWx0KQoraW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nl
c3Modm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCiB7Ci0gICAgZXZlbnQtPnNl
dFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVz
KG1fbm9kZS5nZXQoKSkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIG1fZXZlbnQtPnNldFRhcmdldChFdmVudFJldGFy
Z2V0ZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwor
ICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQ
aGFzZSgwKTsKIAogICAgIC8vIFBhc3MgdGhlIGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXIgdG8gdGhlIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlci4KLSAgICBtX25vZGUtPnBv
c3REaXNwYXRjaEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXJSZXN1bHQpOworICAgIG1fbm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQu
Z2V0KCksIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKIAogICAgIC8vIENhbGwgZGVm
YXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9m
IHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNo
IGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlv
biBkZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlmICghbV9l
dmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7
CiAgICAgICAgIC8vIE5vbi1idWJibGluZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZhdWx0IGV2
ZW50IGhhbmRsZXIsIHRoZSBvbmUgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9kZS0+ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkK
KyAgICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAg
ICAgICBBU1NFUlQoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgIGlmICht
X2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAv
LyBGb3IgYnViYmxpbmcgZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhl
IHNhbWUgdGFyZ2V0cyBpbiB0aGUKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxp
bmcgcGhhc2UuCi0gICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAgIGlmICht
X2V2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9ldmVudFBh
dGguc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBtX2V2ZW50UGF0aFtpXS0+bm9kZSgpLT5kZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCkpOwotICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgICAgICAgICBtX2V2ZW50UGF0aFtpXS0+bm9kZSgpLT5kZWZhdWx0RXZl
bnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggOTkyZWFk
ODJkM2E2YWUyZjJhN2FhNTFkYTVlMDFjYmQyM2U5NTk2OS4uZjAwMmY3NTk4MTM3YjFmNzQzMWQ5
ZWMzZWQ5ODNjZGZiNDQ3ZWViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTcsMjIgKzU4LDI0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSosIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNp
bXVsYXRlZENsaWNrTW91c2VFdmVudE9wdGlvbnMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9u
cyk7CiAKLSAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIE5v
ZGUqIG5vZGUoKSBjb25zdDsKLSAgICBFdmVudFBhdGgmIGVuc3VyZUV2ZW50UGF0aChFdmVudCop
OworICAgIGJvb2wgZGlzcGF0Y2goKTsKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlLmdldCgpOyB9CisgICAgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVu
dC5nZXQoKTsgfQorICAgIEV2ZW50UGF0aCYgZW5zdXJlRXZlbnRQYXRoKCk7CiAKIHByaXZhdGU6
Ci0gICAgRXZlbnREaXNwYXRjaGVyKE5vZGUqKTsKKyAgICBFdmVudERpc3BhdGNoZXIoTm9kZSos
IFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29u
dGV4dCgpOwogCi0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJl
UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50Piwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdENh
cHR1cmluZyhQYXNzUmVmUHRyPEV2ZW50PiwgV2luZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgRXZl
bnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxF
dmVudD4pOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0QnVi
YmxpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIHZvaWQg
ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+LCB2b2lkKiBwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBk
aXNwYXRjaEV2ZW50UHJlUHJvY2Vzcyh2b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1
bHQpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVy
aW5nKFdpbmRvd0V2ZW50Q29udGV4dCYpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24g
ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBk
aXNwYXRjaEV2ZW50QXRCdWJibGluZyhXaW5kb3dFdmVudENvbnRleHQmKTsKKyAgICB2b2lkIGRp
c3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyh2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3Vs
dCk7CiAKICAgICBFdmVudFBhdGggbV9ldmVudFBhdGg7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZTsKKyAgICBSZWZQdHI8RXZlbnQ+IG1fZXZlbnQ7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92
aWV3OwogICAgIGJvb2wgbV9ldmVudFBhdGhJbml0aWFsaXplZDsKICNpZm5kZWYgTkRFQlVHCkBA
IC04MCwxMSArODMsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgTm9kZSogRXZl
bnREaXNwYXRjaGVyOjpub2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOwot
fQotCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCmluZGV4IDE1YmE0MDFj
YTE1ZTAyNDZhYzA0YmRhNTQxMTEzODJhZTcwNjllNWUuLjQ3M2Y3MWUwNjFlN2Q0NDIxOWZjNThj
NmZlMTQ5MGZiODI2MGE4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAKQEAgLTc3LDcg
Kzc3LDcgQEAgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzRXZlbnREaXNwYXRjaE1l
ZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNFdmVudD4gZm8KIAogYm9vbCBGb2N1c0V2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNv
bnN0CiB7Ci0gICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNo
ZXItPm5vZGUoKSwgKmV2ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgp
KSk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KGRpc3BhdGNoZXIt
Pm5vZGUoKSwgKmV2ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aCgpKTsKICAgICBy
ZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwog
fQogCkBAIC05Myw3ICs5Myw3IEBAIEJsdXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OkJsdXJFdmVu
dERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxGb2N1c0V2ZW50PiBmb2N1CiAKIGJvb2wgQmx1
ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRp
c3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2
ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50
UGF0aChldmVudCgpKSk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50
KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0
aCgpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRp
c3BhdGNoZXIpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hN
ZWRpYXRvcjo6Rm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEZvY3VzRXZl
bnQKIAogYm9vbCBGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2
ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBFdmVudFJldGFyZ2V0ZXI6
OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0
Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2ZW50KCkpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFk
anVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hl
ci0+ZW5zdXJlRXZlbnRQYXRoKCkpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBGb2N1
c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3Io
UGFzc1JlZlB0cjxGb2N1c0V2ZQogCiBib29sIEZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAg
ICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgp
LCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2ZW50KCkpKTsKKyAgICBF
dmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAq
ZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKCkpOwogICAgIHJldHVybiBFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0dlc3R1cmVFdmVudC5jcHAKaW5kZXggMzUzNjYwNzQ1NmE0MjZkOWYwZjgyNzQ0NDk0
YTdlZjJjZGQ4ZjZjZi4uZTA2NzFmODlhYjEzNDFlNmI4ZTVhYmQzOGFlMGYwMTE0NGMyMWE0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBib29s
IEdlc3R1cmVFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRj
aGVyKiBkaXNwYXRjaGVyKSBjbwogICAgIGlmIChkaXNwYXRjaGVyLT5ub2RlKCktPmRpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVu
dChldmVudCgpKTsKKyAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwogICAgIEFTU0VSVCghZXZl
bnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKICAgICByZXR1cm4gZXZlbnQoKS0+ZGVmYXVsdEhh
bmRsZWQoKSB8fCBldmVudCgpLT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAKaW5kZXggZDU5MmNhOTg3OTlhNDNlMmQyYjE2NjZkNTk5YzAxNzE2YzY5MzEy
Ny4uZTcwZGUzNTEzYTczMGQwYzM2ZWQ0ODExMGY2YjhkNzEzYTc5YzFjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmNwcApAQCAtMjYyLDggKzI2Miw4IEBAIE1vdXNlRXZlbnQqIE1vdXNlRXZl
bnREaXNwYXRjaE1lZGlhdG9yOjpldmVudCgpIGNvbnN0CiBib29sIE1vdXNlRXZlbnREaXNwYXRj
aE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29u
c3QKIHsKICAgICBpZiAoaXNTeW50aGV0aWNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgRXZlbnRS
ZXRhcmdldGVyOjphZGp1c3RGb3JNb3VzZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50
KCksICBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudFBhdGgoZXZlbnQoKSkpOwotICAgICAgICByZXR1
cm4gZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsKKyAgICAgICAgRXZlbnRSZXRh
cmdldGVyOjphZGp1c3RGb3JNb3VzZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCks
ICBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudFBhdGgoKSk7CisgICAgICAgIHJldHVybiBkaXNwYXRj
aGVyLT5kaXNwYXRjaCgpOwogICAgIH0KIAogICAgIGlmIChkaXNwYXRjaGVyLT5ub2RlKCktPmRp
c2FibGVkKCkpIC8vIERvbid0IGV2ZW4gc2VuZCBET00gZXZlbnRzIGZvciBkaXNhYmxlZCBjb250
cm9scy4uCkBAIC0yNzUsOSArMjc1LDkgQEAgYm9vbCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnMKICAgICBB
U1NFUlQoIWV2ZW50KCktPnRhcmdldCgpIHx8IGV2ZW50KCktPnRhcmdldCgpICE9IGV2ZW50KCkt
PnJlbGF0ZWRUYXJnZXQoKSk7CiAKICAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2
ZW50KCktPnJlbGF0ZWRUYXJnZXQoKTsKLSAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvck1v
dXNlRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXItPmVuc3Vy
ZUV2ZW50UGF0aChldmVudCgpKSk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3Vz
ZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksICBkaXNwYXRjaGVyLT5lbnN1cmVF
dmVudFBhdGgoKSk7CiAKLSAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwor
ICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoKCk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVu
dCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIAog
ICAgIGlmIChldmVudCgpLT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgZXZl
bnQoKS0+ZGV0YWlsKCkgIT0gMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVl
bEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAppbmRleCBkZmM0
NWQxZmU2ZGZlZGU2ZjA1YjhkNTQ1NmI2Y2I5NWNjNWY1YTBlLi5kMDExNjhkZDNkZWE0NmEzYjlj
OTM1ZTNhNTY3ZTk4YjdiYjRhNzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hl
ZWxFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCkBAIC0x
MzgsOSArMTM4LDcgQEAgV2hlZWxFdmVudCogV2hlZWxFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2
ZW50KCkgY29uc3QKIAogYm9vbCBXaGVlbEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hF
dmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFldmVu
dCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAgIEFTU0VSVChldmVudCgpKTsKICAgICBy
ZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpICYm
ICFldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWIzOTU2NGIyYzY0OTE5
NTg3MWM1Y2U3NmQ2NzljN2JmMWJiYjhlMy4uNDJkNDQxZjQzM2U3YThhMGZhNDJlODQ5ZTIxNzYw
ODQzOGFiMzgzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTE4ICBIYXlhdG8gSXRv
ICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIEV2ZW50RGlzcGF0Y2hlciB0
YWtlIGFuIEV2ZW50IG9iamVjdCBpbiBpdHMgY29uc3RydWN0b3IuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13
aGVlbGV2ZW50LXdpdGgtZGVsdGEtemVyby1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtd2l0aC1kZWx0YS16ZXJvLWNy
YXNoLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAyLTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEFkZCBhIGZsYWt5IGNyYXNoIGV4cGVjdGF0aW9uIHRvIHZpZGVv
LWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS5odG1sIG9uIE1hYyBwZXIgYnVnIDExMDE3My4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQt
d2l0aC1kZWx0YS16ZXJvLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtd2l0aC1kZWx0YS16ZXJvLWNyYXNoLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NmU4Zjk3M2RiZTk2NDVhZmQ2NmQ5MjM4NmFhZDZmNWE0NjI0MTI5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxl
dmVudC13aXRoLWRlbHRhLXplcm8tY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
RW5zdXJlcyB0aGF0IGEgbW91c2Ugc2Nyb2xsaW5nIHdpdGggKGRlbHRhWD0wLCBkZWx0YVk9MCkg
ZG9lc24ndCBjcmFzaCB0aGUgYnJvd3Nlci4KKworUGFzc2VzIGlmIGRvZXNuJ3QgY3Jhc2guCisK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVu
dC13aXRoLWRlbHRhLXplcm8tY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Bs
YXRmb3JtLXdoZWVsZXZlbnQtd2l0aC1kZWx0YS16ZXJvLWNyYXNoLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDg2ZjI0MmFmNGQ2ZjliMDYzMDViYTY2YzQ4ZGMwY2ZhZWQwYjFmZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtd2l0aC1kZWx0
YS16ZXJvLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQor
ICAgICAgICByZXR1cm47CisgICAgdmFyIGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YXJlYScpOworICAgIHZhciB4ID0gYXJlYS5vZmZzZXRMZWZ0ICsgYXJlYS5vZmZzZXRXaWR0aCAv
IDI7CisgICAgdmFyIHkgPSBhcmVhLm9mZnNldFRvcCArIGFyZWEub2Zmc2V0SGVpZ2h0IC8gMjsK
KyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZVNjcm9sbEJ5KDAsIDApOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoKSI+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5FbnN1cmVzIHRoYXQgYSBtb3VzZSBz
Y3JvbGxpbmcgd2l0aCAoZGVsdGFYPTAsIGRlbHRhWT0wKSBkb2Vzbid0IGNyYXNoIHRoZSBicm93
c2VyLgorICAgIDxwPlBhc3NlcyBpZiBkb2Vzbid0IGNyYXNoLgorICAgIDxkaXYgaWQ9ImFyZWEi
IHN0eWxlPSJ3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHgiPgorICAgIDwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>