<?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>74376</bug_id>
          
          <creation_ts>2011-12-12 18:28:55 -0800</creation_ts>
          <short_desc>[chromium] CCLayerDelegate and WebLayerClient do not need notifySyncRequired</short_desc>
          <delta_ts>2011-12-19 20:44:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>74477</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>rniwa</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>519759</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 18:28:55 -0800</bug_when>
    <thetext>[chromium] CCLayerDelegate and WebLayerClient do not need notifySyncRequired</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519766</commentid>
    <comment_count>1</comment_count>
      <attachid>118930</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 18:37:35 -0800</bug_when>
    <thetext>Created attachment 118930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519768</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 18:40:13 -0800</bug_when>
    <thetext>This patch looks big but it&apos;s 5% code and 95% fighting with test infrastructure, so it isn&apos;t as bad as it looks.

The next step here (which either Shawn or myself will tackle) is removing CCLayerDelegate::drawsContent() by pushing that bit to LayerChromiums at the appropriate time rather than pulling it.  Then the only thing left on CCLayerDelegate will be paintContents() at which point the interface is renamed ContentLayerChromiumDelegate (or CCContentLayerClient or whatever) and is only set on ContentLayerChromium instances instead of all layers.  I think this will really help make it clearer WTF is going on with our various layer trees and back pointers.

I also did a fair amount of cleanup to our test harnesses, such as extracting the two (!) copies of CompositorMockWebGraphicsContext3D into a shared location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519770</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-12 18:43:20 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519814</commentid>
    <comment_count>4</comment_count>
      <attachid>118930</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-12 19:46:16 -0800</bug_when>
    <thetext>Comment on attachment 118930
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:152
&gt; +    child-&gt;setLayerTreeHost(m_layerTreeHost.get());

I suspect we have more than just this to propagate the m_layerTreeHost on every layer.
For example, if we first create the layer tree, and only then set the root layer, it won&apos;t propagate.
Also, should we propagate to the mask and replica layers.

Finally, for completeness, we probably want to clean up the LTH when we remove layers from the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519839</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 20:36:05 -0800</bug_when>
    <thetext>I&apos;m pretty minimal in propagating LayerChromium::m_layerTreeHost pointers in this patch to keep it managable, although I think cleaning that up will be a great follow-up.  We do a pass over all layers (including masks, replicas, etc) in the paint loop that sets the layerTreeHost pointer when actually compositing, so I only did the minimal to set up LTH pointers to pass our unit tests.  I think a better strategy would be to propagate the LTH pointer to subtrees whenever they attach to the tree and clear it when they detach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519856</commentid>
    <comment_count>6</comment_count>
      <attachid>118930</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-12 21:43:53 -0800</bug_when>
    <thetext>Comment on attachment 118930
Patch

API changes LGTM... happy to officially R+ the rest if Antoine/Nat say that they are happy with the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519970</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 02:18:41 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; ... propagate the LTH pointer to subtrees whenever they attach to the tree and clear it when they detach.

Yes please. Will look over this in detail tomorrow. This direction feels really promising overall. Thanks James.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520153</commentid>
    <comment_count>8</comment_count>
      <attachid>118930</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 10:19:50 -0800</bug_when>
    <thetext>Comment on attachment 118930
Patch

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

LGTM with nits

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:106
&gt; +    if (m_proxy)

When can you not have a proxy? Iirw, you always have a proxy.

&gt; Source/WebKit/chromium/WebKit.gypi:72
&gt; +            &apos;tests/CompositorMockGraphicsContext3D.h&apos;,

Not loving this name. If we have a CCRenderer [which Enne is promising me they will make someday soon], does that help with a name?

Also is it mock or fake?

&gt; Source/WebKit/chromium/tests/CompositorMockWebGraphicsContext3D.h:32
&gt; +// Test stub for WebGraphicsContext3D. Returns canned values needed for compositor initialization.

Yeah, definitely not a mock. Fake.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:135
&gt; +        m_parent = LayerChromium::create(0);

Should we be using the new style constructor here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520165</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 10:34:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 118930 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118930&amp;action=review
&gt; 
&gt; LGTM with nits
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:106
&gt; &gt; +    if (m_proxy)
&gt; 
&gt; When can you not have a proxy? Iirw, you always have a proxy.

In some tests we create a CCLayerTreeHost but don&apos;t use the create() and thus don&apos;t call initialize(), so we don&apos;t construct a proxy.

But now that I think about it that&apos;s probably a bug in the test.  Will remove and fix up the test if it looks reasonable.

&gt; 
&gt; &gt; Source/WebKit/chromium/WebKit.gypi:72
&gt; &gt; +            &apos;tests/CompositorMockGraphicsContext3D.h&apos;,
&gt; 
&gt; Not loving this name. If we have a CCRenderer [which Enne is promising me they will make someday soon], does that help with a name?
&gt; 
&gt; Also is it mock or fake?

It&apos;s a fake - will rename.  It&apos;s a fake GraphicsContext3D that is capable of passing compositor initialization.

I&apos;m not sure how CCRenderer is related.

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CompositorMockWebGraphicsContext3D.h:32
&gt; &gt; +// Test stub for WebGraphicsContext3D. Returns canned values needed for compositor initialization.
&gt; 
&gt; Yeah, definitely not a mock. Fake.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:135
&gt; &gt; +        m_parent = LayerChromium::create(0);
&gt; 
&gt; Should we be using the new style constructor here?

not sure what you mean by &apos;new style&apos; - i haven&apos;t changed LayerChromium::create()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520169</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 10:40:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 118930 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118930&amp;action=review
&gt; &gt; 
&gt; &gt; LGTM with nits
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:106
&gt; &gt; &gt; +    if (m_proxy)
&gt; &gt; 
&gt; &gt; When can you not have a proxy? Iirw, you always have a proxy.
&gt; 
&gt; In some tests we create a CCLayerTreeHost but don&apos;t use the create() and thus don&apos;t call initialize(), so we don&apos;t construct a proxy.
&gt; 
&gt; But now that I think about it that&apos;s probably a bug in the test.  Will remove and fix up the test if it looks reasonable.
&gt; 

Aha, LayerChromiumTest had a MockLayerTreeHost that wasn&apos;t calling initialize(). Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520171</commentid>
    <comment_count>11</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 10:41:07 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; &gt; Source/WebKit/chromium/WebKit.gypi:72
&gt; &gt; &gt; +            &apos;tests/CompositorMockGraphicsContext3D.h&apos;,
&gt; I&apos;m not sure how CCRenderer is related.

Oh, I was off in the clouds thinking this was a CCRendererGraphicsContext or something. Don&apos;t mind me. :)

&gt; &gt; &gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:135
&gt; &gt; &gt; +        m_parent = LayerChromium::create(0);
&gt; &gt; 
&gt; &gt; Should we be using the new style constructor here?
&gt; 
&gt; not sure what you mean by &apos;new style&apos; - i haven&apos;t changed LayerChromium::create()

Was suggesting defaulting, eg LayerChromium::create(LayerDelegate* delegate = 0) to save diffs down the road. NBD TBH.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520191</commentid>
    <comment_count>12</comment_count>
      <attachid>119042</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 11:02:59 -0800</bug_when>
    <thetext>Created attachment 119042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520192</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 11:05:30 -0800</bug_when>
    <thetext>Addressed nits.

The patch looks even bigger now because I&apos;ve renamed (Compositor|)Mock(Web|)GraphicsContext3D(Test|) to *Fake*, but that&apos;s just a do-webcore-rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520208</commentid>
    <comment_count>14</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-13 11:16:21 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m pretty minimal in propagating LayerChromium::m_layerTreeHost pointers in this patch to keep it managable, although I think cleaning that up will be a great follow-up.  We do a pass over all layers (including masks, replicas, etc) in the paint loop that sets the layerTreeHost pointer when actually compositing, so I only did the minimal to set up LTH pointers to pass our unit tests.  I think a better strategy would be to propagate the LTH pointer to subtrees whenever they attach to the tree and clear it when they detach.

I&apos;m fairly uncomfortable leaving things in this state. There is a race condition between the painting and the tree modification (which then won&apos;t setNeedsCommit). Even then, the painting phase doesn&apos;t set the LTH on all layers, only on those that paint and that are visible.
TBH, I wouldn&apos;t be surprised it breaks Aura in some cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520218</commentid>
    <comment_count>15</comment_count>
      <attachid>119042</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-13 11:30:31 -0800</bug_when>
    <thetext>Comment on attachment 119042
Patch

This all looks great to me, except I agree with piman&apos;s worries about the LTH changes.  For example, what if you add a non-visible child, then do the first commit (caused by addChild), and then change that child&apos;s transform such that it&apos;s now visible.  That second change won&apos;t cause a commit, because the LTH isn&apos;t hooked up to that child, because it didn&apos;t paint the first time around, even though it should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520221</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 11:31:28 -0800</bug_when>
    <thetext>Setting up the LTH properly doesn&apos;t look hard, I&apos;ll do that first (as a separate patch to land before this one).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520222</commentid>
    <comment_count>17</comment_count>
      <attachid>119042</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 11:31:50 -0800</bug_when>
    <thetext>Comment on attachment 119042
Patch

Clearing review? flag until the LTH pointer is set up on all LayerChromiums properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522437</commentid>
    <comment_count>18</comment_count>
      <attachid>119538</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 18:55:29 -0800</bug_when>
    <thetext>Created attachment 119538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522440</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 18:56:53 -0800</bug_when>
    <thetext>Same patch rebased on top of http://trac.webkit.org/changeset/103011 which makes sure that the m_layerTreeHost is accurate for LayerChromiums all the time, so setNeedsCommit() calls should always trigger a new frame when a layer in the tree is modified.  Modifying layers that are not in a LTH does not trigger a new frame, but adding the layer to the tree will.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523096</commentid>
    <comment_count>20</comment_count>
      <attachid>119538</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-16 15:24:09 -0800</bug_when>
    <thetext>Comment on attachment 119538
Patch

It looks fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523118</commentid>
    <comment_count>21</comment_count>
      <attachid>119538</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-16 15:43:12 -0800</bug_when>
    <thetext>Comment on attachment 119538
Patch

rs=me based on Vangelis&apos; unofficial review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523196</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 18:11:59 -0800</bug_when>
    <thetext>Committed r103135: &lt;http://trac.webkit.org/changeset/103135&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523323</commentid>
    <comment_count>23</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-17 10:36:48 -0800</bug_when>
    <thetext>Reverted in http://trac.webkit.org/changeset/103150 because of its dependencies on bug 74477, which was also rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524364</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 18:51:16 -0800</bug_when>
    <thetext>After relanding https://bugs.webkit.org/show_bug.cgi?id=74477 and resolving conflicts, this patch appears to pass all of (webkit|aura|views|compositor)_unittests. Will post a patch against ToT for posterity and reland.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524365</commentid>
    <comment_count>25</comment_count>
      <attachid>119971</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 18:54:11 -0800</bug_when>
    <thetext>Created attachment 119971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524366</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 18:55:02 -0800</bug_when>
    <thetext>Committed r103293: &lt;http://trac.webkit.org/changeset/103293&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524376</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-19 19:13:20 -0800</bug_when>
    <thetext>This patch appears to have broken Win builds:
http://build.webkit.org/builders/Chromium%20Win%20Release/builds/37102/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524377</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-19 19:13:45 -0800</bug_when>
    <thetext>NotNull error again:

15&gt;e:\google-windows-1\chromium-win-release\build\Source\JavaScriptCore\wtf/Vector.h(930) : error C2872: &apos;NotNull&apos; : ambiguous symbol
15&gt;        could be &apos;e:\google-windows-1\chromium-win-release\build\source\javascriptcore\wtf\StdLibExtras.h(279) : NotNullTag NotNull&apos;
15&gt;        or       &apos;e:\google-windows-1\chromium-win-release\build\Source\WebKit\chromium\testing\gmock\include\gmock/gmock-matchers.h(2644) : testing::PolymorphicMatcher&lt;Impl&gt; testing::NotNull(void)&apos;
15&gt;        with
15&gt;        [
15&gt;            Impl=testing::internal::NotNullMatcher
15&gt;        ]
15&gt;        e:\google-windows-1\chromium-win-release\build\source\javascriptcore\wtf\text\WTFString.h(582) : see reference to function template instantiation &apos;void WTF::Vector&lt;T&gt;::append&lt;UChar&gt;(const U *,size_t)&apos; being compiled
15&gt;        with
15&gt;        [
15&gt;            T=UChar,
15&gt;            U=UChar
15&gt;        ]
15&gt;e:\google-windows-1\chromium-win-release\build\Source\JavaScriptCore\wtf/Vector.h(972) : error C2872: &apos;NotNull&apos; : ambiguous symbol
15&gt;        could be &apos;e:\google-windows-1\chromium-win-release\build\source\javascriptcore\wtf\StdLibExtras.h(279) : NotNullTag NotNull&apos;
15&gt;        or       &apos;e:\google-windows-1\chromium-win-release\build\Source\WebKit\chromium\testing\gmock\include\gmock/gmock-matchers.h(2644) : testing::PolymorphicMatcher&lt;Impl&gt; testing::NotNull(void)&apos;
15&gt;        with
15&gt;        [
15&gt;            Impl=testing::internal::NotNullMatcher
15&gt;        ]
15&gt;        e:\google-windows-1\chromium-win-release\build\source\webcore\platform\graphics\GraphicsLayer.h(174) : see reference to function template instantiation &apos;void WTF::Vector&lt;T&gt;::append&lt;WebCore::AnimationValue*&gt;(const U &amp;)&apos; being compiled
15&gt;        with
15&gt;        [
15&gt;            T=const WebCore::AnimationValue *,
15&gt;            U=WebCore::AnimationValue *
15&gt;        ]
15&gt;WebGLLayerChromiumTest.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524388</commentid>
    <comment_count>29</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 19:40:09 -0800</bug_when>
    <thetext>I think the previous error was because of an overzealous using namespace; declaration, but I don&apos;t see anything like that in WebGLLayerChromiumTest.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524389</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 19:41:25 -0800</bug_when>
    <thetext>Ah I see, it&apos;s not necessary WebGLLayerChromiumTest - that just happened to be the next file in the output log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524395</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 19:45:38 -0800</bug_when>
    <thetext>I think this is in WebLayerTest.cpp, which is one of the two files (along with MockGraphicsContext3DTest.cpp) that has a using namespace testing; declaration.  This patch added some additional #includes to WebLayerTest.cpp one of which probably pulled in Vector.h causing the conflict.

I think the fix is to tighten up the using declaration in WebLayerTest.cpp to not pull in the entire testing:: namespace into the global namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524397</commentid>
    <comment_count>32</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 20:01:11 -0800</bug_when>
    <thetext>Sadly I don&apos;t have a quickfix ready and need to go. If someone could try replacing &apos;using namespace testing&apos; in WebLayerTest.cpp with &apos;using testing::Mock&apos; and see if that compiles anywhere, that would probably fix windows.  Otherwise please revert.  Sorry :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524406</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 20:34:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/103300 will hopefully fix the chromium windows compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524410</commentid>
    <comment_count>34</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 20:44:29 -0800</bug_when>
    <thetext>Seems that worked: http://build.webkit.org/builders/Chromium%20Win%20Release/builds/37108</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118930</attachid>
            <date>2011-12-12 18:37:35 -0800</date>
            <delta_ts>2011-12-13 11:02:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74376-20111212183733.patch</filename>
            <type>text/plain</type>
            <size>91696</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJjZDFlNWI4ZDZjMjM4
ZTE5NTFjMDU5ODFkNGYyZTc5NTU4MGRlYi4uN2YwOWIzZGE2MDY2YTJhMGYxZDI5MjE3NDBmN2I4
Mjc3NGJkODQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTEyICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBD
Q0xheWVyRGVsZWdhdGUgYW5kIFdlYkxheWVyQ2xpZW50IGRvIG5vdCBuZWVkIG5vdGlmeVN5bmNS
ZXF1aXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
Q0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCBpcyBhbiBvZGQgYml0IG9mIGludGVy
ZmFjZSB0aGF0IHdlIG9yaWdpbmFsbHkgY2FyZ28tY3VsdGVkIGZyb20gdGhlCisgICAgICAgIENv
cmVBbmltYXRpb24gY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbi4gSXQgaXMgYSBtZWNoYW5pc20g
Ynkgd2hpY2ggYSBMYXllckNocm9taXVtIGluc3RhbmNlIG1heSByZXF1ZXN0IGEgbmV3CisgICAg
ICAgIGZyYW1lIHZpYSBpdHMgQ0NMYXllckRlbGVnYXRlLCB3aGljaCBpbiBXZWJDb3JlIGlzIGFs
d2F5cyBhIEdyYXBoaWNzTGF5ZXJDbGllbnQuIEluIHByYWN0aWNlLCBhbGwKKyAgICAgICAgaW1w
bGVtZW50YXRpb25zIGV2ZW50dWFsbHkgZW5kZWQgdXAgcm91dGluZyB0byBDQ0xheWVyVHJlZUhv
c3Q6OnNldE5lZWRzQ29tbWl0IHdoaWNoIHRoZW4gbWFkZSB0aGUgcHJvcGVyCisgICAgICAgIHNj
aGVkdWxpbmcgZGVjaXNpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByb3V0ZXMgYWxsIGNoYW5n
ZXMgdGhhdCB3b3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBDQ0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5
bmNSZXF1aXJlZCBkaXJlY3RseSB0bworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRz
Q29tbWl0LCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHNjaGVkdWxpbmcgbG9naWMuCisK
KyAgICAgICAgVGhlcmUgaXMgYSBsYXJnZSBhbW91bnQgb2YgdW5pdCB0ZXN0IGNvdmVyYWdlIGZv
ciB0aGlzIGNoYW5nZSwgbGFyZ2VseSBpbiBMYXllckNocm9taXVtVGVzdAorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omluc2VydENoaWxkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY29wZWRUaHJlYWRQcm94eTo6cnVuVGFza0lmTm90U2h1dGRvd24pOgor
CiAyMDExLTEyLTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIGJhY2tncm91bmQtaW1hZ2UgdHJhbnNpdGlvbnMgdHJpZ2dlciBiZXR3ZWVuIGVxdWl2
YWxlbnQgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZhZWIyNTM2ZWI5N2E0
ZmY0YTg4YzM5MzJmM2ZkZjc5NjRjNjdkYjkuLmI4OTNiOGQzZTJkMjJmODNjMWY3YmQ3ZDIyM2I1
OTI1OTZkNWFmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAK
KzIwMTEtMTItMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIENDTGF5ZXJEZWxlZ2F0ZSBhbmQgV2ViTGF5ZXJDbGllbnQgZG8gbm90
IG5lZWQgbm90aWZ5U3luY1JlcXVpcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NDM3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYkxheWVyQ2xpZW50Ojpub3RpZnlOZWVkc0NvbXBvc2l0ZSgpIGlz
IGFuIG9kZCBpbnRlcmZhY2UgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGF0CisgICAgICAgIENDTGF5
ZXJEZWxlZ2F0ZTo6bm90aWZ5U3luY1JlcXVpcmVkKCkgaXMgLSBhbGwgc2NoZWR1bGluZyBkZWNp
c2lvbnMgc2hvdWxkIHJvdXRlIHRocm91Z2ggdGhlIFdlYkxheWVyVHJlZVZpZXcsCisgICAgICAg
IG5vdCBpbmRpdmlkdWFsIGxheWVycy4gSW4gcHJhY3RpY2UsIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgV2ViTGF5ZXJDbGllbnQ6Om5vdGlmeVN5bmNSZXF1aXJlZCgpIGRvIHRoZSBleGFjdAorICAg
ICAgICBzYW1lIHRoaW5nIGFzIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRlKCku
IFRoaXMgcmVtb3ZlcyB0aGF0IGNhbGxiYWNrLCBtYWtpbmcgV2ViTGF5ZXJDbGllbnQgYW4gZW1w
dHkKKyAgICAgICAgaW50ZXJmYWNlLCBhbmQgcm91dGVzIGFsbCBjYWxscyB0aGF0IHdvdWxkIGdv
IHRvIHRoYXQgaW50ZXJmYWNlIHRvIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRl
KCkuCisKKyAgICAgICAgT25jZSBkb3duc3RyZWFtIGltcGxlbWVudGF0aW9ucyBvZiBXZWJMYXll
ckNsaWVudCBhcmUgcmVtb3ZlZCwgV2ViTGF5ZXJDbGllbnQuaCBhbmQgdGhlIGNvbnN0cnVjdG9y
cyBhc3NvY2lhdGVkCisgICAgICAgIHdpdGggaXQgY2FuIGJlIGRlbGV0ZWQuCisKKyAgICAgICAg
VGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXMgaGVyZSBhcmUgdG8gdGhlIHRlc3QgaGFybmVzcy4gTWFu
eSB0ZXN0cyB0aGF0IHdlcmUgZGVzaWduZWQgYXJvdW5kIG5vdGlmeVN5bmNSZXF1aXJlZCgpCisg
ICAgICAgIGFyZSByZXdyaXR0ZW4gdG8gY2hlY2sgZm9yIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNDb21taXQoKSBvciBXZWJMYXllclRyZWVWaWV3OjpzY2hlZHVsZUNvbXBvc2l0ZSgpIGluc3Rl
YWQuCisgICAgICAgIEluIGEgZmV3IGluc3RhbmNlcywgdGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0
aGUgc2V0dXAgbG9naWMgYXJvdW5kIHNvbWV3aGF0IHNvIHRoYXQgdGhlIGxheWVycyBiZWluZyBt
YW5pcHVsYXRlZAorICAgICAgICB3ZXJlIGluIGEgdHJlZSB0aGF0IGluaXRpYWxpemVkIHdpdGhv
dXQgZXJyb3JzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL3Bs
YXRmb3JtL1dlYkNvbnRlbnRMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJF
eHRlcm5hbFRleHR1cmVMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXll
ci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oOgorICAgICAg
ICAqIHNyYy9XZWJDb250ZW50TGF5ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50
TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpXZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxh
eWVyOjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllckltcGwu
aDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcDoKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YW5p
bWF0ZUFuZExheW91dCk6CisgICAgICAgICogdGVzdHMvQ29tcG9zaXRvck1vY2tHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbXBvc2l0b3JNb2Nr
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0NvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAg
IChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JN
b2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkNvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoK
KyAgICAgICAgKiB0ZXN0cy9Nb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdl
YktpdDo6TW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6Cisg
ICAgICAgICogdGVzdHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisgICAgICAgICh0
ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6Cisg
ICAgICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YXBwbHlTY3JvbGxB
bmRTY2FsZSk6CisgICAgICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6
Y3JlYXRlQ29udGV4dDNEKToKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRyZWVWaWV3
Q2xpZW50OjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAodGVzdGluZzo6V2Vi
TGF5ZXJUZXN0OjpTZXRVcCk6CisgICAgICAgICh0ZXN0aW5nOjpXZWJMYXllclRlc3Q6OlRlYXJE
b3duKToKKyAgICAgICAgKHRlc3Rpbmc6OlRFU1RfRik6CisKIDIwMTEtMTItMDkgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbW92
ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDEzYTM5Y2RhZjY3YjA4ODdkYjliYjM2ODdiZTFiNGEw
YWRjMjA4MjAuLmZjOWM4NmYwNjdlZGMxOTk1MGFmMzMzM2FlODM3YjVhZTk5YzhjZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNjgxLDEyICs2ODEsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNv
bnRleHQsIGNsaXApOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5U3lu
Y1JlcXVpcmVkKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKaW5kZXggZGYyNjk4YWJkOTFlMzc2NTZiMTI0OGM3YjhiNDgyY2MxNDg3NzRm
Yi4uZTk5ODhkN2QyNjdkNGRlNmVhNTdlZTdlYjVkYzM5MTk5ZDY2OGE2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTk5LDcgKzk5LDYgQEAgcHVibGljOgogICAgIC8v
IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgQ0NMYXllckRlbGVnYXRlIGlu
dGVyZmFjZS4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYg
Y2xpcCk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOwogCiAgICAgLy8g
RXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAppbmRleCBiNDVlMTI1OTU3M2Y5ZWQzNTcxYjYxYTAxZTgzMGM1ZWRlNDRmMjhiLi41YzI4OGQ3
MTNiOTlmNWFmZDM2NDEwNzUzZmQ2ZTI4YjEwZjZjNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHND
b21taXQoKQogewotICAgIGlmIChtX2RlbGVnYXRlKQotICAgICAgICBtX2RlbGVnYXRlLT5ub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0UGFyZW50KExheWVyQ2hyb21pdW0qIGxheWVyKQpAQCAtMTQ5LDYgKzE0OSw3IEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6aW5zZXJ0Q2hpbGQoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCwgc2l6ZV90IGluZGV4KQogICAgIGluZGV4ID0gbWluKGluZGV4LCBtX2NoaWxkcmVuLnNpemUo
KSk7CiAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBjaGlsZC0+c2V0UGFyZW50
KHRoaXMpOworICAgIGNoaWxkLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQo
KSk7CiAgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGNoaWxkKTsKICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDljN2E0ZjhmNDc5Mjg5ZGEwNTkxMzdi
NzliYjE1ZDZiZDE3ZDUxZWUuLjg1OTVmNWQ2NGMyOWJhOTI4MjcwZmMxZTRkNmM3YTQ2ZWVkZGU4
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTYxLDcgKzYxLDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfkNDTGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoKSA9IDA7CiB9OwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVk
IGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1YjkzNGExNjZl
ZmE1NWYzNzRmLi5iZDk3ZjM3NDVjOTNiZjNiOWFmNTFmYjA3YWZiOTAyNWUyMWNkNmE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTEwMyw3ICsxMDMsOCBAQCBDQ0xheWVy
VHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01h
aW5UaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJU
cmVlSG9zdCIsIHRoaXMsIDApOwotICAgIG1fcHJveHktPnN0b3AoKTsKKyAgICBpZiAobV9wcm94
eSkKKyAgICAgICAgbV9wcm94eS0+c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsKICAgICBj
bGVhclBlbmRpbmdVcGRhdGUoKTsKICAgICBudW1MYXllclRyZWVJbnN0YW5jZXMtLTsKQEAgLTIz
NCw2ICsyMzUsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICAg
ICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIp
Cit7CisgICAgbV9yb290TGF5ZXIgPSByb290TGF5ZXI7CisgICAgaWYgKCFtX3Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKICAgICBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCktPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6Omhp
Z2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApp
bmRleCBhYWFkMTQyMjlkMzUxMGVlMTkxMDIxYzc2NGM3NWI0ZmI0NzNhYjU1Li4wOTU5MmVmNzMz
NjAyYmE1OWIzYzg4OTRiOWFlNDBlNjQwNGIwMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaApAQCAtMTYxLDEyICsxNjEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgbG9zZUNvbXBvc2l0
b3JDb250ZXh0KGludCBudW1UaW1lcyk7CiAKICAgICB2b2lkIHNldE5lZWRzQW5pbWF0ZSgpOwot
ICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKKyAgICAvLyB2aXJ0dWFsIGZvciB0ZXN0aW5nCisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdm9pZCBzZXROZWVkc1JlZHJh
dygpOwogCiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KICAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQotICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKSB7IG1fcm9vdExheWVyID0gcm9vdExheWVy
OyB9CisgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7CiAK
ICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGlu
Z3M7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oCmluZGV4IDVjOGNmYjcz
MTMzY2JkNTBhZTliMWQ1ZTkxMWJiMGY0MDQ3MzU0MmQuLmVjM2YxYTg3YzVkMGIzOTRkODQ4ZWY4
NDVmZWViOTY1NDVkMjg1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgK
QEAgLTcxLDEwICs3MSwxNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBydW5UYXNrSWZOb3RTaHV0
ZG93bihQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBwb3BUYXNrKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RhcmdldFRocmVhZC0+dGhyZWFkSUQoKSk7CiAg
ICAgICAgIE93blB0cjxDQ1RocmVhZDo6VGFzaz4gdGFzayA9IHBvcFRhc2s7Ci0gICAgICAgIGlm
ICghbV9zaHV0ZG93bikKLSAgICAgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgICAg
IC8vIElmIG91ciBzaHV0ZG93biBmbGFnIGlzIHNldCwgaXQncyBwb3NzaWJsZSB0aGF0IG1fdGFy
Z2V0VGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIHNvIGRvbid0CisgICAgICAgIC8v
IHRvdWNoIGl0LgorICAgICAgICBpZiAobV9zaHV0ZG93bikgeworICAgICAgICAgICAgZGVyZWYo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdGFyZ2V0VGhyZWFkLT50aHJlYWRJRCgpKTsKKyAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soKTsKICAgICAgICAgZGVyZWYoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCmluZGV4IGRiOTk4OTdjMjUzN2RmMWM5MTBlMDFhN2NmM2RkNmM4M2FkZWZk
NmYuLmNkZDAxODE0N2M1MjI2NDBkZmJiODNiM2FjODQ2MzFkNzk4OGI0MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjUsMTAgKzY1LDEyIEBACiAgICAgICAgICAgICAndGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJU
cmVlVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0
LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0ND
U2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3Qu
Y3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Db21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNE
LmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvRmxvYXRRdWFkVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFt
ZVRlc3RIZWxwZXJzLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaAppbmRleCA1ZDAwZGM5M2UzNzEwYWM5ZGQz
M2U3OGJhNWUwMjg2YWI5ZDIwYzM0Li4yMDhlYjA1NmE5OTgxM2JhNmIyMGM0OTEzYTA4NWY3MjFj
NjViZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaApAQCAtMzcsNiArMzcsOCBAQCBjbGFzcyBXZWJMYXll
ckNsaWVudDsKIAogY2xhc3MgV2ViQ29udGVudExheWVyIDogcHVibGljIFdlYkxheWVyIHsKIHB1
YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdl
YkNvbnRlbnRMYXllckNsaWVudCopOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhcyBzb29u
IGFzIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KICAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExh
eWVyQ2xpZW50Kik7CiAKICAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkV4dGVybmFsVGV4dHVyZUxh
eWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5oCmluZGV4IDYzZDU0ODVmMmVlMWJiMzhjMDNlMThkNjYzNWQxMjBkMDA2
MWQ5ODEuLjU1NzQ1YWM5NmYxNGY5MGMwZGMzMmFmMjgwMzg4MDI2OWEzODQ1ZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBXZWJMYXll
ckNsaWVudDsKIC8vIHRoZSBXZWJMYXllclRyZWVWaWV3IGlzIGRlc3Ryb3llZC4KIGNsYXNzIFdl
YkV4dGVybmFsVGV4dHVyZUxheWVyIDogcHVibGljIFdlYkxheWVyIHsKIHB1YmxpYzoKKyAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJFeHRlcm5hbFRleHR1cmVMYXllciBjcmVhdGUoKTsKKyAg
ICAvLyBGSVhNRTogUmVtb3ZlIGFzIHNvb24gYXMgZG93bnN0cmVhbSBjbGllbnRzIGFyZSB1cGRh
dGVkLgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIGNy
ZWF0ZShXZWJMYXllckNsaWVudCopOwogCiAgICAgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXll
ci5oCmluZGV4IDU2NTY3MWMzYmM5MzAyZjcwYzQ5YTUyNTVjYTFlMDMzNGMyODE2ODMuLjAzM2Jl
ZTQ1YWVjMTRlYWU0ZTVmMDk5NjI2ZmZjNGYwNzI1NmFlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXIuaApAQCAtNDAsNiArNDAsOCBA
QCBzdHJ1Y3QgV2ViU2l6ZTsKIAogY2xhc3MgV2ViTGF5ZXIgewogcHVibGljOgorICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIFdlYkxheWVyIGNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBjb25zdHJ1Y3RvciBvbmNlIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KICAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJMYXllciBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsK
IAogICAgIFdlYkxheWVyKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaAppbmRleCA5ZjE0OGJhMmVlMTM3ODQy
YjExMmRjMzI5MmM5ODA0OWU1NWNlOTZlLi5kMmE2OWZmZjA1MWU2Y2M3MTg3ODI4ZjA2YzdlZWVh
MTkyMzlhMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgKQEAgLTMwLDE0ICszMCw4IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBXZWJMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgLy8gTm90aWZp
ZXMgdGhlIGNsaWVudCB0aGF0IHRoZSBsYXllciBoYXMgY2hhbmdlZCBpbiBhIHdheSB0aGF0IG5l
ZWRzIGEKLSAgICAvLyBjb21wb3NpdGluZyBwYXNzIHRvIHZpc3VhbGx5IHVwZGF0ZS4gVGhlIGNs
aWVudCBzaG91bGQgZXZlbnR1YWxseSBjYWxsCi0gICAgLy8gV2ViTGF5ZXJUcmVlVmlldzo6Y29t
cG9zaXRlLgotICAgIC8vIE5vdGU6IHNvbWUgY29tcGxleCBvcGVyYXRpb25zIChlLmcgbGF5ZXIg
cmVwYXJlbnRpbmcpIGNhbiBjYXVzZSB0aGlzIHRvCi0gICAgLy8gYmUgY2FsbGVkIHdoaWxlIHRo
ZSBsYXllciB0cmVlIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gdG8gZ2V0Ci0gICAg
Ly8gY29ycmVjdCByZXN1bHRzLCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUgc2hvdWxkIGJl
IGNhbGxlZCBhZnRlciB0aGUKLSAgICAvLyBvcGVyYXRpb24gaGFzIGZpbmlzaGVkIChlLmcuIGJ5
IHBvc3RpbmcgYSB0YXNrKS4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZHNDb21wb3NpdGUo
KSA9IDA7CisgICAgLy8gVGhpcyBlbXB0eSBpbnRlcmZhY2UgZXhpc3RzIG9ubHkgZm9yIGxlZ2Fj
eSByZWFzb25zIC0gaXQgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24KKyAgICAvLyBhcyBkb3duc3Ry
ZWFtIGNvbnN1bWVycyBzdG9wIGRlcGVuZGluZyBvbiB0aGlzIGludGVyZmFjZSBleGlzdGluZy4K
IAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfldlYkxheWVyQ2xpZW50KCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCBjOTg5NGUy
MDNjNTdhYjYxYzI3ZjJkMjNkY2ExNzk1ZjQ0OTdiZDYzLi5mYWE2YTA5Njg3YWRiODFhMDQ5OTk0
YTQ1MDhhOWI0YjY1ZGI2MTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllci5jcHAKQEAgLTMxLDkgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1XZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGll
bnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQorV2ViQ29u
dGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkNvbnRlbnRMYXllckNsaWVudCog
Y29udGVudENsaWVudCkKIHsKLSAgICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNvbnRlbnRM
YXllckltcGw6OmNyZWF0ZShjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKKyAgICByZXR1cm4gV2Vi
Q29udGVudExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShjb250ZW50Q2xpZW50KSk7
Cit9CisKK1dlYkNvbnRlbnRMYXllciBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZShXZWJMYXllckNs
aWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKK3sKKyAgICByZXR1
cm4gV2ViQ29udGVudExheWVyOjpjcmVhdGUoY29udGVudENsaWVudCk7CiB9CiAKIHZvaWQgV2Vi
Q29udGVudExheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4
IGNkODg5MDBiZGEzNGE1M2JlMWU2ZmVmZjk4ZDU5M2NmY2FlNjgxMTAuLjc5ZTIwZmVmNzk1MmVl
YzgxNzBlM2RlZjJlY2YxZTMxMjFmZTI5NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgogCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29u
dGVudExheWVyQ2xpZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCkBAIC0zOSwxNCArMzgsMTMgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzUmVm
UHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShXZWJM
YXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQp
CitQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXllckltcGw6OmNy
ZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGNsaWVudCwgY29udGVudENsaWVudCkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGVudExheWVySW1wbChjb250ZW50Q2xp
ZW50KSk7CiB9CiAKLVdlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRlbnRMYXllckltcGwoV2Vi
TGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50
KQorV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbChXZWJDb250ZW50TGF5
ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCiAgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bSh0aGlz
KQotICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9jb250ZW50Q2xpZW50KGNvbnRlbnRD
bGllbnQpCiAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQogewpAQCAtODAsMTAgKzc4LDQgQEAg
dm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Z2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBtX2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVu
dHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIAotdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBs
Ojpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9j
bGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5o
CmluZGV4IDEwOGRmNWUzYTI1NGVkOTU2OTQ1OTg2ZmQ2NTQxYTg0YTk4ODY1ZmYuLmIzMGM4YWU1
NjJkZDQzNjljMzkxYjgxZmI0ODY3NDc4NDhkNjNkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTMwLDIzICszMCwyMCBAQAog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3Mg
V2ViTGF5ZXJDbGllbnQ7CiBjbGFzcyBXZWJDb250ZW50TGF5ZXJDbGllbnQ7CiAKIGNsYXNzIFdl
YkNvbnRlbnRMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW0s
IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0ZShXZWJMYXllckNsaWVudCosIFdl
YkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRlKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29u
dGVudENsaWVudCk7CiAKICAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKICAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJDb250
ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250
ZW50Q2xpZW50KTsKKyAgICBleHBsaWNpdCBXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkNvbnRlbnRM
YXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVy
SW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAotICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBib29sIG1f
ZHJhd3NDb250ZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcAppbmRleCA1YTA2YzE3NmIyNTI3ZTVjZDZkZmQy
MTgxMzIzODFiNTA2MDdmNTE1Li5iM2EzMzJiMmEyMTQyZjY3MzViY2U4NDI4ZjA0MjlhNTY5ZWRj
NDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXIuY3BwCkBAIC0zMSw5ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1XZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3Jl
YXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCitXZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJF
eHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVhdGUoY2xpZW50KSk7
CisgICAgcmV0dXJuIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyKFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVySW1wbDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyOjpz
ZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAppbmRleCA0NDJlYWNk
N2RhNGUwYWViNTE3NGM0M2RmOTEwYzgwMDA4YjE4NzQ4Li4xYjFkYTEwM2M5ZmI2NzRjODBlODQ4
Y2E5NGYzMDdkYzZiZDgxMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKQEAgLTI2LDcgKzI2LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJFeHRlcm5hbFRleHR1cmVMYXll
ckltcGwuaCIKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCiAK
QEAgLTM0LDE0ICszMywxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsPiBXZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0ZShXZWJMYXllckNsaWVudCogY2xpZW50KQor
UGFzc1JlZlB0cjxXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw+IFdlYkV4dGVybmFsVGV4dHVy
ZUxheWVySW1wbDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkV4dGVy
bmFsVGV4dHVyZUxheWVySW1wbChjbGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkV4dGVybmFsVGV4dHVyZUxheWVySW1wbCgpKTsKIH0KIAotV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsOjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoV2ViTGF5ZXJDbGllbnQqIGNsaWVu
dCkKK1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsKCkKICAgICA6IFBsdWdpbkxheWVyQ2hyb21pdW0odGhpcykKLSAgICAsIG1fY2xpZW50KGNs
aWVudCkKIHsKICAgICBzZXRGbGlwcGVkKGZhbHNlKTsKIH0KQEAgLTYwLDEwICs1OCw0IEBAIHZv
aWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKLXZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRl
cm5hbFRleHR1cmVMYXllckltcGwuaAppbmRleCA0ZjlhOTg3MjdjOTdkOWI1Yzk1ODc0NGMyNjli
ODg0ZDE4NTNlNzZmLi4xYWQyYjgxOTk4ZjMwZGY2YzllY2EwOTNhMGMyZmY1YWJlZTkxY2VhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllckltcGwuaApAQCAtMzAsMjAgKzMwLDE2IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJMYXllckNsaWVudDsKIAog
Y2xhc3MgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OlBsdWdp
bkxheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbD4gY3Jl
YXRlKFdlYkxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJJbXBsPiBjcmVhdGUoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbChXZWJMYXllckNsaWVudCopOworICAgIFdlYkV4dGVybmFsVGV4dHVy
ZUxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgfldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbCgp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7
Ci0KLSAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcAppbmRleCAxNWUwNDBk
OGE5NWM5MzI1MjhiYmFmYzM1MTk4ODA4OTVjOTJjYjk1Li5mOTQ3OWM5ODRhOWY5YmEwZDZiNjIz
MzRlMDk0NzhhMTM2OTczMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIu
Y3BwCkBAIC03NCw5ICs3NCwxNCBAQCBTa01hdHJpeDQ0IHNrTWF0cml4NDRGcm9tVHJhbnNmb3Jt
YXRpb25NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeAogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckNsaWVudCog
Y2xpZW50KQorV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckNsaWVudCopCiB7Ci0g
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlKGNsaWVudCkpOworICAgIHJl
dHVybiBXZWJMYXllcjo6Y3JlYXRlKCk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBXZWJMYXllcihXZWJMYXllckltcGw6OmNyZWF0ZSgpKTsKIH0KIAog
dm9pZCBXZWJMYXllcjo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVySW1wbC5jcHAKaW5kZXggZGRjMDYxMTIwOTQxNmY5NTA0NTExNmMwYWZkNzI5NzdmOGY4YTZl
NS4uYTRhMmYwOWYwOTc5OTc5NDEzNTE3YTRmYzIyZGQ4MWUzY2JkOTMzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC0yNiwxOCArMjYsMTcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKIAotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxXZWJMYXllckltcGw+IFdlYkxh
eWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCitQYXNzUmVmUHRyPFdlYkxh
eWVySW1wbD4gV2ViTGF5ZXJJbXBsOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViTGF5ZXJJbXBsKGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViTGF5
ZXJJbXBsKCkpOwogfQogCi1XZWJMYXllckltcGw6OldlYkxheWVySW1wbChXZWJMYXllckNsaWVu
dCogY2xpZW50KSA6IExheWVyQ2hyb21pdW0odGhpcyksIG1fY2xpZW50KGNsaWVudCkKK1dlYkxh
eWVySW1wbDo6V2ViTGF5ZXJJbXBsKCkKKyAgICA6IExheWVyQ2hyb21pdW0odGhpcykKIHsKIH0K
IApAQCAtNTUsMTAgKzU0LDQgQEAgdm9pZCBXZWJMYXllckltcGw6OnBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsKIH0KIAotdm9pZCBXZWJMYXll
ckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmluZGV4IDU1
OGQ0MWI1Y2RlMWE4NDg3MDJjYWQwZjM3NTEyYzg5MTE1NTExMTYuLjAyOTg5NTlhNWQ1NjdiNjNm
MTA1ZGY4N2Q0ZTg4MzhjZTZkMDNmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVySW1wbC5oCkBAIC0zMCwyMCArMzAsMTYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkxheWVyQ2xpZW50OwogCiBjbGFz
cyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdl
YkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJMYXllckltcGw+IGNyZWF0ZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViTGF5ZXJJ
bXBsKFdlYkxheWVyQ2xpZW50Kik7CisgICAgV2ViTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCB+
V2ViTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlT
eW5jUmVxdWlyZWQoKTsKLQotICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCmluZGV4IDU5OWFhYjlkZGU3ZWMyZWQ5MGRjZDczYzYy
ZGIyN2JlODU3MjYzMDkuLmVkYzE2ZWM3YjI3MjNmYjA4ZWYzYzJkYjYxYTlmOTMxODM1MGM0MjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5jcHAKQEAgLTQzLDE3ICs0MywxNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUGFzc1Jl
ZlB0cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZShX
ZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25z
dCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgUmVmUHRyPFdl
YkxheWVyVHJlZVZpZXdJbXBsPiBob3N0ID0gYWRvcHRSZWYobmV3IFdlYkxheWVyVHJlZVZpZXdJ
bXBsKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpKTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlVmll
d0ltcGw+IGhvc3QgPSBhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0ltcGwoY2xpZW50LCBz
ZXR0aW5ncykpOwogICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQogICAgICAgICByZXR1cm4g
MDsKKyAgICBob3N0LT5zZXRSb290TGF5ZXIocm9vdCk7CiAgICAgcmV0dXJuIGhvc3Q7CiB9CiAK
LVdlYkxheWVyVHJlZVZpZXdJbXBsOjpXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRy
ZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpIAorV2ViTGF5ZXJUcmVlVmlld0ltcGw6OldlYkxh
eWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2Vi
TGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKSAKICAgICA6IENDTGF5ZXJUcmVlSG9z
dCh0aGlzLCBzZXR0aW5ncykKICAgICAsIG1fY2xpZW50KGNsaWVudCkKIHsKLSAgICBzZXRSb290
TGF5ZXIocm9vdCk7CiB9CiAKIFdlYkxheWVyVHJlZVZpZXdJbXBsOjp+V2ViTGF5ZXJUcmVlVmll
d0ltcGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZp
ZXdJbXBsLmgKaW5kZXggMmUxNDVmYTcxZWY5Yzk4MDhhNzBlOTkyMTkyNWU2MTlkYjRkYWMwMi4u
MzgxMWUwOTNlNWYzYTFhNWM3Y2MxMzMzNzhmZjAwODY4YzZkYzU0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCkBAIC0zOSw3ICsz
OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1w
bD4gY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwg
Y29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJM
YXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXIm
IHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJik7CisgICAgV2ViTGF5ZXJU
cmVlVmlld0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyVHJlZVZp
ZXc6OlNldHRpbmdzJik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwog
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMzZmZDdkYmQw
N2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2EzMy4uOWZkYzVlZjRlMjFjYjM5ZmQxMmZlYTk2
MjIwYjg3N2JkMDA4OThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNvbXBvc2l0b3JNb2NrR3JhcGhp
Y3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFuYWdlci5oIgpAQCAtMTAzLDcgKzEwMyw5IEBAIGNsYXNzIE1vY2tMYXllclRyZWVIb3N0
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TW9ja0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExh
eWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QodGVzdEhvb2tzLCBjbGllbnQsIHJvb3RMYXll
ciwgc2V0dGluZ3MpKTsKKyAgICAgICAgUmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBob3N0ID0g
YWRvcHRSZWYobmV3IE1vY2tMYXllclRyZWVIb3N0KHRlc3RIb29rcywgY2xpZW50LCBzZXR0aW5n
cykpOworICAgICAgICBob3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgcmV0
dXJuIGhvc3QucmVsZWFzZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiBjbGllbnQpCkBAIC0xMTIsMTEgKzExNCwxMCBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIE1vY2tMYXllclRyZWVIb3N0KFRlc3RIb29rcyogdGVzdEhvb2tzLCBD
Q0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBy
b290TGF5ZXIsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgIE1vY2tMYXllclRyZWVI
b3N0KFRlc3RIb29rcyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwg
Y29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNs
aWVudCwgc2V0dGluZ3MpCiAgICAgICAgICwgbV90ZXN0SG9va3ModGVzdEhvb2tzKQogICAgIHsK
LSAgICAgICAgc2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGluaXRpYWxpemUoKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAgICAgfQpAQCAt
MTI0LDI0ICsxMjUsNiBAQCBwcml2YXRlOgogICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7CiB9
OwogCi0vLyBUZXN0IHN0dWIgZm9yIFdlYkdyYXBoaWNzQ29udGV4dDNELiBSZXR1cm5zIGNhbm5l
ZCB2YWx1ZXMgbmVlZGVkIGZvciBjb21wb3NpdG9yIGluaXRpYWxpemF0aW9uLgotY2xhc3MgQ29t
cG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3ND
b250ZXh0M0QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2
aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4gMTsgfQotICAg
IHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2
YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJH
TElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0KLXByaXZh
dGU6Ci0gICAgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpIHsgfQotfTsKLQog
Ly8gSW1wbGVtZW50YXRpb24gb2YgQ0NMYXllclRyZWVIb3N0IGNhbGxiYWNrIGludGVyZmFjZS4K
IGNsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENs
aWVudCB7CiBwdWJsaWM6CkBAIC0xNjIsMTAgKzE0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRl
eHQzRCgpCiAgICAgewotICAgICAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1vY2sg
PSBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoKTsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQobW9jay5yZWxlYXNlKCksIGF0dHJzLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGNv
bnRleHQ7CisgICAgICAgIHJldHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKQpAQCAtNzUyLDcgKzczMiw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBpbXBsKQorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSkKICAgICB7CiAgICAgICAgIExheWVyQ2hyb21pdW0qIHJvb3QgPSBtX2xheWVyVHJl
ZUhvc3QtPnJvb3RMYXllcigpOwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVO
dW1iZXIoKSkKQEAgLTkzNyw3ICs5MTcsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBw
cmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5
bmNSZXF1aXJlZCgpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1f
dGVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRv
ck1vY2tHcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
b21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkzYTEyNjcyYjk2
NDIwZDQ2MjA1MmRhNTI1YzU5NDQ2ZDRmNWM5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRleHQzRC5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRvck1vY2tHcmFw
aGljc0NvbnRleHQzRF9oCisjZGVmaW5lIENvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0Rf
aAorCisjaW5jbHVkZSAiQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCit7CisgICAgV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyczsKKyAgICB3ZWJBdHRycy5hbHBoYSA9
IGF0dHJzLmFscGhhOworCisgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+
IHdlYkNvbnRleHQgPSBXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSh3ZWJBdHRycyk7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoCisgICAgICAgIHdlYkNvbnRleHQu
cmVsZWFzZSgpLCBhdHRycywgMCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93LAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZv
clVzZU9uQW5vdGhlclRocmVhZCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlOGMwMmFiNmJkM2M3OTQwN2U4YzY5ZjljZWMx
YTNiMjYwZTVkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0RfaAorI2RlZmluZSBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEX2gKKworI2lu
Y2x1ZGUgIk1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworLy8gVGVzdCBzdHViIGZvciBXZWJHcmFwaGljc0NvbnRleHQzRC4gUmV0dXJucyBjYW5uZWQg
dmFsdWVzIG5lZWRlZCBmb3IgY29tcG9zaXRvciBpbml0aWFsaXphdGlvbi4KK2NsYXNzIENvbXBv
c2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yTW9ja1dl
YkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQz
RChhdHRycykpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7
IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVNoYWRlcihXR0MzRGVudW0p
IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCwgV0dD
M0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZh
bHVlID0gMTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycykKKyAgICB7CisgICAgICAgIG1fYXR0cnMg
PSBhdHRyczsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyODY2NWFhNzc2YmNh
ZTAxY2YwYjg4NWZlZDVjNWE1YzhlZDMxOGQwLi5hMjU3MjE3YzM0YjJlYWEyNzlhNTIwYmZkOWY3
YTZiZmRhY2YzNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYsOTQgKzI2LDg1IEBACiAKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRl
ICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1
bS5oIgotI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgorI2luY2x1ZGUgIldl
YkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIDo6dGVzdGluZzo6TW9j
azsKIHVzaW5nIDo6dGVzdGluZzo6XzsKIHVzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKIHVzaW5n
IDo6dGVzdGluZzo6QW55TnVtYmVyOwogCi0jZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihkZWxlZ2F0ZSwgbnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMsIGNv
ZGVUb1Rlc3QpIFwKLSAgICBFWFBFQ1RfQ0FMTCgoZGVsZWdhdGUpLCBub3RpZnlTeW5jUmVxdWly
ZWQoKSkuVGltZXMoKG51bVRpbWVzRXhwZWN0ZWROb3RpZnlTeW5jKSk7IFwKLSAgICBjb2RlVG9U
ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmKGRlbGVnYXRlKSkK
KyNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IobnVt
VGltZXNFeHBlY3RlZFNldE5lZWRzQ29tbWl0LCBjb2RlVG9UZXN0KSBkbyB7IFwKKyAgICAgICAg
RVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoKG51
bVRpbWVzRXhwZWN0ZWRTZXROZWVkc0NvbW1pdCkpOyAgICAgIFwKKyAgICAgICAgY29kZVRvVGVz
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMobV9sYXllclRyZWVIb3N0LmdldCgpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorICAgCiAKIG5hbWVzcGFjZSB7
CiAKLWNsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7Citj
bGFzcyBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENs
aWVudCB7CiBwdWJsaWM6Ci0gICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVudCwgYm9v
bCgpKTsKLSAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7Ci0gICAg
TU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYpKTsKLSAgICBNT0NLX01FVEhPRDAobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lkKCkp
OworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkgeyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChi
b29sIHN1Y2Nlc3MpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQorCisg
ICAgLy8gVXNlZCBvbmx5IGluIHRoZSBzaW5nbGUtdGhyZWFkZWQgcGF0aC4KKyAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIH07CiAKLWNsYXNzIE1vY2tMYXllclBhaW50
ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0K
LX07Ci0KLWNsYXNzIE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhvc3QgOiBwdWJsaWMgTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0IHsKK2NsYXNzIE1vY2tDQ0xheWVyVHJlZUhvc3QgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0PiBjcmVhdGUoKQorICAgIE1vY2tDQ0xheWVyVHJlZUhvc3Qo
KQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdCgmbV9mYWtlQ2xpZW50LCBDQ1NldHRpbmdzKCkp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QpOwogICAgIH0KIAotICAgIE1PQ0tfTUVUSE9EMShub3RpZnlTeW5jUmVxdWlyZWQs
IHZvaWQoY29uc3QgR3JhcGhpY3NMYXllciopKTsKKyAgICBNT0NLX01FVEhPRDAoc2V0TmVlZHND
b21taXQsIHZvaWQoKSk7CiAKIHByaXZhdGU6Ci0gICAgTW9ja05vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdCgpCi0gICAgICAgIDogTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KGFkb3B0UHRyKG5ldyBN
b2NrTGF5ZXJQYWludGVyQ2hyb21pdW0oKSkpCi0gICAgewotICAgICAgICBtX3Njcm9sbExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOwotICAgICAgICBzZXRTY3JvbGxMYXllcihtX3Nj
cm9sbExheWVyLmdldCgpKTsKLSAgICB9Ci0gICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Ny
b2xsTGF5ZXI7CisgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBtX2Zha2VDbGllbnQ7CiB9
OwogCi1jbGFzcyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IgOiBwdWJs
aWMgTGF5ZXJDaHJvbWl1bSB7CitjbGFzcyBNb2NrTGF5ZXJQYWludGVyQ2hyb21pdW0gOiBwdWJs
aWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVibGljOgotICAgIGV4cGxpY2l0IExheWVyQ2hy
b21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcihDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRl
KQotICAgICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgfkxheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigpCi0gICAg
ewotICAgICAgICBzX251bUluc3RhbmNlc0Rlc3Ryb3llZCsrOwotICAgIH0KLQotICAgIHN0YXRp
YyBpbnQgZ2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkgeyByZXR1cm4gc19udW1JbnN0YW5jZXNE
ZXN0cm95ZWQ7IH0KLSAgICBzdGF0aWMgdm9pZCByZXNldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgp
IHsgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQgPSAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IGludCBzX251bUluc3RhbmNlc0Rlc3Ryb3llZDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQogfTsKIAotaW50IExheWVyQ2hyb21p
dW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6c19udW1JbnN0YW5jZXNEZXN0cm95ZWQgPSAw
OwogCiBjbGFzcyBMYXllckNocm9taXVtVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQogICAgIHsKLSAgICAgICAgLy8gbV9z
aWxlbnREZWxlZ2F0ZSBpcyBpbml0aWFsaXplZCB0byBiZSBqdXN0IGEgc3R1YiBhbmQgd2lsbAot
ICAgICAgICAvLyBub3QgcHJpbnQgYW55IHdhcm5pbmdzLiBJdCBpcyB1c2VkIHdoZW4gd2UgYXJl
IG5vdCB3b3JyaWVkCi0gICAgICAgIC8vIGFib3V0IHRlc3RpbmcgaG93IHRoZSBkZWxlZ2F0ZSBp
cyBjYWxsZWQuCi0gICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIGRyYXdzQ29u
dGVudCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50
RGVsZWdhdGUsIHByZXNlcnZlczNEKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICAgICAgRVhQ
RUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgcGFpbnRDb250ZW50cyhfLCBfKSkuVGltZXMoQW55
TnVtYmVyKCkpOwotICAgICAgICBFWFBFQ1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBub3RpZnlT
eW5jUmVxdWlyZWQoKSkuVGltZXMoQW55TnVtYmVyKCkpOwotCi0gICAgICAgIC8vIFN0YXRpYyB2
YXJpYWJsZXMgbmVlZCB0byBiZSByZXNldCBmb3IgZXZlcnkgbmV3IHRlc3QgY2FzZQotICAgICAg
ICBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OnJlc2V0TnVtSW5zdGFu
Y2VzRGVzdHJveWVkKCk7CisgICAgICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0aHJlYWRpbmcg
c3VwcG9ydC4KKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBhZG9wdFJlZihuZXcgTW9ja0NDTGF5ZXJUcmVlSG9z
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7
CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkp
LlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgbV9wYXJlbnQuY2xlYXIoKTsKKyAgICAgICAg
bV9jaGlsZDEuY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZDIuY2xlYXIoKTsKKyAgICAgICAgbV9j
aGlsZDMuY2xlYXIoKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMS5jbGVhcigpOworICAgICAgICBt
X2dyYW5kQ2hpbGQyLmNsZWFyKCk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDMuY2xlYXIoKTsKKwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LmNsZWFyKCk7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKICAgICB9CiAKICAgICB2b2lkIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCkgY29u
c3QKQEAgLTE0MSwxNjIgKzEzMiwxMTIgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjcmVhdGVT
aW1wbGVUZXN0VHJlZSgpCiAgICAgewotICAgICAgICBtX3BhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9wYXJlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fY2hpbGQxID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICAgICAgbV9jaGlsZDIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgICAgICBtX2NoaWxkMyA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fZ3Jh
bmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAg
ICAgICBtX2dyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVn
YXRlKTsKLSAgICAgICAgbV9ncmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9z
aWxlbnREZWxlZ2F0ZSk7Ci0KLSAgICAgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwg
bm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDMpOworICAgICAgICBtX3BhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZDEgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgICAgICBtX2NoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9n
cmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9ncmFuZENo
aWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMyA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKworICAgIAorICAgICAgICBFWFBFQ1RfQ0FMTCgq
bV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Cisg
ICAgICAgIG1fcGFyZW50LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7
CisKICAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hpbGQxKTsKICAgICAgICAgbV9wYXJl
bnQtPmFkZENoaWxkKG1fY2hpbGQyKTsKICAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hp
bGQzKTsKLSAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fcGFyZW50
RGVsZWdhdGUpOwogICAgICAgICBtX2NoaWxkMS0+YWRkQ2hpbGQobV9ncmFuZENoaWxkMSk7CiAg
ICAgICAgIG1fY2hpbGQxLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQyKTsKICAgICAgICAgbV9jaGls
ZDItPmFkZENoaWxkKG1fZ3JhbmRDaGlsZDMpOwogCisgICAgICAgIE1vY2s6OlZlcmlmeUFuZENs
ZWFyRXhwZWN0YXRpb25zKG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisKICAgICAgICAgdmVyaWZ5
VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKICAgICB9CiAKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBt
X3NpbGVudERlbGVnYXRlLCBtX3BhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxNb2NrQ0NMYXll
clRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
cGFyZW50LCBtX2NoaWxkMSwgbV9jaGlsZDIsIG1fY2hpbGQzLCBtX2dyYW5kQ2hpbGQxLCBtX2dy
YW5kQ2hpbGQyLCBtX2dyYW5kQ2hpbGQzOwogfTsKIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBiYXNpY0NyZWF0ZUFuZERlc3Ryb3kpCiB7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0Rl
bGVnYXRlOwotCi0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVk
IGp1c3QgYmVjYXVzZSB0aGUgbGF5ZXIgaXMgY3JlYXRlZCBvciBkZXN0cm95ZWQuCi0gICAgRVhQ
RUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7Ci0K
LSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yPiB0ZXN0
TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVj
dG9yKCZtb2NrRGVsZWdhdGUpKTsKLSAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOwot
Ci0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBhbHNvIG5vdCBiZSBjYWxsZWQgb24g
dGhlIGRlc3RydWN0b3Igd2hlbiB0aGUgbGF5ZXIgaGFzIG5vIGNoaWxkcmVuLgotICAgIC8vIHNv
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsYXllciBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBt
b2NrIGRlbGVnYXRlLgotICAgIEFTU0VSVF9FUSgwLCBMYXllckNocm9taXVtV2l0aEluc3RydW1l
bnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpKTsKLSAgICB0ZXN0TGF5
ZXIucmVsZWFzZSgpOwotICAgIEFTU0VSVF9FUSgxLCBMYXllckNocm9taXVtV2l0aEluc3RydW1l
bnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IEFTU0VSVF9UUlVFKHRlc3RMYXllcik7CisgICAgCisgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJU
cmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoMCk7CisgICAgdGVzdExheWVyLT5zZXRM
YXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiB9CiAKIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgYWRkQW5kUmVtb3ZlQ2hpbGQpCiB7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUg
cGFyZW50RGVsZWdhdGU7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgY2hpbGREZWxlZ2F0ZTsKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZw
YXJlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAogICAgIC8vIFVwb24g
Y3JlYXRpb24sIGxheWVycyBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4gb3IgcGFyZW50LgogICAg
IEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6
ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBhcmVudCgpKTsKIAotICAgIC8vIFBhcmVu
dCBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQgZXhhY3RseSBvbmNlIHdoZW4gYWRkaW5nIGNoaWxk
LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxl
Z2F0ZSwgMSwgcGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOworICAgIHBhcmVudC0+c2V0TGF5ZXJU
cmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOwog
CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZC5nZXQoKSwgcGFyZW50LT5jaGlsZHJlbigp
WzBdKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZC0+cGFyZW50KCkpOwogICAg
IEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkLT5yb290TGF5ZXIoKSk7CiAKLSAgICAvLyBy
ZW1vdmVGcm9tUGFyZW50IHNob3VsZCBjYXVzZSB0aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVp
cmVkIHRvIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuCi0gICAgLy8gVGhlIGNoaWxkRGVsZWdhdGUg
bm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCByZW1haW4gdW4tdXNlZC4KLSAgICBFWFBFQ1RfQ0FM
TChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7Ci0gICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBj
aGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigxLCBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpKTsKIH0KIAog
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlEZXN0cnVjdG9yU2VtYW50aWNzKQogewot
ICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwotICAgIE1vY2tMYXllckRlbGVn
YXRlIGNoaWxkRGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVu
dGVkRGVzdHJ1Y3Rvcj4gcGFyZW50ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3RvcigmcGFyZW50RGVsZWdhdGUpKTsKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworCisgICAgcGFyZW50LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5n
ZXQoKSk7CiAKICAgICAvLyBTZXQgdXAgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKLSAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7CiAgICAgRVhQRUNU
X1RSVUUoY2hpbGQtPnBhcmVudCgpKTsKIAotICAgIC8vIFdoZW4gYmVpbmcgZGVzdHJveWVkLCBu
b3RpZnlTeW5jUmVxdWlyZWQgaXMgY2FsbGVkIG9uY2UgZm9yIHRoZSBwYXJlbnQsIGJlY2F1c2Ug
aXQgaGFzIG9uZSBjaGlsZCwKKyAgICAvLyBXaGVuIGJlaW5nIGRlc3Ryb3llZCwgc2V0TmVlZHND
b21taXQgaXMgY2FsbGVkIG9uY2UgZm9yIHRoZSBwYXJlbnQsIGJlY2F1c2UgaXQgaGFzIG9uZSBj
aGlsZCwKICAgICAvLyBidXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHRoZSBjaGlsZCB3aGlj
aCBoYXMgbm8gY2hpbGRyZW4uCi0gICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlm
eVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKLSAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisgICAgRVhQRUNUX0NBTEwoKm1fbGF5
ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoMSk7CiAKLSAgICBBU1NFUlRfRVEo
MCwgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5j
ZXNEZXN0cm95ZWQoKSk7Ci0gICAgcGFyZW50LnJlbGVhc2UoKTsKLSAgICBBU1NFUlRfRVEoMSwg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNE
ZXN0cm95ZWQoKSk7CisgICAgcGFyZW50LmNsZWFyKCk7CiAKICAgICAvLyBDaGlsZCBzaG91bGQg
aGF2ZSBiZWVuIHVuLXBhcmVudGVkIGNvcnJlY3RseSwgYnV0IG5vdCB5ZXQgZGVzdHJveWVkIHNp
bmNlIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQuCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5w
YXJlbnQoKSk7CiB9CiAKLVRFU1RfRihMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5RGVzdHJ1Y3Rv
ckRvZXNOb3RMZWFrKQotewotICAgIC8vIEluIHRoaXMgdGVzdCB3ZSBleHBsaWNpdGx5IGluc3Rh
bnRpYXRlIGEgc3BlY2lhbCBzdWJjbGFzcyBvZgotICAgIC8vIExheWVyQ2hyb21pdW0gc28gd2Ug
Y2FuIHRyYWNrIHRoZSBudW1iZXIgb2YgZGVzdHJ1Y3RvcnMgY2FsbGVkLgotCi0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcj4gcGFyZW50LCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzLCBncmFuZENoaWxkMSwgZ3JhbmRDaGlsZDIsIGdyYW5kQ2hpbGQzOwot
ICAgIHBhcmVudCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERl
c3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKLSAgICBjaGlsZDEgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRl
KSk7Ci0gICAgY2hpbGQyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVu
dGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGNoaWxkMyA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVs
ZWdhdGUpKTsKLSAgICBncmFuZENoaWxkMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKLSAgICBncmFuZENo
aWxkMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0
b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKLSAgICBncmFuZENoaWxkMyA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUp
KTsKLQotICAgIC8vIHNldCB1cCBhIHNpbXBsZSB0cmVlLgotICAgIHBhcmVudC0+YWRkQ2hpbGQo
Y2hpbGQxKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMik7Ci0gICAgcGFyZW50LT5hZGRD
aGlsZChjaGlsZDMpOwotICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOwotICAgIGNo
aWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOwotICAgIGNoaWxkMi0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZDMpOwotCi0gICAgLy8gQ2xlYXIgYWxsIHRoZSBjaGlsZHJlbiBSZWZQdHJzIGhlcmUuIEJ1
dCBzaW5jZSB0aGV5IGFyZSBhdHRhY2hlZCB0byB0aGUgdHJlZSwgbm8gZGVzdHJ1Y3RvcnMgc2hv
dWxkIGJlIGNhbGxlZCB5ZXQuCi0gICAgY2hpbGQxLmNsZWFyKCk7Ci0gICAgY2hpbGQyLmNsZWFy
KCk7Ci0gICAgY2hpbGQzLmNsZWFyKCk7Ci0gICAgZ3JhbmRDaGlsZDEuY2xlYXIoKTsKLSAgICBn
cmFuZENoaWxkMi5jbGVhcigpOwotICAgIGdyYW5kQ2hpbGQzLmNsZWFyKCk7Ci0KLSAgICAvLyBy
ZWxlYXNpbmcgdGhlIHBhcmVudCBzaG91bGQgY2F1c2UgYWxsIGRlc3RydWN0b3JzIHRvIGJlIGlu
dm9rZWQuCi0gICAgQVNTRVJUX0VRKDAsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOwotICAgIHBhcmVudC5yZWxlYXNl
KCk7Ci0gICAgQVNTRVJUX0VRKDcsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1
Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOwotfQotCiBURVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIGluc2VydENoaWxkKQogewotICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERl
bGVnYXRlOwotICAgIE1vY2tMYXllckRlbGVnYXRlIGNoaWxkRGVsZWdhdGU7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnREZWxl
Z2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGlsZDIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPmNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKLSAgICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Cisg
ICAgcGFyZW50LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAKLSAg
ICAvLyBUaGUgY2hpbGQgZGVsZWdhdGUgbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUg
Y2FsbGVkIHdoZW4gaW5zZXJ0aW5nLgotICAgIEVYUEVDVF9DQUxMKGNoaWxkRGVsZWdhdGUsIG5v
dGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygwKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAKICAgICAvLyBDYXNlIDE6
IGluc2VydGluZyB0byBlbXB0eSBsaXN0LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGls
ZDMsIDApKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklP
UigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMywgMCkpOwogICAgIEFTU0VSVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBF
Q1RfRVEoY2hpbGQzLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOwogICAgIEVYUEVDVF9FUShwYXJl
bnQuZ2V0KCksIGNoaWxkMy0+cGFyZW50KCkpOwogCiAgICAgLy8gQ2FzZSAyOiBpbnNlcnRpbmcg
dG8gYmVnaW5uaW5nIG9mIGxpc3QKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAw
KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwg
cGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VR
KGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQzLCBw
YXJlbnQtPmNoaWxkcmVuKClbMV0pOwogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxk
MS0+cGFyZW50KCkpOwogCiAgICAgLy8gQ2FzZSAzOiBpbnNlcnRpbmcgdG8gbWlkZGxlIG9mIGxp
c3QKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVs
ZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5pbnNlcnRDaGls
ZChjaGlsZDIsIDEpKTsKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcGFy
ZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5j
aGlsZHJlbigpWzBdKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClb
MV0pOwpAQCAtMzA0LDcgKzI0NSw3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0
Q2hpbGQpCiAgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQyLT5wYXJlbnQoKSk7CiAK
ICAgICAvLyBDYXNlIDQ6IGluc2VydGluZyB0byBlbmQgb2YgbGlzdAotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5p
bnNlcnRDaGlsZChjaGlsZDQsIDMpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkNCwgMykpOwogCiAg
ICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNCksIHBhcmVudC0+Y2hpbGRyZW4oKS5z
aXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CkBA
IC0zMTMsMTUgKzI1NCwxNCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydENoaWxk
KQogICAgIEVYUEVDVF9FUShjaGlsZDQsIHBhcmVudC0+Y2hpbGRyZW4oKVszXSk7CiAgICAgRVhQ
RUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CiAKLSAgICAvLyBwYXJlbnQn
cyBkZXN0cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVz
IGl0cyBjaGlsZHJlbi4KLSAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKCptX2xheWVy
VHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydENoaWxkUGFzdEVuZE9mTGlzdCkKIHsKLSAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3Np
bGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBw
YXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKIApAQCAtMzQxLDY1ICsyODEsNDAgQEAgVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZFBhc3RFbmRPZkxpc3QpCiAKIFRFU1RfRihM
YXllckNocm9taXVtVGVzdCwgaW5zZXJ0U2FtZUNoaWxkVHdpY2UpCiB7Ci0gICAgTW9ja0xheWVy
RGVsZWdhdGUgcGFyZW50RGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworCisgICAgcGFyZW50
LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAKICAgICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAK
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdh
dGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7Ci0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmlu
c2VydENoaWxkKGNoaWxkMiwgMSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNf
Q09NTUlUX0JFSEFWSU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5p
bnNlcnRDaGlsZChjaGlsZDIsIDEpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQx
LCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOwogICAgIEVYUEVDVF9FUShjaGlsZDIsIHBhcmVudC0+
Y2hpbGRyZW4oKVsxXSk7CiAKICAgICAvLyBJbnNlcnRpbmcgdGhlIHNhbWUgY2hpbGQgYWdhaW4g
c2hvdWxkIGNhdXNlIHRoZSBjaGlsZCB0byBiZSByZW1vdmVkIGFuZCByZS1pbnNlcnRlZCBhdCB0
aGUgbmV3IGxvY2F0aW9uLgotICAgIC8vIFNvIHRoZSBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWly
ZWQgd291bGQgYmUgY2FsbGVkIG9uZSBvciBtb3JlIHRpbWVzLgotICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgcGFy
ZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDEpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VU
X05FRURTX0NPTU1JVF9CRUhBVklPUihBdExlYXN0KDEpLCBwYXJlbnQtPmluc2VydENoaWxkKGNo
aWxkMSwgMSkpOwogCiAgICAgLy8gY2hpbGQxIHNob3VsZCBub3cgYmUgYXQgdGhlIGVuZCBvZiB0
aGUgbGlzdC4KICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5j
aGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJl
bigpWzBdKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOwog
Ci0gICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWly
ZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGlsZHJlbgotICAgIEVYUEVDVF9DQUxMKHBhcmVu
dERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Ci19Ci0K
LVRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRUaGF0QWxyZWFkeUhhZFBhcmVu
dCkKLXsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBvbGRQYXJlbnREZWxlZ2F0ZTsKLSAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZvbGRQ
YXJlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsK
LQotICAgIC8vIHNldCB1cCBhbmQgc2FuaXR5LWNoZWNrIGluaXRpYWwgdGVzdCBjb25kaXRpb25z
Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG9sZFBhcmVudERl
bGVnYXRlLCAxLCBvbGRQYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7Ci0gICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMSksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwotICAg
IEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6
ZSgpKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGQsIG9sZFBhcmVudC0+Y2hpbGRyZW4oKVswXSk7Ci0g
ICAgRVhQRUNUX0VRKG9sZFBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKLQotICAgIC8v
IEluc2VydGluZyB0byBuZXcgcGFyZW50IGNhdXNlcyBvbGQgcGFyZW50J3Mgbm90aWZ5U3luY1Jl
cXVpcmVkIHRvIGJlIGNhbGxlZC4KLSAgICAvLyBOb3RlIHRoYXQgaXQgYWxzbyBjYXVzZXMgcGFy
ZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZCwgYnV0IHRoYXQgaXMgdGVzdGVk
IGVsc2V3aGVyZS4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
b2xkUGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQsIDApKTsKLQot
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBvbGRQYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNoaWxkLCBwYXJlbnQtPmNoaWxk
cmVuKClbMF0pOwotICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkLT5wYXJlbnQoKSk7
CisgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGlt
ZXMoQXRMZWFzdCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNo
aWxkV2l0aE5ld0NoaWxkKQogewogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxl
bnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKIAogICAgIEVYUEVDVF9GQUxTRShjaGlsZDQtPnBhcmVudCgpKTsK
IAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtX3BhcmVudERl
bGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hpbGQyLmdldCgp
LCBjaGlsZDQpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhB
VklPUihBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hpbGQyLmdldCgpLCBj
aGlsZDQpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCBtX3BhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShtX2NoaWxkMSwgbV9wYXJlbnQt
PmNoaWxkcmVuKClbMF0pOwpAQCAtNDA4LDkgKzMyMyw2IEBAIFRFU1RfRihMYXllckNocm9taXVt
VGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5ld0NoaWxkKQogICAgIEVYUEVDVF9FUShtX3BhcmVudC5n
ZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBh
cmVudCgpKTsKLQotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5
U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KLSAgICBFWFBFQ1Rf
Q0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFz
dCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5l
d0NoaWxkVGhhdEhhc090aGVyUGFyZW50KQpAQCAtNDE4LDE0ICszMzAsMTQgQEAgVEVTVF9GKExh
eWVyQ2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGRUaGF0SGFzT3RoZXJQYXJl
bnQpCiAgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKIAogICAgIC8vIGNyZWF0ZSBhbm90aGVy
IHNpbXBsZSB0cmVlIHdpdGggdGVzdExheWVyIGFuZCBjaGlsZDQuCi0gICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxl
Z2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRl
c3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIHRlc3RMYXllci0+
YWRkQ2hpbGQoY2hpbGQ0KTsKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwg
dGVzdExheWVyLT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkNCwgdGVz
dExheWVyLT5jaGlsZHJlbigpWzBdKTsKICAgICBFWFBFQ1RfRVEodGVzdExheWVyLmdldCgpLCBj
aGlsZDQtPnBhcmVudCgpKTsKIAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtX3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNo
aWxkKG1fY2hpbGQyLmdldCgpLCBjaGlsZDQpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VU
X05FRURTX0NPTU1JVF9CRUhBVklPUihBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxk
KG1fY2hpbGQyLmdldCgpLCBjaGlsZDQpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDMpLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUSht
X2NoaWxkMSwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMF0pOwpAQCAtNDM3LDQ3ICszNDksMzcgQEAg
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGRUaGF0SGFz
T3RoZXJQYXJlbnQpCiAgICAgLy8gYW5kIGNoaWxkMiBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgYSBw
YXJlbnQuCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHRlc3RMYXllci0+
Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMi0+cGFyZW50KCkp
OwotCi0gICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVx
dWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGlsZHJlbgotICAgIEVYUEVDVF9DQUxMKG1f
cGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsK
IH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoU2FtZUNoaWxk
KQogewogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CiAKLSAgICAvLyBub3RpZnlTeW5jUmVx
dWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYmVjYXVzZSBpdHMgdGhlIHNhbWUgY2hpbGQKLSAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0
ZSwgMCwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgbV9jaGlsZDIpKTsK
KyAgICAvLyBzZXROZWVkc0NvbW1pdCBzaG91bGQgbm90IGJlIGNhbGxlZCBiZWNhdXNlIGl0cyB0
aGUgc2FtZSBjaGlsZAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDAsIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIG1fY2hpbGQy
KSk7CiAKICAgICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwotCi0gICAgLy8gcGFyZW50
J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3Zl
cyBsZWZ0b3ZlciBjaGlsZHJlbgotICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5v
dGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKIH0KIAogVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCByZW1vdmVBbGxDaGlsZHJlbikKIHsKICAgICBjcmVhdGVTaW1wbGVUZXN0
VHJlZSgpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1f
cGFyZW50RGVsZWdhdGUsIEF0TGVhc3QoMSksIG1fcGFyZW50LT5yZW1vdmVBbGxDaGlsZHJlbigp
KTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigzLCBt
X3BhcmVudC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1Rf
RkFMU0UobV9jaGlsZDEtPnBhcmVudCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBh
cmVudCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDMtPnBhcmVudCgpKTsKLQotICAgIC8v
IG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiB0cnlpbmcgdG8gcmVt
b3ZlQWxsQ2hpbGRyZW4gd2hlbiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4uCi0gICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1fcGFy
ZW50LT5yZW1vdmVBbGxDaGlsZHJlbigpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBzZXRDaGlsZHJlbikKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBuZXdQYXJlbnREZWxlZ2F0
ZTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbmV3
UGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZuZXdQYXJlbnREZWxlZ2F0ZSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG9sZFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbmV3UGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOwogCi0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld0NoaWxkcmVu
OwogICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZDEpOwpAQCAtNDg4LDI0ICszOTAsMjYgQEAg
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBzZXRDaGlsZHJlbikKICAgICBBU1NFUlRfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigwKSwgbmV3UGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAg
RVhQRUNUX0VRKG9sZFBhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKGNoaWxkMi0+cGFyZW50KCkpOworIAorICAgIG5ld1BhcmVudC0+c2V0TGF5ZXJUcmVl
SG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG5ld1BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBuZXdQYXJl
bnQtPnNldENoaWxkcmVuKG5ld0NoaWxkcmVuKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgbmV3UGFyZW50LT5zZXRDaGlsZHJl
bihuZXdDaGlsZHJlbikpOwogCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiks
IG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShuZXdQYXJlbnQu
Z2V0KCksIGNoaWxkMS0+cGFyZW50KCkpOwogICAgIEVYUEVDVF9FUShuZXdQYXJlbnQuZ2V0KCks
IGNoaWxkMi0+cGFyZW50KCkpOwogCi0gICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGlu
dm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBpdHMgY2hpbGRyZW4uCi0gICAg
RVhQRUNUX0NBTEwobmV3UGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1l
cyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVk
c0NvbW1pdCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRpb25zKQogewogICAgIGNyZWF0ZVNp
bXBsZVRlc3RUcmVlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CiAKLSAgICAvLyBJbiB0aGlzIHRl
c3QgY2FzZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBob3cgdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNS
ZXF1aXJlZCBpcyBjYWxsZWQuCi0gICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90
aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAvLyBGb3IgdGhpcyB0
ZXN0IHdlIGRvbid0IGNhcmUgYWJvdXQgc2V0TmVlZHNDb21taXQgY2FsbHMuCisgICAgRVhQRUNU
X0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoQXRMZWFzdCgx
KSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOwogCiAgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9v
dExheWVyKCkpOwogICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDEtPnJvb3RM
YXllcigpKTsKQEAgLTU2MCwxMCArNDY0LDExIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiB7CiAgICAgLy8gVGhl
IHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNwbGF5IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKICAg
ICAvLyAgIDEuIHNldHMgbmVlZHNEaXNwbGF5IGZsYWcgYXBwcm9wcmlhdGVseS4KLSAgICAvLyAg
IDIuIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5U3luY1JlcXVpcmVkLCBleGFjdGx5IG9uY2UgZm9y
IGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXkuCisgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNh
bGxzIHNldE5lZWRzQ29tbWl0LCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVk
c0Rpc3BsYXkuCisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xh
eWVyVHJlZUhvc3QuZ2V0KCkpOwogCi0gICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRl
OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CiAgICAgSW50U2l6ZSB0ZXN0Qm91bmRzID0gSW50U2l6ZSg1
MDEsIDUwOCk7CiAKICAgICBGbG9hdFJlY3QgZGlydHkxID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4w
ZiwgMS4wZiwgMi4wZik7CkBAIC01NzQsNDggKzQ3OSw0MyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIC8v
IEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBub3QgYmUgZGlydHkuCiAgICAgRVhQ
RUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8gVGhpcyBpcyBq
dXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVkIGJlaGF2aW9yIGlzIHZl
cmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5k
cyh0ZXN0Qm91bmRzKSk7Ci0gICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZt
b2NrRGVsZWdhdGUpOworICAgIC8vIFRoaXMgaXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0IHNl
dE5lZWRzQ29tbWl0IGJlaGF2aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5n
cy4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0
ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgdGVzdExheWVyID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xh
eWVyVHJlZUhvc3QuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKIAogICAgIC8vIFRoZSByZWFsIHRlc3QgYmVnaW5zIGhlcmUuCiAKICAgICAvLyBD
YXNlIDE6IG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4g
ZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZW1w
dHlEaXJ0eVJlY3QpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9C
RUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZW1wdHlEaXJ0eVJlY3Qp
KTsKICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAv
LyBDYXNlIDI6IGJhc2ljLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0
eTEpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigx
LCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZGlydHkxKSk7CiAgICAgRVhQRUNUX1RS
VUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBDYXNlIDM6IGEgc2Vjb25k
IGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5Mikp
OworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRl
c3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eTIpKTsKICAgICBFWFBFQ1RfVFJVRSh0
ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1
bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMuCi0g
ICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5l
ZWRzRGlzcGxheVJlY3Qob3V0T2ZCb3VuZHNEaXJ0eVJlY3QpKTsKKyAgICB0ZXN0TGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgdGVzdExheWVyLT5zZXRMYXllclRyZWVIb3N0
KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVE
U19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwogICAgIEVY
UEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gQ2FzZSA1OiBz
ZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZy4KLSAgICB0ZXN0TGF5
ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7Ci0gICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0
TGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNl
dEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19D
T01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7CiAgICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7Ci0KLSAgICAvLyBDYXNlIDY6IHNl
dE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnIHNob3VsZCBub3QgY2F1
c2UKLSAgICAvLyBuZWVkc0Rpc3BsYXkgZmxhZyB0byBjaGFuZ2UgZm9yIExheWVyQ2hyb21pdW0g
d2l0aCBlbXB0eSBib3VuZHMuCi0gICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtb2NrRGVsZWdhdGUpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAg
IEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExh
eWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCiB7
Ci0gICAgLy8gV2l0aG91dCBhIGRlbGVnYXRlLCB0aGUgbGF5ZXIgc2hvdWxkIHN0aWxsIG1hcmsg
aXRzZWxmIGRpcnR5IGFzIGFwcHJvcHJpYXRlLAotICAgIC8vIGFuZCBpdCBzaG91bGQgbm90IGNy
YXNoIHRyeWluZyB0byB1c2UgYSBub24tZXhpc3RpbmcgZGVsZWdhdGUuCiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBJ
bnRTaXplIHRlc3RCb3VuZHMgPSBJbnRTaXplKDUwMSwgNTA4KTsKIApAQCAtNjMzLDcyICs1MzMs
NTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheVdpdGhO
dWxsRGVsZWdhdGUpCiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNo
YW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBpbml0
aWFsRGVsZWdhdGU7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmlu
aXRpYWxEZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkg
bGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0
TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgdGVzdExheWVyLT5zZXRMYXll
clRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gZHVtbXlMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsgLy8ganVzdCBhIGR1
bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNhbml0eSBjaGVjayBvZiBp
bml0aWFsIHRlc3QgY29uZGl0aW9uCiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNE
aXNwbGF5KCkpOwogCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdCBjYWxs
IG5lZWRzRGlzcGxheSBhbmQgbmVlZHNDb21taXQgd2hlbiBjaGFuZ2VkLgotICAgIC8vIG5vdGlm
eVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCwgYW5kIHRoZSBuZWVkc0Rpc3BsYXkg
ZmxhZyBzaG91bGQgcmVtYWluIGZhbHNlLgotICAgIEVYUEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0
ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxk
IG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMgYSBuZXcgZGVsZWdhdGUuCi0gICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwg
dGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRlKSk7Ci0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5z
ZXROYW1lKCJUZXN0IExheWVyIikpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFVzZXNMYXllckNs
aXBwaW5nKHRydWUpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQo
dHJ1ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41ZikpOwotICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RM
YXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkpOwotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+
c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNm
b3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNw
YWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKLSAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNl
dERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkpOworICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0TmFt
ZSgiVGVzdCBMYXllciIpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1J
VF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAw
LCA0MCwgNTApKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVI
QVZJT1IoMCwgdGVzdExheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5z
ZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldERyYXdPcGFjaXR5KDAu
NWYpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigw
LCB0ZXN0TGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoMywgMywgOCwgOCkpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UoMCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVF
RFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0RHJhd1RyYW5zZm9ybShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01N
SVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01N
SVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3Qo
NCwgNSwgNiwgNykpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXko
KSk7CiAKICAgICAvLyBOZXh0LCB0ZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXRO
ZWVkc0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rpc3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVy
dGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBu
ZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZS4KLSAgICAvLyBBbGwgcHJvcGVydGll
cyBuZWVkIHRvIGJlIHNldCB0byBuZXcgdmFsdWVzIGluIG9yZGVyIGZvciBzZXROZWVkc0NvbW1p
dAotICAgIC8vIHRvIGJlIGNhbGxlZC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMS4yM2YsIDQuNTZmKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnRa
KDAuN2YpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigwLjRmLCAw
LjRmLCAwLjRmKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKSk7Ci0g
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOwotICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RM
YXllci0+c2V0T3BhY2l0eSgwLjVmKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRPcGFxdWUodHJ1ZSkp
OwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0LjBmLCA5LjBmKSkpOwot
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0UmVwbGljYUxheWVyKGR1bW15TGF5ZXIuZ2V0KCkpKTsKLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAs
IDAsIDAsIDAsIDApKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpKTsKLSAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDEwLCAxMCkpKTsKLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgwLCAwLCAwLCAwLCAw
LCAwKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpKTsKKyAgICAvLyBB
bGwgcHJvcGVydGllcyBuZWVkIHRvIGJlIHNldCB0byBuZXcgdmFsdWVzIGluIG9yZGVyIGZvciBz
ZXROZWVkc0NvbW1pdCB0byBiZSBjYWxsZWQuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9O
RUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDEuMjNmLCA0LjU2ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NP
TU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50WigwLjdmKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVy
LT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMC40ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNf
Q09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0TWFza0xheWVyKGR1bW15TGF5ZXIuZ2V0
KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigx
LCB0ZXN0TGF5ZXItPnNldE9wYWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9T
RVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0T3BhcXVlKHRydWUpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0
TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNC4wZiwgOS4wZikpKTsKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFJl
cGxpY2FMYXllcihkdW1teUxheWVyLmdldCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRTdWJsYXllclRyYW5zZm9y
bShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSkpOworICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0U2Ny
b2xsYWJsZSh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgxMCwgMTAp
KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwg
dGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoMCwgMCwgMCwgMCwg
MCwgMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklP
UigxLCB0ZXN0TGF5ZXItPnNldERvdWJsZVNpZGVkKGZhbHNlKSk7CiAKICAgICAvLyBUaGUgYWJv
dmUgdGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNlZCBhIGNoYW5nZSB0byB0aGUgbmVlZHNEaXNw
bGF5IGZsYWcuCiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwog
Ci0gICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5
Ci0gICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFu
ZCBjaGFuZ2UgdGhlIG5lZWRzRGlzcGxheSBmbGFnLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRz
KEludFNpemUoNSwgMTApKSk7CisgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNh
bGwgc2V0TmVlZHNEaXNwbGF5IGFuZCBzZXROZWVkc0NvbW1pdAorICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoNSwgMTApKSk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXko
KSk7Ci0KLSAgICAvLyBGSVhNRTogbmVlZCB0byBhZGQgYSB0ZXN0IGZvciBzZXRMYXllclRyZWVI
b3N0IHdpdGggYSBub24tbnVsbCBzdHViYmVkIENDTGF5ZXJUcmVlSG9zdC4KLX0KLQotVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBjaGVja05vbkNvbXBvc2l0ZWRDb250ZW50UHJvcGVydHlDaGFu
Z2VDYXVzZXNDb21taXQpCi17Ci0gICAgT3duUHRyPE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q+IG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChNb2NrTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
OjpjcmVhdGUoKSk7Ci0KLSAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSBub25Db21wb3Np
dGVkQ29udGVudEhvc3QtPnRvcExldmVsUm9vdExheWVyKCk7Ci0KLSAgICBFWFBFQ1RfQ0FMTCgq
bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LCBub3RpZnlTeW5jUmVxdWlyZWQoXykpLlRpbWVzKDEp
OwotICAgIHJvb3RMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQ
b2ludCgxLCAxKSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LmdldCgpKTsKLQotICAgIEVYUEVDVF9DQUxMKCpub25Db21wb3Np
dGVkQ29udGVudEhvc3QsIG5vdGlmeVN5bmNSZXF1aXJlZChfKSkuVGltZXMoQXRMZWFzdCgxKSk7
Ci0gICAgbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRWaWV3cG9ydChJbnRTaXplKDMwLCAz
MCksIEludFNpemUoMjAsIDIwKSwgSW50UG9pbnQoMTAsIDEwKSwgMSk7CiB9CiAKIGNsYXNzIExh
eWVyQ2hyb21pdW1XaXRoQ29udGVudFNjYWxpbmcgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBA
IC03MjEsMTYgKzU5OSwxNiBAQCBwdWJsaWM6CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tDb250ZW50c1NjYWxlQ2hhbmdlVHJpZ2dlcnNOZWVkc0Rpc3BsYXkpCiB7Ci0gICAgTW9j
a0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aENvbnRlbnRTY2FsaW5nPiB0ZXN0TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhDb250ZW50U2NhbGluZygmbW9ja0RlbGVnYXRlKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoQ29udGVudFNjYWxpbmc+IHRlc3RMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aENvbnRlbnRTY2FsaW5nKDApKTsKKyAgICB0ZXN0TGF5ZXItPnNldExheWVyVHJlZUhv
c3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKIAogICAgIEludFNpemUgdGVzdEJvdW5kcyA9IElu
dFNpemUoMzIwLCAyNDApOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0
TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CiAKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXRDb250ZW50c1NjYWxlKHRlc3RMYXllci0+Y29udGVudHNT
Y2FsZSgpICsgMS5mKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRDb250ZW50c1NjYWxlKHRlc3RMYXllci0+Y29udGVu
dHNTY2FsZSgpICsgMS5mKSk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9j
a1dlYkdyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDQ5NGI2MjI1NTFiZDdiOWQ2NzNhYzIwMzli
NWMxODRhODRiOGZjYjAuLmVhYmMxNWI5M2ZkNWNmZDU5MjJmMWM2YjcyYWUyMjc2MjlhZWVmYmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja1dlYkdyYXBoaWNz
Q29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFdHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dDM0Rj
aGFyKiBuYW1lKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KFdH
QzNEZW51bSBwbmFtZSwgV0dDM0Rib29sZWFuKiB2YWx1ZSkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGdldEJ1ZmZlclBhcmFtZXRlcml2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwg
V0dDM0RpbnQqIHZhbHVlKSB7IH0KLSAgICB2aXJ0dWFsIEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0
dHJpYnV0ZXMoKSB7IHJldHVybiBBdHRyaWJ1dGVzKCk7IH0KKyAgICB2aXJ0dWFsIEF0dHJpYnV0
ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJzOyB9CiAgICAgdmlydHVh
bCBXR0MzRGVudW0gZ2V0RXJyb3IoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGdl
dEZsb2F0dihXR0MzRGVudW0gcG5hbWUsIFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRh
cmdldCwgV0dDM0RlbnVtIGF0dGFjaG1lbnQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZh
bHVlKSB7IH0KQEAgLTI1NCw2ICsyNTQsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
dGV4U3RvcmFnZTJERVhUKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVscywgV0dDM0R1
aW50IGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0dD
M0RpbnQgd2lkdGgsIFdHQzNEaW50IGhlaWdodCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBBdHRy
aWJ1dGVzIG1fYXR0cnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkdMTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CmluZGV4IDI0Y2I1MjcxOTExODdhZDhlOWQ2ODBiYTYxMTFhMjJhZjk0MzU1OWQuLjI2NThlZDQ5
NzcxMjM3YWJhZmMwNWQ0MzIxZjFmMzNiZTJiM2ZjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJHTExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYs
OSArMjYsOCBAQAogCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRl
ICJDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotI2luY2x1ZGUg
Ik1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIApAQCAtMzcsMzIgKzM2LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIHsKIAotLy8gVGVzdCBzdHViIGZvciBXZWJHcmFwaGlj
c0NvbnRleHQzRC4gUmV0dXJucyBjYW5uZWQgdmFsdWVzIG5lZWRlZCBmb3IgY29tcG9zaXRvciBp
bml0aWFsaXphdGlvbi4KLWNsYXNzIENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Qg
OiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
b21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
V2ViR0xJZCBjcmVhdGVQcm9ncmFtKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgV2ViR0xJ
ZCBjcmVhdGVTaGFkZXIoV0dDM0RlbnVtKSB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGdldFNoYWRlcml2KFdlYkdMSWQsIFdHQzNEZW51bSwgV0dDM0RpbnQqIHZhbHVlKSB7ICp2YWx1
ZSA9IDE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZ3JhbWl2KFdlYkdMSWQsIFdHQzNEZW51
bSwgV0dDM0RpbnQqIHZhbHVlKSB7ICp2YWx1ZSA9IDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCkgeyByZXR1cm4g
bV9hdHRyczsgfQotCi1wcml2YXRlOgotICAgIENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250
ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpIHsgbV9hdHRycy5hbHBo
YSA9IGF0dHJzLmFscGhhOyB9Ci0KLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBtX2F0dHJzOwotfTsKLQotc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykK
LXsKLSAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBDb21wb3Np
dG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cnMpOwotICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KAotICAgICAgICB3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIDAsCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPbkFub3RoZXJUaHJlYWQpOwotfQotCiBURVNU
KFdlYkdMTGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUZvcm1hdHMpCiB7CiAgICAgUmVmUHRyPERy
YXdpbmdCdWZmZXI+IGJ1ZmZlcjsKQEAgLTcyLDkgKzQ1LDkgQEAgVEVTVChXZWJHTExheWVyQ2hy
b21pdW1UZXN0LCBvcGFxdWVGb3JtYXRzKQogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIG9wYXF1ZUF0dHJzOwogICAgIG9wYXF1ZUF0dHJzLmFscGhhID0gZmFsc2U7CiAKLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGFscGhhQ29udGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChhbHBoYUF0dHJzKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGFscGhhQ29u
dGV4dCA9IGNyZWF0ZUNvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoYWxwaGFBdHRycyk7
CiAgICAgRVhQRUNUX1RSVUUoYWxwaGFDb250ZXh0KTsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG9wYXF1ZUNvbnRleHQgPSBjcmVhdGVHcmFwaGljc0NvbnRleHQob3BhcXVlQXR0cnMp
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gb3BhcXVlQ29udGV4dCA9IGNyZWF0ZUNv
bXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0Qob3BhcXVlQXR0cnMpOwogICAgIEVYUEVDVF9U
UlVFKG9wYXF1ZUNvbnRleHQpOwogCiAgICAgYnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KGFscGhhQ29udGV4dC5nZXQoKSwgSW50U2l6ZSgpLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKaW5kZXggMTU4OTg4MWQyMTBlYTkzY2Fk
NDc1ZDI1Yzk2N2QyYjg3NjcyOGUzOC4uODc1ZDMxYjFhZTAxMjRhNWJmMWVhYzM4MTIzYjZmOGVl
YjU3YWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXll
clRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0
LmNwcApAQCAtMjUsMTQgKzI1LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViTGF5ZXIuaCIKIAorI2luY2x1ZGUgIkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViQ29udGVudExheWVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29udGVudExh
eWVyQ2xpZW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgotI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXllci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkNvbnRlbnRMYXllckNsaWVudC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaCIKIAogI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAKQEAgLTQxLDkgKzQ0LDE0IEBAIHVzaW5nIG5hbWVzcGFj
ZSB0ZXN0aW5nOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBNb2NrV2ViTGF5ZXJDbGllbnQgOiBw
dWJsaWMgV2ViTGF5ZXJDbGllbnQgeworY2xhc3MgTW9ja1dlYkxheWVyVHJlZVZpZXdDbGllbnQg
OiBwdWJsaWMgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCB7CiBwdWJsaWM6Ci0gICAgTU9DS19NRVRI
T0QwKG5vdGlmeU5lZWRzQ29tcG9zaXRlLCB2b2lkKCkpOworICAgIE1PQ0tfTUVUSE9EMChzY2hl
ZHVsZUNvbXBvc2l0ZSwgdm9pZCgpKTsKKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Ny
b2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlRmFjdG9y
KSB7IH0KKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVDb250ZXh0M0Qo
KSB7IHJldHVybiBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoV2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSkubGVha1B0cigpOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpIHsgfQogfTsKIAog
Y2xhc3MgTW9ja1dlYkNvbnRlbnRMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb250ZW50TGF5ZXJD
bGllbnQgewpAQCAtNTMsNyArNjEsMzAgQEAgcHVibGljOgogCiBjbGFzcyBXZWJMYXllclRlc3Qg
OiBwdWJsaWMgVGVzdCB7CiBwdWJsaWM6Ci0gICAgV2ViTGF5ZXJUZXN0KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0
aHJlYWRpbmcgc3VwcG9ydC4KKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFs
aXplKDApOworICAgICAgICBtX3Jvb3RMYXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICAg
ICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51
bWJlcigpKTsKKyAgICAgICAgbV92aWV3ID0gV2ViTGF5ZXJUcmVlVmlldzo6Y3JlYXRlKCZtX2Ns
aWVudCwgbV9yb290TGF5ZXIsIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzKCkpOworICAgICAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICAvLyBXZSBtYXkgZ2V0
IGFueSBudW1iZXIgb2Ygc2NoZWR1bGVDb21wb3NpdGUgY2FsbHMgZHVyaW5nIHNodXRkb3duLgor
ICAgICAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMo
QW55TnVtYmVyKCkpOworICAgICAgICBtX3ZpZXcuc2V0Um9vdExheWVyKDApOworICAgICAgICBt
X3Jvb3RMYXllci5yZXNldCgpOworICAgICAgICBtX3ZpZXcucmVzZXQoKTsKKyAgICAgICAgV2Vi
S2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KKworcHJvdGVjdGVkOgorICAg
IE1vY2tXZWJMYXllclRyZWVWaWV3Q2xpZW50IG1fY2xpZW50OworICAgIFdlYkxheWVyIG1fcm9v
dExheWVyOworICAgIFdlYkxheWVyVHJlZVZpZXcgbV92aWV3OwogfTsKIAogLy8gVGVzdHMgdGhh
dCB0aGUgY2xpZW50IGdldHMgY2FsbGVkIHRvIGFzayBmb3IgYSBjb21wb3NpdGUgaWYgd2UgY2hh
bmdlIHRoZQpAQCAtNjEsOTkgKzkyLDEwMCBAQCBwdWJsaWM6CiBURVNUX0YoV2ViTGF5ZXJUZXN0
LCBDbGllbnQpCiB7CiAgICAgLy8gQmFzZSBsYXllci4KLSAgICBNb2NrV2ViTGF5ZXJDbGllbnQg
Y2xpZW50OwotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSku
VGltZXMoQW55TnVtYmVyKCkpOwotICAgIFdlYkxheWVyIGxheWVyID0gV2ViTGF5ZXI6OmNyZWF0
ZSgmY2xpZW50KTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMo
QW55TnVtYmVyKCkpOworICAgIFdlYkxheWVyIGxheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOwor
ICAgIG1fcm9vdExheWVyLmFkZENoaWxkKGxheWVyKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVh
ckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogCiAgICAgV2ViRmxvYXRQb2ludCBwb2ludCgzLCA0
KTsKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVz
KEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0
ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBsYXllci5zZXRBbmNob3JQb2ludChwb2ludCk7
Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9j
azo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfRVEo
cG9pbnQsIGxheWVyLmFuY2hvclBvaW50KCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBu
b3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FM
TChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAg
ZmxvYXQgYW5jaG9yWiA9IDU7CiAgICAgbGF5ZXIuc2V0QW5jaG9yUG9pbnRaKGFuY2hvclopOwot
ICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKGFu
Y2hvclosIGxheWVyLmFuY2hvclBvaW50WigpKTsKIAogICAgIFdlYlNpemUgc2l6ZSg3LCA4KTsK
LSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0
TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgp
KS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBsYXllci5zZXRCb3VuZHMoc2l6ZSk7Ci0gICAgTW9j
azo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfRVEoc2l6ZSwgbGF5
ZXIuYm91bmRzKCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBv
c2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2No
ZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgbGF5ZXIuc2V0TWFza3NU
b0JvdW5kcyh0cnVlKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xp
ZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwog
ICAgIEVYUEVDVF9UUlVFKGxheWVyLm1hc2tzVG9Cb3VuZHMoKSk7CiAKLSAgICBNb2NrV2ViTGF5
ZXJDbGllbnQgb3RoZXJDbGllbnQ7Ci0gICAgRVhQRUNUX0NBTEwob3RoZXJDbGllbnQsIG5vdGlm
eU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJMYXllciBvdGhl
ckxheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgmb3RoZXJDbGllbnQpOwotICAgIEVYUEVDVF9DQUxM
KGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAg
RVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJl
cigpKTsKKyAgICBXZWJMYXllciBvdGhlckxheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOworICAg
IG1fcm9vdExheWVyLmFkZENoaWxkKG90aGVyTGF5ZXIpOworICAgIEVYUEVDVF9DQUxMKG1fY2xp
ZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBsYXllci5z
ZXRNYXNrTGF5ZXIob3RoZXJMYXllcik7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1f
Y2xpZW50KTsKICAgICBFWFBFQ1RfRVEob3RoZXJMYXllciwgbGF5ZXIubWFza0xheWVyKCkpOwog
Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhB
dExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUo
KSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IDAuMTIzOwogICAgIGxh
eWVyLnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1f
Y2xpZW50KTsKICAgICBFWFBFQ1RfRVEob3BhY2l0eSwgbGF5ZXIub3BhY2l0eSgpKTsKIAotICAg
IEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFz
dCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRp
bWVzKEF0TGVhc3QoMSkpOwogICAgIGxheWVyLnNldE9wYXF1ZSh0cnVlKTsKLSAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyLm9wYXF1
ZSgpKTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSku
VGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29t
cG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIGxheWVyLnNldFBvc2l0aW9uKHBvaW50
KTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9F
UShwb2ludCwgbGF5ZXIucG9zaXRpb24oKSk7CiAKICAgICAvLyBUZXh0dXJlIGxheWVyLgotICAg
IEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQW55TnVt
YmVyKCkpOwotICAgIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIHRleHR1cmVMYXllciA9IFdlYkV4
dGVybmFsVGV4dHVyZUxheWVyOjpjcmVhdGUoJmNsaWVudCk7Ci0gICAgTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNj
aGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICBXZWJFeHRlcm5hbFRl
eHR1cmVMYXllciB0ZXh0dXJlTGF5ZXIgPSBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRl
KCk7CisgICAgbV9yb290TGF5ZXIuYWRkQ2hpbGQodGV4dHVyZUxheWVyKTsKKyAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogCi0gICAgRVhQRUNUX0NBTEwo
Y2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBF
WFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgx
KSk7CiAgICAgdGV4dHVyZUxheWVyLnNldFRleHR1cmVJZCgzKTsKLSAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9FUSgzdSwgdGV4dHVyZUxheWVyLnRl
eHR1cmVJZCgpKTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3Np
dGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVk
dWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIHRleHR1cmVMYXllci5zZXRG
bGlwcGVkKHRydWUpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGll
bnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAg
ICAgRVhQRUNUX1RSVUUodGV4dHVyZUxheWVyLmZsaXBwZWQoKSk7CiAKLSAgICBFWFBFQ1RfQ0FM
TChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAg
IEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0
KDEpKTsKICAgICBXZWJGbG9hdFJlY3QgdXZSZWN0KDAuMSwgMC4xLCAwLjksIDAuOSk7CiAgICAg
dGV4dHVyZUxheWVyLnNldFVWUmVjdCh1dlJlY3QpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZUxheWVyLmZsaXBwZWQoKSk7
CiAKIAogICAgIC8vIENvbnRlbnQgbGF5ZXIuCiAgICAgTW9ja1dlYkNvbnRlbnRMYXllckNsaWVu
dCBjb250ZW50Q2xpZW50OwogICAgIEVYUEVDVF9DQUxMKGNvbnRlbnRDbGllbnQsIHBhaW50Q29u
dGVudHMoXywgXykpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQs
IG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJDb250
ZW50TGF5ZXIgY29udGVudExheWVyID0gV2ViQ29udGVudExheWVyOjpjcmVhdGUoJmNsaWVudCwg
JmNvbnRlbnRDbGllbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZj
bGllbnQpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5U
aW1lcyhBbnlOdW1iZXIoKSk7CisgICAgV2ViQ29udGVudExheWVyIGNvbnRlbnRMYXllciA9IFdl
YkNvbnRlbnRMYXllcjo6Y3JlYXRlKCZjb250ZW50Q2xpZW50KTsKKyAgICBtX3Jvb3RMYXllci5h
ZGRDaGlsZChjb250ZW50TGF5ZXIpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZtX2NsaWVudCk7CiAKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29t
cG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBjb250ZW50TGF5ZXIu
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0
aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9j
bGllbnQpOwogICAgIEVYUEVDVF9GQUxTRShjb250ZW50TGF5ZXIuZHJhd3NDb250ZW50KCkpOwog
fQogCiBURVNUX0YoV2ViTGF5ZXJUZXN0LCBIaWVyYXJjaHkpCiB7Ci0gICAgTW9ja1dlYkxheWVy
Q2xpZW50IGNsaWVudDsKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9z
aXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJMYXllciBsYXllcjEgPSBXZWJMYXll
cjo6Y3JlYXRlKCZjbGllbnQpOwotICAgIFdlYkxheWVyIGxheWVyMiA9IFdlYkxheWVyOjpjcmVh
dGUoJmNsaWVudCk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRl
KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICBXZWJMYXllciBsYXllcjEgPSBXZWJMYXllcjo6
Y3JlYXRlKCk7CisgICAgV2ViTGF5ZXIgbGF5ZXIyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOwogCiAg
ICAgRVhQRUNUX1RSVUUobGF5ZXIxLnBhcmVudCgpLmlzTnVsbCgpKTsKICAgICBFWFBFQ1RfVFJV
RShsYXllcjIucGFyZW50KCkuaXNOdWxsKCkpOwpAQCAtMTcyLDggKzIwNCw4IEBAIFRFU1RfRihX
ZWJMYXllclRlc3QsIEhpZXJhcmNoeSkKIAogICAgIE1vY2tXZWJDb250ZW50TGF5ZXJDbGllbnQg
Y29udGVudENsaWVudDsKICAgICBFWFBFQ1RfQ0FMTChjb250ZW50Q2xpZW50LCBwYWludENvbnRl
bnRzKF8sIF8pKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViQ29udGVudExheWVyIGNvbnRl
bnRMYXllciA9IFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKCZjbGllbnQsICZjb250ZW50Q2xpZW50
KTsKLSAgICBXZWJFeHRlcm5hbFRleHR1cmVMYXllciB0ZXh0dXJlTGF5ZXIgPSBXZWJFeHRlcm5h
bFRleHR1cmVMYXllcjo6Y3JlYXRlKCZjbGllbnQpOworICAgIFdlYkNvbnRlbnRMYXllciBjb250
ZW50TGF5ZXIgPSBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSgmY29udGVudENsaWVudCk7CisgICAg
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgdGV4dHVyZUxheWVyID0gV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXI6OmNyZWF0ZSgpOwogCiAgICAgdGV4dHVyZUxheWVyLmFkZENoaWxkKGNvbnRlbnRMYXll
cik7CiAgICAgY29udGVudExheWVyLmFkZENoaWxkKGxheWVyMSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119042</attachid>
            <date>2011-12-13 11:02:59 -0800</date>
            <delta_ts>2011-12-15 18:55:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74376-20111213110258.patch</filename>
            <type>text/plain</type>
            <size>137048</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJjZDFlNWI4ZDZjMjM4
ZTE5NTFjMDU5ODFkNGYyZTc5NTU4MGRlYi4uN2YwOWIzZGE2MDY2YTJhMGYxZDI5MjE3NDBmN2I4
Mjc3NGJkODQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTEyICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBD
Q0xheWVyRGVsZWdhdGUgYW5kIFdlYkxheWVyQ2xpZW50IGRvIG5vdCBuZWVkIG5vdGlmeVN5bmNS
ZXF1aXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
Q0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCBpcyBhbiBvZGQgYml0IG9mIGludGVy
ZmFjZSB0aGF0IHdlIG9yaWdpbmFsbHkgY2FyZ28tY3VsdGVkIGZyb20gdGhlCisgICAgICAgIENv
cmVBbmltYXRpb24gY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbi4gSXQgaXMgYSBtZWNoYW5pc20g
Ynkgd2hpY2ggYSBMYXllckNocm9taXVtIGluc3RhbmNlIG1heSByZXF1ZXN0IGEgbmV3CisgICAg
ICAgIGZyYW1lIHZpYSBpdHMgQ0NMYXllckRlbGVnYXRlLCB3aGljaCBpbiBXZWJDb3JlIGlzIGFs
d2F5cyBhIEdyYXBoaWNzTGF5ZXJDbGllbnQuIEluIHByYWN0aWNlLCBhbGwKKyAgICAgICAgaW1w
bGVtZW50YXRpb25zIGV2ZW50dWFsbHkgZW5kZWQgdXAgcm91dGluZyB0byBDQ0xheWVyVHJlZUhv
c3Q6OnNldE5lZWRzQ29tbWl0IHdoaWNoIHRoZW4gbWFkZSB0aGUgcHJvcGVyCisgICAgICAgIHNj
aGVkdWxpbmcgZGVjaXNpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByb3V0ZXMgYWxsIGNoYW5n
ZXMgdGhhdCB3b3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBDQ0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5
bmNSZXF1aXJlZCBkaXJlY3RseSB0bworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRz
Q29tbWl0LCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHNjaGVkdWxpbmcgbG9naWMuCisK
KyAgICAgICAgVGhlcmUgaXMgYSBsYXJnZSBhbW91bnQgb2YgdW5pdCB0ZXN0IGNvdmVyYWdlIGZv
ciB0aGlzIGNoYW5nZSwgbGFyZ2VseSBpbiBMYXllckNocm9taXVtVGVzdAorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omluc2VydENoaWxkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY29wZWRUaHJlYWRQcm94eTo6cnVuVGFza0lmTm90U2h1dGRvd24pOgor
CiAyMDExLTEyLTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIGJhY2tncm91bmQtaW1hZ2UgdHJhbnNpdGlvbnMgdHJpZ2dlciBiZXR3ZWVuIGVxdWl2
YWxlbnQgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZhZWIyNTM2ZWI5N2E0
ZmY0YTg4YzM5MzJmM2ZkZjc5NjRjNjdkYjkuLmI4OTNiOGQzZTJkMjJmODNjMWY3YmQ3ZDIyM2I1
OTI1OTZkNWFmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAK
KzIwMTEtMTItMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIENDTGF5ZXJEZWxlZ2F0ZSBhbmQgV2ViTGF5ZXJDbGllbnQgZG8gbm90
IG5lZWQgbm90aWZ5U3luY1JlcXVpcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NDM3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYkxheWVyQ2xpZW50Ojpub3RpZnlOZWVkc0NvbXBvc2l0ZSgpIGlz
IGFuIG9kZCBpbnRlcmZhY2UgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGF0CisgICAgICAgIENDTGF5
ZXJEZWxlZ2F0ZTo6bm90aWZ5U3luY1JlcXVpcmVkKCkgaXMgLSBhbGwgc2NoZWR1bGluZyBkZWNp
c2lvbnMgc2hvdWxkIHJvdXRlIHRocm91Z2ggdGhlIFdlYkxheWVyVHJlZVZpZXcsCisgICAgICAg
IG5vdCBpbmRpdmlkdWFsIGxheWVycy4gSW4gcHJhY3RpY2UsIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgV2ViTGF5ZXJDbGllbnQ6Om5vdGlmeVN5bmNSZXF1aXJlZCgpIGRvIHRoZSBleGFjdAorICAg
ICAgICBzYW1lIHRoaW5nIGFzIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRlKCku
IFRoaXMgcmVtb3ZlcyB0aGF0IGNhbGxiYWNrLCBtYWtpbmcgV2ViTGF5ZXJDbGllbnQgYW4gZW1w
dHkKKyAgICAgICAgaW50ZXJmYWNlLCBhbmQgcm91dGVzIGFsbCBjYWxscyB0aGF0IHdvdWxkIGdv
IHRvIHRoYXQgaW50ZXJmYWNlIHRvIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRl
KCkuCisKKyAgICAgICAgT25jZSBkb3duc3RyZWFtIGltcGxlbWVudGF0aW9ucyBvZiBXZWJMYXll
ckNsaWVudCBhcmUgcmVtb3ZlZCwgV2ViTGF5ZXJDbGllbnQuaCBhbmQgdGhlIGNvbnN0cnVjdG9y
cyBhc3NvY2lhdGVkCisgICAgICAgIHdpdGggaXQgY2FuIGJlIGRlbGV0ZWQuCisKKyAgICAgICAg
VGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXMgaGVyZSBhcmUgdG8gdGhlIHRlc3QgaGFybmVzcy4gTWFu
eSB0ZXN0cyB0aGF0IHdlcmUgZGVzaWduZWQgYXJvdW5kIG5vdGlmeVN5bmNSZXF1aXJlZCgpCisg
ICAgICAgIGFyZSByZXdyaXR0ZW4gdG8gY2hlY2sgZm9yIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNDb21taXQoKSBvciBXZWJMYXllclRyZWVWaWV3OjpzY2hlZHVsZUNvbXBvc2l0ZSgpIGluc3Rl
YWQuCisgICAgICAgIEluIGEgZmV3IGluc3RhbmNlcywgdGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0
aGUgc2V0dXAgbG9naWMgYXJvdW5kIHNvbWV3aGF0IHNvIHRoYXQgdGhlIGxheWVycyBiZWluZyBt
YW5pcHVsYXRlZAorICAgICAgICB3ZXJlIGluIGEgdHJlZSB0aGF0IGluaXRpYWxpemVkIHdpdGhv
dXQgZXJyb3JzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL3Bs
YXRmb3JtL1dlYkNvbnRlbnRMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJF
eHRlcm5hbFRleHR1cmVMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXll
ci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oOgorICAgICAg
ICAqIHNyYy9XZWJDb250ZW50TGF5ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50
TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpXZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxh
eWVyOjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllckltcGwu
aDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcDoKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YW5p
bWF0ZUFuZExheW91dCk6CisgICAgICAgICogdGVzdHMvQ29tcG9zaXRvck1vY2tHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbXBvc2l0b3JNb2Nr
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0NvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAg
IChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JN
b2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkNvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoK
KyAgICAgICAgKiB0ZXN0cy9Nb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdl
YktpdDo6TW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6Cisg
ICAgICAgICogdGVzdHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisgICAgICAgICh0
ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6Cisg
ICAgICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YXBwbHlTY3JvbGxB
bmRTY2FsZSk6CisgICAgICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6
Y3JlYXRlQ29udGV4dDNEKToKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRyZWVWaWV3
Q2xpZW50OjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAodGVzdGluZzo6V2Vi
TGF5ZXJUZXN0OjpTZXRVcCk6CisgICAgICAgICh0ZXN0aW5nOjpXZWJMYXllclRlc3Q6OlRlYXJE
b3duKToKKyAgICAgICAgKHRlc3Rpbmc6OlRFU1RfRik6CisKIDIwMTEtMTItMDkgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbW92
ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDEzYTM5Y2RhZjY3YjA4ODdkYjliYjM2ODdiZTFiNGEw
YWRjMjA4MjAuLmZjOWM4NmYwNjdlZGMxOTk1MGFmMzMzM2FlODM3YjVhZTk5YzhjZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNjgxLDEyICs2ODEsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNv
bnRleHQsIGNsaXApOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5U3lu
Y1JlcXVpcmVkKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKaW5kZXggZGYyNjk4YWJkOTFlMzc2NTZiMTI0OGM3YjhiNDgyY2MxNDg3NzRm
Yi4uZTk5ODhkN2QyNjdkNGRlNmVhNTdlZTdlYjVkYzM5MTk5ZDY2OGE2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTk5LDcgKzk5LDYgQEAgcHVibGljOgogICAgIC8v
IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgQ0NMYXllckRlbGVnYXRlIGlu
dGVyZmFjZS4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYg
Y2xpcCk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOwogCiAgICAgLy8g
RXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAppbmRleCBiNDVlMTI1OTU3M2Y5ZWQzNTcxYjYxYTAxZTgzMGM1ZWRlNDRmMjhiLi41YzI4OGQ3
MTNiOTlmNWFmZDM2NDEwNzUzZmQ2ZTI4YjEwZjZjNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHND
b21taXQoKQogewotICAgIGlmIChtX2RlbGVnYXRlKQotICAgICAgICBtX2RlbGVnYXRlLT5ub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0UGFyZW50KExheWVyQ2hyb21pdW0qIGxheWVyKQpAQCAtMTQ5LDYgKzE0OSw3IEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6aW5zZXJ0Q2hpbGQoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCwgc2l6ZV90IGluZGV4KQogICAgIGluZGV4ID0gbWluKGluZGV4LCBtX2NoaWxkcmVuLnNpemUo
KSk7CiAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBjaGlsZC0+c2V0UGFyZW50
KHRoaXMpOworICAgIGNoaWxkLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQo
KSk7CiAgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGNoaWxkKTsKICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDljN2E0ZjhmNDc5Mjg5ZGEwNTkxMzdi
NzliYjE1ZDZiZDE3ZDUxZWUuLjg1OTVmNWQ2NGMyOWJhOTI4MjcwZmMxZTRkNmM3YTQ2ZWVkZGU4
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTYxLDcgKzYxLDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfkNDTGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoKSA9IDA7CiB9OwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVk
IGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1YjkzNGExNjZl
ZmE1NWYzNzRmLi5lZGQ0Y2RmNjE0OGE1ODU5YjU1OTU0YjNlMzI5NjIyZjgzNGJjNjMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTEwMyw2ICsxMDMsNyBAQCBDQ0xheWVy
VHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01h
aW5UaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJU
cmVlSG9zdCIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX3Byb3h5KTsKICAgICBtX3Byb3h5LT5z
dG9wKCk7CiAgICAgbV9wcm94eS5jbGVhcigpOwogICAgIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwpA
QCAtMjM0LDYgKzIzNSwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXco
KQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RM
YXllcikKK3sKKyAgICBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsKKyAgICBpZiAoIW1fcm9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogewogICAgIGNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IGFhYWQxNDIyOWQzNTEwZWUxOTEwMjFjNzY0Yzc1YjRmYjQ3M2FiNTUuLjA5NTky
ZWY3MzM2MDJiYTU5YjNjODg5NGI5YWU0MGU2NDA0YjAyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC0xNjEsMTIgKzE2MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb3NlQ29t
cG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKIAogICAgIHZvaWQgc2V0TmVlZHNBbmltYXRl
KCk7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOworICAgIC8vIHZpcnR1YWwgZm9yIHRlc3Rp
bmcKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKICAgICB2b2lkIHNldE5lZWRz
UmVkcmF3KCk7CiAKICAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jv
b3RMYXllci5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIpIHsgbV9yb290TGF5ZXIgPSByb290
TGF5ZXI7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+
KTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXR0aW5nczsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgKaW5kZXggNWM4
Y2ZiNzMxMzNjYmQ1MGFlOWIxZDVlOTExYmIwZjQwNDczNTQyZC4uZWMzZjFhODdjNWQwYjM5NGQ4
NDhlZjg0NWZlZWI5NjU0NWQyODUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJv
eHkuaApAQCAtNzEsMTAgKzcxLDE1IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJ1blRhc2tJZk5v
dFNodXRkb3duKFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IHBvcFRhc2spCiAgICAgewotICAg
ICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGFyZ2V0VGhyZWFkLT50aHJlYWRJRCgp
KTsKICAgICAgICAgT3duUHRyPENDVGhyZWFkOjpUYXNrPiB0YXNrID0gcG9wVGFzazsKLSAgICAg
ICAgaWYgKCFtX3NodXRkb3duKQotICAgICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKKyAg
ICAgICAgLy8gSWYgb3VyIHNodXRkb3duIGZsYWcgaXMgc2V0LCBpdCdzIHBvc3NpYmxlIHRoYXQg
bV90YXJnZXRUaHJlYWQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgc28gZG9uJ3QKKyAgICAg
ICAgLy8gdG91Y2ggaXQuCisgICAgICAgIGlmIChtX3NodXRkb3duKSB7CisgICAgICAgICAgICBk
ZXJlZigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV90YXJnZXRUaHJlYWQtPnRocmVhZElEKCkpOworICAgICAgICB0
YXNrLT5wZXJmb3JtVGFzaygpOwogICAgICAgICBkZXJlZigpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZGI5OTg5N2MyNTM3ZGYxYzkxMGUwMWE3Y2YzZGQ2Yzgz
YWRlZmQ2Zi4uOTU3NWQyZDY2NzhjMDFjZDlmNjljMDcwNTI4YzExYTkyZjI1MTgxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02NSwxMCArNjUsMTQgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NM
YXllclRyZWVUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFj
ZVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVz
dHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNr
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250
ZXh0M0QuaCcsCisgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRC5oJywKKyAgICAgICAgICAgICd0ZXN0cy9GYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0Zsb2F0UXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9GcmFtZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVs
cGVycy5oJywKQEAgLTc5LDggKzgzLDYgQEAKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvTW9ja0dy
YXBoaWNzQ29udGV4dDNEVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL01vY2tXZWJHcmFw
aGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaAppbmRleCA1
ZDAwZGM5M2UzNzEwYWM5ZGQzM2U3OGJhNWUwMjg2YWI5ZDIwYzM0Li4yMDhlYjA1NmE5OTgxM2Jh
NmIyMGM0OTEzYTA4NWY3MjFjNjViZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaApAQCAtMzcsNiArMzcs
OCBAQCBjbGFzcyBXZWJMYXllckNsaWVudDsKIAogY2xhc3MgV2ViQ29udGVudExheWVyIDogcHVi
bGljIFdlYkxheWVyIHsKIHB1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJDb250
ZW50TGF5ZXIgY3JlYXRlKFdlYkNvbnRlbnRMYXllckNsaWVudCopOworICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBhcyBzb29uIGFzIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KICAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xp
ZW50KiwgV2ViQ29udGVudExheWVyQ2xpZW50Kik7CiAKICAgICBXZWJDb250ZW50TGF5ZXIoKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YkV4dGVybmFsVGV4dHVyZUxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5oCmluZGV4IDYzZDU0ODVmMmVlMWJiMzhj
MDNlMThkNjYzNWQxMjBkMDA2MWQ5ODEuLjU1NzQ1YWM5NmYxNGY5MGMwZGMzMmFmMjgwMzg4MDI2
OWEzODQ1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaApAQCAtNDIsNiArNDIs
OCBAQCBjbGFzcyBXZWJMYXllckNsaWVudDsKIC8vIHRoZSBXZWJMYXllclRyZWVWaWV3IGlzIGRl
c3Ryb3llZC4KIGNsYXNzIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIDogcHVibGljIFdlYkxheWVy
IHsKIHB1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJFeHRlcm5hbFRleHR1cmVM
YXllciBjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFzIHNvb24gYXMgZG93bnN0cmVh
bSBjbGllbnRzIGFyZSB1cGRhdGVkLgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkV4dGVy
bmFsVGV4dHVyZUxheWVyIGNyZWF0ZShXZWJMYXllckNsaWVudCopOwogCiAgICAgV2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXIoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJMYXllci5oCmluZGV4IDU2NTY3MWMzYmM5MzAyZjcwYzQ5YTUyNTVjYTFl
MDMzNGMyODE2ODMuLjAzM2JlZTQ1YWVjMTRlYWU0ZTVmMDk5NjI2ZmZjNGYwNzI1NmFlOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVy
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXIu
aApAQCAtNDAsNiArNDAsOCBAQCBzdHJ1Y3QgV2ViU2l6ZTsKIAogY2xhc3MgV2ViTGF5ZXIgewog
cHVibGljOgorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkxheWVyIGNyZWF0ZSgpOworICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjb25zdHJ1Y3RvciBvbmNlIGRvd25zdHJlYW0gY2xpZW50
cyBhcmUgdXBkYXRlZC4KICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJMYXllciBjcmVhdGUo
V2ViTGF5ZXJDbGllbnQqKTsKIAogICAgIFdlYkxheWVyKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaAppbmRl
eCA5ZjE0OGJhMmVlMTM3ODQyYjExMmRjMzI5MmM5ODA0OWU1NWNlOTZlLi5kMmE2OWZmZjA1MWU2
Y2M3MTg3ODI4ZjA2YzdlZWVhMTkyMzlhMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgKQEAgLTMwLDE0ICsz
MCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJMYXllckNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgLy8gTm90aWZpZXMgdGhlIGNsaWVudCB0aGF0IHRoZSBsYXllciBoYXMgY2hhbmdl
ZCBpbiBhIHdheSB0aGF0IG5lZWRzIGEKLSAgICAvLyBjb21wb3NpdGluZyBwYXNzIHRvIHZpc3Vh
bGx5IHVwZGF0ZS4gVGhlIGNsaWVudCBzaG91bGQgZXZlbnR1YWxseSBjYWxsCi0gICAgLy8gV2Vi
TGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlLgotICAgIC8vIE5vdGU6IHNvbWUgY29tcGxleCBvcGVy
YXRpb25zIChlLmcgbGF5ZXIgcmVwYXJlbnRpbmcpIGNhbiBjYXVzZSB0aGlzIHRvCi0gICAgLy8g
YmUgY2FsbGVkIHdoaWxlIHRoZSBsYXllciB0cmVlIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0
ZSwgc28gdG8gZ2V0Ci0gICAgLy8gY29ycmVjdCByZXN1bHRzLCBXZWJMYXllclRyZWVWaWV3Ojpj
b21wb3NpdGUgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUKLSAgICAvLyBvcGVyYXRpb24gaGFz
IGZpbmlzaGVkIChlLmcuIGJ5IHBvc3RpbmcgYSB0YXNrKS4KLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5TmVlZHNDb21wb3NpdGUoKSA9IDA7CisgICAgLy8gVGhpcyBlbXB0eSBpbnRlcmZhY2UgZXhp
c3RzIG9ubHkgZm9yIGxlZ2FjeSByZWFzb25zIC0gaXQgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24K
KyAgICAvLyBhcyBkb3duc3RyZWFtIGNvbnN1bWVycyBzdG9wIGRlcGVuZGluZyBvbiB0aGlzIGlu
dGVyZmFjZSBleGlzdGluZy4KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfldlYkxheWVyQ2xp
ZW50KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
LmNwcAppbmRleCBjOTg5NGUyMDNjNTdhYjYxYzI3ZjJkMjNkY2ExNzk1ZjQ0OTdiZDYzLi5mYWE2
YTA5Njg3YWRiODFhMDQ5OTk0YTQ1MDhhOWI0YjY1ZGI2MTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKQEAgLTMxLDkgKzMxLDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpj
cmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250
ZW50Q2xpZW50KQorV2ViQ29udGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkNv
bnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKIHsKLSAgICByZXR1cm4gV2ViQ29udGVu
dExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShjbGllbnQsIGNvbnRlbnRDbGllbnQp
KTsKKyAgICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0
ZShjb250ZW50Q2xpZW50KSk7Cit9CisKK1dlYkNvbnRlbnRMYXllciBXZWJDb250ZW50TGF5ZXI6
OmNyZWF0ZShXZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENs
aWVudCkKK3sKKyAgICByZXR1cm4gV2ViQ29udGVudExheWVyOjpjcmVhdGUoY29udGVudENsaWVu
dCk7CiB9CiAKIHZvaWQgV2ViQ29udGVudExheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3
c0NvbnRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwCmluZGV4IGNkODg5MDBiZGEzNGE1M2JlMWU2ZmVmZjk4ZDU5M2NmY2FlNjgx
MTAuLjc5ZTIwZmVmNzk1MmVlYzgxNzBlM2RlZjJlY2YxZTMxMjFmZTI5NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgogCiAjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViQ29udGVudExheWVyQ2xpZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCkBA
IC0zOSwxNCArMzgsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1QYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXll
ckltcGw6OmNyZWF0ZShXZWJMYXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGll
bnQqIGNvbnRlbnRDbGllbnQpCitQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNv
bnRlbnRMYXllckltcGw6OmNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGll
bnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGNsaWVu
dCwgY29udGVudENsaWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGVudExh
eWVySW1wbChjb250ZW50Q2xpZW50KSk7CiB9CiAKLVdlYkNvbnRlbnRMYXllckltcGw6OldlYkNv
bnRlbnRMYXllckltcGwoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xp
ZW50KiBjb250ZW50Q2xpZW50KQorV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVy
SW1wbChXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCiAgICAgOiBDb250ZW50
TGF5ZXJDaHJvbWl1bSh0aGlzKQotICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9jb250
ZW50Q2xpZW50KGNvbnRlbnRDbGllbnQpCiAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQogewpA
QCAtODAsMTAgKzc4LDQgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBtX2NvbnRlbnRD
bGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIAotdm9pZCBX
ZWJDb250ZW50TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29udGVudExheWVySW1wbC5oCmluZGV4IDEwOGRmNWUzYTI1NGVkOTU2OTQ1OTg2ZmQ2NTQxYTg0
YTk4ODY1ZmYuLmIzMGM4YWU1NjJkZDQzNjljMzkxYjgxZmI0ODY3NDc4NDhkNjNkMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAg
LTMwLDIzICszMCwyMCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewotY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CiBjbGFzcyBXZWJDb250ZW50TGF5ZXJD
bGllbnQ7CiAKIGNsYXNzIFdlYkNvbnRlbnRMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0ZShX
ZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRlKFdlYkNvbnRl
bnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAKICAgICB2b2lkIHNldERyYXdzQ29udGVu
dChib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKLSAgICBXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVu
dExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KTsKKyAgICBleHBsaWNpdCBXZWJDb250ZW50TGF5
ZXJJbXBsKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmlydHVh
bCB+V2ViQ29udGVudExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXAp
OwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAotICAgIFdlYkxheWVy
Q2xpZW50KiBtX2NsaWVudDsKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENs
aWVudDsKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcAppbmRleCA1YTA2
YzE3NmIyNTI3ZTVjZDZkZmQyMTgxMzIzODFiNTA2MDdmNTE1Li5iM2EzMzJiMmEyMTQyZjY3MzVi
Y2U4NDI4ZjA0MjlhNTY5ZWRjNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwCkBAIC0zMSw5ICszMSw5IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRlcm5h
bFRleHR1cmVMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCitXZWJFeHRlcm5h
bFRleHR1cmVMYXllciBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs
OjpjcmVhdGUoY2xpZW50KSk7CisgICAgcmV0dXJuIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyKFdl
YkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIFdlYkV4dGVy
bmFsVGV4dHVyZUxheWVyOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs
LmNwcAppbmRleCA0NDJlYWNkN2RhNGUwYWViNTE3NGM0M2RmOTEwYzgwMDA4YjE4NzQ4Li4xYjFk
YTEwM2M5ZmI2NzRjODBlODQ4Y2E5NGYzMDdkYzZiZDgxMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5j
cHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGwuaCIKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViQ2FudmFzLmgiCiAKQEAgLTM0LDE0ICszMywxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsPiBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0ZShXZWJMYXll
ckNsaWVudCogY2xpZW50KQorUGFzc1JlZlB0cjxXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw+
IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbChjbGllbnQpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbCgpKTsKIH0KIAotV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoV2Vi
TGF5ZXJDbGllbnQqIGNsaWVudCkKK1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKCkKICAgICA6IFBsdWdpbkxheWVyQ2hyb21pdW0odGhpcykK
LSAgICAsIG1fY2xpZW50KGNsaWVudCkKIHsKICAgICBzZXRGbGlwcGVkKGZhbHNlKTsKIH0KQEAg
LTYwLDEwICs1OCw0IEBAIHZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKLXZvaWQgV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAppbmRleCA0ZjlhOTg3Mjdj
OTdkOWI1Yzk1ODc0NGMyNjliODg0ZDE4NTNlNzZmLi4xYWQyYjgxOTk4ZjMwZGY2YzllY2EwOTNh
MGMyZmY1YWJlZTkxY2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaApAQCAtMzAsMjAgKzMwLDE2IEBACiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBX
ZWJMYXllckNsaWVudDsKIAogY2xhc3MgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsIDogcHVi
bGljIFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVy
RGVsZWdhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbD4gY3JlYXRlKFdlYkxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsPiBjcmVhdGUoKTsKIAogcHJvdGVjdGVk
OgotICAgIFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbChXZWJMYXllckNsaWVudCopOworICAg
IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgfldlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7Ci0KLSAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
LmNwcAppbmRleCAxNWUwNDBkOGE5NWM5MzI1MjhiYmFmYzM1MTk4ODA4OTVjOTJjYjk1Li5mOTQ3
OWM5ODRhOWY5YmEwZDZiNjIzMzRlMDk0NzhhMTM2OTczMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXIuY3BwCkBAIC03NCw5ICs3NCwxNCBAQCBTa01hdHJpeDQ0IHNrTWF0
cml4NDRGcm9tVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0
ZShXZWJMYXllckNsaWVudCogY2xpZW50KQorV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJM
YXllckNsaWVudCopCiB7Ci0gICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRl
KGNsaWVudCkpOworICAgIHJldHVybiBXZWJMYXllcjo6Y3JlYXRlKCk7Cit9CisKK1dlYkxheWVy
IFdlYkxheWVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBXZWJMYXllcihXZWJMYXllckltcGw6
OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBXZWJMYXllcjo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKaW5kZXggZGRjMDYxMTIwOTQxNmY5NTA0NTEx
NmMwYWZkNzI5NzdmOGY4YTZlNS4uYTRhMmYwOWYwOTc5OTc5NDEzNTE3YTRmYzIyZGQ4MWUzY2Jk
OTMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBA
IC0yNiwxOCArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJMYXll
ckltcGwuaCIKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCi0KIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxX
ZWJMYXllckltcGw+IFdlYkxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQp
CitQYXNzUmVmUHRyPFdlYkxheWVySW1wbD4gV2ViTGF5ZXJJbXBsOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViTGF5ZXJJbXBsKGNsaWVudCkpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViTGF5ZXJJbXBsKCkpOwogfQogCi1XZWJMYXllckltcGw6OldlYkxheWVy
SW1wbChXZWJMYXllckNsaWVudCogY2xpZW50KSA6IExheWVyQ2hyb21pdW0odGhpcyksIG1fY2xp
ZW50KGNsaWVudCkKK1dlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKCkKKyAgICA6IExheWVyQ2hy
b21pdW0odGhpcykKIHsKIH0KIApAQCAtNTUsMTAgKzU0LDQgQEAgdm9pZCBXZWJMYXllckltcGw6
OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsK
IH0KIAotdm9pZCBXZWJMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCi17Ci0gICAgaWYg
KG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVySW1wbC5oCmluZGV4IDU1OGQ0MWI1Y2RlMWE4NDg3MDJjYWQwZjM3NTEyYzg5MTE1NTExMTYu
LjAyOTg5NTlhNWQ1NjdiNjNmMTA1ZGY4N2Q0ZTg4MzhjZTZkMDNmMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0zMCwyMCArMzAsMTYgQEAKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkxh
eWVyQ2xpZW50OwogCiBjbGFzcyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXllckltcGw+IGNyZWF0ZSgpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgV2ViTGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50Kik7CisgICAgV2ViTGF5ZXJJbXBs
KCk7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKLQotICAgIFdlYkxheWVyQ2xpZW50KiBt
X2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCmluZGV4IDU5OWFhYjlk
ZGU3ZWMyZWQ5MGRjZDczYzYyZGIyN2JlODU3MjYzMDkuLmVkYzE2ZWM3YjI3MjNmYjA4ZWYzYzJk
YjYxYTlmOTMxODM1MGM0MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKQEAgLTQzLDE3ICs0MywxNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogUGFzc1JlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gV2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OmNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdl
YkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3Mp
CiB7Ci0gICAgUmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBob3N0ID0gYWRvcHRSZWYobmV3
IFdlYkxheWVyVHJlZVZpZXdJbXBsKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpKTsKKyAgICBSZWZQ
dHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+IGhvc3QgPSBhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVl
Vmlld0ltcGwoY2xpZW50LCBzZXR0aW5ncykpOwogICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgp
KQogICAgICAgICByZXR1cm4gMDsKKyAgICBob3N0LT5zZXRSb290TGF5ZXIocm9vdCk7CiAgICAg
cmV0dXJuIGhvc3Q7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXdJbXBsOjpXZWJMYXllclRyZWVWaWV3
SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290
LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpIAorV2ViTGF5ZXJU
cmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQq
IGNsaWVudCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKSAKICAg
ICA6IENDTGF5ZXJUcmVlSG9zdCh0aGlzLCBzZXR0aW5ncykKICAgICAsIG1fY2xpZW50KGNsaWVu
dCkKIHsKLSAgICBzZXRSb290TGF5ZXIocm9vdCk7CiB9CiAKIFdlYkxheWVyVHJlZVZpZXdJbXBs
Ojp+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKaW5kZXggMmUxNDVmYTcxZWY5Yzk4MDhhNzBlOTky
MTkyNWU2MTlkYjRkYWMwMi4uMzgxMWUwOTNlNWYzYTFhNWM3Y2MxMzMzNzhmZjAwODY4YzZkYzU0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmll
d0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJMYXllclRyZWVWaWV3SW1wbD4gY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25z
dCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmKTsKIAog
cHJpdmF0ZToKLSAgICBXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50
KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdz
Jik7CisgICAgV2ViTGF5ZXJUcmVlVmlld0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNv
bnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJU
cmVlVmlld0ltcGwoKTsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCBlODM1YWI3ODliZmQyOWU3NGQwOGNkN2ExZmUyMTM3M2U2MDVhNTJl
Li5jNDdhN2MyOTBjNGQxMDRjZDVkN2Y5YmJhOTYwNDg3ZDhlZmQ3MjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMjYsOSArMjYsOSBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgogCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTE1NSw3ICsxNTUsNyBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKICAgICBF
WFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwogfQogCi1jbGFzcyBCbGVuZFN0YXRlVHJh
Y2tlckNvbnRleHQ6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgeworY2xhc3MgQmxl
bmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsK
IHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2Up
IHsgfQogCkBAIC0yODksNyArMjg5LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIEVYUEVDVF9UUlVFKGxh
eWVyMi0+ZHJhd24oKSk7CiB9CiAKLWNsYXNzIFJlc2hhcGVUcmFja2VyQ29udGV4dDogcHVibGlj
IE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CitjbGFzcyBSZXNoYXBlVHJhY2tlckNvbnRleHQ6
IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIFJlc2hhcGVU
cmFja2VyQ29udGV4dCgpIDogbV9yZXNoYXBlQ2FsbGVkKGZhbHNlKSB7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5k
ZXggMzZmZDdkYmQwN2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2EzMy4uZjA5Y2NjZDVjNTFj
NzU3ZmE4OWQ0MmEwM2I1NWFhNDFkYzUwODRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiwxMCArMjYsMTAg
QEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiQ29tcG9z
aXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAi
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIk1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5o
IgpAQCAtMTAzLDcgKzEwMyw5IEBAIGNsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0xheWVy
VHJlZUhvc3Q+IGNyZWF0ZShUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBD
Q1NldHRpbmdzJiBzZXR0aW5ncykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TW9ja0xheWVyVHJlZUhvc3QodGVzdEhvb2tzLCBjbGllbnQsIHJvb3RMYXllciwgc2V0dGluZ3Mp
KTsKKyAgICAgICAgUmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBob3N0ID0gYWRvcHRSZWYobmV3
IE1vY2tMYXllclRyZWVIb3N0KHRlc3RIb29rcywgY2xpZW50LCBzZXR0aW5ncykpOworICAgICAg
ICBob3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgcmV0dXJuIGhvc3QucmVs
ZWFzZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBj
bGllbnQpCkBAIC0xMTIsMTEgKzExNCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIE1vY2tMYXllclRyZWVIb3N0KFRlc3RIb29rcyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNv
bnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgIE1vY2tMYXllclRyZWVIb3N0KFRlc3RIb29r
cyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0
aW5ncyYgc2V0dGluZ3MpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwgc2V0dGlu
Z3MpCiAgICAgICAgICwgbV90ZXN0SG9va3ModGVzdEhvb2tzKQogICAgIHsKLSAgICAgICAgc2V0
Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGluaXRpYWxpemUo
KTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAgICAgfQpAQCAtMTI0LDI0ICsxMjUs
NiBAQCBwcml2YXRlOgogICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7CiB9OwogCi0vLyBUZXN0
IHN0dWIgZm9yIFdlYkdyYXBoaWNzQ29udGV4dDNELiBSZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVl
ZGVkIGZvciBjb21wb3NpdG9yIGluaXRpYWxpemF0aW9uLgotY2xhc3MgQ29tcG9zaXRvck1vY2tX
ZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Qgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3ND
b250ZXh0M0Q+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENv
bXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdM
SWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBnZXRTaGFkZXJpdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFs
dWUgPSAxOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkLCBXR0MzRGVu
dW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29t
cG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpIHsgfQotfTsKLQogLy8gSW1wbGVtZW50
YXRpb24gb2YgQ0NMYXllclRyZWVIb3N0IGNhbGxiYWNrIGludGVyZmFjZS4KIGNsYXNzIE1vY2tM
YXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CiBwdWJs
aWM6CkBAIC0xNjIsMTAgKzE0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiAgICAg
ewotICAgICAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1vY2sgPSBDb21wb3NpdG9y
TW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoKTsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQobW9jay5yZWxlYXNlKCksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21taXRBbmREcmF3RnJhbWUoKQpAQCAtNzUyLDcgKzczMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
cG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2
b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAg
ICB7CiAgICAgICAgIExheWVyQ2hyb21pdW0qIHJvb3QgPSBtX2xheWVyVHJlZUhvc3QtPnJvb3RM
YXllcigpOwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKQEAg
LTkzNyw3ICs5MTcsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgp
IHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGlj
c0NvbnRleHQzRC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Db21wb3NpdG9yRmFr
ZUdyYXBoaWNzQ29udGV4dDNELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYwODk3MzQxMzNkNzM4MGJiZmM3YWY4
NDUyMTgzNDhmYWQzNTlhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQz
RF9oCisjZGVmaW5lIENvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0RfaAorCisjaW5jbHVk
ZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNyZWF0ZUNvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCit7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyB3ZWJBdHRyczsKKyAgICB3ZWJBdHRycy5hbHBoYSA9IGF0dHJzLmFscGhh
OworCisgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQg
PSBXZWJLaXQ6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSh3ZWJB
dHRycyk7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQoCisgICAgICAgIHdlYkNvbnRleHQucmVsZWFzZSgpLCBh
dHRycywgMCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93LAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhl
clRocmVhZCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRlMTQwOWJkNDI0YjY0NzQzYjhmOTk5M2IzYzE3MmI4ZjYwYWI1MTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NvbXBvc2l0
b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmlu
ZSBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEX2gKKworI2luY2x1ZGUgIkZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGVzdCBz
dHViIGZvciBXZWJHcmFwaGljc0NvbnRleHQzRC4gUmV0dXJucyBjYW5uZWQgdmFsdWVzIG5lZWRl
ZCBmb3IgY29tcG9zaXRvciBpbml0aWFsaXphdGlvbi4KK2NsYXNzIENvbXBvc2l0b3JGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7IHJldHVybiAxOyB9
CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVNoYWRlcihXR0MzRGVudW0pIHsgcmV0dXJuIDE7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0Mz
RGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFt
aXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QoQXR0cmlidXRlcyBhdHRycykKKyAgICB7CisgICAgICAgIG1fYXR0cnMgPSBhdHRyczsKKyAg
ICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9GYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM2
ZDZiZTZlMmNjZTA0MWVhMDViNTYxYzQzYjAwMzk5ODZlZmFmYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5j
cHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFj
ZSB0ZXN0aW5nOworCitjbGFzcyBGcmFtZUNvdW50aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIEZyYW1lQ291bnRpbmdDb250ZXh0KCkg
OiBtX2ZyYW1lKDApIHsgfQorCisgICAgLy8gVGhpcyBtZXRob2Qgd291bGQgbm9ybWFsbHkgZG8g
YSBnbFN3YXBCdWZmZXJzIHVuZGVyIHRoZSBob29kLgorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpIHsgbV9mcmFtZSsrOyB9CisKKyAgICBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJu
IG1fZnJhbWU7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZTsKK307CisKK1RFU1QoRmFr
ZUdyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuT3ZlcnJpZGVNYW51YWxseSkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50aW5nQ29udGV4dCgp
KSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgIEZy
YW1lQ291bnRpbmdDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxGcmFtZUNvdW50
aW5nQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNz
Q29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7
IGkrKykgeworICAgICAgICBjb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDEpOworICAgICAg
ICBjb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgIH0KKyAgICBjb250ZXh0LT5maW5pc2go
KTsKKworICAgIEVYUEVDVF9FUSgxMCwgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKK30KKwor
CitjbGFzcyBHTW9ja0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsK
K3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAoZ2V0RXJyb3IsIFdHQzNEZW51bSgpKTsKK307CisK
K1RFU1QoRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuVXNlR01vY2spCit7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgR01vY2tDb250ZXh0KCkpLCBhdHRy
cywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgR01vY2tDb250
ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxHTW9ja0NvbnRleHQqPihHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgp
KSk7CisKKyAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZ2V0RXJyb3IoKSkKKyAgICAgICAg
ICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oMzE0KSk7CisKKyAgICAvLyBJdCdzIE9LIHRvIGNh
bGwgbWV0aG9kcyBHTW9jayBkb2Vzbid0IGtub3cgYWJvdXQuCisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBtb2NrZWQgbWV0aG9kIGlz
IHJldHVybmluZyBhcyBpbnRlbmRlZC4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKysp
CisgICAgICAgIEVYUEVDVF9FUSgoaW50KWNvbnRleHQtPmdldEVycm9yKCksIDMxNCk7Cit9CisK
K2NsYXNzIENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzIDogcHVibGljIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVu
dHMoKSA6IG1fbWFrZUN1cnJlbnRDb3VudCgwKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNv
bnRleHRDdXJyZW50KCkKKyAgICB7CisgICAgICAgIG1fbWFrZUN1cnJlbnRDb3VudCsrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaW50IG1ha2VDdXJyZW50Q291bnQoKSB7IHJl
dHVybiBtX21ha2VDdXJyZW50Q291bnQ7IH0KK3ByaXZhdGU6CisgICAgaW50IG1fbWFrZUN1cnJl
bnRDb3VudDsKK307CisKKworVEVTVChGYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LCBDb250ZXh0
Rm9yVGhpc1RocmVhZFNob3VsZE1ha2VDdXJyZW50KQoreworICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdl
YkNvbnRleHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKCkpLCBh
dHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgRVhQRUNU
X1RSVUUoY29udGV4dCk7CisgICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMmIG1vY2tD
b250ZXh0ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKj4oR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4
dC5nZXQoKSkpOworICAgIEVYUEVDVF9FUSgxLCBtb2NrQ29udGV4dC5tYWtlQ3VycmVudENvdW50
KCkpOworfQorCitURVNUKEZha2VHcmFwaGljc0NvbnRleHQzRFRlc3QsIENvbnRleHRGb3JBbm90
aGVyVGhyZWFkU2hvdWxkTm90TWFrZUN1cnJlbnQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChhZG9wdFB0cihuZXcgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMoKSksIGF0
dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250ZXh0KTsKKyAgICBDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cyYgbW9j
a0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8Q29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMqPihH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250
ZXh0LmdldCgpKSk7CisgICAgRVhQRUNUX0VRKDAsIG1vY2tDb250ZXh0Lm1ha2VDdXJyZW50Q291
bnQoKSk7Cit9CisKK2NsYXNzIENvbnRleHRXaXRoTWFrZUN1cnJlbnRUaGF0RmFpbHMgOiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBDb250ZXh0V2l0aE1h
a2VDdXJyZW50VGhhdEZhaWxzKCkgeyB9CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitURVNUKEZha2VHcmFwaGljc0NvbnRleHQz
RFRlc3QsIENvbnRleHRGb3JUaGlzVGhyZWFkRmFpbHNXaGVuTWFrZUN1cnJlbnRGYWlscykKK3sK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBDb250ZXh0V2l0aE1h
a2VDdXJyZW50VGhhdEZhaWxzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9u
VGhpc1RocmVhZCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2YwNjUxYjc3MDMyYmQ4MGU1ODNjNjY4Mjc3NDYyODg2MDU1ZGRiOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNELmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZha2VXZWJH
cmFwaGljc0NvbnRleHQzRF9oCisjZGVmaW5lIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRF9oCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkdy
YXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBXZWJHcmFwaGlj
c0NvbnRleHQzRCBiYXNlIGNsYXNzIGZvciB1c2UgaW4gV2ViS2l0IHVuaXQgdGVzdHMuCisvLyBB
bGwgb3BlcmF0aW9ucyBhcmUgbm8tb3BzIChyZXR1cm5pbmcgMCBpZiBuZWNlc3NhcnkpLgorY2xh
c3MgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFdlYkdyYXBoaWNzQ29udGV4dDNE
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShBdHRyaWJ1dGVzLCBXZWJW
aWV3KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvV2ViVmlldykgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBo
ZWlnaHQoKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHJlYWRCYWNrRnJhbWVidWZm
ZXIodW5zaWduZWQgY2hhciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyU2l6ZSwgV2ViR0xJZCBmcmFt
ZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBXZWJHTElkIGdldFBsYXRmb3JtVGV4dHVyZUlkKCkgeyByZXR1cm4gMDsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcihXR0MzRGVudW0pIHsg
fQorCisgICAgdmlydHVhbCBib29sIGlzQ29udGV4dExvc3QoKSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oV0dDM0RlbnVtIHRh
cmdldCwgV0dDM0RpbnRwdHIgb2Zmc2V0LCBXR0MzRHNpemVpcHRyIHNpemUsIFdHQzNEZW51bSBh
Y2Nlc3MpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXBCdWZmZXJTdWJEYXRh
Q0hST01JVU0oY29uc3Qgdm9pZCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCogbWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4
b2Zmc2V0LCBXR0MzRGludCB5b2Zmc2V0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhl
aWdodCwgV0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNEZW51bSBhY2Nlc3Mp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0oY29uc3Qgdm9pZCopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlDSFJP
TUlVTShib29sIHZpc2libGUpIHsgfQorCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UmVxdWVz
dGFibGVFeHRlbnNpb25zQ0hST01JVU0oKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0RXh0ZW5zaW9uQ0hST01JVU0oY29uc3QgY2hhciopIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZlckNIUk9NSVVNKFdHQzNEaW50IHNyY1gwLCBX
R0MzRGludCBzcmNZMCwgV0dDM0RpbnQgc3JjWDEsIFdHQzNEaW50IHNyY1kxLCBXR0MzRGludCBk
c3RYMCwgV0dDM0RpbnQgZHN0WTAsIFdHQzNEaW50IGRzdFgxLCBXR0MzRGludCBkc3RZMSwgV0dD
M0RiaXRmaWVsZCBtYXNrLCBXR0MzRGVudW0gZmlsdGVyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwg
V0dDM0RzaXplaSBzYW1wbGVzLCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEc2l6ZWkg
d2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVU
ZXh0dXJlKFdHQzNEZW51bSB0ZXh0dXJlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU2hh
ZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IFdHQzNEY2hhciogbmFtZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIoV0dD
M0RlbnVtIHRhcmdldCwgV2ViR0xJZCBidWZmZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5k
RnJhbWVidWZmZXIoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGJpbmRSZW5kZXJidWZmZXIoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJ
ZCByZW5kZXJidWZmZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShXR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTElkIHRleHR1cmUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBibGVuZENv
bG9yKFdHQzNEY2xhbXBmIHJlZCwgV0dDM0RjbGFtcGYgZ3JlZW4sIFdHQzNEY2xhbXBmIGJsdWUs
IFdHQzNEY2xhbXBmIGFscGhhKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvbihX
R0MzRGVudW0gbW9kZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0
ZShXR0MzRGVudW0gbW9kZVJHQiwgV0dDM0RlbnVtIG1vZGVBbHBoYSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGJsZW5kRnVuYyhXR0MzRGVudW0gc2ZhY3RvciwgV0dDM0RlbnVtIGRmYWN0b3IpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShXR0MzRGVudW0gc3JjUkdCLCBX
R0MzRGVudW0gZHN0UkdCLCBXR0MzRGVudW0gc3JjQWxwaGEsIFdHQzNEZW51bSBkc3RBbHBoYSkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIFdHQzNEZW51bSB1c2FnZSkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1YkRhdGEoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnRw
dHIgb2Zmc2V0LCBXR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQorCisg
ICAgdmlydHVhbCBXR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhXR0MzRGVudW0gdGFy
Z2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoV0dD
M0RiaXRmaWVsZCBtYXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihXR0MzRGNs
YW1wZiByZWQsIFdHQzNEY2xhbXBmIGdyZWVuLCBXR0MzRGNsYW1wZiBibHVlLCBXR0MzRGNsYW1w
ZiBhbHBoYSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoV0dDM0RjbGFtcGYgZGVw
dGgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwoV0dDM0RpbnQgcykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNvbG9yTWFzayhXR0MzRGJvb2xlYW4gcmVkLCBXR0MzRGJvb2xlYW4g
Z3JlZW4sIFdHQzNEYm9vbGVhbiBibHVlLCBXR0MzRGJvb2xlYW4gYWxwaGEpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBs
ZXZlbCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNp
emVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBXR0Mz
RGludCB5b2Zmc2V0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0Rl
bnVtIGZvcm1hdCwgV0dDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGlu
dCBsZXZlbCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRGludCB4LCBXR0MzRGludCB5
LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQoV0dDM0RlbnVtIHRhcmdldCwg
V0dDM0RpbnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNE
aW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UoV0dDM0RlbnVtIG1vZGUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkZXB0aEZ1bmMoV0dDM0RlbnVtIGZ1bmMpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZXB0aE1hc2soV0dDM0Rib29sZWFuIGZsYWcpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXB0
aFJhbmdlKFdHQzNEY2xhbXBmIHpOZWFyLCBXR0MzRGNsYW1wZiB6RmFyKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKFdHQzNEZW51bSBjYXApIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoV0dDM0R1aW50IGluZGV4KSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhXR0MzRGVudW0gbW9kZSwgV0dDM0RpbnQgZmlyc3Qs
IFdHQzNEc2l6ZWkgY291bnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoV0dD
M0RlbnVtIG1vZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0
ciBvZmZzZXQpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGVuYWJsZShXR0MzRGVudW0gY2FwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoV0dDM0R1aW50IGlu
ZGV4KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGZsdXNoKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKFdH
QzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50LCBXR0MzRGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBXZWJHTElkIHJlbmRlcmJ1ZmZlcikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZTJEKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50
LCBXR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUsIFdHQzNEaW50IGxldmVsKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKFdHQzNEZW51bSBtb2RlKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoV0dDM0RlbnVtIHRhcmdldCkgeyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0R1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIFdHQzNEdWludCBpbmRleCwgQWN0aXZlSW5m
byYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhXZWJHTElkIHByb2dyYW0sIFdHQzNEc2l6ZWkgbWF4Q291bnQsIFdHQzNEc2l6ZWkqIGNvdW50
LCBXZWJHTElkKiBzaGFkZXJzKSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEaW50IGdldEF0dHJpYkxv
Y2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dDM0RjaGFyKiBuYW1lKSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KFdHQzNEZW51bSBwbmFtZSwgV0dDM0Ri
b29sZWFuKiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2
KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0K
KyAgICB2aXJ0dWFsIEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSB7IHJldHVybiBt
X2F0dHJzOyB9CisgICAgdmlydHVhbCBXR0MzRGVudW0gZ2V0RXJyb3IoKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dihXR0MzRGVudW0gcG5hbWUsIFdHQzNEZmxvYXQq
IHZhbHVlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIGF0dGFjaG1lbnQsIFdHQzNEZW51
bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRl
Z2VydihXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChwbmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSkK
KyAgICAgICAgICAgICp2YWx1ZSA9IDEwMjQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGdl
dFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHBuYW1lID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpMSU5LX1NUQVRVUykKKyAgICAgICAgICAgICp2YWx1ZSA9IDE7CisgICAgfQorCisgICAg
dmlydHVhbCBXZWJTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xJZCBwcm9ncmFtKSB7IHJl
dHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1
ZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIsIFdH
QzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHBuYW1l
ID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUykKKyAgICAgICAg
ICAgICp2YWx1ZSA9IDE7CisgICAgfQorCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hhZGVy
SW5mb0xvZyhXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKworICAgIHZp
cnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikgeyByZXR1cm4g
V2ViU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVt
IG5hbWUpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBh
cmFtZXRlcmZ2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCog
dmFsdWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihXR0MzRGVudW0g
dGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBX
R0MzRGZsb2F0KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJH
TElkIHByb2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGludCogdmFsdWUpIHsgfQorICAg
IHZpcnR1YWwgV0dDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29u
c3QgV0dDM0RjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFZl
cnRleEF0dHJpYmZ2KFdHQzNEdWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZsb2F0
KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KFdHQzNEdWlu
dCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgfQorICAgIHZpcnR1
YWwgV0dDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoV0dDM0R1aW50IGluZGV4LCBX
R0MzRGVudW0gcG5hbWUpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBoaW50KFdH
QzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBtb2RlKSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9v
bGVhbiBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIFdHQzNEYm9vbGVhbiBpc0VuYWJsZWQoV0dDM0RlbnVtIGNhcCkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMSWQgZnJhbWVi
dWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNQcm9n
cmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdHQzNE
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihXZWJHTElkIHJlbmRlcmJ1ZmZlcikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTElkIHNoYWRlcikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1RleHR1cmUoV2Vi
R0xJZCB0ZXh0dXJlKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lk
dGgoV0dDM0RmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMSWQg
cHJvZ3JhbSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBpeGVsU3RvcmVpKFdHQzNEZW51bSBwbmFt
ZSwgV0dDM0RpbnQgcGFyYW0pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KFdH
QzNEZmxvYXQgZmFjdG9yLCBXR0MzRGZsb2F0IHVuaXRzKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCByZWFkUGl4ZWxzKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdH
QzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgdm9pZCog
cGl4ZWxzKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKSB7
IH0KKworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKFdHQzNEZW51bSB0YXJn
ZXQsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXpl
aSBoZWlnaHQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3ZlcmFnZShXR0MzRGNsYW1w
ZiB2YWx1ZSwgV0dDM0Rib29sZWFuIGludmVydCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaXNz
b3IoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBo
ZWlnaHQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIs
IGNvbnN0IFdHQzNEY2hhciogc3RyaW5nKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1
bmMoV0dDM0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJlZiwgV0dDM0R1aW50IG1hc2spIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKFdHQzNEZW51bSBmYWNlLCBXR0MzRGVu
dW0gZnVuYywgV0dDM0RpbnQgcmVmLCBXR0MzRHVpbnQgbWFzaykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHN0ZW5jaWxNYXNrKFdHQzNEdWludCBtYXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3Rl
bmNpbE1hc2tTZXBhcmF0ZShXR0MzRGVudW0gZmFjZSwgV0dDM0R1aW50IG1hc2spIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoV0dDM0RlbnVtIGZhaWwsIFdHQzNEZW51bSB6ZmFpbCwg
V0dDM0RlbnVtIHpwYXNzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUo
V0dDM0RlbnVtIGZhY2UsIFdHQzNEZW51bSBmYWlsLCBXR0MzRGVudW0gemZhaWwsIFdHQzNEZW51
bSB6cGFzcykgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2UyRChXR0MzRGVudW0gdGFy
Z2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVp
IHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRGVudW0gZm9y
bWF0LCBXR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwg
V0dDM0RmbG9hdCBwYXJhbSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmkoV0dD
M0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCBwYXJhbSkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBs
ZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0
aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihXR0Mz
RGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTFmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RmbG9h
dCogdikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShXR0MzRGludCBsb2NhdGlvbiwg
V0dDM0RpbnQgeCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaXYoV0dDM0RpbnQgbG9j
YXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEaW50KiB2KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTJmKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdHQzNE
ZmxvYXQgeSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMmkoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50
IHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KFdHQzNEaW50IGxvY2F0aW9uLCBX
R0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHVuaWZvcm0zZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHks
IFdHQzNEZmxvYXQgeikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYoV0dDM0RpbnQg
bG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtM2koV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdH
QzNEaW50IHksIFdHQzNEaW50IHopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KFdH
QzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9h
dCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3Vu
dCwgY29uc3QgV0dDM0RmbG9hdCogdikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShX
R0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RpbnQgeiwgV0dD
M0RpbnQgdykgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEaW50KiB2KSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3Vu
dCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0Mz
RHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2
YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV0dDM0RpbnQgbG9j
YXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdH
QzNEZmxvYXQqIHZhbHVlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdM
SWQgcHJvZ3JhbSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElk
IHByb2dyYW0pIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKFdHQzNEdWlu
dCBpbmRleCwgV0dDM0RmbG9hdCB4KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmli
MWZ2KFdHQzNEdWludCBpbmRleCwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWVzKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYoV0dDM0R1aW50IGluZGV4LCBXR0MzRGZsb2F0IHgs
IFdHQzNEZmxvYXQgeSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdihXR0Mz
RHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHZlcnRleEF0dHJpYjNmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZs
b2F0IHksIFdHQzNEZmxvYXQgeikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNm
dihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4LCBX
R0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdmVydGV4QXR0cmliNGZ2KFdHQzNEdWludCBpbmRleCwgY29uc3QgV0dDM0RmbG9hdCog
dmFsdWVzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihXR0MzRHVp
bnQgaW5kZXgsIFdHQzNEaW50IHNpemUsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGJvb2xlYW4gbm9y
bWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXR0MzRHNpemVp
IHN0cmlkZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3
cG9ydChXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVp
IGhlaWdodCkgeyB9CisKKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlQnVmZmVyKCkgeyByZXR1
cm4gMTsgfQorICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVGcmFtZWJ1ZmZlcigpIHsgcmV0dXJu
IDE7IH0KKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0K
KyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUmVuZGVyYnVmZmVyKCkgeyByZXR1cm4gMTsgfQor
ICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVTaGFkZXIoV0dDM0RlbnVtKSB7IHJldHVybiAxOyB9
CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiAxOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMSWQpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTElkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UHJvZ3JhbShXZWJHTElkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVy
KFdlYkdMSWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xJZCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xJZCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdGV4U3RvcmFnZTJERVhUKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVs
cywgV0dDM0R1aW50IGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0dDM0RpbnQgd2lkdGgsIFdHQzNEaW50IGhlaWdodCkgeyB9CisKK3Byb3RlY3RlZDoK
KyAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDI4NjY1YWE3NzZi
Y2FlMDFjZjBiODg1ZmVkNWM1YTVjOGVkMzE4ZDAuLjE2MGMwM2ZiY2UzYzI4NzdmOTQ1ODliZDBi
YTU5YmFiY2U4MGE3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiw5NCArMjYsODYgQEAKIAogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1
ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCisjaW5jbHVkZSAi
V2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgOjp0ZXN0aW5nOjpN
b2NrOwogdXNpbmcgOjp0ZXN0aW5nOjpfOwogdXNpbmcgOjp0ZXN0aW5nOjpBdExlYXN0OwogdXNp
bmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7CiAKLSNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKGRlbGVnYXRlLCBudW1UaW1lc0V4cGVjdGVkTm90aWZ5U3luYywg
Y29kZVRvVGVzdCkgXAotICAgIEVYUEVDVF9DQUxMKChkZWxlZ2F0ZSksIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcygobnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMpKTsgXAotICAgIGNvZGVU
b1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCYoZGVsZWdhdGUp
KQorI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUihu
dW1UaW1lc0V4cGVjdGVkU2V0TmVlZHNDb21taXQsIGNvZGVUb1Rlc3QpIGRvIHsgXAorICAgICAg
ICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcygo
bnVtVGltZXNFeHBlY3RlZFNldE5lZWRzQ29tbWl0KSk7ICAgICAgXAorICAgICAgICBjb2RlVG9U
ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucyhtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisgICAKIAogbmFtZXNwYWNl
IHsKIAotY2xhc3MgTW9ja0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsK
K2NsYXNzIEZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBi
b29sKCkpOwotICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKLSAg
ICBNT0NLX01FVEhPRDIocGFpbnRDb250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JikpOwotICAgIE1PQ0tfTUVUSE9EMChub3RpZnlTeW5jUmVxdWlyZWQsIHZvaWQo
KSk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KGJvb2wgc3VjY2VzcykgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFt
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyB9CisK
KyAgICAvLyBVc2VkIG9ubHkgaW4gdGhlIHNpbmdsZS10aHJlYWRlZCBwYXRoLgorICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQogfTsKIAotY2xhc3MgTW9ja0xheWVyUGFp
bnRlckNocm9taXVtIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsg
fQotfTsKLQotY2xhc3MgTW9ja05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA6IHB1YmxpYyBOb25D
b21wb3NpdGVkQ29udGVudEhvc3QgeworY2xhc3MgTW9ja0NDTGF5ZXJUcmVlSG9zdCA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tO
b25Db21wb3NpdGVkQ29udGVudEhvc3Q+IGNyZWF0ZSgpCisgICAgTW9ja0NDTGF5ZXJUcmVlSG9z
dCgpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KCZtX2Zha2VDbGllbnQsIENDU2V0dGluZ3Mo
KSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja05vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdCk7CisgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAKLSAgICBNT0NLX01F
VEhPRDEobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSk7Cisg
ICAgTU9DS19NRVRIT0QwKHNldE5lZWRzQ29tbWl0LCB2b2lkKCkpOwogCiBwcml2YXRlOgotICAg
IE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhvc3QoKQotICAgICAgICA6IE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdChhZG9wdFB0cihuZXcgTW9ja0xheWVyUGFpbnRlckNocm9taXVtKCkpKQotICAg
IHsKLSAgICAgICAgbV9zY3JvbGxMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKLSAg
ICAgICAgc2V0U2Nyb2xsTGF5ZXIobV9zY3JvbGxMYXllci5nZXQoKSk7Ci0gICAgfQotICAgIE93
blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOworICAgIEZha2VDQ0xheWVyVHJlZUhv
c3RDbGllbnQgbV9mYWtlQ2xpZW50OwogfTsKIAotY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yIDogcHVibGljIExheWVyQ2hyb21pdW0geworY2xhc3MgTW9ja0xh
eWVyUGFpbnRlckNocm9taXVtIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3Io
Q0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICAgICAgOiBMYXllckNocm9taXVtKGRlbGVn
YXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5MYXllckNocm9taXVtV2l0aEluc3Ry
dW1lbnRlZERlc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc19udW1JbnN0YW5jZXNEZXN0cm95
ZWQrKzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IGdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgp
IHsgcmV0dXJuIHNfbnVtSW5zdGFuY2VzRGVzdHJveWVkOyB9Ci0gICAgc3RhdGljIHZvaWQgcmVz
ZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSB7IHNfbnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsg
fQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbnQgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7
IH0KIH07CiAKLWludCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OnNf
bnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bVRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIFNldFVw
KCkKICAgICB7Ci0gICAgICAgIC8vIG1fc2lsZW50RGVsZWdhdGUgaXMgaW5pdGlhbGl6ZWQgdG8g
YmUganVzdCBhIHN0dWIgYW5kIHdpbGwKLSAgICAgICAgLy8gbm90IHByaW50IGFueSB3YXJuaW5n
cy4gSXQgaXMgdXNlZCB3aGVuIHdlIGFyZSBub3Qgd29ycmllZAotICAgICAgICAvLyBhYm91dCB0
ZXN0aW5nIGhvdyB0aGUgZGVsZWdhdGUgaXMgY2FsbGVkLgotICAgICAgICBFWFBFQ1RfQ0FMTCht
X3NpbGVudERlbGVnYXRlLCBkcmF3c0NvbnRlbnQoKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAg
ICAgICBFWFBFQ1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBwcmVzZXJ2ZXMzRCgpKS5UaW1lcyhB
bnlOdW1iZXIoKSk7Ci0gICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIHBhaW50
Q29udGVudHMoXywgXykpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICAgICAgRVhQRUNUX0NBTEwo
bV9zaWxlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEFueU51bWJlcigp
KTsKLQotICAgICAgICAvLyBTdGF0aWMgdmFyaWFibGVzIG5lZWQgdG8gYmUgcmVzZXQgZm9yIGV2
ZXJ5IG5ldyB0ZXN0IGNhc2UKLSAgICAgICAgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWRE
ZXN0cnVjdG9yOjpyZXNldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpOworICAgICAgICAvLyBJbml0
aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCisgICAgICAgIFdlYktpdDo6V2ViQ29t
cG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gYWRvcHRS
ZWYobmV3IE1vY2tDQ0xheWVyVHJlZUhvc3QpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBU
ZWFyRG93bigpCisgICAgeworICAgICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9u
cyhtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRy
ZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1f
cGFyZW50LmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGQxLmNsZWFyKCk7CisgICAgICAgIG1fY2hp
bGQyLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGQzLmNsZWFyKCk7CisgICAgICAgIG1fZ3JhbmRD
aGlsZDEuY2xlYXIoKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMi5jbGVhcigpOworICAgICAgICBt
X2dyYW5kQ2hpbGQzLmNsZWFyKCk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290
TGF5ZXIoMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAgICBXZWJL
aXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiAgICAgfQogCiAgICAgdm9pZCB2ZXJpZnlU
ZXN0VHJlZUluaXRpYWxTdGF0ZSgpIGNvbnN0CkBAIC0xNDEsMTYyICsxMzMsMTEyIEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKQogICAgIHsKLSAgICAgICAg
bV9wYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fcGFyZW50RGVsZWdhdGUpOwotICAg
ICAgICBtX2NoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7
Ci0gICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVn
YXRlKTsKLSAgICAgICAgbV9jaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50
RGVsZWdhdGUpOwotICAgICAgICBtX2dyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICAgICAgbV9ncmFuZENoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fZ3JhbmRDaGlsZDMgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotCi0gICAgICAgIEVYUEVD
VF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygzKTsK
KyAgICAgICAgbV9wYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1f
Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX2NoaWxkMiA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZDMgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgICAgIG1fZ3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisKKyAg
ICAKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQo
KSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgICAgICBtX3BhcmVudC0+c2V0TGF5ZXJUcmVlSG9z
dChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworCiAgICAgICAgIG1fcGFyZW50LT5hZGRDaGlsZCht
X2NoaWxkMSk7CiAgICAgICAgIG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMik7CiAgICAgICAg
IG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMyk7Ci0gICAgICAgIE1vY2s6OlZlcmlmeUFuZENs
ZWFyRXhwZWN0YXRpb25zKCZtX3BhcmVudERlbGVnYXRlKTsKICAgICAgICAgbV9jaGlsZDEtPmFk
ZENoaWxkKG1fZ3JhbmRDaGlsZDEpOwogICAgICAgICBtX2NoaWxkMS0+YWRkQ2hpbGQobV9ncmFu
ZENoaWxkMik7CiAgICAgICAgIG1fY2hpbGQyLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQzKTsKIAor
ICAgICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtX2xheWVyVHJlZUhvc3Qu
Z2V0KCkpOworCiAgICAgICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCk7CiAgICAgfQog
Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0
ZTsKKyAgICBSZWZQdHI8TW9ja0NDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBtX2No
aWxkMywgbV9ncmFuZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKIH07CiAK
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgYmFzaWNDcmVhdGVBbmREZXN0cm95KQogewotICAg
IE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKLQotICAgIC8vIG5vdGlmeVN5bmNSZXF1
aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhlIGxheWVyIGlzIGNyZWF0
ZWQgb3IgZGVzdHJveWVkLgotICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKDApOwotCi0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3Rvcj4gdGVzdExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbW9ja0RlbGVnYXRlKSk7Ci0gICAgQVNTRVJU
X1RSVUUodGVzdExheWVyLmdldCgpKTsKLQotICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91
bGQgYWxzbyBub3QgYmUgY2FsbGVkIG9uIHRoZSBkZXN0cnVjdG9yIHdoZW4gdGhlIGxheWVyIGhh
cyBubyBjaGlsZHJlbi4KLSAgICAvLyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXIg
aXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbW9jayBkZWxlZ2F0ZS4KLSAgICBBU1NFUlRfRVEoMCwg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNE
ZXN0cm95ZWQoKSk7Ci0gICAgdGVzdExheWVyLnJlbGVhc2UoKTsKLSAgICBBU1NFUlRfRVEoMSwg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNE
ZXN0cm95ZWQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RMYXllciA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXIpOworICAgIAor
ICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVz
KDApOworICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0
KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGFkZEFuZFJlbW92ZUNoaWxkKQog
ewotICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwotICAgIE1vY2tMYXllckRl
bGVnYXRlIGNoaWxkRGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CiAKICAgICAvLyBVcG9uIGNyZWF0aW9uLCBsYXllcnMgc2hvdWxkIG5vdCBoYXZl
IGNoaWxkcmVuIG9yIHBhcmVudC4KICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigw
KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5w
YXJlbnQoKSk7CiAKLSAgICAvLyBQYXJlbnQgY2FsbHMgbm90aWZ5U3luY1JlcXVpcmVkIGV4YWN0
bHkgb25jZSB3aGVuIGFkZGluZyBjaGlsZC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQp
KTsKKyAgICBwYXJlbnQtPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsK
KworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQu
Z2V0KCksIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQo
KSwgY2hpbGQtPnBhcmVudCgpKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZC0+
cm9vdExheWVyKCkpOwogCi0gICAgLy8gcmVtb3ZlRnJvbVBhcmVudCBzaG91bGQgY2F1c2UgdGhl
IHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLgot
ICAgIC8vIFRoZSBjaGlsZERlbGVnYXRlIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgcmVtYWlu
IHVuLXVzZWQuCi0gICAgRVhQRUNUX0NBTEwoY2hpbGREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVp
cmVkKCkpLlRpbWVzKDApOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgY2hpbGQtPnJl
bW92ZUZyb21QYXJlbnQoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
RGVzdHJ1Y3RvclNlbWFudGljcykKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxl
Z2F0ZTsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRlOwotICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I+IHBhcmVudCA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJnBhcmVudERlbGVn
YXRlKSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBj
aGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKworICAgIHBhcmVudC0+c2V0TGF5ZXJU
cmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogCiAgICAgLy8gU2V0IHVwIGluaXRpYWwg
dGVzdCBjb25kaXRpb25zCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5hZGRD
aGlsZChjaGlsZCkpOwogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5wYXJlbnQoKSk7CiAKLSAgICAv
LyBXaGVuIGJlaW5nIGRlc3Ryb3llZCwgbm90aWZ5U3luY1JlcXVpcmVkIGlzIGNhbGxlZCBvbmNl
IGZvciB0aGUgcGFyZW50LCBiZWNhdXNlIGl0IGhhcyBvbmUgY2hpbGQsCisgICAgLy8gV2hlbiBi
ZWluZyBkZXN0cm95ZWQsIHNldE5lZWRzQ29tbWl0IGlzIGNhbGxlZCBvbmNlIGZvciB0aGUgcGFy
ZW50LCBiZWNhdXNlIGl0IGhhcyBvbmUgY2hpbGQsCiAgICAgLy8gYnV0IHNob3VsZCBub3QgYmUg
Y2FsbGVkIGZvciB0aGUgY2hpbGQgd2hpY2ggaGFzIG5vIGNoaWxkcmVuLgotICAgIEVYUEVDVF9D
QUxMKHBhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7Ci0gICAg
RVhQRUNUX0NBTEwoY2hpbGREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDAp
OworICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRp
bWVzKDEpOwogCi0gICAgQVNTRVJUX0VRKDAsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVk
RGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOwotICAgIHBhcmVudC5yZWxl
YXNlKCk7Ci0gICAgQVNTRVJUX0VRKDEsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOworICAgIHBhcmVudC5jbGVhcigp
OwogCiAgICAgLy8gQ2hpbGQgc2hvdWxkIGhhdmUgYmVlbiB1bi1wYXJlbnRlZCBjb3JyZWN0bHks
IGJ1dCBub3QgeWV0IGRlc3Ryb3llZCBzaW5jZSB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0Lgog
ICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+cGFyZW50KCkpOwogfQogCi1URVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIHZlcmlmeURlc3RydWN0b3JEb2VzTm90TGVhaykKLXsKLSAgICAvLyBJbiB0aGlz
IHRlc3Qgd2UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSBhIHNwZWNpYWwgc3ViY2xhc3Mgb2YKLSAg
ICAvLyBMYXllckNocm9taXVtIHNvIHdlIGNhbiB0cmFjayB0aGUgbnVtYmVyIG9mIGRlc3RydWN0
b3JzIGNhbGxlZC4KLQotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERl
c3RydWN0b3I+IHBhcmVudCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMywgZ3JhbmRDaGlsZDEsIGdy
YW5kQ2hpbGQyLCBncmFuZENoaWxkMzsKLSAgICBwYXJlbnQgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0g
ICAgY2hpbGQxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGNoaWxkMiA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUp
KTsKLSAgICBjaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50
ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0gICAgZ3JhbmRDaGlsZDEgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVu
dERlbGVnYXRlKSk7Ci0gICAgZ3JhbmRDaGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0gICAgZ3Jh
bmRDaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0
cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0KLSAgICAvLyBzZXQgdXAgYSBzaW1wbGUgdHJl
ZS4KLSAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChj
aGlsZDIpOwotICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQzKTsKLSAgICBjaGlsZDEtPmFkZENo
aWxkKGdyYW5kQ2hpbGQxKTsKLSAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsKLSAg
ICBjaGlsZDItPmFkZENoaWxkKGdyYW5kQ2hpbGQzKTsKLQotICAgIC8vIENsZWFyIGFsbCB0aGUg
Y2hpbGRyZW4gUmVmUHRycyBoZXJlLiBCdXQgc2luY2UgdGhleSBhcmUgYXR0YWNoZWQgdG8gdGhl
IHRyZWUsIG5vIGRlc3RydWN0b3JzIHNob3VsZCBiZSBjYWxsZWQgeWV0LgotICAgIGNoaWxkMS5j
bGVhcigpOwotICAgIGNoaWxkMi5jbGVhcigpOwotICAgIGNoaWxkMy5jbGVhcigpOwotICAgIGdy
YW5kQ2hpbGQxLmNsZWFyKCk7Ci0gICAgZ3JhbmRDaGlsZDIuY2xlYXIoKTsKLSAgICBncmFuZENo
aWxkMy5jbGVhcigpOwotCi0gICAgLy8gcmVsZWFzaW5nIHRoZSBwYXJlbnQgc2hvdWxkIGNhdXNl
IGFsbCBkZXN0cnVjdG9ycyB0byBiZSBpbnZva2VkLgotICAgIEFTU0VSVF9FUSgwLCBMYXllckNo
cm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3ll
ZCgpKTsKLSAgICBwYXJlbnQucmVsZWFzZSgpOwotICAgIEFTU0VSVF9FUSg3LCBMYXllckNocm9t
aXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgp
KTsKLX0KLQogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZCkKIHsKLSAgICBN
b2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZTsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBj
aGlsZERlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPnBhcmVudCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVt
PmNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+Y2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERl
bGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGlsZDMgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPmNoaWxk
NCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOwogCi0gICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIHBhcmVudC0+c2V0TGF5ZXJUcmVlSG9zdChtX2xh
eWVyVHJlZUhvc3QuZ2V0KCkpOwogCi0gICAgLy8gVGhlIGNoaWxkIGRlbGVnYXRlIG5vdGlmeVN5
bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGluc2VydGluZy4KLSAgICBFWFBF
Q1RfQ0FMTChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7Cisg
ICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5z
aXplKCkpOwogCiAgICAgLy8gQ2FzZSAxOiBpbnNlcnRpbmcgdG8gZW1wdHkgbGlzdC4KLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEs
IHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQzLCAwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDMs
IDApKTsKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50LT5jaGls
ZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigp
WzBdKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZDMtPnBhcmVudCgpKTsKIAog
ICAgIC8vIENhc2UgMjogaW5zZXJ0aW5nIHRvIGJlZ2lubmluZyBvZiBsaXN0Ci0gICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJl
bnQtPmluc2VydENoaWxkKGNoaWxkMSwgMCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRf
TkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7
CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7
CiAgICAgRVhQRUNUX0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKICAgICBFWFBF
Q1RfRVEocGFyZW50LmdldCgpLCBjaGlsZDEtPnBhcmVudCgpKTsKIAogICAgIC8vIENhc2UgMzog
aW5zZXJ0aW5nIHRvIG1pZGRsZSBvZiBsaXN0Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNo
aWxkMiwgMSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFW
SU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CiAgICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMyksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVY
UEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKGNo
aWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKQEAgLTMwNCw3ICsyNDYsNyBAQCBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydENoaWxkKQogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0
KCksIGNoaWxkMi0+cGFyZW50KCkpOwogCiAgICAgLy8gQ2FzZSA0OiBpbnNlcnRpbmcgdG8gZW5k
IG9mIGxpc3QKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFy
ZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQ0LCAzKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5pbnNl
cnRDaGlsZChjaGlsZDQsIDMpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDQpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQxLCBw
YXJlbnQtPmNoaWxkcmVuKClbMF0pOwpAQCAtMzEzLDE1ICsyNTUsMTQgQEAgVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZCkKICAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBwYXJlbnQt
PmNoaWxkcmVuKClbM10pOwogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFy
ZW50KCkpOwogCi0gICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlT
eW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBpdHMgY2hpbGRyZW4uCi0gICAgRVhQRUNUX0NBTEwo
cGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsK
KyAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1l
cyhBdExlYXN0KDEpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGls
ZFBhc3RFbmRPZkxpc3QpCiB7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0
ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBBU1NFUlRfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAKQEAg
LTM0MSw2NSArMjgyLDQwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRQ
YXN0RW5kT2ZMaXN0KQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydFNhbWVDaGls
ZFR3aWNlKQogewotICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVu
dERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKworICAgIHBhcmVudC0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhv
c3QuZ2V0KCkpOwogCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxk
MSwgMCkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJl
bnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDIsIDEpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2Vy
dENoaWxkKGNoaWxkMSwgMCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09N
TUlUX0JFSEFWSU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CiAKICAgICBB
U1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUo
KSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKICAgICBF
WFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOwogCiAgICAgLy8gSW5zZXJ0
aW5nIHRoZSBzYW1lIGNoaWxkIGFnYWluIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQgdG8gYmUgcmVt
b3ZlZCBhbmQgcmUtaW5zZXJ0ZWQgYXQgdGhlIG5ldyBsb2NhdGlvbi4KLSAgICAvLyBTbyB0aGUg
cGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHdvdWxkIGJlIGNhbGxlZCBvbmUgb3IgbW9yZSB0
aW1lcy4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50
RGVsZWdhdGUsIEF0TGVhc3QoMSksIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAxKSk7Cisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgx
KSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDEpKTsKIAogICAgIC8vIGNoaWxkMSBzaG91
bGQgbm93IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgQVNTRVJUX0VRKHN0YXRpY19j
YXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9F
UShjaGlsZDIsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMSwg
cGFyZW50LT5jaGlsZHJlbigpWzFdKTsKIAotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2ls
bCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRy
ZW4KLSAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKEF0TGVhc3QoMSkpOwotfQotCi1URVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2Vy
dENoaWxkVGhhdEFscmVhZHlIYWRQYXJlbnQpCi17Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgb2xk
UGFyZW50RGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG9sZFBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmb2xkUGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdh
dGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0KLSAgICAvLyBzZXQgdXAgYW5kIHNhbml0eS1jaGVj
ayBpbml0aWFsIHRlc3QgY29uZGl0aW9ucwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihvbGRQYXJlbnREZWxlZ2F0ZSwgMSwgb2xkUGFyZW50LT5hZGRDaGlsZChj
aGlsZCkpOwotICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBvbGRQYXJlbnQt
PmNoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigw
KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNoaWxkLCBvbGRQ
YXJlbnQtPmNoaWxkcmVuKClbMF0pOwotICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNo
aWxkLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBJbnNlcnRpbmcgdG8gbmV3IHBhcmVudCBjYXVzZXMg
b2xkIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBiZSBjYWxsZWQuCi0gICAgLy8gTm90
ZSB0aGF0IGl0IGFsc28gY2F1c2VzIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBiZSBj
YWxsZWQsIGJ1dCB0aGF0IGlzIHRlc3RlZCBlbHNld2hlcmUuCi0gICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG9sZFBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmlu
c2VydENoaWxkKGNoaWxkLCAwKSk7Ci0KLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigwKSwgb2xkUGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgQVNTRVJUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwotICAgIEVYUEVD
VF9FUShjaGlsZCwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKLSAgICBFWFBFQ1RfRVEocGFyZW50
LmdldCgpLCBjaGlsZC0+cGFyZW50KCkpOworICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhv
c3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5
ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZCkKIHsKICAgICBjcmVhdGVT
aW1wbGVUZXN0VHJlZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBFWFBFQ1Rf
RkFMU0UoY2hpbGQ0LT5wYXJlbnQoKSk7CiAKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJl
cGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJlcGxh
Y2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBF
Q1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKQEAgLTQwOCw5ICszMjQs
NiBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZCkK
ICAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOwogCiAgICAg
RVhQRUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBwYXJlbnQncyBkZXN0
cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRv
dmVyIGNoaWxkcmVuCi0gICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhlclBhcmVudCkKQEAgLTQx
OCwxNCArMzMxLDE0IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0
aE5ld0NoaWxkVGhhdEhhc090aGVyUGFyZW50KQogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7
CiAKICAgICAvLyBjcmVhdGUgYW5vdGhlciBzaW1wbGUgdHJlZSB3aXRoIHRlc3RMYXllciBhbmQg
Y2hpbGQ0LgotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKICAgICB0ZXN0TGF5ZXItPmFkZENoaWxkKGNoaWxkNCk7CiAgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHRlc3RMYXllci0+Y2hpbGRyZW4oKS5zaXplKCkpOwog
ICAgIEVYUEVDVF9FUShjaGlsZDQsIHRlc3RMYXllci0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQ
RUNUX0VRKHRlc3RMYXllci5nZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CiAKLSAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFz
dCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7Cisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgx
KSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CiAKICAg
ICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBd
KTsKQEAgLTQzNyw0NyArMzUwLDM3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFj
ZUNoaWxkV2l0aE5ld0NoaWxkVGhhdEhhc090aGVyUGFyZW50KQogICAgIC8vIGFuZCBjaGlsZDIg
c2hvdWxkIG5vIGxvbmdlciBoYXZlIGEgcGFyZW50LgogICAgIEFTU0VSVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KDApLCB0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1Rf
RkFMU0UobV9jaGlsZDItPnBhcmVudCgpKTsKLQotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Ig
d2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hp
bGRyZW4KLSAgICBFWFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWly
ZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
cmVwbGFjZUNoaWxkV2l0aFNhbWVDaGlsZCkKIHsKICAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgp
OwogCi0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkIGJlY2F1
c2UgaXRzIHRoZSBzYW1lIGNoaWxkCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9j
aGlsZDIuZ2V0KCksIG1fY2hpbGQyKSk7CisgICAgLy8gc2V0TmVlZHNDb21taXQgc2hvdWxkIG5v
dCBiZSBjYWxsZWQgYmVjYXVzZSBpdHMgdGhlIHNhbWUgY2hpbGQKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxk
KG1fY2hpbGQyLmdldCgpLCBtX2NoaWxkMikpOwogCiAgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFs
U3RhdGUoKTsKLQotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5
U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KLSAgICBFWFBFQ1Rf
Q0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFz
dCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVtb3ZlQWxsQ2hpbGRyZW4p
CiB7CiAgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKIAotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3Bh
cmVudC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9O
RUVEU19DT01NSVRfQkVIQVZJT1IoMywgbV9wYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuKCkpOwog
CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIG1fcGFyZW50LT5jaGlsZHJl
bigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fY2hpbGQxLT5wYXJlbnQoKSk7CiAgICAg
RVhQRUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fY2hp
bGQzLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQgaWYgdHJ5aW5nIHRvIHJlbW92ZUFsbENoaWxkcmVuIHdoZW4gdGhlcmUgYXJlIG5v
IGNoaWxkcmVuLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
X3BhcmVudERlbGVnYXRlLCAwLCBtX3BhcmVudC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKSk7CiB9CiAK
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgc2V0Q2hpbGRyZW4pCiB7Ci0gICAgTW9ja0xheWVy
RGVsZWdhdGUgbmV3UGFyZW50RGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG9s
ZFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld1BhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgm
bmV3UGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG5l
d1BhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAotICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUp
OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBuZXdDaGlsZHJlbjsKICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQx
KTsKQEAgLTQ4OCwyNCArMzkxLDI2IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgc2V0Q2hp
bGRyZW4pCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIG5ld1BhcmVudC0+
Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNoaWxk
MS0+cGFyZW50KCkpOwogICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKKyAKKyAg
ICBuZXdQYXJlbnQtPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKIAot
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihuZXdQYXJlbnREZWxl
Z2F0ZSwgQXRMZWFzdCgxKSwgbmV3UGFyZW50LT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbikpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKEF0TGVhc3Qo
MSksIG5ld1BhcmVudC0+c2V0Q2hpbGRyZW4obmV3Q2hpbGRyZW4pKTsKIAogICAgIEFTU0VSVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBuZXdQYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsK
ICAgICBFWFBFQ1RfRVEobmV3UGFyZW50LmdldCgpLCBjaGlsZDEtPnBhcmVudCgpKTsKICAgICBF
WFBFQ1RfRVEobmV3UGFyZW50LmdldCgpLCBjaGlsZDItPnBhcmVudCgpKTsKIAotICAgIC8vIHBh
cmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJl
bW92ZXMgaXRzIGNoaWxkcmVuLgotICAgIEVYUEVDVF9DQUxMKG5ld1BhcmVudERlbGVnYXRlLCBu
b3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwo
Km1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiB9
CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgZ2V0Um9vdExheWVyQWZ0ZXJUcmVlTWFuaXB1
bGF0aW9ucykKIHsKICAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdh
dGUpOwogCi0gICAgLy8gSW4gdGhpcyB0ZXN0IGNhc2UsIHdlIGRvbid0IGNhcmUgYWJvdXQgaG93
IHRoZSBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgaXMgY2FsbGVkLgotICAgIEVYUEVDVF9D
QUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBbnlOdW1i
ZXIoKSk7CisgICAgLy8gRm9yIHRoaXMgdGVzdCB3ZSBkb24ndCBjYXJlIGFib3V0IHNldE5lZWRz
Q29tbWl0IGNhbGxzLgorICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRz
Q29tbWl0KCkpLlRpbWVzKEF0TGVhc3QoMSkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAogICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9wYXJlbnQtPnJvb3RMYXllcigpKTsKICAgICBFWFBFQ1RfRVEobV9wYXJl
bnQuZ2V0KCksIG1fY2hpbGQxLT5yb290TGF5ZXIoKSk7CkBAIC01NjAsMTAgKzQ2NSwxMSBAQCBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVj
dEJlaGF2aW9yKQogewogICAgIC8vIFRoZSBzZW1hbnRpY3MgZm9yIHNldE5lZWRzRGlzcGxheSB3
aGljaCBhcmUgdGVzdGVkIGhlcmU6CiAgICAgLy8gICAxLiBzZXRzIG5lZWRzRGlzcGxheSBmbGFn
IGFwcHJvcHJpYXRlbHkuCi0gICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlmeVN5bmNS
ZXF1aXJlZCwgZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5Lgor
ICAgIC8vICAgMi4gaW5kaXJlY3RseSBjYWxscyBzZXROZWVkc0NvbW1pdCwgZXhhY3RseSBvbmNl
IGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5LgorCisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0TGF5
ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKIAotICAgIE1vY2tM
YXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVz
dExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwogICAgIEludFNp
emUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAxLCA1MDgpOwogCiAgICAgRmxvYXRSZWN0IGRpcnR5
MSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwpAQCAtNTc0LDQ4ICs0ODAs
NDMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNl
c0NvcnJlY3RCZWhhdmlvcikKICAgICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91
bGQgbm90IGJlIGRpcnR5LgogICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxh
eSgpKTsKIAotICAgIC8vIFRoaXMgaXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0IG5vdGlmeVN5
bmNSZXF1aXJlZCBiZWhhdmlvciBpcyB2ZXJpZmllZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3Mu
Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAgIHRlc3RMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICAvLyBUaGlzIGlzIGp1
c3QgaW5pdGlhbGl6YXRpb24sIGJ1dCBzZXROZWVkc0NvbW1pdCBiZWhhdmlvciBpcyB2ZXJpZmll
ZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3MuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9O
RUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykp
OworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0TGF5
ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKICAgICBFWFBFQ1Rf
RkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUaGUgcmVhbCB0ZXN0
IGJlZ2lucyBoZXJlLgogCiAgICAgLy8gQ2FzZSAxOiBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQg
bm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXROZWVkc0Rpc3BsYXlSZWN0KGVtcHR5RGlydHlSZWN0KSk7CisgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXROZWVkc0Rp
c3BsYXlSZWN0KGVtcHR5RGlydHlSZWN0KSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+
bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gQ2FzZSAyOiBiYXNpYy4KLSAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheVJlY3QoZGlydHkxKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0
KGRpcnR5MSkpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwog
CiAgICAgLy8gQ2FzZSAzOiBhIHNlY29uZCBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0
TmVlZHNEaXNwbGF5UmVjdChkaXJ0eTIpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZGly
dHkyKSk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAg
ICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0
IGdvIGJleW9uZCBpdHMgYm91bmRzLgotICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbW9ja0RlbGVnYXRlKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRz
KSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KG91dE9mQm91bmRzRGlydHlS
ZWN0KSk7CisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHRl
c3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+
c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3Qob3V0T2ZC
b3VuZHNEaXJ0eVJlY3QpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxh
eSgpKTsKIAogICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGly
dHkgcmVjdCBhcmcuCi0gICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2Nr
RGVsZWdhdGUpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgdGVzdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOworICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCkpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5
KCkpOwotCi0gICAgLy8gQ2FzZSA2OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0
eSByZWN0IGFyZyBzaG91bGQgbm90IGNhdXNlCi0gICAgLy8gbmVlZHNEaXNwbGF5IGZsYWcgdG8g
Y2hhbmdlIGZvciBMYXllckNocm9taXVtIHdpdGggZW1wdHkgYm91bmRzLgotICAgIHRlc3RMYXll
ciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKLSAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rp
c3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rp
c3BsYXlXaXRoTnVsbERlbGVnYXRlKQogewotICAgIC8vIFdpdGhvdXQgYSBkZWxlZ2F0ZSwgdGhl
IGxheWVyIHNob3VsZCBzdGlsbCBtYXJrIGl0c2VsZiBkaXJ0eSBhcyBhcHByb3ByaWF0ZSwKLSAg
ICAvLyBhbmQgaXQgc2hvdWxkIG5vdCBjcmFzaCB0cnlpbmcgdG8gdXNlIGEgbm9uLWV4aXN0aW5n
IGRlbGVnYXRlLgogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CiAgICAgSW50U2l6ZSB0ZXN0Qm91bmRzID0gSW50U2l6ZSg1MDEs
IDUwOCk7CiAKQEAgLTYzMyw3MiArNTM0LDUwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQogCiBURVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiB7Ci0g
ICAgTW9ja0xheWVyRGVsZWdhdGUgaW5pdGlhbERlbGVnYXRlOwotICAgIE1vY2tMYXllckRlbGVn
YXRlIG1vY2tEZWxlZ2F0ZTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZpbml0aWFsRGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBkdW1teUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERl
bGVnYXRlKTsgLy8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkp
OworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7IC8vIGp1c3QgYSBkdW1teSBsYXllciBmb3IgdGhpcyB0ZXN0IGNhc2UuCiAK
ICAgICAvLyBzYW5pdHkgY2hlY2sgb2YgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbgogICAgIEVYUEVD
VF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVy
dGllcyB0aGF0IHNob3VsZCBub3QgY2FsbCBuZWVkc0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdo
ZW4gY2hhbmdlZC4KLSAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxs
ZWQsIGFuZCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIHJlbWFpbiBmYWxzZS4KLSAgICBF
WFBFQ1RfQ0FMTChpbml0aWFsRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygw
KTsgLy8gb2xkIGRlbGVnYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIHNldERlbGVnYXRlIGdp
dmVzIGEgbmV3IGRlbGVnYXRlLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RGVsZWdhdGUoJm1vY2tEZWxl
Z2F0ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0TmFtZSgiVGVzdCBMYXllciIpKTsKLSAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA0MCwgNTApKSk7Ci0gICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwg
dGVzdExheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5z
ZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdP
cGFjaXR5KDAuNWYpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoMywgMywg
OCwgOCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoMCkpOwotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAs
IHRlc3RMYXllci0+c2V0RHJhd1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7Ci0g
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MCwgdGVzdExheWVyLT5zZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoNCwg
NSwgNiwgNykpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhB
VklPUigwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNDAsIDUwKSkpOworICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0VXNlc0xheWVy
Q2xpcHBpbmcodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlU
X0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVz
dExheWVyLT5zZXREcmF3T3BhY2l0eSgwLjVmKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRDbGlwUmVjdChJbnRSZWN0
KDMsIDMsIDgsIDgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXIt
PnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOworICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0U2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOworICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUsIDYsIDcpKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gTmV4dCwgdGVzdCBwcm9wZXJ0
aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNDb21taXQgKGJ1dCBub3Qgc2V0TmVlZHNEaXNw
bGF5KQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3Rp
ZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFu
Z2UuCi0gICAgLy8gQWxsIHByb3BlcnRpZXMgbmVlZCB0byBiZSBzZXQgdG8gbmV3IHZhbHVlcyBp
biBvcmRlciBmb3Igc2V0TmVlZHNDb21taXQKLSAgICAvLyB0byBiZSBjYWxsZWQuCi0gICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsKLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50WigwLjdmKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCYWNr
Z3JvdW5kQ29sb3IoQ29sb3IoMC40ZiwgMC40ZiwgMC40ZikpKTsKLSAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TWFza0xheWVyKGR1bW15
TGF5ZXIuZ2V0KCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE9wYWNpdHkoMC41ZikpOwotICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRl
c3RMYXllci0+c2V0T3BhcXVlKHRydWUpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoNC4wZiwgOS4wZikpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFJlcGxpY2FMYXllcihk
dW1teUxheWVyLmdldCgpKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSkpOwotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0U2Nyb2xsYWJsZSh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgxMCwgMTApKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3Jt
YXRpb25NYXRyaXgoMCwgMCwgMCwgMCwgMCwgMCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldERvdWJs
ZVNpZGVkKGZhbHNlKSk7CisgICAgLy8gQWxsIHByb3BlcnRpZXMgbmVlZCB0byBiZSBzZXQgdG8g
bmV3IHZhbHVlcyBpbiBvcmRlciBmb3Igc2V0TmVlZHNDb21taXQgdG8gYmUgY2FsbGVkLgorICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXll
ci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgxLjIzZiwgNC41NmYpKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRB
bmNob3JQb2ludFooMC43ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09N
TUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDAuNGYs
IDAuNGYsIDAuNGYpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNl
dE1hc2tMYXllcihkdW1teUxheWVyLmdldCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRPcGFjaXR5KDAuNWYpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0
TGF5ZXItPnNldE9wYXF1ZSh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVE
U19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQu
MGYsIDkuMGYpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVI
QVZJT1IoMSwgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RM
YXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoMCwgMCwgMCwg
MCwgMCwgMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhB
VklPUigxLCB0ZXN0TGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0U2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQoMTAsIDEwKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRf
TkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9y
bWF0aW9uTWF0cml4KDAsIDAsIDAsIDAsIDAsIDApKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXREb3VibGVTaWRlZChm
YWxzZSkpOwogCiAgICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQg
YSBjaGFuZ2UgdG8gdGhlIG5lZWRzRGlzcGxheSBmbGFnLgogICAgIEVYUEVDVF9GQUxTRSh0ZXN0
TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNo
b3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBj
YWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4K
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOworICAgIC8vIFRlc3Qg
cHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheSBhbmQgc2V0TmVlZHND
b21taXQKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigx
LCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwogICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwotCi0gICAgLy8gRklYTUU6IG5lZWQgdG8gYWRk
IGEgdGVzdCBmb3Igc2V0TGF5ZXJUcmVlSG9zdCB3aXRoIGEgbm9uLW51bGwgc3R1YmJlZCBDQ0xh
eWVyVHJlZUhvc3QuCi19Ci0KLVRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tOb25Db21w
b3NpdGVkQ29udGVudFByb3BlcnR5Q2hhbmdlQ2F1c2VzQ29tbWl0KQotewotICAgIE93blB0cjxN
b2NrTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoTW9j
a05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKCkpOwotCi0gICAgR3JhcGhpY3NMYXll
ciogcm9vdExheWVyID0gbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT50b3BMZXZlbFJvb3RMYXll
cigpOwotCi0gICAgRVhQRUNUX0NBTEwoKm5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCwgbm90aWZ5
U3luY1JlcXVpcmVkKF8pKS5UaW1lcygxKTsKLSAgICByb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KS0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMSwgMSkpOwotICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5nZXQoKSk7Ci0KLSAg
ICBFWFBFQ1RfQ0FMTCgqbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LCBub3RpZnlTeW5jUmVxdWly
ZWQoXykpLlRpbWVzKEF0TGVhc3QoMSkpOwotICAgIG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+
c2V0Vmlld3BvcnQoSW50U2l6ZSgzMCwgMzApLCBJbnRTaXplKDIwLCAyMCksIEludFBvaW50KDEw
LCAxMCksIDEpOwogfQogCiBjbGFzcyBMYXllckNocm9taXVtV2l0aENvbnRlbnRTY2FsaW5nIDog
cHVibGljIExheWVyQ2hyb21pdW0gewpAQCAtNzIxLDE2ICs2MDAsMTYgQEAgcHVibGljOgogCiBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrQ29udGVudHNTY2FsZUNoYW5nZVRyaWdnZXJz
TmVlZHNEaXNwbGF5KQogewotICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhDb250ZW50U2NhbGluZz4gdGVzdExheWVyID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoQ29udGVudFNjYWxpbmcoJm1vY2tEZWxlZ2F0ZSkp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aENvbnRlbnRTY2FsaW5nPiB0ZXN0TGF5ZXIg
PSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhDb250ZW50U2NhbGluZygwKSk7CisgICAg
dGVzdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAKICAg
ICBJbnRTaXplIHRlc3RCb3VuZHMgPSBJbnRTaXplKDMyMCwgMjQwKTsKLSAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVE
U19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwog
CiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwogICAgIEVYUEVDVF9GQUxTRSh0
ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Q29udGVudHNT
Y2FsZSh0ZXN0TGF5ZXItPmNvbnRlbnRzU2NhbGUoKSArIDEuZikpOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0Q29udGVu
dHNTY2FsZSh0ZXN0TGF5ZXItPmNvbnRlbnRzU2NhbGUoKSArIDEuZikpOwogICAgIEVYUEVDVF9U
UlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tHcmFwaGljc0NvbnRleHQzRFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3NDZjNzU0NGZlMzk1YWNkNDlhZTYzYTA1
ODFjMDAyMjQ4YTJkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tHcmFwaGljc0NvbnRleHQzRFRl
c3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCi0jaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29u
dGV4dDNELmgiCi0KLSNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKLXVzaW5nIG5hbWVzcGFjZSB0ZXN0aW5nOwotCi1jbGFzcyBGcmFtZUNvdW50aW5nQ29udGV4
dCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewotcHVibGljOgotICAgIEZyYW1l
Q291bnRpbmdDb250ZXh0KCkgOiBtX2ZyYW1lKDApIHsgfQotCi0gICAgLy8gVGhpcyBtZXRob2Qg
d291bGQgbm9ybWFsbHkgZG8gYSBnbFN3YXBCdWZmZXJzIHVuZGVyIHRoZSBob29kLgotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsgbV9mcmFtZSsrOyB9Ci0KLSAgICBpbnQgZnJh
bWVDb3VudCgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV9mcmFt
ZTsKLX07Ci0KLVRFU1QoTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuT3ZlcnJpZGVNYW51
YWxseSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFt
ZUNvdW50aW5nQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRo
aXNUaHJlYWQpOwotICAgIEZyYW1lQ291bnRpbmdDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0
aWNfY2FzdDxGcmFtZUNvdW50aW5nQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgICBjb250ZXh0LT5jbGVhckNvbG9yKDAs
IDAsIDAsIDEpOwotICAgICAgICBjb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgIH0KLSAg
ICBjb250ZXh0LT5maW5pc2goKTsKLQotICAgIEVYUEVDVF9FUSgxMCwgbW9ja0NvbnRleHQuZnJh
bWVDb3VudCgpKTsKLX0KLQotCi1jbGFzcyBHTW9ja0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoZ2V0RXJyb3IsIFdH
QzNEZW51bSgpKTsKLX07Ci0KLVRFU1QoTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuVXNl
R01vY2spCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgR01v
Y2tDb250ZXh0KCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVh
ZCk7Ci0gICAgR01vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxHTW9ja0Nv
bnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRChjb250ZXh0LmdldCgpKSk7Ci0KLSAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZ2V0
RXJyb3IoKSkKLSAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oMzE0KSk7Ci0KLSAg
ICAvLyBJdCdzIE9LIHRvIGNhbGwgbWV0aG9kcyBHTW9jayBkb2Vzbid0IGtub3cgYWJvdXQuCi0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRo
ZSBtb2NrZWQgbWV0aG9kIGlzIHJldHVybmluZyBhcyBpbnRlbmRlZC4KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDEwOyBpKyspCi0gICAgICAgIEVYUEVDVF9FUSgoaW50KWNvbnRleHQtPmdldEVy
cm9yKCksIDMxNCk7Ci19Ci0KLWNsYXNzIENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzIDog
cHVibGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgQ29udGV4dFRo
YXRDb3VudHNNYWtlQ3VycmVudHMoKSA6IG1fbWFrZUN1cnJlbnRDb3VudCgwKSB7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkKLSAgICB7Ci0gICAgICAgIG1fbWFrZUN1
cnJlbnRDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaW50IG1ha2VD
dXJyZW50Q291bnQoKSB7IHJldHVybiBtX21ha2VDdXJyZW50Q291bnQ7IH0KLXByaXZhdGU6Ci0g
ICAgaW50IG1fbWFrZUN1cnJlbnRDb3VudDsKLX07Ci0KLQotVEVTVChNb2NrR3JhcGhpY3NDb250
ZXh0M0RUZXN0LCBDb250ZXh0Rm9yVGhpc1RocmVhZFNob3VsZE1ha2VDdXJyZW50KQotewotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwotICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRz
TWFrZUN1cnJlbnRzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1Ro
cmVhZCk7Ci0gICAgRVhQRUNUX1RSVUUoY29udGV4dCk7Ci0gICAgQ29udGV4dFRoYXRDb3VudHNN
YWtlQ3VycmVudHMmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRz
TWFrZUN1cnJlbnRzKj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOwotICAgIEVYUEVDVF9FUSgxLCBtb2NrQ29udGV4
dC5tYWtlQ3VycmVudENvdW50KCkpOwotfQotCi1URVNUKE1vY2tHcmFwaGljc0NvbnRleHQzRFRl
c3QsIENvbnRleHRGb3JBbm90aGVyVGhyZWFkU2hvdWxkTm90TWFrZUN1cnJlbnQpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ29udGV4dFRoYXRDb3VudHNN
YWtlQ3VycmVudHMoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVy
VGhyZWFkKTsKLSAgICBFWFBFQ1RfVFJVRShjb250ZXh0KTsKLSAgICBDb250ZXh0VGhhdENvdW50
c01ha2VDdXJyZW50cyYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8Q29udGV4dFRoYXRDb3Vu
dHNNYWtlQ3VycmVudHMqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFw
aGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKDAsIG1vY2tDb250
ZXh0Lm1ha2VDdXJyZW50Q291bnQoKSk7Ci19Ci0KLWNsYXNzIENvbnRleHRXaXRoTWFrZUN1cnJl
bnRUaGF0RmFpbHMgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoK
LSAgICBDb250ZXh0V2l0aE1ha2VDdXJyZW50VGhhdEZhaWxzKCkgeyB9Ci0gICAgdmlydHVhbCBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1URVNUKE1v
Y2tHcmFwaGljc0NvbnRleHQzRFRlc3QsIENvbnRleHRGb3JUaGlzVGhyZWFkRmFpbHNXaGVuTWFr
ZUN1cnJlbnRGYWlscykKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
czsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRy
KG5ldyBDb250ZXh0V2l0aE1ha2VDdXJyZW50VGhhdEZhaWxzKCkpLCBhdHRycywgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGI2MjI1
NTFiZDdiOWQ2NzNhYzIwMzliNWMxODRhODRiOGZjYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0QuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0RfaAotI2RlZmluZSBNb2NrV2Vi
R3JhcGhpY3NDb250ZXh0M0RfaAotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotLy8gV2ViR3JhcGhpY3NDb250ZXh0M0QgYmFzZSBjbGFzcyBmb3IgdXNlIGluIFdl
YktpdCB1bml0IHRlc3RzLgotLy8gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wcyAocmV0dXJuaW5n
IDAgaWYgbmVjZXNzYXJ5KS4KLWNsYXNzIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1Ymxp
YyBXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGluaXRp
YWxpemUoQXR0cmlidXRlcywgV2ViVmlldyosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb1dlYlZpZXcp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCByZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1
ZmZlclNpemUsIFdlYkdMSWQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgV2ViR0xJZCBnZXRQbGF0Zm9ybVRleHR1cmVJ
ZCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3ludGhlc2l6
ZUdMRXJyb3IoV0dDM0RlbnVtKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRMb3N0
KCkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyU3ViRGF0
YUNIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXpl
aXB0ciBzaXplLCBXR0MzRGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQqIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RGludCBsZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXpl
aSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEZW51bSB0
eXBlLCBXR0MzRGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRWaXNpYmlsaXR5Q0hST01JVU0oYm9vbCB2aXNpYmxlKSB7IH0KLQotICAgIHZpcnR1
YWwgV2ViU3RyaW5nIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkgeyByZXR1cm4g
V2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVN
KGNvbnN0IGNoYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXJDSFJP
TUlVTShXR0MzRGludCBzcmNYMCwgV0dDM0RpbnQgc3JjWTAsIFdHQzNEaW50IHNyY1gxLCBXR0Mz
RGludCBzcmNZMSwgV0dDM0RpbnQgZHN0WDAsIFdHQzNEaW50IGRzdFkwLCBXR0MzRGludCBkc3RY
MSwgV0dDM0RpbnQgZHN0WTEsIFdHQzNEYml0ZmllbGQgbWFzaywgV0dDM0RlbnVtIGZpbHRlcikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUNIUk9N
SVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEc2l6ZWkgc2FtcGxlcywgV0dDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWN0aXZlVGV4dHVyZShXR0MzRGVudW0gdGV4dHVyZSkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdMSWQgc2hhZGVy
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3Jh
bSwgV0dDM0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGNoYXIqIG5hbWUpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBiaW5kQnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgYnVmZmVyKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdM
SWQgZnJhbWVidWZmZXIpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKFdH
QzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYmluZFRleHR1cmUoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihXR0MzRGNsYW1wZiByZWQsIFdHQzNEY2xhbXBmIGdy
ZWVuLCBXR0MzRGNsYW1wZiBibHVlLCBXR0MzRGNsYW1wZiBhbHBoYSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGJsZW5kRXF1YXRpb24oV0dDM0RlbnVtIG1vZGUpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoV0dDM0RlbnVtIG1vZGVSR0IsIFdHQzNEZW51bSBtb2Rl
QWxwaGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoV0dDM0RlbnVtIHNmYWN0b3Is
IFdHQzNEZW51bSBkZmFjdG9yKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoV0dDM0RlbnVtIHNyY1JHQiwgV0dDM0RlbnVtIGRzdFJHQiwgV0dDM0RlbnVtIHNyY0FscGhh
LCBXR0MzRGVudW0gZHN0QWxwaGEpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEo
V0dDM0RlbnVtIHRhcmdldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBX
R0MzRGVudW0gdXNhZ2UpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKSB7IH0KLQotICAgIHZpcnR1YWwgV0dDM0RlbnVtIGNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoV0dDM0RlbnVtIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIGNsZWFyKFdHQzNEYml0ZmllbGQgbWFzaykgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFyQ29sb3IoV0dDM0RjbGFtcGYgcmVkLCBXR0MzRGNsYW1wZiBncmVlbiwgV0dDM0Rj
bGFtcGYgYmx1ZSwgV0dDM0RjbGFtcGYgYWxwaGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckRlcHRoKFdHQzNEY2xhbXBmIGRlcHRoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVu
Y2lsKFdHQzNEaW50IHMpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soV0dDM0Rib29s
ZWFuIHJlZCwgV0dDM0Rib29sZWFuIGdyZWVuLCBXR0MzRGJvb2xlYW4gYmx1ZSwgV0dDM0Rib29s
ZWFuIGFscGhhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTElkIHNo
YWRlcikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoV0dDM0Rl
bnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dD
M0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50IGJvcmRlciwgV0dDM0Rz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwg
V0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dD
M0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQoV0dD
M0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
V0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWln
aHQsIFdHQzNEaW50IGJvcmRlcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBX
R0MzRGludCB5b2Zmc2V0LCBXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRo
LCBXR0MzRHNpemVpIGhlaWdodCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKFdHQzNE
ZW51bSBtb2RlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKFdHQzNEZW51bSBmdW5j
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKFdHQzNEYm9vbGVhbiBmbGFnKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhSYW5nZShXR0MzRGNsYW1wZiB6TmVhciwgV0dDM0RjbGFt
cGYgekZhcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihXZWJHTElkIHByb2dy
YW0sIFdlYkdMSWQgc2hhZGVyKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShXR0MzRGVu
dW0gY2FwKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFdH
QzNEdWludCBpbmRleCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoV0dDM0RlbnVt
IG1vZGUsIFdHQzNEaW50IGZpcnN0LCBXR0MzRHNpemVpIGNvdW50KSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50LCBXR0Mz
RGVudW0gdHlwZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBl
bmFibGUoV0dDM0RlbnVtIGNhcCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KFdHQzNEdWludCBpbmRleCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gYXR0YWNobWVu
dCwgV0dDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChXR0MzRGVudW0gdGFyZ2V0
LCBXR0MzRGVudW0gYXR0YWNobWVudCwgV0dDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0
dXJlLCBXR0MzRGludCBsZXZlbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZyb250RmFjZShXR0Mz
RGVudW0gbW9kZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKFdHQzNEZW51
bSB0YXJnZXQpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElk
IHByb2dyYW0sIFdHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCBXR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHNpemVpIG1heENv
dW50LCBXR0MzRHNpemVpKiBjb3VudCwgV2ViR0xJZCogc2hhZGVycykgeyB9Ci0gICAgdmlydHVh
bCBXR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IFdHQzNE
Y2hhciogbmFtZSkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihX
R0MzRGVudW0gcG5hbWUsIFdHQzNEYm9vbGVhbiogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUs
IFdHQzNEaW50KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCkgeyByZXR1cm4gQXR0cmlidXRlcygpOyB9Ci0gICAgdmlydHVhbCBXR0MzRGVu
dW0gZ2V0RXJyb3IoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dihX
R0MzRGVudW0gcG5hbWUsIFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dD
M0RlbnVtIGF0dGFjaG1lbnQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSkKLSAgICAgICAgICAgICp2YWx1ZSA9IDEwMjQ7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIFdH
QzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHBuYW1l
ID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUykKLSAgICAgICAgICAg
ICp2YWx1ZSA9IDE7Ci0gICAgfQotCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UHJvZ3JhbUlu
Zm9Mb2coV2ViR0xJZCBwcm9ncmFtKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKHBuYW1lID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpDT01QSUxFX1NUQVRVUykKLSAgICAgICAgICAgICp2YWx1ZSA9IDE7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcikgeyByZXR1
cm4gV2ViU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlclNvdXJj
ZShXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFdl
YlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KFdHQzNEZW51bSB0YXJnZXQsIFdH
QzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZXRUZXhQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNE
aW50KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHBy
b2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEaW50IGxvY2F0aW9u
LCBXR0MzRGludCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgV0dDM0RpbnQgZ2V0VW5pZm9ybUxv
Y2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dDM0RjaGFyKiBuYW1lKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KFdHQzNEdWludCBpbmRleCwg
V0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGdldFZlcnRleEF0dHJpYml2KFdHQzNEdWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lLCBXR0Mz
RGludCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgV0dDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoV0dDM0R1aW50IGluZGV4LCBXR0MzRGVudW0gcG5hbWUpIHsgcmV0dXJuIDA7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBoaW50KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBtb2Rl
KSB7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0VuYWJsZWQoV0dD
M0RlbnVtIGNhcCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBp
c0ZyYW1lYnVmZmVyKFdlYkdMSWQgZnJhbWVidWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBXR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihXZWJHTElk
IHJlbmRlcmJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVh
biBpc1NoYWRlcihXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IFdHQzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xJZCB0ZXh0dXJlKSB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoV0dDM0RmbG9hdCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHBpeGVsU3RvcmVpKFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQgcGFyYW0pIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KFdHQzNEZmxvYXQgZmFjdG9yLCBXR0MzRGZsb2F0IHVu
aXRzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKFdHQzNEaW50IHgsIFdHQzNE
aW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9y
bWF0LCBXR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJi
dWZmZXJTdG9yYWdlKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
V0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzYW1wbGVDb3ZlcmFnZShXR0MzRGNsYW1wZiB2YWx1ZSwgV0dDM0Rib29sZWFuIGludmVydCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjaXNzb3IoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dD
M0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
aGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0IFdHQzNEY2hhciogc3RyaW5nKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmMoV0dDM0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJl
ZiwgV0dDM0R1aW50IG1hc2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFy
YXRlKFdHQzNEZW51bSBmYWNlLCBXR0MzRGVudW0gZnVuYywgV0dDM0RpbnQgcmVmLCBXR0MzRHVp
bnQgbWFzaykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrKFdHQzNEdWludCBtYXNr
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShXR0MzRGVudW0gZmFj
ZSwgV0dDM0R1aW50IG1hc2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoV0dDM0Rl
bnVtIGZhaWwsIFdHQzNEZW51bSB6ZmFpbCwgV0dDM0RlbnVtIHpwYXNzKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoV0dDM0RlbnVtIGZhY2UsIFdHQzNEZW51bSBmYWls
LCBXR0MzRGVudW0gemZhaWwsIFdHQzNEZW51bSB6cGFzcykgeyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dD
M0RpbnQgYm9yZGVyLCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKFdHQzNEZW51
bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCBwYXJhbSkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRleFBhcmFtZXRlcmkoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1l
LCBXR0MzRGludCBwYXJhbSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChX
R0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0Rp
bnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51
bSBmb3JtYXQsIFdHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0xZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4KSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0Rz
aXplaSBjb3VudCwgY29uc3QgV0dDM0RmbG9hdCogdikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0xaShXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQgeCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVuaWZvcm0xaXYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0
IFdHQzNEaW50KiB2KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKFdHQzNEaW50IGxv
Y2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVuaWZvcm0yZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdH
QzNEZmxvYXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkoV0dDM0RpbnQgbG9j
YXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHkpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtMml2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGlu
dCogdikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihXR0MzRGludCBsb2NhdGlvbiwg
V0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHVuaWZvcm0zZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNv
bnN0IFdHQzNEZmxvYXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2koV0dDM0Rp
bnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEaW50IHopIHsgfQotICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNv
dW50LCBjb25zdCBXR0MzRGludCogdikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZihX
R0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQg
eiwgV0dDM0RmbG9hdCB3KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RmbG9hdCogdikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQgeCwg
V0dDM0RpbnQgeSwgV0dDM0RpbnQgeiwgV0dDM0RpbnQgdykgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVuaWZvcm00aXYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdH
QzNEaW50KiB2KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4
M2Z2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm1NYXRyaXg0ZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pIHsgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZlcnRleEF0dHJpYjFmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4KSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KFdHQzNEdWludCBpbmRleCwgY29uc3QgV0dD
M0RmbG9hdCogdmFsdWVzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYoV0dD
M0R1aW50IGluZGV4LCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHZlcnRleEF0dHJpYjJmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQq
IHZhbHVlcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKFdHQzNEdWludCBp
bmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNE
ZmxvYXQqIHZhbHVlcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKFdHQzNE
dWludCBpbmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dD
M0RmbG9hdCB3KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGZ2KFdHQzNEdWlu
dCBpbmRleCwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWVzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dmVydGV4QXR0cmliUG9pbnRlcihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEaW50IHNpemUsIFdHQzNE
ZW51bSB0eXBlLCBXR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXR0MzRHNpemVpIHN0cmlkZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChXR0MzRGludCB4LCBXR0MzRGludCB5LCBX
R0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFdl
YkdMSWQgY3JlYXRlQnVmZmVyKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgV2ViR0xJZCBj
cmVhdGVGcmFtZWJ1ZmZlcigpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3Jl
YXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVTaGFk
ZXIoV0dDM0RlbnVtKSB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRl
eHR1cmUoKSB7IHJldHVybiAxOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFdl
YkdMSWQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTElkKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTElkKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMSWQpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVTaGFkZXIoV2ViR0xJZCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1
cmUoV2ViR0xJZCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3RvcmFnZTJERVhUKFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVscywgV0dDM0R1aW50IGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0dDM0RpbnQgd2lkdGgsIFdHQzNEaW50
IGhlaWdodCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE1v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYkdMTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJHTExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyNGNiNTI3MTkxMTg3
YWQ4ZTlkNjgwYmE2MTExYTIyYWY5NDM1NTlkLi42NmVhNjkwZmFiM2ZiNTRhYTgzMmM5YTJhYTgx
Y2I5YzU5MzIyYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkdMTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDkgKzI2LDggQEAKIAogI2luY2x1
ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAKQEAgLTM3LDMyICszNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVz
cGFjZSB7CiAKLS8vIFRlc3Qgc3R1YiBmb3IgV2ViR3JhcGhpY3NDb250ZXh0M0QuIFJldHVybnMg
Y2FubmVkIHZhbHVlcyBuZWVkZWQgZm9yIGNvbXBvc2l0b3IgaW5pdGlhbGl6YXRpb24uCi1jbGFz
cyBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIE1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRv
ck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRChhdHRycykpOyB9Ci0gICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3Jh
bSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNE
ZW51bSkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElk
LCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkg
eyAqdmFsdWUgPSAxOyB9Ci0gICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpIHsgcmV0dXJuIG1fYXR0cnM7IH0KLQotcHJpdmF0
ZToKLSAgICBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKSB7IG1fYXR0cnMuYWxwaGEgPSBhdHRycy5hbHBoYTsgfQot
Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyczsKLX07Ci0KLXN0
YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVHcmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi17Ci0gICAgT3duUHRyPFdlYkdy
YXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0ID0gQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKGF0dHJzKTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCgKLSAgICAgICAgd2ViQ29u
dGV4dC5yZWxlYXNlKCksIGF0dHJzLCAwLAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkKTsKLX0KLQogVEVTVChXZWJHTExheWVyQ2hyb21pdW1U
ZXN0LCBvcGFxdWVGb3JtYXRzKQogewogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBidWZmZXI7
CkBAIC03Miw5ICs0NSw5IEBAIFRFU1QoV2ViR0xMYXllckNocm9taXVtVGVzdCwgb3BhcXVlRm9y
bWF0cykKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBvcGFxdWVBdHRyczsKICAg
ICBvcGFxdWVBdHRycy5hbHBoYSA9IGZhbHNlOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBhbHBoYUNvbnRleHQgPSBjcmVhdGVHcmFwaGljc0NvbnRleHQoYWxwaGFBdHRycyk7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBhbHBoYUNvbnRleHQgPSBjcmVhdGVDb21wb3Np
dG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKGFscGhhQXR0cnMpOwogICAgIEVYUEVDVF9UUlVFKGFs
cGhhQ29udGV4dCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBvcGFxdWVDb250ZXh0
ID0gY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9wYXF1ZUF0dHJzKTsKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG9wYXF1ZUNvbnRleHQgPSBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNz
Q29udGV4dDNEKG9wYXF1ZUF0dHJzKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZXh0KTsK
IAogICAgIGJ1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShhbHBoYUNvbnRleHQuZ2V0KCks
IEludFNpemUoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJMYXllclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJM
YXllclRlc3QuY3BwCmluZGV4IDE1ODk4ODFkMjEwZWE5M2NhZDQ3NWQyNWM5NjdkMmI4NzY3Mjhl
MzguLjM2N2MwNjZiYTU5OGI2ZjM1OGVlNzQ4YWExOWJkOGVmNzAzOGFhMzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKQEAgLTI1LDE0ICsyNSwx
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyLmgi
CiAKKyNpbmNsdWRlICJDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXll
ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXllckNsaWVudC5oIgorI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5o
IgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJD
b250ZW50TGF5ZXIuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXJDbGllbnQu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5o
PgogCkBAIC00MSw5ICs0NCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKIAogbmFtZXNw
YWNlIHsKIAotY2xhc3MgTW9ja1dlYkxheWVyQ2xpZW50IDogcHVibGljIFdlYkxheWVyQ2xpZW50
IHsKK2NsYXNzIE1vY2tXZWJMYXllclRyZWVWaWV3Q2xpZW50IDogcHVibGljIFdlYkxheWVyVHJl
ZVZpZXdDbGllbnQgewogcHVibGljOgotICAgIE1PQ0tfTUVUSE9EMChub3RpZnlOZWVkc0NvbXBv
c2l0ZSwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDAoc2NoZWR1bGVDb21wb3NpdGUsIHZvaWQo
KSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdp
blRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdl
YlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZUZhY3RvcikgeyB9CisgICAgdmlydHVhbCBX
ZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCkgeyByZXR1cm4gQ29tcG9zaXRv
ckZha2VXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzKCkpLmxlYWtQdHIoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFw
aGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSB7IH0KIH07CiAKIGNsYXNzIE1vY2tXZWJDb250ZW50
TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExheWVyQ2xpZW50IHsKQEAgLTUzLDcgKzYx
LDMwIEBAIHB1YmxpYzoKIAogY2xhc3MgV2ViTGF5ZXJUZXN0IDogcHVibGljIFRlc3QgewogcHVi
bGljOgotICAgIFdlYkxheWVyVGVzdCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisg
ICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCisg
ICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAgICAgbV9y
b290TGF5ZXIgPSBXZWJMYXllcjo6Y3JlYXRlKCk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1fY2xp
ZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1f
dmlldyA9IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSgmbV9jbGllbnQsIG1fcm9vdExheWVyLCBX
ZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncygpKTsKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVh
ckRvd24oKQorICAgIHsKKyAgICAgICAgLy8gV2UgbWF5IGdldCBhbnkgbnVtYmVyIG9mIHNjaGVk
dWxlQ29tcG9zaXRlIGNhbGxzIGR1cmluZyBzaHV0ZG93bi4KKyAgICAgICAgRVhQRUNUX0NBTEwo
bV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAg
ICAgbV92aWV3LnNldFJvb3RMYXllcigwKTsKKyAgICAgICAgbV9yb290TGF5ZXIucmVzZXQoKTsK
KyAgICAgICAgbV92aWV3LnJlc2V0KCk7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNb2NrV2ViTGF5ZXJUcmVlVmll
d0NsaWVudCBtX2NsaWVudDsKKyAgICBXZWJMYXllciBtX3Jvb3RMYXllcjsKKyAgICBXZWJMYXll
clRyZWVWaWV3IG1fdmlldzsKIH07CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGNsaWVudCBnZXRzIGNh
bGxlZCB0byBhc2sgZm9yIGEgY29tcG9zaXRlIGlmIHdlIGNoYW5nZSB0aGUKQEAgLTYxLDk5ICs5
MiwxMDAgQEAgcHVibGljOgogVEVTVF9GKFdlYkxheWVyVGVzdCwgQ2xpZW50KQogewogICAgIC8v
IEJhc2UgbGF5ZXIuCi0gICAgTW9ja1dlYkxheWVyQ2xpZW50IGNsaWVudDsKLSAgICBFWFBFQ1Rf
Q0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsK
LSAgICBXZWJMYXllciBsYXllciA9IFdlYkxheWVyOjpjcmVhdGUoJmNsaWVudCk7Ci0gICAgTW9j
azo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgRVhQRUNUX0NBTEwo
bV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICBX
ZWJMYXllciBsYXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICBtX3Jvb3RMYXllci5hZGRD
aGlsZChsYXllcik7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xp
ZW50KTsKIAogICAgIFdlYkZsb2F0UG9pbnQgcG9pbnQoMywgNCk7Ci0gICAgRVhQRUNUX0NBTEwo
Y2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBF
WFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgx
KSk7CiAgICAgbGF5ZXIuc2V0QW5jaG9yUG9pbnQocG9pbnQpOwotICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKHBvaW50LCBsYXllci5hbmNob3JQ
b2ludCgpKTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUo
KSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxl
Q29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIGZsb2F0IGFuY2hvclogPSA1Owog
ICAgIGxheWVyLnNldEFuY2hvclBvaW50WihhbmNob3JaKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVj
dGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9FUShhbmNob3JaLCBsYXllci5hbmNob3JQ
b2ludFooKSk7CiAKICAgICBXZWJTaXplIHNpemUoNywgOCk7Ci0gICAgRVhQRUNUX0NBTEwoY2xp
ZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBF
Q1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7
CiAgICAgbGF5ZXIuc2V0Qm91bmRzKHNpemUpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25z
KCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKHNpemUsIGxheWVyLmJvdW5kcygpKTsKIAotICAg
IEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFz
dCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRp
bWVzKEF0TGVhc3QoMSkpOwogICAgIGxheWVyLnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAg
TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVy
aWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfVFJVRShsYXll
ci5tYXNrc1RvQm91bmRzKCkpOwogCi0gICAgTW9ja1dlYkxheWVyQ2xpZW50IG90aGVyQ2xpZW50
OwotICAgIEVYUEVDVF9DQUxMKG90aGVyQ2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5U
aW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViTGF5ZXIgb3RoZXJMYXllciA9IFdlYkxheWVyOjpj
cmVhdGUoJm90aGVyQ2xpZW50KTsKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRz
Q29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50
LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgV2ViTGF5ZXIg
b3RoZXJMYXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICBtX3Jvb3RMYXllci5hZGRDaGls
ZChvdGhlckxheWVyKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3Np
dGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgbGF5ZXIuc2V0TWFza0xheWVyKG90aGVyTGF5
ZXIpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAg
IE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNU
X0VRKG90aGVyTGF5ZXIsIGxheWVyLm1hc2tMYXllcigpKTsKIAotICAgIEVYUEVDVF9DQUxMKGNs
aWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQ
RUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkp
OwogICAgIGZsb2F0IG9wYWNpdHkgPSAwLjEyMzsKICAgICBsYXllci5zZXRPcGFjaXR5KG9wYWNp
dHkpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAg
IE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNU
X0VRKG9wYWNpdHksIGxheWVyLm9wYWNpdHkoKSk7CiAKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQs
IG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9D
QUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAg
ICBsYXllci5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1f
Y2xpZW50KTsKICAgICBFWFBFQ1RfVFJVRShsYXllci5vcGFxdWUoKSk7CiAKLSAgICBFWFBFQ1Rf
Q0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwor
ICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExl
YXN0KDEpKTsKICAgICBsYXllci5zZXRQb3NpdGlvbihwb2ludCk7Ci0gICAgTW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfRVEocG9pbnQsIGxheWVyLnBvc2l0
aW9uKCkpOwogCiAgICAgLy8gVGV4dHVyZSBsYXllci4KLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQs
IG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJFeHRl
cm5hbFRleHR1cmVMYXllciB0ZXh0dXJlTGF5ZXIgPSBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6
Y3JlYXRlKCZjbGllbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZj
bGllbnQpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5U
aW1lcyhBbnlOdW1iZXIoKSk7CisgICAgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgdGV4dHVyZUxh
eWVyID0gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgpOworICAgIG1fcm9vdExheWVy
LmFkZENoaWxkKHRleHR1cmVMYXllcik7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJm1fY2xpZW50KTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHND
b21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQs
IHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIHRleHR1cmVMYXll
ci5zZXRUZXh0dXJlSWQoMyk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMo
JmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50
KTsKICAgICBFWFBFQ1RfRVEoM3UsIHRleHR1cmVMYXllci50ZXh0dXJlSWQoKSk7CiAKLSAgICBF
WFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3Qo
MSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1l
cyhBdExlYXN0KDEpKTsKICAgICB0ZXh0dXJlTGF5ZXIuc2V0RmxpcHBlZCh0cnVlKTsKLSAgICBN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1
cmVMYXllci5mbGlwcGVkKCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVk
c0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVu
dCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgV2ViRmxvYXRS
ZWN0IHV2UmVjdCgwLjEsIDAuMSwgMC45LCAwLjkpOwogICAgIHRleHR1cmVMYXllci5zZXRVVlJl
Y3QodXZSZWN0KTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAg
IEVYUEVDVF9UUlVFKHRleHR1cmVMYXllci5mbGlwcGVkKCkpOwogCiAKICAgICAvLyBDb250ZW50
IGxheWVyLgogICAgIE1vY2tXZWJDb250ZW50TGF5ZXJDbGllbnQgY29udGVudENsaWVudDsKICAg
ICBFWFBFQ1RfQ0FMTChjb250ZW50Q2xpZW50LCBwYWludENvbnRlbnRzKF8sIF8pKS5UaW1lcyhB
bnlOdW1iZXIoKSk7Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0
ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViQ29udGVudExheWVyIGNvbnRlbnRMYXll
ciA9IFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKCZjbGllbnQsICZjb250ZW50Q2xpZW50KTsKLSAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBFWFBFQ1Rf
Q0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOwor
ICAgIFdlYkNvbnRlbnRMYXllciBjb250ZW50TGF5ZXIgPSBXZWJDb250ZW50TGF5ZXI6OmNyZWF0
ZSgmY29udGVudENsaWVudCk7CisgICAgbV9yb290TGF5ZXIuYWRkQ2hpbGQoY29udGVudExheWVy
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogCi0g
ICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExl
YXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSku
VGltZXMoQXRMZWFzdCgxKSk7CiAgICAgY29udGVudExheWVyLnNldERyYXdzQ29udGVudChmYWxz
ZSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAg
TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1Rf
RkFMU0UoY29udGVudExheWVyLmRyYXdzQ29udGVudCgpKTsKIH0KIAogVEVTVF9GKFdlYkxheWVy
VGVzdCwgSGllcmFyY2h5KQogewotICAgIE1vY2tXZWJMYXllckNsaWVudCBjbGllbnQ7Ci0gICAg
RVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1i
ZXIoKSk7Ci0gICAgV2ViTGF5ZXIgbGF5ZXIxID0gV2ViTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KTsK
LSAgICBXZWJMYXllciBsYXllcjIgPSBXZWJMYXllcjo6Y3JlYXRlKCZjbGllbnQpOworICAgIEVY
UEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIo
KSk7CisgICAgV2ViTGF5ZXIgbGF5ZXIxID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOworICAgIFdlYkxh
eWVyIGxheWVyMiA9IFdlYkxheWVyOjpjcmVhdGUoKTsKIAogICAgIEVYUEVDVF9UUlVFKGxheWVy
MS5wYXJlbnQoKS5pc051bGwoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLnBhcmVudCgpLmlz
TnVsbCgpKTsKQEAgLTE3Miw4ICsyMDQsOCBAQCBURVNUX0YoV2ViTGF5ZXJUZXN0LCBIaWVyYXJj
aHkpCiAKICAgICBNb2NrV2ViQ29udGVudExheWVyQ2xpZW50IGNvbnRlbnRDbGllbnQ7CiAgICAg
RVhQRUNUX0NBTEwoY29udGVudENsaWVudCwgcGFpbnRDb250ZW50cyhfLCBfKSkuVGltZXMoQW55
TnVtYmVyKCkpOwotICAgIFdlYkNvbnRlbnRMYXllciBjb250ZW50TGF5ZXIgPSBXZWJDb250ZW50
TGF5ZXI6OmNyZWF0ZSgmY2xpZW50LCAmY29udGVudENsaWVudCk7Ci0gICAgV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXIgdGV4dHVyZUxheWVyID0gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0
ZSgmY2xpZW50KTsKKyAgICBXZWJDb250ZW50TGF5ZXIgY29udGVudExheWVyID0gV2ViQ29udGVu
dExheWVyOjpjcmVhdGUoJmNvbnRlbnRDbGllbnQpOworICAgIFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVyIHRleHR1cmVMYXllciA9IFdlYkV4dGVybmFsVGV4dHVyZUxheWVyOjpjcmVhdGUoKTsKIAog
ICAgIHRleHR1cmVMYXllci5hZGRDaGlsZChjb250ZW50TGF5ZXIpOwogICAgIGNvbnRlbnRMYXll
ci5hZGRDaGlsZChsYXllcjEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119538</attachid>
            <date>2011-12-15 18:55:29 -0800</date>
            <delta_ts>2011-12-19 18:54:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74376-20111215185527.patch</filename>
            <type>text/plain</type>
            <size>138691</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyZjcwNzNlNDZlNzBh
ZGI5YzAyNzRiNzRkMTlmZThjMTI4YmQ1Yi4uZWM2NWI2OGM2MjhiMWY4M2Q3MTgzMjFjY2I0YTM1
NWQ3YmUyNWIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDExLTEyLTE1ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBD
Q0xheWVyRGVsZWdhdGUgYW5kIFdlYkxheWVyQ2xpZW50IGRvIG5vdCBuZWVkIG5vdGlmeVN5bmNS
ZXF1aXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
Q0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCBpcyBhbiBvZGQgYml0IG9mIGludGVy
ZmFjZSB0aGF0IHdlIG9yaWdpbmFsbHkgY2FyZ28tY3VsdGVkIGZyb20gdGhlCisgICAgICAgIENv
cmVBbmltYXRpb24gY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbi4gSXQgaXMgYSBtZWNoYW5pc20g
Ynkgd2hpY2ggYSBMYXllckNocm9taXVtIGluc3RhbmNlIG1heSByZXF1ZXN0IGEgbmV3CisgICAg
ICAgIGZyYW1lIHZpYSBpdHMgQ0NMYXllckRlbGVnYXRlLCB3aGljaCBpbiBXZWJDb3JlIGlzIGFs
d2F5cyBhIEdyYXBoaWNzTGF5ZXJDbGllbnQuIEluIHByYWN0aWNlLCBhbGwKKyAgICAgICAgaW1w
bGVtZW50YXRpb25zIGV2ZW50dWFsbHkgZW5kZWQgdXAgcm91dGluZyB0byBDQ0xheWVyVHJlZUhv
c3Q6OnNldE5lZWRzQ29tbWl0IHdoaWNoIHRoZW4gbWFkZSB0aGUgcHJvcGVyCisgICAgICAgIHNj
aGVkdWxpbmcgZGVjaXNpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByb3V0ZXMgYWxsIGNoYW5n
ZXMgdGhhdCB3b3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBDQ0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5
bmNSZXF1aXJlZCBkaXJlY3RseSB0bworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRz
Q29tbWl0LCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHNjaGVkdWxpbmcgbG9naWMuCisK
KyAgICAgICAgVGhlcmUgaXMgYSBsYXJnZSBhbW91bnQgb2YgdW5pdCB0ZXN0IGNvdmVyYWdlIGZv
ciB0aGlzIGNoYW5nZSwgbGFyZ2VseSBpbiBMYXllckNocm9taXVtVGVzdAorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omluc2VydENoaWxkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY29wZWRUaHJlYWRQcm94eTo6cnVuVGFza0lmTm90U2h1dGRvd24pOgor
CisyMDExLTEyLTE1ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgW2Nocm9taXVtXSBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVy
Q2hyb21pdW0gaW5zdGFuY2VzIGVhZ2VybHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc0NDc3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ZWZmYTIzNDRkNGM3MDllZDZhODQ2ZjM2NjYyOWZmYjdjMDhjNDFmZi4uYjE4ZmI5NzcxYTZkNjY3
NjFhMzdkMWJiZDcxYTEyYWNkMzM2M2RjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsNSArMSw4MiBAQAogMjAxMS0xMi0xNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gQ0NMYXllckRlbGVnYXRlIGFuZCBXZWJMYXll
ckNsaWVudCBkbyBub3QgbmVlZCBub3RpZnlTeW5jUmVxdWlyZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mzc2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViTGF5ZXJDbGllbnQ6Om5vdGlmeU5lZWRz
Q29tcG9zaXRlKCkgaXMgYW4gb2RkIGludGVyZmFjZSBmb3IgdGhlIHNhbWUgcmVhc29uIHRoYXQK
KyAgICAgICAgQ0NMYXllckRlbGVnYXRlOjpub3RpZnlTeW5jUmVxdWlyZWQoKSBpcyAtIGFsbCBz
Y2hlZHVsaW5nIGRlY2lzaW9ucyBzaG91bGQgcm91dGUgdGhyb3VnaCB0aGUgV2ViTGF5ZXJUcmVl
VmlldywKKyAgICAgICAgbm90IGluZGl2aWR1YWwgbGF5ZXJzLiBJbiBwcmFjdGljZSwgYWxsIGlt
cGxlbWVudGF0aW9ucyBvZiBXZWJMYXllckNsaWVudDo6bm90aWZ5U3luY1JlcXVpcmVkKCkgZG8g
dGhlIGV4YWN0CisgICAgICAgIHNhbWUgdGhpbmcgYXMgV2ViTGF5ZXJUcmVlVmlldzo6c2NoZWR1
bGVDb21wb3NpdGUoKS4gVGhpcyByZW1vdmVzIHRoYXQgY2FsbGJhY2ssIG1ha2luZyBXZWJMYXll
ckNsaWVudCBhbiBlbXB0eQorICAgICAgICBpbnRlcmZhY2UsIGFuZCByb3V0ZXMgYWxsIGNhbGxz
IHRoYXQgd291bGQgZ28gdG8gdGhhdCBpbnRlcmZhY2UgdG8gV2ViTGF5ZXJUcmVlVmlldzo6c2No
ZWR1bGVDb21wb3NpdGUoKS4KKworICAgICAgICBPbmNlIGRvd25zdHJlYW0gaW1wbGVtZW50YXRp
b25zIG9mIFdlYkxheWVyQ2xpZW50IGFyZSByZW1vdmVkLCBXZWJMYXllckNsaWVudC5oIGFuZCB0
aGUgY29uc3RydWN0b3JzIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCBpdCBjYW4gYmUgZGVsZXRl
ZC4KKworICAgICAgICBUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBoZXJlIGFyZSB0byB0aGUgdGVz
dCBoYXJuZXNzLiBNYW55IHRlc3RzIHRoYXQgd2VyZSBkZXNpZ25lZCBhcm91bmQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkKKyAgICAgICAgYXJlIHJld3JpdHRlbiB0byBjaGVjayBmb3IgQ0NMYXllclRy
ZWVIb3N0OjpzZXROZWVkc0NvbW1pdCgpIG9yIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29t
cG9zaXRlKCkgaW5zdGVhZC4KKyAgICAgICAgSW4gYSBmZXcgaW5zdGFuY2VzLCB0aGlzIHJlcXVp
cmVkIGNoYW5naW5nIHRoZSBzZXR1cCBsb2dpYyBhcm91bmQgc29tZXdoYXQgc28gdGhhdCB0aGUg
bGF5ZXJzIGJlaW5nIG1hbmlwdWxhdGVkCisgICAgICAgIHdlcmUgaW4gYSB0cmVlIHRoYXQgaW5p
dGlhbGl6ZWQgd2l0aG91dCBlcnJvcnMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAg
ICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViQ29udGVudExheWVyLmg6CisgICAgICAgICogcHVibGlj
L3BsYXRmb3JtL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmg6CisgICAgICAgICogcHVibGljL3Bs
YXRmb3JtL1dlYkxheWVyLmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVyQ2xp
ZW50Lmg6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRlbnRMYXll
ckltcGwpOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmg6CisgICAgICAgICog
c3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxh
eWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsOjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwpOgorICAgICAgICAqIHNyYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OldlYkxheWVySW1wbCk6CisgICAgICAgICogc3Jj
L1dlYkxheWVySW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVI
b3N0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmNyZWF0ZUxheWVy
VHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsU2ltcGxlOjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKiB0ZXN0cy9Db21wb3NpdG9y
TW9ja0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogdGVzdHMvQ29tcG9z
aXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAg
ICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Q29tcG9z
aXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5o
OgorICAgICAgICAoV2ViS2l0OjpNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJHTExheWVyQ2hyb21pdW1UZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAgICogdGVzdHMvV2ViTGF5ZXJUZXN0LmNw
cDoKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRyZWVWaWV3Q2xpZW50OjphbmltYXRl
QW5kTGF5b3V0KToKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRyZWVWaWV3Q2xpZW50
OjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRy
ZWVWaWV3Q2xpZW50OjpjcmVhdGVDb250ZXh0M0QpOgorICAgICAgICAodGVzdGluZzo6TW9ja1dl
YkxheWVyVHJlZVZpZXdDbGllbnQ6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
ICh0ZXN0aW5nOjpXZWJMYXllclRlc3Q6OlNldFVwKToKKyAgICAgICAgKHRlc3Rpbmc6OldlYkxh
eWVyVGVzdDo6VGVhckRvd24pOgorICAgICAgICAodGVzdGluZzo6VEVTVF9GKToKKworMjAxMS0x
Mi0xNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtj
aHJvbWl1bV0gU2V0IHRoZSBDQ0xheWVyVHJlZUhvc3QgcG9pbnRlciBvbiBMYXllckNocm9taXVt
IGluc3RhbmNlcyBlYWdlcmx5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDQ3NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApp
bmRleCAxM2EzOWNkYWY2N2IwODg3ZGI5YmIzNjg3YmUxYjRhMGFkYzIwODIwLi5mYzljODZmMDY3
ZWRjMTk5NTBhZjMzMzNhZTgzN2I1YWU5OWM4Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTY4MSwxMiArNjgxLDYgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRS
ZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06Om5vdGlmeVN5bmNSZXF1aXJlZCgpCi17Ci0gICAg
aWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRm
MjY5OGFiZDkxZTM3NjU2YjEyNDhjN2I4YjQ4MmNjMTQ4Nzc0ZmIuLmU5OTg4ZDdkMjY3ZDRkZTZl
YTU3ZWU3ZWI1ZGMzOTE5OWQ2NjhhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCkBAIC05OSw3ICs5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0
aW9ucyBpbXBsZW1lbnQgdGhlIENDTGF5ZXJEZWxlZ2F0ZSBpbnRlcmZhY2UuCiAgICAgdmlydHVh
bCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzLgog
ICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZTM4NTZhZTcwMzg3
OWE1N2I5ZTQ4N2Q3MThlYmM5ZjBlMDgwNjEyMS4uMGY2OTdmZmM1NmQ2NjVjZmI2MTY4OGQ0NWU0
ZGY0ZjBkOWM5MzhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEzMSw4ICsxMzEsOCBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBo
b3N0KQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KCkKIHsKLSAgICBpZiAo
bV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+bm90aWZ5U3luY1JlcXVpcmVkKCk7Cisg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVk
c0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFBhcmVudChMYXllckNocm9t
aXVtKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBjMmIyNzQ3NzBjMWQwZGE2MWEyMDMz
YzVlZTZhNGJlN2FiOGNiYzQ2Li43MzFhZDNiMDQ3MDM5OTMwNGU5YjNjMGRmYTdjOTUwMjMwZDI1
NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5DQ0xheWVyRGVsZWdhdGUoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKCkgPSAwOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRl
ZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNzkwNjQ0MDhlZTBiYWMxMzRlY2VhZWYzMTcyZjZl
Y2NiMjI5NWEwNC4uZDU2Y2JhYmM3ZDk0YTAwMjc5ODFlYWE5NWQxMWYzN2Y1OTU4MTJmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xMDMsNiArMTAzLDcgQEAgQ0NMYXll
clRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNN
YWluVGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9wcm94eSk7CiAgICAgbV9wcm94eS0+
c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsKICAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsK
QEAgLTI0NSw2ICsyNDYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKFBh
c3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogICAgIG1fcm9vdExheWVyID0gcm9v
dExheWVyOwogICAgIGlmIChtX3Jvb3RMYXllcikKICAgICAgICAgbV9yb290TGF5ZXItPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggMmFmNDI2NjA3NzAzNDdlNTFhOGM2MDYwZDM5
ZDZlY2JiNmExNjNkNC4uZTBhZGJjNjc3NTRlODA4ZGE4OWU4MGI5MzIxZGE0ZmZkZDIxOThhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE2Myw3ICsxNjMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKIAogICAgIHZv
aWQgc2V0TmVlZHNBbmltYXRlKCk7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOworICAgIC8v
IHZpcnR1YWwgZm9yIHRlc3RpbmcKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQoKTsK
ICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKICAgICBMYXllckNocm9taXVtKiByb290TGF5
ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZGI5OTg5N2MyNTM3ZGYxYzkxMGUwMWE3Y2YzZGQ2YzgzYWRlZmQ2Zi4uOTU3
NWQyZDY2NzhjMDFjZDlmNjljMDcwNTI4YzExYTkyZjI1MTgxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC02NSwxMCArNjUsMTQgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywK
LSAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVs
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAor
ICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0QuaCcsCisg
ICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywK
KyAgICAgICAgICAgICd0ZXN0cy9GYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0Zsb2F0UXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RI
ZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5oJywKQEAg
LTc5LDggKzgzLDYgQEAKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4
dDNEVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQz
RC5oJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9E
UmVkQmxhY2tUcmVlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaAppbmRleCA1ZDAwZGM5M2UzNzEw
YWM5ZGQzM2U3OGJhNWUwMjg2YWI5ZDIwYzM0Li4yMDhlYjA1NmE5OTgxM2JhNmIyMGM0OTEzYTA4
NWY3MjFjNjViZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaApAQCAtMzcsNiArMzcsOCBAQCBjbGFzcyBX
ZWJMYXllckNsaWVudDsKIAogY2xhc3MgV2ViQ29udGVudExheWVyIDogcHVibGljIFdlYkxheWVy
IHsKIHB1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3Jl
YXRlKFdlYkNvbnRlbnRMYXllckNsaWVudCopOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBh
cyBzb29uIGFzIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KICAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29u
dGVudExheWVyQ2xpZW50Kik7CiAKICAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJF
eHRlcm5hbFRleHR1cmVMYXllci5oCmluZGV4IDYzZDU0ODVmMmVlMWJiMzhjMDNlMThkNjYzNWQx
MjBkMDA2MWQ5ODEuLjU1NzQ1YWM5NmYxNGY5MGMwZGMzMmFmMjgwMzg4MDI2OWEzODQ1ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkV4dGVy
bmFsVGV4dHVyZUxheWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBX
ZWJMYXllckNsaWVudDsKIC8vIHRoZSBXZWJMYXllclRyZWVWaWV3IGlzIGRlc3Ryb3llZC4KIGNs
YXNzIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIDogcHVibGljIFdlYkxheWVyIHsKIHB1YmxpYzoK
KyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJFeHRlcm5hbFRleHR1cmVMYXllciBjcmVhdGUo
KTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFzIHNvb24gYXMgZG93bnN0cmVhbSBjbGllbnRzIGFy
ZSB1cGRhdGVkLgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVyIGNyZWF0ZShXZWJMYXllckNsaWVudCopOwogCiAgICAgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXIoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYkxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJMYXllci5oCmluZGV4IDU2NTY3MWMzYmM5MzAyZjcwYzQ5YTUyNTVjYTFlMDMzNGMyODE2ODMu
LjAzM2JlZTQ1YWVjMTRlYWU0ZTVmMDk5NjI2ZmZjNGYwNzI1NmFlOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXIuaApAQCAtNDAsNiAr
NDAsOCBAQCBzdHJ1Y3QgV2ViU2l6ZTsKIAogY2xhc3MgV2ViTGF5ZXIgewogcHVibGljOgorICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkxheWVyIGNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBjb25zdHJ1Y3RvciBvbmNlIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRl
ZC4KICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJMYXllciBjcmVhdGUoV2ViTGF5ZXJDbGll
bnQqKTsKIAogICAgIFdlYkxheWVyKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaAppbmRleCA5ZjE0OGJhMmVl
MTM3ODQyYjExMmRjMzI5MmM5ODA0OWU1NWNlOTZlLi5kMmE2OWZmZjA1MWU2Y2M3MTg3ODI4ZjA2
YzdlZWVhMTkyMzlhMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgKQEAgLTMwLDE0ICszMCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgLy8g
Tm90aWZpZXMgdGhlIGNsaWVudCB0aGF0IHRoZSBsYXllciBoYXMgY2hhbmdlZCBpbiBhIHdheSB0
aGF0IG5lZWRzIGEKLSAgICAvLyBjb21wb3NpdGluZyBwYXNzIHRvIHZpc3VhbGx5IHVwZGF0ZS4g
VGhlIGNsaWVudCBzaG91bGQgZXZlbnR1YWxseSBjYWxsCi0gICAgLy8gV2ViTGF5ZXJUcmVlVmll
dzo6Y29tcG9zaXRlLgotICAgIC8vIE5vdGU6IHNvbWUgY29tcGxleCBvcGVyYXRpb25zIChlLmcg
bGF5ZXIgcmVwYXJlbnRpbmcpIGNhbiBjYXVzZSB0aGlzIHRvCi0gICAgLy8gYmUgY2FsbGVkIHdo
aWxlIHRoZSBsYXllciB0cmVlIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gdG8gZ2V0
Ci0gICAgLy8gY29ycmVjdCByZXN1bHRzLCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUgc2hv
dWxkIGJlIGNhbGxlZCBhZnRlciB0aGUKLSAgICAvLyBvcGVyYXRpb24gaGFzIGZpbmlzaGVkIChl
LmcuIGJ5IHBvc3RpbmcgYSB0YXNrKS4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZHNDb21w
b3NpdGUoKSA9IDA7CisgICAgLy8gVGhpcyBlbXB0eSBpbnRlcmZhY2UgZXhpc3RzIG9ubHkgZm9y
IGxlZ2FjeSByZWFzb25zIC0gaXQgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24KKyAgICAvLyBhcyBk
b3duc3RyZWFtIGNvbnN1bWVycyBzdG9wIGRlcGVuZGluZyBvbiB0aGlzIGludGVyZmFjZSBleGlz
dGluZy4KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfldlYkxheWVyQ2xpZW50KCkgeyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCBj
OTg5NGUyMDNjNTdhYjYxYzI3ZjJkMjNkY2ExNzk1ZjQ0OTdiZDYzLi5mYWE2YTA5Njg3YWRiODFh
MDQ5OTk0YTQ1MDhhOWI0YjY1ZGI2MTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllci5jcHAKQEAgLTMxLDkgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1XZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5
ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQor
V2ViQ29udGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkNvbnRlbnRMYXllckNs
aWVudCogY29udGVudENsaWVudCkKIHsKLSAgICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNv
bnRlbnRMYXllckltcGw6OmNyZWF0ZShjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKKyAgICByZXR1
cm4gV2ViQ29udGVudExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShjb250ZW50Q2xp
ZW50KSk7Cit9CisKK1dlYkNvbnRlbnRMYXllciBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZShXZWJM
YXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29udGVudExheWVyOjpjcmVhdGUoY29udGVudENsaWVudCk7CiB9CiAKIHZv
aWQgV2ViQ29udGVudExheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3Bw
CmluZGV4IGNkODg5MDBiZGEzNGE1M2JlMWU2ZmVmZjk4ZDU5M2NmY2FlNjgxMTAuLjc5ZTIwZmVm
Nzk1MmVlYzgxNzBlM2RlZjJlY2YxZTMxMjFmZTI5NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgogCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViQ29udGVudExheWVyQ2xpZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJDbGll
bnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCkBAIC0zOSwxNCArMzgs
MTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1Q
YXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0
ZShXZWJMYXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRD
bGllbnQpCitQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXllcklt
cGw6OmNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGNsaWVudCwgY29udGVudENs
aWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGVudExheWVySW1wbChjb250
ZW50Q2xpZW50KSk7CiB9CiAKLVdlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRlbnRMYXllcklt
cGwoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50
Q2xpZW50KQorV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbChXZWJDb250
ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCiAgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1
bSh0aGlzKQotICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9jb250ZW50Q2xpZW50KGNv
bnRlbnRDbGllbnQpCiAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQogewpAQCAtODAsMTAgKzc4
LDQgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBtX2NvbnRlbnRDbGllbnQtPnBhaW50
Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIAotdm9pZCBXZWJDb250ZW50TGF5
ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5oCmluZGV4IDEwOGRmNWUzYTI1NGVkOTU2OTQ1OTg2ZmQ2NTQxYTg0YTk4ODY1ZmYuLmIz
MGM4YWU1NjJkZDQzNjljMzkxYjgxZmI0ODY3NDc4NDhkNjNkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTMwLDIzICszMCwy
MCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewot
Y2xhc3MgV2ViTGF5ZXJDbGllbnQ7CiBjbGFzcyBXZWJDb250ZW50TGF5ZXJDbGllbnQ7CiAKIGNs
YXNzIFdlYkNvbnRlbnRMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0ZShXZWJMYXllckNsaWVu
dCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRlKFdlYkNvbnRlbnRMYXllckNsaWVu
dCogY29udGVudENsaWVudCk7CiAKICAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBX
ZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExheWVyQ2xpZW50
KiBjb250ZW50Q2xpZW50KTsKKyAgICBleHBsaWNpdCBXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkNv
bnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmlydHVhbCB+V2ViQ29udGVu
dExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAotICAgIFdlYkxheWVyQ2xpZW50KiBtX2Ns
aWVudDsKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBi
b29sIG1fZHJhd3NDb250ZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcAppbmRleCA1YTA2YzE3NmIyNTI3ZTVj
ZDZkZmQyMTgxMzIzODFiNTA2MDdmNTE1Li5iM2EzMzJiMmEyMTQyZjY3MzViY2U4NDI4ZjA0Mjlh
NTY5ZWRjNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRl
cm5hbFRleHR1cmVMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwCkBAIC0zMSw5ICszMSw5IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1XZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRlcm5hbFRleHR1cmVMYXll
cjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCitXZWJFeHRlcm5hbFRleHR1cmVMYXll
ciBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gV2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVhdGUoY2xp
ZW50KSk7CisgICAgcmV0dXJuIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyKFdlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVyOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAppbmRleCA0
NDJlYWNkN2RhNGUwYWViNTE3NGM0M2RmOTEwYzgwMDA4YjE4NzQ4Li4xYjFkYTEwM2M5ZmI2NzRj
ODBlODQ4Y2E5NGYzMDdkYzZiZDgxMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJFeHRlcm5hbFRleHR1
cmVMYXllckltcGwuaCIKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFz
LmgiCiAKQEAgLTM0LDE0ICszMywxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs
PiBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0ZShXZWJMYXllckNsaWVudCogY2xp
ZW50KQorUGFzc1JlZlB0cjxXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw+IFdlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkV4dGVybmFsVGV4dHVyZUxheWVySW1wbChjbGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbCgpKTsKIH0KIAotV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsOjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoV2ViTGF5ZXJDbGllbnQq
IGNsaWVudCkKK1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJJbXBsKCkKICAgICA6IFBsdWdpbkxheWVyQ2hyb21pdW0odGhpcykKLSAgICAsIG1fY2xp
ZW50KGNsaWVudCkKIHsKICAgICBzZXRGbGlwcGVkKGZhbHNlKTsKIH0KQEAgLTYwLDEwICs1OCw0
IEBAIHZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKLXZvaWQgV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAppbmRleCA0ZjlhOTg3MjdjOTdkOWI1Yzk1ODc0
NGMyNjliODg0ZDE4NTNlNzZmLi4xYWQyYjgxOTk4ZjMwZGY2YzllY2EwOTNhMGMyZmY1YWJlZTkx
Y2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRl
cm5hbFRleHR1cmVMYXllckltcGwuaApAQCAtMzAsMjAgKzMwLDE2IEBACiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJMYXllckNsaWVu
dDsKIAogY2xhc3MgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6
OlBsdWdpbkxheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1w
bD4gY3JlYXRlKFdlYkxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsPiBjcmVhdGUoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkV4
dGVybmFsVGV4dHVyZUxheWVySW1wbChXZWJMYXllckNsaWVudCopOworICAgIFdlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgfldlYkV4dGVybmFsVGV4dHVyZUxheWVy
SW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
Y29uc3Q7Ci0KLSAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcAppbmRleCAx
NWUwNDBkOGE5NWM5MzI1MjhiYmFmYzM1MTk4ODA4OTVjOTJjYjk1Li5mOTQ3OWM5ODRhOWY5YmEw
ZDZiNjIzMzRlMDk0NzhhMTM2OTczMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXIuY3BwCkBAIC03NCw5ICs3NCwxNCBAQCBTa01hdHJpeDQ0IHNrTWF0cml4NDRGcm9tVHJh
bnNmb3JtYXRpb25NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeAogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckNs
aWVudCogY2xpZW50KQorV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckNsaWVudCop
CiB7Ci0gICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlKGNsaWVudCkpOwor
ICAgIHJldHVybiBXZWJMYXllcjo6Y3JlYXRlKCk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpj
cmVhdGUoKQoreworICAgIHJldHVybiBXZWJMYXllcihXZWJMYXllckltcGw6OmNyZWF0ZSgpKTsK
IH0KIAogdm9pZCBXZWJMYXllcjo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVySW1wbC5jcHAKaW5kZXggZGRjMDYxMTIwOTQxNmY5NTA0NTExNmMwYWZkNzI5Nzdm
OGY4YTZlNS4uYTRhMmYwOWYwOTc5OTc5NDEzNTE3YTRmYzIyZGQ4MWUzY2JkOTMzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC0yNiwxOCArMjYs
MTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKIAot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxXZWJMYXllckltcGw+
IFdlYkxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCitQYXNzUmVmUHRy
PFdlYkxheWVySW1wbD4gV2ViTGF5ZXJJbXBsOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViTGF5ZXJJbXBsKGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V2ViTGF5ZXJJbXBsKCkpOwogfQogCi1XZWJMYXllckltcGw6OldlYkxheWVySW1wbChXZWJMYXll
ckNsaWVudCogY2xpZW50KSA6IExheWVyQ2hyb21pdW0odGhpcyksIG1fY2xpZW50KGNsaWVudCkK
K1dlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKCkKKyAgICA6IExheWVyQ2hyb21pdW0odGhpcykK
IHsKIH0KIApAQCAtNTUsMTAgKzU0LDQgQEAgdm9pZCBXZWJMYXllckltcGw6OnBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsKIH0KIAotdm9pZCBX
ZWJMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmlu
ZGV4IDU1OGQ0MWI1Y2RlMWE4NDg3MDJjYWQwZjM3NTEyYzg5MTE1NTExMTYuLjAyOTg5NTlhNWQ1
NjdiNjNmMTA1ZGY4N2Q0ZTg4MzhjZTZkMDNmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVySW1wbC5oCkBAIC0zMCwyMCArMzAsMTYgQEAKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkxheWVyQ2xpZW50Owog
CiBjbGFzcyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwgcHVi
bGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJMYXllckltcGw+IGNyZWF0ZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2Vi
TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50Kik7CisgICAgV2ViTGF5ZXJJbXBsKCk7CiAgICAgdmly
dHVhbCB+V2ViTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwotICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlTeW5jUmVxdWlyZWQoKTsKLQotICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCmluZGV4IDU5OWFhYjlkZGU3ZWMyZWQ5MGRj
ZDczYzYyZGIyN2JlODU3MjYzMDkuLjljMWI1YWVmNDEyYjhmMTI4MjkxNDc0ZWU1ZDcxODE1ODBi
OGFhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJl
ZVZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRy
ZWVWaWV3SW1wbC5jcHAKQEAgLTQzLDE3ICs0MywxNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
UGFzc1JlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNy
ZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290
LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgUmVm
UHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBob3N0ID0gYWRvcHRSZWYobmV3IFdlYkxheWVyVHJl
ZVZpZXdJbXBsKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpKTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJU
cmVlVmlld0ltcGw+IGhvc3QgPSBhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0ltcGwoY2xp
ZW50LCBzZXR0aW5ncykpOwogICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKKyAgICBob3N0LT5zZXRSb290TGF5ZXIocm9vdCk7CiAgICAgcmV0dXJuIGhvc3Q7
CiB9CiAKLVdlYkxheWVyVHJlZVZpZXdJbXBsOjpXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXll
clRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJM
YXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpIAorV2ViTGF5ZXJUcmVlVmlld0ltcGw6
OldlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29u
c3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQogICAgIDogQ0NMYXllclRy
ZWVIb3N0KHRoaXMsIHNldHRpbmdzKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogewotICAgIHNl
dFJvb3RMYXllcihyb290KTsKIH0KIAogV2ViTGF5ZXJUcmVlVmlld0ltcGw6On5XZWJMYXllclRy
ZWVWaWV3SW1wbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllclRyZWVWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuaAppbmRleCAyZTE0NWZhNzFlZjljOTgwOGE3MGU5OTIxOTI1ZTYxOWRiNGRh
YzAyLi4zODExZTA5M2U1ZjNhMWE1YzdjYzEzMzM3OGZmMDA4NjhjNmRjNTQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKQEAgLTM5
LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVZp
ZXdJbXBsPiBjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiBy
b290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYpOwogCiBwcml2YXRlOgotICAg
IFdlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJM
YXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmKTsKKyAgICBXZWJM
YXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXJU
cmVlVmlldzo6U2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVWaWV3SW1wbCgp
OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmlu
ZGV4IGU4MzVhYjc4OWJmZDI5ZTc0ZDA4Y2Q3YTFmZTIxMzczZTYwNWE1MmUuLmM0N2E3YzI5MGM0
ZDEwNGNkNWQ3ZjliYmE5NjA0ODdkOGVmZDcyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0yNiw5
ICsyNiw5IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAKKyNpbmNs
dWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNs
dWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgpAQCAtMTU1LDcgKzE1NSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1f
ZGlkUmVxdWVzdENvbW1pdCk7CiB9CiAKLWNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDog
cHVibGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CitjbGFzcyBCbGVuZFN0YXRlVHJhY2tl
ckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAg
IEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CiAKQEAgLTI4
OSw3ICsyODksNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2Zm
V2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5kcmF3bigp
KTsKIH0KIAotY2xhc3MgUmVzaGFwZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgTW9ja1dlYkdyYXBo
aWNzQ29udGV4dDNEIHsKK2NsYXNzIFJlc2hhcGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgUmVzaGFwZVRyYWNrZXJDb250ZXh0
KCkgOiBtX3Jlc2hhcGVDYWxsZWQoZmFsc2UpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA5YmI3ZWRmYTQ1
MjE1MDgxZTY0OTZkMWNhMWUwYzM1OTIwYjZkOTI0Li42YjhlMWRiYmUyYzcxNzQ3ODMyMTIxYzdk
ZGM2YTZlZGY4YmRlZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI2LDEwICsyNiwxMCBAQAogCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKKyNpbmNsdWRlICJDb21wb3NpdG9yRmFrZUdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTW9j
a1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMDQsMTMg
KzEwNCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0xheWVyVHJlZUhv
c3Q+IGNyZWF0ZShUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBj
bGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRp
bmdzJiBzZXR0aW5ncykKICAgICB7CiAgICAgICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4g
bW9jayA9IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdCh0ZXN0SG9va3MsIGNsaWVudCwg
c2V0dGluZ3MpKTsKLSAgICAgICAgbW9jay0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG1vY2stPmluaXRpYWxpemUoKTsKICAgICAgICAgRVhQRUNUX1RS
VUUoc3VjY2Vzcyk7Ci0KKyAgICAgICAgbW9jay0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAg
ICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsIHdvbid0IGRyYXcgaWYgaXQgaGFzIDF4MSB2aWV3
cG9ydC4KICAgICAgICAgbW9jay0+c2V0Vmlld3BvcnQoSW50U2l6ZSgxLCAxKSk7Ci0KICAgICAg
ICAgcmV0dXJuIG1vY2sucmVsZWFzZSgpOwogICAgIH0KIApAQCAtMTI5LDI0ICsxMjcsNiBAQCBw
cml2YXRlOgogICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7CiB9OwogCi0vLyBUZXN0IHN0dWIg
Zm9yIFdlYkdyYXBoaWNzQ29udGV4dDNELiBSZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVlZGVkIGZv
ciBjb21wb3NpdG9yIGluaXRpYWxpemF0aW9uLgotY2xhc3MgQ29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0Q+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29s
IG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFdlYkdM
SWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3Jl
YXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRT
aGFkZXJpdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAx
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkLCBXR0MzRGVudW0sIFdH
QzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29tcG9zaXRv
ck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpIHsgfQotfTsKLQogLy8gSW1wbGVtZW50YXRpb24g
b2YgQ0NMYXllclRyZWVIb3N0IGNhbGxiYWNrIGludGVyZmFjZS4KIGNsYXNzIE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CiBwdWJsaWM6CkBA
IC0xNjcsMTAgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiAgICAgewotICAg
ICAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1vY2sgPSBDb21wb3NpdG9yTW9ja1dl
YkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJv
bVdlYkNvbnRleHQobW9jay5yZWxlYXNlKCksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9y
VXNlT25Bbm90aGVyVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgICAgIHJl
dHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRB
bmREcmF3RnJhbWUoKQpAQCAtNzU3LDcgKzczNCw3IEBAIHB1YmxpYzoKICAgICAgICAgcG9zdFNl
dE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICB7CiAg
ICAgICAgIExheWVyQ2hyb21pdW0qIHJvb3QgPSBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
OwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKQEAgLTk0Miw3
ICs5MTksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQog
CiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRl
eHQzRC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Db21wb3NpdG9yRmFrZUdyYXBo
aWNzQ29udGV4dDNELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYwODk3MzQxMzNkNzM4MGJiZmM3YWY4NDUyMTgz
NDhmYWQzNTlhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRF9oCisj
ZGVmaW5lIENvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0RfaAorCisjaW5jbHVkZSAiQ29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNy
ZWF0ZUNvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cnMpCit7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyB3ZWJBdHRyczsKKyAgICB3ZWJBdHRycy5hbHBoYSA9IGF0dHJzLmFscGhhOworCisg
ICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBXZWJL
aXQ6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSh3ZWJBdHRycyk7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoCisgICAgICAgIHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywg
MCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
LAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVh
ZCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlMTQwOWJkNDI0YjY0NzQzYjhmOTk5M2IzYzE3MmI4ZjYwYWI1MTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NvbXBvc2l0b3JGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBDb21w
b3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEX2gKKworI2luY2x1ZGUgIkZha2VXZWJHcmFw
aGljc0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGVzdCBzdHViIGZv
ciBXZWJHcmFwaGljc0NvbnRleHQzRC4gUmV0dXJucyBjYW5uZWQgdmFsdWVzIG5lZWRlZCBmb3Ig
Y29tcG9zaXRvciBpbml0aWFsaXphdGlvbi4KK2NsYXNzIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
PiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykpOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7IHJldHVybiAxOyB9CisgICAg
dmlydHVhbCBXZWJHTElkIGNyZWF0ZVNoYWRlcihXR0MzRGVudW0pIHsgcmV0dXJuIDE7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCog
dmFsdWUpIHsgKnZhbHVlID0gMTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2Vi
R0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQorCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QoQXR0
cmlidXRlcyBhdHRycykKKyAgICB7CisgICAgICAgIG1fYXR0cnMgPSBhdHRyczsKKyAgICB9Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9GYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM2ZDZiZTZl
MmNjZTA0MWVhMDViNTYxYzQzYjAwMzk5ODZlZmFmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSB0ZXN0
aW5nOworCitjbGFzcyBGcmFtZUNvdW50aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgeworcHVibGljOgorICAgIEZyYW1lQ291bnRpbmdDb250ZXh0KCkgOiBtX2Zy
YW1lKDApIHsgfQorCisgICAgLy8gVGhpcyBtZXRob2Qgd291bGQgbm9ybWFsbHkgZG8gYSBnbFN3
YXBCdWZmZXJzIHVuZGVyIHRoZSBob29kLgorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVy
ZSgpIHsgbV9mcmFtZSsrOyB9CisKKyAgICBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJuIG1fZnJh
bWU7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZTsKK307CisKK1RFU1QoRmFrZUdyYXBo
aWNzQ29udGV4dDNEVGVzdCwgQ2FuT3ZlcnJpZGVNYW51YWxseSkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50aW5nQ29udGV4dCgpKSwgYXR0
cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgIEZyYW1lQ291
bnRpbmdDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxGcmFtZUNvdW50aW5nQ29u
dGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKGNvbnRleHQuZ2V0KCkpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykg
eworICAgICAgICBjb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDEpOworICAgICAgICBjb250
ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgIH0KKyAgICBjb250ZXh0LT5maW5pc2goKTsKKwor
ICAgIEVYUEVDVF9FUSgxMCwgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKK30KKworCitjbGFz
cyBHTW9ja0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1Ymxp
YzoKKyAgICBNT0NLX01FVEhPRDAoZ2V0RXJyb3IsIFdHQzNEZW51bSgpKTsKK307CisKK1RFU1Qo
RmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuVXNlR01vY2spCit7CisgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgR01vY2tDb250ZXh0KCkpLCBhdHRycywgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgR01vY2tDb250ZXh0JiBt
b2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxHTW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisK
KyAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZ2V0RXJyb3IoKSkKKyAgICAgICAgICAgIC5X
aWxsUmVwZWF0ZWRseShSZXR1cm4oMzE0KSk7CisKKyAgICAvLyBJdCdzIE9LIHRvIGNhbGwgbWV0
aG9kcyBHTW9jayBkb2Vzbid0IGtub3cgYWJvdXQuCisgICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBtb2NrZWQgbWV0aG9kIGlzIHJldHVy
bmluZyBhcyBpbnRlbmRlZC4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAg
ICAgIEVYUEVDVF9FUSgoaW50KWNvbnRleHQtPmdldEVycm9yKCksIDMxNCk7Cit9CisKK2NsYXNz
IENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzIDogcHVibGljIEZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRCB7CitwdWJsaWM6CisgICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMoKSA6
IG1fbWFrZUN1cnJlbnRDb3VudCgwKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCkKKyAgICB7CisgICAgICAgIG1fbWFrZUN1cnJlbnRDb3VudCsrOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaW50IG1ha2VDdXJyZW50Q291bnQoKSB7IHJldHVybiBt
X21ha2VDdXJyZW50Q291bnQ7IH0KK3ByaXZhdGU6CisgICAgaW50IG1fbWFrZUN1cnJlbnRDb3Vu
dDsKK307CisKKworVEVTVChGYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LCBDb250ZXh0Rm9yVGhp
c1RocmVhZFNob3VsZE1ha2VDdXJyZW50KQoreworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRl
eHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKCkpLCBhdHRycywg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgRVhQRUNUX1RSVUUo
Y29udGV4dCk7CisgICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMmIG1vY2tDb250ZXh0
ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKj4oR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQo
KSkpOworICAgIEVYUEVDVF9FUSgxLCBtb2NrQ29udGV4dC5tYWtlQ3VycmVudENvdW50KCkpOwor
fQorCitURVNUKEZha2VHcmFwaGljc0NvbnRleHQzRFRlc3QsIENvbnRleHRGb3JBbm90aGVyVGhy
ZWFkU2hvdWxkTm90TWFrZUN1cnJlbnQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dChhZG9wdFB0cihuZXcgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMoKSksIGF0dHJzLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250ZXh0KTsKKyAgICBDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cyYgbW9ja0NvbnRl
eHQgPSAqc3RhdGljX2Nhc3Q8Q29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMqPihHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0Lmdl
dCgpKSk7CisgICAgRVhQRUNUX0VRKDAsIG1vY2tDb250ZXh0Lm1ha2VDdXJyZW50Q291bnQoKSk7
Cit9CisKK2NsYXNzIENvbnRleHRXaXRoTWFrZUN1cnJlbnRUaGF0RmFpbHMgOiBwdWJsaWMgRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBDb250ZXh0V2l0aE1ha2VDdXJy
ZW50VGhhdEZhaWxzKCkgeyB9CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitURVNUKEZha2VHcmFwaGljc0NvbnRleHQzRFRlc3Qs
IENvbnRleHRGb3JUaGlzVGhyZWFkRmFpbHNXaGVuTWFrZUN1cnJlbnRGYWlscykKK3sKKyAgICBH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBDb250ZXh0V2l0aE1ha2VDdXJy
ZW50VGhhdEZhaWxzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1Ro
cmVhZCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2YwNjUxYjc3MDMyYmQ4MGU1ODNjNjY4Mjc3NDYyODg2MDU1ZGRiOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNELmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRF9oCisjZGVmaW5lIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRF9oCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBXZWJHcmFwaGljc0NvbnRl
eHQzRCBiYXNlIGNsYXNzIGZvciB1c2UgaW4gV2ViS2l0IHVuaXQgdGVzdHMuCisvLyBBbGwgb3Bl
cmF0aW9ucyBhcmUgbm8tb3BzIChyZXR1cm5pbmcgMCBpZiBuZWNlc3NhcnkpLgorY2xhc3MgRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShBdHRyaWJ1dGVzLCBXZWJWaWV3Kiwg
Ym9vbCByZW5kZXJEaXJlY3RseVRvV2ViVmlldykgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIGludCB3aWR0aCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBoZWlnaHQo
KSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlhbnQoKSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHJlYWRCYWNrRnJhbWVidWZmZXIodW5z
aWduZWQgY2hhciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyU2l6ZSwgV2ViR0xJZCBmcmFtZWJ1ZmZl
ciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBXZWJHTElkIGdldFBsYXRmb3JtVGV4dHVyZUlkKCkgeyByZXR1cm4gMDsgfQorCisgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1
YkJ1ZmZlckNIUk9NSVVNKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcihXR0MzRGVudW0pIHsgfQorCisg
ICAgdmlydHVhbCBib29sIGlzQ29udGV4dExvc3QoKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwg
V0dDM0RpbnRwdHIgb2Zmc2V0LCBXR0MzRHNpemVpcHRyIHNpemUsIFdHQzNEZW51bSBhY2Nlc3Mp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXBCdWZmZXJTdWJEYXRhQ0hST01J
VU0oY29uc3Qgdm9pZCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCogbWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0
LCBXR0MzRGludCB5b2Zmc2V0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwg
V0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNEZW51bSBhY2Nlc3MpIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29u
c3Qgdm9pZCopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlDSFJPTUlVTShi
b29sIHZpc2libGUpIHsgfQorCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UmVxdWVzdGFibGVF
eHRlbnNpb25zQ0hST01JVU0oKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0RXh0ZW5zaW9uQ0hST01JVU0oY29uc3QgY2hhciopIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZlckNIUk9NSVVNKFdHQzNEaW50IHNyY1gwLCBXR0MzRGlu
dCBzcmNZMCwgV0dDM0RpbnQgc3JjWDEsIFdHQzNEaW50IHNyY1kxLCBXR0MzRGludCBkc3RYMCwg
V0dDM0RpbnQgZHN0WTAsIFdHQzNEaW50IGRzdFgxLCBXR0MzRGludCBkc3RZMSwgV0dDM0RiaXRm
aWVsZCBtYXNrLCBXR0MzRGVudW0gZmlsdGVyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgV0dDM0Rz
aXplaSBzYW1wbGVzLCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEc2l6ZWkgd2lkdGgs
IFdHQzNEc2l6ZWkgaGVpZ2h0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJl
KFdHQzNEZW51bSB0ZXh0dXJlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU2hhZGVyKFdl
YkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5k
QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdH
QzNEY2hhciogbmFtZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIoV0dDM0RlbnVt
IHRhcmdldCwgV2ViR0xJZCBidWZmZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVi
dWZmZXIoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikgeyB9CisgICAgdmly
dHVhbCB2b2lkIGJpbmRSZW5kZXJidWZmZXIoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCByZW5k
ZXJidWZmZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShXR0MzRGVudW0gdGFy
Z2V0LCBXZWJHTElkIHRleHR1cmUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBibGVuZENvbG9yKFdH
QzNEY2xhbXBmIHJlZCwgV0dDM0RjbGFtcGYgZ3JlZW4sIFdHQzNEY2xhbXBmIGJsdWUsIFdHQzNE
Y2xhbXBmIGFscGhhKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvbihXR0MzRGVu
dW0gbW9kZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShXR0Mz
RGVudW0gbW9kZVJHQiwgV0dDM0RlbnVtIG1vZGVBbHBoYSkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGJsZW5kRnVuYyhXR0MzRGVudW0gc2ZhY3RvciwgV0dDM0RlbnVtIGRmYWN0b3IpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShXR0MzRGVudW0gc3JjUkdCLCBXR0MzRGVu
dW0gZHN0UkdCLCBXR0MzRGVudW0gc3JjQWxwaGEsIFdHQzNEZW51bSBkc3RBbHBoYSkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRHNpemVp
cHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIFdHQzNEZW51bSB1c2FnZSkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGJ1ZmZlclN1YkRhdGEoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnRwdHIgb2Zm
c2V0LCBXR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQorCisgICAgdmly
dHVhbCBXR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhXR0MzRGVudW0gdGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9DT01QTEVURTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoV0dDM0RiaXRm
aWVsZCBtYXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihXR0MzRGNsYW1wZiBy
ZWQsIFdHQzNEY2xhbXBmIGdyZWVuLCBXR0MzRGNsYW1wZiBibHVlLCBXR0MzRGNsYW1wZiBhbHBo
YSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoV0dDM0RjbGFtcGYgZGVwdGgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwoV0dDM0RpbnQgcykgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbG9yTWFzayhXR0MzRGJvb2xlYW4gcmVkLCBXR0MzRGJvb2xlYW4gZ3JlZW4s
IFdHQzNEYm9vbGVhbiBibHVlLCBXR0MzRGJvb2xlYW4gYWxwaGEpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwg
V0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhl
aWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBXR0MzRGludCB5
b2Zmc2V0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RlbnVtIGZv
cm1hdCwgV0dDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZl
bCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0Mz
RHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0Rp
bnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNEaW50IHgs
IFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UoV0dDM0RlbnVtIG1vZGUpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkZXB0aEZ1bmMoV0dDM0RlbnVtIGZ1bmMpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXB0
aE1hc2soV0dDM0Rib29sZWFuIGZsYWcpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXB0aFJhbmdl
KFdHQzNEY2xhbXBmIHpOZWFyLCBXR0MzRGNsYW1wZiB6RmFyKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlKFdHQzNEZW51bSBjYXApIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoV0dDM0R1aW50IGluZGV4KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0FycmF5cyhXR0MzRGVudW0gbW9kZSwgV0dDM0RpbnQgZmlyc3QsIFdHQzNE
c2l6ZWkgY291bnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoV0dDM0RlbnVt
IG1vZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0ciBvZmZz
ZXQpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGVuYWJsZShXR0MzRGVudW0gY2FwKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoV0dDM0R1aW50IGluZGV4KSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNo
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKFdHQzNEZW51
bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50LCBXR0MzRGVudW0gcmVuZGVyYnVmZmVydGFy
Z2V0LCBXZWJHTElkIHJlbmRlcmJ1ZmZlcikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVm
ZmVyVGV4dHVyZTJEKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50LCBXR0Mz
RGVudW0gdGV4dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUsIFdHQzNEaW50IGxldmVsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKFdHQzNEZW51bSBtb2RlKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoV0dDM0RlbnVtIHRhcmdldCkgeyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTElkIHByb2dyYW0sIFdHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhXZWJH
TElkIHByb2dyYW0sIFdHQzNEc2l6ZWkgbWF4Q291bnQsIFdHQzNEc2l6ZWkqIGNvdW50LCBXZWJH
TElkKiBzaGFkZXJzKSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9u
KFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dDM0RjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KFdHQzNEZW51bSBwbmFtZSwgV0dDM0Rib29sZWFu
KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0KKyAgICB2
aXJ0dWFsIEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJz
OyB9CisgICAgdmlydHVhbCBXR0MzRGVudW0gZ2V0RXJyb3IoKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCB2b2lkIGdldEZsb2F0dihXR0MzRGVudW0gcG5hbWUsIFdHQzNEZmxvYXQqIHZhbHVl
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIGF0dGFjaG1lbnQsIFdHQzNEZW51bSBwbmFt
ZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihX
R0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChwbmFt
ZSA9PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSkKKyAgICAg
ICAgICAgICp2YWx1ZSA9IDEwMjQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGdldFByb2dy
YW1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHBuYW1lID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpM
SU5LX1NUQVRVUykKKyAgICAgICAgICAgICp2YWx1ZSA9IDE7CisgICAgfQorCisgICAgdmlydHVh
bCBXZWJTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xJZCBwcm9ncmFtKSB7IHJldHVybiBX
ZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIsIFdHQzNEZW51
bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHBuYW1lID09IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUykKKyAgICAgICAgICAgICp2
YWx1ZSA9IDE7CisgICAgfQorCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hhZGVySW5mb0xv
ZyhXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKworICAgIHZpcnR1YWwg
V2ViU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gV2ViU3Ry
aW5nKCk7IH0KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUp
IHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRl
cmZ2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCogdmFsdWUp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0
LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZs
b2F0KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHBy
b2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGludCogdmFsdWUpIHsgfQorICAgIHZpcnR1
YWwgV0dDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dD
M0RjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0
dHJpYmZ2KFdHQzNEdWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZsb2F0KiB2YWx1
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KFdHQzNEdWludCBpbmRl
eCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgfQorICAgIHZpcnR1YWwgV0dD
M0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoV0dDM0R1aW50IGluZGV4LCBXR0MzRGVu
dW0gcG5hbWUpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBoaW50KFdHQzNEZW51
bSB0YXJnZXQsIFdHQzNEZW51bSBtb2RlKSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBp
c0J1ZmZlcihXZWJHTElkIGJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdH
QzNEYm9vbGVhbiBpc0VuYWJsZWQoV0dDM0RlbnVtIGNhcCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMSWQgZnJhbWVidWZmZXIp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdl
YkdMSWQgcHJvZ3JhbSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVh
biBpc1JlbmRlcmJ1ZmZlcihXZWJHTElkIHJlbmRlcmJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTElkIHNoYWRlcikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xJZCB0
ZXh0dXJlKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoV0dD
M0RmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3Jh
bSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBpeGVsU3RvcmVpKFdHQzNEZW51bSBwbmFtZSwgV0dD
M0RpbnQgcGFyYW0pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KFdHQzNEZmxv
YXQgZmFjdG9yLCBXR0MzRGZsb2F0IHVuaXRzKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWFk
UGl4ZWxzKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6
ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxz
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKSB7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKFdHQzNEZW51bSB0YXJnZXQsIFdH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWln
aHQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3ZlcmFnZShXR0MzRGNsYW1wZiB2YWx1
ZSwgV0dDM0Rib29sZWFuIGludmVydCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaXNzb3IoV0dD
M0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0
IFdHQzNEY2hhciogc3RyaW5nKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmMoV0dD
M0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJlZiwgV0dDM0R1aW50IG1hc2spIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKFdHQzNEZW51bSBmYWNlLCBXR0MzRGVudW0gZnVu
YywgV0dDM0RpbnQgcmVmLCBXR0MzRHVpbnQgbWFzaykgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0
ZW5jaWxNYXNrKFdHQzNEdWludCBtYXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZShXR0MzRGVudW0gZmFjZSwgV0dDM0R1aW50IG1hc2spIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsT3AoV0dDM0RlbnVtIGZhaWwsIFdHQzNEZW51bSB6ZmFpbCwgV0dDM0Rl
bnVtIHpwYXNzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoV0dDM0Rl
bnVtIGZhY2UsIFdHQzNEZW51bSBmYWlsLCBXR0MzRGVudW0gemZhaWwsIFdHQzNEZW51bSB6cGFz
cykgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBX
R0MzRGludCBsZXZlbCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRo
LCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRGVudW0gZm9ybWF0LCBX
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB0ZXhQYXJhbWV0ZXJmKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0Rm
bG9hdCBwYXJhbSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmkoV0dDM0RlbnVt
IHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCBwYXJhbSkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwg
V0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dD
M0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihXR0MzRGludCBs
b2NhdGlvbiwgV0dDM0RmbG9hdCB4KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihX
R0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RmbG9hdCogdikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShXR0MzRGludCBsb2NhdGlvbiwgV0dDM0Rp
bnQgeCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaXYoV0dDM0RpbnQgbG9jYXRpb24s
IFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEaW50KiB2KSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybTJmKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQg
eSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdH
QzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMmkoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHkpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNp
emVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0zZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNE
ZmxvYXQgeikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtM2koV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50
IHksIFdHQzNEaW50IHopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KFdHQzNEaW50
IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm00ZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBX
R0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTRmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29u
c3QgV0dDM0RmbG9hdCogdikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RpbnQgeiwgV0dDM0RpbnQg
dykgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYoV0dDM0RpbnQgbG9jYXRpb24sIFdH
QzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEaW50KiB2KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybU1hdHJpeDJmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dD
M0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVp
IGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZSkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV0dDM0RpbnQgbG9jYXRpb24s
IFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxv
YXQqIHZhbHVlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJv
Z3JhbSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dy
YW0pIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKFdHQzNEdWludCBpbmRl
eCwgV0dDM0RmbG9hdCB4KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KFdH
QzNEdWludCBpbmRleCwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWVzKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdmVydGV4QXR0cmliMmYoV0dDM0R1aW50IGluZGV4LCBXR0MzRGZsb2F0IHgsIFdHQzNE
ZmxvYXQgeSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdihXR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9CisgICAgdmlydHVhbCB2b2lkIHZl
cnRleEF0dHJpYjNmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHks
IFdHQzNEZmxvYXQgeikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdihXR0Mz
RHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHZlcnRleEF0dHJpYjRmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZs
b2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dmVydGV4QXR0cmliNGZ2KFdHQzNEdWludCBpbmRleCwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWVz
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihXR0MzRHVpbnQgaW5k
ZXgsIFdHQzNEaW50IHNpemUsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGJvb2xlYW4gbm9ybWFsaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXR0MzRHNpemVpIHN0cmlk
ZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChX
R0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdo
dCkgeyB9CisKKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlQnVmZmVyKCkgeyByZXR1cm4gMTsg
fQorICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVGcmFtZWJ1ZmZlcigpIHsgcmV0dXJuIDE7IH0K
KyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KKyAgICB2
aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUmVuZGVyYnVmZmVyKCkgeyByZXR1cm4gMTsgfQorICAgIHZp
cnR1YWwgV2ViR0xJZCBjcmVhdGVTaGFkZXIoV0dDM0RlbnVtKSB7IHJldHVybiAxOyB9CisgICAg
dmlydHVhbCBXZWJHTElkIGNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiAxOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMSWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTElkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3Jh
bShXZWJHTElkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdM
SWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xJZCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xJZCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgdGV4U3RvcmFnZTJERVhUKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVscywgV0dD
M0R1aW50IGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0dDM0RpbnQgd2lkdGgsIFdHQzNEaW50IGhlaWdodCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBB
dHRyaWJ1dGVzIG1fYXR0cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDQ5OTQzMzU3MjRmNmIxNGYy
N2Q5NzBmZTY4OTJhYjVlOWUxNWQ0OGYuLmZiYjljMTllYTAxMTlkN2JjOGQyZGM4ZTRmMjQ4YmQz
NWE4OTMzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJDQ0xh
eWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgpAQCAtMzUsODcgKzM2LDc3IEBA
CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNp
bmcgOjp0ZXN0aW5nOjpNb2NrOwogdXNpbmcgOjp0ZXN0aW5nOjpfOwogdXNpbmcgOjp0ZXN0aW5n
OjpBdExlYXN0OwogdXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7CiAKLSNkZWZpbmUgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKGRlbGVnYXRlLCBudW1UaW1lc0V4cGVj
dGVkTm90aWZ5U3luYywgY29kZVRvVGVzdCkgXAotICAgIEVYUEVDVF9DQUxMKChkZWxlZ2F0ZSks
IG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygobnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMp
KTsgXAotICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCYoZGVsZWdhdGUpKQorI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NP
TU1JVF9CRUhBVklPUihudW1UaW1lc0V4cGVjdGVkU2V0TmVlZHNDb21taXQsIGNvZGVUb1Rlc3Qp
IGRvIHsgXAorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0Nv
bW1pdCgpKS5UaW1lcygobnVtVGltZXNFeHBlY3RlZFNldE5lZWRzQ29tbWl0KSk7ICAgICAgXAor
ICAgICAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAK
IG5hbWVzcGFjZSB7CiAKLWNsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJE
ZWxlZ2F0ZSB7CitjbGFzcyBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdENsaWVudCB7CiBwdWJsaWM6Ci0gICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdz
Q29udGVudCwgYm9vbCgpKTsKLSAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJv
b2woKSk7Ci0gICAgTU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYpKTsKLSAgICBNT0NLX01FVEhPRDAobm90aWZ5U3luY1JlcXVp
cmVkLCB2b2lkKCkpOwotfTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNj
YWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGUpIHsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVH
cmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0QW5kRHJhd0ZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1
ZmZlcnMoKSB7IH0KIAotY2xhc3MgTW9ja0xheWVyUGFpbnRlckNocm9taXVtIDogcHVibGljIExh
eWVyUGFpbnRlckNocm9taXVtIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIC8vIFVzZWQgb25seSBpbiB0
aGUgc2luZ2xlLXRocmVhZGVkIHBhdGguCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRlKCkgeyB9CiB9OwogCi1jbGFzcyBNb2NrTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IDogcHVi
bGljIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCB7CitjbGFzcyBNb2NrQ0NMYXllclRyZWVIb3N0
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8TW9ja05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gY3JlYXRlKCkKKyAgICBNb2NrQ0NMYXll
clRyZWVIb3N0KCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoJm1fZmFrZUNsaWVudCwgQ0NT
ZXR0aW5ncygpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0KTsKKyAgICAgICAgaW5pdGlhbGl6ZSgpOwogICAgIH0KIAotICAg
IE1PQ0tfTUVUSE9EMShub3RpZnlTeW5jUmVxdWlyZWQsIHZvaWQoY29uc3QgR3JhcGhpY3NMYXll
ciopKTsKKyAgICBNT0NLX01FVEhPRDAoc2V0TmVlZHNDb21taXQsIHZvaWQoKSk7CiAKIHByaXZh
dGU6Ci0gICAgTW9ja05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpCi0gICAgICAgIDogTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0KGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJQYWludGVyQ2hyb21pdW0o
KSkpCi0gICAgewotICAgICAgICBtX3Njcm9sbExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KDApOwotICAgICAgICBzZXRTY3JvbGxMYXllcihtX3Njcm9sbExheWVyLmdldCgpKTsKLSAgICB9
Ci0gICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRmFrZUNDTGF5
ZXJUcmVlSG9zdENsaWVudCBtX2Zha2VDbGllbnQ7CiB9OwogCi1jbGFzcyBMYXllckNocm9taXVt
V2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitjbGFz
cyBNb2NrTGF5ZXJQYWludGVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0g
ewogcHVibGljOgotICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3RvcihDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQotICAgICAgICA6IExheWVyQ2hyb21p
dW0oZGVsZWdhdGUpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkxheWVyQ2hyb21pdW1X
aXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigpCi0gICAgewotICAgICAgICBzX251bUluc3RhbmNl
c0Rlc3Ryb3llZCsrOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzRGVz
dHJveWVkKCkgeyByZXR1cm4gc19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7IH0KLSAgICBzdGF0aWMg
dm9pZCByZXNldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpIHsgc19udW1JbnN0YW5jZXNEZXN0cm95
ZWQgPSAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGludCBzX251bUluc3RhbmNlc0Rlc3Ry
b3llZDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYpIHsgfQogfTsKIAotaW50IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1
Y3Rvcjo6c19udW1JbnN0YW5jZXNEZXN0cm95ZWQgPSAwOwogCiBjbGFzcyBMYXllckNocm9taXVt
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgU2V0VXAoKQogICAgIHsKLSAgICAgICAgLy8gbV9zaWxlbnREZWxlZ2F0ZSBpcyBpbml0aWFs
aXplZCB0byBiZSBqdXN0IGEgc3R1YiBhbmQgd2lsbAotICAgICAgICAvLyBub3QgcHJpbnQgYW55
IHdhcm5pbmdzLiBJdCBpcyB1c2VkIHdoZW4gd2UgYXJlIG5vdCB3b3JyaWVkCi0gICAgICAgIC8v
IGFib3V0IHRlc3RpbmcgaG93IHRoZSBkZWxlZ2F0ZSBpcyBjYWxsZWQuCi0gICAgICAgIEVYUEVD
VF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIGRyYXdzQ29udGVudCgpKS5UaW1lcyhBbnlOdW1iZXIo
KSk7Ci0gICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIHByZXNlcnZlczNEKCkp
LlRpbWVzKEFueU51bWJlcigpKTsKLSAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0
ZSwgcGFpbnRDb250ZW50cyhfLCBfKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAgICAgICBFWFBF
Q1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQW55
TnVtYmVyKCkpOwotCi0gICAgICAgIC8vIFN0YXRpYyB2YXJpYWJsZXMgbmVlZCB0byBiZSByZXNl
dCBmb3IgZXZlcnkgbmV3IHRlc3QgY2FzZQotICAgICAgICBMYXllckNocm9taXVtV2l0aEluc3Ry
dW1lbnRlZERlc3RydWN0b3I6OnJlc2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCk7CisgICAgICAg
IC8vIEluaXRpYWxpemUgd2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KKyAgICAgICAgV2ViS2l0
OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3Qg
PSBhZG9wdFJlZihuZXcgTW9ja0NDTGF5ZXJUcmVlSG9zdCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKCpt
X2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAg
ICAgICAgbV9wYXJlbnQuY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZDEuY2xlYXIoKTsKKyAgICAg
ICAgbV9jaGlsZDIuY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZDMuY2xlYXIoKTsKKyAgICAgICAg
bV9ncmFuZENoaWxkMS5jbGVhcigpOworICAgICAgICBtX2dyYW5kQ2hpbGQyLmNsZWFyKCk7Cisg
ICAgICAgIG1fZ3JhbmRDaGlsZDMuY2xlYXIoKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFJvb3RMYXllcigwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAg
ICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICB9CiAKICAgICB2b2lk
IHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCkgY29uc3QKQEAgLTE0MywxNjIgKzEzNCw5MCBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCkKICAgICB7Ci0g
ICAgICAgIG1fcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3BhcmVudERlbGVnYXRl
KTsKLSAgICAgICAgbV9jaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOwotICAgICAgICBtX2NoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxl
bnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fY2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZt
X3NpbGVudERlbGVnYXRlKTsKLSAgICAgICAgbV9ncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fZ3JhbmRDaGlsZDIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgICAgICBtX2dyYW5kQ2hp
bGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLQotICAgICAg
ICBFWFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGlt
ZXMoMyk7CisgICAgICAgIG1fcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
ICAgICBtX2NoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGls
ZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGQzID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX2dyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgICAgICBtX2dyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgICAgICBtX2dyYW5kQ2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0
KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290
TGF5ZXIobV9wYXJlbnQpOworCiAgICAgICAgIG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMSk7
CiAgICAgICAgIG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMik7CiAgICAgICAgIG1fcGFyZW50
LT5hZGRDaGlsZChtX2NoaWxkMyk7Ci0gICAgICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0
YXRpb25zKCZtX3BhcmVudERlbGVnYXRlKTsKICAgICAgICAgbV9jaGlsZDEtPmFkZENoaWxkKG1f
Z3JhbmRDaGlsZDEpOwogICAgICAgICBtX2NoaWxkMS0+YWRkQ2hpbGQobV9ncmFuZENoaWxkMik7
CiAgICAgICAgIG1fY2hpbGQyLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQzKTsKIAorICAgICAgICBN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwor
CiAgICAgICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCk7CiAgICAgfQogCi0gICAgTW9j
a0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0ZTsKKyAgICBS
ZWZQdHI8TW9ja0NDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBtX2NoaWxkMywgbV9n
cmFuZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKIH07CiAKIFRFU1RfRihM
YXllckNocm9taXVtVGVzdCwgYmFzaWNDcmVhdGVBbmREZXN0cm95KQogewotICAgIE1vY2tMYXll
ckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKLQotICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91
bGQgbm90IGJlIGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhlIGxheWVyIGlzIGNyZWF0ZWQgb3IgZGVz
dHJveWVkLgotICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVk
KCkpLlRpbWVzKDApOwotCi0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVk
RGVzdHJ1Y3Rvcj4gdGVzdExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3RvcigmbW9ja0RlbGVnYXRlKSk7Ci0gICAgQVNTRVJUX1RSVUUodGVz
dExheWVyLmdldCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIEFTU0VSVF9UUlVFKHRlc3RMYXllcik7CiAKLSAg
ICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIGFsc28gbm90IGJlIGNhbGxlZCBvbiB0aGUg
ZGVzdHJ1Y3RvciB3aGVuIHRoZSBsYXllciBoYXMgbm8gY2hpbGRyZW4uCi0gICAgLy8gc28gd2Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhlIGxheWVyIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIG1vY2sg
ZGVsZWdhdGUuCi0gICAgQVNTRVJUX0VRKDAsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVk
RGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOwotICAgIHRlc3RMYXllci5y
ZWxlYXNlKCk7Ci0gICAgQVNTRVJUX0VRKDEsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVk
RGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOworICAgIEVYUEVDVF9DQUxM
KCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKDApOworICAgIHRlc3RM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogfQogCiBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGFkZEFuZFJlbW92ZUNoaWxkKQogewotICAgIE1vY2tMYXll
ckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwotICAgIE1vY2tMYXllckRlbGVnYXRlIGNoaWxkRGVs
ZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAg
ICAvLyBVcG9uIGNyZWF0aW9uLCBsYXllcnMgc2hvdWxkIG5vdCBoYXZlIGNoaWxkcmVuIG9yIHBh
cmVudC4KICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGls
ZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7CiAKLSAg
ICAvLyBQYXJlbnQgY2FsbHMgbm90aWZ5U3luY1JlcXVpcmVkIGV4YWN0bHkgb25jZSB3aGVuIGFk
ZGluZyBjaGlsZC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
cGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpKTsKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCBtX2xheWVyVHJlZUhvc3Qt
PnNldFJvb3RMYXllcihwYXJlbnQpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVF
RFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpKTsKIAogICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgp
KTsKICAgICBFWFBFQ1RfRVEoY2hpbGQuZ2V0KCksIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAg
ICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKICAgICBFWFBFQ1Rf
RVEocGFyZW50LmdldCgpLCBjaGlsZC0+cm9vdExheWVyKCkpOwogCi0gICAgLy8gcmVtb3ZlRnJv
bVBhcmVudCBzaG91bGQgY2F1c2UgdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBi
ZSBjYWxsZWQgZXhhY3RseSBvbmNlLgotICAgIC8vIFRoZSBjaGlsZERlbGVnYXRlIG5vdGlmeVN5
bmNSZXF1aXJlZCBzaG91bGQgcmVtYWluIHVuLXVzZWQuCi0gICAgRVhQRUNUX0NBTEwoY2hpbGRE
ZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOwotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgY2hpbGQtPnJl
bW92ZUZyb21QYXJlbnQoKSk7Ci19Ci0KLVRFU1RfRihMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
RGVzdHJ1Y3RvclNlbWFudGljcykKLXsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxl
Z2F0ZTsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRlOwotICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I+IHBhcmVudCA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJnBhcmVudERlbGVn
YXRlKSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKLQotICAgIC8vIFNldCB1cCBpbml0aWFsIHRlc3QgY29u
ZGl0aW9ucwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJl
bnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOwotICAgIEVYUEVDVF9UUlVF
KGNoaWxkLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBXaGVuIGJlaW5nIGRlc3Ryb3llZCwgbm90aWZ5
U3luY1JlcXVpcmVkIGlzIGNhbGxlZCBvbmNlIGZvciB0aGUgcGFyZW50LCBiZWNhdXNlIGl0IGhh
cyBvbmUgY2hpbGQsCi0gICAgLy8gYnV0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciB0aGUgY2hp
bGQgd2hpY2ggaGFzIG5vIGNoaWxkcmVuLgotICAgIEVYUEVDVF9DQUxMKHBhcmVudERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7Ci0gICAgRVhQRUNUX0NBTEwoY2hpbGRE
ZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOwotCi0gICAgQVNTRVJUX0VR
KDAsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFu
Y2VzRGVzdHJveWVkKCkpOwotICAgIHBhcmVudC5yZWxlYXNlKCk7Ci0gICAgQVNTRVJUX0VRKDEs
IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2Vz
RGVzdHJveWVkKCkpOwotCi0gICAgLy8gQ2hpbGQgc2hvdWxkIGhhdmUgYmVlbiB1bi1wYXJlbnRl
ZCBjb3JyZWN0bHksIGJ1dCBub3QgeWV0IGRlc3Ryb3llZCBzaW5jZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlIHRvIGl0LgotICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+cGFyZW50KCkpOwotfQotCi1URVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeURlc3RydWN0b3JEb2VzTm90TGVhaykKLXsKLSAg
ICAvLyBJbiB0aGlzIHRlc3Qgd2UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSBhIHNwZWNpYWwgc3Vi
Y2xhc3Mgb2YKLSAgICAvLyBMYXllckNocm9taXVtIHNvIHdlIGNhbiB0cmFjayB0aGUgbnVtYmVy
IG9mIGRlc3RydWN0b3JzIGNhbGxlZC4KLQotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aElu
c3RydW1lbnRlZERlc3RydWN0b3I+IHBhcmVudCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMywgZ3Jh
bmRDaGlsZDEsIGdyYW5kQ2hpbGQyLCBncmFuZENoaWxkMzsKLSAgICBwYXJlbnQgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERl
bGVnYXRlKSk7Ci0gICAgY2hpbGQxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGNoaWxkMiA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2ls
ZW50RGVsZWdhdGUpKTsKLSAgICBjaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0gICAgZ3JhbmRD
aGlsZDEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVj
dG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0gICAgZ3JhbmRDaGlsZDIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRl
KSk7Ci0gICAgZ3JhbmRDaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0KLSAgICAvLyBzZXQgdXAg
YSBzaW1wbGUgdHJlZS4KLSAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7Ci0gICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZDIpOwotICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQzKTsKLSAgICBj
aGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsKLSAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5k
Q2hpbGQyKTsKLSAgICBjaGlsZDItPmFkZENoaWxkKGdyYW5kQ2hpbGQzKTsKLQotICAgIC8vIENs
ZWFyIGFsbCB0aGUgY2hpbGRyZW4gUmVmUHRycyBoZXJlLiBCdXQgc2luY2UgdGhleSBhcmUgYXR0
YWNoZWQgdG8gdGhlIHRyZWUsIG5vIGRlc3RydWN0b3JzIHNob3VsZCBiZSBjYWxsZWQgeWV0Lgot
ICAgIGNoaWxkMS5jbGVhcigpOwotICAgIGNoaWxkMi5jbGVhcigpOwotICAgIGNoaWxkMy5jbGVh
cigpOwotICAgIGdyYW5kQ2hpbGQxLmNsZWFyKCk7Ci0gICAgZ3JhbmRDaGlsZDIuY2xlYXIoKTsK
LSAgICBncmFuZENoaWxkMy5jbGVhcigpOwotCi0gICAgLy8gcmVsZWFzaW5nIHRoZSBwYXJlbnQg
c2hvdWxkIGNhdXNlIGFsbCBkZXN0cnVjdG9ycyB0byBiZSBpbnZva2VkLgotICAgIEFTU0VSVF9F
USgwLCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3Rh
bmNlc0Rlc3Ryb3llZCgpKTsKLSAgICBwYXJlbnQucmVsZWFzZSgpOwotICAgIEFTU0VSVF9FUSg3
LCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNl
c0Rlc3Ryb3llZCgpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9C
RUhBVklPUihBdExlYXN0KDEpLCBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpKTsKIH0KIAogVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZCkKIHsKLSAgICBNb2NrTGF5ZXJEZWxl
Z2F0ZSBwYXJlbnREZWxlZ2F0ZTsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRl
OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPnBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmcGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPmNoaWxkMSA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+Y2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNo
aWxkRGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPmNoaWxkNCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwog
Ci0gICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCkpOworICAgIHBhcmVudC0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3Qu
Z2V0KCkpOwogCi0gICAgLy8gVGhlIGNoaWxkIGRlbGVnYXRlIG5vdGlmeVN5bmNSZXF1aXJlZCBz
aG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGluc2VydGluZy4KLSAgICBFWFBFQ1RfQ0FMTChjaGls
ZERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogCiAg
ICAgLy8gQ2FzZSAxOiBpbnNlcnRpbmcgdG8gZW1wdHkgbGlzdC4KLSAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5z
ZXJ0Q2hpbGQoY2hpbGQzLCAwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19D
T01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDMsIDApKTsKICAgICBB
U1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUo
KSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKICAgICBF
WFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZDMtPnBhcmVudCgpKTsKIAogICAgIC8vIENhc2Ug
MjogaW5zZXJ0aW5nIHRvIGJlZ2lubmluZyBvZiBsaXN0Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENo
aWxkKGNoaWxkMSwgMCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlU
X0JFSEFWSU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7CiAgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwog
ICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNU
X0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKICAgICBFWFBFQ1RfRVEocGFyZW50
LmdldCgpLCBjaGlsZDEtPnBhcmVudCgpKTsKIAogICAgIC8vIENhc2UgMzogaW5zZXJ0aW5nIHRv
IG1pZGRsZSBvZiBsaXN0Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMiwgMSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBhcmVu
dC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMyksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGls
ZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50
LT5jaGlsZHJlbigpWzFdKTsKQEAgLTMwNiw3ICsyMjUsNyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIGluc2VydENoaWxkKQogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkMi0+
cGFyZW50KCkpOwogCiAgICAgLy8gQ2FzZSA0OiBpbnNlcnRpbmcgdG8gZW5kIG9mIGxpc3QKLSAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUs
IDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQ0LCAzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGls
ZDQsIDMpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBwYXJlbnQt
PmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxk
cmVuKClbMF0pOwpAQCAtMzE1LDE1ICsyMzQsMTQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBpbnNlcnRDaGlsZCkKICAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBwYXJlbnQtPmNoaWxkcmVuKClb
M10pOwogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOwogCi0g
ICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQg
YXMgaXQgcmVtb3ZlcyBpdHMgY2hpbGRyZW4uCi0gICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdh
dGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1Rf
Q0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBdExlYXN0KDEp
KTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZFBhc3RFbmRPZkxp
c3QpCiB7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxl
bnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAKQEAgLTM0Myw2NSArMjYx
LDQwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRQYXN0RW5kT2ZMaXN0
KQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydFNhbWVDaGlsZFR3aWNlKQogewot
ICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVudERlbGVnYXRlKTsK
LSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
KworICAgIHBhcmVudC0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwog
CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgMCkpOwotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwg
MSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDIsIDEpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxk
MSwgMCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CiAKICAgICBBU1NFUlRfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQ
RUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKICAgICBFWFBFQ1RfRVEoY2hp
bGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOwogCiAgICAgLy8gSW5zZXJ0aW5nIHRoZSBzYW1l
IGNoaWxkIGFnYWluIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQgdG8gYmUgcmVtb3ZlZCBhbmQgcmUt
aW5zZXJ0ZWQgYXQgdGhlIG5ldyBsb2NhdGlvbi4KLSAgICAvLyBTbyB0aGUgcGFyZW50J3Mgbm90
aWZ5U3luY1JlcXVpcmVkIHdvdWxkIGJlIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcy4KLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIEF0
TGVhc3QoMSksIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAxKSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgcGFyZW50LT5p
bnNlcnRDaGlsZChjaGlsZDEsIDEpKTsKIAogICAgIC8vIGNoaWxkMSBzaG91bGQgbm93IGJlIGF0
IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MiksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZDIsIHBh
cmVudC0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGls
ZHJlbigpWzFdKTsKIAotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90
aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KLSAgICBFWFBF
Q1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVh
c3QoMSkpOwotfQotCi1URVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydENoaWxkVGhhdEFs
cmVhZHlIYWRQYXJlbnQpCi17Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgb2xkUGFyZW50RGVsZWdh
dGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG9sZFBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmb2xkUGFyZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxl
bnREZWxlZ2F0ZSk7Ci0KLSAgICAvLyBzZXQgdXAgYW5kIHNhbml0eS1jaGVjayBpbml0aWFsIHRl
c3QgY29uZGl0aW9ucwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
UihvbGRQYXJlbnREZWxlZ2F0ZSwgMSwgb2xkUGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOwotICAg
IEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBvbGRQYXJlbnQtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5j
aGlsZHJlbigpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNoaWxkLCBvbGRQYXJlbnQtPmNoaWxk
cmVuKClbMF0pOwotICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNoaWxkLT5wYXJlbnQo
KSk7Ci0KLSAgICAvLyBJbnNlcnRpbmcgdG8gbmV3IHBhcmVudCBjYXVzZXMgb2xkIHBhcmVudCdz
IG5vdGlmeVN5bmNSZXF1aXJlZCB0byBiZSBjYWxsZWQuCi0gICAgLy8gTm90ZSB0aGF0IGl0IGFs
c28gY2F1c2VzIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBiZSBjYWxsZWQsIGJ1dCB0
aGF0IGlzIHRlc3RlZCBlbHNld2hlcmUuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG9sZFBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNo
aWxkLCAwKSk7Ci0KLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgb2xkUGFy
ZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjaGlsZCwg
cGFyZW50LT5jaGlsZHJlbigpWzBdKTsKLSAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGls
ZC0+cGFyZW50KCkpOworICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRz
Q29tbWl0KCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRl
c3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZCkKIHsKICAgICBjcmVhdGVTaW1wbGVUZXN0VHJl
ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQ0
LT5wYXJlbnQoKSk7CiAKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZCht
X2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVE
U19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2No
aWxkMi5nZXQoKSwgY2hpbGQ0KSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEobV9jaGls
ZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKQEAgLTQxMCw5ICszMDMsNiBAQCBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZCkKICAgICBFWFBFQ1Rf
RVEobV9wYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOwogCiAgICAgRVhQRUNUX0ZBTFNF
KG1fY2hpbGQyLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwg
aW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNoaWxkcmVu
Ci0gICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxh
Y2VDaGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhlclBhcmVudCkKQEAgLTQyMCwxNCArMzEwLDE0
IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5ld0NoaWxkVGhh
dEhhc090aGVyUGFyZW50KQogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CiAKICAgICAvLyBj
cmVhdGUgYW5vdGhlciBzaW1wbGUgdHJlZSB3aXRoIHRlc3RMYXllciBhbmQgY2hpbGQ0LgotICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
Jm1fc2lsZW50RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAg
ICB0ZXN0TGF5ZXItPmFkZENoaWxkKGNoaWxkNCk7CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oMSksIHRlc3RMYXllci0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9F
UShjaGlsZDQsIHRlc3RMYXllci0+Y2hpbGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKHRlc3RM
YXllci5nZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CiAKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbV9wYXJl
bnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgbV9wYXJlbnQt
PnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CiAKICAgICBBU1NFUlRfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAg
ICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKQEAgLTQzOSw0
NyArMzI5LDM3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5l
d0NoaWxkVGhhdEhhc090aGVyUGFyZW50KQogICAgIC8vIGFuZCBjaGlsZDIgc2hvdWxkIG5vIGxv
bmdlciBoYXZlIGEgcGFyZW50LgogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDAp
LCB0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UobV9jaGls
ZDItPnBhcmVudCgpKTsKLQotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ug
bm90aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KLSAgICBF
WFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
QXRMZWFzdCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxk
V2l0aFNhbWVDaGlsZCkKIHsKICAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOwogCi0gICAgLy8g
bm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkIGJlY2F1c2UgaXRzIHRoZSBz
YW1lIGNoaWxkCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1f
cGFyZW50RGVsZWdhdGUsIDAsIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCks
IG1fY2hpbGQyKSk7CisgICAgLy8gc2V0TmVlZHNDb21taXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
YmVjYXVzZSBpdHMgdGhlIHNhbWUgY2hpbGQKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigwLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hpbGQyLmdl
dCgpLCBtX2NoaWxkMikpOwogCiAgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKLQot
ICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVk
IGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KLSAgICBFWFBFQ1RfQ0FMTChtX3BhcmVu
dERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiB9CiAK
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVtb3ZlQWxsQ2hpbGRyZW4pCiB7CiAgICAgY3Jl
YXRlU2ltcGxlVGVzdFRyZWUoKTsKIAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoQXRMZWFzdCgzKSwgbV9wYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuKCkpOwogCiAg
ICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIG1fcGFyZW50LT5jaGlsZHJlbigp
LnNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fY2hpbGQxLT5wYXJlbnQoKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fY2hpbGQz
LT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBj
YWxsZWQgaWYgdHJ5aW5nIHRvIHJlbW92ZUFsbENoaWxkcmVuIHdoZW4gdGhlcmUgYXJlIG5vIGNo
aWxkcmVuLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtX3Bh
cmVudERlbGVnYXRlLCAwLCBtX3BhcmVudC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKSk7CiB9CiAKIFRF
U1RfRihMYXllckNocm9taXVtVGVzdCwgc2V0Q2hpbGRyZW4pCiB7Ci0gICAgTW9ja0xheWVyRGVs
ZWdhdGUgbmV3UGFyZW50RGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG9sZFBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG5ld1BhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbmV3
UGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld1Bh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAotICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwot
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
Jm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
MiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBuZXdDaGlsZHJlbjsKICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQxKTsK
QEAgLTQ5MSwyMyArMzcxLDI1IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgc2V0Q2hpbGRy
ZW4pCiAgICAgRVhQRUNUX0VRKG9sZFBhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cGFyZW50KCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG5ld1BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBu
ZXdQYXJlbnQtPnNldENoaWxkcmVuKG5ld0NoaWxkcmVuKSk7CisgICAgbmV3UGFyZW50LT5zZXRM
YXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUihBdExlYXN0KDEpLCBuZXdQYXJlbnQtPnNl
dENoaWxkcmVuKG5ld0NoaWxkcmVuKSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigyKSwgbmV3UGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKG5l
d1BhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CiAgICAgRVhQRUNUX0VRKG5ld1BhcmVu
dC5nZXQoKSwgY2hpbGQyLT5wYXJlbnQoKSk7CiAKLSAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9y
IHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGl0cyBjaGlsZHJl
bi4KLSAgICBFWFBFQ1RfQ0FMTChuZXdQYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVk
KCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3Qs
IHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJlZU1hbmlwdWxhdGlvbnMpCiB7CiAgICAg
Y3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKIAotICAgIC8vIElu
IHRoaXMgdGVzdCBjYXNlLCB3ZSBkb24ndCBjYXJlIGFib3V0IGhvdyB0aGUgcGFyZW50J3Mgbm90
aWZ5U3luY1JlcXVpcmVkIGlzIGNhbGxlZC4KLSAgICBFWFBFQ1RfQ0FMTChtX3BhcmVudERlbGVn
YXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgIC8vIEZv
ciB0aGlzIHRlc3Qgd2UgZG9uJ3QgY2FyZSBhYm91dCBzZXROZWVkc0NvbW1pdCBjYWxscy4KKyAg
ICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhB
dExlYXN0KDEpKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fcGFy
ZW50LT5yb290TGF5ZXIoKSk7CiAgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxk
MS0+cm9vdExheWVyKCkpOwpAQCAtNTYyLDEwICs0NDQsMTEgQEAgVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIHsKICAg
ICAvLyBUaGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rpc3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBo
ZXJlOgogICAgIC8vICAgMS4gc2V0cyBuZWVkc0Rpc3BsYXkgZmxhZyBhcHByb3ByaWF0ZWx5Lgot
ICAgIC8vICAgMi4gaW5kaXJlY3RseSBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQsIGV4YWN0bHkg
b25jZSBmb3IgZWFjaCBjYWxsIHRvIHNldE5lZWRzRGlzcGxheS4KKyAgICAvLyAgIDIuIGluZGly
ZWN0bHkgY2FsbHMgc2V0TmVlZHNDb21taXQsIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRv
IHNldE5lZWRzRGlzcGxheS4KKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgdGVzdExheWVyLT5zZXRMYXllclRyZWVI
b3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2Nr
RGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RMYXllciA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKICAgICBJbnRTaXplIHRlc3RCb3VuZHMgPSBJ
bnRTaXplKDUwMSwgNTA4KTsKIAogICAgIEZsb2F0UmVjdCBkaXJ0eTEgPSBGbG9hdFJlY3QoMTAu
MGYsIDE1LjBmLCAxLjBmLCAyLjBmKTsKQEAgLTU3Niw0OCArNDU5LDQzIEBAIFRFU1RfRihMYXll
ckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3Ip
CiAgICAgLy8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIG5vdCBiZSBkaXJ0eS4K
ICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICAvLyBU
aGlzIGlzIGp1c3QgaW5pdGlhbGl6YXRpb24sIGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZp
b3IgaXMgdmVyaWZpZWQgYW55d2F5IHRvIGF2b2lkIHdhcm5pbmdzLgotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKLSAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9u
LCBidXQgc2V0TmVlZHNDb21taXQgYmVoYXZpb3IgaXMgdmVyaWZpZWQgYW55d2F5IHRvIGF2b2lk
IHdhcm5pbmdzLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFW
SU9SKDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAgICB0ZXN0TGF5ZXIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgdGVzdExheWVyLT5zZXRMYXllclRyZWVI
b3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+
bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhlIHJlYWwgdGVzdCBiZWdpbnMgaGVyZS4KIAog
ICAgIC8vIENhc2UgMTogbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVz
ZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
UmVjdChlbXB0eURpcnR5UmVjdCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNf
Q09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChlbXB0eURp
cnR5UmVjdCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsK
IAogICAgIC8vIENhc2UgMjogYmFzaWMuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlS
ZWN0KGRpcnR5MSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eTEpKTsKICAgICBF
WFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIENhc2UgMzog
YSBzZWNvbmQgZGlydHkgcmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3Qo
ZGlydHkyKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJ
T1IoMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5MikpOwogICAgIEVYUEVD
VF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gQ2FzZSA0OiBMYXll
ckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJv
dW5kcy4KLSAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0
ZSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5UmVjdChvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOworICAgIHRlc3RM
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0TGF5ZXItPnNldExheWVy
VHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91
bmRzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1Io
MSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KG91dE9mQm91bmRzRGlydHlSZWN0KSk7
CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBD
YXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnLgotICAg
IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKSk7CisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RM
YXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VU
X05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsK
ICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKLQotICAgIC8vIENh
c2UgNjogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hvdWxk
IG5vdCBjYXVzZQotICAgIC8vIG5lZWRzRGlzcGxheSBmbGFnIHRvIGNoYW5nZSBmb3IgTGF5ZXJD
aHJvbWl1bSB3aXRoIGVtcHR5IGJvdW5kcy4KLSAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxl
Z2F0ZSkKIHsKLSAgICAvLyBXaXRob3V0IGEgZGVsZWdhdGUsIHRoZSBsYXllciBzaG91bGQgc3Rp
bGwgbWFyayBpdHNlbGYgZGlydHkgYXMgYXBwcm9wcmlhdGUsCi0gICAgLy8gYW5kIGl0IHNob3Vs
ZCBub3QgY3Jhc2ggdHJ5aW5nIHRvIHVzZSBhIG5vbi1leGlzdGluZyBkZWxlZ2F0ZS4KICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OwogICAgIEludFNpemUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAxLCA1MDgpOwogCkBAIC02MzUs
NzIgKzUxMyw1MCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNw
bGF5V2l0aE51bGxEZWxlZ2F0ZSkKIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1By
b3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogewotICAgIE1vY2tMYXllckRlbGVn
YXRlIGluaXRpYWxEZWxlZ2F0ZTsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmaW5pdGlhbERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZHVtbXlM
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7IC8vIGp1c3Qg
YSBkdW1teSBsYXllciBmb3IgdGhpcyB0ZXN0IGNhc2UuCisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0TGF5ZXIt
PnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBkdW1teUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOyAvLyBq
dXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgogCiAgICAgLy8gc2FuaXR5IGNo
ZWNrIG9mIGluaXRpYWwgdGVzdCBjb25kaXRpb24KICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVy
LT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQg
bm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCi0gICAg
Ly8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIG5lZWRz
RGlzcGxheSBmbGFnIHNob3VsZCByZW1haW4gZmFsc2UuCi0gICAgRVhQRUNUX0NBTEwoaW5pdGlh
bERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7IC8vIG9sZCBkZWxlZ2F0
ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBzZXREZWxlZ2F0ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0
ZS4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAwLCB0ZXN0TGF5ZXItPnNldERlbGVnYXRlKCZtb2NrRGVsZWdhdGUpKTsKLSAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNDAsIDUwKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VXNl
c0xheWVyQ2xpcHBpbmcodHJ1ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVk
Q29udGVudCh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3T3BhY2l0eSgwLjVmKSk7Ci0g
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MCwgdGVzdExheWVyLT5zZXRDbGlwUmVjdChJbnRSZWN0KDMsIDMsIDgsIDgpKSk7Ci0gICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVz
dExheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0
U2NyZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwotICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RM
YXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUsIDYsIDcpKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVy
LT5zZXROYW1lKCJUZXN0IExheWVyIikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVF
RFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRS
ZWN0KDAsIDAsIDQwLCA1MCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NP
TU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0
TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0RHJhd09w
YWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDAsIHRlc3RMYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RM
YXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3Jt
KFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3Jt
KFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3Qo
SW50UmVjdCg0LCA1LCA2LCA3KSkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRz
RGlzcGxheSgpKTsKIAogICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBj
YWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxheSkKLSAgICAvLyBUaGVz
ZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBi
dXQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlLgotICAgIC8vIEFsbCBw
cm9wZXJ0aWVzIG5lZWQgdG8gYmUgc2V0IHRvIG5ldyB2YWx1ZXMgaW4gb3JkZXIgZm9yIHNldE5l
ZWRzQ29tbWl0Ci0gICAgLy8gdG8gYmUgY2FsbGVkLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgxLjIzZiwgNC41NmYpKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNo
b3JQb2ludFooMC43ZikpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9y
KDAuNGYsIDAuNGYsIDAuNGYpKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRy
dWUpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE1hc2tMYXllcihkdW1teUxheWVyLmdldCgpKSk7Ci0g
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRPcGFjaXR5KDAuNWYpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE9wYXF1
ZSh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQuMGYsIDku
MGYpKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkp
OwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRy
aXgoMCwgMCwgMCwgMCwgMCwgMCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFNjcm9sbGFibGUodHJ1
ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMTAsIDEwKSkp
OwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAs
IDAsIDAsIDAsIDApKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXREb3VibGVTaWRlZChmYWxzZSkpOwor
ICAgIC8vIEFsbCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgc2V0IHRvIG5ldyB2YWx1ZXMgaW4gb3Jk
ZXIgZm9yIHNldE5lZWRzQ29tbWl0IHRvIGJlIGNhbGxlZC4KKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMS4yM2YsIDQuNTZmKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRf
TkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnRaKDAuN2Yp
KTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0
ZXN0TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigwLjRmLCAwLjRmLCAwLjRmKSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RM
YXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVtbXlM
YXllci5nZXQoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDEsIHRlc3RMYXllci0+c2V0T3BhY2l0eSgwLjVmKSk7CisgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRPcGFxdWUo
dHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHRlc3RMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0LjBmLCA5LjBmKSkpOworICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXll
ci0+c2V0UmVwbGljYUxheWVyKGR1bW15TGF5ZXIuZ2V0KCkpKTsKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFN1YmxheWVy
VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAsIDAsIDAsIDAsIDApKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVy
LT5zZXRTY3JvbGxhYmxlKHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50
KDEwLCAxMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhB
VklPUigxLCB0ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgwLCAw
LCAwLCAwLCAwLCAwKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlU
X0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpKTsKIAogICAgIC8v
IFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEgY2hhbmdlIHRvIHRoZSBu
ZWVkc0Rpc3BsYXkgZmxhZy4KICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7CiAKLSAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVk
c0Rpc3BsYXkKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQgYW5kIGNoYW5nZSB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCi0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBz
aG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkgYW5kIHNldE5lZWRzQ29tbWl0CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRz
RGlzcGxheSgpKTsKLQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIHNldExh
eWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVIb3N0LgotfQot
Ci1URVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrTm9uQ29tcG9zaXRlZENvbnRlbnRQcm9w
ZXJ0eUNoYW5nZUNhdXNlc0NvbW1pdCkKLXsKLSAgICBPd25QdHI8TW9ja05vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdD4gbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KE1vY2tOb25Db21wb3NpdGVkQ29u
dGVudEhvc3Q6OmNyZWF0ZSgpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IG5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+dG9wTGV2ZWxSb290TGF5ZXIoKTsKLQotICAgIEVYUEVD
VF9DQUxMKCpub25Db21wb3NpdGVkQ29udGVudEhvc3QsIG5vdGlmeVN5bmNSZXF1aXJlZChfKSku
VGltZXMoMSk7Ci0gICAgcm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldFNjcm9sbFBvc2l0
aW9uKEludFBvaW50KDEsIDEpKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9u
cyhub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCkpOwotCi0gICAgRVhQRUNUX0NBTEwoKm5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCwgbm90aWZ5U3luY1JlcXVpcmVkKF8pKS5UaW1lcyhBdExl
YXN0KDEpKTsKLSAgICBub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFZpZXdwb3J0KEludFNp
emUoMzAsIDMwKSwgSW50U2l6ZSgyMCwgMjApLCBJbnRQb2ludCgxMCwgMTApLCAxKTsKIH0KIAog
Y2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhDb250ZW50U2NhbGluZyA6IHB1YmxpYyBMYXllckNocm9t
aXVtIHsKQEAgLTcyMywzMCArNTc5LDE5IEBAIHB1YmxpYzoKIAogVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0LCBjaGVja0NvbnRlbnRzU2NhbGVDaGFuZ2VUcmlnZ2Vyc05lZWRzRGlzcGxheSkKIHsK
LSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7Ci0gICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoQ29udGVudFNjYWxpbmc+IHRlc3RMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aENvbnRlbnRTY2FsaW5nKCZtb2NrRGVsZWdhdGUpKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhDb250ZW50U2NhbGluZz4gdGVzdExheWVyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoQ29udGVudFNjYWxpbmcoMCkpOworICAgIHRlc3RMYXllci0+c2V0TGF5
ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogCiAgICAgSW50U2l6ZSB0ZXN0Qm91
bmRzID0gSW50U2l6ZSgzMjAsIDI0MCk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJv
dW5kcykpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKIAogICAgIHRlc3RMYXllci0+
cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rp
c3BsYXkoKSk7CiAKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldENvbnRlbnRzU2NhbGUodGVzdExheWVyLT5j
b250ZW50c1NjYWxlKCkgKyAxLmYpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldENvbnRlbnRzU2NhbGUodGVzdExheWVy
LT5jb250ZW50c1NjYWxlKCkgKyAxLmYpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5l
ZWRzRGlzcGxheSgpKTsKIH0KIAotY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1
YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0
IHBhZ2VTY2FsZSkgeyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUNvbXBvc2l0ZSgpIHsgfQotfTsKLQogY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdCA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZha2VD
Q0xheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpCkBAIC03ODMsNyArNjI4LDcgQEAgdm9pZCBhc3NlcnRM
YXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5
ZXJUcmVlSG9zdCoKIAogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGVudGVy
aW5nVHJlZSkKIHsKLSAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKQEAgLTgxMCwxMiAr
NjU1LDEyIEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBlbnRlcmluZ1Ry
ZWUpCiAgICAgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKHBhcmVudC5nZXQo
KSwgMCk7CiAKICAgICBsYXllclRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgV2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAK
IFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBhZGRpbmdMYXllclN1YnRyZWUp
CiB7Ci0gICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBXZWJLaXQ6OldlYkNv
bXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVl
SG9zdD4gbGF5ZXJUcmVlSG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOwogCkBA
IC04NDEsMTIgKzY4NiwxMiBAQCBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwg
YWRkaW5nTGF5ZXJTdWJ0cmVlKQogCiAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDAp
OwogICAgIGxheWVyVHJlZUhvc3QuY2xlYXIoKTsKLSAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93
bigpOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKIH0KIAogVEVTVChM
YXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3QpCiB7Ci0gICAgV2ViQ29t
cG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRp
YWxpemUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CkBAIC04NzQsMTIgKzcxOSwxMiBAQCBURVNUKExheWVyQ2hy
b21pdW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdCkKICAgICBzZWNvbmRMYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAgZmlyc3RMYXllclRyZWVIb3N0LmNsZWFyKCk7CiAg
ICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogfQogCiBURVNU
KExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdEluU3VidHJlZSkKIHsK
LSAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIFdlYktpdDo6V2ViQ29tcG9z
aXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZmlyc3RQYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGZpcnN0Q2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHNlY29uZFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKQEAgLTkx
MSwxMiArNzU2LDEyIEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBjaGFu
Z2VIb3N0SW5TdWJ0cmVlKQogICAgIHNlY29uZExheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigw
KTsKICAgICBmaXJzdExheWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICBzZWNvbmRMYXllclRyZWVI
b3N0LmNsZWFyKCk7Ci0gICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICBXZWJLaXQ6
OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVy
VHJlZUhvc3RUZXN0LCByZXBsYWNlTWFza0FuZFJlcGxpY2FMYXllcikKIHsKLSAgICBXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlh
bGl6ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwpAQCAtOTQ4LDcgKzc5Myw3IEBAIFRFU1QoTGF5ZXJDaHJv
bWl1bUxheWVyVHJlZUhvc3RUZXN0LCByZXBsYWNlTWFza0FuZFJlcGxpY2FMYXllcikKICAgICAv
LyBUZXN0IG92ZXIsIGNsZWFudXAgdGltZS4KICAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5
ZXIoMCk7CiAgICAgbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYkNvbXBvc2l0b3I6OnNo
dXRkb3duKCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogfQogCiB9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9N
b2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGEzNzQ2Yzc1NDRmZTM5NWFjZDQ5YWU2M2EwNTgxYzAwMjI0OGEyZDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Nb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIk1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSA8
Z21vY2svZ21vY2suaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgdGVz
dGluZzsKLQotY2xhc3MgRnJhbWVDb3VudGluZ0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdyYXBo
aWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBGcmFtZUNvdW50aW5nQ29udGV4dCgpIDogbV9m
cmFtZSgwKSB7IH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIHdvdWxkIG5vcm1hbGx5IGRvIGEgZ2xT
d2FwQnVmZmVycyB1bmRlciB0aGUgaG9vZC4KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1
cmUoKSB7IG1fZnJhbWUrKzsgfQotCi0gICAgaW50IGZyYW1lQ291bnQoKSB7IHJldHVybiBtX2Zy
YW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fZnJhbWU7Ci19OwotCi1URVNUKE1vY2tHcmFw
aGljc0NvbnRleHQzRFRlc3QsIENhbk92ZXJyaWRlTWFudWFsbHkpCi17Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRnJhbWVDb3VudGluZ0NvbnRleHQoKSksIGF0
dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkKTsKLSAgICBGcmFtZUNv
dW50aW5nQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8RnJhbWVDb3VudGluZ0Nv
bnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRChjb250ZXh0LmdldCgpKSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKysp
IHsKLSAgICAgICAgY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAxKTsKLSAgICAgICAgY29u
dGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICB9Ci0gICAgY29udGV4dC0+ZmluaXNoKCk7Ci0K
LSAgICBFWFBFQ1RfRVEoMTAsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7Ci19Ci0KLQotY2xh
c3MgR01vY2tDb250ZXh0IDogcHVibGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJs
aWM6Ci0gICAgTU9DS19NRVRIT0QwKGdldEVycm9yLCBXR0MzRGVudW0oKSk7Ci19OwotCi1URVNU
KE1vY2tHcmFwaGljc0NvbnRleHQzRFRlc3QsIENhblVzZUdNb2NrKQotewotICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEdNb2NrQ29udGV4dCgpKSwgYXR0cnMsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOwotICAgIEdNb2NrQ29udGV4dCYg
bW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8R01vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOwot
Ci0gICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGdldEVycm9yKCkpCi0gICAgICAgICAgICAu
V2lsbFJlcGVhdGVkbHkoUmV0dXJuKDMxNCkpOwotCi0gICAgLy8gSXQncyBPSyB0byBjYWxsIG1l
dGhvZHMgR01vY2sgZG9lc24ndCBrbm93IGFib3V0LgotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgbW9ja2VkIG1ldGhvZCBpcyByZXR1
cm5pbmcgYXMgaW50ZW5kZWQuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQotICAg
ICAgICBFWFBFQ1RfRVEoKGludCljb250ZXh0LT5nZXRFcnJvcigpLCAzMTQpOwotfQotCi1jbGFz
cyBDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cyA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3ND
b250ZXh0M0QgewotcHVibGljOgotICAgIENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKCkg
OiBtX21ha2VDdXJyZW50Q291bnQoMCkgeyB9Ci0gICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpCi0gICAgewotICAgICAgICBtX21ha2VDdXJyZW50Q291bnQrKzsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBtYWtlQ3VycmVudENvdW50KCkgeyByZXR1cm4g
bV9tYWtlQ3VycmVudENvdW50OyB9Ci1wcml2YXRlOgotICAgIGludCBtX21ha2VDdXJyZW50Q291
bnQ7Ci19OwotCi0KLVRFU1QoTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ29udGV4dEZvclRo
aXNUaHJlYWRTaG91bGRNYWtlQ3VycmVudCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyczsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG5ldyBDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cygpKSwgYXR0cnMs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOwotICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQpOwotICAgIENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzJiBtb2NrQ29udGV4
dCA9ICpzdGF0aWNfY2FzdDxDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cyo+KEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0
KCkpKTsKLSAgICBFWFBFQ1RfRVEoMSwgbW9ja0NvbnRleHQubWFrZUN1cnJlbnRDb3VudCgpKTsK
LX0KLQotVEVTVChNb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LCBDb250ZXh0Rm9yQW5vdGhlclRo
cmVhZFNob3VsZE5vdE1ha2VDdXJyZW50KQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRl
eHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKCkpLCBhdHRycywg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCk7Ci0gICAgRVhQRUNUX1RS
VUUoY29udGV4dCk7Ci0gICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3VycmVudHMmIG1vY2tDb250
ZXh0ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzKj4oR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5n
ZXQoKSkpOwotICAgIEVYUEVDVF9FUSgwLCBtb2NrQ29udGV4dC5tYWtlQ3VycmVudENvdW50KCkp
OwotfQotCi1jbGFzcyBDb250ZXh0V2l0aE1ha2VDdXJyZW50VGhhdEZhaWxzIDogcHVibGljIE1v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgQ29udGV4dFdpdGhNYWtlQ3Vy
cmVudFRoYXRGYWlscygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotVEVTVChNb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0
LCBDb250ZXh0Rm9yVGhpc1RocmVhZEZhaWxzV2hlbk1ha2VDdXJyZW50RmFpbHMpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ29udGV4dFdpdGhNYWtlQ3Vy
cmVudFRoYXRGYWlscygpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNU
aHJlYWQpOwotICAgIEVYUEVDVF9GQUxTRShjb250ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTRiNjIyNTUxYmQ3YjlkNjczYWMyMDM5YjVjMTg0
YTg0YjhmY2IwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNEX2gKLSNkZWZpbmUgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEX2gKLQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFdlYkdyYXBoaWNz
Q29udGV4dDNEIGJhc2UgY2xhc3MgZm9yIHVzZSBpbiBXZWJLaXQgdW5pdCB0ZXN0cy4KLS8vIEFs
bCBvcGVyYXRpb25zIGFyZSBuby1vcHMgKHJldHVybmluZyAwIGlmIG5lY2Vzc2FyeSkuCi1jbGFz
cyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgV2ViR3JhcGhpY3NDb250ZXh0M0Qg
ewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEF0dHJpYnV0ZXMsIFdlYlZp
ZXcqLCBib29sIHJlbmRlckRpcmVjdGx5VG9XZWJWaWV3KSB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGhl
aWdodCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVhZEJhY2tGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIHNpemVfdCBidWZmZXJTaXplLCBXZWJHTElkIGZyYW1l
YnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2
aXJ0dWFsIFdlYkdMSWQgZ2V0UGxhdGZvcm1UZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBw
b3N0U3ViQnVmZmVyQ0hST01JVU0oaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHN5bnRoZXNpemVHTEVycm9yKFdHQzNEZW51bSkgeyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0TG9zdCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShXR0MzRGVudW0gdGFy
Z2V0LCBXR0MzRGludHB0ciBvZmZzZXQsIFdHQzNEc2l6ZWlwdHIgc2l6ZSwgV0dDM0RlbnVtIGFj
Y2VzcykgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTShjb25zdCB2b2lkKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkKiBtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEaW50IHhv
ZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVp
Z2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgV0dDM0RlbnVtIGFjY2Vzcykg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlV
TShjb25zdCB2b2lkKikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJpbGl0eUNIUk9N
SVVNKGJvb2wgdmlzaWJsZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRSZXF1ZXN0
YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RFeHRlbnNpb25DSFJPTUlVTShjb25zdCBjaGFyKikgeyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyQ0hST01JVU0oV0dDM0RpbnQgc3JjWDAsIFdH
QzNEaW50IHNyY1kwLCBXR0MzRGludCBzcmNYMSwgV0dDM0RpbnQgc3JjWTEsIFdHQzNEaW50IGRz
dFgwLCBXR0MzRGludCBkc3RZMCwgV0dDM0RpbnQgZHN0WDEsIFdHQzNEaW50IGRzdFkxLCBXR0Mz
RGJpdGZpZWxkIG1hc2ssIFdHQzNEZW51bSBmaWx0ZXIpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBX
R0MzRHNpemVpIHNhbXBsZXMsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RzaXplaSB3
aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGFjdGl2ZVRl
eHR1cmUoV0dDM0RlbnVtIHRleHR1cmUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hTaGFk
ZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIFdHQzNEdWludCBpbmRleCwgY29u
c3QgV0dDM0RjaGFyKiBuYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmluZEJ1ZmZlcihXR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRG
cmFtZWJ1ZmZlcihXR0MzRGVudW0gdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihXR0MzRGVudW0gdGFyZ2V0LCBXZWJHTElk
IHJlbmRlcmJ1ZmZlcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRUZXh0dXJlKFdHQzNEZW51
bSB0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kQ29s
b3IoV0dDM0RjbGFtcGYgcmVkLCBXR0MzRGNsYW1wZiBncmVlbiwgV0dDM0RjbGFtcGYgYmx1ZSwg
V0dDM0RjbGFtcGYgYWxwaGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uKFdH
QzNEZW51bSBtb2RlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRl
KFdHQzNEZW51bSBtb2RlUkdCLCBXR0MzRGVudW0gbW9kZUFscGhhKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgYmxlbmRGdW5jKFdHQzNEZW51bSBzZmFjdG9yLCBXR0MzRGVudW0gZGZhY3RvcikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKFdHQzNEZW51bSBzcmNSR0IsIFdH
QzNEZW51bSBkc3RSR0IsIFdHQzNEZW51bSBzcmNBbHBoYSwgV0dDM0RlbnVtIGRzdEFscGhhKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNE
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgV0dDM0RlbnVtIHVzYWdlKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYnVmZmVyU3ViRGF0YShXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludHB0
ciBvZmZzZXQsIFdHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIFdHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKFdHQzNEZW51bSB0YXJn
ZXQpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihXR0Mz
RGJpdGZpZWxkIG1hc2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9yKFdHQzNEY2xh
bXBmIHJlZCwgV0dDM0RjbGFtcGYgZ3JlZW4sIFdHQzNEY2xhbXBmIGJsdWUsIFdHQzNEY2xhbXBm
IGFscGhhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChXR0MzRGNsYW1wZiBkZXB0
aCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU3RlbmNpbChXR0MzRGludCBzKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKFdHQzNEYm9vbGVhbiByZWQsIFdHQzNEYm9vbGVhbiBn
cmVlbiwgV0dDM0Rib29sZWFuIGJsdWUsIFdHQzNEYm9vbGVhbiBhbHBoYSkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpIHsgfQotCi0gICAgdmlydHVh
bCB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxl
dmVsLCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6
ZWkgaGVpZ2h0LCBXR0MzRGludCBib3JkZXIsIFdHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQo
V0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNE
aW50IHlvZmZzZXQsIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVu
dW0gZm9ybWF0LCBXR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGNvcHlUZXhJbWFnZTJEKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50
IGxldmVsLCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEaW50IHgsIFdHQzNEaW50IHks
IFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGludCBib3JkZXIpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBX
R0MzRGludCBsZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0Rp
bnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBjdWxsRmFjZShXR0MzRGVudW0gbW9kZSkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRlcHRoRnVuYyhXR0MzRGVudW0gZnVuYykgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGRlcHRoTWFzayhXR0MzRGJvb2xlYW4gZmxhZykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcHRo
UmFuZ2UoV0dDM0RjbGFtcGYgek5lYXIsIFdHQzNEY2xhbXBmIHpGYXIpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUoV0dDM0RlbnVtIGNhcCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShXR0MzRHVpbnQgaW5kZXgpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKFdHQzNEZW51bSBtb2RlLCBXR0MzRGludCBmaXJzdCwg
V0dDM0RzaXplaSBjb3VudCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhXR0Mz
RGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNEaW50cHRy
IG9mZnNldCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKFdHQzNEZW51bSBjYXApIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShXR0MzRHVpbnQgaW5k
ZXgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Zmx1c2goKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoV0dD
M0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIGF0dGFjaG1lbnQsIFdHQzNEZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVidWZmZXJUZXh0dXJlMkQoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIGF0dGFjaG1lbnQs
IFdHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSwgV0dDM0RpbnQgbGV2ZWwpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2UoV0dDM0RlbnVtIG1vZGUpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChXR0MzRGVudW0gdGFyZ2V0KSB7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRB
Y3RpdmVVbmlmb3JtKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0RzaXplaSBtYXhDb3VudCwgV0dDM0RzaXplaSogY291bnQs
IFdlYkdMSWQqIHNoYWRlcnMpIHsgfQotICAgIHZpcnR1YWwgV0dDM0RpbnQgZ2V0QXR0cmliTG9j
YXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBXR0MzRGNoYXIqIG5hbWUpIHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYoV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGJv
b2xlYW4qIHZhbHVlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYo
V0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgfQot
ICAgIHZpcnR1YWwgQXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpIHsgcmV0dXJuIEF0
dHJpYnV0ZXMoKTsgfQotICAgIHZpcnR1YWwgV0dDM0RlbnVtIGdldEVycm9yKCkgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYoV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZs
b2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50LCBXR0Mz
RGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
SW50ZWdlcnYoV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAocG5hbWUgPT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJ
WkUpCi0gICAgICAgICAgICAqdmFsdWUgPSAxMDI0OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6TElOS19TVEFUVVMpCi0gICAgICAgICAgICAqdmFsdWUgPSAxOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSkg
eyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCog
dmFsdWUpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVy
LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChw
bmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMpCi0gICAg
ICAgICAgICAqdmFsdWUgPSAxOwotICAgIH0KLQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNo
YWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0KLSAg
ICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpIHsgcmV0
dXJuIFdlYlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U3RyaW5nKFdHQzNE
ZW51bSBuYW1lKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRU
ZXhQYXJhbWV0ZXJmdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEZmxv
YXQqIHZhbHVlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoV0dDM0Rl
bnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBnZXRVbmlmb3JtZnYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGludCBsb2NhdGlv
biwgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtaXYo
V2ViR0xJZCBwcm9ncmFtLCBXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQqIHZhbHVlKSB7IH0K
LSAgICB2aXJ0dWFsIFdHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTElkIHByb2dyYW0s
IGNvbnN0IFdHQzNEY2hhciogbmFtZSkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZXRWZXJ0ZXhBdHRyaWJmdihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0Rm
bG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihXR0Mz
RHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0KLSAgICB2
aXJ0dWFsIFdHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KFdHQzNEdWludCBpbmRl
eCwgV0dDM0RlbnVtIHBuYW1lKSB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlu
dChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gbW9kZSkgeyB9Ci0gICAgdmlydHVhbCBXR0Mz
RGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xJZCBidWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBXR0MzRGJvb2xlYW4gaXNFbmFibGVkKFdHQzNEZW51bSBjYXApIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZy
YW1lYnVmZmVyKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgV0dDM0Rib29sZWFuIGlz
UHJvZ3JhbShXZWJHTElkIHByb2dyYW0pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBX
R0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xJZCByZW5kZXJidWZmZXIpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNTaGFkZXIoV2ViR0xJZCBzaGFk
ZXIpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNUZXh0dXJl
KFdlYkdMSWQgdGV4dHVyZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVdpZHRoKFdHQzNEZmxvYXQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShXZWJH
TElkIHByb2dyYW0pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaShXR0MzRGVudW0g
cG5hbWUsIFdHQzNEaW50IHBhcmFtKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNl
dChXR0MzRGZsb2F0IGZhY3RvciwgV0dDM0RmbG9hdCB1bml0cykgeyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcmVhZFBpeGVscyhXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRo
LCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIHZv
aWQqIHBpeGVscykgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShXR0MzRGVudW0g
dGFyZ2V0LCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNE
c2l6ZWkgaGVpZ2h0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoV0dDM0Rj
bGFtcGYgdmFsdWUsIFdHQzNEYm9vbGVhbiBpbnZlcnQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
Y2lzc29yKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6
ZWkgaGVpZ2h0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMSWQgc2hh
ZGVyLCBjb25zdCBXR0MzRGNoYXIqIHN0cmluZykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxGdW5jKFdHQzNEZW51bSBmdW5jLCBXR0MzRGludCByZWYsIFdHQzNEdWludCBtYXNrKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShXR0MzRGVudW0gZmFjZSwgV0dD
M0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJlZiwgV0dDM0R1aW50IG1hc2spIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsTWFzayhXR0MzRHVpbnQgbWFzaykgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHN0ZW5jaWxNYXNrU2VwYXJhdGUoV0dDM0RlbnVtIGZhY2UsIFdHQzNEdWludCBtYXNrKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKFdHQzNEZW51bSBmYWlsLCBXR0MzRGVudW0gemZh
aWwsIFdHQzNEZW51bSB6cGFzcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFy
YXRlKFdHQzNEZW51bSBmYWNlLCBXR0MzRGVudW0gZmFpbCwgV0dDM0RlbnVtIHpmYWlsLCBXR0Mz
RGVudW0genBhc3MpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQoV0dDM0RlbnVt
IHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0Rz
aXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50IGJvcmRlciwgV0dDM0RlbnVt
IGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgeyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5h
bWUsIFdHQzNEZmxvYXQgcGFyYW0pIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJp
KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQgcGFyYW0pIHsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0Rp
bnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNEc2l6ZWkg
d2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWYo
V0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxvYXQgeCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0xZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNE
ZmxvYXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEaW50IHgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2KFdHQzNEaW50
IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0yZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBX
R0MzRGZsb2F0IHkpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KFdHQzNEaW50IGxv
Y2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGZsb2F0KiB2KSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGludCB4LCBXR0Mz
RGludCB5KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihXR0MzRGludCBsb2NhdGlv
biwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RpbnQqIHYpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtM2YoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxvYXQgeCwgV0dDM0RmbG9h
dCB5LCBXR0MzRGZsb2F0IHopIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2Z2KFdHQzNE
aW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGZsb2F0KiB2KSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGludCB4
LCBXR0MzRGludCB5LCBXR0MzRGludCB6KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNp
dihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RpbnQqIHYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNE
ZmxvYXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkg
Y291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
NGkoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEaW50IHos
IFdHQzNEaW50IHcpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KFdHQzNEaW50IGxv
Y2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkg
Y291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihXR0MzRGludCBsb2NhdGlvbiwg
V0dDM0RzaXplaSBjb3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dDM0RmbG9h
dCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdHQzNEaW50
IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShX
ZWJHTElkIHByb2dyYW0pIHsgfQotICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2Vi
R0xJZCBwcm9ncmFtKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihXR0Mz
RHVpbnQgaW5kZXgsIFdHQzNEZmxvYXQgeCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0
dHJpYjFmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9h
dCB4LCBXR0MzRGZsb2F0IHkpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
V0dDM0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZXMpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZmxvYXQgeCwgV0dD
M0RmbG9hdCB5LCBXR0MzRGZsb2F0IHopIHsgfQotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZnYoV0dDM0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZXMpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZmxvYXQg
eCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxv
YXQqIHZhbHVlcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoV0dD
M0R1aW50IGluZGV4LCBXR0MzRGludCBzaXplLCBXR0MzRGVudW0gdHlwZSwgV0dDM0Rib29sZWFu
IG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0dDM0Rz
aXplaSBzdHJpZGUsIFdHQzNEaW50cHRyIG9mZnNldCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlld3BvcnQoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0Rz
aXplaSBoZWlnaHQpIHsgfQotCi0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZUJ1ZmZlcigpIHsg
cmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlRnJhbWVidWZmZXIoKSB7IHJl
dHVybiAxOyB9Ci0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7IHJldHVybiAx
OyB9Ci0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIHsgcmV0dXJuIDE7
IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4g
MTsgfQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkgeyByZXR1cm4gMTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTElkKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xJZCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVByb2dyYW0oV2ViR0xJZCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1
ZmZlcihXZWJHTElkKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMSWQp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHRleFN0b3JhZ2UyREVYVChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBs
ZXZlbHMsIFdHQzNEdWludCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdHQzNEaW50IHdpZHRoLCBXR0MzRGludCBoZWlnaHQpIHsgfQotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJHTExheWVyQ2hy
b21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViR0xMYXllckNo
cm9taXVtVGVzdC5jcHAKaW5kZXggMjRjYjUyNzE5MTE4N2FkOGU5ZDY4MGJhNjExMWEyMmFmOTQz
NTU5ZC4uNjZlYTY5MGZhYjNmYjU0YWE4MzJjOWEyYWE4MWNiOWM1OTMyMmIzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJHTExheWVyQ2hyb21pdW1UZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkdMTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCkBAIC0yNiw5ICsyNiw4IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0u
aCIKIAorI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCi0jaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSA8Z21v
Y2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCkBAIC0zNywzMiArMzYsNiBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgewogCi0vLyBUZXN0IHN0dWIg
Zm9yIFdlYkdyYXBoaWNzQ29udGV4dDNELiBSZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVlZGVkIGZv
ciBjb21wb3NpdG9yIGluaXRpYWxpemF0aW9uLgotY2xhc3MgQ29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0Q+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykgeyByZXR1cm4g
YWRvcHRQdHIobmV3IENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpKTsg
fQotICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7IHJldHVybiAxOyB9Ci0gICAg
dmlydHVhbCBXZWJHTElkIGNyZWF0ZVNoYWRlcihXR0MzRGVudW0pIHsgcmV0dXJuIDE7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCog
dmFsdWUpIHsgKnZhbHVlID0gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2Vi
R0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQotICAgIHZp
cnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0
ZXMoKSB7IHJldHVybiBtX2F0dHJzOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29tcG9zaXRvck1vY2tX
ZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykg
eyBtX2F0dHJzLmFscGhhID0gYXR0cnMuYWxwaGE7IH0KLQotICAgIFdlYkdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7Ci19OwotCi1zdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzKQotewotICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29u
dGV4dCA9IENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRycyk7
Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoCi0gICAgICAgIHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywg
MCwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
LAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVh
ZCk7Ci19Ci0KIFRFU1QoV2ViR0xMYXllckNocm9taXVtVGVzdCwgb3BhcXVlRm9ybWF0cykKIHsK
ICAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gYnVmZmVyOwpAQCAtNzIsOSArNDUsOSBAQCBURVNU
KFdlYkdMTGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUZvcm1hdHMpCiAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgb3BhcXVlQXR0cnM7CiAgICAgb3BhcXVlQXR0cnMuYWxwaGEgPSBm
YWxzZTsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gYWxwaGFDb250ZXh0ID0gY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KGFscGhhQXR0cnMpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gYWxwaGFDb250ZXh0ID0gY3JlYXRlQ29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRleHQz
RChhbHBoYUF0dHJzKTsKICAgICBFWFBFQ1RfVFJVRShhbHBoYUNvbnRleHQpOwotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gb3BhcXVlQ29udGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4
dChvcGFxdWVBdHRycyk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBvcGFxdWVDb250
ZXh0ID0gY3JlYXRlQ29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRleHQzRChvcGFxdWVBdHRycyk7
CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGV4dCk7CiAKICAgICBidWZmZXIgPSBEcmF3aW5n
QnVmZmVyOjpjcmVhdGUoYWxwaGFDb250ZXh0LmdldCgpLCBJbnRTaXplKCksIGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAppbmRleCAxNTg5
ODgxZDIxMGVhOTNjYWQ0NzVkMjVjOTY3ZDJiODc2NzI4ZTM4Li4zNjdjMDY2YmE1OThiNmYzNThl
ZTc0OGFhMTliZDhlZjcwMzhhYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJMYXllclRlc3QuY3BwCkBAIC0yNSwxNCArMjUsMTcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgogCisjaW5jbHVkZSAiQ29tcG9zaXRv
ckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJDb250ZW50TGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJM
YXllclRyZWVWaWV3LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJlY3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJTaXplLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29udGVudExheWVyLmgiCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViQ29udGVudExheWVyQ2xpZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllckNs
aWVudC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KIApAQCAtNDEsOSArNDQsMTQgQEAg
dXNpbmcgbmFtZXNwYWNlIHRlc3Rpbmc7CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIE1vY2tXZWJM
YXllckNsaWVudCA6IHB1YmxpYyBXZWJMYXllckNsaWVudCB7CitjbGFzcyBNb2NrV2ViTGF5ZXJU
cmVlVmlld0NsaWVudCA6IHB1YmxpYyBXZWJMYXllclRyZWVWaWV3Q2xpZW50IHsKIHB1YmxpYzoK
LSAgICBNT0NLX01FVEhPRDAobm90aWZ5TmVlZHNDb21wb3NpdGUsIHZvaWQoKSk7CisgICAgTU9D
S19NRVRIT0QwKHNjaGVkdWxlQ29tcG9zaXRlLCB2b2lkKCkpOworCisgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgc2NhbGVGYWN0b3IpIHsgfQorICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNy
ZWF0ZUNvbnRleHQzRCgpIHsgcmV0dXJuIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpKS5sZWFrUHRyKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vz
cykgeyB9CiB9OwogCiBjbGFzcyBNb2NrV2ViQ29udGVudExheWVyQ2xpZW50IDogcHVibGljIFdl
YkNvbnRlbnRMYXllckNsaWVudCB7CkBAIC01Myw3ICs2MSwzMCBAQCBwdWJsaWM6CiAKIGNsYXNz
IFdlYkxheWVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKIHB1YmxpYzoKLSAgICBXZWJMYXllclRlc3Qo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlh
bGl6ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0LgorICAgICAgICBXZWJLaXQ6OldlYkNvbXBv
c2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgICAgIG1fcm9vdExheWVyID0gV2ViTGF5ZXI6OmNy
ZWF0ZSgpOworICAgICAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUo
KSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgICAgICBtX3ZpZXcgPSBXZWJMYXllclRyZWVWaWV3
OjpjcmVhdGUoJm1fY2xpZW50LCBtX3Jvb3RMYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGlu
Z3MoKSk7CisgICAgICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IC8vIFdlIG1heSBnZXQgYW55IG51bWJlciBvZiBzY2hlZHVsZUNvbXBvc2l0ZSBjYWxscyBkdXJp
bmcgc2h1dGRvd24uCisgICAgICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBv
c2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1fdmlldy5zZXRSb290TGF5ZXIo
MCk7CisgICAgICAgIG1fcm9vdExheWVyLnJlc2V0KCk7CisgICAgICAgIG1fdmlldy5yZXNldCgp
OworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgTW9ja1dlYkxheWVyVHJlZVZpZXdDbGllbnQgbV9jbGllbnQ7CisgICAg
V2ViTGF5ZXIgbV9yb290TGF5ZXI7CisgICAgV2ViTGF5ZXJUcmVlVmlldyBtX3ZpZXc7CiB9Owog
CiAvLyBUZXN0cyB0aGF0IHRoZSBjbGllbnQgZ2V0cyBjYWxsZWQgdG8gYXNrIGZvciBhIGNvbXBv
c2l0ZSBpZiB3ZSBjaGFuZ2UgdGhlCkBAIC02MSw5OSArOTIsMTAwIEBAIHB1YmxpYzoKIFRFU1Rf
RihXZWJMYXllclRlc3QsIENsaWVudCkKIHsKICAgICAvLyBCYXNlIGxheWVyLgotICAgIE1vY2tX
ZWJMYXllckNsaWVudCBjbGllbnQ7Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVk
c0NvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViTGF5ZXIgbGF5ZXIgPSBX
ZWJMYXllcjo6Y3JlYXRlKCZjbGllbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0
YXRpb25zKCZjbGllbnQpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBv
c2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgV2ViTGF5ZXIgbGF5ZXIgPSBXZWJMYXll
cjo6Y3JlYXRlKCk7CisgICAgbV9yb290TGF5ZXIuYWRkQ2hpbGQobGF5ZXIpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAKICAgICBXZWJGbG9hdFBv
aW50IHBvaW50KDMsIDQpOwotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21w
b3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNj
aGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIGxheWVyLnNldEFuY2hv
clBvaW50KHBvaW50KTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xp
ZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwog
ICAgIEVYUEVDVF9FUShwb2ludCwgbGF5ZXIuYW5jaG9yUG9pbnQoKSk7CiAKLSAgICBFWFBFQ1Rf
Q0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwor
ICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExl
YXN0KDEpKTsKICAgICBmbG9hdCBhbmNob3JaID0gNTsKICAgICBsYXllci5zZXRBbmNob3JQb2lu
dFooYW5jaG9yWik7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVu
dCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAg
ICBFWFBFQ1RfRVEoYW5jaG9yWiwgbGF5ZXIuYW5jaG9yUG9pbnRaKCkpOwogCiAgICAgV2ViU2l6
ZSBzaXplKDcsIDgpOwotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3Np
dGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVk
dWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIGxheWVyLnNldEJvdW5kcyhz
aXplKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVD
VF9FUShzaXplLCBsYXllci5ib3VuZHMoKSk7CiAKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5v
dGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxM
KG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBs
YXllci5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25z
KCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXIubWFza3NUb0JvdW5kcygpKTsKIAot
ICAgIE1vY2tXZWJMYXllckNsaWVudCBvdGhlckNsaWVudDsKLSAgICBFWFBFQ1RfQ0FMTChvdGhl
ckNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAg
IFdlYkxheWVyIG90aGVyTGF5ZXIgPSBXZWJMYXllcjo6Y3JlYXRlKCZvdGhlckNsaWVudCk7Ci0g
ICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExl
YXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSku
VGltZXMoQW55TnVtYmVyKCkpOworICAgIFdlYkxheWVyIG90aGVyTGF5ZXIgPSBXZWJMYXllcjo6
Y3JlYXRlKCk7CisgICAgbV9yb290TGF5ZXIuYWRkQ2hpbGQob3RoZXJMYXllcik7CisgICAgRVhQ
RUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkp
OwogICAgIGxheWVyLnNldE1hc2tMYXllcihvdGhlckxheWVyKTsKLSAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9FUShvdGhlckxheWVyLCBsYXllci5t
YXNrTGF5ZXIoKSk7CiAKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9z
aXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0g
MC4xMjM7CiAgICAgbGF5ZXIuc2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9FUShvcGFjaXR5LCBsYXllci5vcGFj
aXR5KCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgp
KS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVD
b21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgbGF5ZXIuc2V0T3BhcXVlKHRydWUp
OwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1v
Y2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX1RS
VUUobGF5ZXIub3BhcXVlKCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVk
c0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVu
dCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgbGF5ZXIuc2V0
UG9zaXRpb24ocG9pbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZj
bGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7
CiAgICAgRVhQRUNUX0VRKHBvaW50LCBsYXllci5wb3NpdGlvbigpKTsKIAogICAgIC8vIFRleHR1
cmUgbGF5ZXIuCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgp
KS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgdGV4dHVy
ZUxheWVyID0gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KTsKLSAgICBN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBFWFBFQ1RfQ0FM
TChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAg
IFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIHRleHR1cmVMYXllciA9IFdlYkV4dGVybmFsVGV4dHVy
ZUxheWVyOjpjcmVhdGUoKTsKKyAgICBtX3Jvb3RMYXllci5hZGRDaGlsZCh0ZXh0dXJlTGF5ZXIp
OworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAKLSAg
ICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVh
c3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5U
aW1lcyhBdExlYXN0KDEpKTsKICAgICB0ZXh0dXJlTGF5ZXIuc2V0VGV4dHVyZUlkKDMpOwotICAg
IE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKDN1LCB0
ZXh0dXJlTGF5ZXIudGV4dHVyZUlkKCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3Rp
ZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTCht
X2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgdGV4
dHVyZUxheWVyLnNldEZsaXBwZWQodHJ1ZSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMo
Jm1fY2xpZW50KTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlTGF5ZXIuZmxpcHBlZCgpKTsKIAot
ICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRM
ZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkp
LlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIFdlYkZsb2F0UmVjdCB1dlJlY3QoMC4xLCAwLjEsIDAu
OSwgMC45KTsKICAgICB0ZXh0dXJlTGF5ZXIuc2V0VVZSZWN0KHV2UmVjdCk7Ci0gICAgTW9jazo6
VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlTGF5
ZXIuZmxpcHBlZCgpKTsKIAogCiAgICAgLy8gQ29udGVudCBsYXllci4KICAgICBNb2NrV2ViQ29u
dGVudExheWVyQ2xpZW50IGNvbnRlbnRDbGllbnQ7CiAgICAgRVhQRUNUX0NBTEwoY29udGVudENs
aWVudCwgcGFpbnRDb250ZW50cyhfLCBfKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAgIEVYUEVD
VF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkp
OwotICAgIFdlYkNvbnRlbnRMYXllciBjb250ZW50TGF5ZXIgPSBXZWJDb250ZW50TGF5ZXI6OmNy
ZWF0ZSgmY2xpZW50LCAmY29udGVudENsaWVudCk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxl
Q29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICBXZWJDb250ZW50TGF5ZXIgY29u
dGVudExheWVyID0gV2ViQ29udGVudExheWVyOjpjcmVhdGUoJmNvbnRlbnRDbGllbnQpOworICAg
IG1fcm9vdExheWVyLmFkZENoaWxkKGNvbnRlbnRMYXllcik7CisgICAgTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwg
bm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NB
TEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAg
IGNvbnRlbnRMYXllci5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRMYXllci5kcmF3
c0NvbnRlbnQoKSk7CiB9CiAKIFRFU1RfRihXZWJMYXllclRlc3QsIEhpZXJhcmNoeSkKIHsKLSAg
ICBNb2NrV2ViTGF5ZXJDbGllbnQgY2xpZW50OwotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90
aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAgIFdlYkxheWVyIGxh
eWVyMSA9IFdlYkxheWVyOjpjcmVhdGUoJmNsaWVudCk7Ci0gICAgV2ViTGF5ZXIgbGF5ZXIyID0g
V2ViTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2No
ZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgIFdlYkxheWVyIGxheWVy
MSA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICBXZWJMYXllciBsYXllcjIgPSBXZWJMYXllcjo6
Y3JlYXRlKCk7CiAKICAgICBFWFBFQ1RfVFJVRShsYXllcjEucGFyZW50KCkuaXNOdWxsKCkpOwog
ICAgIEVYUEVDVF9UUlVFKGxheWVyMi5wYXJlbnQoKS5pc051bGwoKSk7CkBAIC0xNzIsOCArMjA0
LDggQEAgVEVTVF9GKFdlYkxheWVyVGVzdCwgSGllcmFyY2h5KQogCiAgICAgTW9ja1dlYkNvbnRl
bnRMYXllckNsaWVudCBjb250ZW50Q2xpZW50OwogICAgIEVYUEVDVF9DQUxMKGNvbnRlbnRDbGll
bnQsIHBhaW50Q29udGVudHMoXywgXykpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJDb250
ZW50TGF5ZXIgY29udGVudExheWVyID0gV2ViQ29udGVudExheWVyOjpjcmVhdGUoJmNsaWVudCwg
JmNvbnRlbnRDbGllbnQpOwotICAgIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIHRleHR1cmVMYXll
ciA9IFdlYkV4dGVybmFsVGV4dHVyZUxheWVyOjpjcmVhdGUoJmNsaWVudCk7CisgICAgV2ViQ29u
dGVudExheWVyIGNvbnRlbnRMYXllciA9IFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKCZjb250ZW50
Q2xpZW50KTsKKyAgICBXZWJFeHRlcm5hbFRleHR1cmVMYXllciB0ZXh0dXJlTGF5ZXIgPSBXZWJF
eHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCk7CiAKICAgICB0ZXh0dXJlTGF5ZXIuYWRkQ2hp
bGQoY29udGVudExheWVyKTsKICAgICBjb250ZW50TGF5ZXIuYWRkQ2hpbGQobGF5ZXIxKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA1NTFhMzM0Nzg2NzhkNzZlNDY5YzdhZjY5ZjZlNTYyNGUzNTFiYWYzLi5jYTRiY2U4M2Fj
MjYwNzBmNDZlNjBhMzdiZmM3ZDk3OTJjNDQyNmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0zLDYgKzMsMTUgQEAKICAg
ICAgICAgW2Nocm9taXVtXSBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVy
Q2hyb21pdW0gaW5zdGFuY2VzIGVhZ2VybHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc0NDc3CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQ6CisKKzIwMTEtMTItMTUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXllclRyZWVIb3N0IHBvaW50ZXIgb24g
TGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcKKwogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJ1c3NlbGwuCiAKICAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119971</attachid>
            <date>2011-12-19 18:54:11 -0800</date>
            <delta_ts>2011-12-19 18:54:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74376-20111219185410.patch</filename>
            <type>text/plain</type>
            <size>136757</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZlNDQ2NWE0ZjQwMmEx
MjkxYWRlYjIxMjY3ZjY4NDMyYTJjMWUwZS4uYjk0NzM0YzVmNzk3ZGQ5Y2IyMmI0OTYzZmQ1Mzll
NWIzMTY4YmU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTE5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBD
Q0xheWVyRGVsZWdhdGUgYW5kIFdlYkxheWVyQ2xpZW50IGRvIG5vdCBuZWVkIG5vdGlmeVN5bmNS
ZXF1aXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzNzYKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAg
Q0NMYXllckRlbGVnYXRlOjpub3RpZnlTeW5jUmVxdWlyZWQgaXMgYW4gb2RkIGJpdCBvZiBpbnRl
cmZhY2UgdGhhdCB3ZSBvcmlnaW5hbGx5IGNhcmdvLWN1bHRlZCBmcm9tIHRoZQorICAgICAgICBD
b3JlQW5pbWF0aW9uIGNvbXBvc2l0b3IgaW1wbGVtZW50YXRpb24uIEl0IGlzIGEgbWVjaGFuaXNt
IGJ5IHdoaWNoIGEgTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZSBtYXkgcmVxdWVzdCBhIG5ldworICAg
ICAgICBmcmFtZSB2aWEgaXRzIENDTGF5ZXJEZWxlZ2F0ZSwgd2hpY2ggaW4gV2ViQ29yZSBpcyBh
bHdheXMgYSBHcmFwaGljc0xheWVyQ2xpZW50LiBJbiBwcmFjdGljZSwgYWxsCisgICAgICAgIGlt
cGxlbWVudGF0aW9ucyBldmVudHVhbGx5IGVuZGVkIHVwIHJvdXRpbmcgdG8gQ0NMYXllclRyZWVI
b3N0OjpzZXROZWVkc0NvbW1pdCB3aGljaCB0aGVuIG1hZGUgdGhlIHByb3BlcgorICAgICAgICBz
Y2hlZHVsaW5nIGRlY2lzaW9uLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcm91dGVzIGFsbCBjaGFu
Z2VzIHRoYXQgd291bGQgaGF2ZSBnb25lIHRocm91Z2ggQ0NMYXllckRlbGVnYXRlOjpub3RpZnlT
eW5jUmVxdWlyZWQgZGlyZWN0bHkgdG8KKyAgICAgICAgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVk
c0NvbW1pdCwgd2hpY2ggZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBzY2hlZHVsaW5nIGxvZ2ljLgor
CisgICAgICAgIFRoZXJlIGlzIGEgbGFyZ2UgYW1vdW50IG9mIHVuaXQgdGVzdCBjb3ZlcmFnZSBm
b3IgdGhpcyBjaGFuZ2UsIGxhcmdlbHkgaW4gTGF5ZXJDaHJvbWl1bVRlc3QKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppbnNlcnRDaGlsZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2NvcGVkVGhyZWFkUHJveHk6OnJ1blRhc2tJZk5vdFNodXRkb3duKToK
KwogMjAxMS0xMi0xOSAgU2FpbGVzaCBBZ3Jhd2FsIDxzYWlsQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBNZXJnZSBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tIGJhY2sgdG8gU2Nyb2xsQW5p
bWF0b3JNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzZmYTcwM2UxYmZiODcwYTAw
MGIxOWQxMzhjMjQ5YmRkOTlkNjA5NS4uMzYxNTg4Y2RkYzYwYTQ3ZjUxYzJkNjU4MzZhZWVhODcx
NzQ2Y2FmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4MiBAQAogMjAx
MS0xMi0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFtjaHJvbWl1bV0gQ0NMYXllckRlbGVnYXRlIGFuZCBXZWJMYXllckNsaWVudCBkbyBub3QgbmVl
ZCBub3RpZnlTeW5jUmVxdWlyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0Mzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxs
LgorCisgICAgICAgIFdlYkxheWVyQ2xpZW50Ojpub3RpZnlOZWVkc0NvbXBvc2l0ZSgpIGlzIGFu
IG9kZCBpbnRlcmZhY2UgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGF0CisgICAgICAgIENDTGF5ZXJE
ZWxlZ2F0ZTo6bm90aWZ5U3luY1JlcXVpcmVkKCkgaXMgLSBhbGwgc2NoZWR1bGluZyBkZWNpc2lv
bnMgc2hvdWxkIHJvdXRlIHRocm91Z2ggdGhlIFdlYkxheWVyVHJlZVZpZXcsCisgICAgICAgIG5v
dCBpbmRpdmlkdWFsIGxheWVycy4gSW4gcHJhY3RpY2UsIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2Yg
V2ViTGF5ZXJDbGllbnQ6Om5vdGlmeVN5bmNSZXF1aXJlZCgpIGRvIHRoZSBleGFjdAorICAgICAg
ICBzYW1lIHRoaW5nIGFzIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRlKCkuIFRo
aXMgcmVtb3ZlcyB0aGF0IGNhbGxiYWNrLCBtYWtpbmcgV2ViTGF5ZXJDbGllbnQgYW4gZW1wdHkK
KyAgICAgICAgaW50ZXJmYWNlLCBhbmQgcm91dGVzIGFsbCBjYWxscyB0aGF0IHdvdWxkIGdvIHRv
IHRoYXQgaW50ZXJmYWNlIHRvIFdlYkxheWVyVHJlZVZpZXc6OnNjaGVkdWxlQ29tcG9zaXRlKCku
CisKKyAgICAgICAgT25jZSBkb3duc3RyZWFtIGltcGxlbWVudGF0aW9ucyBvZiBXZWJMYXllckNs
aWVudCBhcmUgcmVtb3ZlZCwgV2ViTGF5ZXJDbGllbnQuaCBhbmQgdGhlIGNvbnN0cnVjdG9ycyBh
c3NvY2lhdGVkCisgICAgICAgIHdpdGggaXQgY2FuIGJlIGRlbGV0ZWQuCisKKyAgICAgICAgVGhl
IGJ1bGsgb2YgdGhlIGNoYW5nZXMgaGVyZSBhcmUgdG8gdGhlIHRlc3QgaGFybmVzcy4gTWFueSB0
ZXN0cyB0aGF0IHdlcmUgZGVzaWduZWQgYXJvdW5kIG5vdGlmeVN5bmNSZXF1aXJlZCgpCisgICAg
ICAgIGFyZSByZXdyaXR0ZW4gdG8gY2hlY2sgZm9yIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHND
b21taXQoKSBvciBXZWJMYXllclRyZWVWaWV3OjpzY2hlZHVsZUNvbXBvc2l0ZSgpIGluc3RlYWQu
CisgICAgICAgIEluIGEgZmV3IGluc3RhbmNlcywgdGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0aGUg
c2V0dXAgbG9naWMgYXJvdW5kIHNvbWV3aGF0IHNvIHRoYXQgdGhlIGxheWVycyBiZWluZyBtYW5p
cHVsYXRlZAorICAgICAgICB3ZXJlIGluIGEgdHJlZSB0aGF0IGluaXRpYWxpemVkIHdpdGhvdXQg
ZXJyb3JzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL3BsYXRm
b3JtL1dlYkNvbnRlbnRMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJFeHRl
cm5hbFRleHR1cmVMYXllci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXllci5o
OgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXllckNsaWVudC5oOgorICAgICAgICAq
IHNyYy9XZWJDb250ZW50TGF5ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpXZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAg
KiBzcmMvV2ViQ29udGVudExheWVySW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVy
OjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6V2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbXBsOjpXZWJMYXllckltcGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllckltcGwuaDoK
KyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcDoKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgICogdGVzdHMvQ29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRl
eHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbXBvc2l0b3JNb2NrR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0NvbXBvc2l0b3JNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JN
b2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0p
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAg
ICAgICAgKiB0ZXN0cy9Nb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYktp
dDo6TW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAg
ICAgICogdGVzdHMvV2ViR0xMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisgICAgICAgICh0ZXN0
aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAg
ICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6YXBwbHlTY3JvbGxBbmRT
Y2FsZSk6CisgICAgICAgICh0ZXN0aW5nOjpNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6Y3Jl
YXRlQ29udGV4dDNEKToKKyAgICAgICAgKHRlc3Rpbmc6Ok1vY2tXZWJMYXllclRyZWVWaWV3Q2xp
ZW50OjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAodGVzdGluZzo6V2ViTGF5
ZXJUZXN0OjpTZXRVcCk6CisgICAgICAgICh0ZXN0aW5nOjpXZWJMYXllclRlc3Q6OlRlYXJEb3du
KToKKyAgICAgICAgKHRlc3Rpbmc6OlRFU1RfRik6CisKKzIwMTEtMTItMTkgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUg
Q0NMYXllclRyZWVIb3N0IHBvaW50ZXIgb24gTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJs
eQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjI5YmE5ZDgxYjhk
MDY3OWIxZmRhNTZhZmUwNTIyZjFmOGRhMjBjZC4uZDIyZjFkYzQ1NTRkMDIyNzg1ZTAxNTE4ZmRl
MTJhNTBmMjMxYjBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC02NjUsMTIgKzY2NSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjCiAgICAgcGFpbnRHcmFw
aGljc0xheWVyQ29udGVudHMoY29udGV4dCwgY2xpcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpub3RpZnlTeW5jUmVxdWlyZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCAyZmM4ZTUyNDg4YWNhY2JkMzlk
ZjgwOTg0NjhmN2M5OTNmYzI2NDU2Li4zNGMzZDMyNjQ1ZDBkNjMyY2Y0YzA3N2UzNWJmYmVlZDQ3
NGU4YmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTksNyArOTks
NiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW1wbGVtZW50IHRo
ZSBDQ0xheWVyRGVsZWdhdGUgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKCk7CiAKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVt
KiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDQyNDU0OWM4MWNlMjg5OWQzOGZhMDdlZDc3NjZh
ODQxYWY5MDdiOGMuLjVlZmFkY2ZmMmIxMTdkMWVhMjljMzU5ZjA1MWU4NThkODQ5NTAyNzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjksOCArMTI5LDggQEAgdm9pZCBMYXllckNocm9t
aXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIAogdm9pZCBMYXll
ckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCiB7Ci0gICAgaWYgKG1fZGVsZWdhdGUpCi0gICAg
ICAgIG1fZGVsZWdhdGUtPm5vdGlmeVN5bmNSZXF1aXJlZCgpOworICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsKIH0KIAog
dm9pZCBMYXllckNocm9taXVtOjpzZXRQYXJlbnQoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggNzYyYTc4N2Q4NjA1ZTBmYjA0MjkyMjk0MTIyNTBlZmM4YWJiN2Q2
Yy4uZjkzNzU1ZjA5YmYxYzhlNjY1OTRjMzc0OGIwOTZmZjNlNmVjMDY4NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NMYXllckRl
bGVnYXRlKCkgeyB9CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JiBjbGlwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgp
ID0gMDsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFs
IGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDQ5MDAzZTM3MWM0YTQ1Y2E5MDM3YjY4NTM2YTMzZjZlMDVmN2E0YjUuLjI5Yzgx
YWE1NTUwMDYyNjAyZjZmOGRhM2RmNDMxYTZjZGQzYWFjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcApAQCAtMTA0LDYgKzEwNCw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5
ZXJUcmVlSG9zdCgpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywg
MCk7CisgICAgQVNTRVJUKG1fcHJveHkpOwogICAgIG1fcHJveHktPnN0b3AoKTsKICAgICBtX3By
b3h5LmNsZWFyKCk7CiAgICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CkBAIC0yNDgsNiArMjQ5LDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hy
b21pdW0+IHJvb3RMYXllcikKICAgICBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsKICAgICBpZiAo
bV9yb290TGF5ZXIpCiAgICAgICAgIG1fcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMp
OworICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRW
aWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IDY1Y2Y1Mzg1NjUwMDMxZDM5ZjgzYTUzZmE1MTYzZTE2YzEwN2RmNDQuLmI3
ZDFiMWU1ZjAzZGQzOWJkYzY2ODAwZmYxMjlmYjI0ZTRjYjA1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCkBAIC0xNjMsNyArMTYzLDggQEAgcHVibGljOgogICAgIHZvaWQgbG9zZUNv
bXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CiAKICAgICB2b2lkIHNldE5lZWRzQW5pbWF0
ZSgpOwotICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKKyAgICAvLyB2aXJ0dWFsIGZvciB0ZXN0
aW5nCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOwogCiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9y
b290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGExMGQ5
MGNmN2JlMGM2YmZhYzZkNGZkODcyYjhhZjc4YTU5Yjk5ZWUuLmIyZDAxNWE0MDk4YTIwMGY3NmEz
ODAzNDU0YWRiZGZlNTk1ZDBiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NjYsMTAgKzY2LDE0IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVz
dHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJT
dGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0
Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0
cy9Db21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAndGVz
dHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0Zh
a2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9GbG9hdFF1YWRU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuaCcsCkBAIC04MCw4ICs4NCw2IEBACiAg
ICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
S1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAn
LAotICAgICAgICAgICAgJ3Rlc3RzL01vY2tHcmFwaGljc0NvbnRleHQzRFRlc3QuY3BwJywKLSAg
ICAgICAgICAgICd0ZXN0cy9Nb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAg
ICAndGVzdHMvUE9EQXJlbmFUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9ESW50ZXJ2
YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkNvbnRlbnRMYXllci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViQ29udGVudExheWVyLmgKaW5kZXggNWQwMGRjOTNlMzcxMGFjOWRkMzNlNzhiYTVlMDI4
NmFiOWQyMGMzNC4uMjA4ZWIwNTZhOTk4MTNiYTZiMjBjNDkxM2EwODVmNzIxYzY1YmVjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29udGVu
dExheWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
Q29udGVudExheWVyLmgKQEAgLTM3LDYgKzM3LDggQEAgY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CiAK
IGNsYXNzIFdlYkNvbnRlbnRMYXllciA6IHB1YmxpYyBXZWJMYXllciB7CiBwdWJsaWM6CisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViQ29udGVudExheWVyIGNyZWF0ZShXZWJDb250ZW50TGF5
ZXJDbGllbnQqKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYXMgc29vbiBhcyBkb3duc3Ry
ZWFtIGNsaWVudHMgYXJlIHVwZGF0ZWQuCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViQ29u
dGVudExheWVyIGNyZWF0ZShXZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCop
OwogCiAgICAgV2ViQ29udGVudExheWVyKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXIuaAppbmRleCA2M2Q1NDg1ZjJlZTFiYjM4YzAzZTE4ZDY2MzVkMTIwZDAwNjFkOTgxLi41NTc0
NWFjOTZmMTRmOTBjMGRjMzJhZjI4MDM4ODAyNjlhMzg0NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkV4dGVybmFs
VGV4dHVyZUxheWVyLmgKQEAgLTQyLDYgKzQyLDggQEAgY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CiAv
LyB0aGUgV2ViTGF5ZXJUcmVlVmlldyBpcyBkZXN0cm95ZWQuCiBjbGFzcyBXZWJFeHRlcm5hbFRl
eHR1cmVMYXllciA6IHB1YmxpYyBXZWJMYXllciB7CiBwdWJsaWM6CisgICAgV0VCS0lUX0VYUE9S
VCBzdGF0aWMgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgY3JlYXRlKCk7CisgICAgLy8gRklYTUU6
IFJlbW92ZSBhcyBzb29uIGFzIGRvd25zdHJlYW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KICAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJFeHRlcm5hbFRleHR1cmVMYXllciBjcmVhdGUoV2ViTGF5
ZXJDbGllbnQqKTsKIAogICAgIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyKCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXIuaAppbmRleCA1
NjU2NzFjM2JjOTMwMmY3MGM0OWE1MjU1Y2ExZTAzMzRjMjgxNjgzLi4wMzNiZWU0NWFlYzE0ZWFl
NGU1ZjA5OTYyNmZmYzRmMDcyNTZhZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyLmgKQEAgLTQwLDYgKzQwLDggQEAgc3RydWN0IFdl
YlNpemU7CiAKIGNsYXNzIFdlYkxheWVyIHsKIHB1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBXZWJMYXllciBjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY29uc3Ry
dWN0b3Igb25jZSBkb3duc3RyZWFtIGNsaWVudHMgYXJlIHVwZGF0ZWQuCiAgICAgV0VCS0lUX0VY
UE9SVCBzdGF0aWMgV2ViTGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50Kik7CiAKICAgICBXZWJM
YXllcigpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYkxheWVyQ2xpZW50LmgKaW5kZXggOWYxNDhiYTJlZTEzNzg0MmIxMTJkYzMyOTJj
OTgwNDllNTVjZTk2ZS4uZDJhNjlmZmYwNTFlNmNjNzE4NzgyOGYwNmM3ZWVlYTE5MjM5YTBlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5
ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJMYXllckNsaWVudC5oCkBAIC0zMCwxNCArMzAsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgV2ViTGF5ZXJDbGllbnQgewogcHVibGljOgotICAgIC8vIE5vdGlmaWVzIHRoZSBjbGll
bnQgdGhhdCB0aGUgbGF5ZXIgaGFzIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBuZWVkcyBhCi0gICAg
Ly8gY29tcG9zaXRpbmcgcGFzcyB0byB2aXN1YWxseSB1cGRhdGUuIFRoZSBjbGllbnQgc2hvdWxk
IGV2ZW50dWFsbHkgY2FsbAotICAgIC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZS4KLSAg
ICAvLyBOb3RlOiBzb21lIGNvbXBsZXggb3BlcmF0aW9ucyAoZS5nIGxheWVyIHJlcGFyZW50aW5n
KSBjYW4gY2F1c2UgdGhpcyB0bwotICAgIC8vIGJlIGNhbGxlZCB3aGlsZSB0aGUgbGF5ZXIgdHJl
ZSBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHRvIGdldAotICAgIC8vIGNvcnJlY3Qg
cmVzdWx0cywgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlIHNob3VsZCBiZSBjYWxsZWQgYWZ0
ZXIgdGhlCi0gICAgLy8gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCAoZS5nLiBieSBwb3N0aW5nIGEg
dGFzaykuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkgPSAwOworICAg
IC8vIFRoaXMgZW1wdHkgaW50ZXJmYWNlIGV4aXN0cyBvbmx5IGZvciBsZWdhY3kgcmVhc29ucyAt
IGl0IHdpbGwgYmUgZGVsZXRlZCBhcyBzb29uCisgICAgLy8gYXMgZG93bnN0cmVhbSBjb25zdW1l
cnMgc3RvcCBkZXBlbmRpbmcgb24gdGhpcyBpbnRlcmZhY2UgZXhpc3RpbmcuCiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5XZWJMYXllckNsaWVudCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKaW5kZXggYzk4OTRlMjAzYzU3YWI2MWMy
N2YyZDIzZGNhMTc5NWY0NDk3YmQ2My4uZmFhNmEwOTY4N2FkYjgxYTA0OTk5NGE0NTA4YTliNGI2
NWRiNjExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXIuY3BwCkBAIC0zMSw5ICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViQ29u
dGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQs
IFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKK1dlYkNvbnRlbnRMYXllciBX
ZWJDb250ZW50TGF5ZXI6OmNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGll
bnQpCiB7Ci0gICAgcmV0dXJuIFdlYkNvbnRlbnRMYXllcihXZWJDb250ZW50TGF5ZXJJbXBsOjpj
cmVhdGUoY2xpZW50LCBjb250ZW50Q2xpZW50KSk7CisgICAgcmV0dXJuIFdlYkNvbnRlbnRMYXll
cihXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoY29udGVudENsaWVudCkpOworfQorCitXZWJD
b250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqLCBXZWJD
b250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCit7CisgICAgcmV0dXJuIFdlYkNvbnRl
bnRMYXllcjo6Y3JlYXRlKGNvbnRlbnRDbGllbnQpOwogfQogCiB2b2lkIFdlYkNvbnRlbnRMYXll
cjo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCBjZDg4OTAwYmRh
MzRhNTNiZTFlNmZlZmY5OGQ1OTNjZmNhZTY4MTEwLi43OWUyMGZlZjc5NTJlZWM4MTcwZTNkZWYy
ZWNmMWUzMTIxZmUyOTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIldlYkNv
bnRlbnRMYXllckltcGwuaCIKIAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXllckNs
aWVudC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5oIgpAQCAtMzksMTQgKzM4LDEzIEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxXZWJDb250
ZW50TGF5ZXJJbXBsPiBXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQq
IGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQorUGFzc1JlZlB0
cjxXZWJDb250ZW50TGF5ZXJJbXBsPiBXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoV2ViQ29u
dGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViQ29udGVudExheWVySW1wbChjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRlbnRMYXllckltcGwoY29udGVudENsaWVudCkpOwogfQog
Ci1XZWJDb250ZW50TGF5ZXJJbXBsOjpXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50
KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKK1dlYkNvbnRl
bnRMYXllckltcGw6OldlYkNvbnRlbnRMYXllckltcGwoV2ViQ29udGVudExheWVyQ2xpZW50KiBj
b250ZW50Q2xpZW50KQogICAgIDogQ29udGVudExheWVyQ2hyb21pdW0odGhpcykKLSAgICAsIG1f
Y2xpZW50KGNsaWVudCkKICAgICAsIG1fY29udGVudENsaWVudChjb250ZW50Q2xpZW50KQogICAg
ICwgbV9kcmF3c0NvbnRlbnQodHJ1ZSkKIHsKQEAgLTgwLDEwICs3OCw0IEBAIHZvaWQgV2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJ
bnRSZWN0JiBjbGlwCiAgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywg
V2ViUmVjdChjbGlwKSk7CiB9CiAKLXZvaWQgV2ViQ29udGVudExheWVySW1wbDo6bm90aWZ5U3lu
Y1JlcXVpcmVkKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlOZWVkc0NvbXBvc2l0ZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCAxMDhk
ZjVlM2EyNTRlZDk1Njk0NTk4NmZkNjU0MWE4NGE5ODg2NWZmLi5iMzBjOGFlNTYyZGQ0MzY5YzM5
MWI4MWZiNDg2NzQ3ODQ4ZDYzZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC0zMCwyMyArMzAsMjAgQEAKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkxheWVyQ2xp
ZW50OwogY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OwogCiBjbGFzcyBXZWJDb250ZW50TGF5
ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtLCBwdWJsaWMgV2Vi
Q29yZTo6Q0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJDb250ZW50TGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqLCBXZWJDb250ZW50TGF5
ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRl
bnRMYXllckltcGw+IGNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQp
OwogCiAgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CiAgICAgdmlydHVhbCBib29sIGRy
YXdzQ29udGVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViQ29udGVudExheWVySW1w
bChXZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7
CisgICAgZXhwbGljaXQgV2ViQ29udGVudExheWVySW1wbChXZWJDb250ZW50TGF5ZXJDbGllbnQq
IGNvbnRlbnRDbGllbnQpOwogICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCk7CiAKLSAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViQ29u
dGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVu
dDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5h
bFRleHR1cmVMYXllci5jcHAKaW5kZXggNWEwNmMxNzZiMjUyN2U1Y2Q2ZGZkMjE4MTMyMzgxYjUw
NjA3ZjUxNS4uNTFmODVjYjlmYWM2NWY2ZjM3M2NmNDc5MDg5OGMzYWVhYjIzOTBjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxh
eWVyLmNwcApAQCAtMzEsOSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkV4
dGVybmFsVGV4dHVyZUxheWVyIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyOjpjcmVhdGUoV2ViTGF5
ZXJDbGllbnQqIGNsaWVudCkKK1dlYkV4dGVybmFsVGV4dHVyZUxheWVyIFdlYkV4dGVybmFsVGV4
dHVyZUxheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKQogewotICAgIHJldHVybiBXZWJFeHRl
cm5hbFRleHR1cmVMYXllcihXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNyZWF0ZShjbGll
bnQpKTsKKyAgICByZXR1cm4gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgpOworfQor
CitXZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsOjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXI6OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCmluZGV4IDQ0
MmVhY2Q3ZGE0ZTBhZWI1MTc0YzQzZGY5MTBjODAwMDhiMTg3NDguLjFiMWRhMTAzYzlmYjY3NGM4
MGU4NDhjYTk0ZjMwN2RjNmJkODEyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcApAQCAtMjYsNyAr
MjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkV4dGVybmFsVGV4dHVy
ZUxheWVySW1wbC5oIgogCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDYW52YXMu
aCIKIApAQCAtMzQsMTQgKzMzLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw+
IFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGll
bnQpCitQYXNzUmVmUHRyPFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbD4gV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJJbXBsOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKCkpOwogfQogCi1XZWJFeHRlcm5hbFRleHR1
cmVMYXllckltcGw6OldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbChXZWJMYXllckNsaWVudCog
Y2xpZW50KQorV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpXZWJFeHRlcm5hbFRleHR1cmVM
YXllckltcGwoKQogICAgIDogUGx1Z2luTGF5ZXJDaHJvbWl1bSh0aGlzKQotICAgICwgbV9jbGll
bnQoY2xpZW50KQogewogICAgIHNldEZsaXBwZWQoZmFsc2UpOwogfQpAQCAtNjAsMTAgKzU4LDQg
QEAgdm9pZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYKIHsKIH0KIAotdm9pZCBXZWJFeHRlcm5hbFRleHR1
cmVMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCmluZGV4IDRmOWE5ODcyN2M5N2Q5YjVjOTU4NzQ0
YzI2OWI4ODRkMTg1M2U3NmYuLjFhZDJiODE5OThmMzBkZjZjOWVjYTA5M2EwYzJmZjVhYmVlOTFj
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVy
bmFsVGV4dHVyZUxheWVySW1wbC5oCkBAIC0zMCwyMCArMzAsMTYgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkxheWVyQ2xpZW50
OwogCiBjbGFzcyBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6
UGx1Z2luTGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs
PiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJFeHRl
cm5hbFRleHR1cmVMYXllckltcGw+IGNyZWF0ZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50Kik7CisgICAgV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCB+V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeVN5bmNSZXF1aXJlZCgpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdDsKLQotICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCmluZGV4IDE1
ZTA0MGQ4YTk1YzkzMjUyOGJiYWZjMzUxOTg4MDg5NWM5MmNiOTUuLmY5NDc5Yzk4NGE5ZjliYTBk
NmI2MjMzNGUwOTQ3OGExMzY5NzMyZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllci5jcHAKQEAgLTc0LDkgKzc0LDE0IEBAIFNrTWF0cml4NDQgc2tNYXRyaXg0NEZyb21UcmFu
c2Zvcm1hdGlvbk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1XZWJMYXllciBXZWJMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xp
ZW50KiBjbGllbnQpCitXZWJMYXllciBXZWJMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KikK
IHsKLSAgICByZXR1cm4gV2ViTGF5ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGUoY2xpZW50KSk7Cisg
ICAgcmV0dXJuIFdlYkxheWVyOjpjcmVhdGUoKTsKK30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlKCkpOwog
fQogCiB2b2lkIFdlYkxheWVyOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF5ZXJJbXBsLmNwcAppbmRleCBkZGMwNjExMjA5NDE2Zjk1MDQ1MTE2YzBhZmQ3Mjk3N2Y4
ZjhhNmU1Li5hNGEyZjA5ZjA5Nzk5Nzk0MTM1MTdhNGZjMjJkZDgxZTNjYmQ5MzNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKQEAgLTI2LDE4ICsyNiwx
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgogCi0j
aW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJDbGllbnQuaCIKLQogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzUmVmUHRyPFdlYkxheWVySW1wbD4g
V2ViTGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCkKK1Bhc3NSZWZQdHI8
V2ViTGF5ZXJJbXBsPiBXZWJMYXllckltcGw6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJMYXllckltcGwoY2xpZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJMYXllckltcGwoKSk7CiB9CiAKLVdlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKFdlYkxheWVy
Q2xpZW50KiBjbGllbnQpIDogTGF5ZXJDaHJvbWl1bSh0aGlzKSwgbV9jbGllbnQoY2xpZW50KQor
V2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwoKQorICAgIDogTGF5ZXJDaHJvbWl1bSh0aGlzKQog
ewogfQogCkBAIC01NSwxMCArNTQsNCBAQCB2b2lkIFdlYkxheWVySW1wbDo6cGFpbnRDb250ZW50
cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKQogewogfQogCi12b2lkIFdl
YkxheWVySW1wbDo6bm90aWZ5U3luY1JlcXVpcmVkKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0ZSgpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKaW5k
ZXggNTU4ZDQxYjVjZGUxYTg0ODcwMmNhZDBmMzc1MTJjODkxMTU1MTExNi4uMDI5ODk1OWE1ZDU2
N2I2M2YxMDVkZjg3ZDRlODgzOGNlNmQwM2YxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJJbXBsLmgKQEAgLTMwLDIwICszMCwxNiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CiAK
IGNsYXNzIFdlYkxheWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpMYXllckNocm9taXVtLCBwdWJs
aWMgV2ViQ29yZTo6Q0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJMYXllckltcGw+IGNyZWF0ZShXZWJMYXllckNsaWVudCopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkxheWVySW1wbD4gY3JlYXRlKCk7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJM
YXllckltcGwoV2ViTGF5ZXJDbGllbnQqKTsKKyAgICBXZWJMYXllckltcGwoKTsKICAgICB2aXJ0
dWFsIH5XZWJMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeVN5bmNSZXF1aXJlZCgpOwotCi0gICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGU4MzVhYjc4OWJm
ZDI5ZTc0ZDA4Y2Q3YTFmZTIxMzczZTYwNWE1MmUuLmM0N2E3YzI5MGM0ZDEwNGNkNWQ3ZjliYmE5
NjA0ODdkOGVmZDcyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0yNiw5ICsyNiw5IEBACiAKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAKKyNpbmNsdWRlICJGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAt
MTU1LDcgKzE1NSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9v
dENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1p
dCk7CiB9CiAKLWNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIE1vY2tXZWJH
cmFwaGljc0NvbnRleHQzRCB7CitjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1Ymxp
YyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFj
a2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CiAKQEAgLTI4OSw3ICsyODksNyBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFx
dWVMYXllcnMpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5kcmF3bigpKTsKIH0KIAotY2xhc3Mg
UmVzaGFwZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsK
K2NsYXNzIFJlc2hhcGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRCB7CiBwdWJsaWM6CiAgICAgUmVzaGFwZVRyYWNrZXJDb250ZXh0KCkgOiBtX3Jlc2hhcGVD
YWxsZWQoZmFsc2UpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA2ZmFlOGI1ZDNhZTQ1NTlmYTcyZDNmN2I0
ODY1NjM2YjdjOTJiMGFiLi42MjIyMDBjOWY1MzhhNzIyNTE3MjJhNTAyMTI2NzQ2MDhlMWJiMGYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTI2LDEwICsyNiwxMCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCiAKKyNpbmNsdWRlICJDb21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21w
b3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMDQsOSArMTA0LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBjcmVhdGUoVGVzdEhv
b2tzKiB0ZXN0SG9va3MsIENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+IHJvb3RMYXllciwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAg
ICAgewogICAgICAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QgPSBh
ZG9wdFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QodGVzdEhvb2tzLCBjbGllbnQsIHNldHRpbmdz
KSk7Ci0gICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOwogICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBsYXllclRyZWVIb3N0LT5pbml0aWFsaXplKCk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5
ZXIocm9vdExheWVyKTsKIAogICAgICAgICAvLyBMYXllclRyZWVIb3N0SW1wbCB3b24ndCBkcmF3
IGlmIGl0IGhhcyAxeDEgdmlld3BvcnQuCiAgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFZpZXdw
b3J0KEludFNpemUoMSwgMSkpOwpAQCAtMTI5LDI0ICsxMjksNiBAQCBwcml2YXRlOgogICAgIFRl
c3RIb29rcyogbV90ZXN0SG9va3M7CiB9OwogCi0vLyBUZXN0IHN0dWIgZm9yIFdlYkdyYXBoaWNz
Q29udGV4dDNELiBSZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVlZGVkIGZvciBjb21wb3NpdG9yIGlu
aXRpYWxpemF0aW9uLgotY2xhc3MgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6
IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0b3JNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0QoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3Jh
bSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNE
ZW51bSkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElk
LCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkg
eyAqdmFsdWUgPSAxOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGlj
c0NvbnRleHQzRCgpIHsgfQotfTsKLQogLy8gSW1wbGVtZW50YXRpb24gb2YgQ0NMYXllclRyZWVI
b3N0IGNhbGxiYWNrIGludGVyZmFjZS4KIGNsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CiBwdWJsaWM6CkBAIC0xNjcsMTAgKzE0OSw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiAgICAgewotICAgICAgICBPd25QdHI8V2Vi
R3JhcGhpY3NDb250ZXh0M0Q+IG1vY2sgPSBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnM7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQobW9j
ay5yZWxlYXNlKCksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhy
ZWFkKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgICAgIHJldHVybiBjcmVhdGVDb21w
b3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKQpA
QCAtNzU3LDcgKzczNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9N
YWluVGhyZWFkKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICB7CiAgICAgICAgIExheWVyQ2hy
b21pdW0qIHJvb3QgPSBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpOwogICAgICAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKQEAgLTk0Miw3ICs5MjEsNiBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQogCiBwcml2YXRlOgogICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDVm
Y2E1ZjkxNGQ1ZjNiZjExZDMxMDMyNzBhYzZhYjMyZTdjMjA1MTguLjk2N2YyMzQyZjAzNGQyZTg0
NjEyYzg4MDdiY2U1YWZlNTlmOTVlNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYsOCAr
MjYsOCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRl
ICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaCIKLSNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtNTgsNyArNTgsNyBAQCBw
cm90ZWN0ZWQ6CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVi
bGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CitjbGFzcyBNb2NrQ2FudmFzQ29udGV4dCA6
IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIE1PQ0tfTUVU
SE9EMChjcmVhdGVGcmFtZWJ1ZmZlciwgV2ViR0xJZCgpKTsKICAgICBNT0NLX01FVEhPRDAoY3Jl
YXRlVGV4dHVyZSwgV2ViR0xJZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Db21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWYwODk3MzQxMzNkNzM4MGJiZmM3YWY4NDUyMTgzNDhmYWQzNTlhOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29tcG9zaXRvckZha2VHcmFw
aGljc0NvbnRleHQzRC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRF9oCisjZGVmaW5lIENvbXBvc2l0b3JGYWtl
R3JhcGhpY3NDb250ZXh0M0RfaAorCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbXBvc2l0b3JNb2NrR3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCit7Cisg
ICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyczsKKyAg
ICB3ZWJBdHRycy5hbHBoYSA9IGF0dHJzLmFscGhhOworCisgICAgT3duUHRyPFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBXZWJLaXQ6OkNvbXBvc2l0b3JGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSh3ZWJBdHRycyk7CisgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoCisg
ICAgICAgIHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgMCwKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LAorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCk7Cit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NvbXBvc2l0b3JGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMTQwOWJkNDI0
YjY0NzQzYjhmOTk5M2IzYzE3MmI4ZjYwYWI1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0b3JGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNEX2gKKworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGVzdCBzdHViIGZvciBXZWJHcmFwaGljc0NvbnRleHQz
RC4gUmV0dXJucyBjYW5uZWQgdmFsdWVzIG5lZWRlZCBmb3IgY29tcG9zaXRvciBpbml0aWFsaXph
dGlvbi4KK2NsYXNzIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMg
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcyBh
dHRycykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBt
YWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBXZWJHTElk
IGNyZWF0ZVByb2dyYW0oKSB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0
ZVNoYWRlcihXR0MzRGVudW0pIHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hh
ZGVyaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsg
fQorICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0Mz
RGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycykKKyAgICB7
CisgICAgICAgIG1fYXR0cnMgPSBhdHRyczsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GYWtlR3JhcGhpY3NDb250ZXh0
M0RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZUdyYXBoaWNzQ29u
dGV4dDNEVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzIzMTFhODQzMTNlMDJmN2U4NmU4ZGU5YjBkOGYx
NjVhZDRkNWI0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvRmFrZUdyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworY2xhc3MgRnJhbWVDb3VudGluZ0NvbnRleHQgOiBwdWJsaWMgRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBGcmFtZUNvdW50aW5nQ29udGV4
dCgpIDogbV9mcmFtZSgwKSB7IH0KKworICAgIC8vIFRoaXMgbWV0aG9kIHdvdWxkIG5vcm1hbGx5
IGRvIGEgZ2xTd2FwQnVmZmVycyB1bmRlciB0aGUgaG9vZC4KKyAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRleHR1cmUoKSB7IG1fZnJhbWUrKzsgfQorCisgICAgaW50IGZyYW1lQ291bnQoKSB7IHJl
dHVybiBtX2ZyYW1lOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWU7Cit9OworCitURVNU
KEZha2VHcmFwaGljc0NvbnRleHQzRFRlc3QsIENhbk92ZXJyaWRlTWFudWFsbHkpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRnJhbWVDb3VudGluZ0NvbnRl
eHQoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkKTsKKyAg
ICBGcmFtZUNvdW50aW5nQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8RnJhbWVD
b3VudGluZ0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFw
aGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwOyBpKyspIHsKKyAgICAgICAgY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAxKTsKKyAg
ICAgICAgY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKyAgICB9CisgICAgY29udGV4dC0+Zmlu
aXNoKCk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7Cit9
CisKKworY2xhc3MgR01vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQz
RCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QwKGdldEVycm9yLCBXR0MzRGVudW0oKSk7Cit9
OworCitURVNUKEZha2VHcmFwaGljc0NvbnRleHQzRFRlc3QsIENhblVzZUdNb2NrKQoreworICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEdNb2NrQ29udGV4dCgpKSwg
YXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgIEdNb2Nr
Q29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8R01vY2tDb250ZXh0Kj4oR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5n
ZXQoKSkpOworCisgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGdldEVycm9yKCkpCisgICAg
ICAgICAgICAuV2lsbFJlcGVhdGVkbHkodGVzdGluZzo6UmV0dXJuKDMxNCkpOworCisgICAgLy8g
SXQncyBPSyB0byBjYWxsIG1ldGhvZHMgR01vY2sgZG9lc24ndCBrbm93IGFib3V0LgorICAgIGNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbW9j
a2VkIG1ldGhvZCBpcyByZXR1cm5pbmcgYXMgaW50ZW5kZWQuCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAxMDsgaSsrKQorICAgICAgICBFWFBFQ1RfRVEoKGludCljb250ZXh0LT5nZXRFcnJvcigp
LCAzMTQpOworfQorCitjbGFzcyBDb250ZXh0VGhhdENvdW50c01ha2VDdXJyZW50cyA6IHB1Ymxp
YyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIENvbnRleHRUaGF0Q291
bnRzTWFrZUN1cnJlbnRzKCkgOiBtX21ha2VDdXJyZW50Q291bnQoMCkgeyB9CisgICAgdmlydHVh
bCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpCisgICAgeworICAgICAgICBtX21ha2VDdXJyZW50
Q291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGludCBtYWtlQ3VycmVu
dENvdW50KCkgeyByZXR1cm4gbV9tYWtlQ3VycmVudENvdW50OyB9Citwcml2YXRlOgorICAgIGlu
dCBtX21ha2VDdXJyZW50Q291bnQ7Cit9OworCisKK1RFU1QoRmFrZUdyYXBoaWNzQ29udGV4dDNE
VGVzdCwgQ29udGV4dEZvclRoaXNUaHJlYWRTaG91bGRNYWtlQ3VycmVudCkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBDb250ZXh0VGhhdENvdW50c01ha2VD
dXJyZW50cygpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQpOworICAgIENvbnRleHRUaGF0Q291bnRzTWFrZUN1
cnJlbnRzJiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxDb250ZXh0VGhhdENvdW50c01ha2VD
dXJyZW50cyo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbW9ja0NvbnRleHQubWFr
ZUN1cnJlbnRDb3VudCgpKTsKK30KKworVEVTVChGYWtlR3JhcGhpY3NDb250ZXh0M0RUZXN0LCBD
b250ZXh0Rm9yQW5vdGhlclRocmVhZFNob3VsZE5vdE1ha2VDdXJyZW50KQoreworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRzTWFrZUN1
cnJlbnRzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVh
ZCk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dCk7CisgICAgQ29udGV4dFRoYXRDb3VudHNNYWtl
Q3VycmVudHMmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRzTWFr
ZUN1cnJlbnRzKj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3ND
b250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIEVYUEVDVF9FUSgwLCBtb2NrQ29udGV4dC5t
YWtlQ3VycmVudENvdW50KCkpOworfQorCitjbGFzcyBDb250ZXh0V2l0aE1ha2VDdXJyZW50VGhh
dEZhaWxzIDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAg
Q29udGV4dFdpdGhNYWtlQ3VycmVudFRoYXRGYWlscygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBt
YWtlQ29udGV4dEN1cnJlbnQoKSB7IHJldHVybiBmYWxzZTsgfQorfTsKKworVEVTVChGYWtlR3Jh
cGhpY3NDb250ZXh0M0RUZXN0LCBDb250ZXh0Rm9yVGhpc1RocmVhZEZhaWxzV2hlbk1ha2VDdXJy
ZW50RmFpbHMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcg
Q29udGV4dFdpdGhNYWtlQ3VycmVudFRoYXRGYWlscygpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgIEVYUEVDVF9GQUxTRShjb250ZXh0KTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNELmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zha2VXZWJHcmFwaGlj
c0NvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmMDY1MWI3NzAzMmJkODBlNTgzYzY2ODI3NzQ2Mjg4
NjA1NWRkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0Zha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0RfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJHcmFwaGljc0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gV2ViR3JhcGhpY3NDb250ZXh0M0QgYmFzZSBjbGFzcyBmb3IgdXNlIGluIFdlYktpdCB1bml0
IHRlc3RzLgorLy8gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wcyAocmV0dXJuaW5nIDAgaWYgbmVj
ZXNzYXJ5KS4KK2NsYXNzIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBXZWJHcmFw
aGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoQXR0
cmlidXRlcywgV2ViVmlldyosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb1dlYlZpZXcpIHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBpbnQgd2lkdGgoKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBpbnQgaGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIHJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0dM
RVMyQ29tcGxpYW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZWFk
QmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUs
IFdlYkdMSWQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgV2ViR0xJZCBnZXRQbGF0Zm9ybVRleHR1cmVJZCgpIHsgcmV0
dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwgaW50IHksIGludCB3aWR0
aCwgaW50IGhlaWdodCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3Io
V0dDM0RlbnVtKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRMb3N0KCkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVN
KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXplaXB0ciBzaXpl
LCBXR0MzRGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHVubWFw
QnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQq
IG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZl
bCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwg
V0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEZW51bSB0eXBlLCBXR0Mz
RGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHVubWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmlsaXR5Q0hST01JVU0oYm9vbCB2aXNpYmxlKSB7IH0KKworICAgIHZpcnR1YWwgV2ViU3Ry
aW5nIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkgeyByZXR1cm4gV2ViU3RyaW5n
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVNKGNvbnN0IGNo
YXIqKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXJDSFJPTUlVTShXR0Mz
RGludCBzcmNYMCwgV0dDM0RpbnQgc3JjWTAsIFdHQzNEaW50IHNyY1gxLCBXR0MzRGludCBzcmNZ
MSwgV0dDM0RpbnQgZHN0WDAsIFdHQzNEaW50IGRzdFkwLCBXR0MzRGludCBkc3RYMSwgV0dDM0Rp
bnQgZHN0WTEsIFdHQzNEYml0ZmllbGQgbWFzaywgV0dDM0RlbnVtIGZpbHRlcikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUNIUk9NSVVNKFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEc2l6ZWkgc2FtcGxlcywgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWN0aXZlVGV4dHVyZShXR0MzRGVudW0gdGV4dHVyZSkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdMSWQgc2hhZGVyKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0R1
aW50IGluZGV4LCBjb25zdCBXR0MzRGNoYXIqIG5hbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBi
aW5kQnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgYnVmZmVyKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgZnJhbWVi
dWZmZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKFdHQzNEZW51bSB0
YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFRl
eHR1cmUoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYmxlbmRDb2xvcihXR0MzRGNsYW1wZiByZWQsIFdHQzNEY2xhbXBmIGdyZWVuLCBXR0Mz
RGNsYW1wZiBibHVlLCBXR0MzRGNsYW1wZiBhbHBoYSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJs
ZW5kRXF1YXRpb24oV0dDM0RlbnVtIG1vZGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBibGVuZEVx
dWF0aW9uU2VwYXJhdGUoV0dDM0RlbnVtIG1vZGVSR0IsIFdHQzNEZW51bSBtb2RlQWxwaGEpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoV0dDM0RlbnVtIHNmYWN0b3IsIFdHQzNEZW51
bSBkZmFjdG9yKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoV0dDM0Rl
bnVtIHNyY1JHQiwgV0dDM0RlbnVtIGRzdFJHQiwgV0dDM0RlbnVtIHNyY0FscGhhLCBXR0MzRGVu
dW0gZHN0QWxwaGEpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEoV0dDM0RlbnVt
IHRhcmdldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBXR0MzRGVudW0g
dXNhZ2UpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKFdHQzNEZW51bSB0YXJn
ZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKSB7IH0KKworICAgIHZpcnR1YWwgV0dDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
V0dDM0RlbnVtIHRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGNsZWFyKFdHQzNEYml0ZmllbGQgbWFzaykgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
Q29sb3IoV0dDM0RjbGFtcGYgcmVkLCBXR0MzRGNsYW1wZiBncmVlbiwgV0dDM0RjbGFtcGYgYmx1
ZSwgV0dDM0RjbGFtcGYgYWxwaGEpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKFdH
QzNEY2xhbXBmIGRlcHRoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKFdHQzNE
aW50IHMpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soV0dDM0Rib29sZWFuIHJlZCwg
V0dDM0Rib29sZWFuIGdyZWVuLCBXR0MzRGJvb2xlYW4gYmx1ZSwgV0dDM0Rib29sZWFuIGFscGhh
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTElkIHNoYWRlcikgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoV0dDM0RlbnVtIHRhcmdl
dCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RzaXplaSB3
aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50IGJvcmRlciwgV0dDM0RzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RpbnQg
eG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBo
ZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
KiBkYXRhKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQoV0dDM0RlbnVtIHRh
cmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RpbnQg
eCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNE
aW50IGJvcmRlcikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKFdHQzNE
ZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBXR0MzRGludCB5
b2Zmc2V0LCBXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNp
emVpIGhlaWdodCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKFdHQzNEZW51bSBtb2Rl
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKFdHQzNEZW51bSBmdW5jKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKFdHQzNEYm9vbGVhbiBmbGFnKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGVwdGhSYW5nZShXR0MzRGNsYW1wZiB6TmVhciwgV0dDM0RjbGFtcGYgekZhcikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdM
SWQgc2hhZGVyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShXR0MzRGVudW0gY2FwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFdHQzNEdWludCBp
bmRleCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoV0dDM0RlbnVtIG1vZGUsIFdH
QzNEaW50IGZpcnN0LCBXR0MzRHNpemVpIGNvdW50KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0VsZW1lbnRzKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGVudW0gdHlw
ZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoV0dD
M0RlbnVtIGNhcCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KFdHQzNEdWludCBpbmRleCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBmbHVzaCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gYXR0YWNobWVudCwgV0dDM0Rl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVu
dW0gYXR0YWNobWVudCwgV0dDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBXR0Mz
RGludCBsZXZlbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyb250RmFjZShXR0MzRGVudW0gbW9k
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKFdHQzNEZW51bSB0YXJnZXQp
IHsgfQorCisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0s
IFdHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRB
dHRhY2hlZFNoYWRlcnMoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHNpemVpIG1heENvdW50LCBXR0Mz
RHNpemVpKiBjb3VudCwgV2ViR0xJZCogc2hhZGVycykgeyB9CisgICAgdmlydHVhbCBXR0MzRGlu
dCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IFdHQzNEY2hhciogbmFt
ZSkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihXR0MzRGVudW0g
cG5hbWUsIFdHQzNEYm9vbGVhbiogdmFsdWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZm
ZXJQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50
KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVz
KCkgeyByZXR1cm4gbV9hdHRyczsgfQorICAgIHZpcnR1YWwgV0dDM0RlbnVtIGdldEVycm9yKCkg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYoV0dDM0RlbnVtIHBuYW1l
LCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2ht
ZW50LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0SW50ZWdlcnYoV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpCisgICAg
eworICAgICAgICBpZiAocG5hbWUgPT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9U
RVhUVVJFX1NJWkUpCisgICAgICAgICAgICAqdmFsdWUgPSAxMDI0OworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGVudW0gcG5hbWUs
IFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMpCisgICAgICAgICAgICAqdmFsdWUgPSAxOwor
ICAgIH0KKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQg
cHJvZ3JhbSkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBX
R0MzRGludCogdmFsdWUpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdM
SWQgc2hhZGVyLCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFU
VVMpCisgICAgICAgICAgICAqdmFsdWUgPSAxOworICAgIH0KKworICAgIHZpcnR1YWwgV2ViU3Ry
aW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFk
ZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U3Ry
aW5nKFdHQzNEZW51bSBuYW1lKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUs
IFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVy
aXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtZnYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRV
bmlmb3JtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQqIHZh
bHVlKSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTElk
IHByb2dyYW0sIGNvbnN0IFdHQzNEY2hhciogbmFtZSkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFt
ZSwgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRy
aWJpdihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7
IH0KKyAgICB2aXJ0dWFsIFdHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KFdHQzNE
dWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgaGludChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gbW9kZSkgeyB9CisgICAgdmly
dHVhbCBXR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xJZCBidWZmZXIpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNFbmFibGVkKFdHQzNEZW51bSBjYXApIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihX
ZWJHTElkIGZyYW1lYnVmZmVyKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgV0dDM0Ri
b29sZWFuIGlzUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBXR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xJZCByZW5kZXJidWZmZXIp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNTaGFkZXIoV2Vi
R0xJZCBzaGFkZXIpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4g
aXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgbGluZVdpZHRoKFdHQzNEZmxvYXQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJv
Z3JhbShXZWJHTElkIHByb2dyYW0pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaShX
R0MzRGVudW0gcG5hbWUsIFdHQzNEaW50IHBhcmFtKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9s
eWdvbk9mZnNldChXR0MzRGZsb2F0IGZhY3RvciwgV0dDM0RmbG9hdCB1bml0cykgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNp
emVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVt
IHR5cGUsIHZvaWQqIHBpeGVscykgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShX
R0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIFdHQzNEc2l6ZWkgd2lk
dGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJh
Z2UoV0dDM0RjbGFtcGYgdmFsdWUsIFdHQzNEYm9vbGVhbiBpbnZlcnQpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzY2lzc29yKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgs
IFdHQzNEc2l6ZWkgaGVpZ2h0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFdl
YkdMSWQgc2hhZGVyLCBjb25zdCBXR0MzRGNoYXIqIHN0cmluZykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHN0ZW5jaWxGdW5jKFdHQzNEZW51bSBmdW5jLCBXR0MzRGludCByZWYsIFdHQzNEdWludCBt
YXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShXR0MzRGVudW0g
ZmFjZSwgV0dDM0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJlZiwgV0dDM0R1aW50IG1hc2spIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayhXR0MzRHVpbnQgbWFzaykgeyB9CisgICAgdmly
dHVhbCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoV0dDM0RlbnVtIGZhY2UsIFdHQzNEdWludCBt
YXNrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKFdHQzNEZW51bSBmYWlsLCBXR0Mz
RGVudW0gemZhaWwsIFdHQzNEZW51bSB6cGFzcykgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxPcFNlcGFyYXRlKFdHQzNEZW51bSBmYWNlLCBXR0MzRGVudW0gZmFpbCwgV0dDM0RlbnVtIHpm
YWlsLCBXR0MzRGVudW0genBhc3MpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQo
V0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50IGJvcmRlciwg
V0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZihXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RGVudW0gcG5hbWUsIFdHQzNEZmxvYXQgcGFyYW0pIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0ZXhQ
YXJhbWV0ZXJpKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQgcGFy
YW0pIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoV0dDM0RlbnVtIHRhcmdl
dCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdH
QzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtMWYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxvYXQgeCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVuaWZvcm0xZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNv
bnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkoV0dDM0Rp
bnQgbG9jYXRpb24sIFdHQzNEaW50IHgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2
KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0Rm
bG9hdCB4LCBXR0MzRGZsb2F0IHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KFdH
QzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGZsb2F0KiB2KSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGlu
dCB4LCBXR0MzRGludCB5KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RpbnQqIHYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtM2YoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxvYXQgeCwg
V0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
M2Z2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGZsb2F0
KiB2KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpKFdHQzNEaW50IGxvY2F0aW9uLCBX
R0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRGludCB6KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTNpdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dD
M0RpbnQqIHYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEZmxvYXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQg
dykgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdH
QzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxvYXQqIHYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtNGkoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdH
QzNEaW50IHosIFdHQzNEaW50IHcpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KFdH
QzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikgeyB9
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdH
QzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQq
IHZhbHVlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihXR0MzRGludCBs
b2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
V0dDM0RmbG9hdCogdmFsdWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXNl
UHJvZ3JhbShXZWJHTElkIHByb2dyYW0pIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVBy
b2dyYW0oV2ViR0xJZCBwcm9ncmFtKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRy
aWIxZihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZmxvYXQgeCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjFmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVl
cykgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmKFdHQzNEdWludCBpbmRleCwg
V0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWIyZnYoV0dDM0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZXMpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZmxv
YXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZnYoV0dDM0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZXMp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihXR0MzRHVpbnQgaW5kZXgsIFdH
QzNEZmxvYXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykgeyB9
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IFdHQzNEZmxvYXQqIHZhbHVlcykgeyB9CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBv
aW50ZXIoV0dDM0R1aW50IGluZGV4LCBXR0MzRGludCBzaXplLCBXR0MzRGVudW0gdHlwZSwgV0dD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0dDM0RzaXplaSBzdHJpZGUsIFdHQzNEaW50cHRyIG9mZnNldCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlld3BvcnQoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0
aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQorCisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZUJ1
ZmZlcigpIHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlRnJhbWVidWZm
ZXIoKSB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVByb2dyYW0oKSB7
IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIHsg
cmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkg
eyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkgeyByZXR1
cm4gMTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTElkKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xJZCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xJZCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTElkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVy
KFdlYkdMSWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIHRleFN0b3JhZ2UyREVYVChXR0MzRGVudW0gdGFyZ2V0LCBX
R0MzRGludCBsZXZlbHMsIFdHQzNEdWludCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdHQzNEaW50IHdpZHRoLCBXR0MzRGludCBoZWlnaHQpIHsgfQor
Citwcm90ZWN0ZWQ6CisgICAgQXR0cmlidXRlcyBtX2F0dHJzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRl
eCA0OTk0MzM1NzI0ZjZiMTRmMjdkOTcwZmU2ODkyYWI1ZTllMTVkNDhmLi5mYmI5YzE5ZWEwMTE5
ZDdiYzhkMmRjOGU0ZjI0OGJkMzVhODkzM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJQ
YWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIK
QEAgLTM1LDg3ICszNiw3NyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXRUZXN0czsKIHVzaW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGluZzo6
XzsKIHVzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKIHVzaW5nIDo6dGVzdGluZzo6QW55TnVtYmVy
OwogCi0jZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihkZWxl
Z2F0ZSwgbnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMsIGNvZGVUb1Rlc3QpIFwKLSAgICBFWFBF
Q1RfQ0FMTCgoZGVsZWdhdGUpLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoKG51bVRpbWVz
RXhwZWN0ZWROb3RpZnlTeW5jKSk7IFwKLSAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmKGRlbGVnYXRlKSkKKyNkZWZpbmUgRVhFQ1VURV9BTkRf
VkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IobnVtVGltZXNFeHBlY3RlZFNldE5lZWRz
Q29tbWl0LCBjb2RlVG9UZXN0KSBkbyB7IFwKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJU
cmVlSG9zdCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoKG51bVRpbWVzRXhwZWN0ZWRTZXROZWVk
c0NvbW1pdCkpOyAgICAgIFwKKyAgICAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobV9sYXll
clRyZWVIb3N0LmdldCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB9IHdoaWxlICgwKQogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBNb2NrTGF5ZXJEZWxlZ2F0
ZSA6IHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgeworY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdENs
aWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVibGljOgotICAgIE1PQ0tf
Q09OU1RfTUVUSE9EMChkcmF3c0NvbnRlbnQsIGJvb2woKSk7Ci0gICAgTU9DS19DT05TVF9NRVRI
T0QwKHByZXNlcnZlczNELCBib29sKCkpOwotICAgIE1PQ0tfTUVUSE9EMihwYWludENvbnRlbnRz
LCB2b2lkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSk7Ci0gICAgTU9DS19NRVRI
T0QwKG5vdGlmeVN5bmNSZXF1aXJlZCwgdm9pZCgpKTsKLX07CisgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQg
cGFnZVNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyB9CiAKLWNsYXNzIE1vY2tMYXllclBhaW50ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAg
ICAvLyBVc2VkIG9ubHkgaW4gdGhlIHNpbmdsZS10aHJlYWRlZCBwYXRoLgorICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQogfTsKIAotY2xhc3MgTW9ja05vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdCA6IHB1YmxpYyBOb25Db21wb3NpdGVkQ29udGVudEhvc3QgeworY2xhc3Mg
TW9ja0NDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IGNyZWF0
ZSgpCisgICAgTW9ja0NDTGF5ZXJUcmVlSG9zdCgpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0
KCZtX2Zha2VDbGllbnQsIENDU2V0dGluZ3MoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTW9ja05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk7CisgICAgICAgIGluaXRpYWxp
emUoKTsKICAgICB9CiAKLSAgICBNT0NLX01FVEhPRDEobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSk7CisgICAgTU9DS19NRVRIT0QwKHNldE5lZWRzQ29tbWl0
LCB2b2lkKCkpOwogCiBwcml2YXRlOgotICAgIE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhvc3Qo
KQotICAgICAgICA6IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChhZG9wdFB0cihuZXcgTW9ja0xh
eWVyUGFpbnRlckNocm9taXVtKCkpKQotICAgIHsKLSAgICAgICAgbV9zY3JvbGxMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKLSAgICAgICAgc2V0U2Nyb2xsTGF5ZXIobV9zY3JvbGxM
YXllci5nZXQoKSk7Ci0gICAgfQotICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbExh
eWVyOworICAgIEZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQgbV9mYWtlQ2xpZW50OwogfTsKIAot
Y2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yIDogcHVibGljIExh
eWVyQ2hyb21pdW0geworY2xhc3MgTW9ja0xheWVyUGFpbnRlckNocm9taXVtIDogcHVibGljIExh
eWVyUGFpbnRlckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXllckNocm9taXVt
V2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAg
ICAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIH5MYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoKQotICAgIHsKLSAg
ICAgICAgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQrKzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50
IGdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpIHsgcmV0dXJuIHNfbnVtSW5zdGFuY2VzRGVzdHJv
eWVkOyB9Ci0gICAgc3RhdGljIHZvaWQgcmVzZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSB7IHNf
bnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbnQg
c19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KIH07CiAKLWludCBMYXllckNocm9taXVtV2l0
aEluc3RydW1lbnRlZERlc3RydWN0b3I6OnNfbnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsKIAog
Y2xhc3MgTGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAgICB7Ci0gICAgICAgIC8vIG1fc2lsZW50
RGVsZWdhdGUgaXMgaW5pdGlhbGl6ZWQgdG8gYmUganVzdCBhIHN0dWIgYW5kIHdpbGwKLSAgICAg
ICAgLy8gbm90IHByaW50IGFueSB3YXJuaW5ncy4gSXQgaXMgdXNlZCB3aGVuIHdlIGFyZSBub3Qg
d29ycmllZAotICAgICAgICAvLyBhYm91dCB0ZXN0aW5nIGhvdyB0aGUgZGVsZWdhdGUgaXMgY2Fs
bGVkLgotICAgICAgICBFWFBFQ1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBkcmF3c0NvbnRlbnQo
KSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAgICAgICBFWFBFQ1RfQ0FMTChtX3NpbGVudERlbGVn
YXRlLCBwcmVzZXJ2ZXMzRCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgICAgIEVYUEVDVF9D
QUxMKG1fc2lsZW50RGVsZWdhdGUsIHBhaW50Q29udGVudHMoXywgXykpLlRpbWVzKEFueU51bWJl
cigpKTsKLSAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1Jl
cXVpcmVkKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLQotICAgICAgICAvLyBTdGF0aWMgdmFyaWFi
bGVzIG5lZWQgdG8gYmUgcmVzZXQgZm9yIGV2ZXJ5IG5ldyB0ZXN0IGNhc2UKLSAgICAgICAgTGF5
ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpyZXNldE51bUluc3RhbmNlc0Rl
c3Ryb3llZCgpOworICAgICAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBv
cnQuCisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0ID0gYWRvcHRSZWYobmV3IE1vY2tDQ0xheWVyVHJlZUhvc3QpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBNb2Nr
OjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAg
ICAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1l
cyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1fcGFyZW50LmNsZWFyKCk7CisgICAgICAgIG1fY2hp
bGQxLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGQyLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGQz
LmNsZWFyKCk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDEuY2xlYXIoKTsKKyAgICAgICAgbV9ncmFu
ZENoaWxkMi5jbGVhcigpOworICAgICAgICBtX2dyYW5kQ2hpbGQzLmNsZWFyKCk7CisKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC5jbGVhcigpOworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7
CiAgICAgfQogCiAgICAgdm9pZCB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpIGNvbnN0CkBA
IC0xNDMsMTYyICsxMzQsOTAgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjcmVhdGVTaW1wbGVU
ZXN0VHJlZSgpCiAgICAgewotICAgICAgICBtX3BhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmbV9wYXJlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICAgICAgbV9jaGlsZDIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgICAgICBtX2NoaWxkMyA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgICAgIG1fZ3JhbmRDaGls
ZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgICAgICBt
X2dyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsK
LSAgICAgICAgbV9ncmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnRE
ZWxlZ2F0ZSk7Ci0KLSAgICAgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5
U3luY1JlcXVpcmVkKCkpLlRpbWVzKDMpOworICAgICAgICBtX3BhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAg
ICBtX2NoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9ncmFuZENo
aWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMiA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMyA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVI
b3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKG1fcGFyZW50KTsKKwogICAgICAgICBtX3BhcmVudC0+
YWRkQ2hpbGQobV9jaGlsZDEpOwogICAgICAgICBtX3BhcmVudC0+YWRkQ2hpbGQobV9jaGlsZDIp
OwogICAgICAgICBtX3BhcmVudC0+YWRkQ2hpbGQobV9jaGlsZDMpOwotICAgICAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9wYXJlbnREZWxlZ2F0ZSk7CiAgICAgICAgIG1f
Y2hpbGQxLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQxKTsKICAgICAgICAgbV9jaGlsZDEtPmFkZENo
aWxkKG1fZ3JhbmRDaGlsZDIpOwogICAgICAgICBtX2NoaWxkMi0+YWRkQ2hpbGQobV9ncmFuZENo
aWxkMyk7CiAKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobV9sYXll
clRyZWVIb3N0LmdldCgpKTsKKwogICAgICAgICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgp
OwogICAgIH0KIAotICAgIE1vY2tMYXllckRlbGVnYXRlIG1fc2lsZW50RGVsZWdhdGUsIG1fcGFy
ZW50RGVsZWdhdGU7CisgICAgUmVmUHRyPE1vY2tDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVl
SG9zdDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQxLCBtX2No
aWxkMiwgbV9jaGlsZDMsIG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3JhbmRDaGls
ZDM7CiB9OwogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGJhc2ljQ3JlYXRlQW5kRGVzdHJv
eSkKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7Ci0KLSAgICAvLyBub3Rp
ZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQganVzdCBiZWNhdXNlIHRoZSBsYXll
ciBpcyBjcmVhdGVkIG9yIGRlc3Ryb3llZC4KLSAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUs
IG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygwKTsKLQotICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I+IHRlc3RMYXllciA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1vY2tEZWxlZ2F0ZSkpOwot
ICAgIEFTU0VSVF9UUlVFKHRlc3RMYXllci5nZXQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBBU1NFUlRfVFJV
RSh0ZXN0TGF5ZXIpOwogCi0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBhbHNvIG5v
dCBiZSBjYWxsZWQgb24gdGhlIGRlc3RydWN0b3Igd2hlbiB0aGUgbGF5ZXIgaGFzIG5vIGNoaWxk
cmVuLgotICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsYXllciBpcyBkZXN0cm95
ZWQgYmVmb3JlIHRoZSBtb2NrIGRlbGVnYXRlLgotICAgIEFTU0VSVF9FUSgwLCBMYXllckNocm9t
aXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgp
KTsKLSAgICB0ZXN0TGF5ZXIucmVsZWFzZSgpOwotICAgIEFTU0VSVF9FUSgxLCBMYXllckNocm9t
aXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgp
KTsKKyAgICBFWFBFQ1RfQ0FMTCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5U
aW1lcygwKTsKKyAgICB0ZXN0TGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0
LmdldCgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBhZGRBbmRSZW1vdmVDaGls
ZCkKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZTsKLSAgICBNb2NrTGF5
ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdh
dGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOwogCiAgICAgLy8gVXBvbiBjcmVhdGlvbiwgbGF5ZXJzIHNob3VsZCBub3Qg
aGF2ZSBjaGlsZHJlbiBvciBwYXJlbnQuCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9GQUxTRShjaGls
ZC0+cGFyZW50KCkpOwogCi0gICAgLy8gUGFyZW50IGNhbGxzIG5vdGlmeVN5bmNSZXF1aXJlZCBl
eGFjdGx5IG9uY2Ugd2hlbiBhZGRpbmcgY2hpbGQuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmFkZENoaWxkKGNo
aWxkKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1Io
MSwgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocGFyZW50KSk7CisKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmFkZENoaWxk
KGNoaWxkKSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNoaWxkLmdldCgpLCBwYXJlbnQt
PmNoaWxkcmVuKClbMF0pOwogICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkLT5wYXJl
bnQoKSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQtPnJvb3RMYXllcigpKTsK
IAotICAgIC8vIHJlbW92ZUZyb21QYXJlbnQgc2hvdWxkIGNhdXNlIHRoZSBwYXJlbnQncyBub3Rp
ZnlTeW5jUmVxdWlyZWQgdG8gYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KLSAgICAvLyBUaGUgY2hp
bGREZWxlZ2F0ZSBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIHJlbWFpbiB1bi11c2VkLgotICAg
IEVYUEVDVF9DQUxMKGNoaWxkRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygw
KTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVs
ZWdhdGUsIDEsIGNoaWxkLT5yZW1vdmVGcm9tUGFyZW50KCkpOwotfQotCi1URVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIHZlcmlmeURlc3RydWN0b3JTZW1hbnRpY3MpCi17Ci0gICAgTW9ja0xheWVy
RGVsZWdhdGUgcGFyZW50RGVsZWdhdGU7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgY2hpbGREZWxl
Z2F0ZTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9y
PiBwYXJlbnQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0
cnVjdG9yKCZwYXJlbnREZWxlZ2F0ZSkpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7Ci0KLSAgICAvLyBTZXQg
dXAgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQp
KTsKLSAgICBFWFBFQ1RfVFJVRShjaGlsZC0+cGFyZW50KCkpOwotCi0gICAgLy8gV2hlbiBiZWlu
ZyBkZXN0cm95ZWQsIG5vdGlmeVN5bmNSZXF1aXJlZCBpcyBjYWxsZWQgb25jZSBmb3IgdGhlIHBh
cmVudCwgYmVjYXVzZSBpdCBoYXMgb25lIGNoaWxkLAotICAgIC8vIGJ1dCBzaG91bGQgbm90IGJl
IGNhbGxlZCBmb3IgdGhlIGNoaWxkIHdoaWNoIGhhcyBubyBjaGlsZHJlbi4KLSAgICBFWFBFQ1Rf
Q0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOwotICAg
IEVYUEVDVF9DQUxMKGNoaWxkRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygw
KTsKLQotICAgIEFTU0VSVF9FUSgwLCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3Ry
dWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpKTsKLSAgICBwYXJlbnQucmVsZWFzZSgp
OwotICAgIEFTU0VSVF9FUSgxLCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0
b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpKTsKLQotICAgIC8vIENoaWxkIHNob3VsZCBo
YXZlIGJlZW4gdW4tcGFyZW50ZWQgY29ycmVjdGx5LCBidXQgbm90IHlldCBkZXN0cm95ZWQgc2lu
Y2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdC4KLSAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBh
cmVudCgpKTsKLX0KLQotVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlEZXN0cnVjdG9y
RG9lc05vdExlYWspCi17Ci0gICAgLy8gSW4gdGhpcyB0ZXN0IHdlIGV4cGxpY2l0bHkgaW5zdGFu
dGlhdGUgYSBzcGVjaWFsIHN1YmNsYXNzIG9mCi0gICAgLy8gTGF5ZXJDaHJvbWl1bSBzbyB3ZSBj
YW4gdHJhY2sgdGhlIG51bWJlciBvZiBkZXN0cnVjdG9ycyBjYWxsZWQuCi0KLSAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yPiBwYXJlbnQsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMsIGdyYW5kQ2hpbGQxLCBncmFuZENoaWxkMiwgZ3JhbmRDaGlsZDM7Ci0g
ICAgcGFyZW50ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGNoaWxkMSA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUp
KTsKLSAgICBjaGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50
ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7Ci0gICAgY2hpbGQzID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxl
Z2F0ZSkpOwotICAgIGdyYW5kQ2hpbGQxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
SW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGdyYW5kQ2hp
bGQyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rv
cigmbV9zaWxlbnREZWxlZ2F0ZSkpOwotICAgIGdyYW5kQ2hpbGQzID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkp
OwotCi0gICAgLy8gc2V0IHVwIGEgc2ltcGxlIHRyZWUuCi0gICAgcGFyZW50LT5hZGRDaGlsZChj
aGlsZDEpOwotICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQyKTsKLSAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMyk7Ci0gICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMSk7Ci0gICAgY2hp
bGQxLT5hZGRDaGlsZChncmFuZENoaWxkMik7Ci0gICAgY2hpbGQyLT5hZGRDaGlsZChncmFuZENo
aWxkMyk7Ci0KLSAgICAvLyBDbGVhciBhbGwgdGhlIGNoaWxkcmVuIFJlZlB0cnMgaGVyZS4gQnV0
IHNpbmNlIHRoZXkgYXJlIGF0dGFjaGVkIHRvIHRoZSB0cmVlLCBubyBkZXN0cnVjdG9ycyBzaG91
bGQgYmUgY2FsbGVkIHlldC4KLSAgICBjaGlsZDEuY2xlYXIoKTsKLSAgICBjaGlsZDIuY2xlYXIo
KTsKLSAgICBjaGlsZDMuY2xlYXIoKTsKLSAgICBncmFuZENoaWxkMS5jbGVhcigpOwotICAgIGdy
YW5kQ2hpbGQyLmNsZWFyKCk7Ci0gICAgZ3JhbmRDaGlsZDMuY2xlYXIoKTsKLQotICAgIC8vIHJl
bGVhc2luZyB0aGUgcGFyZW50IHNob3VsZCBjYXVzZSBhbGwgZGVzdHJ1Y3RvcnMgdG8gYmUgaW52
b2tlZC4KLSAgICBBU1NFUlRfRVEoMCwgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0
cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7Ci0gICAgcGFyZW50LnJlbGVhc2Uo
KTsKLSAgICBBU1NFUlRfRVEoNywgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVj
dG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFzdCgxKSwgY2hpbGQtPnJlbW92ZUZyb21Q
YXJlbnQoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGQpCiB7
Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgcGFyZW50RGVsZWdhdGU7Ci0gICAgTW9ja0xheWVyRGVs
ZWdhdGUgY2hpbGREZWxlZ2F0ZTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5wYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT5jaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOwot
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPmNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgm
Y2hpbGREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQzID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT5jaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDMgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKIAotICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDAp
LCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBwYXJlbnQtPnNldExheWVyVHJlZUhv
c3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKIAotICAgIC8vIFRoZSBjaGlsZCBkZWxlZ2F0ZSBu
b3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBpbnNlcnRpbmcuCi0g
ICAgRVhQRUNUX0NBTEwoY2hpbGREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVz
KDApOworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxk
cmVuKCkuc2l6ZSgpKTsKIAogICAgIC8vIENhc2UgMTogaW5zZXJ0aW5nIHRvIGVtcHR5IGxpc3Qu
Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVn
YXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMywgMCkpOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQo
Y2hpbGQzLCAwKSk7CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hp
bGRyZW4oKVswXSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQzLT5wYXJlbnQo
KSk7CiAKICAgICAvLyBDYXNlIDI6IGluc2VydGluZyB0byBiZWdpbm5pbmcgb2YgbGlzdAotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwg
MSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxk
MSwgMCkpOwogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNo
aWxkcmVuKCkuc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVu
KClbMF0pOwogICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CiAg
ICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CiAKICAgICAvLyBD
YXNlIDM6IGluc2VydGluZyB0byBtaWRkbGUgb2YgbGlzdAotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRD
aGlsZChjaGlsZDIsIDEpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1J
VF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMiwgMSkpOwogICAgIEFTU0VS
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsK
ICAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOwogICAgIEVYUEVD
VF9FUShjaGlsZDIsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CkBAIC0zMDYsNyArMjI1LDcgQEAg
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGlsZCkKICAgICBFWFBFQ1RfRVEocGFy
ZW50LmdldCgpLCBjaGlsZDItPnBhcmVudCgpKTsKIAogICAgIC8vIENhc2UgNDogaW5zZXJ0aW5n
IHRvIGVuZCBvZiBsaXN0Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkNCwgMykpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHBhcmVu
dC0+aW5zZXJ0Q2hpbGQoY2hpbGQ0LCAzKSk7CiAKICAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90Pig0KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGNo
aWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKQEAgLTMxNSwxNSArMjM0LDE0IEBAIFRFU1Rf
RihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGQpCiAgICAgRVhQRUNUX0VRKGNoaWxkNCwg
cGFyZW50LT5jaGlsZHJlbigpWzNdKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGls
ZDQtPnBhcmVudCgpKTsKIAotICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ug
bm90aWZ5U3luY1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgaXRzIGNoaWxkcmVuLgotICAgIEVYUEVD
VF9DQUxMKHBhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFz
dCgxKSk7CisgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVlZHNDb21taXQo
KSkuVGltZXMoQXRMZWFzdCgxKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5z
ZXJ0Q2hpbGRQYXN0RW5kT2ZMaXN0KQogewotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50
RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogCiAgICAgQVNT
RVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkp
OwogCkBAIC0zNDMsNjUgKzI2MSw0MCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2Vy
dENoaWxkUGFzdEVuZE9mTGlzdCkKIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRT
YW1lQ2hpbGRUd2ljZSkKIHsKLSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZTsK
LSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZwYXJlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0
ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CisKKyAgICBwYXJlbnQtPnNldExheWVyVHJlZUhvc3QobV9sYXll
clRyZWVIb3N0LmdldCgpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDAp
LCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKIAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGls
ZChjaGlsZDEsIDApKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7Cisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgcGFyZW50
LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMiwgMSkpOwog
CiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7
CiAgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKIAogICAgIC8v
IEluc2VydGluZyB0aGUgc2FtZSBjaGlsZCBhZ2FpbiBzaG91bGQgY2F1c2UgdGhlIGNoaWxkIHRv
IGJlIHJlbW92ZWQgYW5kIHJlLWluc2VydGVkIGF0IHRoZSBuZXcgbG9jYXRpb24uCi0gICAgLy8g
U28gdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB3b3VsZCBiZSBjYWxsZWQgb25lIG9y
IG1vcmUgdGltZXMuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KHBhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwg
MSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKEF0
TGVhc3QoMSksIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAxKSk7CiAKICAgICAvLyBjaGls
ZDEgc2hvdWxkIG5vdyBiZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgIEFTU0VSVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKICAgICBF
WFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOwogICAgIEVYUEVDVF9FUShj
aGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CiAKLSAgICAvLyBwYXJlbnQncyBkZXN0cnVj
dG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVy
IGNoaWxkcmVuCi0gICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKLX0KLQotVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBpbnNlcnRDaGlsZFRoYXRBbHJlYWR5SGFkUGFyZW50KQotewotICAgIE1vY2tMYXllckRlbGVn
YXRlIG9sZFBhcmVudERlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm9sZFBhcmVudERlbGVnYXRlKTsKLSAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVu
dERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwotCi0gICAgLy8gc2V0IHVwIGFuZCBzYW5p
dHktY2hlY2sgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1Iob2xkUGFyZW50RGVsZWdhdGUsIDEsIG9sZFBhcmVudC0+YWRk
Q2hpbGQoY2hpbGQpKTsKLSAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgb2xk
UGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjaGls
ZCwgb2xkUGFyZW50LT5jaGlsZHJlbigpWzBdKTsKLSAgICBFWFBFQ1RfRVEob2xkUGFyZW50Lmdl
dCgpLCBjaGlsZC0+cGFyZW50KCkpOwotCi0gICAgLy8gSW5zZXJ0aW5nIHRvIG5ldyBwYXJlbnQg
Y2F1c2VzIG9sZCBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgdG8gYmUgY2FsbGVkLgotICAg
IC8vIE5vdGUgdGhhdCBpdCBhbHNvIGNhdXNlcyBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQg
dG8gYmUgY2FsbGVkLCBidXQgdGhhdCBpcyB0ZXN0ZWQgZWxzZXdoZXJlLgotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihvbGRQYXJlbnREZWxlZ2F0ZSwgMSwgcGFy
ZW50LT5pbnNlcnRDaGlsZChjaGlsZCwgMCkpOwotCi0gICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oMCksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwotICAgIEFTU0VSVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKLSAg
ICBFWFBFQ1RfRVEoY2hpbGQsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7Ci0gICAgRVhQRUNUX0VR
KHBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKKyAgICBFWFBFQ1RfQ0FMTCgqbV9sYXll
clRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKIH0KIAogVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGQpCiB7CiAgICAg
Y3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogCiAgICAg
RVhQRUNUX0ZBTFNFKGNoaWxkNC0+cGFyZW50KCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIEF0TGVhc3QoMSksIG1fcGFy
ZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxkNCkpOworICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKEF0TGVhc3QoMSksIG1fcGFyZW50
LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxkNCkpOwogCiAgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMyksIG1fcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CiAg
ICAgRVhQRUNUX0VRKG1fY2hpbGQxLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVswXSk7CkBAIC00MTAs
OSArMzAzLDYgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3
Q2hpbGQpCiAgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBjaGlsZDQtPnBhcmVudCgpKTsK
IAogICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMi0+cGFyZW50KCkpOwotCi0gICAgLy8gcGFyZW50
J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3Zl
cyBsZWZ0b3ZlciBjaGlsZHJlbgotICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5v
dGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKIH0KIAogVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGRUaGF0SGFzT3RoZXJQYXJlbnQp
CkBAIC00MjAsMTQgKzMxMCwxNCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VD
aGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhlclBhcmVudCkKICAgICBjcmVhdGVTaW1wbGVUZXN0
VHJlZSgpOwogCiAgICAgLy8gY3JlYXRlIGFub3RoZXIgc2ltcGxlIHRyZWUgd2l0aCB0ZXN0TGF5
ZXIgYW5kIGNoaWxkNC4KLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRl
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CiAgICAgdGVzdExheWVyLT5hZGRDaGlsZChjaGlsZDQpOwogICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCB0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6
ZSgpKTsKICAgICBFWFBFQ1RfRVEoY2hpbGQ0LCB0ZXN0TGF5ZXItPmNoaWxkcmVuKClbMF0pOwog
ICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXIuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOwogCi0gICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUs
IEF0TGVhc3QoMSksIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxk
NCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKEF0
TGVhc3QoMSksIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxkNCkp
OwogCiAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIG1fcGFyZW50LT5jaGls
ZHJlbigpLnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKG1fY2hpbGQxLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKVswXSk7CkBAIC00MzksNDcgKzMyOSwzNyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Qs
IHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhlclBhcmVudCkKICAgICAvLyBhbmQg
Y2hpbGQyIHNob3VsZCBubyBsb25nZXIgaGF2ZSBhIHBhcmVudC4KICAgICBBU1NFUlRfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigwKSwgdGVzdExheWVyLT5jaGlsZHJlbigpLnNpemUoKSk7CiAgICAg
RVhQRUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7Ci0KLSAgICAvLyBwYXJlbnQncyBkZXN0
cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRv
dmVyIGNoaWxkcmVuCi0gICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhTYW1lQ2hpbGQpCiB7CiAgICAgY3JlYXRlU2ltcGxlVGVz
dFRyZWUoKTsKIAotICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxl
ZCBiZWNhdXNlIGl0cyB0aGUgc2FtZSBjaGlsZAotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCAwLCBtX3BhcmVudC0+cmVwbGFjZUNo
aWxkKG1fY2hpbGQyLmdldCgpLCBtX2NoaWxkMikpOworICAgIC8vIHNldE5lZWRzQ29tbWl0IHNo
b3VsZCBub3QgYmUgY2FsbGVkIGJlY2F1c2UgaXRzIHRoZSBzYW1lIGNoaWxkCisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgbV9wYXJlbnQtPnJlcGxh
Y2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgbV9jaGlsZDIpKTsKIAogICAgIHZlcmlmeVRlc3RUcmVl
SW5pdGlhbFN0YXRlKCk7Ci0KLSAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwgaW52b2tl
IG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNoaWxkcmVuCi0gICAg
RVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVz
KEF0TGVhc3QoMSkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlbW92ZUFsbENo
aWxkcmVuKQogewogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CiAKLSAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgx
KSwgbV9wYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuKCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKEF0TGVhc3QoMyksIG1fcGFyZW50LT5yZW1vdmVB
bGxDaGlsZHJlbigpKTsKIAogICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBt
X3BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwogICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMS0+
cGFyZW50KCkpOwogICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMi0+cGFyZW50KCkpOwogICAgIEVY
UEVDVF9GQUxTRShtX2NoaWxkMy0+cGFyZW50KCkpOwotCi0gICAgLy8gbm90aWZ5U3luY1JlcXVp
cmVkIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIHRyeWluZyB0byByZW1vdmVBbGxDaGlsZHJlbiB3
aGVuIHRoZXJlIGFyZSBubyBjaGlsZHJlbi4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgMCwgbV9wYXJlbnQtPnJlbW92ZUFsbENo
aWxkcmVuKCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHNldENoaWxkcmVuKQog
ewotICAgIE1vY2tMYXllckRlbGVnYXRlIG5ld1BhcmVudERlbGVnYXRlOwotICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBvbGRQYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50
RGVsZWdhdGUpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBuZXdQYXJlbnQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm5ld1BhcmVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBuZXdQYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZt
X3NpbGVudERlbGVnYXRlKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbmV3Q2hpbGRyZW47CiAgICAgbmV3Q2hpbGRy
ZW4uYXBwZW5kKGNoaWxkMSk7CkBAIC00OTEsMjMgKzM3MSwyNSBAQCBURVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIHNldENoaWxkcmVuKQogICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNo
aWxkMS0+cGFyZW50KCkpOwogICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKIAot
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihuZXdQYXJlbnREZWxl
Z2F0ZSwgQXRMZWFzdCgxKSwgbmV3UGFyZW50LT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbikpOwor
ICAgIG5ld1BhcmVudC0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwor
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoQXRMZWFz
dCgxKSwgbmV3UGFyZW50LT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbikpOwogCiAgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkp
OwogICAgIEVYUEVDVF9FUShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMS0+cGFyZW50KCkpOwogICAg
IEVYUEVDVF9FUShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMi0+cGFyZW50KCkpOwogCi0gICAgLy8g
cGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQg
cmVtb3ZlcyBpdHMgY2hpbGRyZW4uCi0gICAgRVhQRUNUX0NBTEwobmV3UGFyZW50RGVsZWdhdGUs
IG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FM
TCgqbV9sYXllclRyZWVIb3N0LCBzZXROZWVkc0NvbW1pdCgpKS5UaW1lcyhBdExlYXN0KDEpKTsK
IH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5p
cHVsYXRpb25zKQogewogICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxl
Z2F0ZSk7CiAKLSAgICAvLyBJbiB0aGlzIHRlc3QgY2FzZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBo
b3cgdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCBpcyBjYWxsZWQuCi0gICAgRVhQRUNU
X0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEFueU51
bWJlcigpKTsKKyAgICAvLyBGb3IgdGhpcyB0ZXN0IHdlIGRvbid0IGNhcmUgYWJvdXQgc2V0TmVl
ZHNDb21taXQgY2FsbHMuCisgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9zdCwgc2V0TmVl
ZHNDb21taXQoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogCiAgICAgRVhQRUNUX0VRKG1f
cGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExheWVyKCkpOwogICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXllcigpKTsKQEAgLTU2MiwxMCArNDQ0LDExIEBA
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3Jy
ZWN0QmVoYXZpb3IpCiB7CiAgICAgLy8gVGhlIHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNwbGF5
IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKICAgICAvLyAgIDEuIHNldHMgbmVlZHNEaXNwbGF5IGZs
YWcgYXBwcm9wcmlhdGVseS4KLSAgICAvLyAgIDIuIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5U3lu
Y1JlcXVpcmVkLCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXku
CisgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIHNldE5lZWRzQ29tbWl0LCBleGFjdGx5IG9u
Y2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXkuCisKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHRlc3RM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogCi0gICAgTW9j
a0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0
ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CiAgICAgSW50
U2l6ZSB0ZXN0Qm91bmRzID0gSW50U2l6ZSg1MDEsIDUwOCk7CiAKICAgICBGbG9hdFJlY3QgZGly
dHkxID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CkBAIC01NzYsNDggKzQ1
OSw0MyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1
c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNo
b3VsZCBub3QgYmUgZGlydHkuCiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogCi0gICAgLy8gVGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5
U3luY1JlcXVpcmVkIGJlaGF2aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5n
cy4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7Ci0gICAgdGVzdExheWVy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOworICAgIC8vIFRoaXMgaXMg
anVzdCBpbml0aWFsaXphdGlvbiwgYnV0IHNldE5lZWRzQ29tbWl0IGJlaGF2aW9yIGlzIHZlcmlm
aWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VU
X05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRz
KSk7CisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHRlc3RM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwogICAgIEVYUEVD
VF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoZSByZWFsIHRl
c3QgYmVnaW5zIGhlcmUuCiAKICAgICAvLyBDYXNlIDE6IG5lZWRzRGlzcGxheSBmbGFnIHNob3Vs
ZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5
ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZW1wdHlEaXJ0eVJlY3QpKTsKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRz
RGlzcGxheVJlY3QoZW1wdHlEaXJ0eVJlY3QpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVy
LT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBDYXNlIDI6IGJhc2ljLgotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eTEpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJl
Y3QoZGlydHkxKSk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7
CiAKICAgICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5MikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRf
TkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChk
aXJ0eTIpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAog
ICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRo
YXQgZ28gYmV5b25kIGl0cyBib3VuZHMuCi0gICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3Vu
ZHMpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3Qob3V0T2ZCb3VuZHNEaXJ0
eVJlY3QpKTsKKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
dGVzdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVy
LT5zZXRCb3VuZHModGVzdEJvdW5kcykpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVF
RFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChvdXRP
ZkJvdW5kc0RpcnR5UmVjdCkpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogCiAgICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBk
aXJ0eSByZWN0IGFyZy4KLSAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1v
Y2tEZWxlZ2F0ZSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICB0ZXN0TGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXll
clRyZWVIb3N0LmdldCgpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1J
VF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKSk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7Ci0KLSAgICAvLyBDYXNlIDY6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRp
cnR5IHJlY3QgYXJnIHNob3VsZCBub3QgY2F1c2UKLSAgICAvLyBuZWVkc0Rpc3BsYXkgZmxhZyB0
byBjaGFuZ2UgZm9yIExheWVyQ2hyb21pdW0gd2l0aCBlbXB0eSBib3VuZHMuCi0gICAgdGVzdExh
eWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRz
RGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRz
RGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCiB7Ci0gICAgLy8gV2l0aG91dCBhIGRlbGVnYXRlLCB0
aGUgbGF5ZXIgc2hvdWxkIHN0aWxsIG1hcmsgaXRzZWxmIGRpcnR5IGFzIGFwcHJvcHJpYXRlLAot
ICAgIC8vIGFuZCBpdCBzaG91bGQgbm90IGNyYXNoIHRyeWluZyB0byB1c2UgYSBub24tZXhpc3Rp
bmcgZGVsZWdhdGUuCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RMYXllciA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBJbnRTaXplIHRlc3RCb3VuZHMgPSBJbnRTaXplKDUw
MSwgNTA4KTsKIApAQCAtNjM1LDcyICs1MTMsNTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBjaGVja1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCiAKIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIHsK
LSAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBpbml0aWFsRGVsZWdhdGU7Ci0gICAgTW9ja0xheWVyRGVs
ZWdhdGUgbW9ja0RlbGVnYXRlOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJmluaXRpYWxEZWxlZ2F0ZSk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50
RGVsZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgorICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgdGVzdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQo
KSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZHVtbXlMYXllciA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsgLy8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4K
IAogICAgIC8vIHNhbml0eSBjaGVjayBvZiBpbml0aWFsIHRlc3QgY29uZGl0aW9uCiAgICAgRVhQ
RUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGVzdCBwcm9w
ZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdCBjYWxsIG5lZWRzRGlzcGxheSBhbmQgbmVlZHNDb21taXQg
d2hlbiBjaGFuZ2VkLgotICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNh
bGxlZCwgYW5kIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgcmVtYWluIGZhbHNlLgotICAg
IEVYUEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVz
KDApOyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUg
Z2l2ZXMgYSBuZXcgZGVsZWdhdGUuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0Rl
bGVnYXRlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXROYW1lKCJUZXN0IExheWVyIikpOwotICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKLSAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpKTsKLSAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJh
d09wYWNpdHkoMC41ZikpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgzLCAz
LCA4LCA4KSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7Ci0g
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsK
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0
LCA1LCA2LCA3KSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDAsIHRlc3RMYXllci0+c2V0TmFtZSgiVGVzdCBMYXllciIpKTsKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA0MCwgNTApKSk7CisgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRVc2VzTGF5
ZXJDbGlwcGluZyh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01N
SVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUp
KTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0
ZXN0TGF5ZXItPnNldERyYXdPcGFjaXR5KDAuNWYpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldENsaXBSZWN0KEludFJl
Y3QoMywgMywgOCwgOCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1J
VF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoMCkpOworICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXll
ci0+c2V0RHJhd1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRT
Y3JlZW5TcGFjZVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoNCwgNSwgNiwgNykpKTsKICAgICBFWFBFQ1RfRkFM
U0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBOZXh0LCB0ZXN0IHByb3Bl
cnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rp
c3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5v
dGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNo
YW5nZS4KLSAgICAvLyBBbGwgcHJvcGVydGllcyBuZWVkIHRvIGJlIHNldCB0byBuZXcgdmFsdWVz
IGluIG9yZGVyIGZvciBzZXROZWVkc0NvbW1pdAotICAgIC8vIHRvIGJlIGNhbGxlZC4KLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMS4yM2YsIDQuNTZmKSkpOwotICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnRaKDAuN2YpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJh
Y2tncm91bmRDb2xvcihDb2xvcigwLjRmLCAwLjRmLCAwLjRmKSkpOwotICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0TWFza3NUb0JvdW5kcyh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVt
bXlMYXllci5nZXQoKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0T3BhY2l0eSgwLjVmKSk7Ci0gICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwg
dGVzdExheWVyLT5zZXRPcGFxdWUodHJ1ZSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCg0LjBmLCA5LjBmKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0UmVwbGljYUxheWVy
KGR1bW15TGF5ZXIuZ2V0KCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3Jt
KFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAsIDAsIDAsIDAsIDApKSk7Ci0gICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXRTY3JvbGxhYmxlKHRydWUpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KEludFBvaW50KDEwLCAxMCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91
YmxlU2lkZWQoZmFsc2UpKTsKKyAgICAvLyBBbGwgcHJvcGVydGllcyBuZWVkIHRvIGJlIHNldCB0
byBuZXcgdmFsdWVzIGluIG9yZGVyIGZvciBzZXROZWVkc0NvbW1pdCB0byBiZSBjYWxsZWQuCisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNl
dEFuY2hvclBvaW50WigwLjdmKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19D
T01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMC40
ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1J
VF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSkpOworICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+
c2V0TWFza0xheWVyKGR1bW15TGF5ZXIuZ2V0KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE9wYWNpdHkoMC41Zikp
OworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRl
c3RMYXllci0+c2V0T3BhcXVlKHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
NC4wZiwgOS4wZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9C
RUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFJlcGxpY2FMYXllcihkdW1teUxheWVyLmdldCgpKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVz
dExheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgwLCAwLCAw
LCAwLCAwLCAwKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDEsIHRlc3RMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRTY3Jv
bGxQb3NpdGlvbihJbnRQb2ludCgxMCwgMTApKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NF
VF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNm
b3JtYXRpb25NYXRyaXgoMCwgMCwgMCwgMCwgMCwgMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldERvdWJsZVNpZGVk
KGZhbHNlKSk7CiAKICAgICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNl
ZCBhIGNoYW5nZSB0byB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCiAgICAgRVhQRUNUX0ZBTFNFKHRl
c3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQg
c2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5Ci0gICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxs
IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIG5lZWRzRGlzcGxheSBmbGFn
LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7CisgICAgLy8gVGVz
dCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5IGFuZCBzZXROZWVk
c0NvbW1pdAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7CiAgICAgRVhQRUNUX1RS
VUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7Ci0KLSAgICAvLyBGSVhNRTogbmVlZCB0byBh
ZGQgYSB0ZXN0IGZvciBzZXRMYXllclRyZWVIb3N0IHdpdGggYSBub24tbnVsbCBzdHViYmVkIEND
TGF5ZXJUcmVlSG9zdC4KLX0KLQotVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja05vbkNv
bXBvc2l0ZWRDb250ZW50UHJvcGVydHlDaGFuZ2VDYXVzZXNDb21taXQpCi17Ci0gICAgT3duUHRy
PE1vY2tOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChN
b2NrTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUoKSk7Ci0KLSAgICBHcmFwaGljc0xh
eWVyKiByb290TGF5ZXIgPSBub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnRvcExldmVsUm9vdExh
eWVyKCk7Ci0KLSAgICBFWFBFQ1RfQ0FMTCgqbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LCBub3Rp
ZnlTeW5jUmVxdWlyZWQoXykpLlRpbWVzKDEpOwotICAgIHJvb3RMYXllci0+cGxhdGZvcm1MYXll
cigpLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgxLCAxKSk7Ci0gICAgTW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMobm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmdldCgpKTsKLQot
ICAgIEVYUEVDVF9DQUxMKCpub25Db21wb3NpdGVkQ29udGVudEhvc3QsIG5vdGlmeVN5bmNSZXF1
aXJlZChfKSkuVGltZXMoQXRMZWFzdCgxKSk7Ci0gICAgbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
LT5zZXRWaWV3cG9ydChJbnRTaXplKDMwLCAzMCksIEludFNpemUoMjAsIDIwKSwgSW50UG9pbnQo
MTAsIDEwKSwgMSk7CiB9CiAKIGNsYXNzIExheWVyQ2hyb21pdW1XaXRoQ29udGVudFNjYWxpbmcg
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC03MjMsMzAgKzU3OSwxOSBAQCBwdWJsaWM6CiAK
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tDb250ZW50c1NjYWxlQ2hhbmdlVHJpZ2dl
cnNOZWVkc0Rpc3BsYXkpCiB7Ci0gICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwot
ICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aENvbnRlbnRTY2FsaW5nPiB0ZXN0TGF5ZXIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhDb250ZW50U2NhbGluZygmbW9ja0RlbGVnYXRl
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoQ29udGVudFNjYWxpbmc+IHRlc3RMYXll
ciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aENvbnRlbnRTY2FsaW5nKDApKTsKKyAg
ICB0ZXN0TGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKIAog
ICAgIEludFNpemUgdGVzdEJvdW5kcyA9IEludFNpemUoMzIwLCAyNDApOwotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05F
RURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7
CiAKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX0ZBTFNF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRDb250ZW50
c1NjYWxlKHRlc3RMYXllci0+Y29udGVudHNTY2FsZSgpICsgMS5mKSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRDb250
ZW50c1NjYWxlKHRlc3RMYXllci0+Y29udGVudHNTY2FsZSgpICsgMS5mKSk7CiAgICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiB9CiAKLWNsYXNzIEZha2VDQ0xheWVy
VHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGUpIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpIHsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9v
bCBzdWNjZXNzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KLX07Ci0KIGNsYXNzIEZha2VDQ0xh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBjcmVhdGUoKQpAQCAtNzgzLDcgKzYy
OCw3IEBAIHZvaWQgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBDQ0xheWVyVHJlZUhvc3QqCiAKIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVy
VHJlZUhvc3RUZXN0LCBlbnRlcmluZ1RyZWUpCiB7Ci0gICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlh
bGl6ZSgwKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CkBAIC04MTAsMTIgKzY1NSwxMiBAQCBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVI
b3N0VGVzdCwgZW50ZXJpbmdUcmVlKQogICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9y
U3VidHJlZShwYXJlbnQuZ2V0KCksIDApOwogCiAgICAgbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwot
ICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOwogfQogCiBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwg
YWRkaW5nTGF5ZXJTdWJ0cmVlKQogewotICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgUmVm
UHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QgPSBGYWtlQ0NMYXllclRyZWVI
b3N0OjpjcmVhdGUoKTsKIApAQCAtODQxLDEyICs2ODYsMTIgQEAgVEVTVChMYXllckNocm9taXVt
TGF5ZXJUcmVlSG9zdFRlc3QsIGFkZGluZ0xheWVyU3VidHJlZSkKIAogICAgIGxheWVyVHJlZUhv
c3QtPnNldFJvb3RMYXllcigwKTsKICAgICBsYXllclRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgV2Vi
Q29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CiB9CiAKIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBjaGFuZ2VI
b3N0KQogewotICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwpAQCAtODc0LDEyICs3MTks
MTIgQEAgVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3QpCiAg
ICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgIGZpcnN0TGF5ZXJU
cmVlSG9zdC5jbGVhcigpOwogICAgIHNlY29uZExheWVyVHJlZUhvc3QuY2xlYXIoKTsKLSAgICBX
ZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1
dGRvd24oKTsKIH0KIAogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5n
ZUhvc3RJblN1YnRyZWUpCiB7Ci0gICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAg
ICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGZpcnN0UGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBmaXJzdENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBzZWNvbmRQYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CkBAIC05MTEsMTIgKzc1NiwxMiBAQCBURVNUKExheWVyQ2hyb21pdW1MYXll
clRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdEluU3VidHJlZSkKICAgICBzZWNvbmRMYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAgZmlyc3RMYXllclRyZWVIb3N0LmNsZWFyKCk7CiAg
ICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogfQogCiBURVNU
KExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgcmVwbGFjZU1hc2tBbmRSZXBsaWNhTGF5
ZXIpCiB7Ci0gICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBXZWJLaXQ6Oldl
YkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcmVwbGljYSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKQEAgLTk0OCw3ICs3OTMs
NyBAQCBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgcmVwbGFjZU1hc2tBbmRS
ZXBsaWNhTGF5ZXIpCiAgICAgLy8gVGVzdCBvdmVyLCBjbGVhbnVwIHRpbWUuCiAgICAgbGF5ZXJU
cmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgIGxheWVyVHJlZUhvc3QuY2xlYXIoKTsKLSAg
ICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tHcmFwaGljc0NvbnRleHQzRFRlc3QuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGQ1ZDQ3YjkxNWNkYjQ1NGU4YzE3NDBjZmM5MTg4
NzNhNDdiZTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCIKLQotI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
dXNpbmcgdGVzdGluZzo6UmV0dXJuOwotCi1jbGFzcyBGcmFtZUNvdW50aW5nQ29udGV4dCA6IHB1
YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewotcHVibGljOgotICAgIEZyYW1lQ291bnRp
bmdDb250ZXh0KCkgOiBtX2ZyYW1lKDApIHsgfQotCi0gICAgLy8gVGhpcyBtZXRob2Qgd291bGQg
bm9ybWFsbHkgZG8gYSBnbFN3YXBCdWZmZXJzIHVuZGVyIHRoZSBob29kLgotICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsgbV9mcmFtZSsrOyB9Ci0KLSAgICBpbnQgZnJhbWVDb3Vu
dCgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV9mcmFtZTsKLX07
Ci0KLVRFU1QoTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuT3ZlcnJpZGVNYW51YWxseSkK
LXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50
aW5nQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJl
YWQpOwotICAgIEZyYW1lQ291bnRpbmdDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2Fz
dDxGcmFtZUNvdW50aW5nQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgICBjb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAs
IDEpOwotICAgICAgICBjb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgIH0KLSAgICBjb250
ZXh0LT5maW5pc2goKTsKLQotICAgIEVYUEVDVF9FUSgxMCwgbW9ja0NvbnRleHQuZnJhbWVDb3Vu
dCgpKTsKLX0KLQotCi1jbGFzcyBHTW9ja0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNz
Q29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoZ2V0RXJyb3IsIFdHQzNEZW51
bSgpKTsKLX07Ci0KLVRFU1QoTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdCwgQ2FuVXNlR01vY2sp
Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgR01vY2tDb250
ZXh0KCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7Ci0g
ICAgR01vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxHTW9ja0NvbnRleHQq
PihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChj
b250ZXh0LmdldCgpKSk7Ci0KLSAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZ2V0RXJyb3Io
KSkKLSAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oMzE0KSk7Ci0KLSAgICAvLyBJ
dCdzIE9LIHRvIGNhbGwgbWV0aG9kcyBHTW9jayBkb2Vzbid0IGtub3cgYWJvdXQuCi0gICAgY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBtb2Nr
ZWQgbWV0aG9kIGlzIHJldHVybmluZyBhcyBpbnRlbmRlZC4KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IDEwOyBpKyspCi0gICAgICAgIEVYUEVDVF9FUSgoaW50KWNvbnRleHQtPmdldEVycm9yKCks
IDMxNCk7Ci19Ci0KLWNsYXNzIENvbnRleHRUaGF0Q291bnRzTWFrZUN1cnJlbnRzIDogcHVibGlj
IE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgQ29udGV4dFRoYXRDb3Vu
dHNNYWtlQ3VycmVudHMoKSA6IG1fbWFrZUN1cnJlbnRDb3VudCgwKSB7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkKLSAgICB7Ci0gICAgICAgIG1fbWFrZUN1cnJlbnRD
b3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaW50IG1ha2VDdXJyZW50
Q291bnQoKSB7IHJldHVybiBtX21ha2VDdXJyZW50Q291bnQ7IH0KLXByaXZhdGU6Ci0gICAgaW50
IG1fbWFrZUN1cnJlbnRDb3VudDsKLX07Ci0KLQotVEVTVChNb2NrR3JhcGhpY3NDb250ZXh0M0RU
ZXN0LCBDb250ZXh0Rm9yVGhpc1RocmVhZFNob3VsZE1ha2VDdXJyZW50KQotewotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IENvbnRleHRUaGF0Q291bnRzTWFrZUN1
cnJlbnRzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udGV4dCk7Ci0gICAgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3Vy
cmVudHMmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PENvbnRleHRUaGF0Q291bnRzTWFrZUN1
cnJlbnRzKj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250
ZXh0M0QoY29udGV4dC5nZXQoKSkpOwotICAgIEVYUEVDVF9FUSgxLCBtb2NrQ29udGV4dC5tYWtl
Q3VycmVudENvdW50KCkpOwotfQotCi1URVNUKE1vY2tHcmFwaGljc0NvbnRleHQzRFRlc3QsIENv
bnRleHRGb3JBbm90aGVyVGhyZWFkU2hvdWxkTm90TWFrZUN1cnJlbnQpCi17Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ29udGV4dFRoYXRDb3VudHNNYWtlQ3Vy
cmVudHMoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFk
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250ZXh0KTsKLSAgICBDb250ZXh0VGhhdENvdW50c01ha2VD
dXJyZW50cyYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8Q29udGV4dFRoYXRDb3VudHNNYWtl
Q3VycmVudHMqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChjb250ZXh0LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKDAsIG1vY2tDb250ZXh0Lm1h
a2VDdXJyZW50Q291bnQoKSk7Ci19Ci0KLWNsYXNzIENvbnRleHRXaXRoTWFrZUN1cnJlbnRUaGF0
RmFpbHMgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBD
b250ZXh0V2l0aE1ha2VDdXJyZW50VGhhdEZhaWxzKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1URVNUKE1vY2tHcmFw
aGljc0NvbnRleHQzRFRlc3QsIENvbnRleHRGb3JUaGlzVGhyZWFkRmFpbHNXaGVuTWFrZUN1cnJl
bnRGYWlscykKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBD
b250ZXh0V2l0aE1ha2VDdXJyZW50VGhhdEZhaWxzKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OkZvclVzZU9uVGhpc1RocmVhZCk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQpOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrV2ViR3JhcGhpY3ND
b250ZXh0M0QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja1dlYkdyYXBoaWNz
Q29udGV4dDNELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGI2MjI1NTFiZDdi
OWQ2NzNhYzIwMzliNWMxODRhODRiOGZjYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0RfaAotI2RlZmluZSBNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0RfaAotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotLy8gV2ViR3JhcGhpY3NDb250ZXh0M0QgYmFzZSBjbGFzcyBmb3IgdXNlIGluIFdlYktpdCB1
bml0IHRlc3RzLgotLy8gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wcyAocmV0dXJuaW5nIDAgaWYg
bmVjZXNzYXJ5KS4KLWNsYXNzIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBXZWJH
cmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUo
QXR0cmlidXRlcywgV2ViVmlldyosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb1dlYlZpZXcpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSB7IHJldHVybiAwOyB9Ci0g
ICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBp
c0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBy
ZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNp
emUsIFdlYkdMSWQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgV2ViR0xJZCBnZXRQbGF0Zm9ybVRleHR1cmVJZCgpIHsg
cmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJy
b3IoV0dDM0RlbnVtKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRMb3N0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyU3ViRGF0YUNIUk9N
SVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXplaXB0ciBz
aXplLCBXR0MzRGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQqIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBs
ZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0
aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEZW51bSB0eXBlLCBX
R0MzRGVudW0gYWNjZXNzKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVubWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmlsaXR5Q0hST01JVU0oYm9vbCB2aXNpYmxlKSB7IH0KLQotICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkgeyByZXR1cm4gV2ViU3Ry
aW5nKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVNKGNvbnN0
IGNoYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXJDSFJPTUlVTShX
R0MzRGludCBzcmNYMCwgV0dDM0RpbnQgc3JjWTAsIFdHQzNEaW50IHNyY1gxLCBXR0MzRGludCBz
cmNZMSwgV0dDM0RpbnQgZHN0WDAsIFdHQzNEaW50IGRzdFkwLCBXR0MzRGludCBkc3RYMSwgV0dD
M0RpbnQgZHN0WTEsIFdHQzNEYml0ZmllbGQgbWFzaywgV0dDM0RlbnVtIGZpbHRlcikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUNIUk9NSVVNKFdH
QzNEZW51bSB0YXJnZXQsIFdHQzNEc2l6ZWkgc2FtcGxlcywgV0dDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYWN0aXZlVGV4dHVyZShXR0MzRGVudW0gdGV4dHVyZSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdMSWQgc2hhZGVyKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgV0dD
M0R1aW50IGluZGV4LCBjb25zdCBXR0MzRGNoYXIqIG5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBiaW5kQnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgYnVmZmVyKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgZnJh
bWVidWZmZXIpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKFdHQzNEZW51
bSB0YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmlu
ZFRleHR1cmUoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgYmxlbmRDb2xvcihXR0MzRGNsYW1wZiByZWQsIFdHQzNEY2xhbXBmIGdyZWVuLCBX
R0MzRGNsYW1wZiBibHVlLCBXR0MzRGNsYW1wZiBhbHBoYSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGJsZW5kRXF1YXRpb24oV0dDM0RlbnVtIG1vZGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uU2VwYXJhdGUoV0dDM0RlbnVtIG1vZGVSR0IsIFdHQzNEZW51bSBtb2RlQWxwaGEp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoV0dDM0RlbnVtIHNmYWN0b3IsIFdHQzNE
ZW51bSBkZmFjdG9yKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoV0dD
M0RlbnVtIHNyY1JHQiwgV0dDM0RlbnVtIGRzdFJHQiwgV0dDM0RlbnVtIHNyY0FscGhhLCBXR0Mz
RGVudW0gZHN0QWxwaGEpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEoV0dDM0Rl
bnVtIHRhcmdldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBXR0MzRGVu
dW0gdXNhZ2UpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKFdHQzNEZW51bSB0
YXJnZXQsIFdHQzNEaW50cHRyIG9mZnNldCwgV0dDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lk
KiBkYXRhKSB7IH0KLQotICAgIHZpcnR1YWwgV0dDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoV0dDM0RlbnVtIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGNsZWFyKFdHQzNEYml0ZmllbGQgbWFzaykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyQ29sb3IoV0dDM0RjbGFtcGYgcmVkLCBXR0MzRGNsYW1wZiBncmVlbiwgV0dDM0RjbGFtcGYg
Ymx1ZSwgV0dDM0RjbGFtcGYgYWxwaGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRo
KFdHQzNEY2xhbXBmIGRlcHRoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKFdH
QzNEaW50IHMpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soV0dDM0Rib29sZWFuIHJl
ZCwgV0dDM0Rib29sZWFuIGdyZWVuLCBXR0MzRGJvb2xlYW4gYmx1ZSwgV0dDM0Rib29sZWFuIGFs
cGhhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTElkIHNoYWRlcikg
eyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoV0dDM0RlbnVtIHRh
cmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0RzaXpl
aSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50IGJvcmRlciwgV0dDM0RzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0Rp
bnQgeG9mZnNldCwgV0dDM0RpbnQgeW9mZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXpl
aSBoZWlnaHQsIFdHQzNEZW51bSBmb3JtYXQsIFdHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQoV0dDM0RlbnVt
IHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0Rp
bnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdH
QzNEaW50IGJvcmRlcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKFdH
QzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBXR0MzRGlu
dCB5b2Zmc2V0LCBXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0Mz
RHNpemVpIGhlaWdodCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKFdHQzNEZW51bSBt
b2RlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKFdHQzNEZW51bSBmdW5jKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKFdHQzNEYm9vbGVhbiBmbGFnKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGVwdGhSYW5nZShXR0MzRGNsYW1wZiB6TmVhciwgV0dDM0RjbGFtcGYgekZh
cikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdl
YkdMSWQgc2hhZGVyKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShXR0MzRGVudW0gY2Fw
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFdHQzNEdWlu
dCBpbmRleCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoV0dDM0RlbnVtIG1vZGUs
IFdHQzNEaW50IGZpcnN0LCBXR0MzRHNpemVpIGNvdW50KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0VsZW1lbnRzKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGVudW0g
dHlwZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUo
V0dDM0RlbnVtIGNhcCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KFdHQzNEdWludCBpbmRleCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gYXR0YWNobWVudCwgV0dD
M0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RGVudW0gYXR0YWNobWVudCwgV0dDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBX
R0MzRGludCBsZXZlbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZyb250RmFjZShXR0MzRGVudW0g
bW9kZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKFdHQzNEZW51bSB0YXJn
ZXQpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dy
YW0sIFdHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHNpemVpIG1heENvdW50LCBX
R0MzRHNpemVpKiBjb3VudCwgV2ViR0xJZCogc2hhZGVycykgeyB9Ci0gICAgdmlydHVhbCBXR0Mz
RGludCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IFdHQzNEY2hhciog
bmFtZSkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihXR0MzRGVu
dW0gcG5hbWUsIFdHQzNEYm9vbGVhbiogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRC
dWZmZXJQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNE
aW50KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCkgeyByZXR1cm4gQXR0cmlidXRlcygpOyB9Ci0gICAgdmlydHVhbCBXR0MzRGVudW0gZ2V0
RXJyb3IoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dihXR0MzRGVu
dW0gcG5hbWUsIFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVt
IGF0dGFjaG1lbnQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSkKLSAgICAgICAgICAgICp2YWx1ZSA9IDEwMjQ7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEZW51
bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHBuYW1lID09IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUykKLSAgICAgICAgICAgICp2YWx1
ZSA9IDE7Ci0gICAgfQotCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
V2ViR0xJZCBwcm9ncmFtKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0g
cG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVy
aXYoV2ViR0xJZCBzaGFkZXIsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKHBuYW1lID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpDT01Q
SUxFX1NUQVRVUykKLSAgICAgICAgICAgICp2YWx1ZSA9IDE7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBXZWJTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gV2Vi
U3RyaW5nKCk7IH0KLQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJH
TElkIHNoYWRlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFdlYlN0cmlu
ZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51
bSBwbmFtZSwgV0dDM0RmbG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQ
YXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2
YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0s
IFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEaW50IGxvY2F0aW9uLCBXR0Mz
RGludCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgV0dDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9u
KFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgV0dDM0RjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KFdHQzNEdWludCBpbmRleCwgV0dDM0Rl
bnVtIHBuYW1lLCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFZl
cnRleEF0dHJpYml2KFdHQzNEdWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCog
dmFsdWUpIHsgfQotICAgIHZpcnR1YWwgV0dDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQoV0dDM0R1aW50IGluZGV4LCBXR0MzRGVudW0gcG5hbWUpIHsgcmV0dXJuIDA7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBoaW50KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBtb2RlKSB7IH0K
LSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcikgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0VuYWJsZWQoV0dDM0RlbnVt
IGNhcCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc0ZyYW1l
YnVmZmVyKFdlYkdMSWQgZnJhbWVidWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBXR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihXZWJHTElkIHJlbmRl
cmJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1No
YWRlcihXZWJHTElkIHNoYWRlcikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFdHQzNE
Ym9vbGVhbiBpc1RleHR1cmUoV2ViR0xJZCB0ZXh0dXJlKSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoV0dDM0RmbG9hdCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGxpbmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBpeGVs
U3RvcmVpKFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQgcGFyYW0pIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBwb2x5Z29uT2Zmc2V0KFdHQzNEZmxvYXQgZmFjdG9yLCBXR0MzRGZsb2F0IHVuaXRzKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKFdHQzNEaW50IHgsIFdHQzNEaW50IHks
IFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBX
R0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJT
dG9yYWdlKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgV0dDM0Rz
aXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzYW1w
bGVDb3ZlcmFnZShXR0MzRGNsYW1wZiB2YWx1ZSwgV0dDM0Rib29sZWFuIGludmVydCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNjaXNzb3IoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXpl
aSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJT
b3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0IFdHQzNEY2hhciogc3RyaW5nKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmMoV0dDM0RlbnVtIGZ1bmMsIFdHQzNEaW50IHJlZiwgV0dD
M0R1aW50IG1hc2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKFdH
QzNEZW51bSBmYWNlLCBXR0MzRGVudW0gZnVuYywgV0dDM0RpbnQgcmVmLCBXR0MzRHVpbnQgbWFz
aykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrKFdHQzNEdWludCBtYXNrKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShXR0MzRGVudW0gZmFjZSwgV0dD
M0R1aW50IG1hc2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoV0dDM0RlbnVtIGZh
aWwsIFdHQzNEZW51bSB6ZmFpbCwgV0dDM0RlbnVtIHpwYXNzKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RlbmNpbE9wU2VwYXJhdGUoV0dDM0RlbnVtIGZhY2UsIFdHQzNEZW51bSBmYWlsLCBXR0Mz
RGVudW0gemZhaWwsIFdHQzNEZW51bSB6cGFzcykgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4
SW1hZ2UyRChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQg
Ym9yZGVyLCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKFdHQzNEZW51bSB0YXJn
ZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCBwYXJhbSkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHRleFBhcmFtZXRlcmkoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0Mz
RGludCBwYXJhbSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChXR0MzRGVu
dW0gdGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RpbnQgeG9mZnNldCwgV0dDM0RpbnQgeW9m
ZnNldCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEZW51bSBmb3Jt
YXQsIFdHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIHsgfQotCi0gICAgdmlydHVh
bCB2b2lkIHVuaWZvcm0xZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4KSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBj
b3VudCwgY29uc3QgV0dDM0RmbG9hdCogdikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0x
aShXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQgeCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0xaXYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNE
aW50KiB2KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKFdHQzNEaW50IGxvY2F0aW9u
LCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0yZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEZmxv
YXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkoV0dDM0RpbnQgbG9jYXRpb24s
IFdHQzNEaW50IHgsIFdHQzNEaW50IHkpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2
KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBjb25zdCBXR0MzRGludCogdikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihXR0MzRGludCBsb2NhdGlvbiwgV0dDM0Rm
bG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVuaWZvcm0zZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdH
QzNEZmxvYXQqIHYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2koV0dDM0RpbnQgbG9j
YXRpb24sIFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEaW50IHopIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtM2l2KFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBj
b25zdCBXR0MzRGludCogdikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZihXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dD
M0RmbG9hdCB3KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihXR0MzRGludCBsb2Nh
dGlvbiwgV0dDM0RzaXplaSBjb3VudCwgY29uc3QgV0dDM0RmbG9hdCogdikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHVuaWZvcm00aShXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQgeCwgV0dDM0Rp
bnQgeSwgV0dDM0RpbnQgeiwgV0dDM0RpbnQgdykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZv
cm00aXYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFdHQzNEaW50
KiB2KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXR0MzRGludCBsb2Nh
dGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dD
M0RmbG9hdCogdmFsdWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdH
QzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm1N
YXRyaXg0ZnYoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSB7IH0KLQotICAgIHZpcnR1YWwg
dm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZh
bGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZl
cnRleEF0dHJpYjFmKFdHQzNEdWludCBpbmRleCwgV0dDM0RmbG9hdCB4KSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KFdHQzNEdWludCBpbmRleCwgY29uc3QgV0dDM0RmbG9h
dCogdmFsdWVzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYoV0dDM0R1aW50
IGluZGV4LCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjJmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVl
cykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKFdHQzNEdWludCBpbmRleCwg
V0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHZlcnRleEF0dHJpYjNmdihXR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFdHQzNEZmxvYXQq
IHZhbHVlcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKFdHQzNEdWludCBp
bmRleCwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9h
dCB3KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGZ2KFdHQzNEdWludCBpbmRl
eCwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWVzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4
QXR0cmliUG9pbnRlcihXR0MzRHVpbnQgaW5kZXgsIFdHQzNEaW50IHNpemUsIFdHQzNEZW51bSB0
eXBlLCBXR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXR0MzRHNpemVpIHN0cmlkZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSB7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNp
emVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFdlYkdMSWQg
Y3JlYXRlQnVmZmVyKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVG
cmFtZWJ1ZmZlcigpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJv
Z3JhbSgpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVTaGFkZXIoV0dD
M0RlbnVtKSB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRleHR1cmUo
KSB7IHJldHVybiAxOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMSWQp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTElkKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTElkKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMSWQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVTaGFkZXIoV2ViR0xJZCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2Vi
R0xJZCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3RvcmFnZTJERVhUKFdHQzNEZW51bSB0
YXJnZXQsIFdHQzNEaW50IGxldmVscywgV0dDM0R1aW50IGludGVybmFsZm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0dDM0RpbnQgd2lkdGgsIFdHQzNEaW50IGhlaWdo
dCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE1vY2tXZWJH
cmFwaGljc0NvbnRleHQzRF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYkdMTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJHTExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyNGNiNTI3MTkxMTg3YWQ4ZTlk
NjgwYmE2MTExYTIyYWY5NDM1NTlkLi42NmVhNjkwZmFiM2ZiNTRhYTgzMmM5YTJhYTgxY2I5YzU5
MzIyYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkdMTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
R0xMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDkgKzI2LDggQEAKIAogI2luY2x1ZGUgIldl
YkdMTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAK
QEAgLTM3LDMyICszNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSB7
CiAKLS8vIFRlc3Qgc3R1YiBmb3IgV2ViR3JhcGhpY3NDb250ZXh0M0QuIFJldHVybnMgY2FubmVk
IHZhbHVlcyBuZWVkZWQgZm9yIGNvbXBvc2l0b3IgaW5pdGlhbGl6YXRpb24uCi1jbGFzcyBDb21w
b3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIE1vY2tXZWJHcmFwaGljc0Nv
bnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvck1vY2tX
ZWJHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0Nv
bnRleHQzRChhdHRycykpOyB9Ci0gICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsg
cmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkg
eyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElkLCBXR0Mz
RGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGdldFByb2dyYW1pdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFs
dWUgPSAxOyB9Ci0gICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBn
ZXRDb250ZXh0QXR0cmlidXRlcygpIHsgcmV0dXJuIG1fYXR0cnM7IH0KLQotcHJpdmF0ZToKLSAg
ICBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzKSB7IG1fYXR0cnMuYWxwaGEgPSBhdHRycy5hbHBoYTsgfQotCi0gICAg
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyczsKLX07Ci0KLXN0YXRpYyBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi17Ci0gICAgT3duUHRyPFdlYkdyYXBoaWNz
Q29udGV4dDNEPiB3ZWJDb250ZXh0ID0gQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGF0dHJzKTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCgKLSAgICAgICAgd2ViQ29udGV4dC5y
ZWxlYXNlKCksIGF0dHJzLCAwLAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3csCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9y
VXNlT25Bbm90aGVyVGhyZWFkKTsKLX0KLQogVEVTVChXZWJHTExheWVyQ2hyb21pdW1UZXN0LCBv
cGFxdWVGb3JtYXRzKQogewogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBidWZmZXI7CkBAIC03
Miw5ICs0NSw5IEBAIFRFU1QoV2ViR0xMYXllckNocm9taXVtVGVzdCwgb3BhcXVlRm9ybWF0cykK
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBvcGFxdWVBdHRyczsKICAgICBvcGFx
dWVBdHRycy5hbHBoYSA9IGZhbHNlOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBh
bHBoYUNvbnRleHQgPSBjcmVhdGVHcmFwaGljc0NvbnRleHQoYWxwaGFBdHRycyk7CisgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBhbHBoYUNvbnRleHQgPSBjcmVhdGVDb21wb3NpdG9yTW9j
a0dyYXBoaWNzQ29udGV4dDNEKGFscGhhQXR0cnMpOwogICAgIEVYUEVDVF9UUlVFKGFscGhhQ29u
dGV4dCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBvcGFxdWVDb250ZXh0ID0gY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KG9wYXF1ZUF0dHJzKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG9wYXF1ZUNvbnRleHQgPSBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4
dDNEKG9wYXF1ZUF0dHJzKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZXh0KTsKIAogICAg
IGJ1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShhbHBoYUNvbnRleHQuZ2V0KCksIEludFNp
emUoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJMYXllclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXllclRl
c3QuY3BwCmluZGV4IDE1ODk4ODFkMjEwZWE5M2NhZDQ3NWQyNWM5NjdkMmI4NzY3MjhlMzguLjM2
N2MwNjZiYTU5OGI2ZjM1OGVlNzQ4YWExOWJkOGVmNzAzOGFhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKQEAgLTI1LDE0ICsyNSwxNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyLmgiCiAKKyNp
bmNsdWRlICJDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
V2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXllci5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbnRlbnRMYXllckNsaWVudC5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJM
YXllclRyZWVWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgogI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50
TGF5ZXIuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXJDbGllbnQuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkxheWVyQ2xpZW50LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogCkBA
IC00MSw5ICs0NCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKIAogbmFtZXNwYWNlIHsK
IAotY2xhc3MgTW9ja1dlYkxheWVyQ2xpZW50IDogcHVibGljIFdlYkxheWVyQ2xpZW50IHsKK2Ns
YXNzIE1vY2tXZWJMYXllclRyZWVWaWV3Q2xpZW50IDogcHVibGljIFdlYkxheWVyVHJlZVZpZXdD
bGllbnQgewogcHVibGljOgotICAgIE1PQ0tfTUVUSE9EMChub3RpZnlOZWVkc0NvbXBvc2l0ZSwg
dm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDAoc2NoZWR1bGVDb21wb3NpdGUsIHZvaWQoKSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYlNpemUm
IHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZUZhY3RvcikgeyB9CisgICAgdmlydHVhbCBXZWJHcmFw
aGljc0NvbnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCkgeyByZXR1cm4gQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzKCkpLmxlYWtQdHIoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0Nv
bnRleHQoYm9vbCBzdWNjZXNzKSB7IH0KIH07CiAKIGNsYXNzIE1vY2tXZWJDb250ZW50TGF5ZXJD
bGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExheWVyQ2xpZW50IHsKQEAgLTUzLDcgKzYxLDMwIEBA
IHB1YmxpYzoKIAogY2xhc3MgV2ViTGF5ZXJUZXN0IDogcHVibGljIFRlc3QgewogcHVibGljOgot
ICAgIFdlYkxheWVyVGVzdCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgewor
ICAgICAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCisgICAgICAg
IFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAgICAgbV9yb290TGF5
ZXIgPSBXZWJMYXllcjo6Y3JlYXRlKCk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIG1fdmlldyA9
IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSgmbV9jbGllbnQsIG1fcm9vdExheWVyLCBXZWJMYXll
clRyZWVWaWV3OjpTZXR0aW5ncygpKTsKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMoJm1fY2xpZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24o
KQorICAgIHsKKyAgICAgICAgLy8gV2UgbWF5IGdldCBhbnkgbnVtYmVyIG9mIHNjaGVkdWxlQ29t
cG9zaXRlIGNhbGxzIGR1cmluZyBzaHV0ZG93bi4KKyAgICAgICAgRVhQRUNUX0NBTEwobV9jbGll
bnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgbV92
aWV3LnNldFJvb3RMYXllcigwKTsKKyAgICAgICAgbV9yb290TGF5ZXIucmVzZXQoKTsKKyAgICAg
ICAgbV92aWV3LnJlc2V0KCk7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNb2NrV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dCBtX2NsaWVudDsKKyAgICBXZWJMYXllciBtX3Jvb3RMYXllcjsKKyAgICBXZWJMYXllclRyZWVW
aWV3IG1fdmlldzsKIH07CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGNsaWVudCBnZXRzIGNhbGxlZCB0
byBhc2sgZm9yIGEgY29tcG9zaXRlIGlmIHdlIGNoYW5nZSB0aGUKQEAgLTYxLDk5ICs5MiwxMDAg
QEAgcHVibGljOgogVEVTVF9GKFdlYkxheWVyVGVzdCwgQ2xpZW50KQogewogICAgIC8vIEJhc2Ug
bGF5ZXIuCi0gICAgTW9ja1dlYkxheWVyQ2xpZW50IGNsaWVudDsKLSAgICBFWFBFQ1RfQ0FMTChj
bGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBX
ZWJMYXllciBsYXllciA9IFdlYkxheWVyOjpjcmVhdGUoJmNsaWVudCk7Ci0gICAgTW9jazo6VmVy
aWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgRVhQRUNUX0NBTEwobV9jbGll
bnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICBXZWJMYXll
ciBsYXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICBtX3Jvb3RMYXllci5hZGRDaGlsZChs
YXllcik7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsK
IAogICAgIFdlYkZsb2F0UG9pbnQgcG9pbnQoMywgNCk7Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50
LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1Rf
Q0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAg
ICAgbGF5ZXIuc2V0QW5jaG9yUG9pbnQocG9pbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKHBvaW50LCBsYXllci5hbmNob3JQb2ludCgp
KTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGlt
ZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9z
aXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIGZsb2F0IGFuY2hvclogPSA1OwogICAgIGxh
eWVyLnNldEFuY2hvclBvaW50WihhbmNob3JaKTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9u
cygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9FUShhbmNob3JaLCBsYXllci5hbmNob3JQb2ludFoo
KSk7CiAKICAgICBXZWJTaXplIHNpemUoNywgOCk7Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBu
b3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FM
TChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAg
bGF5ZXIuc2V0Qm91bmRzKHNpemUpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZjbGllbnQpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2Ns
aWVudCk7CiAgICAgRVhQRUNUX0VRKHNpemUsIGxheWVyLmJvdW5kcygpKTsKIAotICAgIEVYUEVD
VF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7
CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0
TGVhc3QoMSkpOwogICAgIGxheWVyLnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAgTW9jazo6
VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfVFJVRShsYXllci5tYXNr
c1RvQm91bmRzKCkpOwogCi0gICAgTW9ja1dlYkxheWVyQ2xpZW50IG90aGVyQ2xpZW50OwotICAg
IEVYUEVDVF9DQUxMKG90aGVyQ2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhB
bnlOdW1iZXIoKSk7Ci0gICAgV2ViTGF5ZXIgb3RoZXJMYXllciA9IFdlYkxheWVyOjpjcmVhdGUo
Jm90aGVyQ2xpZW50KTsKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9z
aXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgV2ViTGF5ZXIgb3RoZXJM
YXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKKyAgICBtX3Jvb3RMYXllci5hZGRDaGlsZChvdGhl
ckxheWVyKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSku
VGltZXMoQXRMZWFzdCgxKSk7CiAgICAgbGF5ZXIuc2V0TWFza0xheWVyKG90aGVyTGF5ZXIpOwot
ICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKG90
aGVyTGF5ZXIsIGxheWVyLm1hc2tMYXllcigpKTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwg
bm90aWZ5TmVlZHNDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NB
TEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAg
IGZsb2F0IG9wYWNpdHkgPSAwLjEyMzsKICAgICBsYXllci5zZXRPcGFjaXR5KG9wYWNpdHkpOwot
ICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgRVhQRUNUX0VRKG9w
YWNpdHksIGxheWVyLm9wYWNpdHkoKSk7CiAKLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlm
eU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVYUEVDVF9DQUxMKG1f
Y2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKICAgICBsYXll
ci5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMo
JmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50
KTsKICAgICBFWFBFQ1RfVFJVRShsYXllci5vcGFxdWUoKSk7CiAKLSAgICBFWFBFQ1RfQ0FMTChj
bGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworICAgIEVY
UEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEp
KTsKICAgICBsYXllci5zZXRQb3NpdGlvbihwb2ludCk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfRVEocG9pbnQsIGxheWVyLnBvc2l0aW9uKCkp
OwogCiAgICAgLy8gVGV4dHVyZSBsYXllci4KLSAgICBFWFBFQ1RfQ0FMTChjbGllbnQsIG5vdGlm
eU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgICBXZWJFeHRlcm5hbFRl
eHR1cmVMYXllciB0ZXh0dXJlTGF5ZXIgPSBXZWJFeHRlcm5hbFRleHR1cmVMYXllcjo6Y3JlYXRl
KCZjbGllbnQpOwotICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZjbGllbnQp
OworICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhB
bnlOdW1iZXIoKSk7CisgICAgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgdGV4dHVyZUxheWVyID0g
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgpOworICAgIG1fcm9vdExheWVyLmFkZENo
aWxkKHRleHR1cmVMYXllcik7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMo
Jm1fY2xpZW50KTsKIAotICAgIEVYUEVDVF9DQUxMKGNsaWVudCwgbm90aWZ5TmVlZHNDb21wb3Np
dGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CisgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVk
dWxlQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwogICAgIHRleHR1cmVMYXllci5zZXRU
ZXh0dXJlSWQoMyk7Ci0gICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVu
dCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAg
ICBFWFBFQ1RfRVEoM3UsIHRleHR1cmVMYXllci50ZXh0dXJlSWQoKSk7CiAKLSAgICBFWFBFQ1Rf
Q0FMTChjbGllbnQsIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkpLlRpbWVzKEF0TGVhc3QoMSkpOwor
ICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBdExl
YXN0KDEpKTsKICAgICB0ZXh0dXJlTGF5ZXIuc2V0RmxpcHBlZCh0cnVlKTsKLSAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmVMYXll
ci5mbGlwcGVkKCkpOwogCi0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBv
c2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEpKTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2No
ZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQXRMZWFzdCgxKSk7CiAgICAgV2ViRmxvYXRSZWN0IHV2
UmVjdCgwLjEsIDAuMSwgMC45LCAwLjkpOwogICAgIHRleHR1cmVMYXllci5zZXRVVlJlY3QodXZS
ZWN0KTsKLSAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIEVYUEVD
VF9UUlVFKHRleHR1cmVMYXllci5mbGlwcGVkKCkpOwogCiAKICAgICAvLyBDb250ZW50IGxheWVy
LgogICAgIE1vY2tXZWJDb250ZW50TGF5ZXJDbGllbnQgY29udGVudENsaWVudDsKICAgICBFWFBF
Q1RfQ0FMTChjb250ZW50Q2xpZW50LCBwYWludENvbnRlbnRzKF8sIF8pKS5UaW1lcyhBbnlOdW1i
ZXIoKSk7Ci0gICAgRVhQRUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5U
aW1lcyhBbnlOdW1iZXIoKSk7Ci0gICAgV2ViQ29udGVudExheWVyIGNvbnRlbnRMYXllciA9IFdl
YkNvbnRlbnRMYXllcjo6Y3JlYXRlKCZjbGllbnQsICZjb250ZW50Q2xpZW50KTsKLSAgICBNb2Nr
OjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmY2xpZW50KTsKKyAgICBFWFBFQ1RfQ0FMTCht
X2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgIFdl
YkNvbnRlbnRMYXllciBjb250ZW50TGF5ZXIgPSBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSgmY29u
dGVudENsaWVudCk7CisgICAgbV9yb290TGF5ZXIuYWRkQ2hpbGQoY29udGVudExheWVyKTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogCi0gICAgRVhQ
RUNUX0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBdExlYXN0KDEp
KTsKKyAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMo
QXRMZWFzdCgxKSk7CiAgICAgY29udGVudExheWVyLnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0g
ICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNsaWVudCk7CisgICAgTW9jazo6
VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICBFWFBFQ1RfRkFMU0Uo
Y29udGVudExheWVyLmRyYXdzQ29udGVudCgpKTsKIH0KIAogVEVTVF9GKFdlYkxheWVyVGVzdCwg
SGllcmFyY2h5KQogewotICAgIE1vY2tXZWJMYXllckNsaWVudCBjbGllbnQ7Ci0gICAgRVhQRUNU
X0NBTEwoY2xpZW50LCBub3RpZnlOZWVkc0NvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7
Ci0gICAgV2ViTGF5ZXIgbGF5ZXIxID0gV2ViTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KTsKLSAgICBX
ZWJMYXllciBsYXllcjIgPSBXZWJMYXllcjo6Y3JlYXRlKCZjbGllbnQpOworICAgIEVYUEVDVF9D
QUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7Cisg
ICAgV2ViTGF5ZXIgbGF5ZXIxID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOworICAgIFdlYkxheWVyIGxh
eWVyMiA9IFdlYkxheWVyOjpjcmVhdGUoKTsKIAogICAgIEVYUEVDVF9UUlVFKGxheWVyMS5wYXJl
bnQoKS5pc051bGwoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLnBhcmVudCgpLmlzTnVsbCgp
KTsKQEAgLTE3Miw4ICsyMDQsOCBAQCBURVNUX0YoV2ViTGF5ZXJUZXN0LCBIaWVyYXJjaHkpCiAK
ICAgICBNb2NrV2ViQ29udGVudExheWVyQ2xpZW50IGNvbnRlbnRDbGllbnQ7CiAgICAgRVhQRUNU
X0NBTEwoY29udGVudENsaWVudCwgcGFpbnRDb250ZW50cyhfLCBfKSkuVGltZXMoQW55TnVtYmVy
KCkpOwotICAgIFdlYkNvbnRlbnRMYXllciBjb250ZW50TGF5ZXIgPSBXZWJDb250ZW50TGF5ZXI6
OmNyZWF0ZSgmY2xpZW50LCAmY29udGVudENsaWVudCk7Ci0gICAgV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXIgdGV4dHVyZUxheWVyID0gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgmY2xp
ZW50KTsKKyAgICBXZWJDb250ZW50TGF5ZXIgY29udGVudExheWVyID0gV2ViQ29udGVudExheWVy
OjpjcmVhdGUoJmNvbnRlbnRDbGllbnQpOworICAgIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyIHRl
eHR1cmVMYXllciA9IFdlYkV4dGVybmFsVGV4dHVyZUxheWVyOjpjcmVhdGUoKTsKIAogICAgIHRl
eHR1cmVMYXllci5hZGRDaGlsZChjb250ZW50TGF5ZXIpOwogICAgIGNvbnRlbnRMYXllci5hZGRD
aGlsZChsYXllcjEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>