<?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>81462</bug_id>
          
          <creation_ts>2012-03-17 18:05:48 -0700</creation_ts>
          <short_desc>[chromium] Implement fling-by-wheel on compositor thread</short_desc>
          <delta_ts>2012-03-19 16:45:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>81479</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>davemoore</cc>
    
    <cc>enne</cc>
    
    <cc>rjkroege</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>581395</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-17 18:05:48 -0700</bug_when>
    <thetext>[chromium] Implement fling-by-wheel on compositor thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581396</commentid>
    <comment_count>1</comment_count>
      <attachid>132475</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-17 18:06:51 -0700</bug_when>
    <thetext>Created attachment 132475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581399</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-17 18:09:10 -0700</bug_when>
    <thetext>This is a sketch (completely untested) of fling-by-sequence-of-wheel events on the compositor thread.  There&apos;s one FIXME for behavior in WebCompositorInputHandlerImpl::scrollBy() that&apos;ll require copying the wheel fling parameters back to the main thread if we start a fling on the compositor thread but hit a non-fast scrollable area.  I&apos;ll start working on hooking that up once the main thread fling animation stuff is in place.  The only things we really need to get back to the main thread are the start time of the fling and the mouse position, so it&apos;s just 1 double and 2 ints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581411</commentid>
    <comment_count>3</comment_count>
      <attachid>132478</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-17 21:18:30 -0700</bug_when>
    <thetext>Created attachment 132478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582069</commentid>
    <comment_count>4</comment_count>
      <attachid>132478</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-19 12:38:37 -0700</bug_when>
    <thetext>Comment on attachment 132478
Patch

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

Pretty cool. Bikeshed comments as usual.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h:81
&gt; +    // Request a new frame with updated animation state. Typically called by CCInputHandler::animate().

Whatabout
 // Request another callback to InputHandler::animate()

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:171
&gt; +WebCompositorInputHandlerImpl::EventDisposition WebCompositorInputHandlerImpl::handleInputEventInternal(const WebInputEvent&amp; event)

the &apos;internal&apos; suffix in here is a bit generic. Can we either comment the function explaining its role versus the outer one, or tweak its naming so its more obvious? Nothing jumps to mind, so if I was here, I&apos;d do a //

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:178
&gt; +    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));

iirw, the mock is going to verify all these during ~Test. The way this test is written, it looks like its designed for immediate verification --- we should either force mock verification [I know theres a way, I just forget how] or put all the expectations up front so that its obvious that they&apos;re all verified together.

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:207
&gt; +    // Since we didn&apos;t handle the event, the caller shouldn&apos;t send us any Update/End messages.

was there supposed to be something here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582071</commentid>
    <comment_count>5</comment_count>
      <attachid>132478</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 12:40:34 -0700</bug_when>
    <thetext>Comment on attachment 132478
Patch

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

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:-252
&gt; -    // GestureScrollEnd with non-zero velocity (deltaX/Y) signals start of Fling.
&gt; -    if (!gestureEvent.deltaX &amp;&amp; !gestureEvent.deltaY) {
&gt; -        m_client-&gt;didHandleInputEvent();
&gt; -        return true;
&gt; -    }

Was this just vestigial and GestureFlingStart is the only way fling gestures start these days?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582086</commentid>
    <comment_count>6</comment_count>
      <attachid>132478</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 12:58:20 -0700</bug_when>
    <thetext>Comment on attachment 132478
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h:81
&gt;&gt; +    // Request a new frame with updated animation state. Typically called by CCInputHandler::animate().
&gt; 
&gt; Whatabout
&gt;  // Request another callback to InputHandler::animate()

Good idea, done

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:171
&gt;&gt; +WebCompositorInputHandlerImpl::EventDisposition WebCompositorInputHandlerImpl::handleInputEventInternal(const WebInputEvent&amp; event)
&gt; 
&gt; the &apos;internal&apos; suffix in here is a bit generic. Can we either comment the function explaining its role versus the outer one, or tweak its naming so its more obvious? Nothing jumps to mind, so if I was here, I&apos;d do a //

Added a comment to the header, lemme know if it&apos;s any clearer

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:-252
&gt;&gt; -    }
&gt; 
&gt; Was this just vestigial and GestureFlingStart is the only way fling gestures start these days?

This was part of the old plan to have GestureScrollEnd trigger flings. The chromium-side code to generate this event never landed, and it conflicts with how Android uses these events.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:178
&gt;&gt; +    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));
&gt; 
&gt; iirw, the mock is going to verify all these during ~Test. The way this test is written, it looks like its designed for immediate verification --- we should either force mock verification [I know theres a way, I just forget how] or put all the expectations up front so that its obvious that they&apos;re all verified together.

Hmmm - this stuff is tricky. Let me check with Shawn, we ran into some gremlins when trying to force expectations earlier.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:207
&gt;&gt; +    // Since we didn&apos;t handle the event, the caller shouldn&apos;t send us any Update/End messages.
&gt; 
&gt; was there supposed to be something here?

nope, this was more a comment to me explaining why there aren&apos;t cases for ScrollUpdate/ScrollEnd.  This isn&apos;t very helpful for other people reading the code though - I&apos;ll remove</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582089</commentid>
    <comment_count>7</comment_count>
      <attachid>132636</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 12:59:09 -0700</bug_when>
    <thetext>Created attachment 132636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582205</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 14:01:04 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:178
&gt; &gt; +    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));
&gt; 
&gt; iirw, the mock is going to verify all these during ~Test. The way this test is written, it looks like its designed for immediate verification --- we should either force mock verification [I know theres a way, I just forget how] or put all the expectations up front so that its obvious that they&apos;re all verified together.

I totally agree that it&apos;d be better if it were immediately verified, but I think keeping the expectations with the code that generates them isn&apos;t bad.  If you change part of the test, it&apos;s much easier to remove the relevant expectations if they&apos;re adjacent, rather than in some upfront bundle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582211</commentid>
    <comment_count>9</comment_count>
      <attachid>132636</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 14:02:39 -0700</bug_when>
    <thetext>Comment on attachment 132636
Patch

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

R=me.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:179
&gt; +            TRACE_EVENT_INSTANT2(&quot;cc&quot;, &quot;WebCompositorInputHandlerImpl::handleInput wheel scroll&quot;, &quot;deltaX&quot;, -wheelEvent.deltaX, &quot;deltaY&quot;, -wheelEvent.deltaY);

Ooh, good thinking in adding trace events in this last patch.  That&apos;ll make debugging any problems from input a lot easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582223</commentid>
    <comment_count>10</comment_count>
      <attachid>132478</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-19 14:10:03 -0700</bug_when>
    <thetext>Comment on attachment 132478
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:178
&gt;&gt;&gt; +    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));
&gt;&gt; 
&gt;&gt; iirw, the mock is going to verify all these during ~Test. The way this test is written, it looks like its designed for immediate verification --- we should either force mock verification [I know theres a way, I just forget how] or put all the expectations up front so that its obvious that they&apos;re all verified together.
&gt; 
&gt; Hmmm - this stuff is tricky. Let me check with Shawn, we ran into some gremlins when trying to force expectations earlier.

Nat and James are exactly right... In the GMock documentation (the gmock dummy guide) its explained that we should _not_ interleave EXPECT_CALL and mock calls.  I think EXPECT_CALL overrides its previous expectations and so all these previous expectations are actually not being tested.

If you guys want to keep this test as immediate verification, then we should explicitly tell mock to verify expectations in the middle of the code (and clear the expectation) using Mock::verifyAndClearExpectations.  You can find more documentation about that in the docs (specifically, the cookbook guide for gmock).  Examples of verifyAndClearExpectations can be found in LayerChromiumTest, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582230</commentid>
    <comment_count>11</comment_count>
      <attachid>132636</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 14:13:46 -0700</bug_when>
    <thetext>Comment on attachment 132636
Patch

Thanks for chiming in Shawn! I clearly had some bad assumptions about gmock.  I&apos;ll s/R+/R-/ until the test issues get sorted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582286</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 14:50:36 -0700</bug_when>
    <thetext>For the record, here&apos;s an of broken code passing one of the tests as written.

This test:

TEST_F(WebCompositorInputHandlerImplTest, gestureFlingIgnored)
{
    gesture.type = WebKit::WebInputEvent::GestureFlingStart;
    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));
    m_inputHandler-&gt;handleInputEvent(gesture);

    gesture.type = WebKit::WebInputEvent::GestureFlingCancel;
    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(false));
    m_inputHandler-&gt;handleInputEvent(gesture);
}

would pass even if handleInputEvent() was implemented as:

    if (gesture.type == WebKit::WebInputEvent::GestureFlingStart)
        return;
    if (gesture.type == WebKit::WebInputEvent::GestureFlingCancel)
        client-&gt;didNotHandleInputEvent(false);
        client-&gt;didNotHandleInputEvent(true)


even though this code is clearly buggy.  This modified test fails as expected:

TEST_F(WebCompositorInputHandlerImplTest, gestureFlingIgnored)
{
    gesture.type = WebKit::WebInputEvent::GestureFlingStart;
    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(true));
    m_inputHandler-&gt;handleInputEvent(gesture);

    testing::Mock::VerifyAndClearExpectations(&amp;m_mockClient);

    gesture.type = WebKit::WebInputEvent::GestureFlingCancel;
    EXPECT_CALL(m_mockClient, didNotHandleInputEvent(false));
    m_inputHandler-&gt;handleInputEvent(gesture);
}

I&apos;ll add Verify...() calls as appropriate through the tests and post an updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582309</commentid>
    <comment_count>13</comment_count>
      <attachid>132683</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 15:17:31 -0700</bug_when>
    <thetext>Created attachment 132683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582312</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 15:19:54 -0700</bug_when>
    <thetext>Updated to verify more aggressively.  Most tests want to verify mocks on both the WebCompositorInputHandlerClient and the CCInputHandlerClient, so I added a utility function to the fixture to set up expectations for both of these.  gestureFlingAnimate() has a section with animate() calls but no handleInputEvent() calls, so it only expects calls on the CCInputHandlerClient.  For this test I&apos;m manually calling VerifyAnd...() on that interface only.

I also renamed the mock clients to make them a bit clearer (I kept getting the mock WebCompositorInputHandlerClient and mock CCInputHandlerClient mixed up).  I think having m_mockClient mean WebCompositorInputHandlerClient makes sense, since the test is called WebCompositorInputHandlerImplTest.  The other client gets a longer name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582332</commentid>
    <comment_count>15</comment_count>
      <attachid>132683</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-19 15:33:41 -0700</bug_when>
    <thetext>Comment on attachment 132683
Patch

Yeah, as far as the mock EXPECT_CALL and verifyAndClearExpectations issue is concerned, I think this is good now. =)

Only one other thought:

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

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:203
&gt; +    verifyAndResetMocks();

If I understand the intention here, maybe we should make the enum a direct arg of verifyAndResetMocks and it probably doesn&apos;t need to be stored in the text fixture?  That might make it clearer that we&apos;re resetting mocks to the next expectation behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582382</commentid>
    <comment_count>16</comment_count>
      <attachid>132683</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 16:04:29 -0700</bug_when>
    <thetext>Comment on attachment 132683
Patch

R=me.  Thanks for fixing up the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582415</commentid>
    <comment_count>17</comment_count>
      <attachid>132708</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 16:24:26 -0700</bug_when>
    <thetext>Created attachment 132708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582416</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 16:25:40 -0700</bug_when>
    <thetext>Diff:


diff --git a/Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp b/Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp
index 0f7afd4..f8a3cfd 100644
--- a/Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp
+++ b/Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp
@@ -181,9 +181,9 @@ WebCompositorInputHandlerImpl::EventDisposition WebCompositorInputHandlerImpl::h
             m_inputHandlerClient-&gt;scrollEnd();
             return DidHandle;
         case CCInputHandlerClient::ScrollIgnored:
-            return DidNotHandle;
-        case CCInputHandlerClient::ScrollFailed:
             return DropEvent;
+        case CCInputHandlerClient::ScrollFailed:
+            return DidNotHandle;
         }
     } else if (event.type == WebInputEvent::GestureScrollBegin) {
         ASSERT(!m_gestureScrollStarted);
diff --git a/Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp b/Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp
index e2e551d..fa8247b 100644
--- a/Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp
+++ b/Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp
@@ -346,7 +346,6 @@ TEST_F(WebCompositorInputHandlerImplTest, gestureFlingAnimates)
     m_inputHandler-&gt;handleInputEvent(gesture);
 
     testing::Mock::VerifyAndClearExpectations(&amp;m_mockCCInputHandlerClient);
-
     // The first animate call should let us pick up an animation start time, but we
     // shouldn&apos;t actually move anywhere just yet. The first frame after the fling start
     // will typically include the last scroll from the gesture that lead to the scroll
@@ -372,7 +371,7 @@ TEST_F(WebCompositorInputHandlerImplTest, gestureFlingAnimates)
     // Add tests for this once it&apos;s implemented.
     EXPECT_CALL(m_mockCCInputHandlerClient, scheduleAnimation());
     EXPECT_CALL(m_mockCCInputHandlerClient, scrollBegin(testing::_, testing::_))
-        .WillOnce(testing::Return(WebCore::CCInputHandlerClient::ScrollIgnored));
+        .WillOnce(testing::Return(WebCore::CCInputHandlerClient::ScrollFailed));
     EXPECT_CALL(m_mockCCInputHandlerClient, scrollBy(testing::_)).Times(0);
     EXPECT_CALL(m_mockCCInputHandlerClient, scrollEnd()).Times(0);
     m_inputHandler-&gt;animate(10.2);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582421</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 16:28:11 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 132683 [details])
&gt; Yeah, as far as the mock EXPECT_CALL and verifyAndClearExpectations issue is concerned, I think this is good now. =)
&gt; 
&gt; Only one other thought:
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132683&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:203
&gt; &gt; +    verifyAndResetMocks();
&gt; 
&gt; If I understand the intention here, maybe we should make the enum a direct arg of verifyAndResetMocks and it probably doesn&apos;t need to be stored in the text fixture?  That might make it clearer that we&apos;re resetting mocks to the next expectation behavior.

This is not a bad idea, but the typical setup for these tests it that within a single test all of the inputs will have the same disposition (since they normally test the flow through a single logical gesture or sequence of events) so it&apos;d be pretty repetitive.  In the future if we end up resetting this then making it a param would improve things but I&apos;d prefer to do that once we need to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582442</commentid>
    <comment_count>20</comment_count>
      <attachid>132708</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-19 16:42:35 -0700</bug_when>
    <thetext>Comment on attachment 132708
Patch

Ack.  Nice catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582446</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 16:45:22 -0700</bug_when>
    <thetext>Committed r111270: &lt;http://trac.webkit.org/changeset/111270&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132475</attachid>
            <date>2012-03-17 18:06:51 -0700</date>
            <delta_ts>2012-03-17 21:18:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81462-20120317180649.patch</filename>
            <type>text/plain</type>
            <size>17240</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZGVhZGMwNzYxNWYy
N2NjMTU1NjI5MDgyMDAyNzQxODQzNWE1YS4uMTIxOTkwNDZmMzQ1NzRlNjZiNmExZGU5M2UyZTE2
YjBkZjA3MzU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTE3ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZmxpbmctYnktd2hlZWwgb24gY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEp
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxl
ci5oOgorICAgICAgICAoQ0NJbnB1dEhhbmRsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dhcCk6CisK
IDIwMTItMDMtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAK
ICAgICAgICAgRW5hYmxlIGFuaW1WYWwgc3VwcG9ydCBmb3IgU1ZHTnVtYmVyT3B0aW9uYWxOdW1i
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzU3OTFiMmY4ODA3YWE1ZGQ5NTBjMDFj
NTRlODY4ZmNkNGFhNjFmNS4uMzU5MjFmMmNhYmUzY2RkZTE3MGUyYjI3ZDA0ZjIwOTZlMDZmNzky
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMy0x
NyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gSW1wbGVtZW50IGZsaW5nLWJ5LXdoZWVsIG9uIGNvbXBvc2l0b3IgdGhyZWFkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTQ2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlu
cHV0RXZlbnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjYW5jZWxDdXJyZW50RmxpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkpOgorICAgICAg
ICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgorICAgICAgICAoV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGwpOgorICAgICAgICAqIHRlc3RzL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsVGVzdC5jcHA6CisKIDIwMTItMDMtMTYgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVuaWZ5IHRoZSBkcmF3
aW5nIGxvZ2ljIGZvciBkaWZmZXJlbnQgbGF5ZXIgdHlwZXMgdGhhdCBvdXRwdXQgdGV4dHVyZXMg
dG8gdGhlIGNvbXBvc2l0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDAzMWQ3ZGM1
MDFkOWY3MzZhMzc2YTkzNWIzZGUyMjQ0NmJlNjk1ZjEuLjExZDRjMjQyZGIwZTkzN2EwNmQ3MWY5
ODk2NTczNmI5NzYyN2E0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtODAsNiAr
ODAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFj
dGl2ZUdlc3R1cmVBbmltYXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSA9IDA7
CiAKKyAgICAvLyBSZXF1ZXN0IGEgbmV3IGZyYW1lIHdpdGggdXBkYXRlZCBhbmltYXRpb24gc3Rh
dGUuIFR5cGljYWxseSBjYWxsZWQgYnkgQ0NJbnB1dEhhbmRsZXI6OmFuaW1hdGUoKS4KKyAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBD
Q0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xp
ZW50KCkgeyB9CkBAIC05Miw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0lucHV0
SGFuZGxlcigpIHsgfQogCiAgICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoZG91YmxlIG1vbm90b25pY1RpbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkgPSAwOwogCiBwcm90
ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXIoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAKaW5kZXggZWJlMDZmNTEwZTk2ZDVkMDdkN2Q3MGY3ZTYzYzU5MzY0NWE2
NGQ0NC4uZGQyZDQyYTQ3MTdhYWEwZWZhNWJhY2M4YTNjMjlmMjZiMDI0ZGI4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTE4MSw2ICsxODEsMTEgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBY3RpdmVHZXN0dXJlQW4KICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25J
bXBsVGhyZWFkKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2NoZWR1bGVBbmlt
YXRpb24oKQoreworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwor
fQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcg
dG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggM2JiN2QzZGUxNDEzNmVkYmJjOWYxOWVk
Zjg1MDQ3MjQzZGZiYmFhMy4uYjI5ODNmZjE3N2EzNzYyNTVmNzJkNWQ1ZDZjNjczNjhiNDdiMmJi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNzYsNiArNzYsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7
IH0KICAgICAvLyBUbyBjbGVhciBhbiBhY3RpdmUgYW5pbWF0aW9uLCBwYXNzIG51bGxwdHIuCiAg
ICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRp
b24oKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDMyN2Q5YmUwYjEy
MGZiOWVmZGVmZjgwNTMxODgwNTMzMDZhYmRhNGIuLmUxNjc1MjIzYzU0ODA3N2JmNDBjYmJhYjNk
ZmViZDlmNmIyYjgyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC01NTAsNyAr
NTUwLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dhcCgp
CiAgICAgZG91YmxlIG1vbm90b25pY1RpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKICAgICBkb3VibGUgd2FsbENsb2NrVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAKLSAgICBtX2lu
cHV0SGFuZGxlck9uSW1wbFRocmVhZC0+d2lsbERyYXcobW9ub3RvbmljVGltZSk7CisgICAgbV9p
bnB1dEhhbmRsZXJPbkltcGxUaHJlYWQtPmFuaW1hdGUobW9ub3RvbmljVGltZSk7CiAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+YW5pbWF0ZShtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lKTsK
ICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsLmNwcAppbmRleCBiZjhmZjk0MWQ0ZWZlYjZkMDljODg4ODVlNzkwZjdkMjBiZDA4OTAwLi4z
NmZmOTFmOGY5N2ZkYWVjMGI0YzkxYTJhN2QzZTc5NzRiY2FhZDliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuY3BwCkBAIC0xNTQsMjEgKzE1NCwzMSBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY2xpZW50
KTsKIAorICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9u
IGRpc3Bvc2l0aW9uID0gaGFuZGxlSW5wdXRFdmVudEludGVybmFsKGV2ZW50KTsKKyAgICBzd2l0
Y2ggKGRpc3Bvc2l0aW9uKSB7CisgICAgY2FzZSBEaWRIYW5kbGU6CisgICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAgY2FzZSBEaWROb3RIYW5kbGU6CisgICAgICAg
IG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyogc2VuZFRvV2lkZ2V0ICov
KTsKKyAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlu
cHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKKyAgICB9Cit9CisKK1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwoY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpCit7CiAgICAgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6TW91c2VX
aGVlbCkgewogICAgICAgICBjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQgPSAq
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKICAgICAgICAg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0
SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQod2hlZWxFdmVudC54LCB3aGVlbEV2
ZW50LnkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpOwogICAgICAgICBzd2l0Y2ggKHNj
cm9sbFN0YXR1cykgewogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkOgotICAgICAgICAgICAgLy8gRklYTUU6IHVzZSBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUgaGVyZSB0byBnZXQgc21vb3RoIHdoZWVsIHNjcm9sbGluZz8KICAgICAgICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC13aGVlbEV2ZW50LmRlbHRh
WCwgLXdoZWVsRXZlbnQuZGVsdGFZKSk7CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVu
dC0+c2Nyb2xsRW5kKCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVu
dCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsK
ICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKLSAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KGZhbHNlIC8qIHNlbmRUb1dp
ZGdldCAqLyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gRGlkTm90
SGFuZGxlOwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVNjcm9sbEJlZ2luKSB7CiAgICAgICAgIEFTU0VSVCghbV9zY3JvbGxTdGFydGVkKTsKQEAgLTE4
MSwyMSArMTkxLDE4IEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRs
ZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIHN3aXRjaCAo
c2Nyb2xsU3RhdHVzKSB7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQ6CiAgICAgICAgICAgICBtX3Njcm9sbFN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkTm90SGFu
ZGxlSW5wdXRFdmVudChmYWxzZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZXR1cm4gRHJvcEV2ZW50OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGUpIHsKICAgICAgICAg
QVNTRVJUKG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsU3Rh
cnRlZCkgewogICAgICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKICAgICAgICAg
ICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC1nZXN0dXJlRXZlbnQu
ZGVsdGFYLCAtZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBEaWRIYW5kbGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0g
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZCkgewogICAgICAgICBBU1NFUlQobV9leHBl
Y3RTY3JvbGxVcGRhdGVFbmQpOwpAQCAtMjA1LDEwICsyMTIsNiBAQCB2b2lkIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQm
IGV2ZW50KQogICAgICAgICBpZiAobV9zY3JvbGxTdGFydGVkKSB7CiAgICAgICAgICAgICBtX2lu
cHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7CiAgICAgICAgICAgICBtX3Njcm9sbFN0YXJ0
ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJl
RXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKLSAg
ICAgICAgICAgIGlmIChoYW5kbGVHZXN0dXJlRmxpbmcoZ2VzdHVyZUV2ZW50KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0g
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4
cGVjdFBpbmNoVXBkYXRlRW5kKTsKQEAgLTIxNiw1OCArMjE5LDQ1IEBAIHZvaWQgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpCiAgICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSB0cnVlOwogI2VuZGlm
CiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVCZWdpbigpOwotICAg
ICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZCkgewogICAgICAgICBBU1NFUlQobV9leHBlY3RQ
aW5jaFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFBpbmNoVXBk
YXRlRW5kID0gZmFsc2U7CiAjZW5kaWYKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnBp
bmNoR2VzdHVyZUVuZCgpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBlbHNl
IGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZSkgewog
ICAgICAgICBBU1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CiAgICAgICAgIGNvbnN0IFdl
Ykdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1
cmVFdmVudCo+KCZldmVudCk7CiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdl
c3R1cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50Lngs
IGdlc3R1cmVFdmVudC55KSk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5w
dXRFdmVudDo6R2VzdHVyZVRhcERvd24pIHsKLSAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xp
ZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgIG1faW5wdXRIYW5k
bGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOwotICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGlkSGFuZGxlOworICAgIH0gZWxzZSBpZiAoZXZl
bnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydCkgeworICAgICAgICBj
b25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25zdCBX
ZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVyZUZs
aW5nKGdlc3R1cmVFdmVudCk7CisgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbCkgeworICAgICAgICBjYW5jZWxDdXJyZW50Rmxpbmco
KTsKICAgICB9CiAKLSAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVlIC8q
IHNlbmRUb1dpZGdldCAqLyk7CisgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKIH0KIAotYm9vbCBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0IFdl
Ykdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQorV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRs
ZUdlc3R1cmVGbGluZyhjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKLSAg
ICAvLyBHZXN0dXJlU2Nyb2xsRW5kIHdpdGggbm9uLXplcm8gdmVsb2NpdHkgKGRlbHRhWC9ZKSBz
aWduYWxzIHN0YXJ0IG9mIEZsaW5nLgotICAgIGlmICghZ2VzdHVyZUV2ZW50LmRlbHRhWCAmJiAh
Z2VzdHVyZUV2ZW50LmRlbHRhWSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRF
dmVudCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KICAgICBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNjcm9sbFN0YXR1cyA9IG1faW5wdXRIYW5kbGVyQ2xpZW50
LT5zY3JvbGxCZWdpbihJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSk7CiAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMp
IHsKICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOiB7Ci0gICAg
ICAgIE93blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gZmxpbmdDdXJ2ZSA9IFRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRh
WCwgZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOwotICAgICAgICBPd25QdHI8Q0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShQ
bGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXI6OmNyZWF0ZShmbGluZ0N1cnZlLnJlbGVh
c2UoKSksIHRoaXMpOwotICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2V0QWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsKLSAgICAgICAgbV9jbGllbnQtPmRp
ZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE93blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gZmxpbmdDdXJ2ZSA9IFRvdWNoRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoLWdlc3R1cmVFdmVudC5kZWx0YVgsIC1nZXN0
dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgIG1fd2hlZWxGbGluZ0FuaW1hdGlvbiA9IENDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZVRvQ0NHZXN0dXJlQWRh
cHRlcjo6Y3JlYXRlKGZsaW5nQ3VydmUucmVsZWFzZSgpKSwgdGhpcyk7CisgICAgICAgIG1fd2hl
ZWxGbGluZ1BvaW50ID0gSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVFdmVudC55KTsK
KyAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKLSAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlu
cHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIERyb3BF
dmVudDsKICAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIERpZE5vdEhhbmRs
ZTsKIH0KIAogaW50IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjppZGVudGlmaWVyKCkg
Y29uc3QKQEAgLTI3NiwxNCArMjY2LDQ0IEBAIGludCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKIH0KIAot
dm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6d2lsbERyYXcoZG91YmxlIG1vbm90
b25pY1RpbWUpCit2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjphbmltYXRlKGRv
dWJsZSBtb25vdG9uaWNUaW1lKQogeworICAgIGlmICghbV93aGVlbEZsaW5nQW5pbWF0aW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV93aGVlbEZsaW5nQW5pbWF0aW9uLT5hbmltYXRl
KG1vbm90b25pY1RpbWUpKQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2NoZWR1bGVB
bmltYXRpb24oKTsKK30KKwordm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2Fu
Y2VsQ3VycmVudEZsaW5nKCkKK3sKKyAgICBtX3doZWVsRmxpbmdBbmltYXRpb24uY2xlYXIoKTsK
IH0KIAogdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkoY29uc3Qg
SW50UG9pbnQmIGluY3JlbWVudCkKIHsKLSAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCi0g
ICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeSh0b1NpemUoaW5jcmVtZW50KSk7
CisgICAgV2ViTW91c2VXaGVlbEV2ZW50IGV2ZW50OworICAgIGV2ZW50LmRlbHRhWCA9IGluY3Jl
bWVudC54KCk7CisgICAgZXZlbnQuZGVsdGFZID0gaW5jcmVtZW50LnkoKTsKKyAgICBldmVudC5o
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gdHJ1ZTsKKyAgICBldmVudC54ID0gbV93aGVlbEZs
aW5nUG9pbnQueCgpOworICAgIGV2ZW50LnkgPSBtX3doZWVsRmxpbmdQb2ludC55KCk7CisKKyAg
ICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3Np
dGlvbiA9IGhhbmRsZUlucHV0RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNw
b3NpdGlvbikgeworICAgIGNhc2UgRGlkSGFuZGxlOgorICAgIGNhc2UgRHJvcEV2ZW50OgorICAg
ICAgICBicmVhazsgCisgICAgY2FzZSBEaWROb3RIYW5kbGU6CisgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBnb3QgYSBEaWROb3RIYW5kbGUsIHRoYXQgbWVhbnMgd2UgbmVlZCB0byBkZWxpdmVyIHdo
ZWVscyBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVk
IHRvIHNjaGVkdWxlIGEgY29tbWl0IGFuZCB0cmFuc2ZlciB0aGUgZmxpbmcgY3VydmUgb3ZlciB0
byB0aGUgbWFpbgorICAgICAgICAvLyB0aHJlYWQgYW5kIHJ1biB0aGUgcmVzdCBvZiB0aGUgd2hl
ZWxzIGZyb20gdGhlcmUuCisgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGZsaW5naW5n
IGEgcGFnZSB0aGF0IGNvbnRhaW5zIGEgc2Nyb2xsYWJsZSBzdWJhcmVhIHRoYXQgd2UgY2FuJ3QK
KyAgICAgICAgLy8gc2Nyb2xsIG9uIHRoZSB0aHJlYWQgaWYgdGhlIGZsaW5nIHN0YXJ0cyBvdXRz
aWRlIHRoZSBzdWJhcmVhIGJ1dCB0aGVuIGlzIGZsdW5nICJ1bmRlciIgdGhlCisgICAgICAgIC8v
IHBvaW50ZXIuCisgICAgICAgIC8vIEZvciBub3csIGp1c3QgYWJvcnQgdGhlIGZsaW5nLgorICAg
ICAgICBjYW5jZWxDdXJyZW50RmxpbmcoKTsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bC5oCmluZGV4IDgyMzkwYzY0OTA5MmEzOTJlMTc1MWUwNDE0ZDVkMWIxYjQ1ZWY0MGEuLmVkNTQ2
YTc3NjMwYmI1OGE1ZGQyYTNhZjcwOWY2YzBhMGJkMjNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwu
aApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bF9oCiAjZGVmaW5lIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsX2gKIAorI2luY2x1ZGUg
IkludFBvaW50LmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCkBAIC02
NCw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyIGlt
cGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsRHJhdyhkb3VibGUgbW9ub3RvbmljVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUpOwogCiAgICAgLy8gV2ViQ29yZTo6Q0NH
ZXN0dXJlQ3VydmVUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bEJ5KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CkBAIC03Miw3ICs3MywxNSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CiAKLSAgICBib29sIGhhbmRsZUdlc3R1cmVG
bGluZyhjb25zdCBXZWJHZXN0dXJlRXZlbnQmKTsKKyAgICBlbnVtIEV2ZW50RGlzcG9zaXRpb24g
eyBEaWRIYW5kbGUsIERpZE5vdEhhbmRsZSwgRHJvcEV2ZW50IH07CisgICAgRXZlbnREaXNwb3Np
dGlvbiBoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwoY29uc3QgV2ViSW5wdXRFdmVudCYpOworCisg
ICAgRXZlbnREaXNwb3NpdGlvbiBoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViR2VzdHVyZUV2
ZW50Jik7CisKKyAgICB2b2lkIGNhbmNlbEN1cnJlbnRGbGluZygpOworCisgICAgT3duUHRyPFdl
YkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV93aGVlbEZsaW5nQW5pbWF0aW9uOwor
ICAgIFdlYkNvcmU6OkludFBvaW50IG1fd2hlZWxGbGluZ1BvaW50OyAvLyBQb2ludGVyIHBvc2l0
aW9uIGZvciB0aGUgY3VycmVudCBmbGluZy4gCiAKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbFRlc3QuY3BwCmluZGV4IDRiMTQ2MzZmYTdlMDYwMzU0NTY1NDc0NWZmNGRh
OTBjODkwN2RlOGYuLjAwNGMwMmNhMjZjODg4NWI1N2M4MDE0YWU2NDc1ZGU2ZGQyM2NlM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAgLTcwLDYgKzcwLDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFj
dGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24u
Z2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNz
T3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1f
YWN0aXZlR2VzdHVyZUFuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUFuaW1hdGlvbigpIHsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132478</attachid>
            <date>2012-03-17 21:18:30 -0700</date>
            <delta_ts>2012-03-19 14:10:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81462-20120317211829.patch</filename>
            <type>text/plain</type>
            <size>39799</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZGVhZGMwNzYxNWYy
N2NjMTU1NjI5MDgyMDAyNzQxODQzNWE1YS4uM2Y4ZTM1M2YyNTRiZjQ4NDBkY2M4NjI5NWU4YmM1
NmRmZjc0NTU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTE3ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZmxpbmctYnktd2hlZWwgb24gY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjb21wb3NpdG9yIHRocmVh
ZCBzdXBwb3J0IGZvciBhIGZsaW5nIHR5cGUgaW1wbGVtZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiB3
aGVlbCBzY3JvbGxzLiBDb3ZlcmVkIGJ5IG5ldyB0ZXN0cworICAgICAgICBpbiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKENDSW5wdXRIYW5kbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXApOgorCiAyMDEyLTAzLTE3ICBOaWtvbGFzIFppbW1lcm1hbm4g
IDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIEVuYWJsZSBhbmltVmFsIHN1cHBvcnQg
Zm9yIFNWR051bWJlck9wdGlvbmFsTnVtYmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDM1NzkxYjJmODgwN2FhNWRkOTUwYzAxYzU0ZTg2OGZjZDRhYTYxZjUuLjExNzk4ODliZDA4YTky
N2FjODYzOGEzMTI0YjA5NDgwMDE1NjQ5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTItMDMtMTcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBmbGluZy1ieS13aGVlbCBv
biBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE0NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgZmxpbmctYnktd2hlZWwgYW5kIGJlZWYgdXAgZXhpc3Rpbmcg
dW5pdCB0ZXN0IGNvdmVyYWdlIGNvbnNpZGVyYWJseSBieSB1c2luZyBnbW9jayBpbnN0ZWFkIG9m
IG1vY2tpbmcKKyAgICAgICAgYnkgaGFuZC4KKworICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2
ZW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6Y2FuY2VsQ3VycmVudEZsaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBz
cmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbFRlc3QuY3BwOgorCiAyMDEyLTAzLTE2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbmlmeSB0aGUgZHJhd2luZyBs
b2dpYyBmb3IgZGlmZmVyZW50IGxheWVyIHR5cGVzIHRoYXQgb3V0cHV0IHRleHR1cmVzIHRvIHRo
ZSBjb21wb3NpdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaAppbmRleCAwMzFkN2RjNTAxZDlm
NzM2YTM3NmE5MzViM2RlMjI0NDZiZTY5NWYxLi4wMTlkMmQ4MzViMWMyNGIzZjU5MWU4OThiZDcz
NzAxOGYwMWI4Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTQ1LDggKzQ1LDYg
QEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5wdXRIYW5kbGVyQ2xpZW50IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlckNsaWVudCk7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwotCiAgICAgZW51bSBTY3JvbGxTdGF0dXMg
eyBTY3JvbGxGYWlsZWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9sbElnbm9yZWQgfTsKICAgICBlbnVt
IFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVsIH07CiAKQEAgLTgwLDYgKzc4LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPikgPSAwOwogCisgICAg
Ly8gUmVxdWVzdCBhIG5ldyBmcmFtZSB3aXRoIHVwZGF0ZWQgYW5pbWF0aW9uIHN0YXRlLiBUeXBp
Y2FsbHkgY2FsbGVkIGJ5IENDSW5wdXRIYW5kbGVyOjphbmltYXRlKCkuCisgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhh
bmRsZXJDbGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsg
fQpAQCAtOTIsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NJbnB1dEhhbmRsZXIo
KSB7IH0KIAogICAgIHZpcnR1YWwgaW50IGlkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUpID0gMDsKIAogcHJvdGVjdGVkOgog
ICAgIENDSW5wdXRIYW5kbGVyKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IGViZTA2ZjUxMGU5NmQ1ZDA3ZDdkNzBmN2U2M2M1OTM2NDVhNjRkNDQuLmRk
MmQ0MmE0NzE3YWFhMGVmYTViYWNjOGEzYzI5ZjI2YjAyNGRiODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xODEsNiArMTgxLDExIEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0
aXZlR2VzdHVyZUFuCiAgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkK
K3sKKyAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKwogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCkKIHsKICAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1
dGUgYSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDNiYjdkM2RlMTQxMzZlZGJiYzlmMTllZGY4NTA0NzI0
M2RmYmJhYTMuLjBkYWU2MDQ2ODI0MmU5YjE0MjY2N2Q3MDdjYTFlNWI5NDAyZGJlMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTY1LDcgKzY1LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIC8vIENDSW5wdXRI
YW5kbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVk
cmF3KCk7CiAgICAgdmlydHVhbCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNj
cm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElu
cHV0VHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsRW5kKCk7CkBAIC03Niw2ICs3NSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlv
bigpIHsgcmV0dXJuIG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQogICAgIC8vIFRv
IGNsZWFyIGFuIGFjdGl2ZSBhbmltYXRpb24sIHBhc3MgbnVsbHB0ci4KICAgICB2aXJ0dWFsIHZv
aWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbj4pOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCiAgICAg
Ly8gVmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsK
QEAgLTEzNSw2ICsxMzUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMo
KSBjb25zdCB7IHJldHVybiBtX25lZWRzQW5pbWF0ZUxheWVyczsgfQogICAgIHZvaWQgc2V0TmVl
ZHNBbmltYXRlTGF5ZXJzKCkgeyBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7IH0KIAorICAg
IHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9z
dEltcGwoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUz
MTg4MDUzMzA2YWJkYTRiLi5lMTY3NTIyM2M1NDgwNzdiZjQwY2JiYWIzZGZlYmQ5ZjZiMmI4Mjg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQg
Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uRHJhd0FuZFN3YXAoKQogICAgIGRvdWJsZSBt
b25vdG9uaWNUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZG91Ymxl
IHdhbGxDbG9ja1RpbWUgPSBjdXJyZW50VGltZSgpOwogCi0gICAgbV9pbnB1dEhhbmRsZXJPbklt
cGxUaHJlYWQtPndpbGxEcmF3KG1vbm90b25pY1RpbWUpOworICAgIG1faW5wdXRIYW5kbGVyT25J
bXBsVGhyZWFkLT5hbmltYXRlKG1vbm90b25pY1RpbWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmFuaW1hdGUobW9ub3RvbmljVGltZSwgd2FsbENsb2NrVGltZSk7CiAgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXgg
YmY4ZmY5NDFkNGVmZWI2ZDA5Yzg4ODg1ZTc5MGY3ZDIwYmQwODkwMC4uOWY4NmQwNjM3ZWEzODUy
NWZiYzY1ZTEyMzIwNDUwYTg1MmFkZGIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAt
MTE4LDcgKzExOCw3IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgLCBtX2V4cGVjdFNj
cm9sbFVwZGF0ZUVuZChmYWxzZSkKICAgICAsIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQoZmFsc2Up
CiAjZW5kaWYKLSAgICAsIG1fc2Nyb2xsU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fZ2VzdHVyZVNj
cm9sbFN0YXJ0ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKIApAQCAtMTU0LDI0ICsxNTQsMzcgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NsaWVudCk7CiAK
KyAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNw
b3NpdGlvbiA9IGhhbmRsZUlucHV0RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChk
aXNwb3NpdGlvbikgeworICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICBtX2NsaWVudC0+ZGlk
SGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpZE5vdEhhbmRs
ZToKKyAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5k
VG9XaWRnZXQgKi8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERyb3BFdmVudDoKKyAgICAg
ICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0
ICovKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
aGFuZGxlSW5wdXRFdmVudEludGVybmFsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewog
ICAgIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKICAgICAg
ICAgY29uc3QgV2ViTW91c2VXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gKnN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVudCk7CiAgICAgICAgIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnNjcm9sbEJlZ2luKEludFBvaW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OldoZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsK
ICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiB1c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUg
dG8gZ2V0IHNtb290aCB3aGVlbCBzY3JvbGxpbmc/CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxl
ckNsaWVudC0+c2Nyb2xsQnkoSW50U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgsIC13aGVlbEV2ZW50
LmRlbHRhWSkpOwogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEVuZCgp
OwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgICAgIGNhc2Ug
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6Ci0gICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxzZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICAg
ICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm4gRHJvcEV2ZW50OwogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbikg
ewotICAgICAgICBBU1NFUlQoIW1fc2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIEFTU0VSVCghbV9n
ZXN0dXJlU2Nyb2xsU3RhcnRlZCk7CiAgICAgICAgIEFTU0VSVCghbV9leHBlY3RTY3JvbGxVcGRh
dGVFbmQpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQg
PSB0cnVlOwpAQCAtMTgwLDk0ICsxOTMsODAgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAg
ICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBt
X2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoZ2VzdHVyZUV2ZW50Lngs
IGdlc3R1cmVFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpOwogICAgICAg
ICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgewogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkOgotICAgICAgICAgICAgbV9zY3JvbGxTdGFydGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9y
ZWQ6Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxzZSAv
KiBzZW5kVG9XaWRnZXQgKi8pOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9n
ZXN0dXJlU2Nyb2xsU3RhcnRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxl
OwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CisgICAgICAg
IGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gRHJvcEV2ZW50OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKG1f
ZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKLSAgICAgICAgaWYgKG1fc2Nyb2xsU3RhcnRlZCkgewot
ICAgICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKLSAgICAgICAgICAgIG1faW5w
dXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC1nZXN0dXJlRXZlbnQuZGVsdGFYLCAt
Z2VzdHVyZUV2ZW50LmRlbHRhWSkpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCisgICAgICAgIGlm
ICghbV9nZXN0dXJlU2Nyb2xsU3RhcnRlZCkKKyAgICAgICAgICAgIHJldHVybiBEaWROb3RIYW5k
bGU7CisKKyAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgbV9pbnB1
dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNpemUoLWdlc3R1cmVFdmVudC5kZWx0YVgsIC1n
ZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBl
bHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQpIHsK
ICAgICAgICAgQVNTRVJUKG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kID0gZmFsc2U7CiAjZW5kaWYKLSAgICAg
ICAgaWYgKG1fc2Nyb2xsU3RhcnRlZCkgewotICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGll
bnQtPnNjcm9sbEVuZCgpOwotICAgICAgICAgICAgbV9zY3JvbGxTdGFydGVkID0gZmFsc2U7Cisg
ICAgICAgIGlmICghbV9nZXN0dXJlU2Nyb2xsU3RhcnRlZCkKKyAgICAgICAgICAgIHJldHVybiBE
aWROb3RIYW5kbGU7CiAKLSAgICAgICAgICAgIGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVy
ZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+KCZldmVudCk7Ci0g
ICAgICAgICAgICBpZiAoaGFuZGxlR2VzdHVyZUZsaW5nKGdlc3R1cmVFdmVudCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50
LT5zY3JvbGxFbmQoKTsKKyAgICAgICAgbV9nZXN0dXJlU2Nyb2xsU3RhcnRlZCA9IGZhbHNlOwor
ICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hCZWdpbikgewogICAgICAgICBBU1NFUlQoIW1fZXhw
ZWN0UGluY2hVcGRhdGVFbmQpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9leHBlY3RQaW5j
aFVwZGF0ZUVuZCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnBpbmNoR2VzdHVyZUJlZ2luKCk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9
IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoRW5kKSB7
CiAgICAgICAgIEFTU0VSVChtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSBmYWxzZTsKICNlbmRpZgogICAgICAg
ICBtX2lucHV0SGFuZGxlckNsaWVudC0+cGluY2hHZXN0dXJlRW5kKCk7Ci0gICAgICAgIG1fY2xp
ZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIERpZEhhbmRsZTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVBpbmNoVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVjdFBpbmNoVXBk
YXRlRW5kKTsKICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAq
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKICAgICAgICAgbV9p
bnB1dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVyZVVwZGF0ZShnZXN0dXJlRXZlbnQuZGVsdGFY
LCBJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpKTsKLSAgICAgICAgbV9j
bGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxz
ZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bikgewotICAg
ICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSkg
ewotICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24obnVsbHB0cik7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVu
dCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEaWRI
YW5kbGU7CisgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1
cmVGbGluZ1N0YXJ0KSB7CisgICAgICAgIGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2
ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+KCZldmVudCk7CisgICAg
ICAgIHJldHVybiBoYW5kbGVHZXN0dXJlRmxpbmcoZ2VzdHVyZUV2ZW50KTsKKyAgICB9IGVsc2Ug
aWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsKSB7Cisg
ICAgICAgIGlmIChjYW5jZWxDdXJyZW50RmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBEaWRI
YW5kbGU7CiAgICAgfQogCi0gICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1
ZSAvKiBzZW5kVG9XaWRnZXQgKi8pOworICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiB9CiAKLWJv
b2wgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVGbGluZyhjb25z
dCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpo
YW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7
Ci0gICAgLy8gR2VzdHVyZVNjcm9sbEVuZCB3aXRoIG5vbi16ZXJvIHZlbG9jaXR5IChkZWx0YVgv
WSkgc2lnbmFscyBzdGFydCBvZiBGbGluZy4KLSAgICBpZiAoIWdlc3R1cmVFdmVudC5kZWx0YVgg
JiYgIWdlc3R1cmVFdmVudC5kZWx0YVkpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0SGFuZGxlckNs
aWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVFdmVudC55
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpOwogICAgIHN3aXRjaCAoc2Nyb2xsU3Rh
dHVzKSB7CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDogewot
ICAgICAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGZsaW5nQ3VydmUgPSBUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KGdlc3R1cmVFdmVudC5k
ZWx0YVgsIGdlc3R1cmVFdmVudC5kZWx0YVkpKTsKLSAgICAgICAgT3duUHRyPENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVh
dGUoUGxhdGZvcm1HZXN0dXJlVG9DQ0dlc3R1cmVBZGFwdGVyOjpjcmVhdGUoZmxpbmdDdXJ2ZS5y
ZWxlYXNlKCkpLCB0aGlzKTsKLSAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNldEFjdGl2
ZUdlc3R1cmVBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7Ci0gICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBP
d25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGZsaW5nQ3VydmUgPSBUb3VjaEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KC1nZXN0dXJlRXZlbnQuZGVsdGFYLCAt
Z2VzdHVyZUV2ZW50LmRlbHRhWSkpOworICAgICAgICBtX3doZWVsRmxpbmdBbmltYXRpb24gPSBD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVy
ZUFkYXB0ZXI6OmNyZWF0ZShmbGluZ0N1cnZlLnJlbGVhc2UoKSksIHRoaXMpOworICAgICAgICBt
X3doZWVsRmxpbmdQb2ludCA9IEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQu
eSk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOwor
ICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0KLSAgICBjYXNlIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkOgotICAgICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5w
dXRFdmVudChmYWxzZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgIGNhc2UgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CiAgICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiB9CiAKIGlu
dCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CkBAIC0y
NzYsMTQgKzI3NSw1MCBAQCBpbnQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmlkZW50
aWZpZXIoKSBjb25zdAogICAgIHJldHVybiBtX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGw6OndpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKQor
dm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgbW9ub3Rv
bmljVGltZSkKK3sKKyAgICBpZiAoIW1fd2hlZWxGbGluZ0FuaW1hdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fd2hlZWxGbGluZ0FuaW1hdGlvbi0+YW5pbWF0ZShtb25vdG9uaWNU
aW1lKSkKKyAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7
Cit9CisKK2Jvb2wgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNhbmNlbEN1cnJlbnRG
bGluZygpCiB7CisgICAgYm9vbCBoYWRGbGluZ0FuaW1hdGlvbiA9IG1fd2hlZWxGbGluZ0FuaW1h
dGlvbjsKKyAgICBtX3doZWVsRmxpbmdBbmltYXRpb24uY2xlYXIoKTsKKyAgICByZXR1cm4gaGFk
RmxpbmdBbmltYXRpb247CiB9CiAKIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OnNjcm9sbEJ5KGNvbnN0IEludFBvaW50JiBpbmNyZW1lbnQpCiB7Ci0gICAgaWYgKG1faW5wdXRI
YW5kbGVyQ2xpZW50KQotICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQnkodG9T
aXplKGluY3JlbWVudCkpOworICAgIGlmIChpbmNyZW1lbnQgPT0gSW50UG9pbnQ6Onplcm8oKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViTW91c2VXaGVlbEV2ZW50IGV2ZW50OworICAgIGV2
ZW50LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsOworICAgIGV2ZW50LmRlbHRhWCA9
IC1pbmNyZW1lbnQueCgpOworICAgIGV2ZW50LmRlbHRhWSA9IC1pbmNyZW1lbnQueSgpOworICAg
IGV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSB0cnVlOworICAgIGV2ZW50LnggPSBt
X3doZWVsRmxpbmdQb2ludC54KCk7CisgICAgZXZlbnQueSA9IG1fd2hlZWxGbGluZ1BvaW50Lnko
KTsKKworICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9u
IGRpc3Bvc2l0aW9uID0gaGFuZGxlSW5wdXRFdmVudEludGVybmFsKGV2ZW50KTsKKyAgICBzd2l0
Y2ggKGRpc3Bvc2l0aW9uKSB7CisgICAgY2FzZSBEaWRIYW5kbGU6CisgICAgY2FzZSBEcm9wRXZl
bnQ6CisgICAgICAgIGJyZWFrOyAKKyAgICBjYXNlIERpZE5vdEhhbmRsZToKKyAgICAgICAgLy8g
RklYTUU6IElmIHdlIGdvdCBhIERpZE5vdEhhbmRsZSwgdGhhdCBtZWFucyB3ZSBuZWVkIHRvIGRl
bGl2ZXIgd2hlZWxzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjYXNl
IHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjb21taXQgYW5kIHRyYW5zZmVyIHRoZSBmbGluZyBjdXJ2
ZSBvdmVyIHRvIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZCBhbmQgcnVuIHRoZSByZXN0IG9m
IHRoZSB3aGVlbHMgZnJvbSB0aGVyZS4KKyAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4g
ZmxpbmdpbmcgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBzY3JvbGxhYmxlIHN1YmFyZWEgdGhhdCB3
ZSBjYW4ndAorICAgICAgICAvLyBzY3JvbGwgb24gdGhlIHRocmVhZCBpZiB0aGUgZmxpbmcgc3Rh
cnRzIG91dHNpZGUgdGhlIHN1YmFyZWEgYnV0IHRoZW4gaXMgZmx1bmcgInVuZGVyIiB0aGUKKyAg
ICAgICAgLy8gcG9pbnRlci4KKyAgICAgICAgLy8gRm9yIG5vdywganVzdCBhYm9ydCB0aGUgZmxp
bmcuCisgICAgICAgIGNhbmNlbEN1cnJlbnRGbGluZygpOworICAgIH0KIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmgKaW5kZXggODIzOTBjNjQ5MDkyYTM5MmUxNzUxZTA0MTRkNWQxYjFiNDVlZjQw
YS4uN2EwYjM2ZDU3YzVhNjE4MDI4NjU2OWJlODI3YzY0ZTdmMTFiNjdhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsX2gKICNkZWZpbmUgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxfaAogCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQu
aCIKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAgICAvLyBXZWJD
b3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKQEAgLTcyLDcgKzczLDE2IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKIAotICAgIGJvb2wgaGFuZGxl
R2VzdHVyZUZsaW5nKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYpOworICAgIGVudW0gRXZlbnREaXNw
b3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsKKyAgICBFdmVu
dERpc3Bvc2l0aW9uIGhhbmRsZUlucHV0RXZlbnRJbnRlcm5hbChjb25zdCBXZWJJbnB1dEV2ZW50
Jik7CisKKyAgICBFdmVudERpc3Bvc2l0aW9uIGhhbmRsZUdlc3R1cmVGbGluZyhjb25zdCBXZWJH
ZXN0dXJlRXZlbnQmKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBhY3R1YWxseSBoYWQg
YW4gYWN0aXZlIGZsaW5nIHRvIGNhbmNlbC4KKyAgICBib29sIGNhbmNlbEN1cnJlbnRGbGluZygp
OworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV93aGVl
bEZsaW5nQW5pbWF0aW9uOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fd2hlZWxGbGluZ1BvaW50
OyAvLyBQb2ludGVyIHBvc2l0aW9uIGZvciB0aGUgY3VycmVudCBmbGluZy4gCiAKICAgICBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlm
aWVyOwpAQCAtODIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9leHBlY3RTY3JvbGxV
cGRhdGVFbmQ7CiAgICAgYm9vbCBtX2V4cGVjdFBpbmNoVXBkYXRlRW5kOwogI2VuZGlmCi0gICAg
Ym9vbCBtX3Njcm9sbFN0YXJ0ZWQ7CisgICAgYm9vbCBtX2dlc3R1cmVTY3JvbGxTdGFydGVkOwog
CiAgICAgc3RhdGljIGludCBzX25leHRBdmFpbGFibGVJZGVudGlmaWVyOwogICAgIHN0YXRpYyBI
YXNoU2V0PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKj4qIHNfY29tcG9zaXRvcnM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXggNGIxNDYzNmZhN2UwNjAzNTQ1
NjU0NzQ1ZmY0ZGE5MGM4OTA3ZGU4Zi4uYTA1NzA4YzNlOGI1YTRlNDE4MDQ0MmMxZGI3ZDM2OTY0
MjdjY2M0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oIgogCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtNDYsMTA4ICs0
Nyw1MCBAQCBjbGFzcyBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkND
SW5wdXRIYW5kbGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNb2NrSW5wdXRI
YW5kbGVyQ2xpZW50KTsKIHB1YmxpYzoKICAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50KCkKLSAg
ICAgICAgOiBtX3Njcm9sbFN0YXR1cyhTY3JvbGxTdGFydGVkKQotICAgICAgICAsIG1fcGluY2hT
dGFydGVkKGZhbHNlKQotICAgICAgICAsIG1fcGluY2hFbmRlZChmYWxzZSkKLSAgICAgICAgLCBt
X3BpbmNoTWFnbmlmaWNhdGlvbigwKQotICAgICAgICAsIG1fc2Nyb2xsQnlDYWxsZWQoZmFsc2Up
CiAgICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5Nb2NrSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9
CiAKLSAgICB2b2lkIHNldFNjcm9sbFN0YXR1cyhTY3JvbGxTdGF0dXMgc3RhdHVzKSB7IG1fc2Ny
b2xsU3RhdHVzID0gc3RhdHVzOyB9CiAKLSAgICBib29sIHBpbmNoU3RhcnRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGluY2hTdGFydGVkOyB9Ci0gICAgYm9vbCBwaW5jaEVuZGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9waW5jaEVuZGVkOyB9Ci0gICAgZmxvYXQgcGluY2hNYWdpbmlmY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9waW5jaE1hZ25pZmljYXRpb247IH0KLSAgICBib29sIHNjcm9sbEJ5Q2Fs
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxCeUNhbGxlZDsgfQorICAgIE1PQ0tfTUVUSE9E
MChwaW5jaEdlc3R1cmVCZWdpbiwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDIocGluY2hHZXN0
dXJlVXBkYXRlLCB2b2lkKGZsb2F0IG1hZ25pZnlEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGFuY2hvcikpOworICAgIE1PQ0tfTUVUSE9EMChwaW5jaEdlc3R1cmVFbmQsIHZvaWQoKSk7
CiAKLSAgICB2b2lkIHJlc2V0UGluY2goKQotICAgIHsKLSAgICAgICAgbV9waW5jaFN0YXJ0ZWQg
PSBtX3BpbmNoRW5kZWQgPSBtX3Njcm9sbEJ5Q2FsbGVkID0gZmFsc2U7Ci0gICAgICAgIG1fcGlu
Y2hNYWduaWZpY2F0aW9uID0gMDsKLSAgICB9CisgICAgTU9DS19NRVRIT0QwKHNjaGVkdWxlQW5p
bWF0aW9uLCB2b2lkKCkpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1
cmVBbmltYXRpb24uZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFu
aW1hdGlvbihQYXNzT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gYW5p
bWF0aW9uKSB7IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIE1P
Q0tfTUVUSE9EMihzY3JvbGxCZWdpbiwgU2Nyb2xsU3RhdHVzKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSkpOwor
ICAgIE1PQ0tfTUVUSE9EMShzY3JvbGxCeSwgdm9pZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikp
OworICAgIE1PQ0tfTUVUSE9EMChzY3JvbGxFbmQsIHZvaWQoKSk7CiAKIHByaXZhdGU6Ci0gICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBT
Y3JvbGxTdGF0dXMgc2Nyb2xsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3Jl
OjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlKSBPVkVSUklERQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsU3RhdHVzOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIE9WRVJSSURFIHsgbV9zY3JvbGxCeUNh
bGxlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsRW5kKCkgT1ZFUlJJREUgeyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlQmVnaW4oKSBPVkVSUklERQotICAgIHsK
LSAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSB0cnVlOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGFuY2hvcikgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fcGluY2hNYWduaWZpY2F0
aW9uID0gbWFnbmlmeURlbHRhOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJl
RW5kKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fcGluY2hFbmRlZCA9IHRydWU7Ci0gICAg
fQogICAgIHZpcnR1YWwgdm9pZCBzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbmNob3JQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgcGFnZVNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRUaW1lTXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbk1zKSBPVkVSUklERSB7IH0KIAot
ICAgIFNjcm9sbFN0YXR1cyBtX3Njcm9sbFN0YXR1czsKLSAgICBib29sIG1fcGluY2hTdGFydGVk
OwotICAgIGJvb2wgbV9waW5jaEVuZGVkOwotICAgIGZsb2F0IG1fcGluY2hNYWduaWZpY2F0aW9u
OwotICAgIGJvb2wgbV9zY3JvbGxCeUNhbGxlZDsKLQotICAgIE93blB0cjxXZWJDb3JlOjpDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24+IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1h
dGlvbigpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZl
R2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbj4pIE9WRVJSSURFIHsgfQogfTsKIAogY2xhc3MgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xp
ZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckNsaWVudCk7CiBwdWJsaWM6CiAgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJD
bGllbnQoKQotICAgICAgICA6IG1faGFuZGxlZChmYWxzZSkKLSAgICAgICAgLCBtX3NlbmRUb1dp
ZGdldChmYWxzZSkKKyAgICAgICAgOiBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJD
bGllbnQoKQogICAgIHsKICAgICB9CiAgICAgdmlydHVhbCB+TW9ja1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJDbGllbnQoKSB7IH0KIAotICAgIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAg
bV9oYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgIG1fc2VuZFRvV2lkZ2V0ID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgYm9vbCBoYW5kbGVkKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGVkOyB9Ci0gICAg
Ym9vbCBzZW5kVG9XaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbmRUb1dpZGdldDsgfQotCi1w
cml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsU2h1dGRvd24oKSBPVkVSUklERSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkSGFuZGxlSW5wdXRFdmVudCgpIE9WRVJSSURFCi0gICAgewotICAg
ICAgICBtX2hhbmRsZWQgPSB0cnVlOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFu
ZGxlSW5wdXRFdmVudChib29sIHNlbmRUb1dpZGdldCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAg
IG1fc2VuZFRvV2lkZ2V0ID0gc2VuZFRvV2lkZ2V0OwotICAgIH0KLQotICAgIGJvb2wgbV9oYW5k
bGVkOwotICAgIGJvb2wgbV9zZW5kVG9XaWRnZXQ7CisgICAgTU9DS19NRVRIT0QwKHdpbGxTaHV0
ZG93biwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDAoZGlkSGFuZGxlSW5wdXRFdmVudCwgdm9p
ZCgpKTsKKyAgICBNT0NLX01FVEhPRDEoZGlkTm90SGFuZGxlSW5wdXRFdmVudCwgdm9pZChib29s
IHNlbmRUb1dpZGdldCkpOwogfTsKIAogVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bCwgZnJvbUlkZW50aWZpZXIpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFs
aXplKDApOwotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
IEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgogICAg
IFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOwotI2Vu
ZGlmCiAKICAgICAvLyBCZWZvcmUgY3JlYXRpbmcgYW55IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJzLCBsb29rdXBzIGZvciBhbnkgdmFsdWUgc2hvdWxkIGZhaWwgYW5kIG5vdCBjcmFzaC4KICAg
ICBFWFBFQ1RfRVEoMCwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIo
MikpOwpAQCAtMTY3LDE3NCArMTEwLDIxOSBAQCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsLCBmcm9tSWRlbnRpZmllcikKIAogICAgIC8vIEFmdGVyIHRoZSBjb21wb3NpdG9yIGlz
IGRlc3Ryb3llZCwgaXRzIGVudHJ5IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIG1hcC4KICAg
ICBFWFBFQ1RfRVEoMCwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIo
Y29tcG9zaXRvcklkZW50aWZpZXIpKTsKLQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1
dGRvd24oKTsKIH0KIAotVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVy
ZVNjcm9sbCkKLXsKLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7Ci0j
aWZuZGVmIE5ERUJVRwotICAgIC8vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4g
b25seSBiZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgV2ViQ29yZTo6
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGFsd2F5c0ltcGxUaHJlYWQ7Ci0jZW5kaWYKK2NsYXNz
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QoKQorICAg
IHsKKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgICAg
ICBtX2lucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUo
Jm1fbW9ja0lucHV0SGFuZGxlcik7CisgICAgICAgIG1faW5wdXRIYW5kbGVyLT5zZXRDbGllbnQo
Jm1fbW9ja0NsaWVudCk7CisgICAgfQogCi0gICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCBtb2Nr
SW5wdXRIYW5kbGVyOwotICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4g
aW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbW9j
a0lucHV0SGFuZGxlcik7Ci0gICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQg
bW9ja0NsaWVudDsKLSAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9ja0NsaWVudCk7Cisg
ICAgfldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCgpCisgICAgeworICAgICAgICBt
X2lucHV0SGFuZGxlci0+c2V0Q2xpZW50KDApOworICAgICAgICBtX2lucHV0SGFuZGxlci5jbGVh
cigpOworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgfQog
Citwcm90ZWN0ZWQ6CisgICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCBtX21vY2tJbnB1dEhhbmRs
ZXI7CisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBtX2lucHV0SGFu
ZGxlcjsKKyAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtX21vY2tDbGll
bnQ7CiAgICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKIAorcHJpdmF0ZToKKyAg
ICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgbV9hbHdheXNJbXBsVGhyZWFkOwor
fTsKKworCitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJl
U2Nyb2xsU3RhcnRlZCkKK3sKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNj
cm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVz
dGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
KSk7CisgICAgLy8gV2Ugc2hvdWxkbid0IHNlbmQgYW55IGV2ZW50cyB0byB0aGUgd2lkZ2V0IGZv
ciB0aGlzIGdlc3R1cmUuCisgICAgLy8gSW5zdGVhZCwgd2Ugc2hvdWxkIGdldCBvbmUgZGlkSGFu
ZGxlSW5wdXRFdmVudCgpIGNhbGwgcGVyIGhhbmRsZUlucHV0RXZlbnQoKS4KKyAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoOjp0ZXN0aW5nOjpfKSku
VGltZXMoMCk7CisKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdl
c3R1cmVTY3JvbGxCZWdpbjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2Vz
dHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVD
VF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0
KCk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkp
OworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCiAgICAg
Z2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRl
OwotICAgIGdlc3R1cmUuZGVsdGFZID0gNDA7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1
dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsK
LSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgbW9ja0Ns
aWVudC5yZXNldCgpOworICAgIGdlc3R1cmUuZGVsdGFZID0gLTQwOyAvLyAtWSBtZWFucyBzY3Jv
bGwgZG93biAtIGkuZS4gaW4gdGhlICtZIGRpcmVjdGlvbi4KKyAgICBFWFBFQ1RfQ0FMTChtX21v
Y2tJbnB1dEhhbmRsZXIsIHNjcm9sbEJ5KHRlc3Rpbmc6OlByb3BlcnR5KCZXZWJDb3JlOjpJbnRT
aXplOjpoZWlnaHQsIHRlc3Rpbmc6Okd0KDApKSkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0Ns
aWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxl
SW5wdXRFdmVudChnZXN0dXJlKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5w
dXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZDsKICAgICBnZXN0dXJlLmRlbHRhWSA9IDA7Ci0gICAg
aW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9UUlVF
KG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5k
VG9XaWRnZXQoKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOworICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsRW5kKCkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0Ns
aWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxl
SW5wdXRFdmVudChnZXN0dXJlKTsKK30KIAotICAgIG1vY2tJbnB1dEhhbmRsZXIuc2V0U2Nyb2xs
U3RhdHVzKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworVEVT
VF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbEZhaWxl
ZCkKK3sKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjcm9sbEJlZ2luKDo6
dGVzdGluZzo6XywgOjp0ZXN0aW5nOjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJl
dHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAg
Ly8gV2Ugc2hvdWxkbid0IGhhbmRsZSBhbnkgb2YgdGhlc2UgaW5wdXRzIG91cnNlbHZlcy4KKyAg
ICAvLyBJbnN0ZWFkLCB3ZSBzaG91bGQgZ2V0IG9uZSBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRy
dWUpIGNhbGwgcGVyIGhhbmRsZUlucHV0RXZlbnQoKSwKKyAgICAvLyBpbmRpY2F0aW5nIHRoYXQg
d2hpbGUgd2UgY291bGRuJ3Qgc2Nyb2xsIHRoZSB3aWRnZXQgc3RpbGwgbmVlZHMgdG8gc2VlIHRo
ZSBldmVudC4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhhbmRsZUlucHV0RXZl
bnQoKSkuVGltZXMoMCk7CiAKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZl
bnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAg
ICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50
LnJlc2V0KCk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWROb3RIYW5kbGVJbnB1
dEV2ZW50KHRydWUpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0
dXJlKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVNjcm9sbFVwZGF0ZTsKICAgICBnZXN0dXJlLmRlbHRhWSA9IDQwOwotICAgIGlucHV0SGFuZGxl
ci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVu
dC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkp
OwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQs
IGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5k
bGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOwogICAgIGdlc3R1cmUuZGVsdGFZID0gMDsKLSAg
ICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LnNl
bmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0KLSAgICBpbnB1dEhhbmRs
ZXItPnNldENsaWVudCgwKTsKLQotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24o
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
dHJ1ZSkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwog
fQogCi1URVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCitU
RVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsSWdu
b3JlZCkKIHsKLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIC8vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4gb25s
eSBiZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgV2ViQ29yZTo6RGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGFsd2F5c0ltcGxUaHJlYWQ7Ci0jZW5kaWYKKyAgICBFWFBF
Q1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rp
bmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKSk7CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVy
Q2xpZW50IG1vY2tJbnB1dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
Y3JlYXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckNsaWVudCBtb2NrQ2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2Nr
Q2xpZW50KTsKKyAgICAvLyBXZSBzaG91bGRuJ3QgaGFuZGxlIGFueSBvZiB0aGVzZSBpbnB1dHMg
b3Vyc2VsdmVzLgorICAgIC8vIEluc3RlYWQsIHdlIHNob3VsZCBnZXQgb25lIGRpZE5vdEhhbmRs
ZUlucHV0RXZlbnQoZmFsc2UpIGNhbGwgcGVyIGhhbmRsZUlucHV0RXZlbnQoKSwKKyAgICAvLyBp
bmRpY2F0aW5nIHRoYXQgd2UgY291bGQgZGV0ZXJtaW5lIHRoYXQgdGhlcmUncyBub3RoaW5nIHRo
YXQgY291bGQgc2Nyb2xsIG9yIG90aGVyd2lzZQorICAgIC8vIHJlYWN0IHRvIHRoaXMgZ2VzdHVy
ZSBzZXF1ZW5jZSBhbmQgdGh1cyB3ZSBzaG91bGQgZHJvcCB0aGUgd2hvbGUgZ2VzdHVyZSBzZXF1
ZW5jZSBvbiB0aGUgZmxvb3IuCisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5k
bGVJbnB1dEV2ZW50KCkpLlRpbWVzKDApOwogCi0gICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQg
Z2VzdHVyZTsKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1
cmVTY3JvbGxCZWdpbjsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRs
ZUlucHV0RXZlbnQoZmFsc2UpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVu
dChnZXN0dXJlKTsKIAorICAgIC8vIFNpbmNlIHdlIGRpZG4ndCBoYW5kbGUgdGhlIGV2ZW50LCB0
aGUgY2FsbGVyIHNob3VsZG4ndCBzZW5kIHVzIGFueSBVcGRhdGUvRW5kIG1lc3NhZ2VzLgorfQor
CitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlUGluY2gp
Cit7CisgICAgLy8gV2Ugc2hvdWxkIGhhbmRsZSB0aGUgZW50aXJlIHNlcXVlbmNlIG91cnNlbHZl
cy4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
Ojp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hCZWdpbjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVk
KCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBF
WFBFQ1RfVFJVRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNoU3RhcnRlZCgpKTsKLSAgICBtb2NrQ2xp
ZW50LnJlc2V0KCk7Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7CisgICAgRVhQ
RUNUX0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBwaW5jaEdlc3R1cmVCZWdpbigpKTsKKyAgICBF
WFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7CisgICAgbV9p
bnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiAKICAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZTsKICAgICBnZXN0
dXJlLmRlbHRhWCA9IDEuNTsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2Vz
dHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVD
VF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9j
a0lucHV0SGFuZGxlci5waW5jaEVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSgxLjUsIG1vY2tJbnB1
dEhhbmRsZXIucGluY2hNYWdpbmlmY2F0aW9uKCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsK
LSAgICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBnZXN0dXJlLnggPSA3Owor
ICAgIGdlc3R1cmUueSA9IDEzOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwg
cGluY2hHZXN0dXJlVXBkYXRlKDEuNSwgV2ViQ29yZTo6SW50UG9pbnQoNywgMTMpKSk7CisgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkpOworICAgIG1f
aW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCiAgICAgZ2VzdHVyZS50
eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU7CiAgICAgZ2Vz
dHVyZS5kZWx0YVggPSAwLjU7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBF
Q1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1v
Y2tJbnB1dEhhbmRsZXIucGluY2hFbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEoMC41LCBtb2NrSW5w
dXRIYW5kbGVyLnBpbmNoTWFnaW5pZmNhdGlvbigpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7
Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7CisgICAgZ2VzdHVyZS54ID0gOTsK
KyAgICBnZXN0dXJlLnkgPSA2OworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwg
cGluY2hHZXN0dXJlVXBkYXRlKC41LCBXZWJDb3JlOjpJbnRQb2ludCg5LCA2KSkpOworICAgIEVY
UEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsKKyAgICBtX2lu
cHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKIAogICAgIGdlc3R1cmUudHlw
ZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoRW5kOwotICAgIGlucHV0SGFu
ZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xp
ZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0
KCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIucGluY2hFbmRlZCgpKTsKLSAg
ICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7
Ci0KLSAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgwKTsKLQotICAgIFdlYktpdDo6V2ViQ29t
cG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIs
IHBpbmNoR2VzdHVyZUVuZCgpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhh
bmRsZUlucHV0RXZlbnQoKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQo
Z2VzdHVyZSk7CiB9CiAKLVRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1
cmVGbGluZykKK1RFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1
cmVGbGluZ1N0YXJ0ZWQpCiB7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4odGVz
dGluZzo6XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4o
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpKTsKKworICAgIC8v
IFdlIHNob3VsZCBoYW5kbGUgdGhlIGVudGlyZSBzZXF1ZW5jZSBvdXJzZWx2ZXMuCisgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KDo6dGVzdGluZzo6
XykpLlRpbWVzKDApOworCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlRmxpbmdTdGFydDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IDEwOworICAgIEVYUEVD
VF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsKKyAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOworICAgIG1faW5w
dXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgLy8gVmVyaWZ5IHRo
YXQgYSBHZXN0dXJlRmxpbmdDYW5jZWwgZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5jZWxzIGl0Lgor
ICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2Fu
Y2VsOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgp
KTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKK30KIAot
ICAgIC8vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4gb25seSBiZSBjYWxsZWQg
ZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgV2ViQ29yZTo6RGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGFsd2F5c0ltcGxUaHJlYWQ7CitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdGYWlsZWQpCit7CisgICAgRVhQRUNUX0NBTEwobV9t
b2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAg
ICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkKSk7CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJ
bnB1dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBp
bnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2Nr
SW5wdXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBt
b2NrQ2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKyAg
ICAvLyBXZSBzaG91bGRuJ3QgaGFuZGxlIGFueSBwYXJ0IG9mIHRoZSBzZXF1ZW5jZSBvdXJzZWx2
ZXMuCisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkp
LlRpbWVzKDApOwogCi0gICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKKyAgICBn
ZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0Owor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVl
KSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiAKLSAg
ICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xsRW5kIGV2ZW50Lgot
ICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJl
Z2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBF
WFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tD
bGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKyAgICAvLyBF
dmVuIGlmIHdlIGRpZG4ndCBzdGFydCBhIGZsaW5nIG91cnNlbHZlcywgd2Ugc3RpbGwgbmVlZCB0
byBzZW5kIHRoZSBjYW5jZWwgZXZlbnQgdG8gdGhlIHdpZGdldC4KKyAgICBnZXN0dXJlLnR5cGUg
PSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKKyAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSkpOworICAgIG1f
aW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworfQogCi0gICAgZ2VzdHVy
ZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOwotICAgIGdl
c3R1cmUuZGVsdGFYID0gMjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2Vz
dHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVD
VF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBBU1NFUlRfVFJVRShtb2Nr
SW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7Ci0gICAgbW9ja0lucHV0SGFuZGxl
ci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCktPmFuaW1hdGUoMC4wMDEpOwotICAgIEVYUEVDVF9U
UlVFKG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7Ci0gICAgbW9ja0NsaWVudC5y
ZXNldCgpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biBkdXJpbmcgYW4g
YW5pbWF0aW9uIGNhbmNlbHMgaXQuCi0gICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlVGFwRG93bjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZl
bnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIuYWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbigpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0KLSAgICAvLyBWZXJp
ZnkgdGhhdCBhIEdlc3R1cmVUYXBEb3duIHdoZW4gbm8gYW5pbWF0aW9uIGlzIGFjdGl2ZSBpcyBu
b3QgaGFuZGxlZC4KLSAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdl
c3R1cmVUYXBEb3duOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJl
KTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9U
UlVFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotCi0gICAgaW5wdXRIYW5kbGVyLT5zZXRD
bGllbnQoMCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworVEVTVF9G
KFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nQW5pbWF0ZXMp
Cit7CisgICAgLy8gV2Ugc2hvdWxkIGhhbmRsZSB0aGUgZW50aXJlIHNlcXVlbmNlIG91cnNlbHZl
cy4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
Ojp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisKKyAgICAvLyBPbiB0aGUgZmxpbmcgc3RhcnQsIHdl
IHNob3VsZCBzY2hlZHVsZSBhbiBhbmltYXRpb24gYnV0IG5vdCBhY3R1YWxseSBzdGFydAorICAg
IC8vIHNjcm9sbGluZy4KKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6
Okdlc3R1cmVGbGluZ1N0YXJ0OworICAgIGdlc3R1cmUuZGVsdGFYID0gLTEwMDA7CisgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkpOworICAgIEVYUEVD
VF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2NoZWR1bGVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0
aW5nOjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5o
YW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgLy8gVGhlIGZpcnN0IGFuaW1hdGUgY2Fs
bCBzaG91bGQgbGV0IHVzIHBpY2sgdXAgYW4gYW5pbWF0aW9uIHN0YXJ0IHRpbWUsIGJ1dCB3ZQor
ICAgIC8vIHNob3VsZG4ndCBhY3R1YWxseSBtb3ZlIGFueXdoZXJlIGp1c3QgeWV0LiBUaGUgZmly
c3QgZnJhbWUgYWZ0ZXIgdGhlIGZsaW5nIHN0YXJ0CisgICAgLy8gd2lsbCB0eXBpY2FsbHkgaW5j
bHVkZSB0aGUgbGFzdCBzY3JvbGwgZnJvbSB0aGUgZ2VzdHVyZSB0aGF0IGxlYWQgdG8gdGhlIHNj
cm9sbAorICAgIC8vIChlaXRoZXIgd2hlZWwgb3IgZ2VzdHVyZSBzY3JvbGwpLCBzbyB0aGVyZSBz
aG91bGQgYmUgbm8gdmlzaWJsZSBoaXRjaC4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhh
bmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0
SGFuZGxlciwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpLlRpbWVzKDApOwor
ICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwKTsKKworICAgIC8vIFRoZSBzZWNvbmQgY2Fs
bCBzaG91bGQgc3RhcnQgc2Nyb2xsaW5nIGluIHRoZSArWCBkaXJlY3Rpb24uCisgICAgRVhQRUNU
X0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rp
bmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2Nr
SW5wdXRIYW5kbGVyLCBzY3JvbGxCeSh0ZXN0aW5nOjpQcm9wZXJ0eSgmV2ViQ29yZTo6SW50U2l6
ZTo6d2lkdGgsIHRlc3Rpbmc6Okd0KDApKSkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0
SGFuZGxlciwgc2Nyb2xsRW5kKCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwLjEp
OworCisgICAgLy8gTGV0J3Mgc2F5IG9uIHRoZSB0aGlyZCBjYWxsIHdlIGhpdCBhIG5vbi1zY3Jv
bGxhYmxlIHJlZ2lvbi4gV2Ugc2hvdWxkIGFib3J0IHRoZSBmbGluZyBhbmQgbm90IHNjcm9sbC4K
KyAgICAvLyBGSVhNRTogV2UgYWxzbyBuZWVkIHRvIGRvIHNvbWUgd29yayB0byB0cmFuc2ZlciB0
aGUgcmVzdCBvZiB0aGlzIGZsaW5nIHRvIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBBZGQgdGVz
dHMgZm9yIHRoaXMgb25jZSBpdCdzIGltcGxlbWVudGVkLgorICAgIEVYUEVDVF9DQUxMKG1fbW9j
a0lucHV0SGFuZGxlciwgc2NoZWR1bGVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0NBTEwobV9t
b2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAg
ICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSWdub3JlZCkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxl
ciwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9j
a0lucHV0SGFuZGxlciwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOworICAgIG1faW5wdXRIYW5kbGVy
LT5hbmltYXRlKDEwLjIpOworCisgICAgLy8gU2luY2Ugd2UndmUgYWJvcnRlZCB0aGUgZmxpbmcs
IHRoZSBuZXh0IGFuaW1hdGlvbiBzaG91bGQgYmUgYSBuby1vcCBhbmQgc2hvdWxkIG5vdCByZXN1
bHQgaW4gYW5vdGhlcgorICAgIC8vIGZyYW1lIGJlaW5nIHJlcXVlc3RlZC4KKyAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpLlRpbWVzKDApOwor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4odGVzdGluZzo6
XywgdGVzdGluZzo6XykpLlRpbWVzKDApOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEw
LjMpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132636</attachid>
            <date>2012-03-19 12:59:09 -0700</date>
            <delta_ts>2012-03-19 15:17:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81462-20120319125908.patch</filename>
            <type>text/plain</type>
            <size>42031</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY0ZjBkNWFkMTE3Zjk2
MTFmOTljZDhjMTZhYjI1ZDk4OGZmMWQwOS4uZThlMWExM2U5ZTY5NWFkMjA4NjRhMWI2YjZhNTRm
OTJiYTcyNWZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTE4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZmxpbmctYnktd2hlZWwgb24gY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjb21wb3NpdG9yIHRocmVh
ZCBzdXBwb3J0IGZvciBhIGZsaW5nIHR5cGUgaW1wbGVtZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiB3
aGVlbCBzY3JvbGxzLiBDb3ZlcmVkIGJ5IG5ldyB0ZXN0cworICAgICAgICBpbiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKENDSW5wdXRIYW5kbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXApOgorCiAyMDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2
ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9u
X3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9NSVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBv
cnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY5ZGFhNDM3OWQ2MTc3MTc2MWI2ZjRi
MzM5MmEwNTMzOTFmZjUxZmYuLjk3NjM0NjYwNGJiMjMzMDQzNDJmODMxZWU1MTRjMTVmMWE3YjZi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDMt
MTggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBmbGluZy1ieS13aGVlbCBvbiBjb21wb3NpdG9yIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0NjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgZmxp
bmctYnktd2hlZWwgYW5kIGJlZWYgdXAgZXhpc3RpbmcgdW5pdCB0ZXN0IGNvdmVyYWdlIGNvbnNp
ZGVyYWJseSBieSB1c2luZyBnbW9jayBpbnN0ZWFkIG9mIG1vY2tpbmcKKyAgICAgICAgYnkgaGFu
ZC4KKworICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1
dEV2ZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmFuaW1h
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2Fu
Y2VsQ3VycmVudEZsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAg
ICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorCiAy
MDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9N
SVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIu
aAppbmRleCAwMzFkN2RjNTAxZDlmNzM2YTM3NmE5MzViM2RlMjI0NDZiZTY5NWYxLi43NjYwOGQ5
ZmMxZDBkYTEzOWE0OTMwYmM1MDQ3YzA4YWViOGIyZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5k
bGVyLmgKQEAgLTQ1LDggKzQ1LDYgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5wdXRIYW5k
bGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlckNsaWVu
dCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwotCiAg
ICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxGYWlsZWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9s
bElnbm9yZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVsIH07
CiAKQEAgLTgwLDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uPikgPSAwOwogCisgICAgLy8gUmVxdWVzdCBhbm90aGVyIGNhbGxiYWNrIHRvIENDSW5w
dXRIYW5kbGVyOjphbmltYXRlKCkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KICAg
ICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtOTIsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q0NJbnB1dEhhbmRsZXIoKSB7IH0KIAogICAgIHZpcnR1YWwg
aW50IGlkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRv
dWJsZSBtb25vdG9uaWNUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IG1vbm90b25pY1RpbWUpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIENDSW5wdXRIYW5kbGVyKCkg
eyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGViZTA2ZjUx
MGU5NmQ1ZDA3ZDdkNzBmN2U2M2M1OTM2NDVhNjRkNDQuLmRkMmQ0MmE0NzE3YWFhMGVmYTViYWNj
OGEzYzI5ZjI2YjAyNGRiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC0xODEsNiArMTgxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0
aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuCiAgICAgICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICAvLyBGb3Ig
bm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4g
VG8gZG8gdGhpcywgd2UgbXVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmlu
ZGV4IDNiYjdkM2RlMTQxMzZlZGJiYzlmMTllZGY4NTA0NzI0M2RmYmJhYTMuLjBkYWU2MDQ2ODI0
MmU5YjE0MjY2N2Q3MDdjYTFlNWI5NDAyZGJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTY1LDcgKzY1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5
ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIC8vIENDSW5wdXRIYW5kbGVyQ2xpZW50IGltcGxlbWVu
dGF0aW9uCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IEludFBv
aW50JiwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSk7CiAgICAgdmlydHVh
bCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
RW5kKCk7CkBAIC03Niw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZl
R2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQogICAgIC8vIFRvIGNsZWFyIGFuIGFjdGl2ZSBhbmlt
YXRpb24sIHBhc3MgbnVsbHB0ci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOworICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGlu
Zy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKQEAgLTEzNSw2ICsxMzUsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzQW5pbWF0ZUxheWVyczsgfQogICAgIHZvaWQgc2V0TmVlZHNBbmltYXRlTGF5ZXJzKCkgeyBt
X25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7IH0KIAorICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKKwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5n
cyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5lMTY3
NTIyM2M1NDgwNzdiZjQwY2JiYWIzZGZlYmQ5ZjZiMmI4Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcApAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXAoKQogICAgIGRvdWJsZSBtb25vdG9uaWNUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZG91YmxlIHdhbGxDbG9ja1RpbWUgPSBjdXJy
ZW50VGltZSgpOwogCi0gICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQtPndpbGxEcmF3KG1v
bm90b25pY1RpbWUpOworICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLT5hbmltYXRlKG1v
bm90b25pY1RpbWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmFuaW1hdGUobW9ub3Rvbmlj
VGltZSwgd2FsbENsb2NrVGltZSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXggYmY4ZmY5NDFkNGVmZWI2ZDA5Yzg4
ODg1ZTc5MGY3ZDIwYmQwODkwMC4uNTBhZjUxZmQ1NWQwMzc5NTEzMDc3ZDNkNDFlZDRiMWRmMGU4
Nzk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJUb3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgpAQCAtMTE4LDcgKzExOSw3
IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgLCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVu
ZChmYWxzZSkKICAgICAsIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQoZmFsc2UpCiAjZW5kaWYKLSAg
ICAsIG1fc2Nyb2xsU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQo
ZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTU0
LDI0ICsxNTUsMzggQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxl
SW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKKyAgICBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhh
bmRsZUlucHV0RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikg
eworICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRF
dmVudCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpZE5vdEhhbmRsZToKKyAgICAgICAg
bV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgbV9jbGllbnQt
PmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZl
bnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRF
dmVudEludGVybmFsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewogICAgIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKICAgICAgICAgY29uc3QgV2Vi
TW91c2VXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNl
V2hlZWxFdmVudCo+KCZldmVudCk7CiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2lu
KEludFBvaW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKICAgICAgICAgY2Fz
ZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiB1c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUgdG8gZ2V0IHNtb290
aCB3aGVlbCBzY3JvbGxpbmc/CisgICAgICAgICAgICBUUkFDRV9FVkVOVF9JTlNUQU5UMigiY2Mi
LCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0IHdoZWVsIHNjcm9s
bCIsICJkZWx0YVgiLCAtd2hlZWxFdmVudC5kZWx0YVgsICJkZWx0YVkiLCAtd2hlZWxFdmVudC5k
ZWx0YVkpOwogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNp
emUoLXdoZWVsRXZlbnQuZGVsdGFYLCAtd2hlZWxFdmVudC5kZWx0YVkpKTsKICAgICAgICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gRGlkSGFuZGxlOwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZl
bnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIERyb3BFdmVudDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pIHsKLSAgICAgICAgQVNTRVJUKCFtX3Nj
cm9sbFN0YXJ0ZWQpOworICAgICAgICBBU1NFUlQoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQpOwog
ICAgICAgICBBU1NFUlQoIW1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kID0gdHJ1ZTsKQEAgLTE4MCw5NCArMTk1
LDgzIEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNj
cm9sbEJlZ2luKEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMp
IHsKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAg
ICAgICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBtX2NsaWVudC0+
ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkOgorICAgICAgICAgICAgcmV0dXJuIERyb3BFdmVudDsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
U2Nyb2xsVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZCk7
Ci0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkdl
c3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVF
dmVudCo+KCZldmVudCk7Ci0gICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xs
QnkoSW50U2l6ZSgtZ2VzdHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KKworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0
ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworCisgICAgICAgIGNvbnN0IFdl
Ykdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1
cmVFdmVudCo+KCZldmVudCk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxC
eShJbnRTaXplKC1nZXN0dXJlRXZlbnQuZGVsdGFYLCAtZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOwor
ICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVj
dFNjcm9sbFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFNjcm9s
bFVwZGF0ZUVuZCA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQp
IHsKLSAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAg
ICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNj
cm9sbFN0YXJ0ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogCi0gICAgICAg
ICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxj
b25zdCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOwotICAgICAgICAgICAgaWYgKGhhbmRsZUdl
c3R1cmVGbGluZyhnZXN0dXJlRXZlbnQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7CisgICAgICAg
IG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRs
ZTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBp
bmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSB0cnVlOwogI2Vu
ZGlmCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVCZWdpbigpOwot
ICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZCkgewogICAgICAgICBBU1NFUlQobV9leHBl
Y3RQaW5jaFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFBpbmNo
VXBkYXRlRW5kID0gZmFsc2U7CiAjZW5kaWYKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnBpbmNoR2VzdHVyZUVuZCgpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVu
dCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBl
bHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZSkg
ewogICAgICAgICBBU1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CiAgICAgICAgIGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdl
c3R1cmVFdmVudCo+KCZldmVudCk7CiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5j
aEdlc3R1cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50
LngsIGdlc3R1cmVFdmVudC55KSk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd24pIHsKLSAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgIG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOwotICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGlkSGFuZGxlOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydCkgeworICAgICAg
ICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25z
dCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVy
ZUZsaW5nKGdlc3R1cmVFdmVudCk7CisgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbCkgeworICAgICAgICBpZiAoY2FuY2VsQ3VycmVu
dEZsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0KIAotICAgIG1f
Y2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyogc2VuZFRvV2lkZ2V0ICovKTsK
KyAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogfQogCi1ib29sIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0
dXJlRXZlbnQpCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlv
biBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEdlc3R1cmVTY3JvbGxF
bmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVsdGFYL1kpIHNpZ25hbHMgc3RhcnQgb2YgRmxp
bmcuCi0gICAgaWYgKCFnZXN0dXJlRXZlbnQuZGVsdGFYICYmICFnZXN0dXJlRXZlbnQuZGVsdGFZ
KSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQogICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0
dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBv
aW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKTsKICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgewogICAgIGNhc2UgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6IHsKLSAgICAgICAgT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVs
dGFZKSk7Ci0gICAgICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlv
biA9IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZVRvQ0NH
ZXN0dXJlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3VydmUucmVsZWFzZSgpKSwgdGhpcyk7Ci0gICAg
ICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGFuaW1h
dGlvbi5yZWxlYXNlKCkpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OnN0
YXJ0ZWQiKTsKKyAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZl
ID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgtZ2Vz
dHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsKKyAgICAgICAgbV93aGVl
bEZsaW5nQW5pbWF0aW9uID0gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZv
cm1HZXN0dXJlVG9DQ0dlc3R1cmVBZGFwdGVyOjpjcmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkp
LCB0aGlzKTsKKyAgICAgICAgbV93aGVlbEZsaW5nUG9pbnQgPSBJbnRQb2ludChnZXN0dXJlRXZl
bnQueCwgZ2VzdHVyZUV2ZW50LnkpOworICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2No
ZWR1bGVBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9Ci0gICAg
Y2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKLSAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkOgotICAgICAgICBicmVhazsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OmZh
aWxlZCIpOworICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgIGNhc2UgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQw
KCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
OjppZ25vcmVkIik7CisgICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CiAgICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiB9CiAKIGludCBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CkBAIC0yNzYsMTQgKzI4MCw1
OCBAQCBpbnQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmlkZW50aWZpZXIoKSBjb25z
dAogICAgIHJldHVybiBtX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw6OndpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKQordm9pZCBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkKK3sK
KyAgICBpZiAoIW1fd2hlZWxGbGluZ0FuaW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fd2hlZWxGbGluZ0FuaW1hdGlvbi0+YW5pbWF0ZShtb25vdG9uaWNUaW1lKSkKKyAgICAg
ICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgZWxzZSB7
CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbDo6YW5pbWF0ZTo6ZmxpbmdPdmVyIik7CisgICAgICAgIG1fd2hlZWxGbGluZ0Fu
aW1hdGlvbi5jbGVhcigpOworICAgIH0KK30KKworYm9vbCBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6Y2FuY2VsQ3VycmVudEZsaW5nKCkKIHsKKyAgICBib29sIGhhZEZsaW5nQW5pbWF0
aW9uID0gbV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQxKCJj
YyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2FuY2VsQ3VycmVudEZsaW5nIiwg
ImhhZEZsaW5nQW5pbWF0aW9uIiwgaGFkRmxpbmdBbmltYXRpb24pOworICAgIG1fd2hlZWxGbGlu
Z0FuaW1hdGlvbi5jbGVhcigpOworICAgIHJldHVybiBoYWRGbGluZ0FuaW1hdGlvbjsKIH0KIAog
dm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50UG9p
bnQmIGluY3JlbWVudCkKIHsKLSAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCi0gICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeSh0b1NpemUoaW5jcmVtZW50KSk7CisgICAg
aWYgKGluY3JlbWVudCA9PSBJbnRQb2ludDo6emVybygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBUUkFDRV9FVkVOVDIoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzY3Jv
bGxCeSIsICJ4IiwgaW5jcmVtZW50LngoKSwgInkiLCBpbmNyZW1lbnQueSgpKTsKKworICAgIFdl
Yk1vdXNlV2hlZWxFdmVudCBldmVudDsKKyAgICBldmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6
TW91c2VXaGVlbDsKKyAgICBldmVudC5kZWx0YVggPSAtaW5jcmVtZW50LngoKTsKKyAgICBldmVu
dC5kZWx0YVkgPSAtaW5jcmVtZW50LnkoKTsKKyAgICBldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5n
RGVsdGFzID0gdHJ1ZTsKKyAgICBldmVudC54ID0gbV93aGVlbEZsaW5nUG9pbnQueCgpOworICAg
IGV2ZW50LnkgPSBtX3doZWVsRmxpbmdQb2ludC55KCk7CisKKyAgICBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhhbmRsZUlucHV0
RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNh
c2UgRGlkSGFuZGxlOgorICAgIGNhc2UgRHJvcEV2ZW50OgorICAgICAgICBicmVhazsgCisgICAg
Y2FzZSBEaWROb3RIYW5kbGU6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnk6OkFib3J0RmxpbmciKTsKKyAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGdvdCBhIERpZE5vdEhhbmRsZSwgdGhhdCBtZWFucyB3ZSBu
ZWVkIHRvIGRlbGl2ZXIgd2hlZWxzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgLy8gSW4g
dGhpcyBjYXNlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjb21taXQgYW5kIHRyYW5zZmVyIHRoZSBm
bGluZyBjdXJ2ZSBvdmVyIHRvIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZCBhbmQgcnVuIHRo
ZSByZXN0IG9mIHRoZSB3aGVlbHMgZnJvbSB0aGVyZS4KKyAgICAgICAgLy8gVGhpcyBjYW4gaGFw
cGVuIHdoZW4gZmxpbmdpbmcgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBzY3JvbGxhYmxlIHN1YmFy
ZWEgdGhhdCB3ZSBjYW4ndAorICAgICAgICAvLyBzY3JvbGwgb24gdGhlIHRocmVhZCBpZiB0aGUg
Zmxpbmcgc3RhcnRzIG91dHNpZGUgdGhlIHN1YmFyZWEgYnV0IHRoZW4gaXMgZmx1bmcgInVuZGVy
IiB0aGUKKyAgICAgICAgLy8gcG9pbnRlci4KKyAgICAgICAgLy8gRm9yIG5vdywganVzdCBhYm9y
dCB0aGUgZmxpbmcuCisgICAgICAgIGNhbmNlbEN1cnJlbnRGbGluZygpOworICAgIH0KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXggODIzOTBjNjQ5MDkyYTM5MmUxNzUxZTA0MTRkNWQx
YjFiNDVlZjQwYS4uZDk2MTk1ODdkM2Y1ODg2M2VjZTczZGVmYjBjZDRmODE3ZDdjNDI3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsX2gKICNkZWZpbmUgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGxfaAogCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgi
CiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIldlYklu
cHV0RXZlbnQuaCIKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2ViQ29yZTo6
Q0NJbnB1dEhhbmRsZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVy
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAg
ICAvLyBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKQEAgLTcyLDcg
KzczLDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKIAotICAgIGJv
b2wgaGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYpOworICAgIGVudW0g
RXZlbnREaXNwb3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgaW5wdXQgZXZlbnQgYW5kIGRldGVy
bWluZXMgdGhlIGRpc3Bvc2l0aW9uLCBidXQgZG9lcyBub3QgbWFrZQorICAgIC8vIGFueSBjYWxs
cyBvdXQgdG8gdGhlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuIFNvbWUgaW5wdXQg
dHlwZXMgZGVmZXIgdG8gaGVscGVycy4KKyAgICBFdmVudERpc3Bvc2l0aW9uIGhhbmRsZUlucHV0
RXZlbnRJbnRlcm5hbChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisKKyAgICBFdmVudERpc3Bvc2l0
aW9uIGhhbmRsZUdlc3R1cmVGbGluZyhjb25zdCBXZWJHZXN0dXJlRXZlbnQmKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB3ZSBhY3R1YWxseSBoYWQgYW4gYWN0aXZlIGZsaW5nIHRvIGNhbmNl
bC4KKyAgICBib29sIGNhbmNlbEN1cnJlbnRGbGluZygpOworCisgICAgT3duUHRyPFdlYkNvcmU6
OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFdl
YkNvcmU6OkludFBvaW50IG1fd2hlZWxGbGluZ1BvaW50OyAvLyBQb2ludGVyIHBvc2l0aW9uIGZv
ciB0aGUgY3VycmVudCBmbGluZy4gCiAKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwpAQCAtODIsNyArOTQsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQ7CiAgICAgYm9vbCBtX2V4
cGVjdFBpbmNoVXBkYXRlRW5kOwogI2VuZGlmCi0gICAgYm9vbCBtX3Njcm9sbFN0YXJ0ZWQ7Cisg
ICAgYm9vbCBtX2dlc3R1cmVTY3JvbGxTdGFydGVkOwogCiAgICAgc3RhdGljIGludCBzX25leHRB
dmFpbGFibGVJZGVudGlmaWVyOwogICAgIHN0YXRpYyBIYXNoU2V0PFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsKj4qIHNfY29tcG9zaXRvcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMDZjMmIzZTFkNmMxMTIwNTgxODNjZGZmNjI5NmJmYjFl
NWNlOWMzYi4uMmI5NjA2MzdmMTg3MDMyOGVjNTNmYzM3ZDRhODAzM2Q2MTY3MDY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzMwMSw5ICszMzAx
LDEwIEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6
ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsCiAgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkg
fHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChwYWdlU2NhbGVEZWx0YSA9PSAxKQorICAgIGlmIChwYWdlU2NhbGVEZWx0YSA9PSAxKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQyKCJ3ZWJraXQiLCAiV2ViVmlld0ltcGw6OmFw
cGx5U2Nyb2xsQW5kU2NhbGU6OnNjcm9sbEJ5IiwgIngiLCBzY3JvbGxEZWx0YS53aWR0aCwgInki
LCBzY3JvbGxEZWx0YS5oZWlnaHQpOwogICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmll
dygpLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgY2hhbmdlZCwgc28gYXBwbHkgYSBzY2FsZSBhbmQgc2Ny
b2xsIGluIGEgc2luZ2xlCiAgICAgICAgIC8vIG9wZXJhdGlvbi4gVGhlIG9sZCBzY3JvbGwgb2Zm
c2V0IChhbmQgcGFzc2VkLWluIGRlbHRhKSBhcmUKICAgICAgICAgLy8gaW4gdGhlIG9sZCBjb29y
ZGluYXRlIHNwYWNlLCBzbyB3ZSBmaXJzdCBuZWVkIHRvIG11bHRpcGx5IHRoZW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0YjE0NjM2ZmE3ZTA2MDM1NDU2NTQ3NDVm
ZjRkYTkwYzg5MDdkZThmLi41NzZmNzBhOWJkNjljNTE2ZmNkZDU4ODY4ZWIwMmE5OWMwYzhmM2I0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmgiCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC00NiwxMDggKzQ3LDUwIEBA
IGNsYXNzIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vY2tJbnB1dEhhbmRsZXJD
bGllbnQpOwogcHVibGljOgogICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQoKQotICAgICAgICA6
IG1fc2Nyb2xsU3RhdHVzKFNjcm9sbFN0YXJ0ZWQpCi0gICAgICAgICwgbV9waW5jaFN0YXJ0ZWQo
ZmFsc2UpCi0gICAgICAgICwgbV9waW5jaEVuZGVkKGZhbHNlKQotICAgICAgICAsIG1fcGluY2hN
YWduaWZpY2F0aW9uKDApCi0gICAgICAgICwgbV9zY3JvbGxCeUNhbGxlZChmYWxzZSkKICAgICB7
CiAgICAgfQogICAgIHZpcnR1YWwgfk1vY2tJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KIAotICAg
IHZvaWQgc2V0U2Nyb2xsU3RhdHVzKFNjcm9sbFN0YXR1cyBzdGF0dXMpIHsgbV9zY3JvbGxTdGF0
dXMgPSBzdGF0dXM7IH0KIAotICAgIGJvb2wgcGluY2hTdGFydGVkKCkgY29uc3QgeyByZXR1cm4g
bV9waW5jaFN0YXJ0ZWQ7IH0KLSAgICBib29sIHBpbmNoRW5kZWQoKSBjb25zdCB7IHJldHVybiBt
X3BpbmNoRW5kZWQ7IH0KLSAgICBmbG9hdCBwaW5jaE1hZ2luaWZjYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3BpbmNoTWFnbmlmaWNhdGlvbjsgfQotICAgIGJvb2wgc2Nyb2xsQnlDYWxsZWQoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbEJ5Q2FsbGVkOyB9CisgICAgTU9DS19NRVRIT0QwKHBpbmNo
R2VzdHVyZUJlZ2luLCB2b2lkKCkpOworICAgIE1PQ0tfTUVUSE9EMihwaW5jaEdlc3R1cmVVcGRh
dGUsIHZvaWQoZmxvYXQgbWFnbmlmeURlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYW5j
aG9yKSk7CisgICAgTU9DS19NRVRIT0QwKHBpbmNoR2VzdHVyZUVuZCwgdm9pZCgpKTsKIAotICAg
IHZvaWQgcmVzZXRQaW5jaCgpCi0gICAgewotICAgICAgICBtX3BpbmNoU3RhcnRlZCA9IG1fcGlu
Y2hFbmRlZCA9IG1fc2Nyb2xsQnlDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgbV9waW5jaE1hZ25p
ZmljYXRpb24gPSAwOwotICAgIH0KKyAgICBNT0NLX01FVEhPRDAoc2NoZWR1bGVBbmltYXRpb24s
IHZvaWQoKSk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
biogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZlR2VzdHVyZUFuaW1h
dGlvbi5nZXQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24p
IHsgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgTU9DS19NRVRI
T0QyKHNjcm9sbEJlZ2luLCBTY3JvbGxTdGF0dXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlKSk7CisgICAgTU9D
S19NRVRIT0QxKHNjcm9sbEJ5LCB2b2lkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSk7CisgICAg
TU9DS19NRVRIT0QwKHNjcm9sbEVuZCwgdm9pZCgpKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNSZWRyYXcoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbFN0
YXR1cyBzY3JvbGxCZWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUpIE9WRVJSSURFCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9zY3JvbGxTdGF0dXM7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxC
eShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREUgeyBtX3Njcm9sbEJ5Q2FsbGVkID0g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxFbmQoKSBPVkVSUklERSB7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVCZWdpbigpIE9WRVJSSURFCi0gICAgewotICAgICAg
ICBtX3BpbmNoU3RhcnRlZCA9IHRydWU7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdl
c3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlmeURlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
YW5jaG9yKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSBt
YWduaWZ5RGVsdGE7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKSBP
VkVSUklERQotICAgIHsKLSAgICAgICAgbV9waW5jaEVuZGVkID0gdHJ1ZTsKLSAgICB9CiAgICAg
dmlydHVhbCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHRhcmdldFBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFuY2hvclBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBwYWdlU2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBzdGFydFRpbWVNcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTXMpIE9WRVJSSURFIHsgfQogCi0gICAgU2Ny
b2xsU3RhdHVzIG1fc2Nyb2xsU3RhdHVzOwotICAgIGJvb2wgbV9waW5jaFN0YXJ0ZWQ7Ci0gICAg
Ym9vbCBtX3BpbmNoRW5kZWQ7Ci0gICAgZmxvYXQgbV9waW5jaE1hZ25pZmljYXRpb247Ci0gICAg
Ym9vbCBtX3Njcm9sbEJ5Q2FsbGVkOwotCi0gICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbj4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkg
T1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPikg
T1ZFUlJJREUgeyB9CiB9OwogCiBjbGFzcyBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNs
aWVudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xp
ZW50KTsKIHB1YmxpYzoKICAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCgp
Ci0gICAgICAgIDogbV9oYW5kbGVkKGZhbHNlKQotICAgICAgICAsIG1fc2VuZFRvV2lkZ2V0KGZh
bHNlKQorICAgICAgICA6IFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCgp
CiAgICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5Nb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckNsaWVudCgpIHsgfQogCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBtX2hhbmRs
ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9zZW5kVG9XaWRnZXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBib29sIGhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZWQ7IH0KLSAgICBib29sIHNl
bmRUb1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFRvV2lkZ2V0OyB9Ci0KLXByaXZhdGU6
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTaHV0ZG93bigpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1f
aGFuZGxlZCA9IHRydWU7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWROb3RIYW5kbGVJbnB1
dEV2ZW50KGJvb2wgc2VuZFRvV2lkZ2V0KSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9zZW5k
VG9XaWRnZXQgPSBzZW5kVG9XaWRnZXQ7Ci0gICAgfQotCi0gICAgYm9vbCBtX2hhbmRsZWQ7Ci0g
ICAgYm9vbCBtX3NlbmRUb1dpZGdldDsKKyAgICBNT0NLX01FVEhPRDAod2lsbFNodXRkb3duLCB2
b2lkKCkpOworICAgIE1PQ0tfTUVUSE9EMChkaWRIYW5kbGVJbnB1dEV2ZW50LCB2b2lkKCkpOwor
ICAgIE1PQ0tfTUVUSE9EMShkaWROb3RIYW5kbGVJbnB1dEV2ZW50LCB2b2lkKGJvb2wgc2VuZFRv
V2lkZ2V0KSk7CiB9OwogCiBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBmcm9t
SWRlbnRpZmllcikKIHsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBj
YW4gb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCiAgICAgV2ViQ29y
ZTo6RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGFsd2F5c0ltcGxUaHJlYWQ7Ci0jZW5kaWYKIAog
ICAgIC8vIEJlZm9yZSBjcmVhdGluZyBhbnkgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcnMsIGxv
b2t1cHMgZm9yIGFueSB2YWx1ZSBzaG91bGQgZmFpbCBhbmQgbm90IGNyYXNoLgogICAgIEVYUEVD
VF9FUSgwLCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRpZmllcigyKSk7CkBA
IC0xNjcsMTc0ICsxMTAsMjE3IEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGws
IGZyb21JZGVudGlmaWVyKQogCiAgICAgLy8gQWZ0ZXIgdGhlIGNvbXBvc2l0b3IgaXMgZGVzdHJv
eWVkLCBpdHMgZW50cnkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbWFwLgogICAgIEVYUEVD
VF9FUSgwLCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRpZmllcihjb21wb3Np
dG9ySWRlbnRpZmllcikpOwotCiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigp
OwogfQogCi1URVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlU2Nyb2xs
KQotewotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgLy8gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJl
IGNhbGxlZCBmcm9tIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAgICBXZWJDb3JlOjpEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgYWx3YXlzSW1wbFRocmVhZDsKLSNlbmRpZgorY2xhc3MgV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVi
bGljOgorICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCgpCisgICAgeworICAg
ICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgICAgIG1faW5w
dXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbV9tb2Nr
SW5wdXRIYW5kbGVyKTsKKyAgICAgICAgbV9pbnB1dEhhbmRsZXItPnNldENsaWVudCgmbV9tb2Nr
Q2xpZW50KTsKKyAgICB9CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1dEhh
bmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhh
bmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5wdXRI
YW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtb2NrQ2xp
ZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKyAgICB+V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0KCkKKyAgICB7CisgICAgICAgIG1faW5wdXRI
YW5kbGVyLT5zZXRDbGllbnQoMCk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyLmNsZWFyKCk7Cisg
ICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9CiAKK3Byb3Rl
Y3RlZDoKKyAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1fbW9ja0lucHV0SGFuZGxlcjsKKyAg
ICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IG1faW5wdXRIYW5kbGVyOwor
ICAgIE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IG1fbW9ja0NsaWVudDsKICAg
ICBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCBnZXN0dXJlOwogCitwcml2YXRlOgorICAgIFdlYkNv
cmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBtX2Fsd2F5c0ltcGxUaHJlYWQ7Cit9OworCisK
K1RFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxT
dGFydGVkKQoreworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVn
aW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpS
ZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpKTsKKyAg
ICAvLyBXZSBzaG91bGRuJ3Qgc2VuZCBhbnkgZXZlbnRzIHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMg
Z2VzdHVyZS4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBzaG91bGQgZ2V0IG9uZSBkaWRIYW5kbGVJbnB1
dEV2ZW50KCkgY2FsbCBwZXIgaGFuZGxlSW5wdXRFdmVudCgpLgorICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudCg6OnRlc3Rpbmc6Ol8pKS5UaW1lcygw
KTsKKwogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNj
cm9sbEJlZ2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsK
LSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7CisgICAg
bV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiAKICAgICBnZXN0dXJl
LnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU7Ci0gICAg
Z2VzdHVyZS5kZWx0YVkgPSA0MDsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQo
Z2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVY
UEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJl
c2V0KCk7CisgICAgZ2VzdHVyZS5kZWx0YVkgPSAtNDA7IC8vIC1ZIG1lYW5zIHNjcm9sbCBkb3du
IC0gaS5lLiBpbiB0aGUgK1kgZGlyZWN0aW9uLgorICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0
SGFuZGxlciwgc2Nyb2xsQnkodGVzdGluZzo6UHJvcGVydHkoJldlYkNvcmU6OkludFNpemU6Omhl
aWdodCwgdGVzdGluZzo6R3QoMCkpKSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBk
aWRIYW5kbGVJbnB1dEV2ZW50KCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2
ZW50KGdlc3R1cmUpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlU2Nyb2xsRW5kOwogICAgIGdlc3R1cmUuZGVsdGFZID0gMDsKLSAgICBpbnB1dEhh
bmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0Ns
aWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdl
dCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrSW5w
dXRIYW5kbGVyLCBzY3JvbGxFbmQoKSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBk
aWRIYW5kbGVJbnB1dEV2ZW50KCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2
ZW50KGdlc3R1cmUpOworfQogCi0gICAgbW9ja0lucHV0SGFuZGxlci5zZXRTY3JvbGxTdGF0dXMo
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CitURVNUX0YoV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsRmFpbGVkKQorewor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4oOjp0ZXN0aW5n
OjpfLCA6OnRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAvLyBXZSBz
aG91bGRuJ3QgaGFuZGxlIGFueSBvZiB0aGVzZSBpbnB1dHMgb3Vyc2VsdmVzLgorICAgIC8vIElu
c3RlYWQsIHdlIHNob3VsZCBnZXQgb25lIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSkgY2Fs
bCBwZXIgaGFuZGxlSW5wdXRFdmVudCgpLAorICAgIC8vIGluZGljYXRpbmcgdGhhdCB3aGlsZSB3
ZSBjb3VsZG4ndCBzY3JvbGwgdGhlIHdpZGdldCBzdGlsbCBuZWVkcyB0byBzZWUgdGhlIGV2ZW50
LgorICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKS5U
aW1lcygwKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEJlZ2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0
dXJlKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVD
VF9UUlVFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQo
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
dHJ1ZSkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwog
CiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xs
VXBkYXRlOwogICAgIGdlc3R1cmUuZGVsdGFZID0gNDA7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5k
bGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRs
ZWQoKSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAg
bW9ja0NsaWVudC5yZXNldCgpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90
SGFuZGxlSW5wdXRFdmVudCh0cnVlKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7CiAKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6Okdlc3R1cmVTY3JvbGxFbmQ7CiAgICAgZ2VzdHVyZS5kZWx0YVkgPSAwOwotICAgIGlucHV0
SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9j
a0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuc2VuZFRvV2lk
Z2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLQotICAgIGlucHV0SGFuZGxlci0+c2V0
Q2xpZW50KDApOwotCi0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAg
IEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVlKSk7
CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiB9CiAKLVRF
U1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVQaW5jaCkKK1RFU1RfRihX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxJZ25vcmVkKQog
ewotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgLy8gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNh
bGxlZCBmcm9tIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAgICBXZWJDb3JlOjpEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgYWx3YXlzSW1wbFRocmVhZDsKLSNlbmRpZgorICAgIEVYUEVDVF9DQUxM
KG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6Xykp
CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpKTsKIAotICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQg
bW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUo
Jm1vY2tJbnB1dEhhbmRsZXIpOwotICAgIE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xp
ZW50IG1vY2tDbGllbnQ7Ci0gICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoJm1vY2tDbGllbnQp
OworICAgIC8vIFdlIHNob3VsZG4ndCBoYW5kbGUgYW55IG9mIHRoZXNlIGlucHV0cyBvdXJzZWx2
ZXMuCisgICAgLy8gSW5zdGVhZCwgd2Ugc2hvdWxkIGdldCBvbmUgZGlkTm90SGFuZGxlSW5wdXRF
dmVudChmYWxzZSkgY2FsbCBwZXIgaGFuZGxlSW5wdXRFdmVudCgpLAorICAgIC8vIGluZGljYXRp
bmcgdGhhdCB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhhdCB0aGVyZSdzIG5vdGhpbmcgdGhhdCBjb3Vs
ZCBzY3JvbGwgb3Igb3RoZXJ3aXNlCisgICAgLy8gcmVhY3QgdG8gdGhpcyBnZXN0dXJlIHNlcXVl
bmNlIGFuZCB0aHVzIHdlIHNob3VsZCBkcm9wIHRoZSB3aG9sZSBnZXN0dXJlIHNlcXVlbmNlIG9u
IHRoZSBmbG9vci4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhhbmRsZUlucHV0
RXZlbnQoKSkuVGltZXMoMCk7CiAKLSAgICBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCBnZXN0dXJl
OworICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9s
bEJlZ2luOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRF
dmVudChmYWxzZSkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1
cmUpOworfQogCitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0
dXJlUGluY2gpCit7CisgICAgLy8gV2Ugc2hvdWxkIGhhbmRsZSB0aGUgZW50aXJlIHNlcXVlbmNl
IG91cnNlbHZlcy4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlu
cHV0RXZlbnQoOjp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgCiAgICAgZ2VzdHVyZS50eXBlID0g
V2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hCZWdpbjsKLSAgICBpbnB1dEhhbmRs
ZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVu
dC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgp
KTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNoU3RhcnRlZCgpKTsKLSAg
ICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7
CisgICAgRVhQRUNUX0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBwaW5jaEdlc3R1cmVCZWdpbigp
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7
CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiAKICAgICBn
ZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZTsK
ICAgICBnZXN0dXJlLmRlbHRhWCA9IDEuNTsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwot
ICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBFWFBFQ1Rf
RkFMU0UobW9ja0lucHV0SGFuZGxlci5waW5jaEVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSgxLjUs
IG1vY2tJbnB1dEhhbmRsZXIucGluY2hNYWdpbmlmY2F0aW9uKCkpOwotICAgIG1vY2tDbGllbnQu
cmVzZXQoKTsKLSAgICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBnZXN0dXJl
LnggPSA3OworICAgIGdlc3R1cmUueSA9IDEzOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0
SGFuZGxlciwgcGluY2hHZXN0dXJlVXBkYXRlKDEuNSwgV2ViQ29yZTo6SW50UG9pbnQoNywgMTMp
KSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkp
OworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCiAgICAg
Z2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU7
CiAgICAgZ2VzdHVyZS5kZWx0YVggPSAwLjU7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1
dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsK
LSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIucGluY2hFbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEoMC41
LCBtb2NrSW5wdXRIYW5kbGVyLnBpbmNoTWFnaW5pZmNhdGlvbigpKTsKLSAgICBtb2NrQ2xpZW50
LnJlc2V0KCk7Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7CisgICAgZ2VzdHVy
ZS54ID0gOTsKKyAgICBnZXN0dXJlLnkgPSA2OworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0
SGFuZGxlciwgcGluY2hHZXN0dXJlVXBkYXRlKC41LCBXZWJDb3JlOjpJbnRQb2ludCg5LCA2KSkp
OworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsK
KyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKIAogICAgIGdl
c3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoRW5kOwotICAg
IGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfVFJV
RShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2Vu
ZFRvV2lkZ2V0KCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIucGluY2hFbmRl
ZCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0gICAgbW9ja0lucHV0SGFuZGxlci5yZXNl
dFBpbmNoKCk7Ci0KLSAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgwKTsKLQotICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1
dEhhbmRsZXIsIHBpbmNoR2VzdHVyZUVuZCgpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGll
bnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlu
cHV0RXZlbnQoZ2VzdHVyZSk7CiB9CiAKLVRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwsIGdlc3R1cmVGbGluZykKK1RFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRl
c3QsIGdlc3R1cmVGbGluZ1N0YXJ0ZWQpCiB7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpp
bml0aWFsaXplKDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xs
QmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5n
OjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpKTsK
KworICAgIC8vIFdlIHNob3VsZCBoYW5kbGUgdGhlIGVudGlyZSBzZXF1ZW5jZSBvdXJzZWx2ZXMu
CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KDo6
dGVzdGluZzo6XykpLlRpbWVzKDApOworCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IDEwOwor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5wdXRFdmVudCgpKTsKKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwor
ICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgLy8g
VmVyaWZ5IHRoYXQgYSBHZXN0dXJlRmxpbmdDYW5jZWwgZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5j
ZWxzIGl0LgorICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVy
ZUZsaW5nQ2FuY2VsOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5w
dXRFdmVudCgpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJl
KTsKK30KIAotICAgIC8vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4gb25seSBi
ZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgV2ViQ29yZTo6RGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGFsd2F5c0ltcGxUaHJlYWQ7CitURVNUX0YoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdGYWlsZWQpCit7CisgICAgRVhQRUNU
X0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5n
OjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVyQ2xp
ZW50IG1vY2tJbnB1dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3Jl
YXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckNsaWVudCBtb2NrQ2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xp
ZW50KTsKKyAgICAvLyBXZSBzaG91bGRuJ3QgaGFuZGxlIGFueSBwYXJ0IG9mIHRoZSBzZXF1ZW5j
ZSBvdXJzZWx2ZXMuCisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1
dEV2ZW50KCkpLlRpbWVzKDApOwogCi0gICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVy
ZTsKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGlu
Z1N0YXJ0OworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRF
dmVudCh0cnVlKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7CiAKLSAgICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xsRW5k
IGV2ZW50LgotICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVNjcm9sbEJlZ2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJl
KTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsK
KyAgICAvLyBFdmVuIGlmIHdlIGRpZG4ndCBzdGFydCBhIGZsaW5nIG91cnNlbHZlcywgd2Ugc3Rp
bGwgbmVlZCB0byBzZW5kIHRoZSBjYW5jZWwgZXZlbnQgdG8gdGhlIHdpZGdldC4KKyAgICBnZXN0
dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSkp
OworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworfQogCi0g
ICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5k
OwotICAgIGdlc3R1cmUuZGVsdGFYID0gMjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwot
ICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBBU1NFUlRf
VFJVRShtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7Ci0gICAgbW9ja0lu
cHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCktPmFuaW1hdGUoMC4wMDEpOwotICAg
IEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7Ci0gICAgbW9j
a0NsaWVudC5yZXNldCgpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biBk
dXJpbmcgYW4gYW5pbWF0aW9uIGNhbmNlbHMgaXQuCi0gICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0
OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIu
YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0KLSAg
ICAvLyBWZXJpZnkgdGhhdCBhIEdlc3R1cmVUYXBEb3duIHdoZW4gbm8gYW5pbWF0aW9uIGlzIGFj
dGl2ZSBpcyBub3QgaGFuZGxlZC4KLSAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0
RXZlbnQ6Okdlc3R1cmVUYXBEb3duOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVu
dChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAg
IEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotCi0gICAgaW5wdXRIYW5k
bGVyLT5zZXRDbGllbnQoMCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigp
OworVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5n
QW5pbWF0ZXMpCit7CisgICAgLy8gV2Ugc2hvdWxkIGhhbmRsZSB0aGUgZW50aXJlIHNlcXVlbmNl
IG91cnNlbHZlcy4KKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlu
cHV0RXZlbnQoOjp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisKKyAgICAvLyBPbiB0aGUgZmxpbmcg
c3RhcnQsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBhbmltYXRpb24gYnV0IG5vdCBhY3R1YWxseSBz
dGFydAorICAgIC8vIHNjcm9sbGluZy4KKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklu
cHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OworICAgIGdlc3R1cmUuZGVsdGFYID0gLTEwMDA7
CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5kbGVJbnB1dEV2ZW50KCkpOwor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2NoZWR1bGVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5n
OjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJD
b3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCkpOworICAgIG1faW5wdXRI
YW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgLy8gVGhlIGZpcnN0IGFu
aW1hdGUgY2FsbCBzaG91bGQgbGV0IHVzIHBpY2sgdXAgYW4gYW5pbWF0aW9uIHN0YXJ0IHRpbWUs
IGJ1dCB3ZQorICAgIC8vIHNob3VsZG4ndCBhY3R1YWxseSBtb3ZlIGFueXdoZXJlIGp1c3QgeWV0
LiBUaGUgZmlyc3QgZnJhbWUgYWZ0ZXIgdGhlIGZsaW5nIHN0YXJ0CisgICAgLy8gd2lsbCB0eXBp
Y2FsbHkgaW5jbHVkZSB0aGUgbGFzdCBzY3JvbGwgZnJvbSB0aGUgZ2VzdHVyZSB0aGF0IGxlYWQg
dG8gdGhlIHNjcm9sbAorICAgIC8vIChlaXRoZXIgd2hlZWwgb3IgZ2VzdHVyZSBzY3JvbGwpLCBz
byB0aGVyZSBzaG91bGQgYmUgbm8gdmlzaWJsZSBoaXRjaC4KKyAgICBFWFBFQ1RfQ0FMTChtX21v
Y2tJbnB1dEhhbmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpLlRp
bWVzKDApOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwKTsKKworICAgIC8vIFRoZSBz
ZWNvbmQgY2FsbCBzaG91bGQgc3RhcnQgc2Nyb2xsaW5nIGluIHRoZSArWCBkaXJlY3Rpb24uCisg
ICAgRVhQRUNUX0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY2hlZHVsZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6
Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNv
cmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKSk7CisgICAgRVhQRUNUX0NB
TEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCeSh0ZXN0aW5nOjpQcm9wZXJ0eSgmV2ViQ29y
ZTo6SW50U2l6ZTo6d2lkdGgsIHRlc3Rpbmc6Okd0KDApKSkpOworICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsRW5kKCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmlt
YXRlKDEwLjEpOworCisgICAgLy8gTGV0J3Mgc2F5IG9uIHRoZSB0aGlyZCBjYWxsIHdlIGhpdCBh
IG5vbi1zY3JvbGxhYmxlIHJlZ2lvbi4gV2Ugc2hvdWxkIGFib3J0IHRoZSBmbGluZyBhbmQgbm90
IHNjcm9sbC4KKyAgICAvLyBGSVhNRTogV2UgYWxzbyBuZWVkIHRvIGRvIHNvbWUgd29yayB0byB0
cmFuc2ZlciB0aGUgcmVzdCBvZiB0aGlzIGZsaW5nIHRvIHRoZSBtYWluIHRocmVhZC4KKyAgICAv
LyBBZGQgdGVzdHMgZm9yIHRoaXMgb25jZSBpdCdzIGltcGxlbWVudGVkLgorICAgIEVYUEVDVF9D
QUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2NoZWR1bGVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0NBTEwobV9tb2NrSW5wdXRIYW5kbGVyLCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5n
OjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCkpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lu
cHV0SGFuZGxlciwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDApOworICAgIEVYUEVDVF9D
QUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOworICAgIG1faW5w
dXRIYW5kbGVyLT5hbmltYXRlKDEwLjIpOworCisgICAgLy8gU2luY2Ugd2UndmUgYWJvcnRlZCB0
aGUgZmxpbmcsIHRoZSBuZXh0IGFuaW1hdGlvbiBzaG91bGQgYmUgYSBuby1vcCBhbmQgc2hvdWxk
IG5vdCByZXN1bHQgaW4gYW5vdGhlcgorICAgIC8vIGZyYW1lIGJlaW5nIHJlcXVlc3RlZC4KKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tJbnB1dEhhbmRsZXIsIHNjaGVkdWxlQW5pbWF0aW9uKCkpLlRp
bWVzKDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0lucHV0SGFuZGxlciwgc2Nyb2xsQmVnaW4o
dGVzdGluZzo6XywgdGVzdGluZzo6XykpLlRpbWVzKDApOworICAgIG1faW5wdXRIYW5kbGVyLT5h
bmltYXRlKDEwLjMpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132683</attachid>
            <date>2012-03-19 15:17:31 -0700</date>
            <delta_ts>2012-03-19 16:24:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81462-20120319151730.patch</filename>
            <type>text/plain</type>
            <size>44265</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY0ZjBkNWFkMTE3Zjk2
MTFmOTljZDhjMTZhYjI1ZDk4OGZmMWQwOS4uZThlMWExM2U5ZTY5NWFkMjA4NjRhMWI2YjZhNTRm
OTJiYTcyNWZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTE4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZmxpbmctYnktd2hlZWwgb24gY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjb21wb3NpdG9yIHRocmVh
ZCBzdXBwb3J0IGZvciBhIGZsaW5nIHR5cGUgaW1wbGVtZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiB3
aGVlbCBzY3JvbGxzLiBDb3ZlcmVkIGJ5IG5ldyB0ZXN0cworICAgICAgICBpbiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKENDSW5wdXRIYW5kbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXApOgorCiAyMDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2
ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9u
X3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9NSVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBv
cnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY5ZGFhNDM3OWQ2MTc3MTc2MWI2ZjRi
MzM5MmEwNTMzOTFmZjUxZmYuLjk3NjM0NjYwNGJiMjMzMDQzNDJmODMxZWU1MTRjMTVmMWE3YjZi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDMt
MTggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBmbGluZy1ieS13aGVlbCBvbiBjb21wb3NpdG9yIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0NjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgZmxp
bmctYnktd2hlZWwgYW5kIGJlZWYgdXAgZXhpc3RpbmcgdW5pdCB0ZXN0IGNvdmVyYWdlIGNvbnNp
ZGVyYWJseSBieSB1c2luZyBnbW9jayBpbnN0ZWFkIG9mIG1vY2tpbmcKKyAgICAgICAgYnkgaGFu
ZC4KKworICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1
dEV2ZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmFuaW1h
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2Fu
Y2VsQ3VycmVudEZsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAg
ICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorCiAy
MDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9N
SVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIu
aAppbmRleCAwMzFkN2RjNTAxZDlmNzM2YTM3NmE5MzViM2RlMjI0NDZiZTY5NWYxLi43NjYwOGQ5
ZmMxZDBkYTEzOWE0OTMwYmM1MDQ3YzA4YWViOGIyZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5k
bGVyLmgKQEAgLTQ1LDggKzQ1LDYgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5wdXRIYW5k
bGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlckNsaWVu
dCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwotCiAg
ICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxGYWlsZWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9s
bElnbm9yZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVsIH07
CiAKQEAgLTgwLDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uPikgPSAwOwogCisgICAgLy8gUmVxdWVzdCBhbm90aGVyIGNhbGxiYWNrIHRvIENDSW5w
dXRIYW5kbGVyOjphbmltYXRlKCkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KICAg
ICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtOTIsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q0NJbnB1dEhhbmRsZXIoKSB7IH0KIAogICAgIHZpcnR1YWwg
aW50IGlkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRv
dWJsZSBtb25vdG9uaWNUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IG1vbm90b25pY1RpbWUpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIENDSW5wdXRIYW5kbGVyKCkg
eyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGViZTA2ZjUx
MGU5NmQ1ZDA3ZDdkNzBmN2U2M2M1OTM2NDVhNjRkNDQuLmRkMmQ0MmE0NzE3YWFhMGVmYTViYWNj
OGEzYzI5ZjI2YjAyNGRiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC0xODEsNiArMTgxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0
aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuCiAgICAgICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICAvLyBGb3Ig
bm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4g
VG8gZG8gdGhpcywgd2UgbXVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmlu
ZGV4IDNiYjdkM2RlMTQxMzZlZGJiYzlmMTllZGY4NTA0NzI0M2RmYmJhYTMuLjBkYWU2MDQ2ODI0
MmU5YjE0MjY2N2Q3MDdjYTFlNWI5NDAyZGJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTY1LDcgKzY1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5
ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIC8vIENDSW5wdXRIYW5kbGVyQ2xpZW50IGltcGxlbWVu
dGF0aW9uCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IEludFBv
aW50JiwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSk7CiAgICAgdmlydHVh
bCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
RW5kKCk7CkBAIC03Niw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZl
R2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQogICAgIC8vIFRvIGNsZWFyIGFuIGFjdGl2ZSBhbmlt
YXRpb24sIHBhc3MgbnVsbHB0ci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOworICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGlu
Zy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKQEAgLTEzNSw2ICsxMzUsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzQW5pbWF0ZUxheWVyczsgfQogICAgIHZvaWQgc2V0TmVlZHNBbmltYXRlTGF5ZXJzKCkgeyBt
X25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7IH0KIAorICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKKwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5n
cyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5lMTY3
NTIyM2M1NDgwNzdiZjQwY2JiYWIzZGZlYmQ5ZjZiMmI4Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcApAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXAoKQogICAgIGRvdWJsZSBtb25vdG9uaWNUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZG91YmxlIHdhbGxDbG9ja1RpbWUgPSBjdXJy
ZW50VGltZSgpOwogCi0gICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQtPndpbGxEcmF3KG1v
bm90b25pY1RpbWUpOworICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLT5hbmltYXRlKG1v
bm90b25pY1RpbWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmFuaW1hdGUobW9ub3Rvbmlj
VGltZSwgd2FsbENsb2NrVGltZSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXggYmY4ZmY5NDFkNGVmZWI2ZDA5Yzg4
ODg1ZTc5MGY3ZDIwYmQwODkwMC4uMGY3YWZkNDU2ZGRmYTUyYmM1ZmZiZGU4OTc0NDNjMzViODRl
Y2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJUb3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgpAQCAtMTE4LDcgKzExOSw3
IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgLCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVu
ZChmYWxzZSkKICAgICAsIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQoZmFsc2UpCiAjZW5kaWYKLSAg
ICAsIG1fc2Nyb2xsU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQo
ZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTU0
LDI0ICsxNTUsMzggQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxl
SW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKKyAgICBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhh
bmRsZUlucHV0RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikg
eworICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRF
dmVudCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpZE5vdEhhbmRsZToKKyAgICAgICAg
bV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgbV9jbGllbnQt
PmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZl
bnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRF
dmVudEludGVybmFsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewogICAgIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKICAgICAgICAgY29uc3QgV2Vi
TW91c2VXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNl
V2hlZWxFdmVudCo+KCZldmVudCk7CiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2lu
KEludFBvaW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKICAgICAgICAgY2Fz
ZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiB1c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUgdG8gZ2V0IHNtb290
aCB3aGVlbCBzY3JvbGxpbmc/CisgICAgICAgICAgICBUUkFDRV9FVkVOVF9JTlNUQU5UMigiY2Mi
LCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0IHdoZWVsIHNjcm9s
bCIsICJkZWx0YVgiLCAtd2hlZWxFdmVudC5kZWx0YVgsICJkZWx0YVkiLCAtd2hlZWxFdmVudC5k
ZWx0YVkpOwogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNp
emUoLXdoZWVsRXZlbnQuZGVsdGFYLCAtd2hlZWxFdmVudC5kZWx0YVkpKTsKICAgICAgICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gRGlkSGFuZGxlOwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZl
bnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIERyb3BFdmVudDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pIHsKLSAgICAgICAgQVNTRVJUKCFtX3Nj
cm9sbFN0YXJ0ZWQpOworICAgICAgICBBU1NFUlQoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQpOwog
ICAgICAgICBBU1NFUlQoIW1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kID0gdHJ1ZTsKQEAgLTE4MCw5NCArMTk1
LDg1IEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNj
cm9sbEJlZ2luKEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMp
IHsKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAg
ICAgICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBtX2NsaWVudC0+
ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkOgorICAgICAgICAgICAgcmV0dXJuIERyb3BFdmVudDsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
U2Nyb2xsVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZCk7
Ci0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkdl
c3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVF
dmVudCo+KCZldmVudCk7Ci0gICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xs
QnkoSW50U2l6ZSgtZ2VzdHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KKworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0
ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworCisgICAgICAgIGNvbnN0IFdl
Ykdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1
cmVFdmVudCo+KCZldmVudCk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxC
eShJbnRTaXplKC1nZXN0dXJlRXZlbnQuZGVsdGFYLCAtZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOwor
ICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVj
dFNjcm9sbFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFNjcm9s
bFVwZGF0ZUVuZCA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQp
IHsKLSAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAg
ICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNj
cm9sbFN0YXJ0ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogCi0gICAgICAg
ICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxj
b25zdCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOwotICAgICAgICAgICAgaWYgKGhhbmRsZUdl
c3R1cmVGbGluZyhnZXN0dXJlRXZlbnQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7CisgICAgICAg
IG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRs
ZTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBp
bmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSB0cnVlOwogI2Vu
ZGlmCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVCZWdpbigpOwot
ICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZCkgewogICAgICAgICBBU1NFUlQobV9leHBl
Y3RQaW5jaFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFBpbmNo
VXBkYXRlRW5kID0gZmFsc2U7CiAjZW5kaWYKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnBpbmNoR2VzdHVyZUVuZCgpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVu
dCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBl
bHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZSkg
ewogICAgICAgICBBU1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CiAgICAgICAgIGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdl
c3R1cmVFdmVudCo+KCZldmVudCk7CiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5j
aEdlc3R1cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50
LngsIGdlc3R1cmVFdmVudC55KSk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd24pIHsKLSAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgIG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOwotICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGlkSGFuZGxlOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydCkgeworICAgICAg
ICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25z
dCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVy
ZUZsaW5nKGdlc3R1cmVFdmVudCk7CisgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbCkgeworICAgICAgICBpZiAoY2FuY2VsQ3VycmVu
dEZsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0KIAotICAgIG1f
Y2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyogc2VuZFRvV2lkZ2V0ICovKTsK
KyAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogfQogCi1ib29sIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0
dXJlRXZlbnQpCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlv
biBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEdlc3R1cmVTY3JvbGxF
bmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVsdGFYL1kpIHNpZ25hbHMgc3RhcnQgb2YgRmxp
bmcuCi0gICAgaWYgKCFnZXN0dXJlRXZlbnQuZGVsdGFYICYmICFnZXN0dXJlRXZlbnQuZGVsdGFZ
KSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQogICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0
dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBv
aW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKTsKICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgewogICAgIGNhc2UgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6IHsKLSAgICAgICAgT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVs
dGFZKSk7Ci0gICAgICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlv
biA9IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZVRvQ0NH
ZXN0dXJlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3VydmUucmVsZWFzZSgpKSwgdGhpcyk7Ci0gICAg
ICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGFuaW1h
dGlvbi5yZWxlYXNlKCkpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OnN0
YXJ0ZWQiKTsKKyAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZl
ID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgtZ2Vz
dHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsKKyAgICAgICAgbV93aGVl
bEZsaW5nQW5pbWF0aW9uID0gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZv
cm1HZXN0dXJlVG9DQ0dlc3R1cmVBZGFwdGVyOjpjcmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkp
LCB0aGlzKTsKKyAgICAgICAgbV93aGVlbEZsaW5nUG9pbnQgPSBJbnRQb2ludChnZXN0dXJlRXZl
bnQueCwgZ2VzdHVyZUV2ZW50LnkpOworICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2No
ZWR1bGVBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9Ci0gICAg
Y2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKLSAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkOgotICAgICAgICBicmVhazsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OmZh
aWxlZCIpOworICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgIGNhc2UgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQw
KCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
OjppZ25vcmVkIik7CisgICAgICAgIC8vIFdlIHN0aWxsIHBhc3MgdGhlIGN1cnZlIHRvIHRoZSBt
YWluIHRocmVhZCBpZiB0aGVyZSdzIG5vdGhpbmcgc2Nyb2xsYWJsZSwgaW4gY2FzZSBzb21ldGhp
bmcKKyAgICAgICAgLy8gcmVnaXN0ZXJzIGEgaGFuZGxlciBiZWZvcmUgdGhlIGN1cnZlIGlzIG92
ZXIuCisgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiB9CiAKIGludCBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CkBAIC0yNzYsMTQgKzI4Miw1OCBAQCBp
bnQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmlkZW50aWZpZXIoKSBjb25zdAogICAg
IHJldHVybiBtX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OndpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKQordm9pZCBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBp
ZiAoIW1fd2hlZWxGbGluZ0FuaW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
d2hlZWxGbGluZ0FuaW1hdGlvbi0+YW5pbWF0ZShtb25vdG9uaWNUaW1lKSkKKyAgICAgICAgbV9p
bnB1dEhhbmRsZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6YW5pbWF0ZTo6ZmxpbmdPdmVyIik7CisgICAgICAgIG1fd2hlZWxGbGluZ0FuaW1hdGlv
bi5jbGVhcigpOworICAgIH0KK30KKworYm9vbCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bDo6Y2FuY2VsQ3VycmVudEZsaW5nKCkKIHsKKyAgICBib29sIGhhZEZsaW5nQW5pbWF0aW9uID0g
bV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQxKCJjYyIsICJX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2FuY2VsQ3VycmVudEZsaW5nIiwgImhhZEZs
aW5nQW5pbWF0aW9uIiwgaGFkRmxpbmdBbmltYXRpb24pOworICAgIG1fd2hlZWxGbGluZ0FuaW1h
dGlvbi5jbGVhcigpOworICAgIHJldHVybiBoYWRGbGluZ0FuaW1hdGlvbjsKIH0KIAogdm9pZCBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmIGlu
Y3JlbWVudCkKIHsKLSAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCi0gICAgICAgIG1faW5w
dXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeSh0b1NpemUoaW5jcmVtZW50KSk7CisgICAgaWYgKGlu
Y3JlbWVudCA9PSBJbnRQb2ludDo6emVybygpKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFD
RV9FVkVOVDIoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzY3JvbGxCeSIs
ICJ4IiwgaW5jcmVtZW50LngoKSwgInkiLCBpbmNyZW1lbnQueSgpKTsKKworICAgIFdlYk1vdXNl
V2hlZWxFdmVudCBldmVudDsKKyAgICBldmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6TW91c2VX
aGVlbDsKKyAgICBldmVudC5kZWx0YVggPSAtaW5jcmVtZW50LngoKTsKKyAgICBldmVudC5kZWx0
YVkgPSAtaW5jcmVtZW50LnkoKTsKKyAgICBldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
ID0gdHJ1ZTsKKyAgICBldmVudC54ID0gbV93aGVlbEZsaW5nUG9pbnQueCgpOworICAgIGV2ZW50
LnkgPSBtX3doZWVsRmxpbmdQb2ludC55KCk7CisKKyAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhhbmRsZUlucHV0RXZlbnRJ
bnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNhc2UgRGlk
SGFuZGxlOgorICAgIGNhc2UgRHJvcEV2ZW50OgorICAgICAgICBicmVhazsgCisgICAgY2FzZSBE
aWROb3RIYW5kbGU6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnk6OkFib3J0RmxpbmciKTsKKyAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGdvdCBhIERpZE5vdEhhbmRsZSwgdGhhdCBtZWFucyB3ZSBuZWVkIHRv
IGRlbGl2ZXIgd2hlZWxzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjb21taXQgYW5kIHRyYW5zZmVyIHRoZSBmbGluZyBj
dXJ2ZSBvdmVyIHRvIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZCBhbmQgcnVuIHRoZSByZXN0
IG9mIHRoZSB3aGVlbHMgZnJvbSB0aGVyZS4KKyAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdo
ZW4gZmxpbmdpbmcgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBzY3JvbGxhYmxlIHN1YmFyZWEgdGhh
dCB3ZSBjYW4ndAorICAgICAgICAvLyBzY3JvbGwgb24gdGhlIHRocmVhZCBpZiB0aGUgZmxpbmcg
c3RhcnRzIG91dHNpZGUgdGhlIHN1YmFyZWEgYnV0IHRoZW4gaXMgZmx1bmcgInVuZGVyIiB0aGUK
KyAgICAgICAgLy8gcG9pbnRlci4KKyAgICAgICAgLy8gRm9yIG5vdywganVzdCBhYm9ydCB0aGUg
ZmxpbmcuCisgICAgICAgIGNhbmNlbEN1cnJlbnRGbGluZygpOworICAgIH0KIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsLmgKaW5kZXggODIzOTBjNjQ5MDkyYTM5MmUxNzUxZTA0MTRkNWQxYjFiNDVl
ZjQwYS4uZDk2MTk1ODdkM2Y1ODg2M2VjZTczZGVmYjBjZDRmODE3ZDdjNDI3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsX2gKICNkZWZpbmUgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxfaAog
CisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIldlYklucHV0RXZl
bnQuaCIKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2ViQ29yZTo6Q0NJbnB1
dEhhbmRsZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAgICAvLyBX
ZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKQEAgLTcyLDcgKzczLDE4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKIAotICAgIGJvb2wgaGFu
ZGxlR2VzdHVyZUZsaW5nKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYpOworICAgIGVudW0gRXZlbnRE
aXNwb3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgaW5wdXQgZXZlbnQgYW5kIGRldGVybWluZXMg
dGhlIGRpc3Bvc2l0aW9uLCBidXQgZG9lcyBub3QgbWFrZQorICAgIC8vIGFueSBjYWxscyBvdXQg
dG8gdGhlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuIFNvbWUgaW5wdXQgdHlwZXMg
ZGVmZXIgdG8gaGVscGVycy4KKyAgICBFdmVudERpc3Bvc2l0aW9uIGhhbmRsZUlucHV0RXZlbnRJ
bnRlcm5hbChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisKKyAgICBFdmVudERpc3Bvc2l0aW9uIGhh
bmRsZUdlc3R1cmVGbGluZyhjb25zdCBXZWJHZXN0dXJlRXZlbnQmKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB3ZSBhY3R1YWxseSBoYWQgYW4gYWN0aXZlIGZsaW5nIHRvIGNhbmNlbC4KKyAg
ICBib29sIGNhbmNlbEN1cnJlbnRGbGluZygpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFdlYkNvcmU6
OkludFBvaW50IG1fd2hlZWxGbGluZ1BvaW50OyAvLyBQb2ludGVyIHBvc2l0aW9uIGZvciB0aGUg
Y3VycmVudCBmbGluZy4gCiAKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KiBt
X2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwpAQCAtODIsNyArOTQsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQ7CiAgICAgYm9vbCBtX2V4cGVjdFBp
bmNoVXBkYXRlRW5kOwogI2VuZGlmCi0gICAgYm9vbCBtX3Njcm9sbFN0YXJ0ZWQ7CisgICAgYm9v
bCBtX2dlc3R1cmVTY3JvbGxTdGFydGVkOwogCiAgICAgc3RhdGljIGludCBzX25leHRBdmFpbGFi
bGVJZGVudGlmaWVyOwogICAgIHN0YXRpYyBIYXNoU2V0PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsKj4qIHNfY29tcG9zaXRvcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggMDZjMmIzZTFkNmMxMTIwNTgxODNjZGZmNjI5NmJmYjFlNWNlOWMz
Yi4uMmI5NjA2MzdmMTg3MDMyOGVjNTNmYzM3ZDRhODAzM2Q2MTY3MDY5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzMwMSw5ICszMzAxLDEwIEBA
IHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Ny
b2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsCiAgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkgfHwgIW1h
aW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChw
YWdlU2NhbGVEZWx0YSA9PSAxKQorICAgIGlmIChwYWdlU2NhbGVEZWx0YSA9PSAxKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQyKCJ3ZWJraXQiLCAiV2ViVmlld0ltcGw6OmFwcGx5U2Ny
b2xsQW5kU2NhbGU6OnNjcm9sbEJ5IiwgIngiLCBzY3JvbGxEZWx0YS53aWR0aCwgInkiLCBzY3Jv
bGxEZWx0YS5oZWlnaHQpOwogICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT5z
Y3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gVGhlIHBhZ2Ugc2NhbGUgY2hhbmdlZCwgc28gYXBwbHkgYSBzY2FsZSBhbmQgc2Nyb2xsIGlu
IGEgc2luZ2xlCiAgICAgICAgIC8vIG9wZXJhdGlvbi4gVGhlIG9sZCBzY3JvbGwgb2Zmc2V0IChh
bmQgcGFzc2VkLWluIGRlbHRhKSBhcmUKICAgICAgICAgLy8gaW4gdGhlIG9sZCBjb29yZGluYXRl
IHNwYWNlLCBzbyB3ZSBmaXJzdCBuZWVkIHRvIG11bHRpcGx5IHRoZW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0YjE0NjM2ZmE3ZTA2MDM1NDU2NTQ3NDVmZjRkYTkw
Yzg5MDdkZThmLi5lMmU1NTFkNmQ2YmJiMjk2YWMwNGMwMzBiNTE4YTI0ZWE1NTdjMzI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgiCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC00MiwxMTIgKzQzLDU0IEBAIHVzaW5n
IFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw7CiAKIG5hbWVzcGFjZSB7CiAK
LWNsYXNzIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vY2tJbnB1dEhhbmRsZXJD
bGllbnQpOworY2xhc3MgTW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNb2NrQ0NJ
bnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgotICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQo
KQotICAgICAgICA6IG1fc2Nyb2xsU3RhdHVzKFNjcm9sbFN0YXJ0ZWQpCi0gICAgICAgICwgbV9w
aW5jaFN0YXJ0ZWQoZmFsc2UpCi0gICAgICAgICwgbV9waW5jaEVuZGVkKGZhbHNlKQotICAgICAg
ICAsIG1fcGluY2hNYWduaWZpY2F0aW9uKDApCi0gICAgICAgICwgbV9zY3JvbGxCeUNhbGxlZChm
YWxzZSkKKyAgICBNb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQoKQogICAgIHsKICAgICB9Ci0gICAg
dmlydHVhbCB+TW9ja0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgfk1vY2tD
Q0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQogCi0gICAgdm9pZCBzZXRTY3JvbGxTdGF0dXMoU2Ny
b2xsU3RhdHVzIHN0YXR1cykgeyBtX3Njcm9sbFN0YXR1cyA9IHN0YXR1czsgfQogCi0gICAgYm9v
bCBwaW5jaFN0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BpbmNoU3RhcnRlZDsgfQotICAgIGJv
b2wgcGluY2hFbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hFbmRlZDsgfQotICAgIGZsb2F0
IHBpbmNoTWFnaW5pZmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hNYWduaWZpY2F0aW9u
OyB9Ci0gICAgYm9vbCBzY3JvbGxCeUNhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQnlD
YWxsZWQ7IH0KKyAgICBNT0NLX01FVEhPRDAocGluY2hHZXN0dXJlQmVnaW4sIHZvaWQoKSk7Cisg
ICAgTU9DS19NRVRIT0QyKHBpbmNoR2VzdHVyZVVwZGF0ZSwgdm9pZChmbG9hdCBtYWduaWZ5RGVs
dGEsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhbmNob3IpKTsKKyAgICBNT0NLX01FVEhPRDAo
cGluY2hHZXN0dXJlRW5kLCB2b2lkKCkpOwogCi0gICAgdm9pZCByZXNldFBpbmNoKCkKLSAgICB7
Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxCeUNhbGxl
ZCA9IGZhbHNlOwotICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7Ci0gICAgfQorICAg
IE1PQ0tfTUVUSE9EMChzY2hlZHVsZUFuaW1hdGlvbiwgdm9pZCgpKTsKIAotICAgIHZpcnR1YWwg
V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmdldCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxXZWJDb3JlOjpDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbikgeyBtX2FjdGl2ZUdlc3R1cmVBbmltYXRp
b24gPSBhbmltYXRpb247IH0KKyAgICBNT0NLX01FVEhPRDIoc2Nyb2xsQmVnaW4sIFNjcm9sbFN0
YXR1cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJbnB1dFR5cGUpKTsKKyAgICBNT0NLX01FVEhPRDEoc2Nyb2xsQnksIHZvaWQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpKTsKKyAgICBNT0NLX01FVEhPRDAoc2Nyb2xsRW5kLCB2
b2lkKCkpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElu
cHV0VHlwZSkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Njcm9sbFN0YXR1czsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSBPVkVSUklERSB7IG1fc2Nyb2xsQnlDYWxsZWQgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNjcm9sbEVuZCgpIE9WRVJSSURFIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVy
ZUJlZ2luKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gdHJ1ZTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5
RGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhbmNob3IpIE9WRVJSSURFCi0gICAgewot
ICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IG1hZ25pZnlEZWx0YTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBt
X3BpbmNoRW5kZWQgPSB0cnVlOwotICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlU2Nh
bGVBbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYW5jaG9yUG9pbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBhZ2VTY2FsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VGlt
ZU1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVy
YXRpb25NcykgT1ZFUlJJREUgeyB9CiAKLSAgICBTY3JvbGxTdGF0dXMgbV9zY3JvbGxTdGF0dXM7
Ci0gICAgYm9vbCBtX3BpbmNoU3RhcnRlZDsKLSAgICBib29sIG1fcGluY2hFbmRlZDsKLSAgICBm
bG9hdCBtX3BpbmNoTWFnbmlmaWNhdGlvbjsKLSAgICBib29sIG1fc2Nyb2xsQnlDYWxsZWQ7Ci0K
LSAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBtX2FjdGl2ZUdl
c3R1cmVBbmltYXRpb247CisgICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSBPVkVSUklERSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxXZWJD
b3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSBPVkVSUklERSB7IH0KIH07CiAKIGNsYXNz
IE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgogICAgIE1vY2tX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkKLSAgICAgICAgOiBtX2hhbmRsZWQoZmFs
c2UpCi0gICAgICAgICwgbV9zZW5kVG9XaWRnZXQoZmFsc2UpCisgICAgICAgIDogV2ViS2l0OjpX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkKICAgICB7CiAgICAgfQogICAgIHZpcnR1
YWwgfk1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CiAKLSAgICB2b2lk
IHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1faGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBtX3Nl
bmRUb1dpZGdldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFuZGxlZDsgfQotICAgIGJvb2wgc2VuZFRvV2lkZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zZW5kVG9XaWRnZXQ7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNo
dXRkb3duKCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEhhbmRsZUlucHV0RXZl
bnQoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9oYW5kbGVkID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoYm9vbCBzZW5kVG9XaWRnZXQp
IE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3NlbmRUb1dpZGdldCA9IHNlbmRUb1dpZGdldDsK
LSAgICB9Ci0KLSAgICBib29sIG1faGFuZGxlZDsKLSAgICBib29sIG1fc2VuZFRvV2lkZ2V0Owor
ICAgIE1PQ0tfTUVUSE9EMCh3aWxsU2h1dGRvd24sIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0Qw
KGRpZEhhbmRsZUlucHV0RXZlbnQsIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0QxKGRpZE5vdEhh
bmRsZUlucHV0RXZlbnQsIHZvaWQoYm9vbCBzZW5kVG9XaWRnZXQpKTsKIH07CiAKIFRFU1QoV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGZyb21JZGVudGlmaWVyKQogewogICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRo
ZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgYWx3YXlzSW1wbFRocmVhZDsKLSNlbmRpZgogCiAgICAgLy8gQmVmb3JlIGNyZWF0aW5nIGFu
eSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVycywgbG9va3VwcyBmb3IgYW55IHZhbHVlIHNob3Vs
ZCBmYWlsIGFuZCBub3QgY3Jhc2guCiAgICAgRVhQRUNUX0VRKDAsIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKDIpKTsKQEAgLTE2NywxNzQgKzExMCwyODAgQEAgVEVT
VChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZnJvbUlkZW50aWZpZXIpCiAKICAgICAv
LyBBZnRlciB0aGUgY29tcG9zaXRvciBpcyBkZXN0cm95ZWQsIGl0cyBlbnRyeSBzaG91bGQgYmUg
cmVtb3ZlZCBmcm9tIHRoZSBtYXAuCiAgICAgRVhQRUNUX0VRKDAsIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGNvbXBvc2l0b3JJZGVudGlmaWVyKSk7Ci0KICAgICBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKLVRFU1QoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVTY3JvbGwpCi17Ci0gICAgV2ViS2l0OjpXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOwotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0
b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJ
bXBsVGhyZWFkOwotI2VuZGlmCitjbGFzcyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRl
c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkRGlzcG9zaXRpb24oRGlk
SGFuZGxlKQorICAgIHsKKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgICAgICBtX2lucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjpjcmVhdGUoJm1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50KTsKKyAgICAgICAgbV9pbnB1
dEhhbmRsZXItPnNldENsaWVudCgmbV9tb2NrQ2xpZW50KTsKKyAgICB9CiAKLSAgICBNb2NrSW5w
dXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudCBtb2NrQ2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xp
ZW50KCZtb2NrQ2xpZW50KTsKKyAgICB+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0
KCkKKyAgICB7CisgICAgICAgIG1faW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7CisgICAgICAg
IG1faW5wdXRIYW5kbGVyLmNsZWFyKCk7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICB9CiAKKyAgICB2b2lkIHZlcmlmeUFuZFJlc2V0TW9ja3MoKQorICAg
IHsKKyAgICAgICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50KTsKKyAgICAgICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fbW9ja0NsaWVudCk7CisgICAgICAgIHN3aXRjaCAobV9l
eHBlY3RlZERpc3Bvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICAg
ICAgLy8gSWYgd2UgZXhwZWN0IHRvIGhhbmRsZSBldmVudHMsIHdlIHNob3VsZG4ndCBnZXQgYW55
IGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoKSBjYWxscyB3aXRoIGFueSBwYXJhbWV0ZXIuCisgICAg
ICAgICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
Ojp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtX21vY2tD
bGllbnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEaWROb3RIYW5kbGU6CisgICAgICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgZXhwZWN0
aW5nIHRvIGhhbmRsZSBldmVudHMsIHdlIHNob3VsZG4ndCBjYWxsIGRpZEhhbmRsZUlucHV0RXZl
bnQoKS4KKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5w
dXRFdmVudCgpKS5UaW1lcygwKTsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVu
dCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxzZSkpLlRpbWVzKDApOworICAgICAgICAgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGV4cGVjdGluZyB0byBkcm9wLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBkaWRI
YW5kbGUuLigpIG9yIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQg
Ki8pIGNhbGxzLgorICAgICAgICAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5k
bGVJbnB1dEV2ZW50KCkpLlRpbWVzKDApOworICAgICAgICAgICAgRVhQRUNUX0NBTEwobV9tb2Nr
Q2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUpKS5UaW1lcygwKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxz
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBNb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQgbV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQ7
CisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBtX2lucHV0SGFuZGxl
cjsKKyAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtX21vY2tDbGllbnQ7
CiAgICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKIAorICAgIGVudW0gRXhwZWN0
ZWREaXNwb3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsKKyAg
ICBFeHBlY3RlZERpc3Bvc2l0aW9uIG1fZXhwZWN0ZWREaXNwb3NpdGlvbjsKKworcHJpdmF0ZToK
KyAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgbV9hbHdheXNJbXBsVGhyZWFk
OworfTsKKworCitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0
dXJlU2Nyb2xsU3RhcnRlZCkKK3sKKyAgICAvLyBXZSBzaG91bGRuJ3Qgc2VuZCBhbnkgZXZlbnRz
IHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVyZS4KKyAgICBtX2V4cGVjdGVkRGlzcG9zaXRp
b24gPSBEaWRIYW5kbGU7CisgICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOworCisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8s
IHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKSk7CisKICAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKLSAgICBpbnB1
dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9j
a0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dp
ZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhh
bmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAK
ICAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxV
cGRhdGU7Ci0gICAgZ2VzdHVyZS5kZWx0YVkgPSA0MDsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVk
KCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBt
b2NrQ2xpZW50LnJlc2V0KCk7CisgICAgZ2VzdHVyZS5kZWx0YVkgPSAtNDA7IC8vIC1ZIG1lYW5z
IHNjcm9sbCBkb3duIC0gaS5lLiBpbiB0aGUgK1kgZGlyZWN0aW9uLgorICAgIEVYUEVDVF9DQUxM
KG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpQcm9wZXJ0eSgm
V2ViQ29yZTo6SW50U2l6ZTo6aGVpZ2h0LCB0ZXN0aW5nOjpHdCgwKSkpKTsKKyAgICBtX2lucHV0
SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHZlcmlmeUFuZFJlc2V0
TW9ja3MoKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZDsKICAgICBnZXN0dXJlLmRlbHRhWSA9IDA7Ci0gICAgaW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQu
aGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7
Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRI
YW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQoKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlu
cHV0RXZlbnQoZ2VzdHVyZSk7Cit9CisKK1RFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxGYWlsZWQpCit7CisgICAgLy8gV2Ugc2hvdWxkIHNlbmQg
YWxsIGV2ZW50cyB0byB0aGUgd2lkZ2V0IGZvciB0aGlzIGdlc3R1cmUuCisgICAgbV9leHBlY3Rl
ZERpc3Bvc2l0aW9uID0gRGlkTm90SGFuZGxlOworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3MoKTsK
IAotICAgIG1vY2tJbnB1dEhhbmRsZXIuc2V0U2Nyb2xsU3RhdHVzKFdlYkNvcmU6OkNDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbig6OnRlc3Rpbmc6Ol8sIDo6dGVzdGluZzo6Xykp
CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5k
bGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRs
ZWQoKSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAg
bW9ja0NsaWVudC5yZXNldCgpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50
KGdlc3R1cmUpOworCisgICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOwogCiAgICAgZ2VzdHVyZS50
eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOwogICAgIGdl
c3R1cmUuZGVsdGFZID0gNDA7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQ
RUNUX1RSVUUobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNl
dCgpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisg
ICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOwogICAgIGdlc3R1cmUuZGVsdGFZID0gMDsK
LSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50
LnNlbmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0KLSAgICBpbnB1dEhh
bmRsZXItPnNldENsaWVudCgwKTsKLQotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKIH0K
IAotVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZVBpbmNoKQorVEVT
VF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbElnbm9y
ZWQpCiB7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwotI2lmbmRl
ZiBOREVCVUcKLSAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkg
YmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOwotI2VuZGlmCisgICAgLy8gV2Ug
c2hvdWxkbid0IGhhbmRsZSB0aGUgR2VzdHVyZVNjcm9sbEJlZ2luLgorICAgIC8vIEluc3RlYWQs
IHdlIHNob3VsZCBnZXQgb25lIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UpIGNhbGwgcGVy
IGhhbmRsZUlucHV0RXZlbnQoKSwKKyAgICAvLyBpbmRpY2F0aW5nIHRoYXQgd2UgY291bGQgZGV0
ZXJtaW5lIHRoYXQgdGhlcmUncyBub3RoaW5nIHRoYXQgY291bGQgc2Nyb2xsIG9yIG90aGVyd2lz
ZQorICAgIC8vIHJlYWN0IHRvIHRoaXMgZ2VzdHVyZSBzZXF1ZW5jZSBhbmQgdGh1cyB3ZSBzaG91
bGQgZHJvcCB0aGUgd2hvbGUgZ2VzdHVyZSBzZXF1ZW5jZSBvbiB0aGUgZmxvb3IuCisgICAgbV9l
eHBlY3RlZERpc3Bvc2l0aW9uID0gRHJvcEV2ZW50OworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3Mo
KTsKIAotICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBP
d25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOwotICAg
IE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tDbGllbnQ7Ci0gICAgaW5w
dXRIYW5kbGVyLT5zZXRDbGllbnQoJm1vY2tDbGllbnQpOworICAgIEVYUEVDVF9DQUxMKG1fbW9j
a0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpf
KSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCkpOwogCi0gICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZl
bnQgZ2VzdHVyZTsKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdl
c3R1cmVTY3JvbGxCZWdpbjsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChn
ZXN0dXJlKTsKK30KKworVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwg
Z2VzdHVyZVBpbmNoKQoreworICAgIC8vIFdlIHNob3VsZG4ndCBzZW5kIGFueSBldmVudHMgdG8g
dGhlIHdpZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9
IERpZEhhbmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKICAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luOwotICAgIGlucHV0
SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfVFJVRShtb2Nr
Q2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lk
Z2V0KCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIucGluY2hTdGFydGVkKCkp
OwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAgICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGlu
Y2goKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgcGluY2hH
ZXN0dXJlQmVnaW4oKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2Vz
dHVyZSk7CisKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKICAgICBnZXN0dXJlLnR5cGUg
PSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZTsKICAgICBnZXN0dXJl
LmRlbHRhWCA9IDEuNTsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9G
QUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0lu
cHV0SGFuZGxlci5waW5jaEVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSgxLjUsIG1vY2tJbnB1dEhh
bmRsZXIucGluY2hNYWdpbmlmY2F0aW9uKCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAg
ICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBnZXN0dXJlLnggPSA3OworICAg
IGdlc3R1cmUueSA9IDEzOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xp
ZW50LCBwaW5jaEdlc3R1cmVVcGRhdGUoMS41LCBXZWJDb3JlOjpJbnRQb2ludCg3LCAxMykpKTsK
KyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHZl
cmlmeUFuZFJlc2V0TW9ja3MoKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5w
dXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOwogICAgIGdlc3R1cmUuZGVsdGFYID0gMC41Owot
ICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQu
c2VuZFRvV2lkZ2V0KCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNo
RW5kZWQoKSk7Ci0gICAgRVhQRUNUX0VRKDAuNSwgbW9ja0lucHV0SGFuZGxlci5waW5jaE1hZ2lu
aWZjYXRpb24oKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOwotICAgIG1vY2tJbnB1dEhhbmRs
ZXIucmVzZXRQaW5jaCgpOworICAgIGdlc3R1cmUueCA9IDk7CisgICAgZ2VzdHVyZS55ID0gNjsK
KyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgcGluY2hHZXN0dXJl
VXBkYXRlKC41LCBXZWJDb3JlOjpJbnRQb2ludCg5LCA2KSkpOworICAgIG1faW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgdmVyaWZ5QW5kUmVzZXRNb2Nrcygp
OwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGlu
Y2hFbmQ7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAg
IEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9j
a0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0lucHV0SGFuZGxl
ci5waW5jaEVuZGVkKCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAgICBtb2NrSW5wdXRI
YW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxl
ckNsaWVudCwgcGluY2hHZXN0dXJlRW5kKCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJ
bnB1dEV2ZW50KGdlc3R1cmUpOworfQogCi0gICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7
CitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdT
dGFydGVkKQoreworICAgIC8vIFdlIHNob3VsZG4ndCBzZW5kIGFueSBldmVudHMgdG8gdGhlIHdp
ZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9IERpZEhh
bmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKLSAgICBXZWJLaXQ6OldlYkNvbXBv
c2l0b3I6OnNodXRkb3duKCk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJD
bGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2ls
bE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkKSk7CisKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6
Okdlc3R1cmVGbGluZ1N0YXJ0OworICAgIGdlc3R1cmUuZGVsdGFYID0gMTA7CisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwor
ICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgdmVy
aWZ5QW5kUmVzZXRNb2NrcygpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlRmxpbmdD
YW5jZWwgZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5jZWxzIGl0LgorICAgIGdlc3R1cmUudHlwZSA9
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOworICAgIG1faW5wdXRI
YW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1URVNUKFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlRmxpbmcpCitURVNUX0YoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdGYWlsZWQpCiB7Ci0gICAgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIC8vIFdlIHNob3VsZCBzZW5kIGFsbCBl
dmVudHMgdG8gdGhlIHdpZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNw
b3NpdGlvbiA9IERpZE5vdEhhbmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKLSAg
ICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZy
b20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRI
YW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAg
ICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsRmFpbGVkKSk7CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1
dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1
dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5w
dXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtb2Nr
Q2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKyAgICBn
ZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0Owor
ICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCi0gICAgV2Vi
S2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7
CiAKLSAgICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xsRW5kIGV2
ZW50LgotICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNj
cm9sbEJlZ2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsK
LSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKyAg
ICAvLyBFdmVuIGlmIHdlIGRpZG4ndCBzdGFydCBhIGZsaW5nIG91cnNlbHZlcywgd2Ugc3RpbGwg
bmVlZCB0byBzZW5kIHRoZSBjYW5jZWwgZXZlbnQgdG8gdGhlIHdpZGdldC4KKyAgICBnZXN0dXJl
LnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKKyAgICBt
X2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKK30KIAotICAgIGdlc3R1
cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZDsKLSAgICBn
ZXN0dXJlLmRlbHRhWCA9IDI7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBF
Q1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgQVNTRVJUX1RSVUUobW9j
a0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9GQUxT
RShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOwotICAgIG1vY2tJbnB1dEhhbmRs
ZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpLT5hbmltYXRlKDAuMDAxKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOwotICAgIG1vY2tDbGllbnQu
cmVzZXQoKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IGEgR2VzdHVyZVRhcERvd24gZHVyaW5nIGFu
IGFuaW1hdGlvbiBjYW5jZWxzIGl0LgotICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5w
dXRFdmVudDo6R2VzdHVyZVRhcERvd247Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2
ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOwotCi0gICAgLy8gVmVy
aWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biB3aGVuIG5vIGFuaW1hdGlvbiBpcyBhY3RpdmUgaXMg
bm90IGhhbmRsZWQuCi0gICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlVGFwRG93bjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLQotICAgIGlucHV0SGFuZGxlci0+c2V0
Q2xpZW50KDApOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK1RFU1Rf
RihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0lnbm9yZWQp
Cit7CisgICAgbV9leHBlY3RlZERpc3Bvc2l0aW9uID0gRGlkTm90SGFuZGxlOworICAgIHZlcmlm
eUFuZFJlc2V0TW9ja3MoKTsKKworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVy
Q2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAgICAgLldp
bGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZCkpOworCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlRmxpbmdTdGFydDsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVu
dChnZXN0dXJlKTsKKworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3MoKTsKKworICAgIC8vIEV2ZW4g
aWYgd2UgZGlkbid0IHN0YXJ0IGEgZmxpbmcgb3Vyc2VsdmVzLCB3ZSBzdGlsbCBuZWVkIHRvIHNl
bmQgdGhlIGNhbmNlbCBldmVudCB0byB0aGUgd2lkZ2V0LgorICAgIGdlc3R1cmUudHlwZSA9IFdl
YktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOworICAgIG1faW5wdXRIYW5k
bGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworfQorCitURVNUX0YoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdBbmltYXRlcykKK3sKKyAgICAvLyBX
ZSBzaG91bGRuJ3Qgc2VuZCBhbnkgZXZlbnRzIHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVy
ZS4KKyAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24gPSBEaWRIYW5kbGU7CisgICAgdmVyaWZ5QW5k
UmVzZXRNb2NrcygpOworCisgICAgLy8gT24gdGhlIGZsaW5nIHN0YXJ0LCB3ZSBzaG91bGQgc2No
ZWR1bGUgYW4gYW5pbWF0aW9uIGJ1dCBub3QgYWN0dWFsbHkgc3RhcnQKKyAgICAvLyBzY3JvbGxp
bmcuCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxp
bmdTdGFydDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IC0xMDAwOworICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6
XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29y
ZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpKTsKKyAgICBtX2lucHV0SGFu
ZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHRlc3Rpbmc6Ok1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCk7CisK
KyAgICAvLyBUaGUgZmlyc3QgYW5pbWF0ZSBjYWxsIHNob3VsZCBsZXQgdXMgcGljayB1cCBhbiBh
bmltYXRpb24gc3RhcnQgdGltZSwgYnV0IHdlCisgICAgLy8gc2hvdWxkbid0IGFjdHVhbGx5IG1v
dmUgYW55d2hlcmUganVzdCB5ZXQuIFRoZSBmaXJzdCBmcmFtZSBhZnRlciB0aGUgZmxpbmcgc3Rh
cnQKKyAgICAvLyB3aWxsIHR5cGljYWxseSBpbmNsdWRlIHRoZSBsYXN0IHNjcm9sbCBmcm9tIHRo
ZSBnZXN0dXJlIHRoYXQgbGVhZCB0byB0aGUgc2Nyb2xsCisgICAgLy8gKGVpdGhlciB3aGVlbCBv
ciBnZXN0dXJlIHNjcm9sbCksIHNvIHRoZXJlIHNob3VsZCBiZSBubyB2aXNpYmxlIGhpdGNoLgor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Ny
b2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpLlRpbWVzKDApOworICAgIG1faW5wdXRI
YW5kbGVyLT5hbmltYXRlKDEwKTsKKworICAgIHRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCk7CisKKyAgICAvLyBUaGUg
c2Vjb25kIGNhbGwgc2hvdWxkIHN0YXJ0IHNjcm9sbGluZyBpbiB0aGUgK1ggZGlyZWN0aW9uLgor
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Ny
b2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0
aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnko
dGVzdGluZzo6UHJvcGVydHkoJldlYkNvcmU6OkludFNpemU6OndpZHRoLCB0ZXN0aW5nOjpHdCgw
KSkpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xs
RW5kKCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwLjEpOworCisgICAgdGVzdGlu
Zzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fbW9ja0NDSW5wdXRIYW5kbGVy
Q2xpZW50KTsKKworICAgIC8vIExldCdzIHNheSBvbiB0aGUgdGhpcmQgY2FsbCB3ZSBoaXQgYSBu
b24tc2Nyb2xsYWJsZSByZWdpb24uIFdlIHNob3VsZCBhYm9ydCB0aGUgZmxpbmcgYW5kIG5vdCBz
Y3JvbGwuCisgICAgLy8gRklYTUU6IFdlIGFsc28gbmVlZCB0byBkbyBzb21lIHdvcmsgdG8gdHJh
bnNmZXIgdGhlIHJlc3Qgb2YgdGhpcyBmbGluZyB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8g
QWRkIHRlc3RzIGZvciB0aGlzIG9uY2UgaXQncyBpbXBsZW1lbnRlZC4KKyAgICBFWFBFQ1RfQ0FM
TChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CisgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rp
bmc6Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKSk7CisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5U
aW1lcygwKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Ny
b2xsRW5kKCkpLlRpbWVzKDApOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwLjIpOwor
CisgICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fbW9ja0ND
SW5wdXRIYW5kbGVyQ2xpZW50KTsKKworICAgIC8vIFNpbmNlIHdlJ3ZlIGFib3J0ZWQgdGhlIGZs
aW5nLCB0aGUgbmV4dCBhbmltYXRpb24gc2hvdWxkIGJlIGEgbm8tb3AgYW5kIHNob3VsZCBub3Qg
cmVzdWx0IGluIGFub3RoZXIKKyAgICAvLyBmcmFtZSBiZWluZyByZXF1ZXN0ZWQuCisgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkp
LlRpbWVzKDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBz
Y3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgICAgbV9pbnB1
dEhhbmRsZXItPmFuaW1hdGUoMTAuMyk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132708</attachid>
            <date>2012-03-19 16:24:26 -0700</date>
            <delta_ts>2012-03-19 16:42:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81462-20120319162425.patch</filename>
            <type>text/plain</type>
            <size>44262</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY0ZjBkNWFkMTE3Zjk2
MTFmOTljZDhjMTZhYjI1ZDk4OGZmMWQwOS4uZThlMWExM2U5ZTY5NWFkMjA4NjRhMWI2YjZhNTRm
OTJiYTcyNWZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTE4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZmxpbmctYnktd2hlZWwgb24gY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjb21wb3NpdG9yIHRocmVh
ZCBzdXBwb3J0IGZvciBhIGZsaW5nIHR5cGUgaW1wbGVtZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiB3
aGVlbCBzY3JvbGxzLiBDb3ZlcmVkIGJ5IG5ldyB0ZXN0cworICAgICAgICBpbiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKENDSW5wdXRIYW5kbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXApOgorCiAyMDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2
ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9u
X3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9NSVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBv
cnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY5ZGFhNDM3OWQ2MTc3MTc2MWI2ZjRi
MzM5MmEwNTMzOTFmZjUxZmYuLjk3NjM0NjYwNGJiMjMzMDQzNDJmODMxZWU1MTRjMTVmMWE3YjZi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDMt
MTggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBmbGluZy1ieS13aGVlbCBvbiBjb21wb3NpdG9yIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0NjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgZmxp
bmctYnktd2hlZWwgYW5kIGJlZWYgdXAgZXhpc3RpbmcgdW5pdCB0ZXN0IGNvdmVyYWdlIGNvbnNp
ZGVyYWJseSBieSB1c2luZyBnbW9jayBpbnN0ZWFkIG9mIG1vY2tpbmcKKyAgICAgICAgYnkgaGFu
ZC4KKworICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1
dEV2ZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmFuaW1h
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2Fu
Y2VsQ3VycmVudEZsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAg
ICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorCiAy
MDEyLTAzLTE5ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gYW5kIEdMX0NIUk9N
SVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5IHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIu
aAppbmRleCAwMzFkN2RjNTAxZDlmNzM2YTM3NmE5MzViM2RlMjI0NDZiZTY5NWYxLi43NjYwOGQ5
ZmMxZDBkYTEzOWE0OTMwYmM1MDQ3YzA4YWViOGIyZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5k
bGVyLmgKQEAgLTQ1LDggKzQ1LDYgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5wdXRIYW5k
bGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlckNsaWVu
dCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwotCiAg
ICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxGYWlsZWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9s
bElnbm9yZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVsIH07
CiAKQEAgLTgwLDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uPikgPSAwOwogCisgICAgLy8gUmVxdWVzdCBhbm90aGVyIGNhbGxiYWNrIHRvIENDSW5w
dXRIYW5kbGVyOjphbmltYXRlKCkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KICAg
ICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtOTIsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q0NJbnB1dEhhbmRsZXIoKSB7IH0KIAogICAgIHZpcnR1YWwg
aW50IGlkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRv
dWJsZSBtb25vdG9uaWNUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IG1vbm90b25pY1RpbWUpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIENDSW5wdXRIYW5kbGVyKCkg
eyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGViZTA2ZjUx
MGU5NmQ1ZDA3ZDdkNzBmN2U2M2M1OTM2NDVhNjRkNDQuLmRkMmQ0MmE0NzE3YWFhMGVmYTViYWNj
OGEzYzI5ZjI2YjAyNGRiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC0xODEsNiArMTgxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0
aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuCiAgICAgICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICAvLyBGb3Ig
bm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4g
VG8gZG8gdGhpcywgd2UgbXVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmlu
ZGV4IDNiYjdkM2RlMTQxMzZlZGJiYzlmMTllZGY4NTA0NzI0M2RmYmJhYTMuLjBkYWU2MDQ2ODI0
MmU5YjE0MjY2N2Q3MDdjYTFlNWI5NDAyZGJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTY1LDcgKzY1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5
ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIC8vIENDSW5wdXRIYW5kbGVyQ2xpZW50IGltcGxlbWVu
dGF0aW9uCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IEludFBv
aW50JiwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSk7CiAgICAgdmlydHVh
bCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
RW5kKCk7CkBAIC03Niw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZl
R2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQogICAgIC8vIFRvIGNsZWFyIGFuIGFjdGl2ZSBhbmlt
YXRpb24sIHBhc3MgbnVsbHB0ci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOworICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGlu
Zy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKQEAgLTEzNSw2ICsxMzUsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzQW5pbWF0ZUxheWVyczsgfQogICAgIHZvaWQgc2V0TmVlZHNBbmltYXRlTGF5ZXJzKCkgeyBt
X25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7IH0KIAorICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKKwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5n
cyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5lMTY3
NTIyM2M1NDgwNzdiZjQwY2JiYWIzZGZlYmQ5ZjZiMmI4Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcApAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1
bGVkQWN0aW9uRHJhd0FuZFN3YXAoKQogICAgIGRvdWJsZSBtb25vdG9uaWNUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZG91YmxlIHdhbGxDbG9ja1RpbWUgPSBjdXJy
ZW50VGltZSgpOwogCi0gICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQtPndpbGxEcmF3KG1v
bm90b25pY1RpbWUpOworICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLT5hbmltYXRlKG1v
bm90b25pY1RpbWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmFuaW1hdGUobW9ub3Rvbmlj
VGltZSwgd2FsbENsb2NrVGltZSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXggYmY4ZmY5NDFkNGVmZWI2ZDA5Yzg4
ODg1ZTc5MGY3ZDIwYmQwODkwMC4uZjhhM2NmZDljYTYxMzAxYzU1ODg2NzNhYWIzZjMxNGFlZWNm
ZDZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJUb3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgpAQCAtMTE4LDcgKzExOSw3
IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgLCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVu
ZChmYWxzZSkKICAgICAsIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQoZmFsc2UpCiAjZW5kaWYKLSAg
ICAsIG1fc2Nyb2xsU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQo
ZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTU0
LDI0ICsxNTUsMzggQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxl
SW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKKyAgICBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhh
bmRsZUlucHV0RXZlbnRJbnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikg
eworICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRF
dmVudCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpZE5vdEhhbmRsZToKKyAgICAgICAg
bV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgbV9jbGllbnQt
PmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZl
bnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRF
dmVudEludGVybmFsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewogICAgIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKICAgICAgICAgY29uc3QgV2Vi
TW91c2VXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNl
V2hlZWxFdmVudCo+KCZldmVudCk7CiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2lu
KEludFBvaW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKICAgICAgICAgY2Fz
ZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiB1c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUgdG8gZ2V0IHNtb290
aCB3aGVlbCBzY3JvbGxpbmc/CisgICAgICAgICAgICBUUkFDRV9FVkVOVF9JTlNUQU5UMigiY2Mi
LCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0IHdoZWVsIHNjcm9s
bCIsICJkZWx0YVgiLCAtd2hlZWxFdmVudC5kZWx0YVgsICJkZWx0YVkiLCAtd2hlZWxFdmVudC5k
ZWx0YVkpOwogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNp
emUoLXdoZWVsRXZlbnQuZGVsdGFYLCAtd2hlZWxFdmVudC5kZWx0YVkpKTsKICAgICAgICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gRGlkSGFuZGxlOwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZl
bnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbEZhaWxlZDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IERpZE5vdEhhbmRsZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pIHsKLSAgICAgICAgQVNTRVJUKCFtX3Nj
cm9sbFN0YXJ0ZWQpOworICAgICAgICBBU1NFUlQoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQpOwog
ICAgICAgICBBU1NFUlQoIW1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kID0gdHJ1ZTsKQEAgLTE4MCw5NCArMTk1
LDg1IEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNj
cm9sbEJlZ2luKEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMp
IHsKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKLSAg
ICAgICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBtX2NsaWVudC0+
ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgotICAgICAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkOgorICAgICAgICAgICAgcmV0dXJuIERyb3BFdmVudDsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
U2Nyb2xsVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZCk7
Ci0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkdl
c3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVF
dmVudCo+KCZldmVudCk7Ci0gICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xs
QnkoSW50U2l6ZSgtZ2VzdHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KKworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNjcm9sbFN0YXJ0
ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworCisgICAgICAgIGNvbnN0IFdl
Ykdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1
cmVFdmVudCo+KCZldmVudCk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxC
eShJbnRTaXplKC1nZXN0dXJlRXZlbnQuZGVsdGFYLCAtZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOwor
ICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKSB7CiAgICAgICAgIEFTU0VSVChtX2V4cGVj
dFNjcm9sbFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFNjcm9s
bFVwZGF0ZUVuZCA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQp
IHsKLSAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAg
ICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fZ2VzdHVyZVNj
cm9sbFN0YXJ0ZWQpCisgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogCi0gICAgICAg
ICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxj
b25zdCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOwotICAgICAgICAgICAgaWYgKGhhbmRsZUdl
c3R1cmVGbGluZyhnZXN0dXJlRXZlbnQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7CisgICAgICAg
IG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRs
ZTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBp
bmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSB0cnVlOwogI2Vu
ZGlmCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVCZWdpbigpOwot
ICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZCkgewogICAgICAgICBBU1NFUlQobV9leHBl
Y3RQaW5jaFVwZGF0ZUVuZCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2V4cGVjdFBpbmNo
VXBkYXRlRW5kID0gZmFsc2U7CiAjZW5kaWYKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnBpbmNoR2VzdHVyZUVuZCgpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVu
dCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfSBl
bHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZSkg
ewogICAgICAgICBBU1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CiAgICAgICAgIGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdl
c3R1cmVFdmVudCo+KCZldmVudCk7CiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5j
aEdlc3R1cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50
LngsIGdlc3R1cmVFdmVudC55KSk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd24pIHsKLSAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgIG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOwotICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGlkSGFuZGxlOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydCkgeworICAgICAg
ICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25z
dCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVy
ZUZsaW5nKGdlc3R1cmVFdmVudCk7CisgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbCkgeworICAgICAgICBpZiAoY2FuY2VsQ3VycmVu
dEZsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAgIH0KIAotICAgIG1f
Y2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyogc2VuZFRvV2lkZ2V0ICovKTsK
KyAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogfQogCi1ib29sIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0
dXJlRXZlbnQpCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlv
biBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEdlc3R1cmVTY3JvbGxF
bmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVsdGFYL1kpIHNpZ25hbHMgc3RhcnQgb2YgRmxp
bmcuCi0gICAgaWYgKCFnZXN0dXJlRXZlbnQuZGVsdGFYICYmICFnZXN0dXJlRXZlbnQuZGVsdGFZ
KSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQogICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0
dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBv
aW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKTsKICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgewogICAgIGNhc2UgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6IHsKLSAgICAgICAgT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVs
dGFZKSk7Ci0gICAgICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlv
biA9IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZVRvQ0NH
ZXN0dXJlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3VydmUucmVsZWFzZSgpKSwgdGhpcyk7Ci0gICAg
ICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGFuaW1h
dGlvbi5yZWxlYXNlKCkpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OnN0
YXJ0ZWQiKTsKKyAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZl
ID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgtZ2Vz
dHVyZUV2ZW50LmRlbHRhWCwgLWdlc3R1cmVFdmVudC5kZWx0YVkpKTsKKyAgICAgICAgbV93aGVl
bEZsaW5nQW5pbWF0aW9uID0gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZv
cm1HZXN0dXJlVG9DQ0dlc3R1cmVBZGFwdGVyOjpjcmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkp
LCB0aGlzKTsKKyAgICAgICAgbV93aGVlbEZsaW5nUG9pbnQgPSBJbnRQb2ludChnZXN0dXJlRXZl
bnQueCwgZ2VzdHVyZUV2ZW50LnkpOworICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2No
ZWR1bGVBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9Ci0gICAg
Y2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKLSAgICAgICAgbV9jbGll
bnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkOgotICAgICAgICBicmVhazsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNj
IiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OmZh
aWxlZCIpOworICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOworICAgIGNhc2UgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQw
KCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
OjppZ25vcmVkIik7CisgICAgICAgIC8vIFdlIHN0aWxsIHBhc3MgdGhlIGN1cnZlIHRvIHRoZSBt
YWluIHRocmVhZCBpZiB0aGVyZSdzIG5vdGhpbmcgc2Nyb2xsYWJsZSwgaW4gY2FzZSBzb21ldGhp
bmcKKyAgICAgICAgLy8gcmVnaXN0ZXJzIGEgaGFuZGxlciBiZWZvcmUgdGhlIGN1cnZlIGlzIG92
ZXIuCisgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiB9CiAKIGludCBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CkBAIC0yNzYsMTQgKzI4Miw1OCBAQCBp
bnQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmlkZW50aWZpZXIoKSBjb25zdAogICAg
IHJldHVybiBtX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OndpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKQordm9pZCBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBp
ZiAoIW1fd2hlZWxGbGluZ0FuaW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
d2hlZWxGbGluZ0FuaW1hdGlvbi0+YW5pbWF0ZShtb25vdG9uaWNUaW1lKSkKKyAgICAgICAgbV9p
bnB1dEhhbmRsZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6YW5pbWF0ZTo6ZmxpbmdPdmVyIik7CisgICAgICAgIG1fd2hlZWxGbGluZ0FuaW1hdGlv
bi5jbGVhcigpOworICAgIH0KK30KKworYm9vbCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bDo6Y2FuY2VsQ3VycmVudEZsaW5nKCkKIHsKKyAgICBib29sIGhhZEZsaW5nQW5pbWF0aW9uID0g
bV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQxKCJjYyIsICJX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y2FuY2VsQ3VycmVudEZsaW5nIiwgImhhZEZs
aW5nQW5pbWF0aW9uIiwgaGFkRmxpbmdBbmltYXRpb24pOworICAgIG1fd2hlZWxGbGluZ0FuaW1h
dGlvbi5jbGVhcigpOworICAgIHJldHVybiBoYWRGbGluZ0FuaW1hdGlvbjsKIH0KIAogdm9pZCBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmIGlu
Y3JlbWVudCkKIHsKLSAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCi0gICAgICAgIG1faW5w
dXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeSh0b1NpemUoaW5jcmVtZW50KSk7CisgICAgaWYgKGlu
Y3JlbWVudCA9PSBJbnRQb2ludDo6emVybygpKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFD
RV9FVkVOVDIoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzY3JvbGxCeSIs
ICJ4IiwgaW5jcmVtZW50LngoKSwgInkiLCBpbmNyZW1lbnQueSgpKTsKKworICAgIFdlYk1vdXNl
V2hlZWxFdmVudCBldmVudDsKKyAgICBldmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6TW91c2VX
aGVlbDsKKyAgICBldmVudC5kZWx0YVggPSAtaW5jcmVtZW50LngoKTsKKyAgICBldmVudC5kZWx0
YVkgPSAtaW5jcmVtZW50LnkoKTsKKyAgICBldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
ID0gdHJ1ZTsKKyAgICBldmVudC54ID0gbV93aGVlbEZsaW5nUG9pbnQueCgpOworICAgIGV2ZW50
LnkgPSBtX3doZWVsRmxpbmdQb2ludC55KCk7CisKKyAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiA9IGhhbmRsZUlucHV0RXZlbnRJ
bnRlcm5hbChldmVudCk7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNhc2UgRGlk
SGFuZGxlOgorICAgIGNhc2UgRHJvcEV2ZW50OgorICAgICAgICBicmVhazsgCisgICAgY2FzZSBE
aWROb3RIYW5kbGU6CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnk6OkFib3J0RmxpbmciKTsKKyAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGdvdCBhIERpZE5vdEhhbmRsZSwgdGhhdCBtZWFucyB3ZSBuZWVkIHRv
IGRlbGl2ZXIgd2hlZWxzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjb21taXQgYW5kIHRyYW5zZmVyIHRoZSBmbGluZyBj
dXJ2ZSBvdmVyIHRvIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZCBhbmQgcnVuIHRoZSByZXN0
IG9mIHRoZSB3aGVlbHMgZnJvbSB0aGVyZS4KKyAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdo
ZW4gZmxpbmdpbmcgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBzY3JvbGxhYmxlIHN1YmFyZWEgdGhh
dCB3ZSBjYW4ndAorICAgICAgICAvLyBzY3JvbGwgb24gdGhlIHRocmVhZCBpZiB0aGUgZmxpbmcg
c3RhcnRzIG91dHNpZGUgdGhlIHN1YmFyZWEgYnV0IHRoZW4gaXMgZmx1bmcgInVuZGVyIiB0aGUK
KyAgICAgICAgLy8gcG9pbnRlci4KKyAgICAgICAgLy8gRm9yIG5vdywganVzdCBhYm9ydCB0aGUg
ZmxpbmcuCisgICAgICAgIGNhbmNlbEN1cnJlbnRGbGluZygpOworICAgIH0KIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsLmgKaW5kZXggODIzOTBjNjQ5MDkyYTM5MmUxNzUxZTA0MTRkNWQxYjFiNDVl
ZjQwYS4uZDk2MTk1ODdkM2Y1ODg2M2VjZTczZGVmYjBjZDRmODE3ZDdjNDI3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsX2gKICNkZWZpbmUgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxfaAog
CisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIldlYklucHV0RXZl
bnQuaCIKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2ViQ29yZTo6Q0NJbnB1
dEhhbmRsZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAgICAvLyBX
ZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKQEAgLTcyLDcgKzczLDE4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKIAotICAgIGJvb2wgaGFu
ZGxlR2VzdHVyZUZsaW5nKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYpOworICAgIGVudW0gRXZlbnRE
aXNwb3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgaW5wdXQgZXZlbnQgYW5kIGRldGVybWluZXMg
dGhlIGRpc3Bvc2l0aW9uLCBidXQgZG9lcyBub3QgbWFrZQorICAgIC8vIGFueSBjYWxscyBvdXQg
dG8gdGhlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuIFNvbWUgaW5wdXQgdHlwZXMg
ZGVmZXIgdG8gaGVscGVycy4KKyAgICBFdmVudERpc3Bvc2l0aW9uIGhhbmRsZUlucHV0RXZlbnRJ
bnRlcm5hbChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisKKyAgICBFdmVudERpc3Bvc2l0aW9uIGhh
bmRsZUdlc3R1cmVGbGluZyhjb25zdCBXZWJHZXN0dXJlRXZlbnQmKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB3ZSBhY3R1YWxseSBoYWQgYW4gYWN0aXZlIGZsaW5nIHRvIGNhbmNlbC4KKyAg
ICBib29sIGNhbmNlbEN1cnJlbnRGbGluZygpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV93aGVlbEZsaW5nQW5pbWF0aW9uOworICAgIFdlYkNvcmU6
OkludFBvaW50IG1fd2hlZWxGbGluZ1BvaW50OyAvLyBQb2ludGVyIHBvc2l0aW9uIGZvciB0aGUg
Y3VycmVudCBmbGluZy4gCiAKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KiBt
X2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwpAQCAtODIsNyArOTQsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQ7CiAgICAgYm9vbCBtX2V4cGVjdFBp
bmNoVXBkYXRlRW5kOwogI2VuZGlmCi0gICAgYm9vbCBtX3Njcm9sbFN0YXJ0ZWQ7CisgICAgYm9v
bCBtX2dlc3R1cmVTY3JvbGxTdGFydGVkOwogCiAgICAgc3RhdGljIGludCBzX25leHRBdmFpbGFi
bGVJZGVudGlmaWVyOwogICAgIHN0YXRpYyBIYXNoU2V0PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsKj4qIHNfY29tcG9zaXRvcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggMDZjMmIzZTFkNmMxMTIwNTgxODNjZGZmNjI5NmJmYjFlNWNlOWMz
Yi4uMmI5NjA2MzdmMTg3MDMyOGVjNTNmYzM3ZDRhODAzM2Q2MTY3MDY5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzMwMSw5ICszMzAxLDEwIEBA
IHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Ny
b2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsCiAgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkgfHwgIW1h
aW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChw
YWdlU2NhbGVEZWx0YSA9PSAxKQorICAgIGlmIChwYWdlU2NhbGVEZWx0YSA9PSAxKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQyKCJ3ZWJraXQiLCAiV2ViVmlld0ltcGw6OmFwcGx5U2Ny
b2xsQW5kU2NhbGU6OnNjcm9sbEJ5IiwgIngiLCBzY3JvbGxEZWx0YS53aWR0aCwgInkiLCBzY3Jv
bGxEZWx0YS5oZWlnaHQpOwogICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT5z
Y3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gVGhlIHBhZ2Ugc2NhbGUgY2hhbmdlZCwgc28gYXBwbHkgYSBzY2FsZSBhbmQgc2Nyb2xsIGlu
IGEgc2luZ2xlCiAgICAgICAgIC8vIG9wZXJhdGlvbi4gVGhlIG9sZCBzY3JvbGwgb2Zmc2V0IChh
bmQgcGFzc2VkLWluIGRlbHRhKSBhcmUKICAgICAgICAgLy8gaW4gdGhlIG9sZCBjb29yZGluYXRl
IHNwYWNlLCBzbyB3ZSBmaXJzdCBuZWVkIHRvIG11bHRpcGx5IHRoZW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0YjE0NjM2ZmE3ZTA2MDM1NDU2NTQ3NDVmZjRkYTkw
Yzg5MDdkZThmLi5mYTgyNDdiMTEwYzA3ZWIxNTdmZDU0NDkwMjY0OWUxZGI1MGYwZDA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgiCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC00MiwxMTIgKzQzLDU0IEBAIHVzaW5n
IFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw7CiAKIG5hbWVzcGFjZSB7CiAK
LWNsYXNzIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vY2tJbnB1dEhhbmRsZXJD
bGllbnQpOworY2xhc3MgTW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNb2NrQ0NJ
bnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgotICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQo
KQotICAgICAgICA6IG1fc2Nyb2xsU3RhdHVzKFNjcm9sbFN0YXJ0ZWQpCi0gICAgICAgICwgbV9w
aW5jaFN0YXJ0ZWQoZmFsc2UpCi0gICAgICAgICwgbV9waW5jaEVuZGVkKGZhbHNlKQotICAgICAg
ICAsIG1fcGluY2hNYWduaWZpY2F0aW9uKDApCi0gICAgICAgICwgbV9zY3JvbGxCeUNhbGxlZChm
YWxzZSkKKyAgICBNb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQoKQogICAgIHsKICAgICB9Ci0gICAg
dmlydHVhbCB+TW9ja0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgfk1vY2tD
Q0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQogCi0gICAgdm9pZCBzZXRTY3JvbGxTdGF0dXMoU2Ny
b2xsU3RhdHVzIHN0YXR1cykgeyBtX3Njcm9sbFN0YXR1cyA9IHN0YXR1czsgfQogCi0gICAgYm9v
bCBwaW5jaFN0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BpbmNoU3RhcnRlZDsgfQotICAgIGJv
b2wgcGluY2hFbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hFbmRlZDsgfQotICAgIGZsb2F0
IHBpbmNoTWFnaW5pZmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hNYWduaWZpY2F0aW9u
OyB9Ci0gICAgYm9vbCBzY3JvbGxCeUNhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQnlD
YWxsZWQ7IH0KKyAgICBNT0NLX01FVEhPRDAocGluY2hHZXN0dXJlQmVnaW4sIHZvaWQoKSk7Cisg
ICAgTU9DS19NRVRIT0QyKHBpbmNoR2VzdHVyZVVwZGF0ZSwgdm9pZChmbG9hdCBtYWduaWZ5RGVs
dGEsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhbmNob3IpKTsKKyAgICBNT0NLX01FVEhPRDAo
cGluY2hHZXN0dXJlRW5kLCB2b2lkKCkpOwogCi0gICAgdm9pZCByZXNldFBpbmNoKCkKLSAgICB7
Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxCeUNhbGxl
ZCA9IGZhbHNlOwotICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7Ci0gICAgfQorICAg
IE1PQ0tfTUVUSE9EMChzY2hlZHVsZUFuaW1hdGlvbiwgdm9pZCgpKTsKIAotICAgIHZpcnR1YWwg
V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmdldCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxXZWJDb3JlOjpDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbikgeyBtX2FjdGl2ZUdlc3R1cmVBbmltYXRp
b24gPSBhbmltYXRpb247IH0KKyAgICBNT0NLX01FVEhPRDIoc2Nyb2xsQmVnaW4sIFNjcm9sbFN0
YXR1cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJbnB1dFR5cGUpKTsKKyAgICBNT0NLX01FVEhPRDEoc2Nyb2xsQnksIHZvaWQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpKTsKKyAgICBNT0NLX01FVEhPRDAoc2Nyb2xsRW5kLCB2
b2lkKCkpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElu
cHV0VHlwZSkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Njcm9sbFN0YXR1czsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSBPVkVSUklERSB7IG1fc2Nyb2xsQnlDYWxsZWQgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNjcm9sbEVuZCgpIE9WRVJSSURFIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVy
ZUJlZ2luKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gdHJ1ZTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5
RGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhbmNob3IpIE9WRVJSSURFCi0gICAgewot
ICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IG1hZ25pZnlEZWx0YTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBt
X3BpbmNoRW5kZWQgPSB0cnVlOwotICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlU2Nh
bGVBbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYW5jaG9yUG9pbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBhZ2VTY2FsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VGlt
ZU1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVy
YXRpb25NcykgT1ZFUlJJREUgeyB9CiAKLSAgICBTY3JvbGxTdGF0dXMgbV9zY3JvbGxTdGF0dXM7
Ci0gICAgYm9vbCBtX3BpbmNoU3RhcnRlZDsKLSAgICBib29sIG1fcGluY2hFbmRlZDsKLSAgICBm
bG9hdCBtX3BpbmNoTWFnbmlmaWNhdGlvbjsKLSAgICBib29sIG1fc2Nyb2xsQnlDYWxsZWQ7Ci0K
LSAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBtX2FjdGl2ZUdl
c3R1cmVBbmltYXRpb247CisgICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSBPVkVSUklERSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxXZWJD
b3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSBPVkVSUklERSB7IH0KIH07CiAKIGNsYXNz
IE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgogICAgIE1vY2tX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkKLSAgICAgICAgOiBtX2hhbmRsZWQoZmFs
c2UpCi0gICAgICAgICwgbV9zZW5kVG9XaWRnZXQoZmFsc2UpCisgICAgICAgIDogV2ViS2l0OjpX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkKICAgICB7CiAgICAgfQogICAgIHZpcnR1
YWwgfk1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CiAKLSAgICB2b2lk
IHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1faGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBtX3Nl
bmRUb1dpZGdldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFuZGxlZDsgfQotICAgIGJvb2wgc2VuZFRvV2lkZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zZW5kVG9XaWRnZXQ7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNo
dXRkb3duKCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEhhbmRsZUlucHV0RXZl
bnQoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9oYW5kbGVkID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoYm9vbCBzZW5kVG9XaWRnZXQp
IE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3NlbmRUb1dpZGdldCA9IHNlbmRUb1dpZGdldDsK
LSAgICB9Ci0KLSAgICBib29sIG1faGFuZGxlZDsKLSAgICBib29sIG1fc2VuZFRvV2lkZ2V0Owor
ICAgIE1PQ0tfTUVUSE9EMCh3aWxsU2h1dGRvd24sIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0Qw
KGRpZEhhbmRsZUlucHV0RXZlbnQsIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0QxKGRpZE5vdEhh
bmRsZUlucHV0RXZlbnQsIHZvaWQoYm9vbCBzZW5kVG9XaWRnZXQpKTsKIH07CiAKIFRFU1QoV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGZyb21JZGVudGlmaWVyKQogewogICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRo
ZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgYWx3YXlzSW1wbFRocmVhZDsKLSNlbmRpZgogCiAgICAgLy8gQmVmb3JlIGNyZWF0aW5nIGFu
eSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVycywgbG9va3VwcyBmb3IgYW55IHZhbHVlIHNob3Vs
ZCBmYWlsIGFuZCBub3QgY3Jhc2guCiAgICAgRVhQRUNUX0VRKDAsIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKDIpKTsKQEAgLTE2NywxNzQgKzExMCwyNzkgQEAgVEVT
VChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZnJvbUlkZW50aWZpZXIpCiAKICAgICAv
LyBBZnRlciB0aGUgY29tcG9zaXRvciBpcyBkZXN0cm95ZWQsIGl0cyBlbnRyeSBzaG91bGQgYmUg
cmVtb3ZlZCBmcm9tIHRoZSBtYXAuCiAgICAgRVhQRUNUX0VRKDAsIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGNvbXBvc2l0b3JJZGVudGlmaWVyKSk7Ci0KICAgICBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKLVRFU1QoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVTY3JvbGwpCi17Ci0gICAgV2ViS2l0OjpXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOwotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0
b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJ
bXBsVGhyZWFkOwotI2VuZGlmCitjbGFzcyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRl
c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkRGlzcG9zaXRpb24oRGlk
SGFuZGxlKQorICAgIHsKKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgICAgICBtX2lucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjpjcmVhdGUoJm1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50KTsKKyAgICAgICAgbV9pbnB1
dEhhbmRsZXItPnNldENsaWVudCgmbV9tb2NrQ2xpZW50KTsKKyAgICB9CiAKLSAgICBNb2NrSW5w
dXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudCBtb2NrQ2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xp
ZW50KCZtb2NrQ2xpZW50KTsKKyAgICB+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0
KCkKKyAgICB7CisgICAgICAgIG1faW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7CisgICAgICAg
IG1faW5wdXRIYW5kbGVyLmNsZWFyKCk7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICB9CiAKKyAgICB2b2lkIHZlcmlmeUFuZFJlc2V0TW9ja3MoKQorICAg
IHsKKyAgICAgICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50KTsKKyAgICAgICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fbW9ja0NsaWVudCk7CisgICAgICAgIHN3aXRjaCAobV9l
eHBlY3RlZERpc3Bvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgRGlkSGFuZGxlOgorICAgICAgICAg
ICAgLy8gSWYgd2UgZXhwZWN0IHRvIGhhbmRsZSBldmVudHMsIHdlIHNob3VsZG4ndCBnZXQgYW55
IGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoKSBjYWxscyB3aXRoIGFueSBwYXJhbWV0ZXIuCisgICAg
ICAgICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDbGllbnQsIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
Ojp0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtX21vY2tD
bGllbnQsIGRpZEhhbmRsZUlucHV0RXZlbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEaWROb3RIYW5kbGU6CisgICAgICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgZXhwZWN0
aW5nIHRvIGhhbmRsZSBldmVudHMsIHdlIHNob3VsZG4ndCBjYWxsIGRpZEhhbmRsZUlucHV0RXZl
bnQoKS4KKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkSGFuZGxlSW5w
dXRFdmVudCgpKS5UaW1lcygwKTsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVu
dCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxzZSkpLlRpbWVzKDApOworICAgICAgICAgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERyb3BFdmVudDoKKyAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGV4cGVjdGluZyB0byBkcm9wLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBkaWRI
YW5kbGUuLigpIG9yIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQg
Ki8pIGNhbGxzLgorICAgICAgICAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ2xpZW50LCBkaWRIYW5k
bGVJbnB1dEV2ZW50KCkpLlRpbWVzKDApOworICAgICAgICAgICAgRVhQRUNUX0NBTEwobV9tb2Nr
Q2xpZW50LCBkaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUpKS5UaW1lcygwKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NsaWVudCwgZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxz
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBNb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQgbV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQ7
CisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBtX2lucHV0SGFuZGxl
cjsKKyAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtX21vY2tDbGllbnQ7
CiAgICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKIAorICAgIGVudW0gRXhwZWN0
ZWREaXNwb3NpdGlvbiB7IERpZEhhbmRsZSwgRGlkTm90SGFuZGxlLCBEcm9wRXZlbnQgfTsKKyAg
ICBFeHBlY3RlZERpc3Bvc2l0aW9uIG1fZXhwZWN0ZWREaXNwb3NpdGlvbjsKKworcHJpdmF0ZToK
KyAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgbV9hbHdheXNJbXBsVGhyZWFk
OworfTsKKworCitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0
dXJlU2Nyb2xsU3RhcnRlZCkKK3sKKyAgICAvLyBXZSBzaG91bGRuJ3Qgc2VuZCBhbnkgZXZlbnRz
IHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVyZS4KKyAgICBtX2V4cGVjdGVkRGlzcG9zaXRp
b24gPSBEaWRIYW5kbGU7CisgICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOworCisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8s
IHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKSk7CisKICAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKLSAgICBpbnB1
dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9j
a0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dp
ZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhh
bmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAK
ICAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxV
cGRhdGU7Ci0gICAgZ2VzdHVyZS5kZWx0YVkgPSA0MDsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVk
KCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBt
b2NrQ2xpZW50LnJlc2V0KCk7CisgICAgZ2VzdHVyZS5kZWx0YVkgPSAtNDA7IC8vIC1ZIG1lYW5z
IHNjcm9sbCBkb3duIC0gaS5lLiBpbiB0aGUgK1kgZGlyZWN0aW9uLgorICAgIEVYUEVDVF9DQUxM
KG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpQcm9wZXJ0eSgm
V2ViQ29yZTo6SW50U2l6ZTo6aGVpZ2h0LCB0ZXN0aW5nOjpHdCgwKSkpKTsKKyAgICBtX2lucHV0
SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHZlcmlmeUFuZFJlc2V0
TW9ja3MoKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZDsKICAgICBnZXN0dXJlLmRlbHRhWSA9IDA7Ci0gICAgaW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQu
aGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7
Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRI
YW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQoKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlu
cHV0RXZlbnQoZ2VzdHVyZSk7Cit9CisKK1RFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxGYWlsZWQpCit7CisgICAgLy8gV2Ugc2hvdWxkIHNlbmQg
YWxsIGV2ZW50cyB0byB0aGUgd2lkZ2V0IGZvciB0aGlzIGdlc3R1cmUuCisgICAgbV9leHBlY3Rl
ZERpc3Bvc2l0aW9uID0gRGlkTm90SGFuZGxlOworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3MoKTsK
IAotICAgIG1vY2tJbnB1dEhhbmRsZXIuc2V0U2Nyb2xsU3RhdHVzKFdlYkNvcmU6OkNDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbig6OnRlc3Rpbmc6Ol8sIDo6dGVzdGluZzo6Xykp
CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5k
bGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRs
ZWQoKSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAg
bW9ja0NsaWVudC5yZXNldCgpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50
KGdlc3R1cmUpOworCisgICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOwogCiAgICAgZ2VzdHVyZS50
eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOwogICAgIGdl
c3R1cmUuZGVsdGFZID0gNDA7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQ
RUNUX1RSVUUobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNl
dCgpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisg
ICAgdmVyaWZ5QW5kUmVzZXRNb2NrcygpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOwogICAgIGdlc3R1cmUuZGVsdGFZID0gMDsK
LSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50
LnNlbmRUb1dpZGdldCgpKTsKLSAgICBtb2NrQ2xpZW50LnJlc2V0KCk7Ci0KLSAgICBpbnB1dEhh
bmRsZXItPnNldENsaWVudCgwKTsKLQotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKIH0K
IAotVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZVBpbmNoKQorVEVT
VF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbElnbm9y
ZWQpCiB7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwotI2lmbmRl
ZiBOREVCVUcKLSAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkg
YmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOwotI2VuZGlmCisgICAgLy8gV2Ug
c2hvdWxkbid0IGhhbmRsZSB0aGUgR2VzdHVyZVNjcm9sbEJlZ2luLgorICAgIC8vIEluc3RlYWQs
IHdlIHNob3VsZCBnZXQgb25lIGRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UpIGNhbGwgcGVy
IGhhbmRsZUlucHV0RXZlbnQoKSwKKyAgICAvLyBpbmRpY2F0aW5nIHRoYXQgd2UgY291bGQgZGV0
ZXJtaW5lIHRoYXQgdGhlcmUncyBub3RoaW5nIHRoYXQgY291bGQgc2Nyb2xsIG9yIG90aGVyd2lz
ZQorICAgIC8vIHJlYWN0IHRvIHRoaXMgZ2VzdHVyZSBzZXF1ZW5jZSBhbmQgdGh1cyB3ZSBzaG91
bGQgZHJvcCB0aGUgd2hvbGUgZ2VzdHVyZSBzZXF1ZW5jZSBvbiB0aGUgZmxvb3IuCisgICAgbV9l
eHBlY3RlZERpc3Bvc2l0aW9uID0gRHJvcEV2ZW50OworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3Mo
KTsKIAotICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBP
d25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOwotICAg
IE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tDbGllbnQ7Ci0gICAgaW5w
dXRIYW5kbGVyLT5zZXRDbGllbnQoJm1vY2tDbGllbnQpOworICAgIEVYUEVDVF9DQUxMKG1fbW9j
a0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpf
KSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCkpOwogCi0gICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZl
bnQgZ2VzdHVyZTsKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdl
c3R1cmVTY3JvbGxCZWdpbjsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChn
ZXN0dXJlKTsKK30KKworVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwg
Z2VzdHVyZVBpbmNoKQoreworICAgIC8vIFdlIHNob3VsZG4ndCBzZW5kIGFueSBldmVudHMgdG8g
dGhlIHdpZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9
IERpZEhhbmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKICAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luOwotICAgIGlucHV0
SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1RfVFJVRShtb2Nr
Q2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lk
Z2V0KCkpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIucGluY2hTdGFydGVkKCkp
OwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAgICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGlu
Y2goKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgcGluY2hH
ZXN0dXJlQmVnaW4oKSk7CisgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2Vz
dHVyZSk7CisKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKICAgICBnZXN0dXJlLnR5cGUg
PSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZTsKICAgICBnZXN0dXJl
LmRlbHRhWCA9IDEuNTsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwotICAgIEVYUEVDVF9G
QUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9ja0lu
cHV0SGFuZGxlci5waW5jaEVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSgxLjUsIG1vY2tJbnB1dEhh
bmRsZXIucGluY2hNYWdpbmlmY2F0aW9uKCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAg
ICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBnZXN0dXJlLnggPSA3OworICAg
IGdlc3R1cmUueSA9IDEzOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xp
ZW50LCBwaW5jaEdlc3R1cmVVcGRhdGUoMS41LCBXZWJDb3JlOjpJbnRQb2ludCg3LCAxMykpKTsK
KyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHZl
cmlmeUFuZFJlc2V0TW9ja3MoKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5w
dXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOwogICAgIGdlc3R1cmUuZGVsdGFYID0gMC41Owot
ICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQu
c2VuZFRvV2lkZ2V0KCkpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNo
RW5kZWQoKSk7Ci0gICAgRVhQRUNUX0VRKDAuNSwgbW9ja0lucHV0SGFuZGxlci5waW5jaE1hZ2lu
aWZjYXRpb24oKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOwotICAgIG1vY2tJbnB1dEhhbmRs
ZXIucmVzZXRQaW5jaCgpOworICAgIGdlc3R1cmUueCA9IDk7CisgICAgZ2VzdHVyZS55ID0gNjsK
KyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgcGluY2hHZXN0dXJl
VXBkYXRlKC41LCBXZWJDb3JlOjpJbnRQb2ludCg5LCA2KSkpOworICAgIG1faW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgdmVyaWZ5QW5kUmVzZXRNb2Nrcygp
OwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGlu
Y2hFbmQ7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwotICAg
IEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UobW9j
a0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgRVhQRUNUX1RSVUUobW9ja0lucHV0SGFuZGxl
ci5waW5jaEVuZGVkKCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKLSAgICBtb2NrSW5wdXRI
YW5kbGVyLnJlc2V0UGluY2goKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxl
ckNsaWVudCwgcGluY2hHZXN0dXJlRW5kKCkpOworICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJ
bnB1dEV2ZW50KGdlc3R1cmUpOworfQogCi0gICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7
CitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdT
dGFydGVkKQoreworICAgIC8vIFdlIHNob3VsZG4ndCBzZW5kIGFueSBldmVudHMgdG8gdGhlIHdp
ZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9IERpZEhh
bmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKLSAgICBXZWJLaXQ6OldlYkNvbXBv
c2l0b3I6OnNodXRkb3duKCk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJD
bGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2ls
bE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkKSk7CisKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6
Okdlc3R1cmVGbGluZ1N0YXJ0OworICAgIGdlc3R1cmUuZGVsdGFYID0gMTA7CisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwor
ICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworCisgICAgdmVy
aWZ5QW5kUmVzZXRNb2NrcygpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlRmxpbmdD
YW5jZWwgZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5jZWxzIGl0LgorICAgIGdlc3R1cmUudHlwZSA9
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOworICAgIG1faW5wdXRI
YW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1URVNUKFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlRmxpbmcpCitURVNUX0YoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdGYWlsZWQpCiB7Ci0gICAgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIC8vIFdlIHNob3VsZCBzZW5kIGFsbCBl
dmVudHMgdG8gdGhlIHdpZGdldCBmb3IgdGhpcyBnZXN0dXJlLgorICAgIG1fZXhwZWN0ZWREaXNw
b3NpdGlvbiA9IERpZE5vdEhhbmRsZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7CiAKLSAg
ICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZy
b20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRI
YW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAg
ICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsRmFpbGVkKSk7CiAKLSAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1
dEhhbmRsZXI7Ci0gICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1
dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5w
dXRIYW5kbGVyKTsKLSAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtb2Nr
Q2xpZW50OwotICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKyAgICBn
ZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0Owor
ICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogCi0gICAgV2Vi
S2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKKyAgICB2ZXJpZnlBbmRSZXNldE1vY2tzKCk7
CiAKLSAgICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xsRW5kIGV2
ZW50LgotICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNj
cm9sbEJlZ2luOwotICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsK
LSAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOwotICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKyAg
ICAvLyBFdmVuIGlmIHdlIGRpZG4ndCBzdGFydCBhIGZsaW5nIG91cnNlbHZlcywgd2Ugc3RpbGwg
bmVlZCB0byBzZW5kIHRoZSBjYW5jZWwgZXZlbnQgdG8gdGhlIHdpZGdldC4KKyAgICBnZXN0dXJl
LnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKKyAgICBt
X2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKK30KIAotICAgIGdlc3R1
cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZDsKLSAgICBn
ZXN0dXJlLmRlbHRhWCA9IDI7Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOwotICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBF
Q1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7Ci0gICAgQVNTRVJUX1RSVUUobW9j
a0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9GQUxT
RShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOwotICAgIG1vY2tJbnB1dEhhbmRs
ZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpLT5hbmltYXRlKDAuMDAxKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOwotICAgIG1vY2tDbGllbnQu
cmVzZXQoKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IGEgR2VzdHVyZVRhcERvd24gZHVyaW5nIGFu
IGFuaW1hdGlvbiBjYW5jZWxzIGl0LgotICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5w
dXRFdmVudDo6R2VzdHVyZVRhcERvd247Ci0gICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2
ZW50KGdlc3R1cmUpOwotICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKSk7Ci0gICAgbW9ja0NsaWVudC5yZXNldCgpOwotCi0gICAgLy8gVmVy
aWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biB3aGVuIG5vIGFuaW1hdGlvbiBpcyBhY3RpdmUgaXMg
bm90IGhhbmRsZWQuCi0gICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlVGFwRG93bjsKLSAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKLSAgICBFWFBFQ1Rf
VFJVRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKLQotICAgIGlucHV0SGFuZGxlci0+c2V0
Q2xpZW50KDApOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK1RFU1Rf
RihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0lnbm9yZWQp
Cit7CisgICAgbV9leHBlY3RlZERpc3Bvc2l0aW9uID0gRGlkTm90SGFuZGxlOworICAgIHZlcmlm
eUFuZFJlc2V0TW9ja3MoKTsKKworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVy
Q2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAgICAgLldp
bGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZCkpOworCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlRmxpbmdTdGFydDsKKyAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVu
dChnZXN0dXJlKTsKKworICAgIHZlcmlmeUFuZFJlc2V0TW9ja3MoKTsKKworICAgIC8vIEV2ZW4g
aWYgd2UgZGlkbid0IHN0YXJ0IGEgZmxpbmcgb3Vyc2VsdmVzLCB3ZSBzdGlsbCBuZWVkIHRvIHNl
bmQgdGhlIGNhbmNlbCBldmVudCB0byB0aGUgd2lkZ2V0LgorICAgIGdlc3R1cmUudHlwZSA9IFdl
YktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOworICAgIG1faW5wdXRIYW5k
bGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworfQorCitURVNUX0YoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdBbmltYXRlcykKK3sKKyAgICAvLyBX
ZSBzaG91bGRuJ3Qgc2VuZCBhbnkgZXZlbnRzIHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVy
ZS4KKyAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24gPSBEaWRIYW5kbGU7CisgICAgdmVyaWZ5QW5k
UmVzZXRNb2NrcygpOworCisgICAgLy8gT24gdGhlIGZsaW5nIHN0YXJ0LCB3ZSBzaG91bGQgc2No
ZWR1bGUgYW4gYW5pbWF0aW9uIGJ1dCBub3QgYWN0dWFsbHkgc3RhcnQKKyAgICAvLyBzY3JvbGxp
bmcuCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxp
bmdTdGFydDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IC0xMDAwOworICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6
XywgdGVzdGluZzo6XykpCisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29y
ZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpKTsKKyAgICBtX2lucHV0SGFu
ZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKworICAgIHRlc3Rpbmc6Ok1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCk7Cisg
ICAgLy8gVGhlIGZpcnN0IGFuaW1hdGUgY2FsbCBzaG91bGQgbGV0IHVzIHBpY2sgdXAgYW4gYW5p
bWF0aW9uIHN0YXJ0IHRpbWUsIGJ1dCB3ZQorICAgIC8vIHNob3VsZG4ndCBhY3R1YWxseSBtb3Zl
IGFueXdoZXJlIGp1c3QgeWV0LiBUaGUgZmlyc3QgZnJhbWUgYWZ0ZXIgdGhlIGZsaW5nIHN0YXJ0
CisgICAgLy8gd2lsbCB0eXBpY2FsbHkgaW5jbHVkZSB0aGUgbGFzdCBzY3JvbGwgZnJvbSB0aGUg
Z2VzdHVyZSB0aGF0IGxlYWQgdG8gdGhlIHNjcm9sbAorICAgIC8vIChlaXRoZXIgd2hlZWwgb3Ig
Z2VzdHVyZSBzY3JvbGwpLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gdmlzaWJsZSBoaXRjaC4KKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9s
bEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKKyAgICBtX2lucHV0SGFu
ZGxlci0+YW5pbWF0ZSgxMCk7CisKKyAgICB0ZXN0aW5nOjpNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmbV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQpOworCisgICAgLy8gVGhlIHNl
Y29uZCBjYWxsIHNob3VsZCBzdGFydCBzY3JvbGxpbmcgaW4gdGhlICtYIGRpcmVjdGlvbi4KKyAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9s
bEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQorICAgICAgICAuV2lsbE9uY2UodGVzdGlu
Zzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKSk7
CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRl
c3Rpbmc6OlByb3BlcnR5KCZXZWJDb3JlOjpJbnRTaXplOjp3aWR0aCwgdGVzdGluZzo6R3QoMCkp
KSk7CisgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEVu
ZCgpKTsKKyAgICBtX2lucHV0SGFuZGxlci0+YW5pbWF0ZSgxMC4xKTsKKworICAgIHRlc3Rpbmc6
Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX21vY2tDQ0lucHV0SGFuZGxlckNs
aWVudCk7CisKKyAgICAvLyBMZXQncyBzYXkgb24gdGhlIHRoaXJkIGNhbGwgd2UgaGl0IGEgbm9u
LXNjcm9sbGFibGUgcmVnaW9uLiBXZSBzaG91bGQgYWJvcnQgdGhlIGZsaW5nIGFuZCBub3Qgc2Ny
b2xsLgorICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gZG8gc29tZSB3b3JrIHRvIHRyYW5z
ZmVyIHRoZSByZXN0IG9mIHRoaXMgZmxpbmcgdG8gdGhlIG1haW4gdGhyZWFkLgorICAgIC8vIEFk
ZCB0ZXN0cyBmb3IgdGhpcyBvbmNlIGl0J3MgaW1wbGVtZW50ZWQuCisgICAgRVhQRUNUX0NBTEwo
bV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5n
OjpfLCB0ZXN0aW5nOjpfKSkKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJD
b3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgRVhQRUNUX0NB
TEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1l
cygwKTsKKyAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xs
RW5kKCkpLlRpbWVzKDApOworICAgIG1faW5wdXRIYW5kbGVyLT5hbmltYXRlKDEwLjIpOworCisg
ICAgdGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50KTsKKworICAgIC8vIFNpbmNlIHdlJ3ZlIGFib3J0ZWQgdGhlIGZsaW5n
LCB0aGUgbmV4dCBhbmltYXRpb24gc2hvdWxkIGJlIGEgbm8tb3AgYW5kIHNob3VsZCBub3QgcmVz
dWx0IGluIGFub3RoZXIKKyAgICAvLyBmcmFtZSBiZWluZyByZXF1ZXN0ZWQuCisgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpLlRp
bWVzKDApOworICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3Jv
bGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CisgICAgbV9pbnB1dEhh
bmRsZXItPmFuaW1hdGUoMTAuMyk7CiB9CiAKIH0K
</data>
<flag name="review"
          id="136434"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>