<?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>72520</bug_id>
          
          <creation_ts>2011-11-16 10:21:22 -0800</creation_ts>
          <short_desc>[chromium] Create CCDamageTracker class to determine regions of change for a surface</short_desc>
          <delta_ts>2011-11-28 19:34:11 -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>Layout and Rendering</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>72521</dependson>
          <blocked>67341</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>504019</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-16 10:21:22 -0800</bug_when>
    <thetext>This patch will provide a CCDamageTracker class and the associated tests.  It is the &quot;core guts&quot; of the scissoring optimization, encapsulated into a single class.   This class computes the region of a surface that has been &quot;damaged&quot; and would need to be redrawn.  In combination with clipping, this damage will be used to compute the final scissor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504324</commentid>
    <comment_count>1</comment_count>
      <attachid>115462</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-16 15:30:11 -0800</bug_when>
    <thetext>Created attachment 115462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504516</commentid>
    <comment_count>2</comment_count>
      <attachid>115462</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 19:07:25 -0800</bug_when>
    <thetext>Comment on attachment 115462
Patch

Attachment 115462 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10483974</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505121</commentid>
    <comment_count>3</comment_count>
      <attachid>115462</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-17 12:51:50 -0800</bug_when>
    <thetext>Comment on attachment 115462
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:336
&gt; +                renderSurface-&gt;updateDamageRectForNextFrame();

Why is this calling through the RenderSurface? I think this should be explicit renderSurface-&gt;setDamanageRect(...)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:84
&gt; +    bool useDamageTracking;

Tracking-&gt;Tracker

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:107
&gt; +    void updateDamageRectForNextFrame() { m_damageRect = m_damageTracker-&gt;computeDamageForNextFrame(); }

Delete this function. Add setDamageRect. Have the place that calls this do setDamageRect(renderSurface-&gt;damageTracker()-&gt;getDamangeForNextFrame(...));

it will be more obvious what its doing that way.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:132
&gt; +    FloatRect m_damageRect;

Who consumes this value? I&apos;d prefer you not add it here if its not used... personally, I&apos;d prefer to see this passed around to functions that need it rather than persisted. Again, this is because it lying here begs the question &quot;when is this valid, when is it stale, when is it correct?&quot;

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:42
&gt; +#define VERIFY_FLOAT_RECTS_ALMOST_EQUAL(expected, actual)               \

EXPECT_FLOAT_RECT_EQ

This should go in a common file and the other tests using it shoudl be modified too

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:50
&gt; +    // FIXME: this function is redundant with similar code from CCLayerTreeHostCommonTest.

Make a CCLayerTreeTestCommon.h

We established this convention with CCSchedulerTestCommon.h

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:51
&gt; +    void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* root)

If this isn&apos;t using state from CCDamageTrackerTest then it shouldn&apos;t be a member function

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:62
&gt; +    void resetUpdateRectsRecursive(CCLayerImpl* layer)

Should this just be a method on the CCLayerImpl? It feels like it. CCLayerImpl::setUpdateRectRecursive(const FloatRect&amp; value) --- rather than having a reset

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:75
&gt; +        root-&gt;resetPropertyChangedFlagForSubtree();

Why do we sometimes say &quot;ForSubtree&quot; and other times Rescursive? Its the same thing, right?

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:78
&gt; +    void emulateRenderingForSimpleTree(CCLayerImpl* root, FloatRect&amp; rootDamageRect)

Rendering? We draw...

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:86
&gt; +    void emulateRenderingForComplexTree(CCLayerImpl* root, FloatRect&amp; rootDamageRect, FloatRect&amp; childDamageRect)

Try to fuse complex tree and simple tree? I am confused what the difference is.

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:100
&gt; +    PassRefPtr&lt;CCLayerImpl&gt; setUpSimpleLayerTree()

Lets have a a header full of different types of representative layer trees. Or a directory test/trees/ with .h files that create different kinds of trees. But &quot;simple&quot; should be a LOT more descriptive. That way someone else who needs a layer tree of a certain type can grab one easily.

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:176
&gt; +        emulateRenderingForComplexTree(root.get(), rootDamageRect, childDamageRect);

I&apos;m confused because here you&apos;re mixing creation of a tree with testing things about the damage tracker. That should be part of a test. YOu mihgt just want a test that is &quot;sanity check that the damage rect is the world when you create it&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505497</commentid>
    <comment_count>4</comment_count>
      <attachid>115740</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-17 22:03:30 -0800</bug_when>
    <thetext>Created attachment 115740
addressed reviewer comments

I think this is finally reaching a good state for official review; I&apos;ll be happy to break it into smaller patches if this is too much to gulp down at once. thanks\!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505513</commentid>
    <comment_count>5</comment_count>
      <attachid>115740</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-17 22:45:51 -0800</bug_when>
    <thetext>Comment on attachment 115740
addressed reviewer comments

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:42
&gt; +    static WTF::PassOwnPtr&lt;CCDamageTracker&gt; create(CCRenderSurface* owningSurface);

Why didn&apos;t you remove the ownership here? That&apos;s a big no-no in my opinion, and I haven&apos;t heard you make a compelling argument otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505887</commentid>
    <comment_count>6</comment_count>
      <attachid>115829</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-18 10:27:53 -0800</bug_when>
    <thetext>Created attachment 115829
removed owning surface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505954</commentid>
    <comment_count>7</comment_count>
      <attachid>115844</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-18 12:05:24 -0800</bug_when>
    <thetext>Created attachment 115844
updated to tip of tree and removed CCRenderSurface pointer on damage tracker interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505964</commentid>
    <comment_count>8</comment_count>
      <attachid>115844</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-18 12:13:04 -0800</bug_when>
    <thetext>Comment on attachment 115844
updated to tip of tree and removed CCRenderSurface pointer on damage tracker interface

Attachment 115844 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10519184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505992</commentid>
    <comment_count>9</comment_count>
      <attachid>115853</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-18 13:08:53 -0800</bug_when>
    <thetext>Created attachment 115853
hopefully fixes compile errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506040</commentid>
    <comment_count>10</comment_count>
      <attachid>115853</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-18 14:00:14 -0800</bug_when>
    <thetext>Comment on attachment 115853
hopefully fixes compile errors

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

Awesome tests.  Can you add a few more?

* damage on masks
* damage on replica masks as well
* a transform change that causes the layer rect edges to not be parallel to its surface&apos;s edges, e.g. rotation or perspective?
* damage on a layer where bounds() != contentBounds()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:46
&gt; +static FloatRect HACKYScrollFix(CCLayerImpl* layer, const FloatRect&amp; rect)

I think all changes to scrolling I was planning on should be made at this point.  Can we manage without this now?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:132
&gt; +    // Swap next and previous history maps, simply by changing the index.
&gt; +    m_currentRectHistoryIndex = (m_currentRectHistoryIndex + 1) % 2;

nit: I think this would be cleaner to have two RectMaps and do a swap() and clear(), rather than needing to do indexing and modulo math everywhere.  You wouldn&apos;t even need the saveRect and removeRect functions and could just ask the correct rectmap directly.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:141
&gt; +        if (layer-&gt;renderSurface() &amp;&amp; layer-&gt;id() != targetSurfaceLayerID)

We use this logic all over the place.  Can you add maybe something like a layer-&gt;isRenderSurfaceForTarget(id) function?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:214
&gt; +        if (!oldLayerRect.isEmpty())
&gt; +            targetDamageRect.uniteIfNonZero(oldLayerRect);

nit: No need for this conditional.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:252
&gt; +        if (!oldSurfaceRect.isEmpty())
&gt; +            targetDamageRect.uniteIfNonZero(oldSurfaceRect);

nit: No need for this conditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506062</commentid>
    <comment_count>11</comment_count>
      <attachid>115853</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-18 14:29:53 -0800</bug_when>
    <thetext>Comment on attachment 115853
hopefully fixes compile errors

I&apos;m happy. Enne&apos;s got great points. When you have their lgtm, you have mine as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506070</commentid>
    <comment_count>12</comment_count>
      <attachid>115853</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-11-18 14:39:02 -0800</bug_when>
    <thetext>Comment on attachment 115853
hopefully fixes compile errors

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

Great stuff!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:191
&gt; +    //        - the old layer region also damges the surface, because this region is now exposed.

typo: damages

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:212
&gt; +        // Note oldLayerRect is already in target space.

If the RS content rect changed then the oldLayerRect won&apos;t necessarily be in the correct space.  Please see the following comment too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:246
&gt; +    if (renderSurface-&gt;surfacePropertyChanged()) {

Since if surfacePropertyChanged() we mark the entire RS as damaged, should we take that into account in extendDamageForLayer() ?  Is there any point in computing a damageRect for it layer by layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506087</commentid>
    <comment_count>13</comment_count>
      <attachid>115853</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-18 15:00:15 -0800</bug_when>
    <thetext>Comment on attachment 115853
hopefully fixes compile errors



Thanks very much for the reviews.  I&apos;ll submit a new patch soon!   There was only one item to reply:

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:246
&gt;&gt; +    if (renderSurface-&gt;surfacePropertyChanged()) {
&gt; 
&gt; Since if surfacePropertyChanged() we mark the entire RS as damaged, should we take that into account in extendDamageForLayer() ?  Is there any point in computing a damageRect for it layer by layer?

I think there is still a case to compute damageRect: for example, a portion of a &quot;descendant surface&quot; changes because of a layer, and that same surface also translates.  In that case, when we draw the descendant surface, we should be able to draw only the small region that changed.  But when we draw the ancestor surface, however, then the entire surface damages the target.

It seemed reasonable to try and design the damage tracker to support this from the beginning, but it should be pointed out that the first version of scissoring won&apos;t be able to take advantage of this.  We will only be able to use a different scissor for each render surface once we&apos;ve been able to cache those textures across frames.  For now, we&apos;ll just have to use the root surface&apos;s damageRect as the scissor for all surfaces.

Does this sound reasonable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509623</commentid>
    <comment_count>14</comment_count>
      <attachid>116707</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 00:50:01 -0800</bug_when>
    <thetext>Created attachment 116707
addressed reviewers feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509625</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 00:55:22 -0800</bug_when>
    <thetext>Attachment 116707 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:295:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:563:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509627</commentid>
    <comment_count>16</comment_count>
      <attachid>116708</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 00:58:24 -0800</bug_when>
    <thetext>Created attachment 116708
forgot to commit style fix, should be fixed now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509630</commentid>
    <comment_count>17</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 01:01:18 -0800</bug_when>
    <thetext>Notes about the most recent patch submitted:

(1) Enne: a lot has changed, could you please give it one more careful review before we ask James?

(2) Nat: can you please check the new if-statement at the beginning of CCDamageTracker::updateDamageRectForNextFrame() and please let me know if you would prefer that we pass that surfacePropertyChanged flag as a function arg instead?  For now, I felt that this is likely to change soon anyway, and adding more args will become unwieldy.

(3) Everyone: All unit tests pass, but I suspect there are still some final remaining issues with contentRect changes and transform hierarchy of replicas/masks.  I have created bug https://bugs.webkit.org/show_bug.cgi?id=73055 to follow up after this lands, after having the opportunity to test the damage tracker in action.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509950</commentid>
    <comment_count>18</comment_count>
      <attachid>116708</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 10:51:03 -0800</bug_when>
    <thetext>Comment on attachment 116708
forgot to commit style fix, should be fixed now

Thanks for making m_currentRectHistory and m_nextRectHistory explicit and not using modulo arithmetic.  I find this code a lot easier to read.  And, nice work sorting out masks and replica masks--I&apos;ve broken that code a lot, so more testing is great to have.

I forget what the resolution to our discussion about layers where content bounds != bounds.  Did that (or should that?) get filed as a separate bug against update rect calculations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509961</commentid>
    <comment_count>19</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 10:56:16 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 116708 [details])
&gt; Thanks for making m_currentRectHistory and m_nextRectHistory explicit and not using modulo arithmetic.  I find this code a lot easier to read.  And, nice work sorting out masks and replica masks--I&apos;ve broken that code a lot, so more testing is great to have.
&gt; 
&gt; I forget what the resolution to our discussion about layers where content bounds != bounds.  Did that (or should that?) get filed as a separate bug against update rect calculations?

We had agreed that this was an issue with the updateRect correctness, not the damage rect.  So we filed https://bugs.webkit.org/show_bug.cgi?id=72919</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509964</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 11:00:12 -0800</bug_when>
    <thetext>(In reply to comment #19)

&gt; We had agreed that this was an issue with the updateRect correctness, not the damage rect.  So we filed https://bugs.webkit.org/show_bug.cgi?id=72919

I tried searching for that but couldn&apos;t dig that up.  Thanks.  :)

This is looking good to me.  My only question at this point is how antialiased layer edges interact with damage tracking.  Is that also an updateRect issue or does that affect how you apply damage to surfaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510075</commentid>
    <comment_count>21</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 12:33:43 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; 
&gt; &gt; We had agreed that this was an issue with the updateRect correctness, not the damage rect.  So we filed https://bugs.webkit.org/show_bug.cgi?id=72919
&gt; 
&gt; I tried searching for that but couldn&apos;t dig that up.  Thanks.  :)
&gt; 
&gt; This is looking good to me.  My only question at this point is how antialiased layer edges interact with damage tracking.  Is that also an updateRect issue or does that affect how you apply damage to surfaces?

So here&apos;s how I imagined it working:

Currently damageRect is just a floatRect.  I&apos;m expecting that the enclosingIntRect conversion will handle it correctly when we actually apply the scissor itself in the next patch.

If we find that is incorrect, then it should be straightforward to add an &quot;if layer should use AA, then inflate damage by 0.5&quot; few lines of code to the damage tracker inside of the extendDamageXXX functions, to mimic exactly the same behavior that happens when the layer is actually drawn.

~Shawn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510105</commentid>
    <comment_count>22</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 13:16:19 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)

&gt; &gt; This is looking good to me.  My only question at this point is how antialiased layer edges interact with damage tracking.  Is that also an updateRect issue or does that affect how you apply damage to surfaces?
&gt; 
&gt; So here&apos;s how I imagined it working:
&gt; 
&gt; Currently damageRect is just a floatRect.  I&apos;m expecting that the enclosingIntRect conversion will handle it correctly when we actually apply the scissor itself in the next patch.
&gt; 
&gt; If we find that is incorrect, then it should be straightforward to add an &quot;if layer should use AA, then inflate damage by 0.5&quot; few lines of code to the damage tracker inside of the extendDamageXXX functions, to mimic exactly the same behavior that happens when the layer is actually drawn.

Yeah, I think inflating the damage rect by 0.5 pixels should be sufficient when a layer is using antialiasing.  We might need to expose some more data to know when to do this, since the use antialiased edges are dependent on several layer properties.  That all seems pretty straightforward to add in a later patch.  Just curious, thanks.  :)

This patch looks good to me, then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510147</commentid>
    <comment_count>23</comment_count>
      <attachid>116708</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 13:57:07 -0800</bug_when>
    <thetext>Comment on attachment 116708
forgot to commit style fix, should be fixed now

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

Enne covered the logic so I have nothin&apos; but style nits. R=me, but a decent number of things to follow up on.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:54
&gt; +void CCDamageTracker::updateDamageRectForNextFrame(const WTF::Vector&lt;RefPtr&lt;CCLayerImpl&gt; &gt;&amp; layerList, int targetSurfaceLayerID, CCLayerImpl* targetSurfaceMaskLayer)

nit: remove the WTF:: from WTF::Vector, there&apos;s a using declaration in Vector.h that pulls Vector into the global namespace and WebKit style is to leave out the qualifier

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:153
&gt; +FloatRect CCDamageTracker::computeDamageFromActiveLayers(const WTF::Vector&lt;RefPtr&lt;CCLayerImpl&gt; &gt;&amp; layerList, int targetSurfaceLayerID)

drop WTF::

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:215
&gt; +    originTransform.translate3d(-0.5 * layer-&gt;bounds().width(), -0.5 * layer-&gt;bounds().height(), 0);

should just be translate()

can you comment (briefly) why this translation is taking place?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:278
&gt; +            replicaOriginTransform.translate3d(layer-&gt;replicaLayer()-&gt;position().x(), layer-&gt;replicaLayer()-&gt;position().y(), 0);

why translate3d(.., ..., 0) instead of translate(.., ...)? the latter will save a round of multiplications per component

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:280
&gt; +            replicaOriginTransform.translate3d(-layer-&gt;replicaLayer()-&gt;position().x(), -layer-&gt;replicaLayer()-&gt;position().y(), 0);

translate()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:294
&gt; +        replicaOriginTransform.translate3d(layer-&gt;replicaLayer()-&gt;position().x(), layer-&gt;replicaLayer()-&gt;position().y(), 0);

translate()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:296
&gt; +        replicaOriginTransform.translate3d(-layer-&gt;replicaLayer()-&gt;position().x(), -layer-&gt;replicaLayer()-&gt;position().y(), 0);

same here - should just be translate()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:42
&gt; +    static WTF::PassOwnPtr&lt;CCDamageTracker&gt; create();

remove WTF:: please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:43
&gt; +    virtual ~CCDamageTracker() { }

please out-of-line this destructor (leave just a declaration here and put the definition in the .cpp), the OwnPtr&lt;HashMap&gt; destructor is pretty darn big and we don&apos;t want it in the header.

should this be virtual? i don&apos;t see any subclasses or protected members

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:45
&gt; +    void updateDamageRectForNextFrame(const WTF::Vector&lt;RefPtr&lt;CCLayerImpl&gt; &gt;&amp; layerList, int targetSurfaceLayerID, CCLayerImpl* targetSurfaceMaskLayer);

drop WTF::

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:51
&gt; +    FloatRect computeDamageFromActiveLayers(const WTF::Vector&lt;RefPtr&lt;CCLayerImpl&gt; &gt;&amp; layerList, int targetSurfaceLayerID);

remove WTF:: please

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:89
&gt; +    root-&gt;renderSurface()-&gt;setContentRect(IntRect(IntPoint(), IntSize(500.0f, 500.0f)));

drop the .0f bit from here - we don&apos;t use those in WebKit except when it&apos;s necessary to force math to happen in a certain type, and in this case it&apos;s just passed to an int parameter anyway. See http://www.webkit.org/coding/coding-style.html &quot;Floating point literals&quot;

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:91
&gt; +    child-&gt;setPosition(FloatPoint(100.0f, 100.0f));

drop the .0f&apos;s here too

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:117
&gt; +    root-&gt;renderSurface()-&gt;setContentRect(IntRect(IntPoint(), IntSize(500.0f, 500.0f)));

drop .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:119
&gt; +    child1-&gt;setPosition(FloatPoint(100.0f, 100.0f));

drop .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:122
&gt; +    child1-&gt;setOpacity(0.5f); // with a child that drawsContent, this will cause the layer to create its own renderSurface.

0.5 is fine here

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:125
&gt; +    child2-&gt;setPosition(FloatPoint(11.0f, 11.0f));

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:130
&gt; +    grandChild1-&gt;setPosition(FloatPoint(200.0f, 200.0f));

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:135
&gt; +    grandChild2-&gt;setPosition(FloatPoint(190.0f, 190.0f));

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:188
&gt; +    EXPECT_FLOAT_RECT_EQ(FloatRect(0.0f, 0.0f, 500.0f, 500.0f), rootDamageRect);

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:210
&gt; +    EXPECT_FLOAT_RECT_EQ(FloatRect(190.0f, 190.0f, 16.0f, 18.0f), childDamageRect);
&gt; +    EXPECT_FLOAT_RECT_EQ(FloatRect(0.0f, 0.0f, 500.0f, 500.0f), rootDamageRect);

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:220
&gt; +    child-&gt;setUpdateRect(FloatRect(10.0f, 11.0f, 12.0f, 13.0f));

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:225
&gt; +    EXPECT_FLOAT_RECT_EQ(FloatRect(110.0f, 111.0f, 12.0f, 13.0f), rootDamageRect);

ditto on .0f

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:229
&gt; +    child-&gt;setUpdateRect(FloatRect(10.0f, 11.0f, 12.0f, 13.0f));

ditto on .0f

i won&apos;t annotate the rest in this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510167</commentid>
    <comment_count>24</comment_count>
      <attachid>116708</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 14:16:45 -0800</bug_when>
    <thetext>Comment on attachment 116708
forgot to commit style fix, should be fixed now


OK I&apos;ll make all those fixes right now.


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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:215
&gt;&gt; +    originTransform.translate3d(-0.5 * layer-&gt;bounds().width(), -0.5 * layer-&gt;bounds().height(), 0);
&gt; 
&gt; should just be translate()
&gt; 
&gt; can you comment (briefly) why this translation is taking place?

The translate is part of computing the origin transform itself, since its not stored on layers.  I&apos;ll put that in a comment.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:43
&gt;&gt; +    virtual ~CCDamageTracker() { }
&gt; 
&gt; please out-of-line this destructor (leave just a declaration here and put the definition in the .cpp), the OwnPtr&lt;HashMap&gt; destructor is pretty darn big and we don&apos;t want it in the header.
&gt; 
&gt; should this be virtual? i don&apos;t see any subclasses or protected members

I&apos;ll just remove the destructor entirely, since its empty anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510168</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 14:19:56 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:43
&gt; &gt;&gt; +    virtual ~CCDamageTracker() { }
&gt; &gt; 
&gt; &gt; please out-of-line this destructor (leave just a declaration here and put the definition in the .cpp), the OwnPtr&lt;HashMap&gt; destructor is pretty darn big and we don&apos;t want it in the header.
&gt; &gt; 
&gt; &gt; should this be virtual? i don&apos;t see any subclasses or protected members
&gt; 
&gt; I&apos;ll just remove the destructor entirely, since its empty anyway.

It actually isn&apos;t empty, running the destructor for this class invokes the destructors for all members including the two OwnPtr&lt;HashMap&lt;...&gt; &gt;&apos;s. These destructors are pretty big so we want them to be compiled in the .cpp instead of in the .h so we don&apos;t get a copy in every translation unit that #includes this file. So please do declare it in the header and define it in the .cpp even though it looks empty. Otherwise the compile and link time overhead just gets crazy (and it&apos;s already pretty bad for WebKit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510229</commentid>
    <comment_count>26</comment_count>
      <attachid>116829</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 14:59:12 -0800</bug_when>
    <thetext>Created attachment 116829
fixed style nits, moved non-virtual destructor to .cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510248</commentid>
    <comment_count>27</comment_count>
      <attachid>116829</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 15:10:29 -0800</bug_when>
    <thetext>Comment on attachment 116829
fixed style nits, moved non-virtual destructor to .cpp

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:42
&gt; +    static WTF::PassOwnPtr&lt;CCDamageTracker&gt; create();

still have a WTF:: here, please remove</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510270</commentid>
    <comment_count>28</comment_count>
      <attachid>116839</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 15:31:13 -0800</bug_when>
    <thetext>Created attachment 116839
oops, removed remaining WTF now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510375</commentid>
    <comment_count>29</comment_count>
      <attachid>116860</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 17:49:19 -0800</bug_when>
    <thetext>Created attachment 116860
previous patch is missing an include, fails commit queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510377</commentid>
    <comment_count>30</comment_count>
      <attachid>116862</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 17:55:48 -0800</bug_when>
    <thetext>Created attachment 116862
remove one more unnecessary include, this time checked that it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510414</commentid>
    <comment_count>31</comment_count>
      <attachid>116862</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 19:34:04 -0800</bug_when>
    <thetext>Comment on attachment 116862
remove one more unnecessary include, this time checked that it compiles

Clearing flags on attachment: 116862

Committed r101318: &lt;http://trac.webkit.org/changeset/101318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510415</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 19:34:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115462</attachid>
            <date>2011-11-16 15:30:11 -0800</date>
            <delta_ts>2011-11-17 22:03:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72520-20111116153010.patch</filename>
            <type>text/plain</type>
            <size>52677</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI4N2VhNzkyNTkyOGQ2
MzE3MzZiMzA5MGY5YjgxMzc0NGM0ODRiOC4uMzgwZmFmZGY4OTk3NWJjZmU1YjQwNDdkMjYyYjRl
OTgxMWQ2Y2MyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5IEBACiAyMDExLTExLTE2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCB3aXRoIG1hbnkgdGVzdHMgY2FzZXMu
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIQUNLWVNjcm9sbEZpeCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFn
ZVRyYWNrZXI6OkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRy
YWNrZXI6OmNvbXB1dGVEYW1hZ2VGb3JOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NE
YW1hZ2VUcmFja2VyOjpjb21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnJlbW92ZVJlY3RGcm9tUHJldmlv
dXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9y
TmV4dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFt
YWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmRE
YW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0Rh
bWFnZVRyYWNrZXI6On5DQ0RhbWFnZVRyYWNrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
ZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6ZGFtYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRh
bWFnZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjp1cGRhdGVE
YW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKToKKworMjAxMS0xMS0xNiAgU2hhd24gU2luZ2ggIDxzaGF3
bnNpbmdoQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIFRyYWNrIHByb3BlcnR5
IGNoYW5nZXMgZm9yIHJlbmRlciBzdXJmYWNlcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTIxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggY2JiODY0ZmNhYjBjMmMwMzBlM2JlYWU1YTliMDNiMWQyNGU4OTJlMC4uNmNmMjcwN2RiMThm
YjI2ZDA5NTljNDE5MTRkYjMxNGY3YjBmNWMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsNSArMSwyMyBAQAogMjAxMS0xMS0xNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIg
Y2xhc3MgdG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpDQ0RhbWFnZVRyYWNrZXJUZXN0OjpleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdURjo6Q0NEYW1hZ2VUcmFja2VyVGVzdDo6cmVz
ZXRVcGRhdGVSZWN0c1JlY3Vyc2l2ZSk6CisgICAgICAgIChXVEY6OkNDRGFtYWdlVHJhY2tlclRl
c3Q6OnJlc2V0RGFtYWdlRm9yRW50aXJlVHJlZSk6CisgICAgICAgIChXVEY6OkNDRGFtYWdlVHJh
Y2tlclRlc3Q6OmVtdWxhdGVSZW5kZXJpbmdGb3JTaW1wbGVUcmVlKToKKyAgICAgICAgKFdURjo6
Q0NEYW1hZ2VUcmFja2VyVGVzdDo6ZW11bGF0ZVJlbmRlcmluZ0ZvckNvbXBsZXhUcmVlKToKKyAg
ICAgICAgKFdURjo6Q0NEYW1hZ2VUcmFja2VyVGVzdDo6c2V0VXBTaW1wbGVMYXllclRyZWUpOgor
ICAgICAgICAoV1RGOjpDQ0RhbWFnZVRyYWNrZXJUZXN0OjpzZXRVcENvbXBsZXhMYXllclRyZWUp
OgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCisyMDExLTExLTE2ICBTaGF3biBTaW5naCAgPHNo
YXduc2luZ2hAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gVHJhY2sgcHJvcGVy
dHkgY2hhbmdlcyBmb3IgcmVuZGVyIHN1cmZhY2VzLgogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MjEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU4MzA2
MWQyYjU5NmY0MTU5ZmE4NzYxNzc5NmUyOTJkM2RmZjcyMjIuLmU5NzczMzYwNTQwMTIxYjNjZmYw
YjQxZDc3MmE0MmJmYTNkMjNhN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NTUsNiArMzU1NSw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2Uu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5
QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDYzYWI1MTUzZjEyYTEwMzBlMzU1MjhlYjQ4MTE3N2UxYzVl
ZWMyMi4uNGExOGM5MzVhOTgxYTYyNTJkMWRlZGJhZTkyZmNiZDUwNmM0M2ZkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zMzIsNiArMzMyLDkgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSkpIHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7
CiAKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNraW5nKQorICAgICAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoKTsK
KwogICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7
CiAgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
YW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI5ZGJhYTFlNzc2Y2M2NDVm
NDk0NTA4ZDMxODJhNWNkZWJkYTk3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAs
MCArMSwyODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IHRoaXMgc2Nyb2xsIGZpeCBpcyBub3QgaW50
ZW5kZWQgdG8ga2VlcCwgYnV0IGlzIHJlcXVpcmVkIHRvIGdldCB0aGUKKy8vICAgICAgICBEYW1h
Z2VUcmFja2VyIHRvIHdvcmsgcHJvcGVybHkgd2hpbGUgd2FpdGluZyBmb3IgTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0CisvLyAgICAgICAgc2Nyb2xsaW5nIHRvIGJlIGZpeGVkLiBPbmNlIHNjcm9s
bGluZyBpcyBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZAorLy8gICAgICAg
IHVzZSB0aGUgb3JpZ2luYWwgcmVjdCBpbiBpdHMgcGxhY2UuCitzdGF0aWMgRmxvYXRSZWN0IEhB
Q0tZU2Nyb2xsRml4KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIEZsb2F0UmVjdCBzY3JvbGxlZFJlY3QgPSByZWN0OworICAgIGlmIChsYXllci0+aXNO
b25Db21wb3NpdGVkQ29udGVudCgpKQorICAgICAgICBzY3JvbGxlZFJlY3QubW92ZSgtbGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAg
ICByZXR1cm4gc2Nyb2xsZWRSZWN0OworfQorCitQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4g
Q0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiBvd25pbmdTdXJmYWNlKQor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NEYW1hZ2VUcmFja2VyKG93bmluZ1N1cmZhY2Up
KTsKK30KKworQ0NEYW1hZ2VUcmFja2VyOjpDQ0RhbWFnZVRyYWNrZXIoQ0NSZW5kZXJTdXJmYWNl
KiBvd25pbmdTdXJmYWNlKQorICAgIDogbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRleCgwKQorICAg
ICwgbV9vd25pbmdTdXJmYWNlKG93bmluZ1N1cmZhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBDQ0Rh
bWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGb3JOZXh0RnJhbWUoKQoreworICAgIC8vCisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgImRhbWFnZSByZWN0IiBvZiB0aGUgb3duaW5n
IHJlbmRlciBzdXJmYWNlLiBUaGUgZGFtYWdlCisgICAgLy8gcmVjdCBpcyB0aGUgcmVnaW9uIG9m
IHRoZSBzdXJmYWNlIHRoYXQgbWF5IGhhdmUgY2hhbmdlZCBhbmQgbmVlZHMgdG8gYmUgcmVkcmF3
bi4KKyAgICAvLyBUaGlzIGNhbiBiZSB1c2VkIHRvIHNjaXNzb3Igd2hhdCBpcyBhY3R1YWxseSBk
cmF3biwgdG8gc2F2ZSBHUFUgY29tcHV0YXRpb24gYW5kCisgICAgLy8gYmFuZHdpZHRoLgorICAg
IC8vCisgICAgLy8gVGhlIHN1cmZhY2UncyBkYW1hZ2UgcmVjdCBpcyBjb21wdXRlZCBhcyB0aGUg
dW5pb24gb2YgYWxsIHBvc3NpYmxlIGNoYW5nZXMgdGhhdAorICAgIC8vIGhhdmUgaGFwcGVuZWQg
dG8gdGhlIHN1cmZhY2Ugc2luY2UgdGhlIGxhc3QgZnJhbWUgd2FzIGRyYXduLiBUaGlzIGluY2x1
ZGVzOgorICAgIC8vICAgLSBhbnkgY2hhbmdlcyBmb3IgZXhpc3RpbmcgbGF5ZXJzL3N1cmZhY2Vz
IHRoYXQgY29udHJpYnV0ZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UKKyAgICAvLyAgIC0gbGF5ZXJz
L3N1cmZhY2VzIHRoYXQgZXhpc3RlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUsIGJ1dCBubyBsb25n
ZXIgZXhpc3QuCisgICAgLy8KKyAgICAvLyBUaGUgYmFzaWMgYWxnb3JpdGhtIGZvciBjb21wdXRp
bmcgdGhlIGRhbWFnZSByZWdpb24gaXMgYXMgZm9sbG93czoKKyAgICAvLworICAgIC8vICAgICAg
IC8vIDEuIGNvbXB1dGUgZGFtYWdlIGNhdXNlZCBieSBjaGFuZ2VzIGluIGFjdGl2ZS9uZXcgbGF5
ZXJzCisgICAgLy8gICAgICAgZm9yIGVhY2ggbGF5ZXIgaW4gdGhlIGxheWVyTGlzdDoKKyAgICAv
LyAgICAgICAgICAgaWYgdGhlIGxheWVyIGlzIGFjdHVhbGx5IGEgcmVuZGVyU3VyZmFjZToKKyAg
ICAvLyAgICAgICAgICAgICAgIGFkZCB0aGUgc3VyZmFjZSdzIGRhbWFnZSB0byBvdXIgdGFyZ2V0
IHN1cmZhY2UuCisgICAgLy8gICAgICAgICAgIGVsc2UKKyAgICAvLyAgICAgICAgICAgICAgIGFk
ZCB0aGUgbGF5ZXIncyBkYW1hZ2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vCisgICAg
Ly8gICAgICAgLy8gMi4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IG9sZCBsYXllcnMvc3VyZmFj
ZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsZWZ0b3ZlciBs
YXllcjoKKyAgICAvLyAgICAgICAgICAgYWRkIHRoZSBvbGQgbGF5ZXIvc3VyZmFjZSBib3VuZHMg
dG8gdGhlIHRhcmdldCBzdXJmYWNlIGRhbWFnZS4KKyAgICAvLworICAgIC8vICAgICAgIC8vIDMu
IGNvbWJpbmUgYm90aCBwYXJ0aWFsIGRhbWFnZSByZWN0cyB0byBnZXQgdGhlIGZ1bGwgZGFtYWdl
IHJlY3QuCisgICAgLy8KKyAgICAvLyBBZGRpdGlvbmFsIGltcG9ydGFudCBwb2ludHM6CisgICAg
Ly8KKyAgICAvLyAtIFRoaXMgYWxnb3JpdGhtIGlzIGltcGxpY2l0bHkgcmVjdXJzaXZlOyBpdCBh
c3N1bWVzIHRoYXQgZGVzY2VuZGFudCBzdXJmYWNlcyBoYXZlCisgICAgLy8gICBhbHJlYWR5IGNv
bXB1dGVkIHRoZWlyIGRhbWFnZS4KKyAgICAvLworICAgIC8vIC0gQ2hhbmdlcyB0byBsYXllcnMv
c3VyZmFjZXMgaW5kaWNhdGUgImRhbWFnZSIgdG8gdGhlIHRhcmdldCBzdXJmYWNlOyBJZiBhIGxh
eWVyIGlzCisgICAgLy8gICBub3QgY2hhbmdlZCwgaXQgZG9lcyBOT1QgbWVhbiB0aGF0IHRoZSBs
YXllciBjYW4gc2tpcCBkcmF3aW5nLiBBbGwgbGF5ZXJzIHRoYXQKKyAgICAvLyAgIG92ZXJsYXAg
dGhlIGRhbWFnZWQgcmVnaW9uIHN0aWxsIG5lZWQgdG8gYmUgZHJhd24uIEZvciBleGFtcGxlLCBp
ZiBhIGxheWVyCisgICAgLy8gICBjaGFuZ2VkIGl0cyBvcGFjaXR5LCB0aGVuIGxheWVycyB1bmRl
cm5lYXRoIG11c3QgYmUgcmUtZHJhd24gYXMgd2VsbCwgZXZlbiBpZgorICAgIC8vICAgdGhleSBk
aWQgbm90IGNoYW5nZS4KKyAgICAvLworICAgIC8vIC0gSWYgYSBsYXllci9zdXJmYWNlIHByb3Bl
cnR5IGNoYW5nZWQsIHRoZSBvbGQgYm91bmRzIGFuZCBuZXcgYm91bmRzIG1heSBvdmVybGFwLi4u
CisgICAgLy8gICBpLmUuIHNvbWUgb2YgdGhlIGV4cG9zZWQgcmVnaW9uIG1heSBub3QgYWN0dWFs
bHkgYmUgZXhwb3NpbmcgYW55dGhpbmcuIEJ1dCB0aGlzCisgICAgLy8gICBkb2VzIG5vdCBhcnRp
ZmljaWFsbHkgaW5mbGF0ZSB0aGUgZGFtYWdlIHJlY3QuIElmIHRoZSBsYXllciBjaGFuZ2VkLCBp
dHMgZW50aXJlCisgICAgLy8gICBvbGQgYm91bmRzIHdvdWxkIGFsd2F5cyBuZWVkIHRvIGJlIHJl
ZHJhd24sIHJlZ2FyZGxlc3Mgb2YgaG93IG11Y2ggaXQgb3ZlcmxhcHMKKyAgICAvLyAgIHdpdGgg
dGhlIGxheWVyJ3MgbmV3IGJvdW5kcywgd2hpY2ggYWxzbyBuZWVkIHRvIGJlIGVudGlyZWx5IHJl
ZHJhd24uCisgICAgLy8KKyAgICAvLyAtIFNlZSBjb21tZW50cyBpbiB0aGUgcmVzdCBvZiB0aGUg
Y29kZSB0byBzZWUgd2hhdCBleGFjdGx5IGlzIGNvbnNpZGVyZWQKKyAgICAvLyAgIGEgImNoYW5n
ZSIgaW4gYSBsYXllci9zdXJmYWNlLgorICAgIC8vCisgICAgLy8gLSBUbyBjb3JyZWN0bHkgbWFu
YWdlIGV4cG9zZWQgcmVjdHMsIHR3byBSZWN0TWFwcyBhcmUgbWFpbnRhaW5lZDoKKyAgICAvLwor
ICAgIC8vICAgICAgMS4gVGhlICJjdXJyZW50IiBtYXAgY29udGFpbnMgYWxsIHRoZSBsYXllciBi
b3VuZHMgdGhhdCBjb250cmlidXRlZCB0byB0aGUKKyAgICAvLyAgICAgICAgIHByZXZpb3VzIGZy
YW1lIChldmVuIG91dHNpZGUgdGhlIHByZXZpb3VzIGRhbWFnZWQgYXJlYSkuIElmIGEgbGF5ZXIg
Y2hhbmdlcworICAgIC8vICAgICAgICAgb3IgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgdGhvc2Ug
cmVnaW9ucyBhcmUgdGhlbiBleHBvc2VkIGFuZCBkYW1hZ2UgdGhlCisgICAgLy8gICAgICAgICB0
YXJnZXQgc3VyZmFjZS4gQXMgdGhlIGFsZ29yaXRobSBwcm9ncmVzc2VzLCBlbnRyaWVzIGFyZSBy
ZW1vdmVkIGZyb20gdGhlCisgICAgLy8gICAgICAgICBtYXAgdW50aWwgaXQgaGFzIG9ubHkgbGVm
dG92ZXIgbGF5ZXJzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LgorICAgIC8vCisgICAgLy8gICAgICAy
LiBUaGUgIm5leHQiIG1hcCBzdGFydHMgb3V0IGVtcHR5LCBhbmQgYXMgdGhlIGFsZ29yaXRobSBw
cm9ncmVzc2VzLCBldmVyeQorICAgIC8vICAgICAgICAgbGF5ZXIvc3VyZmFjZSB0aGF0IGNvbnRy
aWJ1dGVzIHRvIHRoZSBzdXJmYWNlIGlzIGFkZGVkIHRvIHRoZSBtYXAuCisgICAgLy8KKyAgICAv
LyAgICAgIDMuIEFmdGVyIHRoZSBkYW1hZ2UgcmVjdCBpcyBjb21wdXRlZCwgdGhlIHR3byBtYXBz
IGFyZSBzd2FwcGVkLCBzbyB0aGF0IHRoZQorICAgIC8vICAgICAgICAgZGFtYWdlIHRyYWNrZXIg
aXMgcmVhZHkgZm9yIHRoZSBuZXh0IGZyYW1lLgorICAgIC8vCisKKyAgICBGbG9hdFJlY3QgZGFt
YWdlUmVjdCA9IGNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKG1fb3duaW5nU3VyZmFjZSk7
CisgICAgRmxvYXRSZWN0IGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZy
b21MZWZ0b3ZlclJlY3RzKCk7CisgICAgZGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VG
cm9tTGVmdG92ZXJSZWN0cyk7CisKKyAgICAvLyBTd2FwIG5leHQgYW5kIHByZXZpb3VzIGhpc3Rv
cnkgbWFwcywgc2ltcGx5IGJ5IGNoYW5naW5nIHRoZSBpbmRleC4KKyAgICBtX2N1cnJlbnRSZWN0
SGlzdG9yeUluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggKyAxKSAlIDI7CisKKyAg
ICByZXR1cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29t
cHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNl
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICAvLyBO
b3RlIHRoaXMgaXMgYW4gYWxpYXMsIG5vdCBhIGNvcHkuCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0ID0gdGFyZ2V0U3VyZmFjZS0+bGF5ZXJMaXN0KCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJM
aXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9
IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJT
dXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0YXJnZXRTdXJmYWNlKQorICAg
ICAgICAgICAgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShsYXllciwgZGFtYWdlUmVjdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvckxheWVyKGxheWVyLCBk
YW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRS
ZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCkKK3sK
KyAgICAvLyBBZnRlciBjb21wdXRpbmcgZGFtYWdlIGZvciBhbGwgYWN0aXZlIGxheWVycywgYW55
IGxlZnRvdmVyIGl0ZW1zIGluIHRoZSBjdXJyZW50CisgICAgLy8gcmVjdCBoaXN0b3J5IGNvcnJl
c3BvbmQgdG8gbGF5ZXJzL3N1cmZhY2VzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LiBTbywgdGhlc2Ug
cmVnaW9ucworICAgIC8vIGFyZSBub3cgZXhwb3NlZCBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisK
KyAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworICAgIFJlY3RNYXAmIGxl
ZnRvdmVyUmVjdEhpc3RvcnkgPSBtX2xheWVyUmVjdHNIaXN0b3J5W21fY3VycmVudFJlY3RIaXN0
b3J5SW5kZXhdOworCisgICAgZm9yIChSZWN0TWFwOjppdGVyYXRvciBpdCA9IGxlZnRvdmVyUmVj
dEhpc3RvcnkuYmVnaW4oKTsgaXQgIT0gbGVmdG92ZXJSZWN0SGlzdG9yeS5lbmQoKTsgKytpdCkK
KyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKworICAgIGxlZnRvdmVyUmVj
dEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJl
Y3QgQ0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUoaW50IGxheWVy
SUQpCit7CisgICAgUmVjdE1hcCYgY3VycmVudFJlY3RIaXN0b3J5ID0gbV9sYXllclJlY3RzSGlz
dG9yeVttX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKworICAgIC8vIHRha2UoKSB3aWxsIHJl
bW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgbWFwLCBvciBpZiBub3QgZm91bmQsIHJldHVybiBhIGRl
ZmF1bHQgKGVtcHR5KSByZWN0LgorICAgIHJldHVybiBjdXJyZW50UmVjdEhpc3RvcnkudGFrZShs
YXllcklEKTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4dEZyYW1l
KGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFNwYWNlUmVjdCkKK3sKKyAgICBp
bnQgbmV4dE1hcEluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggKyAxKSAlIDI7Cisg
ICAgUmVjdE1hcCYgbmV4dFJlY3RIaXN0b3J5ID0gbV9sYXllclJlY3RzSGlzdG9yeVtuZXh0TWFw
SW5kZXhdOworCisgICAgLy8gVGhpcyBsYXllciBJRCBrZXkgc2hvdWxkIG5vdCB5ZXQgZXhpc3Qg
aW4gbmV4dCBoaXN0b3J5LgorICAgIEFTU0VSVChuZXh0UmVjdEhpc3RvcnkuZmluZChsYXllcklE
KSA9PSBuZXh0UmVjdEhpc3RvcnkuZW5kKCkpOworCisgICAgbmV4dFJlY3RIaXN0b3J5LnNldChs
YXllcklELCB0YXJnZXRTcGFjZVJlY3QpOworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0
ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJlY3QmIHRhcmdldERh
bWFnZVJlY3QpCit7CisgICAgLy8gVGhlcmUgYXJlIHR3byB3YXlzIHRoYXQgYSBsYXllciBjYW4g
ZGFtYWdlIGEgcmVnaW9uIG9mIHRoZSB0YXJnZXQgc3VyZmFjZToKKyAgICAvLyAgIDEuIFByb3Bl
cnR5IGNoYW5nZSAoZS5nLiBvcGFjaXR5LCBwb3NpdGlvbiwgdHJhbnNmb3Jtcyk6CisgICAgLy8g
ICAgICAgIC0gdGhlIGVudGlyZSByZWdpb24gb2YgdGhlIGxheWVyIGl0c2VsZiBkYW1hZ2VzIHRo
ZSBzdXJmYWNlLgorICAgIC8vICAgICAgICAtIHRoZSBvbGQgbGF5ZXIgcmVnaW9uIGFsc28gZGFt
Z2VzIHRoZSBzdXJmYWNlLCBiZWNhdXNlIHRoaXMgcmVnaW9uIGlzIG5vdyBleHBvc2VkLgorICAg
IC8vICAgICAgICAtIG5vdGUgdGhhdCBpbiBtYW55IGNhc2VzIHRoZSBvbGQgYW5kIG5ldyBsYXll
ciByZWN0cyBtYXkgb3ZlcmxhcCwgd2hpY2ggaXMgZmluZS4KKyAgICAvLworICAgIC8vICAgMi4g
UmVwYWludC91cGRhdGU6IElmIGEgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZXBhaW50
ZWQvdXBkYXRlZCwgdGhhdAorICAgIC8vICAgICAgcmVnaW9uIGRhbWFnZXMgdGhlIHN1cmZhY2Uu
CisgICAgLy8KKyAgICAvLyBQcm9wZXJ0eSBjaGFuZ2VzIHRha2UgcHJpb3JpdHkgb3ZlciB1cGRh
dGUgcmVjdHMuCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcmlnaW5UcmFuc2Zvcm0gPSBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIG9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgt
MC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVp
Z2h0KCksIDApOworCisgICAgRmxvYXRSZWN0IG9sZExheWVyUmVjdCA9IHJlbW92ZVJlY3RGcm9t
UHJldmlvdXNGcmFtZShsYXllci0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0SW5U
YXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KEhBQ0tZU2Nyb2xsRml4KGxheWVy
LCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSk7CisgICAg
c2F2ZVJlY3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIGxheWVyUmVjdEluVGFyZ2V0U3BhY2Up
OworCisgICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKSB7CisgICAgICAgIC8v
IElmIGEgbGF5ZXIgaGFzIGNoYW5nZWQsIHRoZW4gaXRzIGVudGlyZSBsYXllciByZWN0IGFmZmVj
dHMgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZO
b25aZXJvKGxheWVyUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAgIC8vIFRoZSBsYXllcidz
IG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLCB0b28uCisg
ICAgICAgIC8vIE5vdGUgb2xkTGF5ZXJSZWN0IGlzIGFscmVhZHkgaW4gdGFyZ2V0IHNwYWNlLgor
ICAgICAgICBpZiAoIW9sZExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0YXJnZXRE
YW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKG9sZExheWVyUmVjdCk7CisKKyAgICB9IGVsc2UgaWYg
KCFsYXllci0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbGF5
ZXIgcHJvcGVydGllcyBoYXZlbnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNl
IGlzIG9ubHkKKyAgICAgICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEs
IHdoaWNoIGNvdWxkIGJlIGVtcHR5LgorICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFy
Z2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwg
bGF5ZXItPnVwZGF0ZVJlY3QoKSkpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZO
b25aZXJvKHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NEYW1h
Z2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXll
ciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJlIGFyZSB0d28g
d2F5cyBhICJkZXNjZW5kYW50IHN1cmZhY2UiIGNhbiBkYW1hZ2UgcmVnaW9ucyBvZiB0aGUgInRh
cmdldCBzdXJmYWNlIjoKKyAgICAvLyAgIDEuIFByb3BlcnR5IGNoYW5nZToKKyAgICAvLyAgICAg
ICAgLSBhIHN1cmZhY2UncyBnZW9tZXRyeSBjYW4gY2hhbmdlIGJlY2F1c2Ugb2YKKyAgICAvLyAg
ICAgICAgICAgIC0gY2hhbmdlcyB0byBkZXNjZW5kYW50cyAoaS5lLiB0aGUgc3VidHJlZSkgdGhh
dCBhZmZlY3QgdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3QKKyAgICAvLyAgICAgICAgICAgIC0g
Y2hhbmdlcyB0byBhbmNlc3RvciBsYXllcnMgdGhhdCBwcm9wYWdhdGUgdGhlaXIgcHJvcGVydHkg
Y2hhbmdlcyB0byB0aGVpciBlbnRpcmUgc3VidHJlZS4KKyAgICAvLyAgICAgICAgLSBqdXN0IGxp
a2UgbGF5ZXJzLCBib3RoIHRoZSBvbGQgc3VyZmFjZSByZWN0IGFuZCBuZXcgc3VyZmFjZSByZWN0
IHdpbGwKKyAgICAvLyAgICAgICAgICBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlIGluIHRoaXMg
Y2FzZS4KKyAgICAvLworICAgIC8vICAgMi4gRGFtYWdlIHJlY3Q6IFRoaXMgc3VyZmFjZSBtYXkg
aGF2ZSBiZWVuIGRhbWFnZWQgYnkgaXRzIG93biBsYXllckxpc3QgYXMgd2VsbCwgYW5kIHRoYXQg
ZGFtYWdlCisgICAgLy8gICAgICBzaG91bGQgcHJvcGFnYXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFj
ZS4KKyAgICAvLworCisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKKworICAgIEZsb2F0UmVjdCBvbGRTdXJmYWNlUmVjdCA9IHJlbW92
ZVJlY3RGcm9tUHJldmlvdXNGcmFtZShsYXllci0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgc3Vy
ZmFjZVJlY3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVj
dCgpOworICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNlUmVjdElu
VGFyZ2V0U3BhY2UpOworCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7Cisg
ICAgaWYgKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAg
ICAvLyBUaGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgorICAgICAgICBkYW1h
Z2VSZWN0SW5Mb2NhbFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKworICAg
ICAgICAvLyBUaGUgc3VyZmFjZSdzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRh
cmdldCBzdXJmYWNlLCB0b28uCisgICAgICAgIGlmICghb2xkU3VyZmFjZVJlY3QuaXNFbXB0eSgp
KQorICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRTdXJmYWNl
UmVjdCk7CisKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJTdXJmYWNlLT5kYW1hZ2VSZWN0KCkuaXNF
bXB0eSgpKQorICAgICAgICAvLyBPbmx5IHRoZSBzdXJmYWNlJ3MgZGFtYWdlUmVjdCB3aWxsIGRh
bWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAgIGRhbWFnZVJlY3RJbkxvY2FsU3BhY2Ug
PSByZW5kZXJTdXJmYWNlLT5kYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFt
YWdlLCB0cmFuc2Zvcm0gaXQgdG8gdGFyZ2V0IHNwYWNlLCBhbmQgcG9zc2libHkgY29udHJpYnV0
ZSBpdHMgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgaWYgKCFkYW1hZ2VSZWN0SW5Mb2NhbFNw
YWNlLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3Jp
Z2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBS
ZWN0KGRhbWFnZVJlY3RJbkxvY2FsU3BhY2UpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVu
aXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJh
bnNmb3JtKCk7CisgICAgICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNk
KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5z
Zm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLWxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIC1sYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9u
KCkueSgpLCAwKTsKKworICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGxpY2FEYW1hZ2VSZWN0ID0g
cmVwbGljYU9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3RJbkxvY2FsU3BhY2UpOwor
ICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhRGFtYWdl
UmVjdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM2OTFmMTYzYWIwMjQ1NGNjYzA3NTRiMjRiN2I0YzlmZmM0
ZjRjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDRGFtYWdlVHJhY2tlcl9oCisjZGVmaW5lIENDRGFtYWdlVHJhY2tlcl9oCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1w
bDsKK2NsYXNzIENDUmVuZGVyU3VyZmFjZTsKKworLy8gQ29tcHV0ZXMgdGhlIHJlZ2lvbiB3aGVy
ZSBwaXhlbHMgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkIG9uIGEgUmVuZGVyU3VyZmFjZS4gVGhpcyBy
ZWdpb24gaXMgdXNlZAorLy8gdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXduIHRvIHRo
ZSBzY3JlZW4gdG8gc2F2ZSBHUFUgY29tcHV0YXRpb24gYW5kIGJhbmR3aWR0aC4KK2NsYXNzIEND
RGFtYWdlVHJhY2tlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFdURjo6UGFzc093blB0cjxDQ0Rh
bWFnZVRyYWNrZXI+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIG93bmluZ1N1cmZhY2UpOworICAg
IHZpcnR1YWwgfkNDRGFtYWdlVHJhY2tlcigpIHsgfQorCisgICAgRmxvYXRSZWN0IGNvbXB1dGVE
YW1hZ2VGb3JOZXh0RnJhbWUoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ0RhbWFnZVRy
YWNrZXIoQ0NSZW5kZXJTdXJmYWNlKiBvd25pbmdTdXJmYWNlKTsKKworICAgIEZsb2F0UmVjdCBj
b21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBGbG9h
dFJlY3QgY29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7CisKKyAgICAvLyBUaGVzZSBo
ZWxwZXIgZnVuY3Rpb25zIGFyZSB1c2VkIG9ubHkgaW4gY29tcHV0ZURhbWFnZUZyb21BY3RpdmVM
YXllcnMoKS4KKyAgICB2b2lkIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGNvbnN0IGludCBsYXllcklE
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFNwYWNlUmVjdCk7CisgICAgRmxvYXRSZWN0IHJlbW92
ZVJlY3RGcm9tUHJldmlvdXNGcmFtZShjb25zdCBpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBleHRl
bmREYW1hZ2VGb3JMYXllcihDQ0xheWVySW1wbCosIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVj
dCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwg
RmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsKKworICAgIC8vIFRvIGNvcnJlY3RseSB0cmFj
ayBleHBvc2VkIHJlZ2lvbnMsIHR3byBoYXNodGFibGVzIG9mIHJlY3RzIGFyZSBtYWludGFpbmVk
LgorICAgIC8vIFRoZSAiY3VycmVudCIgbWFwIGlzIHVzZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJl
Z2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWxlCisgICAgLy8gdGhlICJuZXh0IiBtYXAg
aXMgdXNlZCB0byBjb2xsZWN0IGxheWVyIHJlY3RzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIG5leHQg
ZnJhbWUuCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRmxvYXRSZWN0PiBSZWN0TWFwOworICAg
IFJlY3RNYXAgbV9sYXllclJlY3RzSGlzdG9yeVsyXTsKKyAgICBpbnQgbV9jdXJyZW50UmVjdEhp
c3RvcnlJbmRleDsKKworICAgIENDUmVuZGVyU3VyZmFjZSogbV9vd25pbmdTdXJmYWNlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NEYW1hZ2VUcmFja2VyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZDgxNDE0OWM1NGIwNTNlY2VhNmZjYWUw
NTYyNDQ0OGRkMzExZDkxMS4uOGRhNmVmYmJmYjMxYjNiMmVhOTZjODhhZmI1ZjQwYzI5M2FmNTFk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTczLDEzICs3MywxNSBAQCBzdHJ1
Y3QgQ0NTZXR0aW5ncyB7CiAgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVlbihmYWxzZSkK
ICAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkKICAgICAgICAgICAg
ICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCi0gICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVy
VHJlZShmYWxzZSkgeyB9CisgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxz
ZSkKKyAgICAgICAgICAgICwgdXNlRGFtYWdlVHJhY2tpbmcoZmFsc2UpIHsgfQogCiAgICAgYm9v
bCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CiAgICAg
Ym9vbCBlbmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAg
ICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CisgICAgYm9vbCB1c2VEYW1hZ2VUcmFja2lu
ZzsKIH07CiAKIC8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGFuIEltcGwncyByZW5kZXJpbmcg
Y2FwYWJpbGl0aWVzIGJhY2sgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKaW5kZXggY2IzOGZhODYwY2U3YjdjOGFhMmZjMWI3MTg5Mjg1MGU1ZGFj
NTFiZC4uMzgxODMxZGJiMzRjZjI2Mjg4MmQ0MmI4ZGI2MmE2YTE4Y2QxMzlhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC00Niw2ICs0Niw3IEBAIENDUmVuZGVyU3VyZmFj
ZTo6Q0NSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBvd25pbmdMYXllcikKICAgICAsIG1fc3Vy
ZmFjZVByb3BlcnR5Q2hhbmdlZChmYWxzZSkKICAgICAsIG1fZHJhd09wYWNpdHkoMSkKIHsKKyAg
ICBtX2RhbWFnZVRyYWNrZXIgPSBDQ0RhbWFnZVRyYWNrZXI6OmNyZWF0ZSh0aGlzKTsKIH0KIAog
Q0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmgKaW5kZXggNGJkNGFmODU4MTk0MjY4Y2YwYzg1ZDNhNmEwZDJkNDA5ZTBlYmNkOC4uZmQx
N2VmN2IxZDczM2E1ZjgyNzhlMmIwMTdhYjQyNmEzZDgzMWE3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyUXVhZC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0xMDEsNiAr
MTAyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZygpIHsg
bV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29sIHN1cmZhY2VQcm9w
ZXJ0eUNoYW5nZWQoKSBjb25zdDsKIAorICAgIGNvbnN0IEZsb2F0UmVjdCYgZGFtYWdlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlUmVjdDsgfQorICAgIENDRGFtYWdlVHJhY2tlciogZGFt
YWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQorICAg
IHZvaWQgdXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSgpIHsgbV9kYW1hZ2VSZWN0ID0gbV9k
YW1hZ2VUcmFja2VyLT5jb21wdXRlRGFtYWdlRm9yTmV4dEZyYW1lKCk7IH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CkBA
IC0xMjAsNiArMTI1LDExIEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9v
cmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7CisKKyAgICBPd25QdHI8Q0NEYW1hZ2VUcmFj
a2VyPiBtX2RhbWFnZVRyYWNrZXI7CisKKyAgICAvLyBTdG9yZWQgaW4gdGhlICJzdXJmYWNlIHNw
YWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Npc3NvcmluZy4KKyAgICBG
bG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKaW5kZXggZDIzYTM5NDI0OWRkYzkxNTkyZTM0ZGQ5N2I5MmE5NWI5MjQ0MWE1YS4uNDc0OTc3
MzE4MjE4NDkxNDFkMWNjMDAxZmRkOWM0N2QwZjYwN2NmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmls
ZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAg
ICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rl
c3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5
QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRl
Q29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VU
cmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJh
Y2tlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzNTYwMGE4NjlkZmUyYzMzMzY1Y2RjNWEwM2ZhN2Vl
OTNmNjQwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC0wLDAgKzEsNTYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRl
ci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSB7
CisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0
IG1vcmUgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gRklYTUU6
IHRoaXMgbWFjcm8gaXMgcmVkdW5kYW50IHdpdGggYSBmdW5jdGlvbiBmcm9tIExheWVyQ2hyb21p
dW1UZXN0LgorI2RlZmluZSBWRVJJRllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKGV4cGVjdGVk
LCBhY3R1YWwpICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7IFwKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55
KCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChh
Y3R1YWwpLnNpemUoKS53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCitjbGFzcyBDQ0Rh
bWFnZVRyYWNrZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIC8v
IEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIHJlZHVuZGFudCB3aXRoIHNpbWlsYXIgY29kZSBmcm9t
IENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuCisgICAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiByb290KQorICAgIHsKKyAgICAg
ICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4g
ZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgICAgICBWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+IGR1bW15TGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKyAgICAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgp
OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRl
ciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNldFVwZGF0ZVJl
Y3RzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBsYXllcikKKyAgICB7CisgICAgICAgIGxheWVyLT5z
ZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
YXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc2V0VXBkYXRlUmVj
dHNSZWN1cnNpdmUobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgIH0KKworICAgIHZv
aWQgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKENDTGF5ZXJJbXBsKiByb290KQorICAgIHsKKyAg
ICAgICAgLy8gVGhpcyBlbXVsYXRlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlbmRlcmVyOyBldmVy
eSBuZXcgZnJhbWUgc3RhcnRzIG91dCBieQorICAgICAgICAvLyBhc3N1bWluZyB0aGF0IGFsbCBs
YXllcnMgYXJlIHVuZGFtYWdlZC91bmNoYW5nZWQsIHVudGlsIHdlIGV4cGxpY2l0bHkKKyAgICAg
ICAgLy8gZGFtYWdlL2NoYW5nZSBpdC4KKyAgICAgICAgcmVzZXRVcGRhdGVSZWN0c1JlY3Vyc2l2
ZShyb290KTsKKyAgICAgICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJl
ZSgpOworICAgIH0KKworICAgIHZvaWQgZW11bGF0ZVJlbmRlcmluZ0ZvclNpbXBsZVRyZWUoQ0NM
YXllckltcGwqIHJvb3QsIEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCisgICAgeworICAgICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QpOworCisg
ICAgICAgIENDRGFtYWdlVHJhY2tlciogcm9vdERhbWFnZVRyYWNrZXIgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKyAgICAgICAgcm9vdERhbWFnZVJlY3QgPSByb290
RGFtYWdlVHJhY2tlci0+Y29tcHV0ZURhbWFnZUZvck5leHRGcmFtZSgpOworICAgIH0KKworICAg
IHZvaWQgZW11bGF0ZVJlbmRlcmluZ0ZvckNvbXBsZXhUcmVlKENDTGF5ZXJJbXBsKiByb290LCBG
bG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0LCBGbG9hdFJlY3QmIGNoaWxkRGFtYWdlUmVjdCkKKyAg
ICB7CisgICAgICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdCk7CisKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGls
ZHJlbigpWzBdOworCisgICAgICAgIC8vIE1vc3QgbGlrZWx5IGFuIGVycm9yIHdpdGggdGhlIHRl
c3QgY29kZSBpZiB0aGlzIGZhaWxzLgorICAgICAgICBBU1NFUlRfVFJVRShjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICAgICAgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPnVwZGF0ZURh
bWFnZVJlY3RGb3JOZXh0RnJhbWUoKTsKKyAgICAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVJlY3QoKTsKKyAgICAgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y29tcHV0ZURhbWFnZUZv
ck5leHRGcmFtZSgpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHNldFVw
U2ltcGxlTGF5ZXJUcmVlKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBzaW1wbGUgdGVzdCB0cmVl
IGhhcyBvbmx5IG9uZSByZW5kZXIgc3VyZmFjZSwgYXNzb2NpYXRlZCB3aXRoIHRoZSByb290Lgor
CisgICAgICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSk7CisgICAgICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworCisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZikpOworICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSg1MDAsIDUwMCkpOworICAgICAg
ICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoNTAwLjBmLCA1MDAuMGYpKSk7CisKKyAgICAg
ICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLjBmLCAxMDAuMGYpKTsKKyAgICAg
ICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDMwLCAzMCkpOworICAgICAgICBjaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisKKyAg
ICAgICAgLy8gVGhlIGZpcnN0IHNldHVwIHNob3VsZCBjYXVzZSBldmVyeXRoaW5nIHRvIGJlIGRh
bWFnZWQgYmVjYXVzZSBhbGwgbGF5ZXJzIGhhZCBjaGFuZ2VzIHRvIHRoZWlyIHByb3BlcnRpZXMu
CisgICAgICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0OworICAgICAgICBlbXVsYXRlUmVuZGVyaW5n
Rm9yU2ltcGxlVHJlZShyb290LmdldCgpLCBkYW1hZ2VSZWN0KTsKKworICAgICAgICAvLyBTYW5p
dHkgY2hlY2ssIG1ha2Ugc3VyZSB0aGF0IGJvdGggbGF5ZXJzIGFyZSBsaXN0ZWQgb24gdGhlIHJv
b3QncyByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgRVhQRUNUX0VRKDIsIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAg
ICAgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QoLTI1MC4wZiwg
LTI1MC4wZiwgNTAwLjBmLCA1MDAuMGYpLCBkYW1hZ2VSZWN0KTsKKworICAgICAgICByZXR1cm4g
cm9vdC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc2V0
VXBDb21wbGV4TGF5ZXJUcmVlKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHRlc3Qg
dHJlZSBoYXMgdHdvIHJlbmRlciBzdXJmYWNlczogb25lIGZvciB0aGUgcm9vdCwgYW5kIG9uZSBm
b3IKKyAgICAgICAgLy8gY2hpbGQxLiBBZGRpdGlvbmFsbHksIHRoZSByb290IGhhcyBhIHNlY29u
ZCBjaGlsZCBsYXllciwgYW5kIGNoaWxkMSBoYXMgdHdvCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGl0cyBvd24uCisKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgxKTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDIpOworICAgICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3Jh
bmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAgICAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg1KTsKKworICAgICAgICBy
b290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAuMGYsIDAuMGYpKTsKKyAgICAgICAgcm9vdC0+
c2V0Qm91bmRzKEludFNpemUoNTAwLCA1MDApKTsKKyAgICAgICAgcm9vdC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgICAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKDUwMC4wZiwgNTAwLjBmKSkpOworCisgICAgICAgIGNoaWxkMS0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgxMDAuMGYsIDEwMC4wZikpOworICAgICAgICBjaGlsZDEtPnNldEJvdW5k
cyhJbnRTaXplKDMwLCAzMCkpOworICAgICAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41Zik7IC8v
IHdpdGggYSBjaGlsZCB0aGF0IGRyYXdzQ29udGVudCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBsYXll
ciB0byBjcmVhdGUgaXRzIG93biByZW5kZXJTdXJmYWNlLgorICAgICAgICBjaGlsZDEtPnNldERy
YXdzQ29udGVudChmYWxzZSk7IC8vIHRoaXMgbGF5ZXIgZG9lcyBub3QgZHJhdywgYnV0IGlzIGlu
dGVuZGVkIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisKKyAgICAgICAgY2hpbGQy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDExLjBmLCAxMS4wZikpOworICAgICAgICBjaGlsZDIt
PnNldEJvdW5kcyhJbnRTaXplKDE4LCAxOCkpOworICAgICAgICBjaGlsZDItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKworICAgICAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgyMDAuMGYsIDIwMC4wZikpOworICAgICAgICBncmFuZENoaWxkMS0+c2V0Qm91bmRzKEludFNp
emUoNiwgOCkpOworICAgICAgICBncmFuZENoaWxkMS0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
CisgICAgICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE5MC4wZiwgMTkw
LjBmKSk7CisgICAgICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7Cisg
ICAgICAgIGdyYW5kQ2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgY2hp
bGQxLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3Jh
bmRDaGlsZDIpOworICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDEpOworICAgICAgICByb290
LT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsK
KyAgICAgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKworICAgICAgICAvLyBUaGUgZmly
c3Qgc2V0dXAgc2hvdWxkIGNhdXNlIGV2ZXJ5dGhpbmcgb24gYm90aCBzdXJmYWNlcyB0byBiZSBk
YW1hZ2VkIGJlY2F1c2UgYWxsIGxheWVycyBoYWQgcHJvcGVydGllcyBjaGFuZ2VkLgorICAgICAg
ICBlbXVsYXRlUmVuZGVyaW5nRm9yQ29tcGxleFRyZWUocm9vdC5nZXQoKSwgcm9vdERhbWFnZVJl
Y3QsIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAgICAgLy8gU2FuaXR5IGNoZWNrLCBtYWtlIHN1
cmUgdGhhdCB0aGUgZXhwZWN0ZWQgbGF5ZXJMaXN0cyBhcmUgc2V0IHVwLgorICAgICAgICBFWFBF
Q1RfVFJVRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShj
aGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEVYUEVDVF9FUSgzLCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBj
aGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgICAgICAv
LyBUaGUgcmVuZGVyIHN1cmZhY2UgZm9yIGNoaWxkMSBvbmx5IGhhcyBhIGNvbnRlbnRSZWN0IHRo
YXQgZW5jbG9zZXMgZ3JhbmRDaGlsZDEgYW5kIGdyYW5kQ2hpbGQyLCBiZWNhdXNlIGNoaWxkMSBk
b2VzIG5vdCBkcmF3IGNvbnRlbnQuCisgICAgICAgIFZFUklGWV9GTE9BVF9SRUNUU19BTE1PU1Rf
RVFVQUwoRmxvYXRSZWN0KDE4Ny4wZiwgMTg2LjBmLCAxNi4wZiwgMTguMGYpLCBjaGlsZERhbWFn
ZVJlY3QpOworICAgICAgICBWRVJJRllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKEZsb2F0UmVj
dCgtMjUwLjBmLCAtMjUwLjBmLCA1MDAuMGYsIDUwMC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKwor
ICAgICAgICByZXR1cm4gcm9vdC5yZWxlYXNlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8v
IEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBmYWtlIHRoYXQgd2UgYXJlIG9uIHRoZSBpbXBsIHRocmVh
ZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2V0SW1wbFRocmVhZDsKK307CisKK1RF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBzZXRVcFNpbXBsZUxheWVyVHJlZSgpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBTZXR0aW5nIHRoZSB1cGRh
dGUgcmVjdCBzaG91bGQgY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRvIHRoZSBzdXJm
YWNlLgorICAgIC8vCisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3QuZ2V0KCkpOwor
ICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBmLCAx
My4wZikpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JTaW1wbGVUcmVlKHJvb3QuZ2V0KCksIGRh
bWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNob3VsZCBiZTogcG9zaXRpb24g
b2YgdXBkYXRlUmVjdCAoMTAsIDExKSBwbHVzIHBvc2l0aW9uIG9mIGNoaWxkIChsYXllclBvcyAt
IDAuNSBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ugc3BhY2UgKC0wLjUgc3VyZmFj
ZVdpZHRoKS4KKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFnZVggPSAxMC4wZiArIDEwMC4wZiAt
IDE1LjBmIC0gMjUwLjBmOworICAgIGZsb2F0IHRhcmdldFNwYWNlRGFtYWdlWSA9IDExLjBmICsg
MTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9F
UVVBTChGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFnZVksIDEy
LjBmLCAxMy4wZiksIGRhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBUaGUgc2FtZSB1cGRh
dGUgcmVjdCB0d2ljZSBpbiBhIHJvdyBzdGlsbCBwcm9kdWNlcyB0aGUgc2FtZSBkYW1hZ2UuCisg
ICAgLy8KKyAgICByZXNldERhbWFnZUZvckVudGlyZVRyZWUocm9vdC5nZXQoKSk7CisgICAgY2hp
bGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLjBmLCAxMS4wZiwgMTIuMGYsIDEzLjBmKSk7
CisgICAgZW11bGF0ZVJlbmRlcmluZ0ZvclNpbXBsZVRyZWUocm9vdC5nZXQoKSwgZGFtYWdlUmVj
dCk7CisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QodGFyZ2V0
U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFnZVksIDEyLjBmLCAxMy4wZiksIGRhbWFnZVJl
Y3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0aW5nIGEgZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNo
b3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5ldyB1cGRhdGUgcmVnaW9uLCBidXQgbm8gYWRkaXRp
b25hbCBleHBvc2VkIG9sZCByZWdpb24uCisgICAgLy8KKyAgICByZXNldERhbWFnZUZvckVudGly
ZVRyZWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDIw
LjBmLCAyNS4wZiwgMS4wZiwgMi4wZikpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JTaW1wbGVU
cmVlKHJvb3QuZ2V0KCksIGRhbWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNo
b3VsZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAoMjAsIDI1KSBwbHVzIHBvc2l0aW9uIG9m
IGNoaWxkIChsYXllclBvcyAtIDAuNSBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ug
c3BhY2UgKC0wLjUgc3VyZmFjZVdpZHRoKS4KKyAgICB0YXJnZXRTcGFjZURhbWFnZVggPSAyMC4w
ZiArIDEwMC4wZiAtIDE1LjBmIC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDI1
LjBmICsgMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FM
TU9TVF9FUVVBTChGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFn
ZVksIDEuMGYsIDIuMGYpLCBkYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdlcykKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBzZXRVcFNpbXBsZUxheWVyVHJlZSgpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBkYW1h
Z2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBUaGUgbGF5ZXIncyBwcm9wZXJ0eSBjaGFuZ2VkIGZs
YWcgdGFrZXMgcHJpb3JpdHkgb3ZlciB1cGRhdGUgcmVjdC4KKyAgICAvLworICAgIHJlc2V0RGFt
YWdlRm9yRW50aXJlVHJlZShyb290LmdldCgpKTsKKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChG
bG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYpKTsKKyAgICBjaGlsZC0+c2V0T3Bh
Y2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlUmVuZGVyaW5nRm9yU2ltcGxlVHJlZShyb290LmdldCgp
LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIFNhbml0eSBjaGVjayAtIHdlIHNob3VsZCBub3QgaGF2
ZSBhY2NpZGVudGFsbHkgY3JlYXRlZCBhIHNlcGFyYXRlIHJlbmRlciBzdXJmYWNlIGZvciB0aGUg
dHJhbnNsdWNlbnQgbGF5ZXIuCisgICAgQVNTRVJUX0VRKDIsIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIERhbWFnZSBwb3NpdGlvbiBzaG91bGQg
YmU6IHBvc2l0aW9uIG9mIGNoaWxkIChsYXllclBvcyAtIDAuNSAqIGxheWVyV2lkdGgpIHRyYW5z
bGF0ZWQgdG8gc3VyZmFjZSBzcGFjZSAoLSAwLjUgKiBzdXJmYWNlV2lkdGgpLgorICAgIGZsb2F0
IHRhcmdldFNwYWNlRGFtYWdlWCA9IDEwMC4wZiAtIDE1LjBmIC0gMjUwLjBmOworICAgIGZsb2F0
IHRhcmdldFNwYWNlRGFtYWdlWSA9IDEwMC4wZiAtIDE1LjBmIC0gMjUwLjBmOworICAgIEZsb2F0
UmVjdCBleHBlY3RlZFJlY3QgPSBGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRT
cGFjZURhbWFnZVksIDMwLjBmLCAzMC4wZik7CisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9T
VF9FUVVBTChleHBlY3RlZFJlY3QsIGRhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiBh
IGxheWVyIG1vdmVzIGR1ZSB0byBwcm9wZXJ0eSBjaGFuZ2UsIGl0IGRhbWFnZXMgYm90aCB0aGUg
bmV3IGxvY2F0aW9uCisgICAgLy8gICAgICAgICBhbmQgdGhlIG9sZCAoZXhwb3NlZCkgbG9jYXRp
b24uIFRoZSBvbGQgbG9jYXRpb24gaXMgdGhlIGVudGlyZSBvbGQgbGF5ZXIsCisgICAgLy8gICAg
ICAgICBub3QganVzdCB0aGUgdXBkYXRlUmVjdC4KKworICAgIC8vIEZpcnN0LCBkbyBvbmUgZnJh
bWUgd2hlcmUgb25seSB0aGUgdXBkYXRlIHJlY3QgY2F1c2VzIGRhbWFnZS4KKyAgICByZXNldERh
bWFnZUZvckVudGlyZVRyZWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3Qo
RmxvYXRSZWN0KDIwLjBmLCAyNS4wZiwgMS4wZiwgMi4wZikpOworICAgIGVtdWxhdGVSZW5kZXJp
bmdGb3JTaW1wbGVUcmVlKHJvb3QuZ2V0KCksIGRhbWFnZVJlY3QpOworCisgICAgLy8gVGhlbiwg
dGVzdCB0aGUgYWN0dWFsIGxheWVyIG1vdmVtZW50LgorICAgIHJlc2V0RGFtYWdlRm9yRW50aXJl
VHJlZShyb290LmdldCgpKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAu
MGYsIDIzMC4wZikpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JTaW1wbGVUcmVlKHJvb3QuZ2V0
KCksIGRhbWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNob3VsZCBiZTogcG9z
aXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41ICogbGF5ZXJXaWR0aCkgdHJhbnNsYXRlZCB0
byBzdXJmYWNlIHNwYWNlICgtMC41ICogc3VyZmFjZVdpZHRoKS4KKyAgICB0YXJnZXRTcGFjZURh
bWFnZVggPSAyMDAuMGYgLSAxNS4wZiAtIDI1MC4wZjsKKyAgICB0YXJnZXRTcGFjZURhbWFnZVkg
PSAyMzAuMGYgLSAxNS4wZiAtIDI1MC4wZjsKKworICAgIC8vIEV4cGVjdCBkYW1hZ2UgdG8gYmUg
dGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91cyBvbmUgYW5kIHRoZSBuZXcgb25lLgorICAg
IGV4cGVjdGVkUmVjdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VY
LCB0YXJnZXRTcGFjZURhbWFnZVksIDMwLjBmLCAzMC4wZikpOworICAgIFZFUklGWV9GTE9BVF9S
RUNUU19BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZWN0LCBkYW1hZ2VSZWN0KTsKK30KKworVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nTGF5
ZXIpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gc2V0VXBTaW1wbGVMYXllclRy
ZWUoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClb
MF07CisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3Q7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDQwMC4wZiwgMzgwLjBmKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50
U2l6ZSg2LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAv
LyBDQVNFIDE6IEFkZGluZyBhIG5ldyBsYXllciBzaG91bGQgY2F1c2UgdGhlIGFwcHJvcHJpYXRl
IGRhbWFnZS4KKyAgICAvLworICAgIHJlc2V0RGFtYWdlRm9yRW50aXJlVHJlZShyb290LmdldCgp
KTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JT
aW1wbGVUcmVlKHJvb3QuZ2V0KCksIGRhbWFnZVJlY3QpOworCisgICAgLy8gU2FuaXR5IGNoZWNr
IC0gYWxsIDMgbGF5ZXJzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSByZW5kZXIgc3VyZmFjZTsgcmVu
ZGVyIHN1cmZhY2VzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgorICAgIEFTU0VSVF9FUSgzLCByb290
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICBGbG9hdFJlY3Qg
ZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KDQwMC4wZiAtIDMuMGYgLSAyNTAuMGYsIDM4MC4wZiAt
IDQuMGYgLSAyNTAuMGYsIDYuMGYsIDguMGYpOworICAgIFZFUklGWV9GTE9BVF9SRUNUU19BTE1P
U1RfRVFVQUwoZXhwZWN0ZWRSZWN0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogSWYg
dGhlIGxheWVyIGlzIHJlbW92ZWQsIGl0cyBlbnRpcmUgb2xkIGxheWVyIGJlY29tZXMgZXhwb3Nl
ZCwgbm90IGp1c3QgdGhlCisgICAgLy8gICAgICAgICBsYXN0IHVwZGF0ZSByZWN0LgorCisgICAg
Ly8gRmlyc3QsIGRvIG9uZSBmcmFtZSB3aGVyZSBvbmx5IHRoZSB1cGRhdGUgcmVjdCBjYXVzZXMg
ZGFtYWdlLgorICAgIHJlc2V0RGFtYWdlRm9yRW50aXJlVHJlZShyb290LmdldCgpKTsKKyAgICBj
aGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEuMGYsIDIuMGYsIDMuMGYsIDQuMGYpKTsK
KyAgICBlbXVsYXRlUmVuZGVyaW5nRm9yU2ltcGxlVHJlZShyb290LmdldCgpLCBkYW1hZ2VSZWN0
KTsKKworICAgIC8vIFRoZW4sIHRlc3QgbGF5ZXIgcmVtb3ZhbAorICAgIHJlc2V0RGFtYWdlRm9y
RW50aXJlVHJlZShyb290LmdldCgpKTsKKyAgICBjaGlsZDEtPnJlbW92ZUZyb21QYXJlbnQoKTsK
KyAgICBlbXVsYXRlUmVuZGVyaW5nRm9yU2ltcGxlVHJlZShyb290LmdldCgpLCBkYW1hZ2VSZWN0
KTsKKyAgICBWRVJJRllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKEZsb2F0UmVjdCgtMTY1LjBm
LCAtMTY1LjBmLCAzMC4wZiwgMzAuMGYpLCBkYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck11bHRpcGxlTGF5ZXJzKQoreworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IHNldFVwU2ltcGxlTGF5ZXJUcmVlKCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0
UmVjdCBkYW1hZ2VSZWN0OworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0
MDAuMGYsIDM4MC4wZikpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOwor
ICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNo
aWxkMik7CisKKyAgICAvLyBEYW1hZ2luZyB0d28gbGF5ZXJzIHNpbXVsdGFuZW91c2x5IHNob3Vs
ZCBjYXVzZSBjb21iaW5lZCBkYW1hZ2UuCisgICAgLy8gLSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4g
c3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KC0xNjUuMGYsIC0xNjUuMGYsIDEuMGYsIDIuMGYpOwor
ICAgIC8vIC0gY2hpbGQyIHVwZGF0ZSByZWN0IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgg
MTQ3LjBmLCAxMjYuMGYsIDMuMGYsIDQuMGYpOworICAgIHJlc2V0RGFtYWdlRm9yRW50aXJlVHJl
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDEuMGYsIDIuMGYpKTsKKyAgICBjaGlsZDItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIDMuMGYsIDQuMGYpKTsKKyAgICBlbXVsYXRlUmVuZGVyaW5nRm9yU2ltcGxl
VHJlZShyb290LmdldCgpLCBkYW1hZ2VSZWN0KTsKKyAgICBWRVJJRllfRkxPQVRfUkVDVFNfQUxN
T1NUX0VRVUFMKEZsb2F0UmVjdCgtMTY1LjBmLCAtMTY1LjBmLCAzMTUuMGYsIDI5NS4wZiksIGRh
bWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdl
Rm9yTmVzdGVkU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gc2V0
VXBDb21wbGV4TGF5ZXJUcmVlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBy
b290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gcm9v
dC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0g
cm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGRE
YW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIC8vIENBU0Ug
MTogRGFtYWdlIHRvIGEgZGVzY2VuZGFudCBzdXJmYWNlIHNob3VsZCBwcm9wYWdhdGUgcHJvcGVy
bHkgdG8gYW5jZXN0b3Igc3VyZmFjZS4KKyAgICAvLworICAgIHJlc2V0RGFtYWdlRm9yRW50aXJl
VHJlZShyb290LmdldCgpKTsKKyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAg
ICBlbXVsYXRlUmVuZGVyaW5nRm9yQ29tcGxleFRyZWUocm9vdC5nZXQoKSwgcm9vdERhbWFnZVJl
Y3QsIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBkYW1hZ2UgdG8gdGhlIGNoaWxkMSBzdXJm
YWNlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgY2FzZSBkdXJpbmcgc2V0dXAu
CisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QoMTk3LjBmLCAx
OTYuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gcmVjYWxsIHRo
YXQgZGFtYWdlIGlzIHNwZWNpZmllZCBpbiB0aGUgc3BhY2Ugd2hlcmUgdGhlIG9yaWdpbiBpcyBj
ZW50ZXJlZCBhdCB0aGUKKyAgICAvLyBjZW50ZXIgb2YgdGhlIHN1cmZhY2UuCisgICAgLy8gU28g
aGVyZSwgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgcm9vdCBzdXJmYWNlIGlzICgtMjUwLCAt
MjUwKTsKKyAgICAvLyB0aGUgcG9zaXRpb24gb2YgdGhlIGRhbWFnZSByZWN0IGlzIC0yNTAgKyBj
aGlsZFBvc2l0aW9uIC0gMC41ICogY2hpbGRXaWR0aCArIGdyYW5kQ2hpbGRQb3NpdGlvbiAtIDAu
NSAqIGdyYW5kQ2hpbGRXaWR0aC4KKyAgICBmbG9hdCByb290U3BhY2VEYW1hZ2VYID0gLTI1MC4w
ZiArIDEwMC4wZiAtIDE1LjBmICsgMjAwLjBmIC0gMy4wZjsKKyAgICBmbG9hdCByb290U3BhY2VE
YW1hZ2VZID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMjAwLjBmIC0gNC4wZjsKKyAgICBW
RVJJRllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKEZsb2F0UmVjdChyb290U3BhY2VEYW1hZ2VY
LCByb290U3BhY2VEYW1hZ2VZLCA2LjBmLCA4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAg
Ly8gQ0FTRSAyOiBTYW1lIGFzIHByZXZpb3VzIGNhc2UsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgZGFt
YWdlIGVsc2V3aGVyZSB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSB1bmlvbmVkLgorICAgIC8vIC0g
Y2hpbGQxIHJlbmRlciBzdXJmYWNlIGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0
UmVjdCgzMi4wZiwgMzEuMGYsIDYuMGYsIDguMGYpCisgICAgLy8gLSBjaGlsZDIgZGFtYWdlIGlu
IHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KC0yNDguMGYsIC0yNDguMGYsIDE4LjBmLCAx
OC4wZik7CisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3QuZ2V0KCkpOworICAgIGdy
YW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuN2YpOworICAgIGNoaWxkMi0+c2V0T3BhY2l0eSgwLjdm
KTsKKyAgICBlbXVsYXRlUmVuZGVyaW5nRm9yQ29tcGxleFRyZWUocm9vdC5nZXQoKSwgcm9vdERh
bWFnZVJlY3QsIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBkYW1hZ2UgdG8gdGhlIGNoaWxk
MSBzdXJmYWNlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgY2FzZSBkdXJpbmcg
c2V0dXAuCisgICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QoMTk3
LjBmLCAxOTYuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gZGFt
YWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSB1bmlvbiBvZiBjaGlsZDEncyBy
ZW5kZXIgc3VyZmFjZSwgYW5kIGNoaWxkMidzIGxheWVyLgorICAgIFZFUklGWV9GTE9BVF9SRUNU
U19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KC0yNDguMGYsIC0yNDguMGYsIDI4Ni4wZiwgMjg3LjBm
KSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVy
aWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21EZXNjZW5kYW50TGF5ZXIpCit7CisgICAgLy8g
QSBkZXNjZW5kYW50IGxheWVyIGNoYW5nZXMsIHdoaWNoIGFmZmVjdHMgdGhlIGNvbnRlbnQgYm91
bmRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAvLyBUaGUgZW50aXJlIHN1cmZhY2UgYXJl
YSBzaG91bGQgZGFtYWdlIGl0cyBhbmNlc3RvciBzdXJmYWNlLgorCisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gc2V0VXBDb21wbGV4TGF5ZXJUcmVlKCk7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJlbigpWzBdOwor
ICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VS
ZWN0OworCisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3QuZ2V0KCkpOworICAgIGdy
YW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE5NS4wZiwgMTk1LjBmKSk7CisgICAg
ZW11bGF0ZVJlbmRlcmluZ0ZvckNvbXBsZXhUcmVlKHJvb3QuZ2V0KCksIHJvb3REYW1hZ2VSZWN0
LCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHRvIHRoZSBjaGlsZDEgc3VyZmFj
ZSBzaG91bGQgYmUgdGhlIG5ldyBsYXllciBwbHVzIHRoZSBvbGQgZXhwb3NlZCBhcmVhLgorICAg
IFZFUklGWV9GTE9BVF9SRUNUU19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KDE5Mi4wZiwgMTkxLjBm
LCAxMS4wZiwgMTMuMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHRvIHRo
ZSByb290IHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSB1bmlvbiBvZiBjaGlsZDEncyAqZW50aXJlKiBy
ZW5kZXIgc3VyZmFjZSwKKyAgICAvLyBhbmQgaXRzIG9sZCBleHBvc2VkIGFyZWEuIFRoaXMgaXMg
YmVjYXVzZSB0aGUgYm91bmRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZSBpdHNlbGYKKyAgICAvLyBo
YXZlIGNoYW5nZWQgYmVjYXVzZSBvZiB0aGUgZ3JhbmRDaGlsZC4KKyAgICBmbG9hdCB0YXJnZXRT
dXJmYWNlWCA9IC0yNTAuMGYgKyAxMDAuMGYgLSAxNS4wZiArIDE5MC4wZiAtIDMuMGY7CisgICAg
ZmxvYXQgdGFyZ2V0U3VyZmFjZVkgPSAtMjUwLjBmICsgMTAwLjBmIC0gMTUuMGYgKyAxOTAuMGYg
LSA0LjBmOworICAgIFZFUklGWV9GTE9BVF9SRUNUU19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KHRh
cmdldFN1cmZhY2VYLCB0YXJnZXRTdXJmYWNlWSwgMTYuMGYsIDE4LjBmKSwgcm9vdERhbWFnZVJl
Y3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yU3Vy
ZmFjZUNoYW5nZUZyb21BbmNlc3RvckxheWVyKQoreworICAgIC8vIEFuIGFuY2VzdG9yL293bmlu
ZyBsYXllciBjaGFuZ2VzIHRoYXQgYWZmZWN0cyB0aGUgcG9zaXRpb24vdHJhbnNmb3JtIG9mIHRo
ZSByZW5kZXIKKyAgICAvLyBzdXJmYWNlLiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCB0aGUgbGF5
ZXJQcm9wZXJ0eUNoYW5nZWQgZmxhZyBhbHJlYWR5IHByb3BhZ2F0ZXMKKyAgICAvLyB0byB0aGUg
c3VidHJlZSAodGVzdGVkIGVsc3doZXJlKSwgd2hpY2ggZGFtYWdlcyB0aGUgZW50aXJlIGNoaWxk
MSBzdXJmYWNlIC0tIGJ1dAorICAgIC8vIHRoZSBkYW1hZ2UgdHJhY2tlciBzdGlsbCBuZWVkcyB0
aGUgY29ycmVjdCBsb2dpYyB0byBjb21wdXRlIHRoZSBleHBvc2VkIHJlZ2lvbiBvbgorICAgIC8v
IHRoZSByb290IHN1cmZhY2UuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBzZXRV
cENvbXBsZXhMYXllclRyZWUoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJv
b3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9
IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxk
RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICByZXNldERh
bWFnZUZvckVudGlyZVRyZWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDUwLjBmLCA1MC4wZikpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JDb21wbGV4
VHJlZShyb290LmdldCgpLCByb290RGFtYWdlUmVjdCwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAg
IC8vIEV4cGVjdCB0aGUgdW5pb24gb2YgZ3JhbmRDaGlsZDEgYW5kIGdyYW5kQ2hpbGQyCisgICAg
VkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYs
IDE2LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICBmbG9hdCB0YXJnZXRTdXJm
YWNlWCA9IC0yNTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gMy4wZjsKKyAgICBmbG9h
dCB0YXJnZXRTdXJmYWNlWSA9IC0yNTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gNC4w
ZjsKKworICAgIC8vIFRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgYW5kIHRoZSBvbGQgZXhwb3Nl
ZCBjaGlsZDEgc3VyZmFjZSBzaG91bGQgZGFtYWdlIHRoZSByb290IHN1cmZhY2UKKyAgICBWRVJJ
RllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKEZsb2F0UmVjdCh0YXJnZXRTdXJmYWNlWCwgdGFy
Z2V0U3VyZmFjZVksIDY2LjBmLCA2OC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nUmVu
ZGVyU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gc2V0VXBDb21w
bGV4TGF5ZXJUcmVlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdOworICAgIENDRGFtYWdlVHJhY2tlciogcm9vdERhbWFnZVRyYWNrZXIgPSBy
b290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKyAgICBGbG9hdFJlY3QgY2hp
bGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIC8vIENB
U0UgMTogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywgaXRzIGVudGlyZSBvbGQg
YXJlYSBiZWNvbWVzIGV4cG9zZWQuCisgICAgLy8KKyAgICByZXNldERhbWFnZUZvckVudGlyZVRy
ZWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDEuMGYpOworCisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKwor
ICAgIC8vIHNhbml0eSBjaGVjayB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHN1cmZhY2Ugbm93Lgor
ICAgIEVYUEVDVF9GQUxTRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VR
KDQsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIHJv
b3REYW1hZ2VSZWN0ID0gcm9vdERhbWFnZVRyYWNrZXItPmNvbXB1dGVEYW1hZ2VGb3JOZXh0RnJh
bWUoKTsKKyAgICBWRVJJRllfRkxPQVRfUkVDVFNfQUxNT1NUX0VRVUFMKEZsb2F0UmVjdCgyMi4w
ZiwgMjEuMGYsIDE2LjBmLCAxOC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0Ug
MjogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYWQg
YmVjb21lcyBleHBvc2VkLgorCisgICAgLy8gY3ljbGUgb25lIGZyYW1lIG9mIG5vIGNoYW5nZSwg
anVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCByZWN0IGlzIG5vdCBiZWNhdXNlIG9m
IHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIHJlc2V0RGFtYWdlRm9yRW50aXJlVHJlZShyb290
LmdldCgpKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdERhbWFnZVRyYWNrZXItPmNv
bXB1dGVEYW1hZ2VGb3JOZXh0RnJhbWUoKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVj
dC5pc0VtcHR5KCkpOworCisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3QuZ2V0KCkp
OworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gc2FuaXR5IGNo
ZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUSgzLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGNoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgY2hpbGQxLT5yZW5kZXJT
dXJmYWNlKCktPnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlUmVjdCgpOworICAgIHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdERhbWFnZVRyYWNrZXItPmNvbXB1dGVEYW1hZ2VGb3JOZXh0RnJhbWUo
KTsKKworICAgIFZFUklGWV9GTE9BVF9SRUNUU19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KDE4Ny4w
ZiwgMTg2LjBmLCAxNi4wZiwgMTguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIFZFUklGWV9G
TE9BVF9SRUNUU19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KDIyLjBmLCAyMS4wZiwgMTYuMGYsIDE4
LjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5Tm9EYW1hZ2VXaGVuTm90aGluZ0NoYW5nZWQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gc2V0VXBDb21wbGV4TGF5ZXJUcmVlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERh
bWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAx
OiBObyBjaGFuZ2VzIHNob3VsZCBwcm9kdWNlIGFuIGVtcHR5IGRhbWFnZSByZWN0LgorICAgIC8v
CisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3QuZ2V0KCkpOworICAgIGVtdWxhdGVS
ZW5kZXJpbmdGb3JDb21wbGV4VHJlZShyb290LmdldCgpLCByb290RGFtYWdlUmVjdCwgY2hpbGRE
YW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gQ0FT
RSAyOiBObyBjaGFuZ2VzIHR3aWNlIGluIGEgcm93IHNob3VsZCBzdGlsbCBwcm9kdWNlIGVtcHR5
IGRhbWFnZSByZWN0LgorICAgIC8vCisgICAgcmVzZXREYW1hZ2VGb3JFbnRpcmVUcmVlKHJvb3Qu
Z2V0KCkpOworICAgIGVtdWxhdGVSZW5kZXJpbmdGb3JDb21wbGV4VHJlZShyb290LmdldCgpLCBy
b290RGFtYWdlUmVjdCwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERh
bWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0Vt
cHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VG
b3JVcGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKK3sKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBzZXRVcENvbXBsZXhMYXllclRyZWUoKTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxk
RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBJbiBv
dXIgc3BlY2lmaWMgdHJlZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNoaWxkMSBzaG91bGQgbm90IGNh
dXNlIGFueSBkYW1hZ2UgdG8gYW55CisgICAgLy8gc3VyZmFjZSBiZWNhdXNlIGl0IGRvZXMgbm90
IGFjdHVhbGx5IGRyYXcgY29udGVudC4KKyAgICByZXNldERhbWFnZUZvckVudGlyZVRyZWUocm9v
dC5nZXQoKSk7CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCAxLjBmLCAyLjBmKSk7CisgICAgZW11bGF0ZVJlbmRlcmluZ0ZvckNvbXBsZXhUcmVlKHJvb3Qu
Z2V0KCksIHJvb3REYW1hZ2VSZWN0LCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9UUlVF
KGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VS
ZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlE
YW1hZ2VGb3JSZXBsaWNhKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IHNldFVw
Q29tcGxleExheWVyVHJlZSgpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9v
dC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0g
Y2hpbGQxLT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFt
YWdlUmVjdDsKKworICAgIC8vIERhbWFnZSBvbiBhIHN1cmZhY2UgdGhhdCBoYXMgYSByZWZsZWN0
aW9uIHNob3VsZCBjYXVzZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdG8KKyAgICAvLyByZWNlaXZlIHRo
ZSBzdXJmYWNlJ3MgZGFtYWdlIGFuZCB0aGUgc3VyZmFjZSdzIHJlZmxlY3RlZCBkYW1hZ2UuCisK
KyAgICByZXNldERhbWFnZUZvckVudGlyZVRyZWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTZXQg
dXAgYSByZWZsZWN0aW9uIGFib3V0IDEgdW5pdCBiZXlvbmQgdGhlIGxlZnQgZWRnZSBvZiBncmFu
ZENoaWxkMS4gVGhpcyB3aWxsIG5vdAorICAgIC8vIGNoYW5nZSB0aGUgY29udGVudEJvdW5kcyBv
ZiBjaGlsZDEsIHNvIHRoYXQgd2UgY2FuIGlzb2xhdGUgdGhlIHJlZmxlY3Rpb24gZGFtYWdlCisg
ICAgLy8gdGVzdGluZy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxUmVwbGlj
YSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNik7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KC0xLjBmLCAwLjBmKSk7IC8vIGltcGxpY2l0bHkgaW5jbHVkZXMg
dGhlIGFuY2hvciB3aGVyZSB0aGUgcmVmbGVjdGlvbiBpcyBjZW50ZXJlZAorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHJlZmxlY3Rpb247CisgICAgcmVmbGVjdGlvbi5zY2FsZTNkKC0xLjAsIDEu
MCwgMS4wKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFRyYW5zZm9ybShyZWZsZWN0aW9u
KTsKKyAgICBncmFuZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKGdyYW5kQ2hpbGQxUmVwbGljYSk7
CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3Qu
Z2V0KCkpOworCisgICAgLy8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHJlbmRl
ciBzdXJmYWNlcyB3ZXJlIGNyZWF0ZWQKKyAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPnVwZGF0
ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoKTsKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdy
YW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVJlY3QoKTsKKyAgICBjaGlsZDEtPnJl
bmRlclN1cmZhY2UoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSgpOworICAgIGNoaWxk
RGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VSZWN0KCk7CisgICAg
Q0NEYW1hZ2VUcmFja2VyKiByb290RGFtYWdlVHJhY2tlciA9IHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdERhbWFnZVRyYWNr
ZXItPmNvbXB1dGVEYW1hZ2VGb3JOZXh0RnJhbWUoKTsKKworICAgIC8vIFRoZSBncmFuZENoaWxk
IHN1cmZhY2UgZGFtYWdlIHNob3VsZCBub3QgaW5jbHVkZSBpdHMgb3duIHJlcGxpY2EuCisgICAg
Ly8gRklYTUU6IHRoaXMgKDAsMCkgZG9lc24ndCBmZWVsIHJpZ2h0LiBzaG91bGRuJ3QgaXQgYmUg
dGhlIHNwYWNlIHdoZXJlIHRoZSBvcmlnaW4gaXMgYXQgdGhlIGNlbnRlcj8KKyAgICAvLyAgICAg
ICAgaXQgc2VlbXMgbGlrZSB0aGUgImNlbnRlciIgaW5jbHVkZXMgdGhlIHJlZmxlY3Rpb24uCisg
ICAgVkVSSUZZX0ZMT0FUX1JFQ1RTX0FMTU9TVF9FUVVBTChGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
Ni4wZiwgOC4wZiksIGdyYW5kQ2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIFRoZSBjaGlsZCBz
dXJmYWNlIGRhbWFnZSBzaG91bGQgaW5jbHVkZSB0aGUgbm9ybWFsIGFuZCByZXBsaWNhIHN1cmZh
Y2VzLgorICAgIFZFUklGWV9GTE9BVF9SRUNUU19BTE1PU1RfRVFVQUwoRmxvYXRSZWN0KDE4OS4w
ZiwgMTk2LjBmLCAxNC4wZiwgOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7Cit9CisKKworfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115740</attachid>
            <date>2011-11-17 22:03:30 -0800</date>
            <delta_ts>2011-11-18 10:27:49 -0800</delta_ts>
            <desc>addressed reviewer comments</desc>
            <filename>bug-72520-20111117220329.patch</filename>
            <type>text/plain</type>
            <size>91031</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMxNjk3NzM2N2ExNThj
MDYwNTI0MWM2ZWE0NmY0YjE2MTMxNDQ4My4uNmRhMmFiNmMyNTJjMzQ3MTcyMWJhZGM4YzkxYWZh
MzJkZGZhYWQwMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTE3ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQXBwcm9wcmlhdGUgdGVzdHMgYXJlIGFkZGVkIGFuZCB1cGRhdGVkIGZvciB0aGlz
LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SEFDS1lTY3JvbGxGaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1h
Z2VUcmFja2VyOjpDQ0RhbWFnZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VU
cmFja2VyOjp1cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbVBy
ZXZpb3VzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpzYXZlUmVj
dEZvck5leHRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4dGVu
ZERhbWFnZUZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0
ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q0NEYW1hZ2VUcmFja2VyOjp+Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RGFtYWdlVHJhY2tlcjo6Y3VycmVudERhbWFnZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpyZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VUcmFja2VyKToKKwogMjAxMS0xMS0xNyAgU2Vy
Z2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBw
bHVnaW5zL2dldC11cmwtbm90aWZ5LXdpdGgtdXJsLXRoYXQtZmFpbHMtdG8tbG9hZC5odG1sIG9u
IGJvdHMgYWZ0ZXIgcjEwMDQ2NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4M2E2ZmQy
M2FlODQ3ZTQzMTk1NzczZDdmMjI1NDczZTc0YmQ2M2EzLi41MGUzNzc0MmNkOWY5ZmEyMTU2OGIy
MTk2MzA3YzM2MWE3YThmNzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDExLTExLTE3ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBk
ZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFuZ2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVz
dCB3aXRoIG1hbnkgdGVzdCBjYXNlcyBhbmQgdXBkYXRlZCBvdGhlcgorICAgICAgICB0ZXN0cyBh
cHByb3ByaWF0ZWx5LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5nT25lRnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNy
ZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVh
dGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVUZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVy
U3VyZmFjZVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVz
dHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTE3ICBWc2V2b2xvZCBWbGFzb3Yg
IDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSBv
bmxpbmVEZXRlY3Rpb25FbmFibGVkIGZyb20gUHJlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBmYTQzM2E5Mjc3MjlkMzM3OWEyNGE0NDViMTM2NTY0MjI5MmQ1YWRlLi5lYTc5ZTI1MWU3Njdj
ZGQxNDkyYmUxZWNhNzA3MjUzYTY2ZmYzNWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTQ3LDYg
KzM1NDcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGY2YzYyZWU5MTY5ZWFhZGUzMWNlYTU2MTlhY2E4
YzBhMmMwYjhiNzMuLjVhMDM3NWFiNGI1MDgwZmMwZTIxNGFmOThjMTNjMGUxZTM4NjRlNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMsNyBAQAog
I2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5j
aHJvbml6ZXIuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIK
QEAgLTMzMSw2ICszMzIsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYQogICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewogICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0U2tpcHNEcmF3KGZhbHNlKTsKIAorICAgICAgICAgICAgaWYgKHNldHRpbmdzKCku
dXNlRGFtYWdlVHJhY2tlcikKKyAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5kYW1hZ2VU
cmFja2VyKCktPnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoKTsKKwogICAgICAgICAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7CiAgICAgICAgICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwpAQCAtMzQ1LDcgKzM0OSw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2Vz
KENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAgfQogCiAgICAgLy8gVGhlIG5leHQgZnJhbWUg
c2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2Vz
IGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgotICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0UHJvcGVy
dHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICByb290RHJhd0xheWVyLT5yZXNldEFsbENo
YW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYwMzNhOTIzODdkOGQ5MDU3MmM1ZGIwODExY2I0ZDBmY2JhZWVi
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiB0aGlzIHNjcm9sbCBmaXggaXMgbm90IGludGVuZGVkIHRvIGtlZXAsIGJ1dCBp
cyByZXF1aXJlZCB0byBnZXQgdGhlCisvLyAgICAgICAgRGFtYWdlVHJhY2tlciB0byB3b3JrIHBy
b3Blcmx5IHdoaWxlIHdhaXRpbmcgZm9yIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdAorLy8gICAg
ICAgIHNjcm9sbGluZyB0byBiZSBmaXhlZC4gT25jZSBzY3JvbGxpbmcgaXMgZml4ZWQsIHdlIGNh
biByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQKKy8vICAgICAgICB1c2UgdGhlIG9yaWdpbmFsIHJl
Y3QgaW4gaXRzIHBsYWNlLgorc3RhdGljIEZsb2F0UmVjdCBIQUNLWVNjcm9sbEZpeChDQ0xheWVy
SW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBGbG9hdFJlY3Qgc2Ny
b2xsZWRSZWN0ID0gcmVjdDsKKyAgICBpZiAobGF5ZXItPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQo
KSkKKyAgICAgICAgc2Nyb2xsZWRSZWN0Lm1vdmUoLWxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngo
KSwgLWxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSk7CisgICAgcmV0dXJuIHNjcm9sbGVkUmVj
dDsKK30KKworUGFzc093blB0cjxDQ0RhbWFnZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3Jl
YXRlKENDUmVuZGVyU3VyZmFjZSogb3duaW5nU3VyZmFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDRGFtYWdlVHJhY2tlcihvd25pbmdTdXJmYWNlKSk7Cit9CisKK0NDRGFtYWdlVHJh
Y2tlcjo6Q0NEYW1hZ2VUcmFja2VyKENDUmVuZGVyU3VyZmFjZSogb3duaW5nU3VyZmFjZSkKKyAg
ICA6IG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXgoMCkKKyAgICAsIG1fb3duaW5nU3VyZmFjZShv
d25pbmdTdXJmYWNlKQoreworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdl
UmVjdEZvck5leHRGcmFtZSgpCit7CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1
dGVzIHRoZSAiZGFtYWdlIHJlY3QiIG9mIHRoZSBvd25pbmcgcmVuZGVyIHN1cmZhY2UuIFRoZSBk
YW1hZ2UKKyAgICAvLyByZWN0IGlzIHRoZSByZWdpb24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkg
aGF2ZSBjaGFuZ2VkIGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJl
IHVzZWQgdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21w
dXRhdGlvbiBhbmQKKyAgICAvLyBiYW5kd2lkdGguCisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFj
ZSdzIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkIGFzIHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUg
Y2hhbmdlcyB0aGF0CisgICAgLy8gaGF2ZSBoYXBwZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0
aGUgbGFzdCBmcmFtZSB3YXMgZHJhd24uIFRoaXMgaW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBj
aGFuZ2VzIGZvciBleGlzdGluZyBsYXllcnMvc3VyZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRo
ZSB0YXJnZXQgc3VyZmFjZQorICAgIC8vICAgLSBsYXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVk
IGluIHRoZSBwcmV2aW91cyBmcmFtZSwgYnV0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAg
IC8vIFRoZSBiYXNpYyBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBp
cyBhcyBmb2xsb3dzOgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2Ug
Y2F1c2VkIGJ5IGNoYW5nZXMgaW4gYWN0aXZlL25ldyBsYXllcnMKKyAgICAvLyAgICAgICBmb3Ig
ZWFjaCBsYXllciBpbiB0aGUgbGF5ZXJMaXN0OgorICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5
ZXIgaXMgYWN0dWFsbHkgYSByZW5kZXJTdXJmYWNlOgorICAgIC8vICAgICAgICAgICAgICAgYWRk
IHRoZSBzdXJmYWNlJ3MgZGFtYWdlIHRvIG91ciB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAg
ICAgICAgZWxzZQorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0
byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRl
IGRhbWFnZSBjYXVzZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlz
dAorICAgIC8vICAgICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8vICAgICAgICAg
ICBhZGQgdGhlIG9sZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ug
ZGFtYWdlLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMy4gY29tYmluZSBib3RoIHBhcnRpYWwg
ZGFtYWdlIHJlY3RzIHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIC8v
IEFkZGl0aW9uYWwgaW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhpcyBhbGdv
cml0aG0gaXMgaW1wbGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNjZW5kYW50
IHN1cmZhY2VzIGhhdmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFtYWdlLgor
ICAgIC8vCisgICAgLy8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0ZSAiZGFt
YWdlIiB0byB0aGUgdGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAgIG5vdCBj
aGFuZ2VkLCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRyYXdpbmcu
IEFsbCBsYXllcnMgdGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdpb24gc3Rp
bGwgbmVlZCB0byBiZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAvLyAgIGNo
YW5nZWQgaXRzIG9wYWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSByZS1kcmF3
biBhcyB3ZWxsLCBldmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgorICAgIC8v
CisgICAgLy8gLSBJZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhlIG9sZCBi
b3VuZHMgYW5kIG5ldyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4gc29tZSBv
ZiB0aGUgZXhwb3NlZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBhbnl0aGlu
Zy4gQnV0IHRoaXMKKyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRlIHRoZSBk
YW1hZ2UgcmVjdC4gSWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAvLyAgIG9s
ZCBib3VuZHMgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVzcyBvZiBo
b3cgbXVjaCBpdCBvdmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcgYm91bmRz
LCB3aGljaCBhbHNvIG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLworICAgIC8v
IC0gU2VlIGNvbW1lbnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGV4YWN0
bHkgaXMgY29uc2lkZXJlZAorICAgIC8vICAgYSAiY2hhbmdlIiBpbiBhIGxheWVyL3N1cmZhY2Uu
CisgICAgLy8KKyAgICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0cywgdHdv
IFJlY3RNYXBzIGFyZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBUaGUgImN1
cnJlbnQiIG1hcCBjb250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRyaWJ1dGVk
IHRvIHRoZQorICAgIC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lkZSB0aGUg
cHJldmlvdXMgZGFtYWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8gICAgICAg
ICBvciBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVuIGV4cG9z
ZWQgYW5kIGRhbWFnZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBBcyB0aGUg
YWxnb3JpdGhtIHByb2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAv
LyAgICAgICAgIG1hcCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhhdCBubyBs
b25nZXIgZXhpc3QuCisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFwIHN0YXJ0
cyBvdXQgZW1wdHksIGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5CisgICAg
Ly8gICAgICAgICBsYXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1cmZhY2Ug
aXMgYWRkZWQgdG8gdGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIgdGhlIGRh
bWFnZSByZWN0IGlzIGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNvIHRoYXQg
dGhlCisgICAgLy8gICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhlIG5leHQg
ZnJhbWUuCisgICAgLy8KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0g
Y29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMobV9vd25pbmdTdXJmYWNlKTsKKyAgICBGbG9h
dFJlY3QgZGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMgPSBjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVy
UmVjdHMoKTsKKyAgICBtX2N1cnJlbnREYW1hZ2VSZWN0ID0gdW5pb25SZWN0KGRhbWFnZUZyb21B
Y3RpdmVMYXllcnMsIGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKTsKKworICAgIC8vIFN3YXAgbmV4
dCBhbmQgcHJldmlvdXMgaGlzdG9yeSBtYXBzLCBzaW1wbHkgYnkgY2hhbmdpbmcgdGhlIGluZGV4
LgorICAgIG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggPSAobV9jdXJyZW50UmVjdEhpc3RvcnlJ
bmRleCArIDEpICUgMjsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURh
bWFnZUZyb21BY3RpdmVMYXllcnMoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQorewor
ICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICAvLyBOb3RlIHRo
aXMgaXMgYW4gYWxpYXMsIG5vdCBhIGNvcHkuCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPiYgbGF5ZXJMaXN0ID0gdGFyZ2V0U3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNp
emUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVy
TGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNl
KCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0YXJnZXRTdXJmYWNlKQorICAgICAgICAg
ICAgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShsYXllciwgZGFtYWdlUmVjdCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvckxheWVyKGxheWVyLCBkYW1hZ2VS
ZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IEND
RGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCkKK3sKKyAgICAv
LyBBZnRlciBjb21wdXRpbmcgZGFtYWdlIGZvciBhbGwgYWN0aXZlIGxheWVycywgYW55IGxlZnRv
dmVyIGl0ZW1zIGluIHRoZSBjdXJyZW50CisgICAgLy8gcmVjdCBoaXN0b3J5IGNvcnJlc3BvbmQg
dG8gbGF5ZXJzL3N1cmZhY2VzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LiBTbywgdGhlc2UgcmVnaW9u
cworICAgIC8vIGFyZSBub3cgZXhwb3NlZCBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisKKyAgICBG
bG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworICAgIFJlY3RNYXAmIGxlZnRvdmVy
UmVjdEhpc3RvcnkgPSBtX2xheWVyUmVjdHNIaXN0b3J5W21fY3VycmVudFJlY3RIaXN0b3J5SW5k
ZXhdOworCisgICAgZm9yIChSZWN0TWFwOjppdGVyYXRvciBpdCA9IGxlZnRvdmVyUmVjdEhpc3Rv
cnkuYmVnaW4oKTsgaXQgIT0gbGVmdG92ZXJSZWN0SGlzdG9yeS5lbmQoKTsgKytpdCkKKyAgICAg
ICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKworICAgIGxlZnRvdmVyUmVjdEhpc3Rv
cnkuY2xlYXIoKTsKKworICAgIHJldHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJlY3QgQ0NE
YW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUoaW50IGxheWVySUQpCit7
CisgICAgUmVjdE1hcCYgY3VycmVudFJlY3RIaXN0b3J5ID0gbV9sYXllclJlY3RzSGlzdG9yeVtt
X2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKworICAgIC8vIHRha2UoKSB3aWxsIHJlbW92ZSB0
aGUgZW50cnkgZnJvbSB0aGUgbWFwLCBvciBpZiBub3QgZm91bmQsIHJldHVybiBhIGRlZmF1bHQg
KGVtcHR5KSByZWN0LgorICAgIHJldHVybiBjdXJyZW50UmVjdEhpc3RvcnkudGFrZShsYXllcklE
KTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4dEZyYW1lKGludCBs
YXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFNwYWNlUmVjdCkKK3sKKyAgICBpbnQgbmV4
dE1hcEluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggKyAxKSAlIDI7CisgICAgUmVj
dE1hcCYgbmV4dFJlY3RIaXN0b3J5ID0gbV9sYXllclJlY3RzSGlzdG9yeVtuZXh0TWFwSW5kZXhd
OworCisgICAgLy8gVGhpcyBsYXllciBJRCBrZXkgc2hvdWxkIG5vdCB5ZXQgZXhpc3QgaW4gbmV4
dCBoaXN0b3J5LgorICAgIEFTU0VSVChuZXh0UmVjdEhpc3RvcnkuZmluZChsYXllcklEKSA9PSBu
ZXh0UmVjdEhpc3RvcnkuZW5kKCkpOworCisgICAgbmV4dFJlY3RIaXN0b3J5LnNldChsYXllcklE
LCB0YXJnZXRTcGFjZVJlY3QpOworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFt
YWdlRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJl
Y3QpCit7CisgICAgLy8gVGhlcmUgYXJlIHR3byB3YXlzIHRoYXQgYSBsYXllciBjYW4gZGFtYWdl
IGEgcmVnaW9uIG9mIHRoZSB0YXJnZXQgc3VyZmFjZToKKyAgICAvLyAgIDEuIFByb3BlcnR5IGNo
YW5nZSAoZS5nLiBvcGFjaXR5LCBwb3NpdGlvbiwgdHJhbnNmb3Jtcyk6CisgICAgLy8gICAgICAg
IC0gdGhlIGVudGlyZSByZWdpb24gb2YgdGhlIGxheWVyIGl0c2VsZiBkYW1hZ2VzIHRoZSBzdXJm
YWNlLgorICAgIC8vICAgICAgICAtIHRoZSBvbGQgbGF5ZXIgcmVnaW9uIGFsc28gZGFtZ2VzIHRo
ZSBzdXJmYWNlLCBiZWNhdXNlIHRoaXMgcmVnaW9uIGlzIG5vdyBleHBvc2VkLgorICAgIC8vICAg
ICAgICAtIG5vdGUgdGhhdCBpbiBtYW55IGNhc2VzIHRoZSBvbGQgYW5kIG5ldyBsYXllciByZWN0
cyBtYXkgb3ZlcmxhcCwgd2hpY2ggaXMgZmluZS4KKyAgICAvLworICAgIC8vICAgMi4gUmVwYWlu
dC91cGRhdGU6IElmIGEgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZXBhaW50ZWQvdXBk
YXRlZCwgdGhhdAorICAgIC8vICAgICAgcmVnaW9uIGRhbWFnZXMgdGhlIHN1cmZhY2UuCisgICAg
Ly8KKyAgICAvLyBQcm9wZXJ0eSBjaGFuZ2VzIHRha2UgcHJpb3JpdHkgb3ZlciB1cGRhdGUgcmVj
dHMuCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+
ZHJhd1RyYW5zZm9ybSgpOworICAgIG9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICog
bGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCks
IDApOworCisgICAgRmxvYXRSZWN0IG9sZExheWVyUmVjdCA9IHJlbW92ZVJlY3RGcm9tUHJldmlv
dXNGcmFtZShsYXllci0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0SW5UYXJnZXRT
cGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KEhBQ0tZU2Nyb2xsRml4KGxheWVyLCBGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSk7CisgICAgc2F2ZVJl
Y3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIGxheWVyUmVjdEluVGFyZ2V0U3BhY2UpOworCisg
ICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKSB7CisgICAgICAgIC8vIElmIGEg
bGF5ZXIgaGFzIGNoYW5nZWQsIHRoZW4gaXRzIGVudGlyZSBsYXllciByZWN0IGFmZmVjdHMgdGhl
IHRhcmdldCBzdXJmYWNlLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJv
KGxheWVyUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAgIC8vIFRoZSBsYXllcidzIG9sZCBy
ZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLCB0b28uCisgICAgICAg
IC8vIE5vdGUgb2xkTGF5ZXJSZWN0IGlzIGFscmVhZHkgaW4gdGFyZ2V0IHNwYWNlLgorICAgICAg
ICBpZiAoIW9sZExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0YXJnZXREYW1hZ2VS
ZWN0LnVuaXRlSWZOb25aZXJvKG9sZExheWVyUmVjdCk7CisKKyAgICB9IGVsc2UgaWYgKCFsYXll
ci0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgcHJv
cGVydGllcyBoYXZlbnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNlIGlzIG9u
bHkKKyAgICAgICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEsIHdoaWNo
IGNvdWxkIGJlIGVtcHR5LgorICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFyZ2V0U3Bh
Y2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgbGF5ZXIt
PnVwZGF0ZVJlY3QoKSkpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJv
KHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFj
a2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllciwgRmxv
YXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJlIGFyZSB0d28gd2F5cyBh
ICJkZXNjZW5kYW50IHN1cmZhY2UiIGNhbiBkYW1hZ2UgcmVnaW9ucyBvZiB0aGUgInRhcmdldCBz
dXJmYWNlIjoKKyAgICAvLyAgIDEuIFByb3BlcnR5IGNoYW5nZToKKyAgICAvLyAgICAgICAgLSBh
IHN1cmZhY2UncyBnZW9tZXRyeSBjYW4gY2hhbmdlIGJlY2F1c2Ugb2YKKyAgICAvLyAgICAgICAg
ICAgIC0gY2hhbmdlcyB0byBkZXNjZW5kYW50cyAoaS5lLiB0aGUgc3VidHJlZSkgdGhhdCBhZmZl
Y3QgdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3QKKyAgICAvLyAgICAgICAgICAgIC0gY2hhbmdl
cyB0byBhbmNlc3RvciBsYXllcnMgdGhhdCBwcm9wYWdhdGUgdGhlaXIgcHJvcGVydHkgY2hhbmdl
cyB0byB0aGVpciBlbnRpcmUgc3VidHJlZS4KKyAgICAvLyAgICAgICAgLSBqdXN0IGxpa2UgbGF5
ZXJzLCBib3RoIHRoZSBvbGQgc3VyZmFjZSByZWN0IGFuZCBuZXcgc3VyZmFjZSByZWN0IHdpbGwK
KyAgICAvLyAgICAgICAgICBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlIGluIHRoaXMgY2FzZS4K
KyAgICAvLworICAgIC8vICAgMi4gRGFtYWdlIHJlY3Q6IFRoaXMgc3VyZmFjZSBtYXkgaGF2ZSBi
ZWVuIGRhbWFnZWQgYnkgaXRzIG93biBsYXllckxpc3QgYXMgd2VsbCwgYW5kIHRoYXQgZGFtYWdl
CisgICAgLy8gICAgICBzaG91bGQgcHJvcGFnYXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAg
ICAvLworCisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKworICAgIEZsb2F0UmVjdCBvbGRTdXJmYWNlUmVjdCA9IHJlbW92ZVJlY3RG
cm9tUHJldmlvdXNGcmFtZShsYXllci0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgc3VyZmFjZVJl
Y3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwor
ICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNlUmVjdEluVGFyZ2V0
U3BhY2UpOworCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7CisgICAgaWYg
KHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAgICAvLyBU
aGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgorICAgICAgICBkYW1hZ2VSZWN0
SW5Mb2NhbFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKworICAgICAgICAv
LyBUaGUgc3VyZmFjZSdzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBz
dXJmYWNlLCB0b28uCisgICAgICAgIGlmICghb2xkU3VyZmFjZVJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRTdXJmYWNlUmVjdCk7
CisKKyAgICB9IGVsc2UKKyAgICAgICAgLy8gT25seSB0aGUgc3VyZmFjZSdzIGRhbWFnZVJlY3Qg
d2lsbCBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICBkYW1hZ2VSZWN0SW5Mb2Nh
bFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworCisgICAgLy8gSWYgdGhlcmUgd2FzIGRhbWFnZSwgdHJhbnNmb3JtIGl0IHRvIHRhcmdl
dCBzcGFjZSwgYW5kIHBvc3NpYmx5IGNvbnRyaWJ1dGUgaXRzIHJlZmxlY3Rpb24gaWYgbmVlZGVk
LgorICAgIGlmICghZGFtYWdlUmVjdEluTG9jYWxTcGFjZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1cmZh
Y2UtPm9yaWdpblRyYW5zZm9ybSgpOworICAgICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdEluVGFy
Z2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNl
KTsKKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VSZWN0SW5U
YXJnZXRTcGFjZSk7CisKKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdpblRyYW5zZm9ybSA9IGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpOworICAgICAgICAgICAgcmVw
bGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsK
KyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxp
Y2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNm
b3JtLnRyYW5zbGF0ZTNkKC1sYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAt
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisKKyAgICAgICAgICAg
IEZsb2F0UmVjdCByZXBsaWNhRGFtYWdlUmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFw
UmVjdChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKTsKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJl
Y3QudW5pdGVJZk5vblplcm8ocmVwbGljYURhbWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlYmNk
ZDhjYzg3ODMyMjk1YTQ3MGRjZTVhM2VkOTdhZDlmZjM5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RhbWFnZVRyYWNrZXJfaAor
I2RlZmluZSBDQ0RhbWFnZVRyYWNrZXJfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7
CisKKy8vIENvbXB1dGVzIHRoZSByZWdpb24gd2hlcmUgcGl4ZWxzIGhhdmUgYWN0dWFsbHkgY2hh
bmdlZCBvbiBhIFJlbmRlclN1cmZhY2UuIFRoaXMgcmVnaW9uIGlzIHVzZWQKKy8vIHRvIHNjaXNz
b3Igd2hhdCBpcyBhY3R1YWxseSBkcmF3biB0byB0aGUgc2NyZWVuIHRvIHNhdmUgR1BVIGNvbXB1
dGF0aW9uIGFuZCBiYW5kd2lkdGguCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8Q0NEYW1hZ2VUcmFja2VyPiBjcmVhdGUoQ0NSZW5k
ZXJTdXJmYWNlKiBvd25pbmdTdXJmYWNlKTsKKyAgICB2aXJ0dWFsIH5DQ0RhbWFnZVRyYWNrZXIo
KSB7IH0KKworICAgIHZvaWQgdXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSgpOworICAgIGNv
bnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJldHVybiBtX2N1cnJlbnREYW1h
Z2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NEYW1hZ2VUcmFja2VyKENDUmVu
ZGVyU3VyZmFjZSogb3duaW5nU3VyZmFjZSk7CisKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMoQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgRmxvYXRSZWN0IGNvbXB1
dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOworCisgICAgLy8gVGhlc2UgaGVscGVyIGZ1bmN0
aW9ucyBhcmUgdXNlZCBvbmx5IGluIGNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKCkuCisg
ICAgdm9pZCBzYXZlUmVjdEZvck5leHRGcmFtZShjb25zdCBpbnQgbGF5ZXJJRCwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRTcGFjZVJlY3QpOworICAgIEZsb2F0UmVjdCByZW1vdmVSZWN0RnJvbVBy
ZXZpb3VzRnJhbWUoY29uc3QgaW50IGxheWVySUQpOworICAgIHZvaWQgZXh0ZW5kRGFtYWdlRm9y
TGF5ZXIoQ0NMYXllckltcGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOworICAgIHZv
aWQgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCosIEZsb2F0UmVjdCYg
dGFyZ2V0RGFtYWdlUmVjdCk7CisKKyAgICAvLyBUbyBjb3JyZWN0bHkgdHJhY2sgZXhwb3NlZCBy
ZWdpb25zLCB0d28gaGFzaHRhYmxlcyBvZiByZWN0cyBhcmUgbWFpbnRhaW5lZC4KKyAgICAvLyBU
aGUgImN1cnJlbnQiIG1hcCBpcyB1c2VkIHRvIGNvbXB1dGUgZXhwb3NlZCByZWdpb25zIG9mIHRo
ZSBjdXJyZW50IGZyYW1lLCB3aGlsZQorICAgIC8vIHRoZSAibmV4dCIgbWFwIGlzIHVzZWQgdG8g
Y29sbGVjdCBsYXllciByZWN0cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBuZXh0IGZyYW1lLgorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIEZsb2F0UmVjdD4gUmVjdE1hcDsKKyAgICBSZWN0TWFwIG1f
bGF5ZXJSZWN0c0hpc3RvcnlbMl07CisgICAgaW50IG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXg7
CisKKyAgICBGbG9hdFJlY3QgbV9jdXJyZW50RGFtYWdlUmVjdDsKKyAgICBDQ1JlbmRlclN1cmZh
Y2UqIG1fb3duaW5nU3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIENDRGFtYWdlVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMWFi
MmU3ZThlNjc3ODYxMzdhMzlhODcxNTI1Y2JiNThiOWIzMGYyNS4uMTU5ZGEyMzM1NWMyZTQ3YWYw
ZmUxZjYwMDYzNjIzNDA3OGQ4YjljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMjM5
LDYgKzIzOSwxMiBAQCB2b2lkIENDTGF5ZXJJbXBsOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRG
b3JEZXNjZW5kYW50cygpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPm5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFu
Z2VUcmFja2luZ0ZvclN1YnRyZWUoKQoreworICAgIHJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVl
KCk7CisgICAgcmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworfQorCiB2b2lk
IENDTGF5ZXJJbXBsOjpyZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCkKIHsKICAg
ICBtX2xheWVyUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7CkBAIC0yNTAsNiArMjU2LDE0IEBAIHZv
aWQgQ0NMYXllckltcGw6OnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQogICAg
ICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7
CiB9CiAKK3ZvaWQgQ0NMYXllckltcGw6OnJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVlKCkKK3sK
KyAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVz
ZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUoKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6c2V0Qm91
bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykKIHsKICAgICBpZiAobV9ib3VuZHMgIT0gYm91bmRz
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZjZjI2MjU3
ZmQ5N2Q0YmQ4MjQxLi41NWJhY2VjNTJhMGViN2UwODM5OGRkNTk3OTlmNWEwNDdlZmVjNzUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hh
bmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAgICB2b2lk
IHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgcHJv
cGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9pZCByZXNl
dEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgQ0NMYXllckltcGwoaW50KTsKQEAgLTIxMCw2ICsyMTAsOSBAQCBwcml2YXRlOgogICAgIC8v
IE5vdGUgY2FyZWZ1bGx5IHRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBjdXJyZW50IGxheWVyLgog
ICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yRGVzY2VuZGFudHMoKTsKIAorICAg
IHZvaWQgcmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUoKTsKKyAgICB2b2lkIHJlc2V0UHJvcGVy
dHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgcHJvcGVydHkgY2hhbmdl
IGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9CiAK
ICAgICB2b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGQ4MTQxNDljNTRiMDUzZWNlYTZmY2FlMDU2MjQ0
NDhkZDMxMWQ5MTEuLjY4ZjBmNTAzZjUzYzFjZjU1YWQ4ODg3NWZiNzI0N2ExNTJmYjk1ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC03MywxMyArNzMsMTUgQEAgc3RydWN0IEND
U2V0dGluZ3MgewogICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCiAgICAg
ICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNo
b3dGUFNDb3VudGVyKGZhbHNlKQotICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUo
ZmFsc2UpIHsgfQorICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisg
ICAgICAgICAgICAsIHVzZURhbWFnZVRyYWNrZXIoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBhY2Nl
bGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CiAgICAgYm9vbCBl
bmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9v
bCBzaG93UGxhdGZvcm1MYXllclRyZWU7CisgICAgYm9vbCB1c2VEYW1hZ2VUcmFja2VyOwogfTsK
IAogLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1wbCdzIHJlbmRlcmluZyBjYXBhYmls
aXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcAppbmRleCBjYjM4ZmE4NjBjZTdiN2M4YWEyZmMxYjcxODkyODUwZTVkYWM1MWJkLi4x
MjEyNzJjODk1NGM1ZDlmNDAyNTVlODBiN2YxMzJmMjcxZGUyZDFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDYs
NiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCog
b3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCiAgICAg
LCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2VyID0gQ0NEYW1hZ2VUcmFj
a2VyOjpjcmVhdGUodGhpcyk7CiB9CiAKIENDUmVuZGVyU3VyZmFjZTo6fkNDUmVuZGVyU3VyZmFj
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDRiZDRhZjg1ODE5NDI2OGNmMGM4
NWQzYTZhMGQyZDQwOWUwZWJjZDguLmIxY2Q5ZjNjOTE3YzE5OTJkOTMzMWY2YTI1ZWY3Y2IwMjhi
ZWNjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NM
YXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4
dHVyZTsKQEAgLTEwMSw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFByb3BlcnR5
Q2hhbmdlZEZsYWcoKSB7IG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCA9IGZhbHNlOyB9CiAgICAg
Ym9vbCBzdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkgY29uc3Q7CiAKKyAgICBDQ0RhbWFnZVRyYWNr
ZXIqIGRhbWFnZVRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBtX2RhbWFnZVRyYWNrZXIuZ2V0KCk7
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
LCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+CkBAIC0xMjAsNiArMTIzLDExIEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0Owog
ICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7CisKKyAgICBPd25Q
dHI8Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNrZXI7CisKKyAgICAvLyBTdG9yZWQgaW4g
dGhlICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Np
c3NvcmluZy4KKyAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMGY1OThlNzhhOTg2ODgzMWU4MmEyZjVjODgyZDRmMzg0
Y2ZiYzYwNS4uMjgzZGM2ZjlmN2NlY2VlMzU4YjA0YjBjZTdkNzU3NTMzY2RmMmVlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICd3ZWJr
aXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVy
cy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAor
ICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q0xheWVySW1wbFRlc3QuY3BwJywKQEAgLTYxLDYgKzYyLDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9u
LmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlOWI2
NDM3ZDFlMjkyZDc2ZWZjY2M2OWJjYTY1NzkwNGM3ZTEyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC0w
LDAgKzEsNTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENv
bW1vbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clNvcnRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1
ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgZXhlY3V0ZUNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9y
PFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBD
Q0xheWVyU29ydGVyIGxheWVyU29ydGVyOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBTYW5pdHkg
Y2hlY2s6IFRoZSB0ZXN0IGl0c2VsZiBzaG91bGQgY3JlYXRlIHRoZSByb290IGxheWVyJ3MgcmVu
ZGVyIHN1cmZhY2UsIHNvCisgICAgLy8gICAgICAgICAgICAgICB0aGF0IHRoZSBzdXJmYWNlIChh
bmQgaXRzIGRhbWFnZSB0cmFja2VyKSBjYW4gcGVyc2lzdCBhY3Jvc3MgbXVsdGlwbGUKKyAgICAv
LyAgICAgICAgICAgICAgIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgQVNTRVJUX1RSVUUo
cm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOworCisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVy
TGlzdCgpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7Cit9CisKK3ZvaWQgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShDQ0xheWVySW1wbCogcm9v
dCkKK3sKKyAgICAvLyBUaGlzIGVtdWxhdGVzIG9ubHkgdGhlIHN0ZXBzIHRoYXQgYXJlIHJlbGV2
YW50IHRvIHRlc3RpbmcgdGhlIGRhbWFnZSB0cmFja2VyOgorICAgIC8vICAgMS4gY29tcHV0aW5n
IHRoZSByZW5kZXIgcGFzc2VzIGFuZCBsYXllcmxpc3RzCisgICAgLy8gICAyLiB1cGRhdGluZyBh
bGwgZGFtYWdlIHRyYWNrZXJzIGluIHRoZSBjb3JyZWN0IG9yZGVyCisgICAgLy8gICAzLiByZXNl
dHRpbmcgYWxsIHVwZGF0ZVJlY3RzIGFuZCBwcm9wZXJ0eUNoYW5nZWQgZmxhZ3MgZm9yIGFsbCBs
YXllcnMgYW5kIHN1cmZhY2VzLgorCisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocm9vdCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKKyAgICAvLyBp
dGVyYXRlIGJhY2stdG8tZnJvbnQsIHNvIHRoYXQgZGFtYWdlIGNvcnJlY3RseSBwcm9wYWdhdGVz
IGZyb20gZGVzY2VuZGFudCBzdXJmYWNlcyB0byBhbmNlc3RvcnMuCisgICAgZm9yIChpbnQgaSA9
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbaV0tPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKCk7CisKKyAgICByb290LT5yZXNldEFs
bENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworCisgICAgcm9vdC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUo
NTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMC4wZiwgNTAwLjBmKSkpOwor
CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLjBmLCAxMDAuMGYpKTsKKyAg
ICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisKKyAgICByZXR1cm4g
cm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZVRlc3RU
cmVlV2l0aFR3b1N1cmZhY2VzKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgdHJlZSBoYXMgdHdvIHJl
bmRlciBzdXJmYWNlczogb25lIGZvciB0aGUgcm9vdCwgYW5kIG9uZSBmb3IKKyAgICAvLyBjaGls
ZDEuIEFkZGl0aW9uYWxseSwgdGhlIHJvb3QgaGFzIGEgc2Vjb25kIGNoaWxkIGxheWVyLCBhbmQg
Y2hpbGQxIGhhcyB0d28KKyAgICAvLyBjaGlsZHJlbiBvZiBpdHMgb3duLgorCisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDUp
OworCisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRT
aXplKDUwMC4wZiwgNTAwLjBmKSkpOworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDEwMC4wZiwgMTAwLjBmKSk7CisgICAgY2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6ZSgzMCwg
MzApKTsKKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41Zik7IC8vIHdpdGggYSBjaGlsZCB0aGF0
IGRyYXdzQ29udGVudCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBjcmVhdGUgaXRzIG93
biByZW5kZXJTdXJmYWNlLgorICAgIGNoaWxkMS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsgLy8g
dGhpcyBsYXllciBkb2VzIG5vdCBkcmF3LCBidXQgaXMgaW50ZW5kZWQgdG8gY3JlYXRlIGl0cyBv
d24gcmVuZGVyU3VyZmFjZS4KKworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgx
MS4wZiwgMTEuMGYpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDE4LCAxOCkpOwor
ICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZDEtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLjBmLCAyMDAuMGYpKTsKKyAgICBncmFuZENoaWxkMS0+
c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQxLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTAu
MGYsIDE5MC4wZikpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7
CisgICAgZ3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNoaWxkMS0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIp
OworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisK
KyAgICAvLyBTZXR1cCBpbmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3aGljaCBh
bHdheXMgZGFtYWdlcyBldmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFjdHVhbGx5
IHBlcmZvcm0gc3BlY2lmaWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoVHdvU3VyZmFj
ZXMoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0IGZyYW1l
IHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3ZSBjYW4g
YWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitjbGFz
cyBDQ0RhbWFnZVRyYWNrZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJpdmF0ZToK
KyAgICAvLyBGb3IgdGVzdGluZyBwdXJwb3NlcywgZmFrZSB0aGF0IHdlIGFyZSBvbiB0aGUgaW1w
bCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7Cit9
OworCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJlZVdpdGhP
bmVTdXJmYWNlKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaW1wbGUgdGVzdCB0
cmVlIHdpbGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAgLy8gc3Vy
ZmFjZXMgYW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICBFWFBFQ1RfRVEo
Miwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVD
VF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQo
KSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoLTI1MC4wZiwgLTI1MC4wZiwgNTAwLjBmLCA1MDAuMGYpLCBy
b290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlD
aGVja1Rlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0
IHRoZSBjb21wbGV4IHRlc3QgdHJlZSB3aWxsIGFjdHVhbGx5IHByb2R1Y2UgdGhlIGV4cGVjdGVk
IHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBsYXllciBsaXN0cy4KKworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMo
KTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07
CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMywgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUSgyLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6
ZSgpKTsKKworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBmb3IgY2hpbGQxIG9ubHkgaGFzIGEg
Y29udGVudFJlY3QgdGhhdCBlbmNsb3NlcyBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIsIGJl
Y2F1c2UgY2hpbGQxIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYsIDE2LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdl
UmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KC0yNTAuMGYsIC0yNTAu
MGYsIDUwMC4wZiwgNTAwLjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZh
Y2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hvdWxkIGNhdXNl
IHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAgICAvLworICAgIGNo
aWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBmLCAxMy4wZikp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1h
Z2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgxMCwgMTEpIHBs
dXMgcG9zaXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41IGxheWVyV2lkdGgpIHRyYW5zbGF0
ZWQgdG8gc3VyZmFjZSBzcGFjZSAoLTAuNSBzdXJmYWNlV2lkdGgpLgorICAgIGZsb2F0IHRhcmdl
dFNwYWNlRGFtYWdlWCA9IDEwLjBmICsgMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgZmxv
YXQgdGFyZ2V0U3BhY2VEYW1hZ2VZID0gMTEuMGYgKyAxMDAuMGYgLSAxNS4wZiAtIDI1MC4wZjsK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFnZVksIDEy
LjBmLCAxMy4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogVGhlIHNhbWUg
dXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVjZXMgdGhlIHNhbWUgZGFtYWdl
LgorICAgIC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLjBmLCAxMS4w
ZiwgMTIuMGYsIDEzLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFtYWdlWSwgMTIuMGYsIDEz
LjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0aW5nIGEgZGlmZmVy
ZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5ldyB1cGRhdGUgcmVn
aW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCByZWdpb24uCisgICAgLy8KKyAgICBj
aGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAxLjBmLCAyLjBmKSk7
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIERhbWFn
ZSBwb3NpdGlvbiBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDIwLCAyNSkgcGx1
cyBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQb3MgLSAwLjUgbGF5ZXJXaWR0aCkgdHJhbnNsYXRl
ZCB0byBzdXJmYWNlIHNwYWNlICgtMC41IHN1cmZhY2VXaWR0aCkuCisgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICB0YXJnZXRTcGFjZURhbWFnZVggPSAyMC4wZiArIDEwMC4wZiAtIDE1LjBm
IC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDI1LjBmICsgMTAwLjBmIC0gMTUu
MGYgLSAyNTAuMGY7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KHRhcmdldFNw
YWNlRGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAxLjBmLCAyLjBmKSwgcm9vdERhbWFnZVJl
Y3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUHJv
cGVydHlDaGFuZ2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFu
ZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgLy8gQ0FTRSAxOiBUaGUgbGF5ZXIn
cyBwcm9wZXJ0eSBjaGFuZ2VkIGZsYWcgdGFrZXMgcHJpb3JpdHkgb3ZlciB1cGRhdGUgcmVjdC4K
KyAgICAvLworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYs
IDEyLjBmLCAxMy4wZikpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgLSB3
ZSBzaG91bGQgbm90IGhhdmUgYWNjaWRlbnRhbGx5IGNyZWF0ZWQgYSBzZXBhcmF0ZSByZW5kZXIg
c3VyZmFjZSBmb3IgdGhlIHRyYW5zbHVjZW50IGxheWVyLgorICAgIEFTU0VSVF9FUSgyLCByb290
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBEYW1hZ2Ug
cG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQb3MgLSAwLjUgKiBs
YXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ugc3BhY2UgKC0gMC41ICogc3VyZmFjZVdp
ZHRoKS4KKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFnZVggPSAxMDAuMGYgLSAxNS4wZiAtIDI1
MC4wZjsKKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFnZVkgPSAxMDAuMGYgLSAxNS4wZiAtIDI1
MC4wZjsKKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KHRhcmdldFNwYWNl
RGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAzMC4wZiwgMzAuMGYpOworICAgIEZsb2F0UmVj
dCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVk
UmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiBhIGxheWVyIG1vdmVz
IGR1ZSB0byBwcm9wZXJ0eSBjaGFuZ2UsIGl0IGRhbWFnZXMgYm90aCB0aGUgbmV3IGxvY2F0aW9u
CisgICAgLy8gICAgICAgICBhbmQgdGhlIG9sZCAoZXhwb3NlZCkgbG9jYXRpb24uIFRoZSBvbGQg
bG9jYXRpb24gaXMgdGhlIGVudGlyZSBvbGQgbGF5ZXIsCisgICAgLy8gICAgICAgICBub3QganVz
dCB0aGUgdXBkYXRlUmVjdC4KKworICAgIC8vIEZpcnN0LCBkbyBvbmUgZnJhbWUgd2hlcmUgb25s
eSB0aGUgdXBkYXRlIHJlY3QgY2F1c2VzIGRhbWFnZS4KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVj
dChGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAxLjBmLCAyLjBmKSk7CisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBs
YXllciBtb3ZlbWVudC4KKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAuMGYs
IDIzMC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBEYW1hZ2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQ
b3MgLSAwLjUgKiBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ugc3BhY2UgKC0wLjUg
KiBzdXJmYWNlV2lkdGgpLgorICAgIHRhcmdldFNwYWNlRGFtYWdlWCA9IDIwMC4wZiAtIDE1LjBm
IC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDIzMC4wZiAtIDE1LjBmIC0gMjUw
LjBmOworCisgICAgLy8gRXhwZWN0IGRhbWFnZSB0byBiZSB0aGUgY29tYmluYXRpb24gb2YgdGhl
IHByZXZpb3VzIG9uZSBhbmQgdGhlIG5ldyBvbmUuCisgICAgZXhwZWN0ZWRSZWN0LnVuaXRlSWZO
b25aZXJvKEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFtYWdlWSwg
MzAuMGYsIDMwLjBmKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShleHBlY3RlZFJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nTGF5ZXIp
Cit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJl
ZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290
LT5jaGlsZHJlbigpWzBdOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0
MDAuMGYsIDM4MC4wZikpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOwor
ICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgLy8gQ0FTRSAxOiBBZGRp
bmcgYSBuZXcgbGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCisgICAg
Ly8KKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgLSBhbGwgMyBsYXllcnMgc2hv
dWxkIGJlIG9uIHRoZSBzYW1lIHJlbmRlciBzdXJmYWNlOyByZW5kZXIgc3VyZmFjZXMgYXJlIHRl
c3RlZCBlbHNld2hlcmUuCisgICAgQVNTRVJUX0VRKDMsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIEZsb2F0UmVjdCBleHBlY3RlZFJlY3QgPSBGbG9h
dFJlY3QoNDAwLjBmIC0gMy4wZiAtIDI1MC4wZiwgMzgwLjBmIC0gNC4wZiAtIDI1MC4wZiwgNi4w
ZiwgOC4wZik7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBD
QVNFIDI6IElmIHRoZSBsYXllciBpcyByZW1vdmVkLCBpdHMgZW50aXJlIG9sZCBsYXllciBiZWNv
bWVzIGV4cG9zZWQsIG5vdCBqdXN0IHRoZQorICAgIC8vICAgICAgICAgbGFzdCB1cGRhdGUgcmVj
dC4KKworICAgIC8vIEZpcnN0LCBkbyBvbmUgZnJhbWUgd2hlcmUgb25seSB0aGUgdXBkYXRlIHJl
Y3QgY2F1c2VzIGRhbWFnZS4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEu
MGYsIDIuMGYsIDMuMGYsIDQuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworCisgICAgLy8gVGhlbiwgdGVzdCBsYXllciByZW1vdmFsCisgICAgY2hpbGQxLT5y
ZW1vdmVGcm9tUGFyZW50KCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCgtMTY1LjBmLCAtMTY1LjBmLCAzMC4wZiwgMzAuMGYpLCByb290RGFtYWdlUmVjdCk7
Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNdWx0aXBs
ZUxheWVycykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRV
cFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50KDQwMC4wZiwgMzgwLjBmKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2
LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoY2hpbGQyKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCB3ZSBkb24ndCB3YW50IHRoZSBh
Ym92ZSB0cmVlIG1hbmlwdWxhdGlvbiB0byBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNhbWUg
ZnJhbWUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8v
IERhbWFnaW5nIHR3byBsYXllcnMgc2ltdWx0YW5lb3VzbHkgc2hvdWxkIGNhdXNlIGNvbWJpbmVk
IGRhbWFnZS4KKyAgICAvLyAtIGNoaWxkMSB1cGRhdGUgcmVjdCBpbiBzdXJmYWNlIHNwYWNlOiBG
bG9hdFJlY3QoLTE2NS4wZiwgLTE2NS4wZiwgMS4wZiwgMi4wZik7CisgICAgLy8gLSBjaGlsZDIg
dXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KCAxNDcuMGYsIDEyNi4wZiwg
My4wZiwgNC4wZik7CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLjBmLCAw
LjBmLCAxLjBmLCAyLjBmKSk7CisgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCAzLjBmLCA0LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTE2NS4wZiwgLTE2NS4wZiwgMzE1LjBmLCAyOTUuMGYp
LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JOZXN0ZWRTdXJmYWNlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4oKVsw
XTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFt
YWdlUmVjdDsKKworICAgIC8vIENBU0UgMTogRGFtYWdlIHRvIGEgZGVzY2VuZGFudCBzdXJmYWNl
IHNob3VsZCBwcm9wYWdhdGUgcHJvcGVybHkgdG8gYW5jZXN0b3Igc3VyZmFjZS4KKyAgICAvLwor
ICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290
RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJy
ZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSBjaGlsZDEgc3VyZmFjZSBz
aG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNhc2UgZHVyaW5nIHNldHVwLgorICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTcuMGYsIDE5Ni4wZiwgNi4wZiwgOC4w
ZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBkYW1hZ2UgdG8gdGhlIHJvb3Qgc3VyZmFj
ZSBzaG91bGQgYmUgaW4gdGhlIHJvb3Qgc3VyZmFjZSdzIHNwYWNlICh3aGVyZSB0aGUgb3JpZ2lu
CisgICAgLy8gaXMgY2VudGVyZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgc3VyZmFjZS4pCisgICAg
Ly8gU28gaGVyZSwgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgcm9vdCBzdXJmYWNlIGlzICgt
MjUwLCAtMjUwKTsgYW5kIHRoZW4gdGhlCisgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhbWFnZSBy
ZWN0IGlzIC0yNTAgKyBjaGlsZFBvc2l0aW9uIC0gMC41ICogY2hpbGRXaWR0aCArIGdyYW5kQ2hp
bGRQb3NpdGlvbiAtIDAuNSAqIGdyYW5kQ2hpbGRXaWR0aC4KKyAgICBmbG9hdCByb290U3BhY2VE
YW1hZ2VYID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMjAwLjBmIC0gMy4wZjsKKyAgICBm
bG9hdCByb290U3BhY2VEYW1hZ2VZID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMjAwLjBm
IC0gNC4wZjsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3Qocm9vdFNwYWNlRGFt
YWdlWCwgcm9vdFNwYWNlRGFtYWdlWSwgNi4wZiwgOC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIENBU0UgMjogU2FtZSBhcyBwcmV2aW91cyBjYXNlLCBidXQgd2l0aCBhZGRpdGlvbmFs
IGRhbWFnZSBlbHNld2hlcmUgdGhhdCBzaG91bGQgYmUgcHJvcGVybHkgdW5pb25lZC4KKyAgICAv
LyAtIGNoaWxkMSByZW5kZXIgc3VyZmFjZSBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBG
bG9hdFJlY3QoMzIuMGYsIDMxLjBmLCA2LjBmLCA4LjBmKQorICAgIC8vIC0gY2hpbGQyIGRhbWFn
ZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgtMjQ4LjBmLCAtMjQ4LjBmLCAxOC4w
ZiwgMTguMGYpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuN2YpOworICAgIGNoaWxk
Mi0+c2V0T3BhY2l0eSgwLjdmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSBy
b290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKKworICAgIC8vIGRhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSBz
YW1lIGFzIHRoZSBvcmlnaW5hbCBjYXNlIGR1cmluZyBzZXR1cC4KKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMTk3LjBmLCAxOTYuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFn
ZVJlY3QpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJlIHRo
ZSB1bmlvbiBvZiBjaGlsZDEncyByZW5kZXIgc3VyZmFjZSwgYW5kIGNoaWxkMidzIGxheWVyLgor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgtMjQ4LjBmLCAtMjQ4LjBmLCAyODYu
MGYsIDI4Ny4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tRGVzY2VuZGFudExheWVyKQor
eworICAgIC8vIEEgZGVzY2VuZGFudCBsYXllciBjaGFuZ2VzLCB3aGljaCBhZmZlY3RzIHRoZSBj
b250ZW50IGJvdW5kcyBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCisgICAgLy8gVGhlIGVudGlyZSBz
dXJmYWNlIGFyZWEgc2hvdWxkIGRhbWFnZSBpdHMgYW5jZXN0b3Igc3VyZmFjZS4KKworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3Vy
ZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVu
KClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNoaWxk
cmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBncmFuZENoaWxkMS0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgxOTUuMGYsIDE5NS4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290
RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJy
ZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gRGFtYWdlIHRvIHRoZSBjaGlsZDEgc3VyZmFjZSBz
aG91bGQgYmUgdGhlIG5ldyBsYXllciBwbHVzIHRoZSBvbGQgZXhwb3NlZCBhcmVhLgorICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTIuMGYsIDE5MS4wZiwgMTEuMGYsIDEzLjBm
KSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIERhbWFnZSB0byB0aGUgcm9vdCBzdXJmYWNl
IHNob3VsZCBiZSB0aGUgdW5pb24gb2YgY2hpbGQxJ3MgKmVudGlyZSogcmVuZGVyIHN1cmZhY2Us
CisgICAgLy8gYW5kIGl0cyBvbGQgZXhwb3NlZCBhcmVhLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGJv
dW5kcyBvZiB0aGUgcmVuZGVyIHN1cmZhY2UgaXRzZWxmCisgICAgLy8gaGF2ZSBjaGFuZ2VkIGJl
Y2F1c2Ugb2YgdGhlIGdyYW5kQ2hpbGQuCisgICAgZmxvYXQgdGFyZ2V0U3VyZmFjZVggPSAtMjUw
LjBmICsgMTAwLjBmIC0gMTUuMGYgKyAxOTAuMGYgLSAzLjBmOworICAgIGZsb2F0IHRhcmdldFN1
cmZhY2VZID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gNC4wZjsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3VyZmFjZVgsIHRhcmdldFN1cmZh
Y2VZLCAxNi4wZiwgMTguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2VzdG9yTGF5
ZXIpCit7CisgICAgLy8gQW4gYW5jZXN0b3Ivb3duaW5nIGxheWVyIGNoYW5nZXMgdGhhdCBhZmZl
Y3RzIHRoZSBwb3NpdGlvbi90cmFuc2Zvcm0gb2YgdGhlIHJlbmRlcgorICAgIC8vIHN1cmZhY2Uu
IE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBsYXllclByb3BlcnR5Q2hhbmdlZCBmbGFnIGFs
cmVhZHkgcHJvcGFnYXRlcworICAgIC8vIHRvIHRoZSBzdWJ0cmVlICh0ZXN0ZWQgZWxzd2hlcmUp
LCB3aGljaCBkYW1hZ2VzIHRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgLS0gYnV0CisgICAgLy8g
dGhlIGRhbWFnZSB0cmFja2VyIHN0aWxsIG5lZWRzIHRoZSBjb3JyZWN0IGxvZ2ljIHRvIGNvbXB1
dGUgdGhlIGV4cG9zZWQgcmVnaW9uIG9uCisgICAgLy8gdGhlIHJvb3Qgc3VyZmFjZS4KKworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxk
cmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNo
aWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVj
dDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBjaGlsZDEtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoNTAuMGYsIDUwLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisKKyAgICAvLyBFeHBlY3QgdGhlIHVuaW9uIG9mIGdyYW5kQ2hpbGQxIGFu
ZCBncmFuZENoaWxkMgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxODcuMGYs
IDE4Ni4wZiwgMTYuMGYsIDE4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIGZsb2F0IHRh
cmdldFN1cmZhY2VYID0gLTI1MC4wZiArIDUwLjBmIC0gMTUuMGYgKyAxOTAuMGYgLSAzLjBmOwor
ICAgIGZsb2F0IHRhcmdldFN1cmZhY2VZID0gLTI1MC4wZiArIDUwLjBmIC0gMTUuMGYgKyAxOTAu
MGYgLSA0LjBmOworCisgICAgLy8gVGhlIGVudGlyZSBjaGlsZDEgc3VyZmFjZSBhbmQgdGhlIG9s
ZCBleHBvc2VkIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBkYW1hZ2UgdGhlIHJvb3Qgc3VyZmFjZQor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCh0YXJnZXRTdXJmYWNlWCwgdGFyZ2V0
U3VyZmFjZVksIDY2LjBmLCA2OC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nUmVuZGVy
U3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0
VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBDQ0RhbWFnZVRyYWNrZXIqIHJvb3REYW1h
Z2VUcmFja2VyID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCk7CisgICAg
RmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7
CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OworCisgICAgLy8gQ0FTRSAxOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBkaXNhcHBlYXJzLCBp
dHMgZW50aXJlIG9sZCBhcmVhIGJlY29tZXMgZXhwb3NlZC4KKyAgICAvLworICAgIGNoaWxkMS0+
c2V0T3BhY2l0eSgxLjBmKTsKKworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBzdXJmYWNl
IG5vdy4KKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVY
UEVDVF9FUSg0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjIuMGYsIDIxLjBmLCAxNi4wZiwg
MTguMGYpLCByb290RGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKSk7CisKKyAgICAv
LyBDQVNFIDI6IElmIGEgZGVzY2VuZGFudCBzdXJmYWNlIGFwcGVhcnMsIGl0cyBlbnRpcmUgb2xk
IGFyZWFkIGJlY29tZXMgZXhwb3NlZC4KKworICAgIC8vIEN5Y2xlIG9uZSBmcmFtZSBvZiBubyBj
aGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5leHQgcmVjdCBpcyBub3QgYmVj
YXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VUcmFja2VyLT5jdXJyZW50
RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIGNoYW5nZSB0aGUgdHJlZSBz
byB0aGF0IHRoZSByZW5kZXIgc3VyZmFjZSBpcyBhZGRlZCBiYWNrLgorICAgIGNoaWxkMS0+c2V0
T3BhY2l0eSgwLjVmKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisKKyAg
ICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNo
ZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUSgzLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGNoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgQ0NEYW1hZ2VUcmFja2Vy
KiBjaGlsZERhbWFnZVRyYWNrZXIgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkRGFtYWdlVHJhY2tlci0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxODcu
MGYsIDE4Ni4wZiwgMTYuMGYsIDE4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjIuMGYsIDIxLjBmLCAxNi4wZiwgMTguMGYpLCByb290
RGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKSk7Cit9CisKK1RFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdlZCkKK3sKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1
cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJl
bigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBObyBjaGFuZ2VzIHNob3VsZCBwcm9kdWNl
IGFuIGVtcHR5IGRhbWFnZSByZWN0LgorICAgIC8vCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAgIC8vIENB
U0UgMjogTm8gY2hhbmdlcyB0d2ljZSBpbiBhIHJvdyBzaG91bGQgc3RpbGwgcHJvZHVjZSBlbXB0
eSBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZUZvclVwZGF0ZVJlY3RUaGF0RG9lc05vdERyYXdD
b250ZW50KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVw
VGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBJbiBvdXIgc3BlY2lmaWMg
dHJlZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNoaWxkMSBzaG91bGQgbm90IGNhdXNlIGFueSBkYW1h
Z2UgdG8gYW55CisgICAgLy8gc3VyZmFjZSBiZWNhdXNlIGl0IGRvZXMgbm90IGFjdHVhbGx5IGRy
YXcgY29udGVudC4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAuMGYsIDAu
MGYsIDEuMGYsIDIuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClbMF07Cisg
ICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJl
Y3Q7CisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0OworCisgICAgLy8gRGFtYWdl
IG9uIGEgc3VyZmFjZSB0aGF0IGhhcyBhIHJlZmxlY3Rpb24gc2hvdWxkIGNhdXNlIHRoZSB0YXJn
ZXQgc3VyZmFjZSB0bworICAgIC8vIHJlY2VpdmUgdGhlIHN1cmZhY2UncyBkYW1hZ2UgYW5kIHRo
ZSBzdXJmYWNlJ3MgcmVmbGVjdGVkIGRhbWFnZS4KKworCisgICAgLy8gU2V0IHVwIGEgcmVmbGVj
dGlvbiBhYm91dCAxIHVuaXQgYmV5b25kIHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEuIFRo
aXMgd2lsbCBub3QKKyAgICAvLyBjaGFuZ2UgdGhlIGNvbnRlbnRCb3VuZHMgb2YgY2hpbGQxLCBz
byB0aGF0IHdlIGNhbiBpc29sYXRlIHRoZSByZWZsZWN0aW9uIGRhbWFnZQorICAgIC8vIHRlc3Rp
bmcuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDYpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCgtMS4wZiwgMC4wZikpOyAvLyBpbXBsaWNpdGx5IGluY2x1ZGVzIHRoZSBhbmNob3Ig
d2hlcmUgdGhlIHJlZmxlY3Rpb24gaXMgY2VudGVyZWQKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByZWZsZWN0aW9uOworICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAsIDEuMCk7Cisg
ICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlvbik7CisgICAgZ3Jh
bmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcihncmFuZENoaWxkMVJlcGxpY2EpOworCisgICAgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGF0IHRoZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMgd2VyZSBjcmVhdGVkCisgICAg
QVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBDQ0RhbWFn
ZVRyYWNrZXIqIGdyYW5kQ2hpbGREYW1hZ2VUcmFja2VyID0gZ3JhbmRDaGlsZDEtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpOworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3Jh
bmRDaGlsZERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBDQ0RhbWFn
ZVRyYWNrZXIqIGNoaWxkRGFtYWdlVHJhY2tlciA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGREYW1hZ2VUcmFja2Vy
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIENDRGFtYWdlVHJhY2tlciogcm9vdERhbWFnZVRy
YWNrZXIgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKworICAgIC8v
IFRoZSBncmFuZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNob3VsZCBub3QgaW5jbHVkZSBpdHMgb3du
IHJlcGxpY2EuCisgICAgLy8gRklYTUU6IHRoaXMgKDAsMCkgZG9lc24ndCBmZWVsIHJpZ2h0LiBz
aG91bGRuJ3QgaXQgYmUgdGhlIHNwYWNlIHdoZXJlIHRoZSBvcmlnaW4gaXMgYXQgdGhlIGNlbnRl
cj8KKyAgICAvLyAgICAgICAgaXQgc2VlbXMgbGlrZSB0aGUgImNlbnRlciIgaW5jbHVkZXMgdGhl
IHJlZmxlY3Rpb24uCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAu
MGYsIDYuMGYsIDguMGYpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBUaGUgY2hp
bGQgc3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIG5vcm1hbCBhbmQgcmVwbGljYSBz
dXJmYWNlcy4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LjBmLCAxOTYu
MGYsIDE0LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcApp
bmRleCA5NDJiZWMyZjcxM2EyODQ1MjFiYWE5NDNlY2NjNDRlMjBiOGFjNWZmLi41ZmMyNWVhYjBi
MDZmODVhYTk5M2M5YmIyZjc4ZDFhZjQ3NzcyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgewogCiAjZGVmaW5lIEVYRUNVVEVfQU5E
X1ZFUklGWV9TVUJUUkVFX0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAgICAgICAgICAgICBcCi0g
ICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRy
ZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVY
UEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX1NV
QlRSRUVfRElEX05PVF9DSEFOR0UoY29kZVRvVGVzdCkgICAgICAgICAgIFwKLSAgICByb290LT5y
ZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNF
KHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQtPmxheWVyUHJv
cGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX09OTFlfTEFZRVJf
Q0hBTkdFRChjb2RlVG9UZXN0KSAgICAgICAgICAgICAgIFwKLSAgICByb290LT5yZXNldFByb3Bl
cnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUocm9vdC0+bGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQ
RUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0xMTUsNyArMTE1LDcgQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlm
eUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllf
T05MWV9MQVlFUl9DSEFOR0VEKHJvb3QtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6Z3JheSkp
OwogCiAgICAgLy8gU3BlY2lhbCBjYXNlOiBjaGVjayB0aGF0IHN1YmxheWVyIHRyYW5zZm9ybSBj
aGFuZ2VzIGFsbCBsYXllcidzIGRlc2NlbmRhbnRzLCBidXQgbm90IHRoZSBsYXllciBpdHNlbGYu
Ci0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIHJv
b3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAgICAgcm9vdC0+c2V0U3Vi
bGF5ZXJUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKTsKICAgICBFWFBFQ1RfRkFMU0Uocm9v
dC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY2hpbGQtPmxheWVy
UHJvcGVydHlDaGFuZ2VkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggYmQ1YTc0OWI3NzJm
ZDM5OWZhYThjN2RmODdjNDU1ODQ2YjgwMDdjMS4uZmE0YjRkOWI1ZGU5NzM2ZjE1MDBjM2U4Mjhi
MjBkYWVmZjY2NDZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKIAorI2luY2x1ZGUgIkNDTGF5
ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zNiwyNyArMzcsNiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotLy8gVGhpcyBpcyBhIG1hY3JvIGluc3Rl
YWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUgdXMgdXNl
ZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QuCi0vLyBFdmVuIHRob3Vn
aCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJlIG1hbnkg
b3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQotLy8gb25seSBleHBl
Y3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCi0j
ZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwpICAgIFwK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTExKCkpOyAg
XAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIoKSk7
ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwpLm0xMygp
KTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVhbCkubTE0
KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0dWFsKS5t
MjEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChhY3R1YWwp
Lm0yMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwgKGFjdHVh
bCkubTIzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAoYWN0
dWFsKS5tMjQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMxKCksIChh
Y3R1YWwpLm0zMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzIoKSwg
KGFjdHVhbCkubTMyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMygp
LCAoYWN0dWFsKS5tMzMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTM0
KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
NDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCi0KIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgbGF5ZXItPnNl
dFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMTIwLDEyICsxMDAsMTIgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9PcExheWVyKQogCiAgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkp
OwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVu
dC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVu
dGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShp
ZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0
eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgs
IGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclNpbmdsZUxheWVyKQpAQCAtMTQ0LDggKzEyNCw4IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGFyYml0
cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4wKTsKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgYXJiaXRyYXJ5VHJh
bnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5
TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CiAKICAgICAvLyBDYXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIgc2hv
dWxkIHJlc3VsdCBpbiBhIGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBoYWxmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0LgogICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFjZSB0cmFu
c2Zvcm0gc2hvdWxkIHJlbWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9lcyBub3Qg
ZGVhbCB3aXRoIHRyYW5zZm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgpA
QCAtMTUzLDIyICsxMzMsMjIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgdHJhbnNsYXRpb25Ub0NlbnRlci50cmFu
c2xhdGUoNS4wLCA2LjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAg
ICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQo
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwg
bGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRl
bnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENh
c2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXllciB0cmFuc2Zv
cm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBm
KSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0g
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDogQSBjaGFuZ2UgaW4gImFjdHVhbCIg
cG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQgc2NyZWVuIHNwYWNl
IHRyYW5zZm9ybS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRyYW5zZm9ybTsK
ICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDQuMmYp
LCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBvc2l0aW9u
VHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKIAogICAgIC8vIENhc2UgNTogSW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNm
b3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJlLW11bHRpcGx5IHRoZSB0cmFuc2xh
dGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQgYnkKICAgICAvLyAgICAgICAgIHVz
aW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxlIGFuZCB0cmFuc2xhdGlvbiBhcmUg
bm90IGNvbW11dGF0aXZlLgpAQCAtMTc2LDggKzE1Niw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGxheWVyVHJh
bnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAx
MiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRy
YW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtLCBsYXllci0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEobGF5ZXJUcmFuc2Zv
cm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNjogVGhl
IGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCByZXNwZWN0IHRvIHRoZSBhbmNob3Ig
cG9pbnQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0FuY2hvcjsKQEAg
LTE4NSw4ICsxNjUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3Rl
ZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQg
KiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6IFZlcmlmeSB0aGF0
IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCiAgICAgLy8gICAg
ICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwpAQCAtMTk0LDgg
KzE3NCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0ZvclNpbmdsZUxheWVyKQogICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25UcmFuc2Zvcm0g
KiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5j
aG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdl
dCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4w
ZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAg
IGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNs
YXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCkBAIC0yMTYsMTAgKzE5NiwxMCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1w
bGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRy
aXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1h
dHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRl
bnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBn
cmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwogCiAgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3NpdGlvbiBhZmZlY3RzIGNoaWxkIGFu
ZCBncmFuZENoaWxkLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFBvc2l0aW9uVHJh
bnNmb3JtOwpAQCAtMjI4LDEwICsyMDgsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50
U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhn
cmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwg
ZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3Np
dGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25U
cmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVy
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3NpdGlv
blRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFy
ZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0cyBjaGls
ZCBhbmQgZ3JhbmRjaGlsZAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJh
bnNmb3JtOwpAQCAtMjQzLDEwICsyMjMsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50
U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhn
cmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwg
ZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IHBhcmVudCdzIHN1YmxheWVyTWF0cml4IGFmZmVj
dHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICAvLyAgICAgICAgIHNjYWxpbmcgaXMgdXNlZCBo
ZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcyBpcyBw
cm9wZXJseSB0ZXN0ZWQuCkBAIC0yNjQsMTAgKzI0NCwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3
NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50
Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtICog
Z3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRlVHJh
bnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxk
VHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogc2FtZSBhcyBD
YXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJlc2VydmUgM0QsIHNvIHRoZSBncmFuZENo
aWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRlbmVkIGNvbXBvc2l0ZSB0cmFuc2Zvcm0u
CiAgICAgLy8KQEAgLTI3NSwxMCArMjU1LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIElu
dFNpemUoMTYsIDE4KSwgdHJ1ZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhn
cmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwg
ZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJh
bnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCkBAIC0zMjAsMTIgKzMwMCwxMiBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5k
ZXJTdXJmYWNlKQogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgZHJhdyB0cmFuc2Zvcm0gc2hv
dWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRoZXkgb25seSBkaWZmZXIgYnkg
YSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCiAgICAgLy8gVGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zv
cm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUgcm9vdC4KLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9yaWdpbiB0cmFuc2Zvcm0gYW5kIGRy
YXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSkgc2hvdWxkIGJlIHRoZSBzYW1l
LgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hp
bGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkpOwogCiB9CiAKQEAgLTQyMiwz
OCArNDAyLDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgLy8gIG5vdGUgdGhhdCBkcmF3IHRy
YW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG5lYXJlc3QgYW5jZXN0
b3IgcmVuZGVyIHN1cmZhY2UKICAgICAvLyAgYnV0IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm1zIGFy
ZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290LgogICAgIC8vCi0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+ZHJh
d1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEg
KiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgcGFy
ZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEg
KiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdUcmFu
c2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRv
Q2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzEt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEg
KiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9u
VG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJT
MS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRy
YW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMy
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
dHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVmVyaWZ5IGxheWVyIHNj
cmVlbi1zcGFjZSB0cmFuc2Zvcm1zCiAgICAgLy8KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBB
LCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIGNoaWxk
T2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBC
ICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMxLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICog
QiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCBy
ZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShB
ICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICog
QiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9m
UlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICog
QiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIEIgKiBB
ICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jtcy4KICAgICAvLwogICAgIC8vIE9y
aWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNjcmliZWQgd2l0aCByZXNw
ZWN0IHRvIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBLCBy
ZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIHJlbmRlclN1cmZhY2Ux
LT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICAvLyBPcmlnaW4gdHJh
bnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byBy
ZW5kZXIgc3VyZmFjZSAyLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBLCBy
ZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSwgcmVuZGVyU3VyZmFjZTItPnJl
bmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gU2FuaXR5IGNoZWNr
LiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0IGl0c2Vs
Zi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAgdHJhbnNm
b3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRl
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI4M2RhY2FiYTNjZmUwMWNhY2EzYWJhNTliZjc4NzY0YTdk
ZDFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorI2RlZmluZSBDQ0xheWVyVHJlZVRlc3RDb21t
b25faAorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCisvLyBUaGlzIGlzIGEgbWFjcm8gaW5z
dGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJl
IGEgdGVzdCBmYWlsZWQuCisjZGVmaW5lIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkLCBh
Y3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueCgpKTsgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5sb2Nh
dGlvbigpLnkoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkud2lk
dGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCkuaGVpZ2h0KCkpCisKKy8v
IFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNl
ZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gRXZlbiB0aG91Z2ggVHJh
bnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUgcHJlY2lzaW9uLCB0aGVyZSBhcmUg
bWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCB0aGF0IGFmZmVjdAorLy8gdGhl
IHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVw
IHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZpbmUgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgICAgICAgICAgXAorICAgIEVY
UEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIoKSk7ICAgICAgICAg
IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTMoKSwgKGFjdHVhbCkubTEzKCkp
OyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChhY3R1
YWwpLm0xNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0y
MSgpLCAoYWN0dWFsKS5tMjEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0yMygpKTsgICAgICAgICAgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7ICAgICAg
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCkubTMx
KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMyKCksIChh
Y3R1YWwpLm0zMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwpLm00MSgpKTsgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFjdHVhbCku
bTQzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQ0KCks
IChhY3R1YWwpLm00NCgpKQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gQ0NMYXllclRy
ZWVUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDcwNDU0NGI2YWRiMzNkM2EwZmZhMzVlOGU3NDJk
NDM3ZGMxZWZkZmUuLmMzYjM2NmRkYTMyMzc0Njg2ODZmYmY4M2VkNGZlMzM5MGY4MmYzMzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VU
ZXN0LmNwcApAQCAtNTksMTggKzU5LDE2IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgdmVy
aWZ5U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgQVNTRVJUX1RSVUUob3du
aW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlID0gb3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICBJbnRSZWN0IHRlc3RS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgzLCA0KSwgSW50U2l6ZSg1LCA2KSk7Ci0KLSAgICBvd25p
bmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93bmlu
Z0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8gQ3Vy
cmVudGx5LCB0aGUgY29udGVudFJlY3QsIGNsaXBSZWN0LCBhbmQgb3duaW5nTGF5ZXItPmxheWVy
UHJvcGVydHlDaGFuZ2VkKCkgYXJlCiAgICAgLy8gdGhlIG9ubHkgc291cmNlcyBvZiBjaGFuZ2Uu
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hBTkdFRChyZW5kZXJTdXJmYWNlLT5z
ZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0NI
QU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3QodGVzdFJlY3QpKTsKIAotICAgIG93
bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CiAgICAgb3du
aW5nTGF5ZXItPnNldE9wYWNpdHkoMC41Zik7CiAgICAgRVhQRUNUX1RSVUUocmVuZGVyU3VyZmFj
ZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKTsKLSAgICBvd25pbmdMYXllci0+cmVzZXRQcm9w
ZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93bmluZ0xheWVyLT5yZXNldEFsbENo
YW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8gU2V0dGluZyB0aGUgc3VyZmFjZSBw
cm9wZXJ0aWVzIHRvIHRoZSBzYW1lIHZhbHVlcyBhZ2FpbiBzaG91bGQgbm90IGJlIGNvbnNpZGVy
ZWQgImNoYW5nZSIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFO
R0UocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJlY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggZWQ5Y2Vj
Yjk2MzY2MTlhY2QyNWU0MDIwNTkxYWRhNmQzNjNhOTMxYi4uNzgwOWQxOGE0MzY3MGQ0OGFhNzg2
MWZiODcwNDY1NjI4NTkzZmEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDEwICsyNiwxMiBAQAogCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVz
aW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGluZzo6XzsKIHVzaW5nIDo6dGVzdGlu
Zzo6QXRMZWFzdDsKQEAgLTEzMiwxNCArMTM0LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICB2ZXJp
ZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwogICAgIH0KIAotICAgIHZvaWQgdmVyaWZ5RmxvYXRS
ZWN0c0FsbW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhwZWN0ZWQsIGNvbnN0IEZsb2F0UmVj
dCYgYWN0dWFsKSBjb25zdAotICAgIHsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVk
LmxvY2F0aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54KCkpOwotICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFjdHVhbC5sb2NhdGlvbigpLnkoKSk7
Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCkud2lkdGgoKSwgYWN0dWFs
LnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUo
KS5oZWlnaHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgfQotCiAgICAgTW9ja0xh
eWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0ZTsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQxLCBtX2NoaWxkMiwgbV9jaGlsZDMs
IG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3JhbmRDaGlsZDM7CiB9OwpAQCAtNTYy
LDI0ICs1NTYsMjQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlz
cGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIAogICAgIC8vIENhc2UgMTogYmFzaWMKICAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3Rz
QWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8g
Q2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9mIGRpcnR5MSBh
bmQgZGlydHkyLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwotICAg
IHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4w
ZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5n
ZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1
YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0
eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4w
ZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBDYXNl
IDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9u
ZCBpdHMgYm91bmRzCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZCb3VuZHNE
aXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEw
LjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5
Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA1OiBzZXROZWVk
c0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVu
dGlyZSBib3VuZHMgdG8gYmUgZGlydHksCiAgICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFueSBl
eGlzdGluZyBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwot
ICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5k
cy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lk
dGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAg
ICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQg
Tk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rp
c3BsYXkoKSk7CkBAIC01OTYsMTMgKzU5MCwxMyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKICAgICBGbG9hdFJlY3QgZGly
dHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAyLjBmKTsKIAogICAgIHRlc3RMYXll
ci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVh
bChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
NTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIHRlc3RMYXll
ci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0
eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5LCB0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eSwgdGVzdExheWVyLT5k
aXJ0eVJlY3QoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0
eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTY1Niw3ICs2NTAsNyBAQCBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZp
b3IpCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNw
bGF5CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVk
IGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwg
dGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxh
eSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115829</attachid>
            <date>2011-11-18 10:27:53 -0800</date>
            <delta_ts>2011-11-18 12:05:19 -0800</delta_ts>
            <desc>removed owning surface</desc>
            <filename>bug-72520-20111118102752.patch</filename>
            <type>text/plain</type>
            <size>90906</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMxNjk3NzM2N2ExNThj
MDYwNTI0MWM2ZWE0NmY0YjE2MTMxNDQ4My4uNjgxNDllODU3YTNjYWE0YjVjNWM3MzBkZDM5ODZj
MjRiOTA4NTkzNSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTE4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhBQ0tZU2Nyb2xsRml4KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFt
YWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6cmVtb3ZlUmVjdEZyb21Q
cmV2aW91c0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6c2F2ZVJl
Y3RGb3JOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRl
bmREYW1hZ2VGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4
dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZGFtYWdlVHJhY2tlcik6CisKIDIwMTEtMTEtMTcgIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
cGx1Z2lucy9nZXQtdXJsLW5vdGlmeS13aXRoLXVybC10aGF0LWZhaWxzLXRvLWxvYWQuaHRtbCBv
biBib3RzIGFmdGVyIHIxMDA0NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggODNhNmZk
MjNhZTg0N2U0MzE5NTc3M2Q3ZjIyNTQ3M2U3NGJkNjNhMy4uYzk5NTY1NmUxMWU4ZTU2NDRmMWMz
Njc4Mjg3NWY0NDQyMTA1YzJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMCBAQAorMjAxMS0xMS0xOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8g
ZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENDRGFtYWdlVHJhY2tlclRl
c3QgYW5kIHVwZGF0ZWQgb3RoZXIgdGVzdHMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6ZW11bGF0ZURyYXdpbmdPbmVGcmFtZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcyk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySW1w
bFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaDogQWRkZWQuCisgICAgICAgICog
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTEtMTEtMTcgIFZz
ZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUmVtb3ZlIG9ubGluZURldGVjdGlvbkVuYWJsZWQgZnJvbSBQcmVmZXJlbmNlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGZhNDMzYTkyNzcyOWQzMzc5YTI0YTQ0NWIxMzY1NjQyMjkyZDVhZGUu
LmVhNzllMjUxZTc2N2NkZDE0OTJiZTFlY2E3MDcyNTNhNjZmZjM1YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM1NDcsNiArMzU0Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGVsYXlCYXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZjZjNjJlZTkxNjllYWFk
ZTMxY2VhNTYxOWFjYThjMGEyYzBiOGI3My4uZDgxYjliMWM4ODFmMjlmMzA0ZjJiMzMwMWNhOGY2
YTg3MTFkZDc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01
Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NQcm94eS5oIgpAQCAtMzMxLDYgKzMzMiw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xh
CiAgICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7CiAgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOwogCisgICAgICAgICAgICBp
ZiAoc2V0dGluZ3MoKS51c2VEYW1hZ2VUcmFja2VyKQorICAgICAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5k
ZXJTdXJmYWNlKTsKKwogICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290
RHJhd0xheWVyKSB7CiAgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCkpOwpAQCAtMzQ1LDcgKzM0OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAg
fQogCiAgICAgLy8gVGhlIG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhp
bmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgotICAg
IHJvb3REcmF3TGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAg
ICByb290RHJhd0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogfQog
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhOWU3ZjQyOGIw
YzRiNjJlNGZiMDE3YzNmZWI5ZWVlMDc4M2MzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3Bw
CkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiB0aGlzIHNjcm9sbCBmaXggaXMg
bm90IGludGVuZGVkIHRvIGtlZXAsIGJ1dCBpcyByZXF1aXJlZCB0byBnZXQgdGhlCisvLyAgICAg
ICAgRGFtYWdlVHJhY2tlciB0byB3b3JrIHByb3Blcmx5IHdoaWxlIHdhaXRpbmcgZm9yIE5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdAorLy8gICAgICAgIHNjcm9sbGluZyB0byBiZSBmaXhlZC4gT25j
ZSBzY3JvbGxpbmcgaXMgZml4ZWQsIHdlIGNhbiByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQKKy8v
ICAgICAgICB1c2UgdGhlIG9yaWdpbmFsIHJlY3QgaW4gaXRzIHBsYWNlLgorc3RhdGljIEZsb2F0
UmVjdCBIQUNLWVNjcm9sbEZpeChDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBGbG9hdFJlY3Qgc2Nyb2xsZWRSZWN0ID0gcmVjdDsKKyAgICBpZiAobGF5
ZXItPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkKKyAgICAgICAgc2Nyb2xsZWRSZWN0Lm1vdmUo
LWxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSwgLWxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnko
KSk7CisgICAgcmV0dXJuIHNjcm9sbGVkUmVjdDsKK30KKworUGFzc093blB0cjxDQ0RhbWFnZVRy
YWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VUcmFja2VyOjpDQ0RhbWFnZVRy
YWNrZXIoKQorICAgIDogbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRleCgwKQoreworfQorCit2b2lk
IENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UpCit7CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNv
bXB1dGVzIHRoZSAiZGFtYWdlIHJlY3QiIG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UK
KyAgICAvLyByZWN0IGlzIHRoZSByZWdpb24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBj
aGFuZ2VkIGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQg
dG8gc2Npc3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlv
biBhbmQKKyAgICAvLyBiYW5kd2lkdGguCisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRh
bWFnZSByZWN0IGlzIGNvbXB1dGVkIGFzIHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdl
cyB0aGF0CisgICAgLy8gaGF2ZSBoYXBwZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFz
dCBmcmFtZSB3YXMgZHJhd24uIFRoaXMgaW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2Vz
IGZvciBleGlzdGluZyBsYXllcnMvc3VyZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJn
ZXQgc3VyZmFjZQorICAgIC8vICAgLSBsYXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRo
ZSBwcmV2aW91cyBmcmFtZSwgYnV0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRo
ZSBiYXNpYyBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBm
b2xsb3dzOgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2Vk
IGJ5IGNoYW5nZXMgaW4gYWN0aXZlL25ldyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBs
YXllciBpbiB0aGUgbGF5ZXJMaXN0OgorICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMg
YWN0dWFsbHkgYSByZW5kZXJTdXJmYWNlOgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBz
dXJmYWNlJ3MgZGFtYWdlIHRvIG91ciB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAg
ZWxzZQorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUg
dGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFn
ZSBjYXVzZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAg
IC8vICAgICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8vICAgICAgICAgICBhZGQg
dGhlIG9sZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0IHN1cmZhY2UgZGFtYWdl
LgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMy4gY29tYmluZSBib3RoIHBhcnRpYWwgZGFtYWdl
IHJlY3RzIHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIC8vIEFkZGl0
aW9uYWwgaW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhpcyBhbGdvcml0aG0g
aXMgaW1wbGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNjZW5kYW50IHN1cmZh
Y2VzIGhhdmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFtYWdlLgorICAgIC8v
CisgICAgLy8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0ZSAiZGFtYWdlIiB0
byB0aGUgdGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAgIG5vdCBjaGFuZ2Vk
LCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRyYXdpbmcuIEFsbCBs
YXllcnMgdGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdpb24gc3RpbGwgbmVl
ZCB0byBiZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAvLyAgIGNoYW5nZWQg
aXRzIG9wYWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSByZS1kcmF3biBhcyB3
ZWxsLCBldmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgorICAgIC8vCisgICAg
Ly8gLSBJZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhlIG9sZCBib3VuZHMg
YW5kIG5ldyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4gc29tZSBvZiB0aGUg
ZXhwb3NlZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBhbnl0aGluZy4gQnV0
IHRoaXMKKyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRlIHRoZSBkYW1hZ2Ug
cmVjdC4gSWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAvLyAgIG9sZCBib3Vu
ZHMgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVzcyBvZiBob3cgbXVj
aCBpdCBvdmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcgYm91bmRzLCB3aGlj
aCBhbHNvIG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLworICAgIC8vIC0gU2Vl
IGNvbW1lbnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGV4YWN0bHkgaXMg
Y29uc2lkZXJlZAorICAgIC8vICAgYSAiY2hhbmdlIiBpbiBhIGxheWVyL3N1cmZhY2UuCisgICAg
Ly8KKyAgICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0cywgdHdvIFJlY3RN
YXBzIGFyZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBUaGUgImN1cnJlbnQi
IG1hcCBjb250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRo
ZQorICAgIC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lkZSB0aGUgcHJldmlv
dXMgZGFtYWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8gICAgICAgICBvciBk
b2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVuIGV4cG9zZWQgYW5k
IGRhbWFnZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBBcyB0aGUgYWxnb3Jp
dGhtIHByb2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAvLyAgICAg
ICAgIG1hcCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhhdCBubyBsb25nZXIg
ZXhpc3QuCisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFwIHN0YXJ0cyBvdXQg
ZW1wdHksIGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5CisgICAgLy8gICAg
ICAgICBsYXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1cmZhY2UgaXMgYWRk
ZWQgdG8gdGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIgdGhlIGRhbWFnZSBy
ZWN0IGlzIGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNvIHRoYXQgdGhlCisg
ICAgLy8gICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhlIG5leHQgZnJhbWUu
CisgICAgLy8KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29tcHV0
ZURhbWFnZUZyb21BY3RpdmVMYXllcnModGFyZ2V0U3VyZmFjZSk7CisgICAgRmxvYXRSZWN0IGRh
bWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7
CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHVuaW9uUmVjdChkYW1hZ2VGcm9tQWN0aXZlTGF5
ZXJzLCBkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CisKKyAgICAvLyBTd2FwIG5leHQgYW5kIHBy
ZXZpb3VzIGhpc3RvcnkgbWFwcywgc2ltcGx5IGJ5IGNoYW5naW5nIHRoZSBpbmRleC4KKyAgICBt
X2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggKyAx
KSAlIDI7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9t
QWN0aXZlTGF5ZXJzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKK3sKKyAgICBGbG9h
dFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworCisgICAgLy8gTm90ZSB0aGlzIGlzIGFu
IGFsaWFzLCBub3QgYSBjb3B5LgorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+
ID4mIGxheWVyTGlzdCA9IHRhcmdldFN1cmZhY2UtPmxheWVyTGlzdCgpOworCisgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5
ZXJJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gdGFyZ2V0U3VyZmFjZSkKKyAgICAgICAgICAgIGV4dGVu
ZERhbWFnZUZvclJlbmRlclN1cmZhY2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBleHRlbmREYW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRy
YWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIg
Y29tcHV0aW5nIGRhbWFnZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVt
cyBpbiB0aGUgY3VycmVudAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVy
cy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAv
LyBhcmUgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0
IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBSZWN0TWFwJiBsZWZ0b3ZlclJlY3RIaXN0
b3J5ID0gbV9sYXllclJlY3RzSGlzdG9yeVttX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKwor
ICAgIGZvciAoUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBsZWZ0b3ZlclJlY3RIaXN0b3J5LmJlZ2lu
KCk7IGl0ICE9IGxlZnRvdmVyUmVjdEhpc3RvcnkuZW5kKCk7ICsraXQpCisgICAgICAgIGRhbWFn
ZVJlY3QudW5pdGUoaXQtPnNlY29uZCk7CisKKyAgICBsZWZ0b3ZlclJlY3RIaXN0b3J5LmNsZWFy
KCk7CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJh
Y2tlcjo6cmVtb3ZlUmVjdEZyb21QcmV2aW91c0ZyYW1lKGludCBsYXllcklEKQoreworICAgIFJl
Y3RNYXAmIGN1cnJlbnRSZWN0SGlzdG9yeSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbV9jdXJyZW50
UmVjdEhpc3RvcnlJbmRleF07CisKKyAgICAvLyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5
IGZyb20gdGhlIG1hcCwgb3IgaWYgbm90IGZvdW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkg
cmVjdC4KKyAgICByZXR1cm4gY3VycmVudFJlY3RIaXN0b3J5LnRha2UobGF5ZXJJRCk7Cit9CisK
K3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRTcGFjZVJlY3QpCit7CisgICAgaW50IG5leHRNYXBJbmRl
eCA9IChtX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4ICsgMSkgJSAyOworICAgIFJlY3RNYXAmIG5l
eHRSZWN0SGlzdG9yeSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbmV4dE1hcEluZGV4XTsKKworICAg
IC8vIFRoaXMgbGF5ZXIgSUQga2V5IHNob3VsZCBub3QgeWV0IGV4aXN0IGluIG5leHQgaGlzdG9y
eS4KKyAgICBBU1NFUlQobmV4dFJlY3RIaXN0b3J5LmZpbmQobGF5ZXJJRCkgPT0gbmV4dFJlY3RI
aXN0b3J5LmVuZCgpKTsKKworICAgIG5leHRSZWN0SGlzdG9yeS5zZXQobGF5ZXJJRCwgdGFyZ2V0
U3BhY2VSZWN0KTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxh
eWVyKENDTGF5ZXJJbXBsKiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQorewor
ICAgIC8vIFRoZXJlIGFyZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lv
biBvZiB0aGUgdGFyZ2V0IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUu
Zy4gb3BhY2l0eSwgcG9zaXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBl
bnRpcmUgcmVnaW9uIG9mIHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAg
ICAvLyAgICAgICAgLSB0aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWdlcyB0aGUgc3VyZmFj
ZSwgYmVjYXVzZSB0aGlzIHJlZ2lvbiBpcyBub3cgZXhwb3NlZC4KKyAgICAvLyAgICAgICAgLSBu
b3RlIHRoYXQgaW4gbWFueSBjYXNlcyB0aGUgb2xkIGFuZCBuZXcgbGF5ZXIgcmVjdHMgbWF5IG92
ZXJsYXAsIHdoaWNoIGlzIGZpbmUuCisgICAgLy8KKyAgICAvLyAgIDIuIFJlcGFpbnQvdXBkYXRl
OiBJZiBhIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQsIHRo
YXQKKyAgICAvLyAgICAgIHJlZ2lvbiBkYW1hZ2VzIHRoZSBzdXJmYWNlLgorICAgIC8vCisgICAg
Ly8gUHJvcGVydHkgY2hhbmdlcyB0YWtlIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3RzLgorCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKTsKKyAgICBvcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGxheWVyLT5i
b3VuZHMoKS53aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCAwKTsKKwor
ICAgIEZsb2F0UmVjdCBvbGRMYXllclJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUo
bGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3BhY2UgPSBv
cmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJvdW5kcygpKSkpOworICAgIHNhdmVSZWN0Rm9yTmV4
dEZyYW1lKGxheWVyLT5pZCgpLCBsYXllclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIGlmIChs
YXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAgICAvLyBJZiBhIGxheWVyIGhh
cyBjaGFuZ2VkLCB0aGVuIGl0cyBlbnRpcmUgbGF5ZXIgcmVjdCBhZmZlY3RzIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhsYXllclJl
Y3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICAvLyBUaGUgbGF5ZXIncyBvbGQgcmVnaW9uIGlz
IG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vLgorICAgICAgICAvLyBOb3Rl
IG9sZExheWVyUmVjdCBpcyBhbHJlYWR5IGluIHRhcmdldCBzcGFjZS4KKyAgICAgICAgaWYgKCFv
bGRMYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0
ZUlmTm9uWmVybyhvbGRMYXllclJlY3QpOworCisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVwZGF0
ZVJlY3QoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRpZXMg
aGF2ZW50IGNoYW5nZWQsIHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5CisgICAg
ICAgIC8vIGFmZmVjdGVkIGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3VsZCBi
ZSBlbXB0eS4KKyAgICAgICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3Jp
Z2luVHJhbnNmb3JtLm1hcFJlY3QoSEFDS1lTY3JvbGxGaXgobGF5ZXIsIGxheWVyLT51cGRhdGVS
ZWN0KCkpKTsKKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVS
ZWN0SW5UYXJnZXRTcGFjZSk7CisgICAgfQorfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0
ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYg
dGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2Vu
ZGFudCBzdXJmYWNlIiBjYW4gZGFtYWdlIHJlZ2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6
CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNl
J3MgZ2VvbWV0cnkgY2FuIGNoYW5nZSBiZWNhdXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNo
YW5nZXMgdG8gZGVzY2VuZGFudHMgKGkuZS4gdGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBz
dXJmYWNlJ3MgY29udGVudCByZWN0CisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5j
ZXN0b3IgbGF5ZXJzIHRoYXQgcHJvcGFnYXRlIHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhl
aXIgZW50aXJlIHN1YnRyZWUuCisgICAgLy8gICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90
aCB0aGUgb2xkIHN1cmZhY2UgcmVjdCBhbmQgbmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8g
ICAgICAgICAgZGFtYWdlIHRoZSB0YXJnZXQgc3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8K
KyAgICAvLyAgIDIuIERhbWFnZSByZWN0OiBUaGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1h
Z2VkIGJ5IGl0cyBvd24gbGF5ZXJMaXN0IGFzIHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8v
ICAgICAgc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKwor
ICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CisKKyAgICBGbG9hdFJlY3Qgb2xkU3VyZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZp
b3VzRnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0IHN1cmZhY2VSZWN0SW5UYXJn
ZXRTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBzYXZl
UmVjdEZvck5leHRGcmFtZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlKTsK
KworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlOworICAgIGlmIChyZW5kZXJT
dXJmYWNlLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gVGhlIGVudGly
ZSBzdXJmYWNlIGNvbnRyaWJ1dGVzIGRhbWFnZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxT
cGFjZSA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhlIHN1
cmZhY2UncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwg
dG9vLgorICAgICAgICBpZiAoIW9sZFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8ob2xkU3VyZmFjZVJlY3QpOworCisgICAg
fSBlbHNlCisgICAgICAgIC8vIE9ubHkgdGhlIHN1cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFt
YWdlIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9
IHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKwor
ICAgIC8vIElmIHRoZXJlIHdhcyBkYW1hZ2UsIHRyYW5zZm9ybSBpdCB0byB0YXJnZXQgc3BhY2Us
IGFuZCBwb3NzaWJseSBjb250cmlidXRlIGl0cyByZWZsZWN0aW9uIGlmIG5lZWRlZC4KKyAgICBp
ZiAoIWRhbWFnZVJlY3RJbkxvY2FsU3BhY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmln
aW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJblRhcmdldFNwYWNl
ID0gb3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxTcGFjZSk7CisgICAg
ICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlUmVjdEluVGFyZ2V0U3Bh
Y2UpOworCisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigp
LngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAg
ICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+dHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFu
c2xhdGUzZCgtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworCisgICAgICAgICAgICBGbG9hdFJl
Y3QgcmVwbGljYURhbWFnZVJlY3QgPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFt
YWdlUmVjdEluTG9jYWxTcGFjZSk7CisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRl
SWZOb25aZXJvKHJlcGxpY2FEYW1hZ2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmFjODU1YTNhMmQz
ZTQ2ZjA3ZmE1OWJjYzM1NDNhODY2Y2E1OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEYW1hZ2VUcmFja2VyX2gKKyNkZWZpbmUg
Q0NEYW1hZ2VUcmFja2VyX2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworCisvLyBD
b21wdXRlcyB0aGUgcmVnaW9uIHdoZXJlIHBpeGVscyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQgb24g
YSBSZW5kZXJTdXJmYWNlLiBUaGlzIHJlZ2lvbiBpcyB1c2VkCisvLyB0byBzY2lzc29yIHdoYXQg
aXMgYWN0dWFsbHkgZHJhd24gdG8gdGhlIHNjcmVlbiB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBh
bmQgYmFuZHdpZHRoLgorY2xhc3MgQ0NEYW1hZ2VUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgV1RGOjpQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAgdmlydHVh
bCB+Q0NEYW1hZ2VUcmFja2VyKCkgeyB9CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JO
ZXh0RnJhbWUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKTsKKyAgICBjb25zdCBGbG9h
dFJlY3QmIGN1cnJlbnREYW1hZ2VSZWN0KCkgeyByZXR1cm4gbV9jdXJyZW50RGFtYWdlUmVjdDsg
fQorCitwcml2YXRlOgorICAgIENDRGFtYWdlVHJhY2tlcigpOworCisgICAgRmxvYXRSZWN0IGNv
bXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKENDUmVuZGVyU3VyZmFjZSopOworICAgIEZsb2F0
UmVjdCBjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKTsKKworICAgIC8vIFRoZXNlIGhl
bHBlciBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBpbiBjb21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxh
eWVycygpLgorICAgIHZvaWQgc2F2ZVJlY3RGb3JOZXh0RnJhbWUoY29uc3QgaW50IGxheWVySUQs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0U3BhY2VSZWN0KTsKKyAgICBGbG9hdFJlY3QgcmVtb3Zl
UmVjdEZyb21QcmV2aW91c0ZyYW1lKGNvbnN0IGludCBsYXllcklEKTsKKyAgICB2b2lkIGV4dGVu
ZERhbWFnZUZvckxheWVyKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0
KTsKKyAgICB2b2lkIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqLCBG
bG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOworCisgICAgLy8gVG8gY29ycmVjdGx5IHRyYWNr
IGV4cG9zZWQgcmVnaW9ucywgdHdvIGhhc2h0YWJsZXMgb2YgcmVjdHMgYXJlIG1haW50YWluZWQu
CisgICAgLy8gVGhlICJjdXJyZW50IiBtYXAgaXMgdXNlZCB0byBjb21wdXRlIGV4cG9zZWQgcmVn
aW9ucyBvZiB0aGUgY3VycmVudCBmcmFtZSwgd2hpbGUKKyAgICAvLyB0aGUgIm5leHQiIG1hcCBp
cyB1c2VkIHRvIGNvbGxlY3QgbGF5ZXIgcmVjdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgbmV4dCBm
cmFtZS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBGbG9hdFJlY3Q+IFJlY3RNYXA7CisgICAg
UmVjdE1hcCBtX2xheWVyUmVjdHNIaXN0b3J5WzJdOworICAgIGludCBtX2N1cnJlbnRSZWN0SGlz
dG9yeUluZGV4OworCisgICAgRmxvYXRSZWN0IG1fY3VycmVudERhbWFnZVJlY3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0RhbWFnZVRyYWNrZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDFhYjJlN2U4ZTY3Nzg2MTM3YTM5YTg3MTUyNWNiYjU4
YjliMzBmMjUuLjE1OWRhMjMzNTVjMmU0N2FmMGZlMWY2MDA2MzYyMzQwNzhkOGI5YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTIzOSw2ICsyMzksMTIgQEAgdm9pZCBDQ0xheWVySW1w
bDo6bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yRGVzY2VuZGFudHMoKQogICAgICAgICBtX2No
aWxkcmVuW2ldLT5ub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK3Zv
aWQgQ0NMYXllckltcGw6OnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCkKK3sKKyAg
ICByZXNldFVwZGF0ZVJlY3RzRm9yU3VidHJlZSgpOworICAgIHJlc2V0UHJvcGVydHlDaGFuZ2Vk
RmxhZ0ZvclN1YnRyZWUoKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6cmVzZXRQcm9wZXJ0eUNo
YW5nZWRGbGFnRm9yU3VidHJlZSgpCiB7CiAgICAgbV9sYXllclByb3BlcnR5Q2hhbmdlZCA9IGZh
bHNlOwpAQCAtMjUwLDYgKzI1NiwxNCBAQCB2b2lkIENDTGF5ZXJJbXBsOjpyZXNldFByb3BlcnR5
Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRQcm9w
ZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOwogfQogCit2b2lkIENDTGF5ZXJJbXBsOjpyZXNl
dFVwZGF0ZVJlY3RzRm9yU3VidHJlZSgpCit7CisgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0
KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVlKCk7Cit9
CisKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7
CiAgICAgaWYgKG1fYm91bmRzICE9IGJvdW5kcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXgg
YmY2YjY4ZTFlNzgyMDdjZTFhYzZmY2YyNjI1N2ZkOTdkNGJkODI0MS4uNTViYWNlYzUyYTBlYjdl
MDgzOThkZDU5Nzk5ZjVhMDQ3ZWZlYzc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xOTIs
NyArMTkyLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsK
IAogICAgIGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
UHJvcGVydHlDaGFuZ2VkOyB9Ci0gICAgdm9pZCByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JT
dWJ0cmVlKCk7IC8vIGFsc28gcmVzZXRzIHByb3BlcnR5IGNoYW5nZSBmb3IgZXhpc3RpbmcgcmVu
ZGVyIHN1cmZhY2VzLgorICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUo
KTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CkBAIC0yMTAs
NiArMjEwLDkgQEAgcHJpdmF0ZToKICAgICAvLyBOb3RlIGNhcmVmdWxseSB0aGlzIGRvZXMgbm90
IGFmZmVjdCB0aGUgY3VycmVudCBsYXllci4KICAgICB2b2lkIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZEZvckRlc2NlbmRhbnRzKCk7CiAKKyAgICB2b2lkIHJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0
cmVlKCk7CisgICAgdm9pZCByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7IC8v
IGFsc28gcmVzZXRzIHByb3BlcnR5IGNoYW5nZSBmb3IgZXhpc3RpbmcgcmVuZGVyIHN1cmZhY2Vz
LgorCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJMYXllckNocm9taXVtIjsgfQogCiAgICAgdm9pZCBkdW1wTGF5ZXIoVGV4dFN0cmVh
bSYsIGludCBpbmRlbnQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBk
ODE0MTQ5YzU0YjA1M2VjZWE2ZmNhZTA1NjI0NDQ4ZGQzMTFkOTExLi42OGYwZjUwM2Y1M2MxY2Y1
NWFkODg4NzVmYjcyNDdhMTUyZmI5NWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApA
QCAtNzMsMTMgKzczLDE1IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgICwgY29t
cG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhy
ZWFkKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKLSAgICAgICAg
ICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKSB7IH0KKyAgICAgICAgICAgICwgc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQorICAgICAgICAgICAgLCB1c2VEYW1hZ2VUcmFja2Vy
KGZhbHNlKSB7IH0KIAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIGJvb2wgY29t
cG9zaXRlT2Zmc2NyZWVuOwogICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKICAgICBi
b29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAg
IGJvb2wgdXNlRGFtYWdlVHJhY2tlcjsKIH07CiAKIC8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9u
IGFuIEltcGwncyByZW5kZXJpbmcgY2FwYWJpbGl0aWVzIGJhY2sgdG8gdGhlIENDTGF5ZXJUcmVl
SG9zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggY2IzOGZhODYwY2U3Yjdj
OGFhMmZjMWI3MTg5Mjg1MGU1ZGFjNTFiZC4uYjQzMjQ1YjY5N2UzMzQ1YzdiMmI5YjMzYTRhOGMw
MWRkNzg5YTc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFu
YWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NE
YW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgQ0NSZW5kZXJTdXJmYWNlOjpD
Q1JlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogICAgICwgbV9zdXJmYWNl
UHJvcGVydHlDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9kcmF3T3BhY2l0eSgxKQogeworICAgIG1f
ZGFtYWdlVHJhY2tlciA9IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCk7CiB9CiAKIENDUmVuZGVy
U3VyZmFjZTo6fkNDUmVuZGVyU3VyZmFjZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmlu
ZGV4IDRiZDRhZjg1ODE5NDI2OGNmMGM4NWQzYTZhMGQyZDQwOWUwZWJjZDguLmIxY2Q5ZjNjOTE3
YzE5OTJkOTMzMWY2YTI1ZWY3Y2IwMjhiZWNjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NE
YW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hy
b21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKQEAgLTEwMSw2ICsxMDIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWcoKSB7IG1fc3VyZmFjZVByb3BlcnR5
Q2hhbmdlZCA9IGZhbHNlOyB9CiAgICAgYm9vbCBzdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkgY29u
c3Q7CiAKKyAgICBDQ0RhbWFnZVRyYWNrZXIqIGRhbWFnZVRyYWNrZXIoKSBjb25zdCB7IHJldHVy
biBtX2RhbWFnZVRyYWNrZXIuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdMYXll
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CkBAIC0xMjAsNiArMTIzLDExIEBA
IHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAg
ICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4g
bV9sYXllckxpc3Q7CisKKyAgICBPd25QdHI8Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNr
ZXI7CisKKyAgICAvLyBTdG9yZWQgaW4gdGhlICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRh
bWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Npc3NvcmluZy4KKyAgICBGbG9hdFJlY3QgbV9kYW1hZ2VS
ZWN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMGY1OThlNzhh
OTg2ODgzMWU4MmEyZjVjODgyZDRmMzg0Y2ZiYzYwNS4uMjgzZGM2ZjlmN2NlY2VlMzU4YjA0YjBj
ZTdkNzU3NTMzY2RmMmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01NCw2
ICs1NCw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAg
ICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lh
dGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKQEAgLTYxLDYgKzYy
LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVy
U3VyZmFjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2Vy
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiYmI2ZDM5ODI4Y2Q5NjA5MDA1ZjQ0MmIzNGI5YjMxNjk0OGM1
OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwCkBAIC0wLDAgKzEsNTc2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2lu
Y2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFj
ZSB7CisKK3ZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShD
Q0xheWVySW1wbCogcm9vdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCkKK3sKKyAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFZlY3RvcjxSZWZQdHI8Q0NM
YXllckltcGw+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICAvLyBTYW5pdHkgY2hlY2s6IFRoZSB0ZXN0IGl0c2VsZiBzaG91bGQgY3Jl
YXRlIHRoZSByb290IGxheWVyJ3MgcmVuZGVyIHN1cmZhY2UsIHNvCisgICAgLy8gICAgICAgICAg
ICAgICB0aGF0IHRoZSBzdXJmYWNlIChhbmQgaXRzIGRhbWFnZSB0cmFja2VyKSBjYW4gcGVyc2lz
dCBhY3Jvc3MgbXVsdGlwbGUKKyAgICAvLyAgICAgICAgICAgICAgIGNhbGxzIHRvIHRoaXMgZnVu
Y3Rpb24uCisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfRkFMU0UocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworCisgICAgcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHJvb3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXll
clNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShDQ0xheWVySW1wbCogcm9vdCkKK3sKKyAgICAvLyBUaGlzIGVtdWxhdGVzIG9ubHkg
dGhlIHN0ZXBzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRlc3RpbmcgdGhlIGRhbWFnZSB0cmFja2Vy
OgorICAgIC8vICAgMS4gY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzc2VzIGFuZCBsYXllcmxpc3Rz
CisgICAgLy8gICAyLiB1cGRhdGluZyBhbGwgZGFtYWdlIHRyYWNrZXJzIGluIHRoZSBjb3JyZWN0
IG9yZGVyCisgICAgLy8gICAzLiByZXNldHRpbmcgYWxsIHVwZGF0ZVJlY3RzIGFuZCBwcm9wZXJ0
eUNoYW5nZWQgZmxhZ3MgZm9yIGFsbCBsYXllcnMgYW5kIHN1cmZhY2VzLgorCisgICAgVmVjdG9y
PFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGV4ZWN1
dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisKKyAgICAvLyBpdGVyYXRlIGJhY2stdG8tZnJvbnQsIHNvIHRoYXQgZGFt
YWdlIGNvcnJlY3RseSBwcm9wYWdhdGVzIGZyb20gZGVzY2VuZGFudCBzdXJmYWNlcyB0byBhbmNl
c3RvcnMuCisgICAgZm9yIChpbnQgaSA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtpXS0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICB0
YXJnZXRTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJh
bWUodGFyZ2V0U3VyZmFjZSk7CisgICAgfQorCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVz
dFRyZWVXaXRoT25lU3VyZmFjZSgpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9p
bnQoMC4wZiwgMC4wZikpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDUwMCwgNTAwKSk7
CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSg1MDAuMGYsIDUwMC4wZikpKTsKKworICAgIGNoaWxk
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMC4wZiwgMTAwLjBmKSk7CisgICAgY2hpbGQtPnNl
dEJvdW5kcyhJbnRTaXplKDMwLCAzMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFz
ZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhUd29T
dXJmYWNlcygpCit7CisgICAgLy8gVGhpcyB0ZXN0IHRyZWUgaGFzIHR3byByZW5kZXIgc3VyZmFj
ZXM6IG9uZSBmb3IgdGhlIHJvb3QsIGFuZCBvbmUgZm9yCisgICAgLy8gY2hpbGQxLiBBZGRpdGlv
bmFsbHksIHRoZSByb290IGhhcyBhIHNlY29uZCBjaGlsZCBsYXllciwgYW5kIGNoaWxkMSBoYXMg
dHdvCisgICAgLy8gY2hpbGRyZW4gb2YgaXRzIG93bi4KKworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IGdyYW5kQ2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg1KTsKKworICAgIHJv
b3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMC4wZiwgMC4wZikpOworICAgIHJvb3QtPnNldEJv
dW5kcyhJbnRTaXplKDUwMCwgNTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSg1MDAuMGYs
IDUwMC4wZikpKTsKKworICAgIGNoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxMDAuMGYs
IDEwMC4wZikpOworICAgIGNoaWxkMS0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAg
Y2hpbGQxLT5zZXRPcGFjaXR5KDAuNWYpOyAvLyB3aXRoIGEgY2hpbGQgdGhhdCBkcmF3c0NvbnRl
bnQsIHRoaXMgd2lsbCBjYXVzZSB0aGUgbGF5ZXIgdG8gY3JlYXRlIGl0cyBvd24gcmVuZGVyU3Vy
ZmFjZS4KKyAgICBjaGlsZDEtPnNldERyYXdzQ29udGVudChmYWxzZSk7IC8vIHRoaXMgbGF5ZXIg
ZG9lcyBub3QgZHJhdywgYnV0IGlzIGludGVuZGVkIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1
cmZhY2UuCisKKyAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTEuMGYsIDExLjBm
KSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSgxOCwgMTgpKTsKKyAgICBjaGlsZDIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDIwMC4wZiwgMjAwLjBmKSk7CisgICAgZ3JhbmRDaGlsZDEtPnNldEJvdW5kcyhJ
bnRTaXplKDYsIDgpKTsKKyAgICBncmFuZENoaWxkMS0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTkwLjBmLCAxOTAuMGYp
KTsKKyAgICBncmFuZENoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5k
Q2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBjaGlsZDEtPmFkZENoaWxkKGdy
YW5kQ2hpbGQxKTsKKyAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZDEpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICBy
ZXR1cm4gcm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0
ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworCisgICAgLy8gU2V0
dXAgaW5jbHVkZXMgZ29pbmcgcGFzdCB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggYWx3YXlzIGRhbWFn
ZXMgZXZlcnl0aGluZywgc28KKyAgICAvLyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwZXJmb3JtIHNw
ZWNpZmljIHRlc3RzLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisK
KyAgICByZXR1cm4gcm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+
IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKQoreworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisKKyAg
ICAvLyBTZXR1cCBpbmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3aGljaCBhbHdh
eXMgZGFtYWdlcyBldmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFjdHVhbGx5IHBl
cmZvcm0gc3BlY2lmaWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworY2xhc3MgQ0NEYW1hZ2VU
cmFja2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3ByaXZhdGU6CisgICAgLy8gRm9y
IHRlc3RpbmcgcHVycG9zZXMsIGZha2UgdGhhdCB3ZSBhcmUgb24gdGhlIGltcGwgdGhyZWFkLgor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzZXRJbXBsVGhyZWFkOworfTsKKworVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHNhbml0eUNoZWNrVGVzdFRyZWVXaXRoT25lU3VyZmFjZSkK
K3sKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgc2ltcGxlIHRlc3QgdHJlZSB3aWxsIGFj
dHVhbGx5IHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBs
YXllciBsaXN0cy4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNl
dFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworCisgICAgRVhQRUNUX0VRKDIsIHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VR
KDIsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOworCisgICAg
RmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KC0yNTAuMGYsIC0yNTAuMGYsIDUwMC4wZiwgNTAwLjBmKSwgcm9vdERhbWFnZVJl
Y3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJl
ZVdpdGhUd29TdXJmYWNlcykKK3sKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGxl
eCB0ZXN0IHRyZWUgd2lsbCBhY3R1YWxseSBwcm9kdWNlIHRoZSBleHBlY3RlZCByZW5kZXIKKyAg
ICAvLyBzdXJmYWNlcyBhbmQgbGF5ZXIgbGlzdHMuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdOworICAgIEZsb2F0
UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOworCisgICAgRVhQRUNUX1RSVUUoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEVYUEVDVF9GQUxTRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKDMs
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAg
ICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgZm9yIGNoaWxkMSBvbmx5IGhhcyBhIGNvbnRlbnRSZWN0
IHRoYXQgZW5jbG9zZXMgZ3JhbmRDaGlsZDEgYW5kIGdyYW5kQ2hpbGQyLCBiZWNhdXNlIGNoaWxk
MSBkb2VzIG5vdCBkcmF3IGNvbnRlbnQuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDE4Ny4wZiwgMTg2LjBmLCAxNi4wZiwgMTguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgtMjUwLjBmLCAtMjUwLjBmLCA1MDAuMGYs
IDUwMC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworCitURVNUX0YoQ0NEYW1hZ2VUcmFja2Vy
VGVzdCwgdmVyaWZ5RGFtYWdlRm9yVXBkYXRlUmVjdHMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICAv
LyBDQVNFIDE6IFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVz
cG9uZGluZyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UuCisgICAgLy8KKyAgICBjaGlsZC0+c2V0VXBk
YXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYpKTsKKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9u
IHNob3VsZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAoMTAsIDExKSBwbHVzIHBvc2l0aW9u
IG9mIGNoaWxkIChsYXllclBvcyAtIDAuNSBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZh
Y2Ugc3BhY2UgKC0wLjUgc3VyZmFjZVdpZHRoKS4KKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFn
ZVggPSAxMC4wZiArIDEwMC4wZiAtIDE1LjBmIC0gMjUwLjBmOworICAgIGZsb2F0IHRhcmdldFNw
YWNlRGFtYWdlWSA9IDExLjBmICsgMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KHRhcmdldFNwYWNlRGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAxMi4wZiwgMTMuMGYp
LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IFRoZSBzYW1lIHVwZGF0ZSByZWN0
IHR3aWNlIGluIGEgcm93IHN0aWxsIHByb2R1Y2VzIHRoZSBzYW1lIGRhbWFnZS4KKyAgICAvLwor
ICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBmLCAx
My4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QodGFy
Z2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFnZVksIDEyLjBmLCAxMy4wZiksIHJvb3RE
YW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMzogU2V0dGluZyBhIGRpZmZlcmVudCB1cGRhdGUg
cmVjdCBzaG91bGQgY2F1c2UgZGFtYWdlIG9uIHRoZSBuZXcgdXBkYXRlIHJlZ2lvbiwgYnV0IG5v
IGFkZGl0aW9uYWwgZXhwb3NlZCBvbGQgcmVnaW9uLgorICAgIC8vCisgICAgY2hpbGQtPnNldFVw
ZGF0ZVJlY3QoRmxvYXRSZWN0KDIwLjBmLCAyNS4wZiwgMS4wZiwgMi4wZikpOworICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2UgcG9zaXRpb24g
c2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgyMCwgMjUpIHBsdXMgcG9zaXRpb24g
b2YgY2hpbGQgKGxheWVyUG9zIC0gMC41IGxheWVyV2lkdGgpIHRyYW5zbGF0ZWQgdG8gc3VyZmFj
ZSBzcGFjZSAoLTAuNSBzdXJmYWNlV2lkdGgpLgorICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+
cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7Cisg
ICAgdGFyZ2V0U3BhY2VEYW1hZ2VYID0gMjAuMGYgKyAxMDAuMGYgLSAxNS4wZiAtIDI1MC4wZjsK
KyAgICB0YXJnZXRTcGFjZURhbWFnZVkgPSAyNS4wZiArIDEwMC4wZiAtIDE1LjBmIC0gMjUwLjBm
OworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgs
IHRhcmdldFNwYWNlRGFtYWdlWSwgMS4wZiwgMi4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKwor
VEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdl
cykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RU
cmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9v
dC0+Y2hpbGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkg
Y2hhbmdlZCBmbGFnIHRha2VzIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3QuCisgICAgLy8KKyAg
ICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMu
MGYpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIC0gd2Ugc2hvdWxkIG5v
dCBoYXZlIGFjY2lkZW50YWxseSBjcmVhdGVkIGEgc2VwYXJhdGUgcmVuZGVyIHN1cmZhY2UgZm9y
IHRoZSB0cmFuc2x1Y2VudCBsYXllci4KKyAgICBBU1NFUlRfRVEoMiwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNo
b3VsZCBiZTogcG9zaXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41ICogbGF5ZXJXaWR0aCkg
dHJhbnNsYXRlZCB0byBzdXJmYWNlIHNwYWNlICgtIDAuNSAqIHN1cmZhY2VXaWR0aCkuCisgICAg
ZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VYID0gMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAg
ZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VZID0gMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAg
RmxvYXRSZWN0IGV4cGVjdGVkUmVjdCA9IEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRh
cmdldFNwYWNlRGFtYWdlWSwgMzAuMGYsIDMwLjBmKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZFJlY3QsIHJvb3RE
YW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogSWYgYSBsYXllciBtb3ZlcyBkdWUgdG8gcHJv
cGVydHkgY2hhbmdlLCBpdCBkYW1hZ2VzIGJvdGggdGhlIG5ldyBsb2NhdGlvbgorICAgIC8vICAg
ICAgICAgYW5kIHRoZSBvbGQgKGV4cG9zZWQpIGxvY2F0aW9uLiBUaGUgb2xkIGxvY2F0aW9uIGlz
IHRoZSBlbnRpcmUgb2xkIGxheWVyLAorICAgIC8vICAgICAgICAgbm90IGp1c3QgdGhlIHVwZGF0
ZVJlY3QuCisKKyAgICAvLyBGaXJzdCwgZG8gb25lIGZyYW1lIHdoZXJlIG9ubHkgdGhlIHVwZGF0
ZSByZWN0IGNhdXNlcyBkYW1hZ2UuCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0
KDIwLjBmLCAyNS4wZiwgMS4wZiwgMi4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGVuLCB0ZXN0IHRoZSBhY3R1YWwgbGF5ZXIgbW92ZW1l
bnQuCisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLjBmLCAyMzAuMGYpKTsK
KyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFtYWdl
IHBvc2l0aW9uIHNob3VsZCBiZTogcG9zaXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41ICog
bGF5ZXJXaWR0aCkgdHJhbnNsYXRlZCB0byBzdXJmYWNlIHNwYWNlICgtMC41ICogc3VyZmFjZVdp
ZHRoKS4KKyAgICB0YXJnZXRTcGFjZURhbWFnZVggPSAyMDAuMGYgLSAxNS4wZiAtIDI1MC4wZjsK
KyAgICB0YXJnZXRTcGFjZURhbWFnZVkgPSAyMzAuMGYgLSAxNS4wZiAtIDI1MC4wZjsKKworICAg
IC8vIEV4cGVjdCBkYW1hZ2UgdG8gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91cyBv
bmUgYW5kIHRoZSBuZXcgb25lLgorICAgIGV4cGVjdGVkUmVjdC51bml0ZUlmTm9uWmVybyhGbG9h
dFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFnZVksIDMwLjBmLCAzMC4w
ZikpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
ZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNr
ZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ0xheWVyKQoreworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3Vy
ZmFjZSgpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4o
KVswXTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgzKTsKKyAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLjBmLCAzODAu
MGYpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDYsIDgpKTsKKyAgICBjaGlsZDIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIC8vIENBU0UgMTogQWRkaW5nIGEgbmV3IGxh
eWVyIHNob3VsZCBjYXVzZSB0aGUgYXBwcm9wcmlhdGUgZGFtYWdlLgorICAgIC8vCisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQyKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIC0gYWxsIDMgbGF5ZXJzIHNob3VsZCBiZSBvbiB0
aGUgc2FtZSByZW5kZXIgc3VyZmFjZTsgcmVuZGVyIHN1cmZhY2VzIGFyZSB0ZXN0ZWQgZWxzZXdo
ZXJlLgorICAgIEFTU0VSVF9FUSgzLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
LnNpemUoKSk7CisKKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KDQwMC4w
ZiAtIDMuMGYgLSAyNTAuMGYsIDM4MC4wZiAtIDQuMGYgLSAyNTAuMGYsIDYuMGYsIDguMGYpOwor
ICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiB0
aGUgbGF5ZXIgaXMgcmVtb3ZlZCwgaXRzIGVudGlyZSBvbGQgbGF5ZXIgYmVjb21lcyBleHBvc2Vk
LCBub3QganVzdCB0aGUKKyAgICAvLyAgICAgICAgIGxhc3QgdXBkYXRlIHJlY3QuCisKKyAgICAv
LyBGaXJzdCwgZG8gb25lIGZyYW1lIHdoZXJlIG9ubHkgdGhlIHVwZGF0ZSByZWN0IGNhdXNlcyBk
YW1hZ2UuCisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxLjBmLCAyLjBmLCAz
LjBmLCA0LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKwor
ICAgIC8vIFRoZW4sIHRlc3QgbGF5ZXIgcmVtb3ZhbAorICAgIGNoaWxkMS0+cmVtb3ZlRnJvbVBh
cmVudCgpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTE2
NS4wZiwgLTE2NS4wZiwgMzAuMGYsIDMwLjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNU
X0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTXVsdGlwbGVMYXllcnMpCit7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdp
dGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MDAu
MGYsIDM4MC4wZikpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAg
IGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
Mik7CisKKyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUgYWJvdmUgdHJlZSBt
YW5pcHVsYXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1lIGZyYW1lLgorICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2luZyB0
d28gbGF5ZXJzIHNpbXVsdGFuZW91c2x5IHNob3VsZCBjYXVzZSBjb21iaW5lZCBkYW1hZ2UuCisg
ICAgLy8gLSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KC0x
NjUuMGYsIC0xNjUuMGYsIDEuMGYsIDIuMGYpOworICAgIC8vIC0gY2hpbGQyIHVwZGF0ZSByZWN0
IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCggMTQ3LjBmLCAxMjYuMGYsIDMuMGYsIDQuMGYp
OworICAgIGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgMS4wZiwg
Mi4wZikpOworICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
My4wZiwgNC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7Cisg
ICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KC0xNjUuMGYsIC0xNjUuMGYsIDMxNS4wZiwgMjk1LjBmKSwgcm9vdERhbWFn
ZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9y
TmVzdGVkU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRl
QW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBn
cmFuZENoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxv
YXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisK
KyAgICAvLyBDQVNFIDE6IERhbWFnZSB0byBhIGRlc2NlbmRhbnQgc3VyZmFjZSBzaG91bGQgcHJv
cGFnYXRlIHByb3Blcmx5IHRvIGFuY2VzdG9yIHN1cmZhY2UuCisgICAgLy8KKyAgICBncmFuZENo
aWxkMS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKworICAgIC8vIGRhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJlIHRo
ZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjYXNlIGR1cmluZyBzZXR1cC4KKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTk3LjBmLCAxOTYuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERh
bWFnZVJlY3QpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJl
IGluIHRoZSByb290IHN1cmZhY2UncyBzcGFjZSAod2hlcmUgdGhlIG9yaWdpbgorICAgIC8vIGlz
IGNlbnRlcmVkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIHN1cmZhY2UuKQorICAgIC8vIFNvIGhlcmUs
IHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHJvb3Qgc3VyZmFjZSBpcyAoLTI1MCwgLTI1MCk7
IGFuZCB0aGVuIHRoZQorICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBkYW1hZ2UgcmVjdCBpcyAtMjUw
ICsgY2hpbGRQb3NpdGlvbiAtIDAuNSAqIGNoaWxkV2lkdGggKyBncmFuZENoaWxkUG9zaXRpb24g
LSAwLjUgKiBncmFuZENoaWxkV2lkdGguCisgICAgZmxvYXQgcm9vdFNwYWNlRGFtYWdlWCA9IC0y
NTAuMGYgKyAxMDAuMGYgLSAxNS4wZiArIDIwMC4wZiAtIDMuMGY7CisgICAgZmxvYXQgcm9vdFNw
YWNlRGFtYWdlWSA9IC0yNTAuMGYgKyAxMDAuMGYgLSAxNS4wZiArIDIwMC4wZiAtIDQuMGY7Cisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KHJvb3RTcGFjZURhbWFnZVgsIHJvb3RT
cGFjZURhbWFnZVksIDYuMGYsIDguMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNF
IDI6IFNhbWUgYXMgcHJldmlvdXMgY2FzZSwgYnV0IHdpdGggYWRkaXRpb25hbCBkYW1hZ2UgZWxz
ZXdoZXJlIHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IHVuaW9uZWQuCisgICAgLy8gLSBjaGlsZDEg
cmVuZGVyIHN1cmZhY2UgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDMy
LjBmLCAzMS4wZiwgNi4wZiwgOC4wZikKKyAgICAvLyAtIGNoaWxkMiBkYW1hZ2UgaW4gcm9vdCBz
dXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoLTI0OC4wZiwgLTI0OC4wZiwgMTguMGYsIDE4LjBmKTsK
KyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjdmKTsKKyAgICBjaGlsZDItPnNldE9wYWNp
dHkoMC43Zik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBj
aGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAv
LyBkYW1hZ2UgdG8gdGhlIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUg
b3JpZ2luYWwgY2FzZSBkdXJpbmcgc2V0dXAuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDE5Ny4wZiwgMTk2LjBmLCA2LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIGRhbWFnZSB0byB0aGUgcm9vdCBzdXJmYWNlIHNob3VsZCBiZSB0aGUgdW5pb24gb2Yg
Y2hpbGQxJ3MgcmVuZGVyIHN1cmZhY2UsIGFuZCBjaGlsZDIncyBsYXllci4KKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTI0OC4wZiwgLTI0OC4wZiwgMjg2LjBmLCAyODcuMGYp
LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbURlc2NlbmRhbnRMYXllcikKK3sKKyAgICAvLyBB
IGRlc2NlbmRhbnQgbGF5ZXIgY2hhbmdlcywgd2hpY2ggYWZmZWN0cyB0aGUgY29udGVudCBib3Vu
ZHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlLgorICAgIC8vIFRoZSBlbnRpcmUgc3VyZmFjZSBhcmVh
IHNob3VsZCBkYW1hZ2UgaXRzIGFuY2VzdG9yIHN1cmZhY2UuCisKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5j
aGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoMTk1LjBmLCAxOTUuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKworICAgIC8vIERhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJlIHRo
ZSBuZXcgbGF5ZXIgcGx1cyB0aGUgb2xkIGV4cG9zZWQgYXJlYS4KKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMTkyLjBmLCAxOTEuMGYsIDExLjBmLCAxMy4wZiksIGNoaWxkRGFt
YWdlUmVjdCk7CisKKyAgICAvLyBEYW1hZ2UgdG8gdGhlIHJvb3Qgc3VyZmFjZSBzaG91bGQgYmUg
dGhlIHVuaW9uIG9mIGNoaWxkMSdzICplbnRpcmUqIHJlbmRlciBzdXJmYWNlLAorICAgIC8vIGFu
ZCBpdHMgb2xkIGV4cG9zZWQgYXJlYS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBib3VuZHMgb2YgdGhl
IHJlbmRlciBzdXJmYWNlIGl0c2VsZgorICAgIC8vIGhhdmUgY2hhbmdlZCBiZWNhdXNlIG9mIHRo
ZSBncmFuZENoaWxkLgorICAgIGZsb2F0IHRhcmdldFN1cmZhY2VYID0gLTI1MC4wZiArIDEwMC4w
ZiAtIDE1LjBmICsgMTkwLjBmIC0gMy4wZjsKKyAgICBmbG9hdCB0YXJnZXRTdXJmYWNlWSA9IC0y
NTAuMGYgKyAxMDAuMGYgLSAxNS4wZiArIDE5MC4wZiAtIDQuMGY7CisgICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoRmxvYXRSZWN0KHRhcmdldFN1cmZhY2VYLCB0YXJnZXRTdXJmYWNlWSwgMTYuMGYs
IDE4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21BbmNlc3RvckxheWVyKQoreworICAg
IC8vIEFuIGFuY2VzdG9yL293bmluZyBsYXllciBjaGFuZ2VzIHRoYXQgYWZmZWN0cyB0aGUgcG9z
aXRpb24vdHJhbnNmb3JtIG9mIHRoZSByZW5kZXIKKyAgICAvLyBzdXJmYWNlLiBOb3RlIHRoYXQg
aW4gdGhpcyBjYXNlLCB0aGUgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgZmxhZyBhbHJlYWR5IHByb3Bh
Z2F0ZXMKKyAgICAvLyB0byB0aGUgc3VidHJlZSAodGVzdGVkIGVsc3doZXJlKSwgd2hpY2ggZGFt
YWdlcyB0aGUgZW50aXJlIGNoaWxkMSBzdXJmYWNlIC0tIGJ1dAorICAgIC8vIHRoZSBkYW1hZ2Ug
dHJhY2tlciBzdGlsbCBuZWVkcyB0aGUgY29ycmVjdCBsb2dpYyB0byBjb21wdXRlIHRoZSBleHBv
c2VkIHJlZ2lvbiBvbgorICAgIC8vIHRoZSByb290IHN1cmZhY2UuCisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBd
LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxv
YXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDUwLjBmLCA1MC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworCisgICAgLy8gRXhwZWN0IHRoZSB1bmlvbiBvZiBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGls
ZDIKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYsIDE2
LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICBmbG9hdCB0YXJnZXRTdXJmYWNl
WCA9IC0yNTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gMy4wZjsKKyAgICBmbG9hdCB0
YXJnZXRTdXJmYWNlWSA9IC0yNTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gNC4wZjsK
KworICAgIC8vIFRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgYW5kIHRoZSBvbGQgZXhwb3NlZCBj
aGlsZDEgc3VyZmFjZSBzaG91bGQgZGFtYWdlIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3VyZmFjZVgsIHRhcmdldFN1cmZhY2VZLCA2
Ni4wZiwgNjguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNr
ZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1cmZhY2VzKQor
eworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3Qt
PmNoaWxkcmVuKClbMF07CisgICAgQ0NEYW1hZ2VUcmFja2VyKiByb290RGFtYWdlVHJhY2tlciA9
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpOworICAgIEZsb2F0UmVjdCBj
aGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworICAgIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIC8v
IENBU0UgMTogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywgaXRzIGVudGlyZSBv
bGQgYXJlYSBiZWNvbWVzIGV4cG9zZWQuCisgICAgLy8KKyAgICBjaGlsZDEtPnNldE9wYWNpdHko
MS4wZik7CisKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgc3VyZmFjZSBub3cuCisgICAg
RVhQRUNUX0ZBTFNFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoNCwg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDIyLjBmLCAyMS4wZiwgMTYuMGYsIDE4LjBmKSwgcm9v
dERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkpOworCisgICAgLy8gQ0FTRSAyOiBJ
ZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBhcHBlYXJzLCBpdHMgZW50aXJlIG9sZCBhcmVhZCBiZWNv
bWVzIGV4cG9zZWQuCisKKyAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBqdXN0
IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2YgdGhl
IG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3Qo
KS5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiBjaGFuZ2UgdGhlIHRyZWUgc28gdGhhdCB0aGUg
cmVuZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41
Zik7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworCisgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRo
ZXJlIGlzIGEgbmV3IHN1cmZhY2Ugbm93LgorICAgIEFTU0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoMywgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUSgyLCBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIENDRGFtYWdlVHJhY2tlciogY2hpbGREYW1h
Z2VUcmFja2VyID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKyAg
ICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYs
IDE2LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDIyLjBmLCAyMS4wZiwgMTYuMGYsIDE4LjBmKSwgcm9vdERhbWFnZVRyYWNr
ZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5Tm9EYW1hZ2VXaGVuTm90aGluZ0NoYW5nZWQpCit7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dDsKKworICAgIC8vIENBU0UgMTogTm8gY2hhbmdlcyBzaG91bGQgcHJvZHVjZSBhbiBlbXB0eSBk
YW1hZ2UgcmVjdC4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBDQVNFIDI6IE5vIGNo
YW5nZXMgdHdpY2UgaW4gYSByb3cgc2hvdWxkIHN0aWxsIHByb2R1Y2UgZW1wdHkgZGFtYWdlIHJl
Y3QuCisgICAgLy8KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShy
b290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5Tm9EYW1hZ2VGb3JVcGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gSW4gb3VyIHNwZWNpZmljIHRyZWUsIHRoZSB1
cGRhdGUgcmVjdCBvZiBjaGlsZDEgc2hvdWxkIG5vdCBjYXVzZSBhbnkgZGFtYWdlIHRvIGFueQor
ICAgIC8vIHN1cmZhY2UgYmVjYXVzZSBpdCBkb2VzIG5vdCBhY3R1YWxseSBkcmF3IGNvbnRlbnQu
CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLjBmLCAwLjBmLCAxLjBmLCAy
LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGls
ZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNU
X1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdERh
bWFnZVJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvclJlcGxpY2EpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVj
dCByb290RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZs
b2F0UmVjdCBncmFuZENoaWxkRGFtYWdlUmVjdDsKKworICAgIC8vIERhbWFnZSBvbiBhIHN1cmZh
Y2UgdGhhdCBoYXMgYSByZWZsZWN0aW9uIHNob3VsZCBjYXVzZSB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dG8KKyAgICAvLyByZWNlaXZlIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIGFuZCB0aGUgc3VyZmFjZSdz
IHJlZmxlY3RlZCBkYW1hZ2UuCisKKworICAgIC8vIFNldCB1cCBhIHJlZmxlY3Rpb24gYWJvdXQg
MSB1bml0IGJleW9uZCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hpbGQxLiBUaGlzIHdpbGwgbm90
CisgICAgLy8gY2hhbmdlIHRoZSBjb250ZW50Qm91bmRzIG9mIGNoaWxkMSwgc28gdGhhdCB3ZSBj
YW4gaXNvbGF0ZSB0aGUgcmVmbGVjdGlvbiBkYW1hZ2UKKyAgICAvLyB0ZXN0aW5nLgorICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0
ZSg2KTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLTEu
MGYsIDAuMGYpKTsgLy8gaW1wbGljaXRseSBpbmNsdWRlcyB0aGUgYW5jaG9yIHdoZXJlIHRoZSBy
ZWZsZWN0aW9uIGlzIGNlbnRlcmVkCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlv
bjsKKyAgICByZWZsZWN0aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hp
bGQxUmVwbGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5z
ZXRSZXBsaWNhTGF5ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUg
YXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzIHdlcmUgY3JlYXRlZAorICAgIEFTU0VSVF9UUlVF
KGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgQ0NEYW1hZ2VUcmFja2VyKiBn
cmFuZENoaWxkRGFtYWdlVHJhY2tlciA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKTsKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGREYW1h
Z2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgQ0NEYW1hZ2VUcmFja2VyKiBj
aGlsZERhbWFnZVRyYWNrZXIgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkRGFtYWdlVHJhY2tlci0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBDQ0RhbWFnZVRyYWNrZXIqIHJvb3REYW1hZ2VUcmFja2VyID0gcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCk7CisKKyAgICAvLyBUaGUgZ3JhbmRD
aGlsZCBzdXJmYWNlIGRhbWFnZSBzaG91bGQgbm90IGluY2x1ZGUgaXRzIG93biByZXBsaWNhLgor
ICAgIC8vIEZJWE1FOiB0aGlzICgwLDApIGRvZXNuJ3QgZmVlbCByaWdodC4gc2hvdWxkbid0IGl0
IGJlIHRoZSBzcGFjZSB3aGVyZSB0aGUgb3JpZ2luIGlzIGF0IHRoZSBjZW50ZXI/CisgICAgLy8g
ICAgICAgIGl0IHNlZW1zIGxpa2UgdGhlICJjZW50ZXIiIGluY2x1ZGVzIHRoZSByZWZsZWN0aW9u
LgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA2LjBmLCA4
LjBmKSwgZ3JhbmRDaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gVGhlIGNoaWxkIHN1cmZhY2Ug
ZGFtYWdlIHNob3VsZCBpbmNsdWRlIHRoZSBub3JtYWwgYW5kIHJlcGxpY2Egc3VyZmFjZXMuCisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE4OS4wZiwgMTk2LjBmLCAxNC4wZiwg
OC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggOTQyYmVj
MmY3MTNhMjg0NTIxYmFhOTQzZWNjYzQ0ZTIwYjhhYzVmZi4uNWZjMjVlYWIwYjA2Zjg1YWE5OTNj
OWJiMmY3OGQxYWY0Nzc3MmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckltcGxUZXN0LmNwcApAQCAtMzUsMjEgKzM1LDIxIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogbmFtZXNwYWNlIHsKIAogI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllfU1VC
VFJFRV9DSEFOR0VEKGNvZGVUb1Rlc3QpICAgICAgICAgICAgICAgICAgXAotICAgIHJvb3QtPnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShy
b290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBFWFBFQ1RfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkLT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpKQogCiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9O
T1RfQ0hBTkdFKGNvZGVUb1Rlc3QpICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0
eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
cm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShyb290LT5sYXll
clByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVD
VF9GQUxTRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdl
ZCgpKQogCiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9PTkxZX0xBWUVSX0NIQU5HRUQoY29k
ZVRvVGVzdCkgICAgICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRG
bGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVz
ZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlD
aGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShj
aGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXApA
QCAtMTE1LDcgKzExNSw3IEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlMYXllckNoYW5n
ZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX09OTFlfTEFZRVJf
Q0hBTkdFRChyb290LT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmdyYXkpKTsKIAogICAgIC8v
IFNwZWNpYWwgY2FzZTogY2hlY2sgdGhhdCBzdWJsYXllciB0cmFuc2Zvcm0gY2hhbmdlcyBhbGwg
bGF5ZXIncyBkZXNjZW5kYW50cywgYnV0IG5vdCB0aGUgbGF5ZXIgaXRzZWxmLgotICAgIHJvb3Qt
PnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICByb290LT5yZXNldEFs
bENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogICAgIHJvb3QtPnNldFN1YmxheWVyVHJhbnNm
b3JtKGFyYml0cmFyeVRyYW5zZm9ybSk7CiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmxheWVyUHJv
cGVydHlDaGFuZ2VkKCkpOwogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hh
bmdlZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGJkNWE3NDliNzcyZmQzOTlmYWE4Yzdk
Zjg3YzQ1NTg0NmI4MDA3YzEuLmZhNGI0ZDliNWRlOTczNmYxNTAwYzNlODI4YjIwZGFlZmY2NjQ2
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAKKyNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RD
b21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKIApAQCAtMzYsMjcgKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSB7CiAKLS8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVu
Y3Rpb24gc28gdGhhdCB0aGUgZ3Rlc3QgZXJyb3JzIGNhbiBnaXZlIHVzIHVzZWZ1bCBsaW5lIG51
bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0LgotLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3Jt
YXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUsIHRoZXJlIGFyZSBtYW55IG90aGVyIGZsb2F0
aW5nLXBvaW50IHZhbHVlcyB1c2VkLCBhbmQgc28gd2UKLS8vIG9ubHkgZXhwZWN0IHRoZW0gdG8g
YmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgotI2RlZmluZSBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZCwgYWN0dWFsKSAgICBcCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgIFwKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEyKCkpOyAgXAotICAgIEVY
UEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMygpLCAoYWN0dWFsKS5tMTMoKSk7ICBcCi0gICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChhY3R1YWwpLm0xNCgpKTsgIFwKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVhbCkubTIxKCkpOyAgXAot
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMigpLCAoYWN0dWFsKS5tMjIoKSk7ICBc
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0yMygpKTsg
IFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwgKGFjdHVhbCkubTI0KCkp
OyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMSgpLCAoYWN0dWFsKS5tMzEo
KSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMyKCksIChhY3R1YWwpLm0z
MigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzMoKSwgKGFjdHVhbCku
bTMzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zNCgpLCAoYWN0dWFs
KS5tMzQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1
YWwpLm00MSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDIoKSwgKGFj
dHVhbCkubTQyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MygpLCAo
YWN0dWFsKS5tNDMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQ0KCks
IChhY3R1YWwpLm00NCgpKQotCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6
ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQogewogICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKQEAgLTEyMCwxMiArMTAwLDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0Zvck5vT3BMYXllcikKIAogICAgIGV4ZWN1dGVDYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKIAotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlN
YXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRy
aXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
aWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQog
CiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5n
bGVMYXllcikKQEAgLTE0NCw4ICsxMjQsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBhcmJpdHJhcnlUcmFuc2xh
dGlvbi50cmFuc2xhdGUoMTAuMCwgMjAuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGFyYml0cmFyeVRyYW5zbGF0aW9uLCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAs
IDApLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRp
dHlNYXRyaXgsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAg
Ly8gQ2FzZSAyOiBzZXR0aW5nIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIHNob3VsZCByZXN1bHQg
aW4gYSBkcmF3IHRyYW5zZm9ybSB0aGF0IHRyYW5zbGF0ZXMgdG8gaGFsZiB0aGUgd2lkdGggYW5k
IGhlaWdodC4KICAgICAvLyAgICAgICAgIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIHNob3Vs
ZCByZW1haW4gYXMgdGhlIGlkZW50aXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90IGRlYWwgd2l0aCB0
cmFuc2Zvcm1pbmcgdG8vZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KQEAgLTE1MywyMiAr
MTMzLDIyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0ZvclNpbmdsZUxheWVyKQogICAgIHRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwg
Ni4wKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVD
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0
cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4
LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDM6IFRoZSBh
bmNob3IgcG9pbnQgYnkgaXRzZWxmICh3aXRob3V0IGEgbGF5ZXIgdHJhbnNmb3JtKSBzaG91bGQg
aGF2ZSBubyBlZmZlY3Qgb24gdGhlIHRyYW5zZm9ybXMuCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRy
YW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlv
blRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IEEgY2hhbmdlIGluICJhY3R1YWwiIHBvc2l0aW9uIGFm
ZmVjdHMgYm90aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0u
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25UcmFuc2Zvcm07CiAgICAgcG9zaXRp
b25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCA0LjJmKSwgSW50U2l6ZSgx
MCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocG9z
aXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSwg
bGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAvLyBDYXNlIDU6IEluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMsIHRoZSBs
YXllciB0cmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRpb25Ub0NlbnRl
ci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVkIGJ5CiAgICAgLy8gICAgICAgICB1c2luZyBhIHNjYWxl
IHRyYW5zZm9ybSwgYmVjYXVzZSBzY2FsZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5vdCBjb21tdXRh
dGl2ZS4KQEAgLTE3Niw4ICsxNTYsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBsYXllclRyYW5zZm9ybS5zY2Fs
ZTNkKDIuMCwgMi4wLCAxLjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5n
ZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5ZXJUcmFuc2Zvcm0gKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEobGF5ZXJUcmFu
c2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGxheWVyVHJhbnNmb3JtLCBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDY6IFRoZSBsYXllciB0cmFu
c2Zvcm0gc2hvdWxkIG9jY3VyIHdpdGggcmVzcGVjdCB0byB0aGUgYW5jaG9yIHBvaW50LgogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CkBAIC0xODUsOCArMTY1
LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
U2luZ2xlTGF5ZXIpCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRSZXN1bHQgPSB0
cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9y
LmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgp
LCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4wZiks
IEZsb2F0UG9pbnQoNS4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRp
b25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0ICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBwb3NpdGlvbiBw
cmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgogICAgIC8vICAgICAgICAgVGhlIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKQEAgLTE5NCw4ICsxNzQsOCBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVM
YXllcikKICAgICBleHBlY3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRp
b25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNl
KCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJU
cmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBv
aW50KDUuMGYsIDEuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQpAQCAtMjE2LDEwICsxOTYsMTAgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5
KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2lu
dCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
Z3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5k
Q2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlk
ZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAg
IC8vIENhc2UgMjogcGFyZW50J3MgcG9zaXRpb24gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRDaGls
ZC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybTsKQEAg
LTIyOCwxMCArMjA4LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4
KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zv
cm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBj
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJl
bnRQb3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJl
bnRQb3NpdGlvblRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0g
KiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9u
VHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8v
IENhc2UgMzogcGFyZW50J3MgbG9jYWwgdHJhbnNmb3JtIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5k
Y2hpbGQKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKQEAg
LTI0MywxMCArMjIzLDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4
KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwog
CiAgICAgLy8gQ2FzZSA0OiBwYXJlbnQncyBzdWJsYXllck1hdHJpeCBhZmZlY3RzIGNoaWxkIGFu
ZCBncmFuZGNoaWxkCiAgICAgLy8gICAgICAgICBzY2FsaW5nIGlzIHVzZWQgaGVyZSBhZ2FpbiBz
byB0aGF0IHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMgaXMgcHJvcGVybHkgdGVz
dGVkLgpAQCAtMjY0LDEwICsyNDQsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFu
ZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFs
c2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3Jh
bmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShmbGF0
dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDU6IHNhbWUgYXMgQ2FzZSA0LCBleGNl
cHQgdGhhdCBjaGlsZCBkb2VzIHByZXNlcnZlIDNELCBzbyB0aGUgZ3JhbmRDaGlsZCBzaG91bGQg
cmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5lZCBjb21wb3NpdGUgdHJhbnNmb3JtLgogICAgIC8vCkBA
IC0yNzUsMTAgKzI1NSwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAx
OCksIHRydWUpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwog
fQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JT
aW5nbGVSZW5kZXJTdXJmYWNlKQpAQCAtMzIwLDEyICszMDAsMTIgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkK
IAogICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGRyYXcgdHJhbnNmb3JtIHNob3VsZCByZWZlciB0
byBpdHMgbmV3IHJlbmRlciBzdXJmYWNlOyB0aGV5IG9ubHkgZGlmZmVyIGJ5IGEgdHJhbnNsYXRp
b24gdG8gY2VudGVyLgogICAgIC8vIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLCBob3dldmVy
LCBzaG91bGQgc3RpbGwgcmVmZXIgdG8gdGhlIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8v
IFdpdGhvdXQgY2xpcHBpbmcsIHRoZSBvcmlnaW4gdHJhbnNmb3JtIGFuZCBkcmF3IHRyYW5zZm9y
bSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UpIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAogfQogCkBAIC00MjIsMzggKzQwMiwzOCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5k
ZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vICBub3RlIHRoYXQgZHJhdyB0cmFuc2Zvcm1zIGFy
ZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHJlbmRlciBz
dXJmYWNlCiAgICAgLy8gIGJ1dCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtcyBhcmUgZGVzY3JpYmVk
IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdC4KICAgICAvLwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogdHJhbnNsYXRp
b25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVy
LCBncmFuZENoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICog
QSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOwog
Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVu
ZGVyU3VyZmFjZTEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCBy
ZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBB
ICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzEtPmRyYXdUcmFu
c2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRv
Q2VudGVyLCByZW5kZXJTdXJmYWNlMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzIt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEg
KiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMi0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9u
VG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJT
Mi0+ZHJhd1RyYW5zZm9ybSgpKTsKIAogICAgIC8vIFZlcmlmeSBsYXllciBzY3JlZW4tc3BhY2Ug
dHJhbnNmb3JtcwogICAgIC8vCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSwgcGFy
ZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBICogQiAqIEEsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGls
ZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCBjaGlsZE9mUm9vdC0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRl
clN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAq
IEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgcmVuZGVyU3VyZmFj
ZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICog
QiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCByZW5k
ZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIg
KiBBICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBICogQiAq
IEEsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBn
cmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVmVyaWZ5
IHJlbmRlciBzdXJmYWNlIHRyYW5zZm9ybXMuCiAgICAgLy8KICAgICAvLyBPcmlnaW4gdHJhbnNm
b3JtIG9mIHJlbmRlciBzdXJmYWNlIDEgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byByb290
LgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFj
ZTEtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiBy
ZW5kZXIgc3VyZmFjZSAyIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcmVuZGVyIHN1cmZh
Y2UgMi4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSwgcmVuZGVyU3VyZmFj
ZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNl
KCktPm9yaWdpblRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFNhbml0eSBjaGVjay4gSWYgdGhlc2Ug
ZmFpbCB0aGVyZSBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYuCiAgICAgLy8g
SXQgaXMgZXhwZWN0ZWQgdGhhdCB3ZSBjb3JyZWN0bHkgc2V0IHVwIHRyYW5zZm9ybXMgc28gdGhh
dCB0aGUgeS1jb21wb25lbnQgb2YgdGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBiODNkYWNhYmEzY2ZlMDFjYWNhM2FiYTU5YmY3ODc2NGE3ZGQxYTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVz
dENvbW1vbi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXll
clRyZWVUZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKKworbmFt
ZXNwYWNlIFdlYktpdFRlc3RzIHsKKworLy8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgZnVu
Y3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFp
bGVkLgorI2RlZmluZSBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxv
Y2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7IFwKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55KCkp
OyBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChhY3R1
YWwpLnNpemUoKS53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLnNp
emUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCisvLyBUaGlzIGlzIGEg
bWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51
bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KKy8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHZhbHVlcyBhcmUgZG91YmxlIHByZWNpc2lvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIg
ZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQgdGhhdCBhZmZlY3QKKy8vIHRoZSB0cmFuc2Zvcm1z
LCBhbmQgc28gd2Ugb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGlu
Zy1wb2ludCBwcmVjaXNpb24uCisjZGVmaW5lIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0xMSgpLCAoYWN0dWFsKS5tMTEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEyKCkpOyAgICAgICAgICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwpLm0xMygpKTsgICAgICAgICAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7
ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVh
bCkubTIxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIy
KCksIChhY3R1YWwpLm0yMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwgKGFjdHVhbCkubTI0KCkpOyAgICAgICAgICBcCisgICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMxKCksIChhY3R1YWwpLm0zMSgpKTsgICAgICAg
ICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFsKS5tMzIo
KSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzMoKSwgKGFj
dHVhbCkubTMzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTM0KCksIChhY3R1YWwpLm0zNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFsKS5tNDEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tNDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgICAgICAgICBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgICAg
ICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAoYWN0dWFsKS5t
NDQoKSkKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIENDTGF5ZXJUcmVlVGVzdENvbW1v
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3Vy
ZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZh
Y2VUZXN0LmNwcAppbmRleCA3MDQ1NDRiNmFkYjMzZDNhMGZmYTM1ZThlNzQyZDQzN2RjMWVmZGZl
Li5jM2IzNjZkZGEzMjM3NDY4Njg2ZmJmODNlZDRmZTMzOTBmODJmMzM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAg
LTU5LDE4ICs1OSwxNiBAQCBURVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHZlcmlmeVN1cmZhY2VD
aGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEFTU0VSVF9UUlVFKG93bmluZ0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpOwogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IG93
bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgSW50UmVjdCB0ZXN0UmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoMywgNCksIEludFNpemUoNSwgNikpOwotCi0gICAgb3duaW5nTGF5ZXItPnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICBvd25pbmdMYXllci0+cmVz
ZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAogICAgIC8vIEN1cnJlbnRseSwgdGhl
IGNvbnRlbnRSZWN0LCBjbGlwUmVjdCwgYW5kIG93bmluZ0xheWVyLT5sYXllclByb3BlcnR5Q2hh
bmdlZCgpIGFyZQogICAgIC8vIHRoZSBvbmx5IHNvdXJjZXMgb2YgY2hhbmdlLgogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TVVJGQUNFX0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3Qo
dGVzdFJlY3QpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9DSEFOR0VEKHJlbmRl
clN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHRlc3RSZWN0KSk7CiAKLSAgICBvd25pbmdMYXllci0+
cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOwogICAgIG93bmluZ0xheWVyLT5z
ZXRPcGFjaXR5KDAuNWYpOwogICAgIEVYUEVDVF9UUlVFKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQ
cm9wZXJ0eUNoYW5nZWQoKSk7Ci0gICAgb3duaW5nTGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2Vk
RmxhZ0ZvclN1YnRyZWUoKTsKKyAgICBvd25pbmdMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2lu
Z0ZvclN1YnRyZWUoKTsKIAogICAgIC8vIFNldHRpbmcgdGhlIHN1cmZhY2UgcHJvcGVydGllcyB0
byB0aGUgc2FtZSB2YWx1ZXMgYWdhaW4gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJjaGFuZ2Ui
LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1
cmZhY2UtPnNldENsaXBSZWN0KHRlc3RSZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGVkOWNlY2I5NjM2NjE5YWNk
MjVlNDAyMDU5MWFkYTZkMzYzYTkzMWIuLjc4MDlkMThhNDM2NzBkNDhhYTc4NjFmYjg3MDQ2NTYy
ODU5M2ZhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCkBAIC0yNiwxMCArMjYsMTIgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKIAorI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUg
PGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyA6OnRlc3Rp
bmc6Ok1vY2s7CiB1c2luZyA6OnRlc3Rpbmc6Ol87CiB1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7
CkBAIC0xMzIsMTQgKzEzNCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgdmVyaWZ5VGVzdFRyZWVJ
bml0aWFsU3RhdGUoKTsKICAgICB9CiAKLSAgICB2b2lkIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RF
cXVhbChjb25zdCBGbG9hdFJlY3QmIGV4cGVjdGVkLCBjb25zdCBGbG9hdFJlY3QmIGFjdHVhbCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5sb2NhdGlvbigp
LngoKSwgYWN0dWFsLmxvY2F0aW9uKCkueCgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4
cGVjdGVkLmxvY2F0aW9uKCkueSgpLCBhY3R1YWwubG9jYXRpb24oKS55KCkpOwotICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQuc2l6ZSgpLndpZHRoKCksIGFjdHVhbC5zaXplKCkud2lk
dGgoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCkuaGVpZ2h0KCks
IGFjdHVhbC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIH0KLQogICAgIE1vY2tMYXllckRlbGVnYXRl
IG1fc2lsZW50RGVsZWdhdGUsIG1fcGFyZW50RGVsZWdhdGU7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG1fcGFyZW50LCBtX2NoaWxkMSwgbV9jaGlsZDIsIG1fY2hpbGQzLCBtX2dyYW5kQ2hp
bGQxLCBtX2dyYW5kQ2hpbGQyLCBtX2dyYW5kQ2hpbGQzOwogfTsKQEAgLTU2MiwyNCArNTU2LDI0
IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXND
b3JyZWN0QmVoYXZpb3IpCiAKICAgICAvLyBDYXNlIDE6IGJhc2ljCiAgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoZGlydHkxKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFs
KGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMjogYSBz
ZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25lZCBvZiBkaXJ0eTEgYW5kIGRpcnR5Mi4K
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTIpKTsKLSAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwg
dGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CiAKICAgICAvLyBDYXNlIDM6IGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVzZSBv
ZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVt
cHR5RGlydHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVj
dCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAx
NC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA0OiBMYXllckNo
cm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5k
cwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRzRGlydHlSZWN0KSk7
Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYs
IDg5MC4wZiwgODkyLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkg
d2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRz
IHRvIGJlIGRpcnR5LAogICAgIC8vICAgICAgICAgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGly
dHkgcmVjdC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKLSAgICB2ZXJpZnlG
bG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwg
dGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RC
b3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIHJlc2V0
TmVlZHNEaXNwbGF5IHNob3VsZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5kIE5PVCBjYWxsIG5v
dGlmeVN5bmNSZXF1aXJlZC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwpA
QCAtNTk2LDEzICs1OTAsMTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5l
ZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CiAKICAgICB0ZXN0TGF5ZXItPnNldEJvdW5k
cyh0ZXN0Qm91bmRzKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4
LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0Vt
cHR5KCkpOwogCiAgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkpOwotICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVz
ZXNDb3JyZWN0QmVoYXZpb3IpCkBAIC02NTYsNyArNjUwLDcgQEAgVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIC8v
IFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQogICAgIC8v
IFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdl
IHRoZSBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTAp
KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCA1LjBmLCAxMC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXllci0+
ZGlydHlSZWN0KCkpOwogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBF
WFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115844</attachid>
            <date>2011-11-18 12:05:24 -0800</date>
            <delta_ts>2011-11-18 13:08:49 -0800</delta_ts>
            <desc>updated to tip of tree and removed CCRenderSurface pointer on damage tracker interface</desc>
            <filename>bug-72520-20111118120523.patch</filename>
            <type>text/plain</type>
            <size>90980</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVlMTU2MGVlNDA1OTJj
NjVmMTdlZWIwMTQ2OWIyZjgyZDVkNTBhOS4uYTk0Y2EzMjI1ZTUyODBjOGZiMWIwMmI5MjJhMmM3
OTUyODVlNDg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTE4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhBQ0tZU2Nyb2xsRml4KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFt
YWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6cmVtb3ZlUmVjdEZyb21Q
cmV2aW91c0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6c2F2ZVJl
Y3RGb3JOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRl
bmREYW1hZ2VGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4
dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZGFtYWdlVHJhY2tlcik6CisKIDIwMTEtMTEtMTggIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXBwZWFyYW5j
ZSBvZiBjb21wb3VuZCB0cmFuc2Zvcm0gYW5pbWF0aW9ucyB1bmRlciBhcHBzIGxpbmtlZCBvbiBT
bm93TGVvcGFyZCBpcyBpbmNvcnJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggODRm
M2E5YWNiNDI4ODFiMjkwZTRiNWU0YjBiZDZhYmY1NTdjY2ViMS4uNjFjZjU1MzkxYzE5NWFhNjhm
Y2U1MzliZDQ3MWU1NzQ1MzJhOWJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxMS0xMS0xOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIgY2xhc3Mg
dG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENDRGFtYWdlVHJhY2tl
clRlc3QgYW5kIHVwZGF0ZWQgb3RoZXIgdGVzdHMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZW11bGF0ZURyYXdpbmdPbmVGcmFtZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcyk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNU
KToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTEtMTEtMTcg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGRpc3BhdGNoIG1lc3NhZ2VzIGZyb20gdGhlIGZyb250LWVuZCB0byB0aGUgYmFja2Vu
ZCBhc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4OGQ0NTZjNDMzMDZmNWVhZDE5
MjAwMzBkMTQwMzdkNTdiMTg4ODMyLi41NjExZDQyMWE5Njc2OTZjNmRhNjAxZWNjZTMxNGU4Yzdm
YWMwMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTQ3LDYgKzM1NDcsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IDBiZDZkYmMzODk2YWU0YTA3NzE5YTRlYTRhM2NjZTczNTkyNzNlMDQuLmFjN2FkNzU3
OGRlMmFhYTRlM2NmOTk4Y2NiNmIwMDc4MWRjZmUzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTMyMiw2ICszMjMsMTAgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRy
YXdPcGFjaXR5KCkpOwogCiAgICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UpKSB7CisKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisg
ICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1h
Z2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXItPmlkKCkpOworCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9
IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigw
LCAwLCAwLCAwKSk7CkBAIC0zMzYsNyArMzQxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEK
ICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1pbmcg
bm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2NjdXIu
Ci0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgp
OworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7
CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU1YzUw
YzNlMTg5MTY3OTlkYWEzZmMyMWIzMGZmZTc2MjM4NzcyMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tl
ci5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2Nyb2xsIGZp
eCBpcyBub3QgaW50ZW5kZWQgdG8ga2VlcCwgYnV0IGlzIHJlcXVpcmVkIHRvIGdldCB0aGUKKy8v
ICAgICAgICBEYW1hZ2VUcmFja2VyIHRvIHdvcmsgcHJvcGVybHkgd2hpbGUgd2FpdGluZyBmb3Ig
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0CisvLyAgICAgICAgc2Nyb2xsaW5nIHRvIGJlIGZpeGVk
LiBPbmNlIHNjcm9sbGluZyBpcyBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFu
ZAorLy8gICAgICAgIHVzZSB0aGUgb3JpZ2luYWwgcmVjdCBpbiBpdHMgcGxhY2UuCitzdGF0aWMg
RmxvYXRSZWN0IEhBQ0tZU2Nyb2xsRml4KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIEZsb2F0UmVjdCBzY3JvbGxlZFJlY3QgPSByZWN0OworICAgIGlm
IChsYXllci0+aXNOb25Db21wb3NpdGVkQ29udGVudCgpKQorICAgICAgICBzY3JvbGxlZFJlY3Qu
bW92ZSgtbGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCkueSgpKTsKKyAgICByZXR1cm4gc2Nyb2xsZWRSZWN0OworfQorCitQYXNzT3duUHRyPENDRGFt
YWdlVHJhY2tlcj4gQ0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NEYW1hZ2VUcmFja2VyKCkpOworfQorCitDQ0RhbWFnZVRyYWNrZXI6OkNDRGFt
YWdlVHJhY2tlcigpCisgICAgOiBtX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4KDApCit7Cit9CisK
K3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjp1cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKGNvbnN0
IFdURjo6VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0
U3VyZmFjZUxheWVySUQpCit7CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVz
IHRoZSAiZGFtYWdlIHJlY3QiIG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UKKyAgICAv
LyByZWN0IGlzIHRoZSByZWdpb24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBjaGFuZ2Vk
IGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2Np
c3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQK
KyAgICAvLyBiYW5kd2lkdGguCisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRhbWFnZSBy
ZWN0IGlzIGNvbXB1dGVkIGFzIHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdlcyB0aGF0
CisgICAgLy8gaGF2ZSBoYXBwZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFzdCBmcmFt
ZSB3YXMgZHJhd24uIFRoaXMgaW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2VzIGZvciBl
eGlzdGluZyBsYXllcnMvc3VyZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJnZXQgc3Vy
ZmFjZQorICAgIC8vICAgLSBsYXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRoZSBwcmV2
aW91cyBmcmFtZSwgYnV0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRoZSBiYXNp
YyBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBmb2xsb3dz
OgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IGNo
YW5nZXMgaW4gYWN0aXZlL25ldyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsYXllciBp
biB0aGUgbGF5ZXJMaXN0OgorICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMgYWN0dWFs
bHkgYSByZW5kZXJTdXJmYWNlOgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBzdXJmYWNl
J3MgZGFtYWdlIHRvIG91ciB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAgZWxzZQor
ICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUgdGFyZ2V0
IHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFnZSBjYXVz
ZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAgIC8vICAg
ICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8vICAgICAgICAgICBhZGQgdGhlIG9s
ZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0IHN1cmZhY2UgZGFtYWdlLgorICAg
IC8vCisgICAgLy8gICAgICAgLy8gMy4gY29tYmluZSBib3RoIHBhcnRpYWwgZGFtYWdlIHJlY3Rz
IHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIC8vIEFkZGl0aW9uYWwg
aW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhpcyBhbGdvcml0aG0gaXMgaW1w
bGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNjZW5kYW50IHN1cmZhY2VzIGhh
dmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFtYWdlLgorICAgIC8vCisgICAg
Ly8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0ZSAiZGFtYWdlIiB0byB0aGUg
dGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAgIG5vdCBjaGFuZ2VkLCBpdCBk
b2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRyYXdpbmcuIEFsbCBsYXllcnMg
dGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdpb24gc3RpbGwgbmVlZCB0byBi
ZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAvLyAgIGNoYW5nZWQgaXRzIG9w
YWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSByZS1kcmF3biBhcyB3ZWxsLCBl
dmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgorICAgIC8vCisgICAgLy8gLSBJ
ZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhlIG9sZCBib3VuZHMgYW5kIG5l
dyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4gc29tZSBvZiB0aGUgZXhwb3Nl
ZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBhbnl0aGluZy4gQnV0IHRoaXMK
KyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRlIHRoZSBkYW1hZ2UgcmVjdC4g
SWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAvLyAgIG9sZCBib3VuZHMgd291
bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVzcyBvZiBob3cgbXVjaCBpdCBv
dmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcgYm91bmRzLCB3aGljaCBhbHNv
IG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLworICAgIC8vIC0gU2VlIGNvbW1l
bnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGV4YWN0bHkgaXMgY29uc2lk
ZXJlZAorICAgIC8vICAgYSAiY2hhbmdlIiBpbiBhIGxheWVyL3N1cmZhY2UuCisgICAgLy8KKyAg
ICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0cywgdHdvIFJlY3RNYXBzIGFy
ZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBUaGUgImN1cnJlbnQiIG1hcCBj
b250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZQorICAg
IC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lkZSB0aGUgcHJldmlvdXMgZGFt
YWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8gICAgICAgICBvciBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVuIGV4cG9zZWQgYW5kIGRhbWFn
ZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBBcyB0aGUgYWxnb3JpdGhtIHBy
b2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAvLyAgICAgICAgIG1h
cCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhhdCBubyBsb25nZXIgZXhpc3Qu
CisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFwIHN0YXJ0cyBvdXQgZW1wdHks
IGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5CisgICAgLy8gICAgICAgICBs
YXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1cmZhY2UgaXMgYWRkZWQgdG8g
dGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIgdGhlIGRhbWFnZSByZWN0IGlz
IGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNvIHRoYXQgdGhlCisgICAgLy8g
ICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhlIG5leHQgZnJhbWUuCisgICAg
Ly8KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMobGF5ZXJMaXN0LCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisgICAg
RmxvYXRSZWN0IGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0
b3ZlclJlY3RzKCk7CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHVuaW9uUmVjdChkYW1hZ2VG
cm9tQWN0aXZlTGF5ZXJzLCBkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CisKKyAgICAvLyBTd2Fw
IG5leHQgYW5kIHByZXZpb3VzIGhpc3RvcnkgbWFwcywgc2ltcGx5IGJ5IGNoYW5naW5nIHRoZSBp
bmRleC4KKyAgICBtX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0
b3J5SW5kZXggKyAxKSAlIDI7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1
dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFdURjo6VmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpCit7CisgICAgRmxv
YXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAodW5zaWduZWQgbGF5
ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpOworICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+aWQoKSAh
PSB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvclJlbmRl
clN1cmZhY2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
eHRlbmREYW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0
dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVE
YW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIgY29tcHV0aW5nIGRhbWFn
ZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVtcyBpbiB0aGUgY3VycmVu
dAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVycy9zdXJmYWNlcyB0aGF0
IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAvLyBhcmUgbm93IGV4cG9z
ZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBG
bG9hdFJlY3QoKTsKKyAgICBSZWN0TWFwJiBsZWZ0b3ZlclJlY3RIaXN0b3J5ID0gbV9sYXllclJl
Y3RzSGlzdG9yeVttX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKworICAgIGZvciAoUmVjdE1h
cDo6aXRlcmF0b3IgaXQgPSBsZWZ0b3ZlclJlY3RIaXN0b3J5LmJlZ2luKCk7IGl0ICE9IGxlZnRv
dmVyUmVjdEhpc3RvcnkuZW5kKCk7ICsraXQpCisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQt
PnNlY29uZCk7CisKKyAgICBsZWZ0b3ZlclJlY3RIaXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1
cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6cmVtb3ZlUmVj
dEZyb21QcmV2aW91c0ZyYW1lKGludCBsYXllcklEKQoreworICAgIFJlY3RNYXAmIGN1cnJlbnRS
ZWN0SGlzdG9yeSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRl
eF07CisKKyAgICAvLyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcCwg
b3IgaWYgbm90IGZvdW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICByZXR1
cm4gY3VycmVudFJlY3RIaXN0b3J5LnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VU
cmFja2VyOjpzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRTcGFjZVJlY3QpCit7CisgICAgaW50IG5leHRNYXBJbmRleCA9IChtX2N1cnJlbnRS
ZWN0SGlzdG9yeUluZGV4ICsgMSkgJSAyOworICAgIFJlY3RNYXAmIG5leHRSZWN0SGlzdG9yeSA9
IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbmV4dE1hcEluZGV4XTsKKworICAgIC8vIFRoaXMgbGF5ZXIg
SUQga2V5IHNob3VsZCBub3QgeWV0IGV4aXN0IGluIG5leHQgaGlzdG9yeS4KKyAgICBBU1NFUlQo
bmV4dFJlY3RIaXN0b3J5LmZpbmQobGF5ZXJJRCkgPT0gbmV4dFJlY3RIaXN0b3J5LmVuZCgpKTsK
KworICAgIG5leHRSZWN0SGlzdG9yeS5zZXQobGF5ZXJJRCwgdGFyZ2V0U3BhY2VSZWN0KTsKK30K
Kwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJbXBs
KiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJlIGFy
ZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lvbiBvZiB0aGUgdGFyZ2V0
IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUuZy4gb3BhY2l0eSwgcG9z
aXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBlbnRpcmUgcmVnaW9uIG9m
IHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgLSB0
aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWdlcyB0aGUgc3VyZmFjZSwgYmVjYXVzZSB0aGlz
IHJlZ2lvbiBpcyBub3cgZXhwb3NlZC4KKyAgICAvLyAgICAgICAgLSBub3RlIHRoYXQgaW4gbWFu
eSBjYXNlcyB0aGUgb2xkIGFuZCBuZXcgbGF5ZXIgcmVjdHMgbWF5IG92ZXJsYXAsIHdoaWNoIGlz
IGZpbmUuCisgICAgLy8KKyAgICAvLyAgIDIuIFJlcGFpbnQvdXBkYXRlOiBJZiBhIHJlZ2lvbiBv
ZiB0aGUgbGF5ZXIgdGhhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQsIHRoYXQKKyAgICAvLyAgICAg
IHJlZ2lvbiBkYW1hZ2VzIHRoZSBzdXJmYWNlLgorICAgIC8vCisgICAgLy8gUHJvcGVydHkgY2hh
bmdlcyB0YWtlIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3RzLgorCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBv
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgp
LCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCAwKTsKKworICAgIEZsb2F0UmVjdCBv
bGRMYXllclJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUobGF5ZXItPmlkKCkpOwor
CisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0u
bWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgbGF5ZXItPmJvdW5kcygpKSkpOworICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5p
ZCgpLCBsYXllclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIGlmIChsYXllci0+bGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoKSkgeworICAgICAgICAvLyBJZiBhIGxheWVyIGhhcyBjaGFuZ2VkLCB0aGVu
IGl0cyBlbnRpcmUgbGF5ZXIgcmVjdCBhZmZlY3RzIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAg
ICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhsYXllclJlY3RJblRhcmdldFNwYWNl
KTsKKworICAgICAgICAvLyBUaGUgbGF5ZXIncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9u
IHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vLgorICAgICAgICAvLyBOb3RlIG9sZExheWVyUmVjdCBp
cyBhbHJlYWR5IGluIHRhcmdldCBzcGFjZS4KKyAgICAgICAgaWYgKCFvbGRMYXllclJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRM
YXllclJlY3QpOworCisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVwZGF0ZVJlY3QoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRpZXMgaGF2ZW50IGNoYW5nZWQs
IHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5CisgICAgICAgIC8vIGFmZmVjdGVk
IGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3VsZCBiZSBlbXB0eS4KKyAgICAg
ICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNmb3JtLm1h
cFJlY3QoSEFDS1lTY3JvbGxGaXgobGF5ZXIsIGxheWVyLT51cGRhdGVSZWN0KCkpKTsKKyAgICAg
ICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0SW5UYXJnZXRTcGFj
ZSk7CisgICAgfQorfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVu
ZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVj
dCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2VuZGFudCBzdXJmYWNlIiBj
YW4gZGFtYWdlIHJlZ2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6CisgICAgLy8gICAxLiBQ
cm9wZXJ0eSBjaGFuZ2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNlJ3MgZ2VvbWV0cnkgY2Fu
IGNoYW5nZSBiZWNhdXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gZGVzY2Vu
ZGFudHMgKGkuZS4gdGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBzdXJmYWNlJ3MgY29udGVu
dCByZWN0CisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5jZXN0b3IgbGF5ZXJzIHRo
YXQgcHJvcGFnYXRlIHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlaXIgZW50aXJlIHN1YnRy
ZWUuCisgICAgLy8gICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90aCB0aGUgb2xkIHN1cmZh
Y2UgcmVjdCBhbmQgbmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8gICAgICAgICAgZGFtYWdl
IHRoZSB0YXJnZXQgc3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAgIDIuIERh
bWFnZSByZWN0OiBUaGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IGl0cyBvd24g
bGF5ZXJMaXN0IGFzIHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8vICAgICAgc2hvdWxkIHBy
b3BhZ2F0ZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKworICAgIENDUmVuZGVyU3Vy
ZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICBGbG9h
dFJlY3Qgb2xkU3VyZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUobGF5ZXIt
PmlkKCkpOworCisgICAgRmxvYXRSZWN0IHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSA9IHJlbmRl
clN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFt
ZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIEZsb2F0UmVj
dCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlOworICAgIGlmIChyZW5kZXJTdXJmYWNlLT5zdXJmYWNl
UHJvcGVydHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gVGhlIGVudGlyZSBzdXJmYWNlIGNvbnRy
aWJ1dGVzIGRhbWFnZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1
cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UncyBvbGQgcmVn
aW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vLgorICAgICAgICBp
ZiAoIW9sZFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJl
Y3QudW5pdGVJZk5vblplcm8ob2xkU3VyZmFjZVJlY3QpOworCisgICAgfSBlbHNlCisgICAgICAg
IC8vIE9ubHkgdGhlIHN1cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFtYWdlIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1cmZhY2Ut
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIC8vIElmIHRoZXJl
IHdhcyBkYW1hZ2UsIHRyYW5zZm9ybSBpdCB0byB0YXJnZXQgc3BhY2UsIGFuZCBwb3NzaWJseSBj
b250cmlidXRlIGl0cyByZWZsZWN0aW9uIGlmIG5lZWRlZC4KKyAgICBpZiAoIWRhbWFnZVJlY3RJ
bkxvY2FsU3BhY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBvcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsK
KyAgICAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNm
b3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxTcGFjZSk7CisgICAgICAgIHRhcmdldERhbWFn
ZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAg
IGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5v
cmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJh
bnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAgICAgICByZXBsaWNhT3Jp
Z2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS55KCksIDApOworCisgICAgICAgICAgICBGbG9hdFJlY3QgcmVwbGljYURhbWFn
ZVJlY3QgPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxT
cGFjZSk7CisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKHJlcGxp
Y2FEYW1hZ2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmE1M2FlNmYzNzE5Y2NjZWEzNzI5MTIxODA1
NDgzYWNkNGNjMWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NEYW1hZ2VUcmFja2VyX2gKKyNkZWZpbmUgQ0NEYW1hZ2VUcmFja2Vy
X2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEND
TGF5ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworCisvLyBDb21wdXRlcyB0aGUgcmVn
aW9uIHdoZXJlIHBpeGVscyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQgb24gYSBSZW5kZXJTdXJmYWNl
LiBUaGlzIHJlZ2lvbiBpcyB1c2VkCisvLyB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJh
d24gdG8gdGhlIHNjcmVlbiB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQgYmFuZHdpZHRoLgor
Y2xhc3MgQ0NEYW1hZ2VUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV1RGOjpQYXNzT3du
UHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+Q0NEYW1hZ2VUcmFj
a2VyKCkgeyB9CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoY29uc3Qg
V1RGOjpWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRT
dXJmYWNlTGF5ZXJJRCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50RGFtYWdlUmVjdCgp
IHsgcmV0dXJuIG1fY3VycmVudERhbWFnZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RhbWFn
ZVRyYWNrZXIoKTsKKworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxheWVy
cyhjb25zdCBXVEY6OlZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50
IHRhcmdldFN1cmZhY2VMYXllcklEKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURhbWFnZUZyb21M
ZWZ0b3ZlclJlY3RzKCk7CisKKyAgICAvLyBUaGVzZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSB1c2Vk
IG9ubHkgaW4gY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoKS4KKyAgICB2b2lkIHNhdmVS
ZWN0Rm9yTmV4dEZyYW1lKGNvbnN0IGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFNwYWNlUmVjdCk7CisgICAgRmxvYXRSZWN0IHJlbW92ZVJlY3RGcm9tUHJldmlvdXNGcmFtZShj
b25zdCBpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVy
SW1wbCosIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CisgICAgdm9pZCBleHRlbmREYW1h
Z2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VS
ZWN0KTsKKworICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBo
YXNodGFibGVzIG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgorICAgIC8vIFRoZSAiY3VycmVudCIg
bWFwIGlzIHVzZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJh
bWUsIHdoaWxlCisgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVy
IHJlY3RzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCisgICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgRmxvYXRSZWN0PiBSZWN0TWFwOworICAgIFJlY3RNYXAgbV9sYXllclJlY3RzSGlz
dG9yeVsyXTsKKyAgICBpbnQgbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRleDsKKworICAgIEZsb2F0
UmVjdCBtX2N1cnJlbnREYW1hZ2VSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ0NEYW1hZ2VUcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCBhN2Y2ZTgzNjgwNGFiNDVhNTk2MjRhMzcwZDYyODMyNWE4NzlmY2QxLi4zOGIzNjQ3OGE0MjA0
ODdlYTk0Y2E4YmJmZTJiNjI0YzMwMmRlMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0yMzksNiArMjM5LDEyIEBAIHZvaWQgQ0NMYXllckltcGw6Om5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZEZvckRlc2NlbmRhbnRzKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+bm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCit2b2lkIENDTGF5ZXJJbXBsOjpyZXNldEFs
bENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpCit7CisgICAgcmVzZXRVcGRhdGVSZWN0c0ZvclN1
YnRyZWUoKTsKKyAgICByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7Cit9CisK
IHZvaWQgQ0NMYXllckltcGw6OnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQog
ewogICAgIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgPSBmYWxzZTsKQEAgLTI1MCw2ICsyNTYsMTQg
QEAgdm9pZCBDQ0xheWVySW1wbDo6cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgp
CiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRy
ZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6cmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUo
KQoreworICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuW2ld
LT5yZXNldFVwZGF0ZVJlY3RzRm9yU3VidHJlZSgpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpz
ZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgYm91bmRzKQogewogICAgIGlmIChtX2JvdW5kcyA9PSBi
b3VuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZjZjI2
MjU3ZmQ5N2Q0YmQ4MjQxLi41NWJhY2VjNTJhMGViN2UwODM5OGRkNTk3OTlmNWEwNDdlZmVjNzUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3BlcnR5
Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAgICB2
b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMg
cHJvcGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9pZCBy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ0NMYXllckltcGwoaW50KTsKQEAgLTIxMCw2ICsyMTAsOSBAQCBwcml2YXRlOgogICAg
IC8vIE5vdGUgY2FyZWZ1bGx5IHRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBjdXJyZW50IGxheWVy
LgogICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yRGVzY2VuZGFudHMoKTsKIAor
ICAgIHZvaWQgcmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUoKTsKKyAgICB2b2lkIHJlc2V0UHJv
cGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgcHJvcGVydHkgY2hh
bmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9
CiAKICAgICB2b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGE3OTNjY2EyNjU3ZjYxNTMzMjJhZjEyODEy
NWFhMDUzYTAxMzExMjIuLmE0N2NlMjhlYjkyZTk2ZTUxZjZlY2IwZmY5OTUyOGFjOGY2NzdhMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC03NCw2ICs3NCw3IEBAIHN0cnVjdCBD
Q1NldHRpbmdzIHsKICAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkK
ICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQ
bGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKKyAgICAgICAgICAgICwgdXNlRGFtYWdlVHJhY2tlcihm
YWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkgeyB9CiAKICAgICBib29sIGFjY2Vs
ZXJhdGVQYWludGluZzsKQEAgLTgxLDYgKzgyLDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAg
IGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwog
ICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgdXNlRGFtYWdlVHJhY2tl
cjsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcAppbmRleCBjYjM4ZmE4NjBjZTdiN2M4YWEyZmMxYjcxODkyODUwZTVkYWM1MWJkLi5i
NDMyNDViNjk3ZTMzNDVjN2IyYjliMzNhNGE4YzAxZGQ3ODlhNzQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDYs
NiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCog
b3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCiAgICAg
LCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2VyID0gQ0NEYW1hZ2VUcmFj
a2VyOjpjcmVhdGUoKTsKIH0KIAogQ0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggNGJkNGFmODU4MTk0MjY4Y2YwYzg1ZDNh
NmEwZDJkNDA5ZTBlYmNkOC4uYjFjZDlmM2M5MTdjMTk5MmQ5MzMxZjZhMjVlZjdjYjAyOGJlY2M1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBjbGFzcyBDQ0xheWVy
SW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJl
OwpAQCAtMTAxLDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFu
Z2VkRmxhZygpIHsgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29s
IHN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdDsKIAorICAgIENDRGFtYWdlVHJhY2tlciog
ZGFtYWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQor
CiBwcml2YXRlOgogICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIEND
TGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KQEAgLTEyMCw2ICsxMjMsMTEgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAg
VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2xheWVyTGlzdDsKKworICAgIE93blB0cjxD
Q0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdlVHJhY2tlcjsKKworICAgIC8vIFN0b3JlZCBpbiB0aGUg
InN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29y
aW5nLgorICAgIEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAwZjU5OGU3OGE5ODY4ODMxZTgyYTJmNWM4ODJkNGYzODRjZmJj
NjA1Li4yODNkYzZmOWY3Y2VjZWUzNThiMDRiMGNlN2Q3NTc1MzNjZGYyZWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU0LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91
bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgn
LAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJJbXBsVGVzdC5jcHAnLApAQCAtNjEsNiArNjIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0M2NiNGM0
NzcxYmM4NDBiZmE5ZWMxNDNlYzA3ZDQ5MGNjY2EzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTAsMCAr
MSw1NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDRGFtYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9u
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29y
dGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAi
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKwordm9pZCBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5
ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIFNhbml0eSBjaGVj
azogVGhlIHRlc3QgaXRzZWxmIHNob3VsZCBjcmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIg
c3VyZmFjZSwgc28KKyAgICAvLyAgICAgICAgICAgICAgIHRoYXQgdGhlIHN1cmZhY2UgKGFuZCBp
dHMgZGFtYWdlIHRyYWNrZXIpIGNhbiBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vICAg
ICAgICAgICAgICAgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICBBU1NFUlRfVFJVRShyb290
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CisKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0
KCk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdCk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKK30KKwordm9pZCBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQor
eworICAgIC8vIFRoaXMgZW11bGF0ZXMgb25seSB0aGUgc3RlcHMgdGhhdCBhcmUgcmVsZXZhbnQg
dG8gdGVzdGluZyB0aGUgZGFtYWdlIHRyYWNrZXI6CisgICAgLy8gICAxLiBjb21wdXRpbmcgdGhl
IHJlbmRlciBwYXNzZXMgYW5kIGxheWVybGlzdHMKKyAgICAvLyAgIDIuIHVwZGF0aW5nIGFsbCBk
YW1hZ2UgdHJhY2tlcnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIKKyAgICAvLyAgIDMuIHJlc2V0dGlu
ZyBhbGwgdXBkYXRlUmVjdHMgYW5kIHByb3BlcnR5Q2hhbmdlZCBmbGFncyBmb3IgYWxsIGxheWVy
cyBhbmQgc3VyZmFjZXMuCisKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShyb290LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIC8vIGl0ZXJh
dGUgYmFjay10by1mcm9udCwgc28gdGhhdCBkYW1hZ2UgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZnJv
bSBkZXNjZW5kYW50IHN1cmZhY2VzIHRvIGFuY2VzdG9ycy4KKyAgICBmb3IgKGludCBpID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ld
LT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHRhcmdldFN1cmZhY2UtPmRhbWFnZVRyYWNrZXIo
KS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSh0YXJnZXRTdXJmYWNlLT5sYXllckxpc3Qo
KSwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5ZXJJZCgpKTsKKyAgICB9CisKKyAgICByb290LT5y
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworCisgICAgcm9vdC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMC4wZiwgNTAwLjBm
KSkpOworCisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLjBmLCAxMDAuMGYp
KTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisKKyAgICBy
ZXR1cm4gcm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0
ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgdHJlZSBoYXMg
dHdvIHJlbmRlciBzdXJmYWNlczogb25lIGZvciB0aGUgcm9vdCwgYW5kIG9uZSBmb3IKKyAgICAv
LyBjaGlsZDEuIEFkZGl0aW9uYWxseSwgdGhlIHJvb3QgaGFzIGEgc2Vjb25kIGNoaWxkIGxheWVy
LCBhbmQgY2hpbGQxIGhhcyB0d28KKyAgICAvLyBjaGlsZHJlbiBvZiBpdHMgb3duLgorCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDUpOworCisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7
CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKDUwMC4wZiwgNTAwLjBmKSkpOworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDEwMC4wZiwgMTAwLjBmKSk7CisgICAgY2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6
ZSgzMCwgMzApKTsKKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41Zik7IC8vIHdpdGggYSBjaGls
ZCB0aGF0IGRyYXdzQ29udGVudCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBjcmVhdGUg
aXRzIG93biByZW5kZXJTdXJmYWNlLgorICAgIGNoaWxkMS0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsgLy8gdGhpcyBsYXllciBkb2VzIG5vdCBkcmF3LCBidXQgaXMgaW50ZW5kZWQgdG8gY3JlYXRl
IGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgxMS4wZiwgMTEuMGYpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDE4LCAx
OCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGls
ZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLjBmLCAyMDAuMGYpKTsKKyAgICBncmFuZENo
aWxkMS0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQxLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgxOTAuMGYsIDE5MC4wZikpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2
LCA4KSk7CisgICAgZ3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNo
aWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZDIpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQyKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNl
KCk7CisKKyAgICAvLyBTZXR1cCBpbmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3
aGljaCBhbHdheXMgZGFtYWdlcyBldmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFj
dHVhbGx5IHBlcmZvcm0gc3BlY2lmaWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
Cit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0
IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3
ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQor
CitjbGFzcyBDQ0RhbWFnZVRyYWNrZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJp
dmF0ZToKKyAgICAvLyBGb3IgdGVzdGluZyBwdXJwb3NlcywgZmFrZSB0aGF0IHdlIGFyZSBvbiB0
aGUgaW1wbCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJl
YWQ7Cit9OworCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJl
ZVdpdGhPbmVTdXJmYWNlKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaW1wbGUg
dGVzdCB0cmVlIHdpbGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAg
Ly8gc3VyZmFjZXMgYW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICBFWFBF
Q1RfRVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAg
IEVYUEVDVF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgp
KTsKKyAgICBFWFBFQ1RfRVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsx
XS0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTI1MC4wZiwgLTI1MC4wZiwgNTAwLjBmLCA1MDAu
MGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCBz
YW5pdHlDaGVja1Rlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKQoreworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGF0IHRoZSBjb21wbGV4IHRlc3QgdHJlZSB3aWxsIGFjdHVhbGx5IHByb2R1Y2UgdGhlIGV4
cGVjdGVkIHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBsYXllciBsaXN0cy4KKworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3Vy
ZmFjZXMoKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRy
ZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVu
KClbMV07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMywgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSgyLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0
KCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBmb3IgY2hpbGQxIG9ubHkg
aGFzIGEgY29udGVudFJlY3QgdGhhdCBlbmNsb3NlcyBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGls
ZDIsIGJlY2F1c2UgY2hpbGQxIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYsIDE2LjBmLCAxOC4wZiksIGNoaWxk
RGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KC0yNTAuMGYs
IC0yNTAuMGYsIDUwMC4wZiwgNTAwLjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCisKK1RFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9u
ZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRy
ZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hvdWxk
IGNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAgICAvLwor
ICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBmLCAx
My4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAv
LyBEYW1hZ2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgxMCwg
MTEpIHBsdXMgcG9zaXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41IGxheWVyV2lkdGgpIHRy
YW5zbGF0ZWQgdG8gc3VyZmFjZSBzcGFjZSAoLTAuNSBzdXJmYWNlV2lkdGgpLgorICAgIGZsb2F0
IHRhcmdldFNwYWNlRGFtYWdlWCA9IDEwLjBmICsgMTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7Cisg
ICAgZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VZID0gMTEuMGYgKyAxMDAuMGYgLSAxNS4wZiAtIDI1
MC4wZjsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFjZURhbWFn
ZVksIDEyLjBmLCAxMy4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogVGhl
IHNhbWUgdXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVjZXMgdGhlIHNhbWUg
ZGFtYWdlLgorICAgIC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLjBm
LCAxMS4wZiwgMTIuMGYsIDEzLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFtYWdlWSwgMTIu
MGYsIDEzLjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0aW5nIGEg
ZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5ldyB1cGRh
dGUgcmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCByZWdpb24uCisgICAgLy8K
KyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAxLjBmLCAy
LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8v
IERhbWFnZSBwb3NpdGlvbiBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDIwLCAy
NSkgcGx1cyBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQb3MgLSAwLjUgbGF5ZXJXaWR0aCkgdHJh
bnNsYXRlZCB0byBzdXJmYWNlIHNwYWNlICgtMC41IHN1cmZhY2VXaWR0aCkuCisgICAgcm9vdERh
bWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICB0YXJnZXRTcGFjZURhbWFnZVggPSAyMC4wZiArIDEwMC4wZiAt
IDE1LjBmIC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDI1LjBmICsgMTAwLjBm
IC0gMTUuMGYgLSAyNTAuMGY7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KHRh
cmdldFNwYWNlRGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAxLjBmLCAyLjBmKSwgcm9vdERh
bWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdl
Rm9yUHJvcGVydHlDaGFuZ2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNy
ZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgLy8gQ0FTRSAxOiBUaGUg
bGF5ZXIncyBwcm9wZXJ0eSBjaGFuZ2VkIGZsYWcgdGFrZXMgcHJpb3JpdHkgb3ZlciB1cGRhdGUg
cmVjdC4KKyAgICAvLworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwg
MTEuMGYsIDEyLjBmLCAxMy4wZikpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hl
Y2sgLSB3ZSBzaG91bGQgbm90IGhhdmUgYWNjaWRlbnRhbGx5IGNyZWF0ZWQgYSBzZXBhcmF0ZSBy
ZW5kZXIgc3VyZmFjZSBmb3IgdGhlIHRyYW5zbHVjZW50IGxheWVyLgorICAgIEFTU0VSVF9FUSgy
LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBE
YW1hZ2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQb3MgLSAw
LjUgKiBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ugc3BhY2UgKC0gMC41ICogc3Vy
ZmFjZVdpZHRoKS4KKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFnZVggPSAxMDAuMGYgLSAxNS4w
ZiAtIDI1MC4wZjsKKyAgICBmbG9hdCB0YXJnZXRTcGFjZURhbWFnZVkgPSAxMDAuMGYgLSAxNS4w
ZiAtIDI1MC4wZjsKKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KHRhcmdl
dFNwYWNlRGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAzMC4wZiwgMzAuMGYpOworICAgIEZs
b2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4
cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiBhIGxheWVy
IG1vdmVzIGR1ZSB0byBwcm9wZXJ0eSBjaGFuZ2UsIGl0IGRhbWFnZXMgYm90aCB0aGUgbmV3IGxv
Y2F0aW9uCisgICAgLy8gICAgICAgICBhbmQgdGhlIG9sZCAoZXhwb3NlZCkgbG9jYXRpb24uIFRo
ZSBvbGQgbG9jYXRpb24gaXMgdGhlIGVudGlyZSBvbGQgbGF5ZXIsCisgICAgLy8gICAgICAgICBu
b3QganVzdCB0aGUgdXBkYXRlUmVjdC4KKworICAgIC8vIEZpcnN0LCBkbyBvbmUgZnJhbWUgd2hl
cmUgb25seSB0aGUgdXBkYXRlIHJlY3QgY2F1c2VzIGRhbWFnZS4KKyAgICBjaGlsZC0+c2V0VXBk
YXRlUmVjdChGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAxLjBmLCAyLjBmKSk7CisgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFj
dHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgy
MDAuMGYsIDIzMC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisKKyAgICAvLyBEYW1hZ2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiBjaGlsZCAo
bGF5ZXJQb3MgLSAwLjUgKiBsYXllcldpZHRoKSB0cmFuc2xhdGVkIHRvIHN1cmZhY2Ugc3BhY2Ug
KC0wLjUgKiBzdXJmYWNlV2lkdGgpLgorICAgIHRhcmdldFNwYWNlRGFtYWdlWCA9IDIwMC4wZiAt
IDE1LjBmIC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDIzMC4wZiAtIDE1LjBm
IC0gMjUwLjBmOworCisgICAgLy8gRXhwZWN0IGRhbWFnZSB0byBiZSB0aGUgY29tYmluYXRpb24g
b2YgdGhlIHByZXZpb3VzIG9uZSBhbmQgdGhlIG5ldyBvbmUuCisgICAgZXhwZWN0ZWRSZWN0LnVu
aXRlSWZOb25aZXJvKEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFt
YWdlWSwgMzAuMGYsIDMwLjBmKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZFJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5n
TGF5ZXIpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBU
ZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEg
PSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCg0MDAuMGYsIDM4MC4wZikpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwg
OCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgLy8gQ0FTRSAx
OiBBZGRpbmcgYSBuZXcgbGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2Uu
CisgICAgLy8KKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGVtdWxhdGVEcmF3aW5n
T25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgLSBhbGwgMyBsYXll
cnMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIHJlbmRlciBzdXJmYWNlOyByZW5kZXIgc3VyZmFjZXMg
YXJlIHRlc3RlZCBlbHNld2hlcmUuCisgICAgQVNTRVJUX0VRKDMsIHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIEZsb2F0UmVjdCBleHBlY3RlZFJlY3Qg
PSBGbG9hdFJlY3QoNDAwLjBmIC0gMy4wZiAtIDI1MC4wZiwgMzgwLjBmIC0gNC4wZiAtIDI1MC4w
ZiwgNi4wZiwgOC4wZik7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7CisKKyAg
ICAvLyBDQVNFIDI6IElmIHRoZSBsYXllciBpcyByZW1vdmVkLCBpdHMgZW50aXJlIG9sZCBsYXll
ciBiZWNvbWVzIGV4cG9zZWQsIG5vdCBqdXN0IHRoZQorICAgIC8vICAgICAgICAgbGFzdCB1cGRh
dGUgcmVjdC4KKworICAgIC8vIEZpcnN0LCBkbyBvbmUgZnJhbWUgd2hlcmUgb25seSB0aGUgdXBk
YXRlIHJlY3QgY2F1c2VzIGRhbWFnZS4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRS
ZWN0KDEuMGYsIDIuMGYsIDMuMGYsIDQuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworCisgICAgLy8gVGhlbiwgdGVzdCBsYXllciByZW1vdmFsCisgICAgY2hp
bGQxLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgtMTY1LjBmLCAtMTY1LjBmLCAzMC4wZiwgMzAuMGYpLCByb290RGFtYWdl
UmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JN
dWx0aXBsZUxheWVycykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVB
bmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDQwMC4wZiwgMzgwLjBmKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50
U2l6ZSg2LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCB3ZSBkb24ndCB3YW50
IHRoZSBhYm92ZSB0cmVlIG1hbmlwdWxhdGlvbiB0byBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhl
IHNhbWUgZnJhbWUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKwor
ICAgIC8vIERhbWFnaW5nIHR3byBsYXllcnMgc2ltdWx0YW5lb3VzbHkgc2hvdWxkIGNhdXNlIGNv
bWJpbmVkIGRhbWFnZS4KKyAgICAvLyAtIGNoaWxkMSB1cGRhdGUgcmVjdCBpbiBzdXJmYWNlIHNw
YWNlOiBGbG9hdFJlY3QoLTE2NS4wZiwgLTE2NS4wZiwgMS4wZiwgMi4wZik7CisgICAgLy8gLSBj
aGlsZDIgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KCAxNDcuMGYsIDEy
Ni4wZiwgMy4wZiwgNC4wZik7CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCAxLjBmLCAyLjBmKSk7CisgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZsb2F0
UmVjdCgwLjBmLCAwLjBmLCAzLjBmLCA0LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTE2NS4wZiwgLTE2NS4wZiwgMzE1LjBmLCAy
OTUuMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JOZXN0ZWRTdXJmYWNlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRy
ZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBy
b290RGFtYWdlUmVjdDsKKworICAgIC8vIENBU0UgMTogRGFtYWdlIHRvIGEgZGVzY2VuZGFudCBz
dXJmYWNlIHNob3VsZCBwcm9wYWdhdGUgcHJvcGVybHkgdG8gYW5jZXN0b3Igc3VyZmFjZS4KKyAg
ICAvLworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSBjaGlsZDEgc3Vy
ZmFjZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNhc2UgZHVyaW5nIHNldHVw
LgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTcuMGYsIDE5Ni4wZiwgNi4w
ZiwgOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBkYW1hZ2UgdG8gdGhlIHJvb3Qg
c3VyZmFjZSBzaG91bGQgYmUgaW4gdGhlIHJvb3Qgc3VyZmFjZSdzIHNwYWNlICh3aGVyZSB0aGUg
b3JpZ2luCisgICAgLy8gaXMgY2VudGVyZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgc3VyZmFjZS4p
CisgICAgLy8gU28gaGVyZSwgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgcm9vdCBzdXJmYWNl
IGlzICgtMjUwLCAtMjUwKTsgYW5kIHRoZW4gdGhlCisgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRh
bWFnZSByZWN0IGlzIC0yNTAgKyBjaGlsZFBvc2l0aW9uIC0gMC41ICogY2hpbGRXaWR0aCArIGdy
YW5kQ2hpbGRQb3NpdGlvbiAtIDAuNSAqIGdyYW5kQ2hpbGRXaWR0aC4KKyAgICBmbG9hdCByb290
U3BhY2VEYW1hZ2VYID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMjAwLjBmIC0gMy4wZjsK
KyAgICBmbG9hdCByb290U3BhY2VEYW1hZ2VZID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsg
MjAwLjBmIC0gNC4wZjsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3Qocm9vdFNw
YWNlRGFtYWdlWCwgcm9vdFNwYWNlRGFtYWdlWSwgNi4wZiwgOC4wZiksIHJvb3REYW1hZ2VSZWN0
KTsKKworICAgIC8vIENBU0UgMjogU2FtZSBhcyBwcmV2aW91cyBjYXNlLCBidXQgd2l0aCBhZGRp
dGlvbmFsIGRhbWFnZSBlbHNld2hlcmUgdGhhdCBzaG91bGQgYmUgcHJvcGVybHkgdW5pb25lZC4K
KyAgICAvLyAtIGNoaWxkMSByZW5kZXIgc3VyZmFjZSBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNw
YWNlOiBGbG9hdFJlY3QoMzIuMGYsIDMxLjBmLCA2LjBmLCA4LjBmKQorICAgIC8vIC0gY2hpbGQy
IGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgtMjQ4LjBmLCAtMjQ4LjBm
LCAxOC4wZiwgMTguMGYpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuN2YpOworICAg
IGNoaWxkMi0+c2V0T3BhY2l0eSgwLjdmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKworICAgIC8vIGRhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJl
IHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjYXNlIGR1cmluZyBzZXR1cC4KKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTk3LjBmLCAxOTYuMGYsIDYuMGYsIDguMGYpLCBjaGls
ZERhbWFnZVJlY3QpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxk
IGJlIHRoZSB1bmlvbiBvZiBjaGlsZDEncyByZW5kZXIgc3VyZmFjZSwgYW5kIGNoaWxkMidzIGxh
eWVyLgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgtMjQ4LjBmLCAtMjQ4LjBm
LCAyODYuMGYsIDI4Ny4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdl
VHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tRGVzY2VuZGFudExh
eWVyKQoreworICAgIC8vIEEgZGVzY2VuZGFudCBsYXllciBjaGFuZ2VzLCB3aGljaCBhZmZlY3Rz
IHRoZSBjb250ZW50IGJvdW5kcyBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCisgICAgLy8gVGhlIGVu
dGlyZSBzdXJmYWNlIGFyZWEgc2hvdWxkIGRhbWFnZSBpdHMgYW5jZXN0b3Igc3VyZmFjZS4KKwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRo
VHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNo
aWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3Qt
PmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdl
UmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBncmFuZENoaWxkMS0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTUuMGYsIDE5NS4wZikpOworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gRGFtYWdlIHRvIHRoZSBjaGlsZDEgc3Vy
ZmFjZSBzaG91bGQgYmUgdGhlIG5ldyBsYXllciBwbHVzIHRoZSBvbGQgZXhwb3NlZCBhcmVhLgor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTIuMGYsIDE5MS4wZiwgMTEuMGYs
IDEzLjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIERhbWFnZSB0byB0aGUgcm9vdCBz
dXJmYWNlIHNob3VsZCBiZSB0aGUgdW5pb24gb2YgY2hpbGQxJ3MgKmVudGlyZSogcmVuZGVyIHN1
cmZhY2UsCisgICAgLy8gYW5kIGl0cyBvbGQgZXhwb3NlZCBhcmVhLiBUaGlzIGlzIGJlY2F1c2Ug
dGhlIGJvdW5kcyBvZiB0aGUgcmVuZGVyIHN1cmZhY2UgaXRzZWxmCisgICAgLy8gaGF2ZSBjaGFu
Z2VkIGJlY2F1c2Ugb2YgdGhlIGdyYW5kQ2hpbGQuCisgICAgZmxvYXQgdGFyZ2V0U3VyZmFjZVgg
PSAtMjUwLjBmICsgMTAwLjBmIC0gMTUuMGYgKyAxOTAuMGYgLSAzLjBmOworICAgIGZsb2F0IHRh
cmdldFN1cmZhY2VZID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gNC4wZjsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3VyZmFjZVgsIHRhcmdl
dFN1cmZhY2VZLCAxNi4wZiwgMTguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2Vz
dG9yTGF5ZXIpCit7CisgICAgLy8gQW4gYW5jZXN0b3Ivb3duaW5nIGxheWVyIGNoYW5nZXMgdGhh
dCBhZmZlY3RzIHRoZSBwb3NpdGlvbi90cmFuc2Zvcm0gb2YgdGhlIHJlbmRlcgorICAgIC8vIHN1
cmZhY2UuIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBsYXllclByb3BlcnR5Q2hhbmdlZCBm
bGFnIGFscmVhZHkgcHJvcGFnYXRlcworICAgIC8vIHRvIHRoZSBzdWJ0cmVlICh0ZXN0ZWQgZWxz
d2hlcmUpLCB3aGljaCBkYW1hZ2VzIHRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgLS0gYnV0Cisg
ICAgLy8gdGhlIGRhbWFnZSB0cmFja2VyIHN0aWxsIG5lZWRzIHRoZSBjb3JyZWN0IGxvZ2ljIHRv
IGNvbXB1dGUgdGhlIGV4cG9zZWQgcmVnaW9uIG9uCisgICAgLy8gdGhlIHJvb3Qgc3VyZmFjZS4K
KworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3Qt
PmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJv
b3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFt
YWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBjaGlsZDEtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoNTAuMGYsIDUwLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBFeHBlY3QgdGhlIHVuaW9uIG9mIGdyYW5kQ2hp
bGQxIGFuZCBncmFuZENoaWxkMgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgx
ODcuMGYsIDE4Ni4wZiwgMTYuMGYsIDE4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIGZs
b2F0IHRhcmdldFN1cmZhY2VYID0gLTI1MC4wZiArIDUwLjBmIC0gMTUuMGYgKyAxOTAuMGYgLSAz
LjBmOworICAgIGZsb2F0IHRhcmdldFN1cmZhY2VZID0gLTI1MC4wZiArIDUwLjBmIC0gMTUuMGYg
KyAxOTAuMGYgLSA0LjBmOworCisgICAgLy8gVGhlIGVudGlyZSBjaGlsZDEgc3VyZmFjZSBhbmQg
dGhlIG9sZCBleHBvc2VkIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBkYW1hZ2UgdGhlIHJvb3Qgc3Vy
ZmFjZQorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCh0YXJnZXRTdXJmYWNlWCwg
dGFyZ2V0U3VyZmFjZVksIDY2LjBmLCA2OC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5n
UmVuZGVyU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRl
QW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBDQ0RhbWFnZVRyYWNrZXIqIHJv
b3REYW1hZ2VUcmFja2VyID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCk7
CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3Q7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OworCisgICAgLy8gQ0FTRSAxOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBkaXNhcHBl
YXJzLCBpdHMgZW50aXJlIG9sZCBhcmVhIGJlY29tZXMgZXhwb3NlZC4KKyAgICAvLworICAgIGNo
aWxkMS0+c2V0T3BhY2l0eSgxLjBmKTsKKworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBz
dXJmYWNlIG5vdy4KKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIEVYUEVDVF9FUSg0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUo
KSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjIuMGYsIDIxLjBmLCAx
Ni4wZiwgMTguMGYpLCByb290RGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKSk7CisK
KyAgICAvLyBDQVNFIDI6IElmIGEgZGVzY2VuZGFudCBzdXJmYWNlIGFwcGVhcnMsIGl0cyBlbnRp
cmUgb2xkIGFyZWFkIGJlY29tZXMgZXhwb3NlZC4KKworICAgIC8vIEN5Y2xlIG9uZSBmcmFtZSBv
ZiBubyBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5leHQgcmVjdCBpcyBu
b3QgYmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VUcmFja2VyLT5j
dXJyZW50RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIGNoYW5nZSB0aGUg
dHJlZSBzbyB0aGF0IHRoZSByZW5kZXIgc3VyZmFjZSBpcyBhZGRlZCBiYWNrLgorICAgIGNoaWxk
MS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7
CisKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2Fu
aXR5IGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX1RS
VUUoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUSgzLCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGNoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgQ0NEYW1hZ2VU
cmFja2VyKiBjaGlsZERhbWFnZVRyYWNrZXIgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkRGFtYWdlVHJhY2tlci0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgxODcuMGYsIDE4Ni4wZiwgMTYuMGYsIDE4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjIuMGYsIDIxLjBmLCAxNi4wZiwgMTguMGYp
LCByb290RGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKSk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdlZCkKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBObyBjaGFuZ2VzIHNob3VsZCBw
cm9kdWNlIGFuIGVtcHR5IGRhbWFnZSByZWN0LgorICAgIC8vCisgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAg
IC8vIENBU0UgMjogTm8gY2hhbmdlcyB0d2ljZSBpbiBhIHJvdyBzaG91bGQgc3RpbGwgcHJvZHVj
ZSBlbXB0eSBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZUZvclVwZGF0ZVJlY3RUaGF0RG9lc05v
dERyYXdDb250ZW50KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFu
ZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdl
UmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBJbiBvdXIgc3Bl
Y2lmaWMgdHJlZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNoaWxkMSBzaG91bGQgbm90IGNhdXNlIGFu
eSBkYW1hZ2UgdG8gYW55CisgICAgLy8gc3VyZmFjZSBiZWNhdXNlIGl0IGRvZXMgbm90IGFjdHVh
bGx5IGRyYXcgY29udGVudC4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAu
MGYsIDAuMGYsIDEuMGYsIDIuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYSkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClb
MF07CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBjaGlsZERh
bWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0OworCisgICAgLy8g
RGFtYWdlIG9uIGEgc3VyZmFjZSB0aGF0IGhhcyBhIHJlZmxlY3Rpb24gc2hvdWxkIGNhdXNlIHRo
ZSB0YXJnZXQgc3VyZmFjZSB0bworICAgIC8vIHJlY2VpdmUgdGhlIHN1cmZhY2UncyBkYW1hZ2Ug
YW5kIHRoZSBzdXJmYWNlJ3MgcmVmbGVjdGVkIGRhbWFnZS4KKworCisgICAgLy8gU2V0IHVwIGEg
cmVmbGVjdGlvbiBhYm91dCAxIHVuaXQgYmV5b25kIHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGls
ZDEuIFRoaXMgd2lsbCBub3QKKyAgICAvLyBjaGFuZ2UgdGhlIGNvbnRlbnRCb3VuZHMgb2YgY2hp
bGQxLCBzbyB0aGF0IHdlIGNhbiBpc29sYXRlIHRoZSByZWZsZWN0aW9uIGRhbWFnZQorICAgIC8v
IHRlc3RpbmcuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDYpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgtMS4wZiwgMC4wZikpOyAvLyBpbXBsaWNpdGx5IGluY2x1ZGVzIHRoZSBh
bmNob3Igd2hlcmUgdGhlIHJlZmxlY3Rpb24gaXMgY2VudGVyZWQKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByZWZsZWN0aW9uOworICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAsIDEu
MCk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlvbik7Cisg
ICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcihncmFuZENoaWxkMVJlcGxpY2EpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0
eSBjaGVjayB0aGF0IHRoZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMgd2VyZSBjcmVhdGVk
CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBD
Q0RhbWFnZVRyYWNrZXIqIGdyYW5kQ2hpbGREYW1hZ2VUcmFja2VyID0gZ3JhbmRDaGlsZDEtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpOworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0
ID0gZ3JhbmRDaGlsZERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBD
Q0RhbWFnZVRyYWNrZXIqIGNoaWxkRGFtYWdlVHJhY2tlciA9IGNoaWxkMS0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGREYW1hZ2VU
cmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIENDRGFtYWdlVHJhY2tlciogcm9vdERh
bWFnZVRyYWNrZXIgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKwor
ICAgIC8vIFRoZSBncmFuZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNob3VsZCBub3QgaW5jbHVkZSBp
dHMgb3duIHJlcGxpY2EuCisgICAgLy8gRklYTUU6IHRoaXMgKDAsMCkgZG9lc24ndCBmZWVsIHJp
Z2h0LiBzaG91bGRuJ3QgaXQgYmUgdGhlIHNwYWNlIHdoZXJlIHRoZSBvcmlnaW4gaXMgYXQgdGhl
IGNlbnRlcj8KKyAgICAvLyAgICAgICAgaXQgc2VlbXMgbGlrZSB0aGUgImNlbnRlciIgaW5jbHVk
ZXMgdGhlIHJlZmxlY3Rpb24uCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAu
MGYsIDAuMGYsIDYuMGYsIDguMGYpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBU
aGUgY2hpbGQgc3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIG5vcm1hbCBhbmQgcmVw
bGljYSBzdXJmYWNlcy4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LjBm
LCAxOTYuMGYsIDE0LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllcklt
cGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcAppbmRleCA5NDJiZWMyZjcxM2EyODQ1MjFiYWE5NDNlY2NjNDRlMjBiOGFjNWZmLi41ZmMy
NWVhYjBiMDZmODVhYTk5M2M5YmIyZjc4ZDFhZjQ3NzcyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBAIC0zNSwyMSArMzUsMjEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgewogCiAjZGVmaW5lIEVYRUNV
VEVfQU5EX1ZFUklGWV9TVUJUUkVFX0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAgICAgICAgICAg
ICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0Zv
clN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEVYUEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hh
bmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGdyYW5k
Q2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVS
SUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0UoY29kZVRvVGVzdCkgICAgICAgICAgIFwKLSAgICBy
b290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgp
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNU
X0ZBTFNFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQtPmxh
eWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX09OTFlf
TEFZRVJfQ0hBTkdFRChjb2RlVG9UZXN0KSAgICAgICAgICAgICAgIFwKLSAgICByb290LT5yZXNl
dFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUocm9v
dC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAg
ICAgICAgICAgICAgICBcCkBAIC0xMTUsNyArMTE1LDcgQEAgVEVTVChDQ0xheWVySW1wbFRlc3Qs
IHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9W
RVJJRllfT05MWV9MQVlFUl9DSEFOR0VEKHJvb3QtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6
Z3JheSkpOwogCiAgICAgLy8gU3BlY2lhbCBjYXNlOiBjaGVjayB0aGF0IHN1YmxheWVyIHRyYW5z
Zm9ybSBjaGFuZ2VzIGFsbCBsYXllcidzIGRlc2NlbmRhbnRzLCBidXQgbm90IHRoZSBsYXllciBp
dHNlbGYuCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOwor
ICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAgICAgcm9vdC0+
c2V0U3VibGF5ZXJUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKTsKICAgICBFWFBFQ1RfRkFM
U0Uocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY2hpbGQt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggYzlhMmZj
NjUxMzI1NjZiNDI2M2EwMDY4OGY1N2MzZjUyN2IxNjFiMi4uODNhNDRlY2FhMGZiMjIwN2U1MTIz
M2VkNDFmYTZhOGZlNDZhMjIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKIAorI2luY2x1ZGUg
IkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zNiwyNyArMzcsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotLy8gVGhpcyBpcyBhIG1hY3Jv
IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUg
dXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QuCi0vLyBFdmVu
IHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJl
IG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQotLy8gb25s
eSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNp
b24uCi0jZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwp
ICAgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTEx
KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5t
MTIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwp
Lm0xMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVh
bCkubTE0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0
dWFsKS5tMjEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChh
Y3R1YWwpLm0yMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwg
KGFjdHVhbCkubTIzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgp
LCAoYWN0dWFsKS5tMjQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMx
KCksIChhY3R1YWwpLm0zMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCi0KIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMTIwLDEyICsxMDAsMTIgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9PcExheWVyKQog
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShp
ZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlN
YXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQpAQCAtMTQ0LDggKzEyNCw4IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAg
IGFyYml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4wKTsKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgYXJiaXRy
YXJ5VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlk
ZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5
ZXIgc2hvdWxkIHJlc3VsdCBpbiBhIGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBo
YWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0LgogICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFj
ZSB0cmFuc2Zvcm0gc2hvdWxkIHJlbWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9l
cyBub3QgZGVhbCB3aXRoIHRyYW5zZm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxh
eWVyLgpAQCAtMTUzLDIyICsxMzMsMjIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgdHJhbnNsYXRpb25Ub0NlbnRl
ci50cmFuc2xhdGUoNS4wLCA2LjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0Nl
bnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAg
IC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXllciB0
cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVm
LCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDogQSBjaGFuZ2UgaW4gImFj
dHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQgc2NyZWVu
IHNwYWNlIHRyYW5zZm9ybS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRyYW5z
Zm9ybTsKICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwogICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYs
IDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBv
c2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogSW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2Yg
dHJhbnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJlLW11bHRpcGx5IHRoZSB0
cmFuc2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQgYnkKICAgICAvLyAgICAg
ICAgIHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxlIGFuZCB0cmFuc2xhdGlv
biBhcmUgbm90IGNvbW11dGF0aXZlLgpAQCAtMTc2LDggKzE1Niw4IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGxh
eWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXpl
KDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChs
YXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3Jt
KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtLCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEobGF5ZXJU
cmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2Ug
NjogVGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCByZXNwZWN0IHRvIHRoZSBh
bmNob3IgcG9pbnQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0FuY2hv
cjsKQEAgLTE4NSw4ICsxNjUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBl
eHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRy
YW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIp
LCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRS
ZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0
LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6IFZlcmlm
eSB0aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCiAgICAg
Ly8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwpAQCAt
MTk0LDggKzE3NCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJh
bnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25UcmFu
c2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlv
blRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41
ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2Up
OwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
UmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCkBAIC0yMTYsMTAgKzE5
NiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNG
b3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsK
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRp
dHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGls
ZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVu
dGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3NpdGlvbiBhZmZlY3RzIGNo
aWxkIGFuZCBncmFuZENoaWxkLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFBvc2l0
aW9uVHJhbnNmb3JtOwpAQCAtMjI4LDEwICsyMDgsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYs
IDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJl
bnRQb3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9z
aXRpb25UcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQ
b3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwogCiAgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0
cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExh
eWVyVHJhbnNmb3JtOwpAQCAtMjQzLDEwICsyMjMsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYs
IDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5k
Q2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwg
Z3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IHBhcmVudCdzIHN1YmxheWVyTWF0cml4
IGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICAvLyAgICAgICAgIHNjYWxpbmcgaXMg
dXNlZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3Jt
cyBpcyBwcm9wZXJseSB0ZXN0ZWQuCkBAIC0yNjQsMTAgKzI0NCwxMCBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50
U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNm
b3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9z
aXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAq
IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBn
cmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogc2Ft
ZSBhcyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJlc2VydmUgM0QsIHNvIHRoZSBn
cmFuZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRlbmVkIGNvbXBvc2l0ZSB0cmFu
c2Zvcm0uCiAgICAgLy8KQEAgLTI3NSwxMCArMjU1LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYs
IDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5k
Q2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwg
Z3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCkBAIC0zMjEsMTIgKzMwMSwxMiBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5n
bGVSZW5kZXJTdXJmYWNlKQogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgZHJhdyB0cmFuc2Zv
cm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRoZXkgb25seSBkaWZm
ZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCiAgICAgLy8gVGhlIHNjcmVlbi1zcGFjZSB0
cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUgcm9vdC4KLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVy
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwogCiAgICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9yaWdpbiB0cmFuc2Zvcm0g
YW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSkgc2hvdWxkIGJlIHRo
ZSBzYW1lLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwg
Y2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkpOwogCiB9CiAKQEAg
LTQyMywzOCArNDAzLDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgLy8gIG5vdGUgdGhhdCBk
cmF3IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG5lYXJlc3Qg
YW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UKICAgICAvLyAgYnV0IHNjcmVlbiBzcGFjZSB0cmFuc2Zv
cm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290LgogICAgIC8vCi0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVu
dC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICog
QiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgp
KTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIHRy
YW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogdHJhbnNsYXRpb25Ub0NlbnRl
ciwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRy
YXdUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xh
dGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxk
T2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
QiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5z
bGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVy
LCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hp
bGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGls
ZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRl
ciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVmVyaWZ5IGxh
eWVyIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCiAgICAgLy8KLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAq
IEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEs
IGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMx
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIg
KiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBj
aGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRP
ZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIg
KiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAq
IEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CiAKICAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jtcy4KICAgICAvLwogICAg
IC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNjcmliZWQgd2l0
aCByZXNwZWN0IHRvIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIHJlbmRlclN1
cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICAvLyBPcmln
aW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVj
dCB0byByZW5kZXIgc3VyZmFjZSAyLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIg
KiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSwgcmVuZGVyU3VyZmFj
ZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gU2FuaXR5
IGNoZWNrLiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0
IGl0c2VsZi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAg
dHJhbnNmb3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRy
YW5zZm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZVRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI4M2RhY2FiYTNjZmUwMWNhY2EzYWJhNTliZjc4
NzY0YTdkZDFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorI2RlZmluZSBDQ0xheWVyVHJlZVRl
c3RDb21tb25faAorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCisvLyBUaGlzIGlzIGEgbWFj
cm8gaW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJz
IHdoZXJlIGEgdGVzdCBmYWlsZWQuCisjZGVmaW5lIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVj
dGVkLCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueCgpKTsg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFs
KS5sb2NhdGlvbigpLnkoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXpl
KCkud2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCkuaGVpZ2h0KCkp
CisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBn
ZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gRXZlbiB0aG91
Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUgcHJlY2lzaW9uLCB0aGVy
ZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCB0aGF0IGFmZmVjdAor
Ly8gdGhlIHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3Vy
YXRlIHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZpbmUgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAgICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIoKSk7ICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTMoKSwgKGFjdHVhbCku
bTEzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCks
IChhY3R1YWwpLm0xNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgICAgICAgICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0yMygpKTsgICAgICAgICAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7
ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVh
bCkubTMxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMy
KCksIChhY3R1YWwpLm0zMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgICAgICAgICBcCisgICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwpLm00MSgpKTsgICAgICAg
ICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIo
KSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFj
dHVhbCkubTQzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTQ0KCksIChhY3R1YWwpLm00NCgpKQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gQ0NM
YXllclRyZWVUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDcwNDU0NGI2YWRiMzNkM2EwZmZhMzVl
OGU3NDJkNDM3ZGMxZWZkZmUuLmMzYjM2NmRkYTMyMzc0Njg2ODZmYmY4M2VkNGZlMzM5MGY4MmYz
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJm
YWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1
cmZhY2VUZXN0LmNwcApAQCAtNTksMTggKzU5LDE2IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVz
dCwgdmVyaWZ5U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgQVNTRVJUX1RS
VUUob3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBy
ZW5kZXJTdXJmYWNlID0gb3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICBJbnRSZWN0
IHRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgzLCA0KSwgSW50U2l6ZSg1LCA2KSk7Ci0KLSAg
ICBvd25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAg
IG93bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAg
Ly8gQ3VycmVudGx5LCB0aGUgY29udGVudFJlY3QsIGNsaXBSZWN0LCBhbmQgb3duaW5nTGF5ZXIt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgYXJlCiAgICAgLy8gdGhlIG9ubHkgc291cmNlcyBvZiBj
aGFuZ2UuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hBTkdFRChyZW5kZXJTdXJm
YWNlLT5zZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJG
QUNFX0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3QodGVzdFJlY3QpKTsKIAot
ICAgIG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CiAg
ICAgb3duaW5nTGF5ZXItPnNldE9wYWNpdHkoMC41Zik7CiAgICAgRVhQRUNUX1RSVUUocmVuZGVy
U3VyZmFjZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKTsKLSAgICBvd25pbmdMYXllci0+cmVz
ZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93bmluZ0xheWVyLT5yZXNl
dEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8gU2V0dGluZyB0aGUgc3Vy
ZmFjZSBwcm9wZXJ0aWVzIHRvIHRoZSBzYW1lIHZhbHVlcyBhZ2FpbiBzaG91bGQgbm90IGJlIGNv
bnNpZGVyZWQgImNoYW5nZSIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05P
VF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJlY3QpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXgg
ZWQ5Y2VjYjk2MzY2MTlhY2QyNWU0MDIwNTkxYWRhNmQzNjNhOTMxYi4uNzgwOWQxOGE0MzY3MGQ0
OGFhNzg2MWZiODcwNDY1NjI4NTkzZmEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDEwICsyNiwxMiBAQAogCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKIHVzaW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGluZzo6XzsKIHVzaW5nIDo6
dGVzdGluZzo6QXRMZWFzdDsKQEAgLTEzMiwxNCArMTM0LDYgQEAgcHJvdGVjdGVkOgogICAgICAg
ICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwogICAgIH0KIAotICAgIHZvaWQgdmVyaWZ5
RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhwZWN0ZWQsIGNvbnN0IEZs
b2F0UmVjdCYgYWN0dWFsKSBjb25zdAotICAgIHsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4
cGVjdGVkLmxvY2F0aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54KCkpOwotICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFjdHVhbC5sb2NhdGlvbigp
LnkoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCkud2lkdGgoKSwg
YWN0dWFsLnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVk
LnNpemUoKS5oZWlnaHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgfQotCiAgICAg
TW9ja0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0ZTsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQxLCBtX2NoaWxkMiwgbV9j
aGlsZDMsIG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3JhbmRDaGlsZDM7CiB9OwpA
QCAtNTYyLDI0ICs1NTYsMjQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5l
ZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIAogICAgIC8vIENhc2UgMTogYmFzaWMK
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsKLSAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAg
ICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9mIGRp
cnR5MSBhbmQgZGlydHkyLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5Mikp
OwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBm
LCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90
IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxt
b3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBm
LCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAv
LyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdv
IGJleW9uZCBpdHMgYm91bmRzCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZC
b3VuZHNEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAu
MGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA1OiBz
ZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2Ug
dGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCiAgICAgLy8gICAgICAgICBvdmVycmlkaW5n
IGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVz
dEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3Vu
ZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OwogCiAgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0
LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXRO
ZWVkc0Rpc3BsYXkoKSk7CkBAIC01OTYsMTMgKzU5MCwxMyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKICAgICBGbG9hdFJl
Y3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAyLjBmKTsKIAogICAgIHRl
c3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1v
c3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxh
eShkaXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5LCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eSwgdGVzdExh
eWVyLT5kaXJ0eVJlY3QoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQ
cm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTY1Niw3ICs2NTAsNyBAQCBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0
QmVoYXZpb3IpCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVl
ZHNEaXNwbGF5CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1Jl
cXVpcmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxv
YXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEw
LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRz
RGlzcGxheSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0
eSgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115853</attachid>
            <date>2011-11-18 13:08:53 -0800</date>
            <delta_ts>2011-11-28 00:49:56 -0800</delta_ts>
            <desc>hopefully fixes compile errors</desc>
            <filename>bug-72520-20111118130852.patch</filename>
            <type>text/plain</type>
            <size>91109</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVlMTU2MGVlNDA1OTJj
NjVmMTdlZWIwMTQ2OWIyZjgyZDVkNTBhOS4uYTk0Y2EzMjI1ZTUyODBjOGZiMWIwMmI5MjJhMmM3
OTUyODVlNDg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTE4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhBQ0tZU2Nyb2xsRml4KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFt
YWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6cmVtb3ZlUmVjdEZyb21Q
cmV2aW91c0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6c2F2ZVJl
Y3RGb3JOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRl
bmREYW1hZ2VGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4
dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnJlc2V0VXBkYXRlUmVjdHNGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZGFtYWdlVHJhY2tlcik6CisKIDIwMTEtMTEtMTggIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXBwZWFyYW5j
ZSBvZiBjb21wb3VuZCB0cmFuc2Zvcm0gYW5pbWF0aW9ucyB1bmRlciBhcHBzIGxpbmtlZCBvbiBT
bm93TGVvcGFyZCBpcyBpbmNvcnJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggODRm
M2E5YWNiNDI4ODFiMjkwZTRiNWU0YjBiZDZhYmY1NTdjY2ViMS4uNjFjZjU1MzkxYzE5NWFhNjhm
Y2U1MzliZDQ3MWU1NzQ1MzJhOWJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxMS0xMS0xOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIgY2xhc3Mg
dG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENDRGFtYWdlVHJhY2tl
clRlc3QgYW5kIHVwZGF0ZWQgb3RoZXIgdGVzdHMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZW11bGF0ZURyYXdpbmdPbmVGcmFtZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Y3JlYXRlVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcyk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNU
KToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTEtMTEtMTcg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGRpc3BhdGNoIG1lc3NhZ2VzIGZyb20gdGhlIGZyb250LWVuZCB0byB0aGUgYmFja2Vu
ZCBhc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4OGQ0NTZjNDMzMDZmNWVhZDE5
MjAwMzBkMTQwMzdkNTdiMTg4ODMyLi41NjExZDQyMWE5Njc2OTZjNmRhNjAxZWNjZTMxNGU4Yzdm
YWMwMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTQ3LDYgKzM1NDcsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IDBiZDZkYmMzODk2YWU0YTA3NzE5YTRlYTRhM2NjZTczNTkyNzNlMDQuLmFjN2FkNzU3
OGRlMmFhYTRlM2NmOTk4Y2NiNmIwMDc4MWRjZmUzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTMyMiw2ICszMjMsMTAgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRy
YXdPcGFjaXR5KCkpOwogCiAgICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UpKSB7CisKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisg
ICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1h
Z2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXItPmlkKCkpOworCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9
IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigw
LCAwLCAwLCAwKSk7CkBAIC0zMzYsNyArMzQxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEK
ICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1pbmcg
bm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2NjdXIu
Ci0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgp
OworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7
CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU1YzUw
YzNlMTg5MTY3OTlkYWEzZmMyMWIzMGZmZTc2MjM4NzcyMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tl
ci5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2Nyb2xsIGZp
eCBpcyBub3QgaW50ZW5kZWQgdG8ga2VlcCwgYnV0IGlzIHJlcXVpcmVkIHRvIGdldCB0aGUKKy8v
ICAgICAgICBEYW1hZ2VUcmFja2VyIHRvIHdvcmsgcHJvcGVybHkgd2hpbGUgd2FpdGluZyBmb3Ig
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0CisvLyAgICAgICAgc2Nyb2xsaW5nIHRvIGJlIGZpeGVk
LiBPbmNlIHNjcm9sbGluZyBpcyBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFu
ZAorLy8gICAgICAgIHVzZSB0aGUgb3JpZ2luYWwgcmVjdCBpbiBpdHMgcGxhY2UuCitzdGF0aWMg
RmxvYXRSZWN0IEhBQ0tZU2Nyb2xsRml4KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIEZsb2F0UmVjdCBzY3JvbGxlZFJlY3QgPSByZWN0OworICAgIGlm
IChsYXllci0+aXNOb25Db21wb3NpdGVkQ29udGVudCgpKQorICAgICAgICBzY3JvbGxlZFJlY3Qu
bW92ZSgtbGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCkueSgpKTsKKyAgICByZXR1cm4gc2Nyb2xsZWRSZWN0OworfQorCitQYXNzT3duUHRyPENDRGFt
YWdlVHJhY2tlcj4gQ0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NEYW1hZ2VUcmFja2VyKCkpOworfQorCitDQ0RhbWFnZVRyYWNrZXI6OkNDRGFt
YWdlVHJhY2tlcigpCisgICAgOiBtX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4KDApCit7Cit9CisK
K3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjp1cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKGNvbnN0
IFdURjo6VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0
U3VyZmFjZUxheWVySUQpCit7CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVz
IHRoZSAiZGFtYWdlIHJlY3QiIG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UKKyAgICAv
LyByZWN0IGlzIHRoZSByZWdpb24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBjaGFuZ2Vk
IGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2Np
c3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQK
KyAgICAvLyBiYW5kd2lkdGguCisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRhbWFnZSBy
ZWN0IGlzIGNvbXB1dGVkIGFzIHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdlcyB0aGF0
CisgICAgLy8gaGF2ZSBoYXBwZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFzdCBmcmFt
ZSB3YXMgZHJhd24uIFRoaXMgaW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2VzIGZvciBl
eGlzdGluZyBsYXllcnMvc3VyZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJnZXQgc3Vy
ZmFjZQorICAgIC8vICAgLSBsYXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRoZSBwcmV2
aW91cyBmcmFtZSwgYnV0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRoZSBiYXNp
YyBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBmb2xsb3dz
OgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IGNo
YW5nZXMgaW4gYWN0aXZlL25ldyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsYXllciBp
biB0aGUgbGF5ZXJMaXN0OgorICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMgYWN0dWFs
bHkgYSByZW5kZXJTdXJmYWNlOgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBzdXJmYWNl
J3MgZGFtYWdlIHRvIG91ciB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAgZWxzZQor
ICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUgdGFyZ2V0
IHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFnZSBjYXVz
ZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAgIC8vICAg
ICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8vICAgICAgICAgICBhZGQgdGhlIG9s
ZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0IHN1cmZhY2UgZGFtYWdlLgorICAg
IC8vCisgICAgLy8gICAgICAgLy8gMy4gY29tYmluZSBib3RoIHBhcnRpYWwgZGFtYWdlIHJlY3Rz
IHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLworICAgIC8vIEFkZGl0aW9uYWwg
aW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhpcyBhbGdvcml0aG0gaXMgaW1w
bGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNjZW5kYW50IHN1cmZhY2VzIGhh
dmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFtYWdlLgorICAgIC8vCisgICAg
Ly8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0ZSAiZGFtYWdlIiB0byB0aGUg
dGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAgIG5vdCBjaGFuZ2VkLCBpdCBk
b2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRyYXdpbmcuIEFsbCBsYXllcnMg
dGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdpb24gc3RpbGwgbmVlZCB0byBi
ZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAvLyAgIGNoYW5nZWQgaXRzIG9w
YWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSByZS1kcmF3biBhcyB3ZWxsLCBl
dmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgorICAgIC8vCisgICAgLy8gLSBJ
ZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhlIG9sZCBib3VuZHMgYW5kIG5l
dyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4gc29tZSBvZiB0aGUgZXhwb3Nl
ZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBhbnl0aGluZy4gQnV0IHRoaXMK
KyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRlIHRoZSBkYW1hZ2UgcmVjdC4g
SWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAvLyAgIG9sZCBib3VuZHMgd291
bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVzcyBvZiBob3cgbXVjaCBpdCBv
dmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcgYm91bmRzLCB3aGljaCBhbHNv
IG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLworICAgIC8vIC0gU2VlIGNvbW1l
bnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGV4YWN0bHkgaXMgY29uc2lk
ZXJlZAorICAgIC8vICAgYSAiY2hhbmdlIiBpbiBhIGxheWVyL3N1cmZhY2UuCisgICAgLy8KKyAg
ICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0cywgdHdvIFJlY3RNYXBzIGFy
ZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBUaGUgImN1cnJlbnQiIG1hcCBj
b250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZQorICAg
IC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lkZSB0aGUgcHJldmlvdXMgZGFt
YWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8gICAgICAgICBvciBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVuIGV4cG9zZWQgYW5kIGRhbWFn
ZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBBcyB0aGUgYWxnb3JpdGhtIHBy
b2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAvLyAgICAgICAgIG1h
cCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhhdCBubyBsb25nZXIgZXhpc3Qu
CisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFwIHN0YXJ0cyBvdXQgZW1wdHks
IGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5CisgICAgLy8gICAgICAgICBs
YXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1cmZhY2UgaXMgYWRkZWQgdG8g
dGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIgdGhlIGRhbWFnZSByZWN0IGlz
IGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNvIHRoYXQgdGhlCisgICAgLy8g
ICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhlIG5leHQgZnJhbWUuCisgICAg
Ly8KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMobGF5ZXJMaXN0LCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisgICAg
RmxvYXRSZWN0IGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0
b3ZlclJlY3RzKCk7CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHVuaW9uUmVjdChkYW1hZ2VG
cm9tQWN0aXZlTGF5ZXJzLCBkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CisKKyAgICAvLyBTd2Fw
IG5leHQgYW5kIHByZXZpb3VzIGhpc3RvcnkgbWFwcywgc2ltcGx5IGJ5IGNoYW5naW5nIHRoZSBp
bmRleC4KKyAgICBtX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4ID0gKG1fY3VycmVudFJlY3RIaXN0
b3J5SW5kZXggKyAxKSAlIDI7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1
dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFdURjo6VmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpCit7CisgICAgRmxv
YXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAodW5zaWduZWQgbGF5
ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpOworICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+aWQoKSAh
PSB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvclJlbmRl
clN1cmZhY2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
eHRlbmREYW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0
dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVE
YW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIgY29tcHV0aW5nIGRhbWFn
ZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVtcyBpbiB0aGUgY3VycmVu
dAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVycy9zdXJmYWNlcyB0aGF0
IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAvLyBhcmUgbm93IGV4cG9z
ZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBG
bG9hdFJlY3QoKTsKKyAgICBSZWN0TWFwJiBsZWZ0b3ZlclJlY3RIaXN0b3J5ID0gbV9sYXllclJl
Y3RzSGlzdG9yeVttX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKworICAgIGZvciAoUmVjdE1h
cDo6aXRlcmF0b3IgaXQgPSBsZWZ0b3ZlclJlY3RIaXN0b3J5LmJlZ2luKCk7IGl0ICE9IGxlZnRv
dmVyUmVjdEhpc3RvcnkuZW5kKCk7ICsraXQpCisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQt
PnNlY29uZCk7CisKKyAgICBsZWZ0b3ZlclJlY3RIaXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1
cm4gZGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6cmVtb3ZlUmVj
dEZyb21QcmV2aW91c0ZyYW1lKGludCBsYXllcklEKQoreworICAgIFJlY3RNYXAmIGN1cnJlbnRS
ZWN0SGlzdG9yeSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRl
eF07CisKKyAgICAvLyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcCwg
b3IgaWYgbm90IGZvdW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICByZXR1
cm4gY3VycmVudFJlY3RIaXN0b3J5LnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VU
cmFja2VyOjpzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRTcGFjZVJlY3QpCit7CisgICAgaW50IG5leHRNYXBJbmRleCA9IChtX2N1cnJlbnRS
ZWN0SGlzdG9yeUluZGV4ICsgMSkgJSAyOworICAgIFJlY3RNYXAmIG5leHRSZWN0SGlzdG9yeSA9
IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbmV4dE1hcEluZGV4XTsKKworICAgIC8vIFRoaXMgbGF5ZXIg
SUQga2V5IHNob3VsZCBub3QgeWV0IGV4aXN0IGluIG5leHQgaGlzdG9yeS4KKyAgICBBU1NFUlQo
bmV4dFJlY3RIaXN0b3J5LmZpbmQobGF5ZXJJRCkgPT0gbmV4dFJlY3RIaXN0b3J5LmVuZCgpKTsK
KworICAgIG5leHRSZWN0SGlzdG9yeS5zZXQobGF5ZXJJRCwgdGFyZ2V0U3BhY2VSZWN0KTsKK30K
Kwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJbXBs
KiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJlIGFy
ZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lvbiBvZiB0aGUgdGFyZ2V0
IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUuZy4gb3BhY2l0eSwgcG9z
aXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBlbnRpcmUgcmVnaW9uIG9m
IHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgLSB0
aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWdlcyB0aGUgc3VyZmFjZSwgYmVjYXVzZSB0aGlz
IHJlZ2lvbiBpcyBub3cgZXhwb3NlZC4KKyAgICAvLyAgICAgICAgLSBub3RlIHRoYXQgaW4gbWFu
eSBjYXNlcyB0aGUgb2xkIGFuZCBuZXcgbGF5ZXIgcmVjdHMgbWF5IG92ZXJsYXAsIHdoaWNoIGlz
IGZpbmUuCisgICAgLy8KKyAgICAvLyAgIDIuIFJlcGFpbnQvdXBkYXRlOiBJZiBhIHJlZ2lvbiBv
ZiB0aGUgbGF5ZXIgdGhhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQsIHRoYXQKKyAgICAvLyAgICAg
IHJlZ2lvbiBkYW1hZ2VzIHRoZSBzdXJmYWNlLgorICAgIC8vCisgICAgLy8gUHJvcGVydHkgY2hh
bmdlcyB0YWtlIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3RzLgorCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBv
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgp
LCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCAwKTsKKworICAgIEZsb2F0UmVjdCBv
bGRMYXllclJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUobGF5ZXItPmlkKCkpOwor
CisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0u
bWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgbGF5ZXItPmJvdW5kcygpKSkpOworICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5p
ZCgpLCBsYXllclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIGlmIChsYXllci0+bGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoKSkgeworICAgICAgICAvLyBJZiBhIGxheWVyIGhhcyBjaGFuZ2VkLCB0aGVu
IGl0cyBlbnRpcmUgbGF5ZXIgcmVjdCBhZmZlY3RzIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAg
ICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhsYXllclJlY3RJblRhcmdldFNwYWNl
KTsKKworICAgICAgICAvLyBUaGUgbGF5ZXIncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9u
IHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vLgorICAgICAgICAvLyBOb3RlIG9sZExheWVyUmVjdCBp
cyBhbHJlYWR5IGluIHRhcmdldCBzcGFjZS4KKyAgICAgICAgaWYgKCFvbGRMYXllclJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRM
YXllclJlY3QpOworCisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVwZGF0ZVJlY3QoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRpZXMgaGF2ZW50IGNoYW5nZWQs
IHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5CisgICAgICAgIC8vIGFmZmVjdGVk
IGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3VsZCBiZSBlbXB0eS4KKyAgICAg
ICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNmb3JtLm1h
cFJlY3QoSEFDS1lTY3JvbGxGaXgobGF5ZXIsIGxheWVyLT51cGRhdGVSZWN0KCkpKTsKKyAgICAg
ICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0SW5UYXJnZXRTcGFj
ZSk7CisgICAgfQorfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVu
ZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVj
dCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2VuZGFudCBzdXJmYWNlIiBj
YW4gZGFtYWdlIHJlZ2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6CisgICAgLy8gICAxLiBQ
cm9wZXJ0eSBjaGFuZ2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNlJ3MgZ2VvbWV0cnkgY2Fu
IGNoYW5nZSBiZWNhdXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gZGVzY2Vu
ZGFudHMgKGkuZS4gdGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBzdXJmYWNlJ3MgY29udGVu
dCByZWN0CisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5jZXN0b3IgbGF5ZXJzIHRo
YXQgcHJvcGFnYXRlIHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlaXIgZW50aXJlIHN1YnRy
ZWUuCisgICAgLy8gICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90aCB0aGUgb2xkIHN1cmZh
Y2UgcmVjdCBhbmQgbmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8gICAgICAgICAgZGFtYWdl
IHRoZSB0YXJnZXQgc3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAgIDIuIERh
bWFnZSByZWN0OiBUaGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IGl0cyBvd24g
bGF5ZXJMaXN0IGFzIHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8vICAgICAgc2hvdWxkIHBy
b3BhZ2F0ZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKworICAgIENDUmVuZGVyU3Vy
ZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICBGbG9h
dFJlY3Qgb2xkU3VyZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUobGF5ZXIt
PmlkKCkpOworCisgICAgRmxvYXRSZWN0IHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSA9IHJlbmRl
clN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFt
ZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIEZsb2F0UmVj
dCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlOworICAgIGlmIChyZW5kZXJTdXJmYWNlLT5zdXJmYWNl
UHJvcGVydHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gVGhlIGVudGlyZSBzdXJmYWNlIGNvbnRy
aWJ1dGVzIGRhbWFnZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1
cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UncyBvbGQgcmVn
aW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vLgorICAgICAgICBp
ZiAoIW9sZFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJl
Y3QudW5pdGVJZk5vblplcm8ob2xkU3VyZmFjZVJlY3QpOworCisgICAgfSBlbHNlCisgICAgICAg
IC8vIE9ubHkgdGhlIHN1cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFtYWdlIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1cmZhY2Ut
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIC8vIElmIHRoZXJl
IHdhcyBkYW1hZ2UsIHRyYW5zZm9ybSBpdCB0byB0YXJnZXQgc3BhY2UsIGFuZCBwb3NzaWJseSBj
b250cmlidXRlIGl0cyByZWZsZWN0aW9uIGlmIG5lZWRlZC4KKyAgICBpZiAoIWRhbWFnZVJlY3RJ
bkxvY2FsU3BhY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBvcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsK
KyAgICAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNm
b3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxTcGFjZSk7CisgICAgICAgIHRhcmdldERhbWFn
ZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAg
IGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5v
cmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJh
bnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAgICAgICByZXBsaWNhT3Jp
Z2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS55KCksIDApOworCisgICAgICAgICAgICBGbG9hdFJlY3QgcmVwbGljYURhbWFn
ZVJlY3QgPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxT
cGFjZSk7CisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKHJlcGxp
Y2FEYW1hZ2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmE1M2FlNmYzNzE5Y2NjZWEzNzI5MTIxODA1
NDgzYWNkNGNjMWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NEYW1hZ2VUcmFja2VyX2gKKyNkZWZpbmUgQ0NEYW1hZ2VUcmFja2Vy
X2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEND
TGF5ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworCisvLyBDb21wdXRlcyB0aGUgcmVn
aW9uIHdoZXJlIHBpeGVscyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQgb24gYSBSZW5kZXJTdXJmYWNl
LiBUaGlzIHJlZ2lvbiBpcyB1c2VkCisvLyB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJh
d24gdG8gdGhlIHNjcmVlbiB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQgYmFuZHdpZHRoLgor
Y2xhc3MgQ0NEYW1hZ2VUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV1RGOjpQYXNzT3du
UHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+Q0NEYW1hZ2VUcmFj
a2VyKCkgeyB9CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoY29uc3Qg
V1RGOjpWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRT
dXJmYWNlTGF5ZXJJRCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50RGFtYWdlUmVjdCgp
IHsgcmV0dXJuIG1fY3VycmVudERhbWFnZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RhbWFn
ZVRyYWNrZXIoKTsKKworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxheWVy
cyhjb25zdCBXVEY6OlZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50
IHRhcmdldFN1cmZhY2VMYXllcklEKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURhbWFnZUZyb21M
ZWZ0b3ZlclJlY3RzKCk7CisKKyAgICAvLyBUaGVzZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSB1c2Vk
IG9ubHkgaW4gY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoKS4KKyAgICB2b2lkIHNhdmVS
ZWN0Rm9yTmV4dEZyYW1lKGNvbnN0IGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFNwYWNlUmVjdCk7CisgICAgRmxvYXRSZWN0IHJlbW92ZVJlY3RGcm9tUHJldmlvdXNGcmFtZShj
b25zdCBpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVy
SW1wbCosIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CisgICAgdm9pZCBleHRlbmREYW1h
Z2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VS
ZWN0KTsKKworICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBo
YXNodGFibGVzIG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgorICAgIC8vIFRoZSAiY3VycmVudCIg
bWFwIGlzIHVzZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJh
bWUsIHdoaWxlCisgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVy
IHJlY3RzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCisgICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgRmxvYXRSZWN0PiBSZWN0TWFwOworICAgIFJlY3RNYXAgbV9sYXllclJlY3RzSGlz
dG9yeVsyXTsKKyAgICBpbnQgbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRleDsKKworICAgIEZsb2F0
UmVjdCBtX2N1cnJlbnREYW1hZ2VSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ0NEYW1hZ2VUcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCBhN2Y2ZTgzNjgwNGFiNDVhNTk2MjRhMzcwZDYyODMyNWE4NzlmY2QxLi4zOGIzNjQ3OGE0MjA0
ODdlYTk0Y2E4YmJmZTJiNjI0YzMwMmRlMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0yMzksNiArMjM5LDEyIEBAIHZvaWQgQ0NMYXllckltcGw6Om5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZEZvckRlc2NlbmRhbnRzKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+bm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCit2b2lkIENDTGF5ZXJJbXBsOjpyZXNldEFs
bENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpCit7CisgICAgcmVzZXRVcGRhdGVSZWN0c0ZvclN1
YnRyZWUoKTsKKyAgICByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7Cit9CisK
IHZvaWQgQ0NMYXllckltcGw6OnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQog
ewogICAgIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgPSBmYWxzZTsKQEAgLTI1MCw2ICsyNTYsMTQg
QEAgdm9pZCBDQ0xheWVySW1wbDo6cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgp
CiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRy
ZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6cmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUo
KQoreworICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuW2ld
LT5yZXNldFVwZGF0ZVJlY3RzRm9yU3VidHJlZSgpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpz
ZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgYm91bmRzKQogewogICAgIGlmIChtX2JvdW5kcyA9PSBi
b3VuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZjZjI2
MjU3ZmQ5N2Q0YmQ4MjQxLi41NWJhY2VjNTJhMGViN2UwODM5OGRkNTk3OTlmNWEwNDdlZmVjNzUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3BlcnR5
Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAgICB2
b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMg
cHJvcGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9pZCBy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ0NMYXllckltcGwoaW50KTsKQEAgLTIxMCw2ICsyMTAsOSBAQCBwcml2YXRlOgogICAg
IC8vIE5vdGUgY2FyZWZ1bGx5IHRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBjdXJyZW50IGxheWVy
LgogICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yRGVzY2VuZGFudHMoKTsKIAor
ICAgIHZvaWQgcmVzZXRVcGRhdGVSZWN0c0ZvclN1YnRyZWUoKTsKKyAgICB2b2lkIHJlc2V0UHJv
cGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgcHJvcGVydHkgY2hh
bmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9
CiAKICAgICB2b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGE3OTNjY2EyNjU3ZjYxNTMzMjJhZjEyODEy
NWFhMDUzYTAxMzExMjIuLmE0N2NlMjhlYjkyZTk2ZTUxZjZlY2IwZmY5OTUyOGFjOGY2NzdhMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC03NCw2ICs3NCw3IEBAIHN0cnVjdCBD
Q1NldHRpbmdzIHsKICAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkK
ICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQ
bGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKKyAgICAgICAgICAgICwgdXNlRGFtYWdlVHJhY2tlcihm
YWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkgeyB9CiAKICAgICBib29sIGFjY2Vs
ZXJhdGVQYWludGluZzsKQEAgLTgxLDYgKzgyLDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAg
IGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwog
ICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgdXNlRGFtYWdlVHJhY2tl
cjsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcAppbmRleCBjYjM4ZmE4NjBjZTdiN2M4YWEyZmMxYjcxODkyODUwZTVkYWM1MWJkLi5i
NDMyNDViNjk3ZTMzNDVjN2IyYjliMzNhNGE4YzAxZGQ3ODlhNzQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDYs
NiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCog
b3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCiAgICAg
LCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2VyID0gQ0NEYW1hZ2VUcmFj
a2VyOjpjcmVhdGUoKTsKIH0KIAogQ0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggNGJkNGFmODU4MTk0MjY4Y2YwYzg1ZDNh
NmEwZDJkNDA5ZTBlYmNkOC4uYjFjZDlmM2M5MTdjMTk5MmQ5MzMxZjZhMjVlZjdjYjAyOGJlY2M1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBjbGFzcyBDQ0xheWVy
SW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJl
OwpAQCAtMTAxLDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFu
Z2VkRmxhZygpIHsgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29s
IHN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdDsKIAorICAgIENDRGFtYWdlVHJhY2tlciog
ZGFtYWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQor
CiBwcml2YXRlOgogICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIEND
TGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KQEAgLTEyMCw2ICsxMjMsMTEgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAg
VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2xheWVyTGlzdDsKKworICAgIE93blB0cjxD
Q0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdlVHJhY2tlcjsKKworICAgIC8vIFN0b3JlZCBpbiB0aGUg
InN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29y
aW5nLgorICAgIEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAwZjU5OGU3OGE5ODY4ODMxZTgyYTJmNWM4ODJkNGYzODRjZmJj
NjA1Li4yODNkYzZmOWY3Y2VjZWUzNThiMDRiMGNlN2Q3NTc1MzNjZGYyZWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU0LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91
bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgn
LAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJJbXBsVGVzdC5jcHAnLApAQCAtNjEsNiArNjIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ1NDAxMjQ4
YjVjMGEyZDNlZDBmNDE4ZGMxMzMwMzk5MTgxYmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTAsMCAr
MSw1NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDRGFtYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9u
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29y
dGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAi
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKwordm9pZCBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5
ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIFNhbml0eSBjaGVj
azogVGhlIHRlc3QgaXRzZWxmIHNob3VsZCBjcmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIg
c3VyZmFjZSwgc28KKyAgICAvLyAgICAgICAgICAgICAgIHRoYXQgdGhlIHN1cmZhY2UgKGFuZCBp
dHMgZGFtYWdlIHRyYWNrZXIpIGNhbiBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vICAg
ICAgICAgICAgICAgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICBBU1NFUlRfVFJVRShyb290
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CisKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0
KCk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdCk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKK30KKwordm9pZCBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQor
eworICAgIC8vIFRoaXMgZW11bGF0ZXMgb25seSB0aGUgc3RlcHMgdGhhdCBhcmUgcmVsZXZhbnQg
dG8gdGVzdGluZyB0aGUgZGFtYWdlIHRyYWNrZXI6CisgICAgLy8gICAxLiBjb21wdXRpbmcgdGhl
IHJlbmRlciBwYXNzZXMgYW5kIGxheWVybGlzdHMKKyAgICAvLyAgIDIuIHVwZGF0aW5nIGFsbCBk
YW1hZ2UgdHJhY2tlcnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIKKyAgICAvLyAgIDMuIHJlc2V0dGlu
ZyBhbGwgdXBkYXRlUmVjdHMgYW5kIHByb3BlcnR5Q2hhbmdlZCBmbGFncyBmb3IgYWxsIGxheWVy
cyBhbmQgc3VyZmFjZXMuCisKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShyb290LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIC8vIGl0ZXJh
dGUgYmFjay10by1mcm9udCwgc28gdGhhdCBkYW1hZ2UgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZnJv
bSBkZXNjZW5kYW50IHN1cmZhY2VzIHRvIGFuY2VzdG9ycy4KKyAgICBmb3IgKGludCBpID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ld
LT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHRhcmdldFN1cmZhY2UtPmRhbWFnZVRyYWNrZXIo
KS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSh0YXJnZXRTdXJmYWNlLT5sYXllckxpc3Qo
KSwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5ZXJJZCgpKTsKKyAgICB9CisKKyAgICByb290LT5y
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworCisgICAgcm9vdC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMC4wZiwgNTAwLjBm
KSkpOworCisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLjBmLCAxMDAuMGYp
KTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisKKyAgICBy
ZXR1cm4gcm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0
ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgdHJlZSBoYXMg
dHdvIHJlbmRlciBzdXJmYWNlczogb25lIGZvciB0aGUgcm9vdCwgYW5kIG9uZSBmb3IKKyAgICAv
LyBjaGlsZDEuIEFkZGl0aW9uYWxseSwgdGhlIHJvb3QgaGFzIGEgc2Vjb25kIGNoaWxkIGxheWVy
LCBhbmQgY2hpbGQxIGhhcyB0d28KKyAgICAvLyBjaGlsZHJlbiBvZiBpdHMgb3duLgorCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDUpOworCisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLjBmLCAwLjBmKSk7
CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKDUwMC4wZiwgNTAwLjBmKSkpOworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDEwMC4wZiwgMTAwLjBmKSk7CisgICAgY2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6
ZSgzMCwgMzApKTsKKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41Zik7IC8vIHdpdGggYSBjaGls
ZCB0aGF0IGRyYXdzQ29udGVudCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBjcmVhdGUg
aXRzIG93biByZW5kZXJTdXJmYWNlLgorICAgIGNoaWxkMS0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsgLy8gdGhpcyBsYXllciBkb2VzIG5vdCBkcmF3LCBidXQgaXMgaW50ZW5kZWQgdG8gY3JlYXRl
IGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgxMS4wZiwgMTEuMGYpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDE4LCAx
OCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGls
ZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLjBmLCAyMDAuMGYpKTsKKyAgICBncmFuZENo
aWxkMS0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQxLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgxOTAuMGYsIDE5MC4wZikpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2
LCA4KSk7CisgICAgZ3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNo
aWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZDIpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQyKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNl
KCk7CisKKyAgICAvLyBTZXR1cCBpbmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3
aGljaCBhbHdheXMgZGFtYWdlcyBldmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFj
dHVhbGx5IHBlcmZvcm0gc3BlY2lmaWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
Cit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0
IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3
ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQor
CitjbGFzcyBDQ0RhbWFnZVRyYWNrZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJp
dmF0ZToKKyAgICAvLyBGb3IgdGVzdGluZyBwdXJwb3NlcywgZmFrZSB0aGF0IHdlIGFyZSBvbiB0
aGUgaW1wbCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJl
YWQ7Cit9OworCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJl
ZVdpdGhPbmVTdXJmYWNlKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaW1wbGUg
dGVzdCB0cmVlIHdpbGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAg
Ly8gc3VyZmFjZXMgYW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTI1MC4wZiwg
LTI1MC4wZiwgNTAwLjBmLCA1MDAuMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlDaGVja1Rlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKQor
eworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wbGV4IHRlc3QgdHJlZSB3aWxsIGFj
dHVhbGx5IHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBs
YXllciBsaXN0cy4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNl
dFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVj
dCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1h
Z2VSZWN0KCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBBU1NF
UlRfVFJVRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxk
Mi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigz
KSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBmb3IgY2hpbGQx
IG9ubHkgaGFzIGEgY29udGVudFJlY3QgdGhhdCBlbmNsb3NlcyBncmFuZENoaWxkMSBhbmQgZ3Jh
bmRDaGlsZDIsIGJlY2F1c2UgY2hpbGQxIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYsIDE2LjBmLCAxOC4wZiks
IGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KC0y
NTAuMGYsIC0yNTAuMGYsIDUwMC4wZiwgNTAwLjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCisK
K1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykK
K3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVl
V2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+
Y2hpbGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qg
c2hvdWxkIGNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAg
ICAvLworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEy
LjBmLCAxMy4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisK
KyAgICAvLyBEYW1hZ2UgcG9zaXRpb24gc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0
ICgxMCwgMTEpIHBsdXMgcG9zaXRpb24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41IGxheWVyV2lk
dGgpIHRyYW5zbGF0ZWQgdG8gc3VyZmFjZSBzcGFjZSAoLTAuNSBzdXJmYWNlV2lkdGgpLgorICAg
IGZsb2F0IHRhcmdldFNwYWNlRGFtYWdlWCA9IDEwLjBmICsgMTAwLjBmIC0gMTUuMGYgLSAyNTAu
MGY7CisgICAgZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VZID0gMTEuMGYgKyAxMDAuMGYgLSAxNS4w
ZiAtIDI1MC4wZjsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0YXJnZXRTcGFj
ZURhbWFnZVksIDEyLjBmLCAxMy4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0Ug
MjogVGhlIHNhbWUgdXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVjZXMgdGhl
IHNhbWUgZGFtYWdlLgorICAgIC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0
KDEwLjBmLCAxMS4wZiwgMTIuMGYsIDEzLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKEZsb2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFtYWdl
WSwgMTIuMGYsIDEzLjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0
aW5nIGEgZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5l
dyB1cGRhdGUgcmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCByZWdpb24uCisg
ICAgLy8KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAx
LjBmLCAyLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKwor
ICAgIC8vIERhbWFnZSBwb3NpdGlvbiBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3Qg
KDIwLCAyNSkgcGx1cyBwb3NpdGlvbiBvZiBjaGlsZCAobGF5ZXJQb3MgLSAwLjUgbGF5ZXJXaWR0
aCkgdHJhbnNsYXRlZCB0byBzdXJmYWNlIHNwYWNlICgtMC41IHN1cmZhY2VXaWR0aCkuCisgICAg
cm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICB0YXJnZXRTcGFjZURhbWFnZVggPSAyMC4wZiArIDEw
MC4wZiAtIDE1LjBmIC0gMjUwLjBmOworICAgIHRhcmdldFNwYWNlRGFtYWdlWSA9IDI1LjBmICsg
MTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KHRhcmdldFNwYWNlRGFtYWdlWCwgdGFyZ2V0U3BhY2VEYW1hZ2VZLCAxLjBmLCAyLjBmKSwg
cm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5
RGFtYWdlRm9yUHJvcGVydHlDaGFuZ2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgLy8gQ0FTRSAx
OiBUaGUgbGF5ZXIncyBwcm9wZXJ0eSBjaGFuZ2VkIGZsYWcgdGFrZXMgcHJpb3JpdHkgb3ZlciB1
cGRhdGUgcmVjdC4KKyAgICAvLworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgx
MC4wZiwgMTEuMGYsIDEyLjBmLCAxMy4wZikpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5p
dHkgY2hlY2sgLSB3ZSBzaG91bGQgbm90IGhhdmUgYWNjaWRlbnRhbGx5IGNyZWF0ZWQgYSBzZXBh
cmF0ZSByZW5kZXIgc3VyZmFjZSBmb3IgdGhlIHRyYW5zbHVjZW50IGxheWVyLgorICAgIEFTU0VS
VF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkp
OworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNob3VsZCBiZTogcG9zaXRpb24gb2YgY2hpbGQg
KGxheWVyUG9zIC0gMC41ICogbGF5ZXJXaWR0aCkgdHJhbnNsYXRlZCB0byBzdXJmYWNlIHNwYWNl
ICgtIDAuNSAqIHN1cmZhY2VXaWR0aCkuCisgICAgZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VYID0g
MTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgZmxvYXQgdGFyZ2V0U3BhY2VEYW1hZ2VZID0g
MTAwLjBmIC0gMTUuMGYgLSAyNTAuMGY7CisgICAgRmxvYXRSZWN0IGV4cGVjdGVkUmVjdCA9IEZs
b2F0UmVjdCh0YXJnZXRTcGFjZURhbWFnZVgsIHRhcmdldFNwYWNlRGFtYWdlWSwgMzAuMGYsIDMw
LjBmKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShleHBlY3RlZFJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0Ug
MjogSWYgYSBsYXllciBtb3ZlcyBkdWUgdG8gcHJvcGVydHkgY2hhbmdlLCBpdCBkYW1hZ2VzIGJv
dGggdGhlIG5ldyBsb2NhdGlvbgorICAgIC8vICAgICAgICAgYW5kIHRoZSBvbGQgKGV4cG9zZWQp
IGxvY2F0aW9uLiBUaGUgb2xkIGxvY2F0aW9uIGlzIHRoZSBlbnRpcmUgb2xkIGxheWVyLAorICAg
IC8vICAgICAgICAgbm90IGp1c3QgdGhlIHVwZGF0ZVJlY3QuCisKKyAgICAvLyBGaXJzdCwgZG8g
b25lIGZyYW1lIHdoZXJlIG9ubHkgdGhlIHVwZGF0ZSByZWN0IGNhdXNlcyBkYW1hZ2UuCisgICAg
Y2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDIwLjBmLCAyNS4wZiwgMS4wZiwgMi4wZikp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGVu
LCB0ZXN0IHRoZSBhY3R1YWwgbGF5ZXIgbW92ZW1lbnQuCisgICAgY2hpbGQtPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQoMjAwLjBmLCAyMzAuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIHNob3VsZCBiZTogcG9zaXRp
b24gb2YgY2hpbGQgKGxheWVyUG9zIC0gMC41ICogbGF5ZXJXaWR0aCkgdHJhbnNsYXRlZCB0byBz
dXJmYWNlIHNwYWNlICgtMC41ICogc3VyZmFjZVdpZHRoKS4KKyAgICB0YXJnZXRTcGFjZURhbWFn
ZVggPSAyMDAuMGYgLSAxNS4wZiAtIDI1MC4wZjsKKyAgICB0YXJnZXRTcGFjZURhbWFnZVkgPSAy
MzAuMGYgLSAxNS4wZiAtIDI1MC4wZjsKKworICAgIC8vIEV4cGVjdCBkYW1hZ2UgdG8gYmUgdGhl
IGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91cyBvbmUgYW5kIHRoZSBuZXcgb25lLgorICAgIGV4
cGVjdGVkUmVjdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QodGFyZ2V0U3BhY2VEYW1hZ2VYLCB0
YXJnZXRTcGFjZURhbWFnZVksIDMwLjBmLCAzMC4wZikpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVj
dCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRp
bmdBbmRSZW1vdmluZ0xheWVyKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNy
ZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBjaGlsZDItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoNDAwLjBmLCAzODAuMGYpKTsKKyAgICBjaGlsZDItPnNldEJvdW5k
cyhJbnRTaXplKDYsIDgpKTsKKyAgICBjaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKwor
ICAgIC8vIENBU0UgMTogQWRkaW5nIGEgbmV3IGxheWVyIHNob3VsZCBjYXVzZSB0aGUgYXBwcm9w
cmlhdGUgZGFtYWdlLgorICAgIC8vCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyKTsKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNr
IC0gYWxsIDMgbGF5ZXJzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSByZW5kZXIgc3VyZmFjZTsgcmVu
ZGVyIHN1cmZhY2VzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgorICAgIEFTU0VSVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUo
KSk7CisKKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KDQwMC4wZiAtIDMu
MGYgLSAyNTAuMGYsIDM4MC4wZiAtIDQuMGYgLSAyNTAuMGYsIDYuMGYsIDguMGYpOworICAgIEZs
b2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4
cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiB0aGUgbGF5
ZXIgaXMgcmVtb3ZlZCwgaXRzIGVudGlyZSBvbGQgbGF5ZXIgYmVjb21lcyBleHBvc2VkLCBub3Qg
anVzdCB0aGUKKyAgICAvLyAgICAgICAgIGxhc3QgdXBkYXRlIHJlY3QuCisKKyAgICAvLyBGaXJz
dCwgZG8gb25lIGZyYW1lIHdoZXJlIG9ubHkgdGhlIHVwZGF0ZSByZWN0IGNhdXNlcyBkYW1hZ2Uu
CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxLjBmLCAyLjBmLCAzLjBmLCA0
LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8v
IFRoZW4sIHRlc3QgbGF5ZXIgcmVtb3ZhbAorICAgIGNoaWxkMS0+cmVtb3ZlRnJvbVBhcmVudCgp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoLTE2NS4wZiwg
LTE2NS4wZiwgMzAuMGYsIDMwLjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTXVsdGlwbGVMYXllcnMpCit7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVT
dXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJl
bigpWzBdOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MDAuMGYsIDM4
MC4wZikpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGNoaWxk
Mi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisK
KyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUgYWJvdmUgdHJlZSBtYW5pcHVs
YXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1lIGZyYW1lLgorICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2luZyB0d28gbGF5
ZXJzIHNpbXVsdGFuZW91c2x5IHNob3VsZCBjYXVzZSBjb21iaW5lZCBkYW1hZ2UuCisgICAgLy8g
LSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KC0xNjUuMGYs
IC0xNjUuMGYsIDEuMGYsIDIuMGYpOworICAgIC8vIC0gY2hpbGQyIHVwZGF0ZSByZWN0IGluIHN1
cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCggMTQ3LjBmLCAxMjYuMGYsIDMuMGYsIDQuMGYpOworICAg
IGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgMS4wZiwgMi4wZikp
OworICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgMy4wZiwg
NC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRmxv
YXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KC0xNjUuMGYsIC0xNjUuMGYsIDMxNS4wZiwgMjk1LjBmKSwgcm9vdERhbWFnZVJlY3Qp
OworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTmVzdGVk
U3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0
VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENo
aWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0
IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAv
LyBDQVNFIDE6IERhbWFnZSB0byBhIGRlc2NlbmRhbnQgc3VyZmFjZSBzaG91bGQgcHJvcGFnYXRl
IHByb3Blcmx5IHRvIGFuY2VzdG9yIHN1cmZhY2UuCisgICAgLy8KKyAgICBncmFuZENoaWxkMS0+
c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KworICAgIC8vIGRhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSBzYW1l
IGFzIHRoZSBvcmlnaW5hbCBjYXNlIGR1cmluZyBzZXR1cC4KKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMTk3LjBmLCAxOTYuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJl
Y3QpOworCisgICAgLy8gZGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJlIGluIHRo
ZSByb290IHN1cmZhY2UncyBzcGFjZSAod2hlcmUgdGhlIG9yaWdpbgorICAgIC8vIGlzIGNlbnRl
cmVkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIHN1cmZhY2UuKQorICAgIC8vIFNvIGhlcmUsIHRoZSB0
b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHJvb3Qgc3VyZmFjZSBpcyAoLTI1MCwgLTI1MCk7IGFuZCB0
aGVuIHRoZQorICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBkYW1hZ2UgcmVjdCBpcyAtMjUwICsgY2hp
bGRQb3NpdGlvbiAtIDAuNSAqIGNoaWxkV2lkdGggKyBncmFuZENoaWxkUG9zaXRpb24gLSAwLjUg
KiBncmFuZENoaWxkV2lkdGguCisgICAgZmxvYXQgcm9vdFNwYWNlRGFtYWdlWCA9IC0yNTAuMGYg
KyAxMDAuMGYgLSAxNS4wZiArIDIwMC4wZiAtIDMuMGY7CisgICAgZmxvYXQgcm9vdFNwYWNlRGFt
YWdlWSA9IC0yNTAuMGYgKyAxMDAuMGYgLSAxNS4wZiArIDIwMC4wZiAtIDQuMGY7CisgICAgRVhQ
RUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KHJvb3RTcGFjZURhbWFnZVgsIHJvb3RTcGFjZURh
bWFnZVksIDYuMGYsIDguMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IFNh
bWUgYXMgcHJldmlvdXMgY2FzZSwgYnV0IHdpdGggYWRkaXRpb25hbCBkYW1hZ2UgZWxzZXdoZXJl
IHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IHVuaW9uZWQuCisgICAgLy8gLSBjaGlsZDEgcmVuZGVy
IHN1cmZhY2UgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDMyLjBmLCAz
MS4wZiwgNi4wZiwgOC4wZikKKyAgICAvLyAtIGNoaWxkMiBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNl
IHNwYWNlOiBGbG9hdFJlY3QoLTI0OC4wZiwgLTI0OC4wZiwgMTguMGYsIDE4LjBmKTsKKyAgICBn
cmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjdmKTsKKyAgICBjaGlsZDItPnNldE9wYWNpdHkoMC43
Zik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERh
bWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJy
ZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBkYW1h
Z2UgdG8gdGhlIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2lu
YWwgY2FzZSBkdXJpbmcgc2V0dXAuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDE5Ny4wZiwgMTk2LjBmLCA2LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8v
IGRhbWFnZSB0byB0aGUgcm9vdCBzdXJmYWNlIHNob3VsZCBiZSB0aGUgdW5pb24gb2YgY2hpbGQx
J3MgcmVuZGVyIHN1cmZhY2UsIGFuZCBjaGlsZDIncyBsYXllci4KKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoLTI0OC4wZiwgLTI0OC4wZiwgMjg2LjBmLCAyODcuMGYpLCByb290
RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1h
Z2VGb3JTdXJmYWNlQ2hhbmdlRnJvbURlc2NlbmRhbnRMYXllcikKK3sKKyAgICAvLyBBIGRlc2Nl
bmRhbnQgbGF5ZXIgY2hhbmdlcywgd2hpY2ggYWZmZWN0cyB0aGUgY29udGVudCBib3VuZHMgb2Yg
dGhlIHJlbmRlciBzdXJmYWNlLgorICAgIC8vIFRoZSBlbnRpcmUgc3VyZmFjZSBhcmVhIHNob3Vs
ZCBkYW1hZ2UgaXRzIGFuY2VzdG9yIHN1cmZhY2UuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJl
bigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworCisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTk1LjBmLCAxOTUuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KworICAgIC8vIERhbWFnZSB0byB0aGUgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSBuZXcg
bGF5ZXIgcGx1cyB0aGUgb2xkIGV4cG9zZWQgYXJlYS4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMTkyLjBmLCAxOTEuMGYsIDExLjBmLCAxMy4wZiksIGNoaWxkRGFtYWdlUmVj
dCk7CisKKyAgICAvLyBEYW1hZ2UgdG8gdGhlIHJvb3Qgc3VyZmFjZSBzaG91bGQgYmUgdGhlIHVu
aW9uIG9mIGNoaWxkMSdzICplbnRpcmUqIHJlbmRlciBzdXJmYWNlLAorICAgIC8vIGFuZCBpdHMg
b2xkIGV4cG9zZWQgYXJlYS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBib3VuZHMgb2YgdGhlIHJlbmRl
ciBzdXJmYWNlIGl0c2VsZgorICAgIC8vIGhhdmUgY2hhbmdlZCBiZWNhdXNlIG9mIHRoZSBncmFu
ZENoaWxkLgorICAgIGZsb2F0IHRhcmdldFN1cmZhY2VYID0gLTI1MC4wZiArIDEwMC4wZiAtIDE1
LjBmICsgMTkwLjBmIC0gMy4wZjsKKyAgICBmbG9hdCB0YXJnZXRTdXJmYWNlWSA9IC0yNTAuMGYg
KyAxMDAuMGYgLSAxNS4wZiArIDE5MC4wZiAtIDQuMGY7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KHRhcmdldFN1cmZhY2VYLCB0YXJnZXRTdXJmYWNlWSwgMTYuMGYsIDE4LjBm
KSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVy
aWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21BbmNlc3RvckxheWVyKQoreworICAgIC8vIEFu
IGFuY2VzdG9yL293bmluZyBsYXllciBjaGFuZ2VzIHRoYXQgYWZmZWN0cyB0aGUgcG9zaXRpb24v
dHJhbnNmb3JtIG9mIHRoZSByZW5kZXIKKyAgICAvLyBzdXJmYWNlLiBOb3RlIHRoYXQgaW4gdGhp
cyBjYXNlLCB0aGUgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgZmxhZyBhbHJlYWR5IHByb3BhZ2F0ZXMK
KyAgICAvLyB0byB0aGUgc3VidHJlZSAodGVzdGVkIGVsc3doZXJlKSwgd2hpY2ggZGFtYWdlcyB0
aGUgZW50aXJlIGNoaWxkMSBzdXJmYWNlIC0tIGJ1dAorICAgIC8vIHRoZSBkYW1hZ2UgdHJhY2tl
ciBzdGlsbCBuZWVkcyB0aGUgY29ycmVjdCBsb2dpYyB0byBjb21wdXRlIHRoZSBleHBvc2VkIHJl
Z2lvbiBvbgorICAgIC8vIHRoZSByb290IHN1cmZhY2UuCisKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGls
ZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0
IHJvb3REYW1hZ2VSZWN0OworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDUw
LjBmLCA1MC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7Cisg
ICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNr
ZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisg
ICAgLy8gRXhwZWN0IHRoZSB1bmlvbiBvZiBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIKKyAg
ICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYsIDE2LjBmLCAx
OC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICBmbG9hdCB0YXJnZXRTdXJmYWNlWCA9IC0y
NTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gMy4wZjsKKyAgICBmbG9hdCB0YXJnZXRT
dXJmYWNlWSA9IC0yNTAuMGYgKyA1MC4wZiAtIDE1LjBmICsgMTkwLjBmIC0gNC4wZjsKKworICAg
IC8vIFRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgYW5kIHRoZSBvbGQgZXhwb3NlZCBjaGlsZDEg
c3VyZmFjZSBzaG91bGQgZGFtYWdlIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QodGFyZ2V0U3VyZmFjZVgsIHRhcmdldFN1cmZhY2VZLCA2Ni4wZiwg
NjguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1cmZhY2VzKQoreworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxk
cmVuKClbMF07CisgICAgQ0NEYW1hZ2VUcmFja2VyKiByb290RGFtYWdlVHJhY2tlciA9IHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpOworICAgIEZsb2F0UmVjdCBjaGlsZERh
bWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworICAgIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIC8vIENBU0Ug
MTogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJl
YSBiZWNvbWVzIGV4cG9zZWQuCisgICAgLy8KKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMS4wZik7
CisKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2Fu
aXR5IGNoZWNrIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgc3VyZmFjZSBub3cuCisgICAgQVNTRVJU
X0ZBTFNFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90Pig0KSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkp
OworCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDIyLjBmLCAyMS4wZiwgMTYu
MGYsIDE4LjBmKSwgcm9vdERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkpOworCisg
ICAgLy8gQ0FTRSAyOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBhcHBlYXJzLCBpdHMgZW50aXJl
IG9sZCBhcmVhZCBiZWNvbWVzIGV4cG9zZWQuCisKKyAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Yg
bm8gY2hhbmdlLCBqdXN0IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90
IGJlY2F1c2Ugb2YgdGhlIG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVG
cmFtZShyb290LmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlVHJhY2tlci0+Y3Vy
cmVudERhbWFnZVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiBjaGFuZ2UgdGhlIHRy
ZWUgc28gdGhhdCB0aGUgcmVuZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBjaGlsZDEt
PnNldE9wYWNpdHkoMC41Zik7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOwor
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0
eSBjaGVjayB0aGF0IHRoZXJlIGlzIGEgbmV3IHN1cmZhY2Ugbm93LgorICAgIEFTU0VSVF9UUlVF
KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigzKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIENDRGFtYWdlVHJhY2tlciogY2hpbGREYW1h
Z2VUcmFja2VyID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKTsKKyAg
ICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZERhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg3LjBmLCAxODYuMGYs
IDE2LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDIyLjBmLCAyMS4wZiwgMTYuMGYsIDE4LjBmKSwgcm9vdERhbWFnZVRyYWNr
ZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5Tm9EYW1hZ2VXaGVuTm90aGluZ0NoYW5nZWQpCit7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dDsKKworICAgIC8vIENBU0UgMTogTm8gY2hhbmdlcyBzaG91bGQgcHJvZHVjZSBhbiBlbXB0eSBk
YW1hZ2UgcmVjdC4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBDQVNFIDI6IE5vIGNo
YW5nZXMgdHdpY2UgaW4gYSByb3cgc2hvdWxkIHN0aWxsIHByb2R1Y2UgZW1wdHkgZGFtYWdlIHJl
Y3QuCisgICAgLy8KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShy
b290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5Tm9EYW1hZ2VGb3JVcGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gSW4gb3VyIHNwZWNpZmljIHRyZWUsIHRoZSB1
cGRhdGUgcmVjdCBvZiBjaGlsZDEgc2hvdWxkIG5vdCBjYXVzZSBhbnkgZGFtYWdlIHRvIGFueQor
ICAgIC8vIHN1cmZhY2UgYmVjYXVzZSBpdCBkb2VzIG5vdCBhY3R1YWxseSBkcmF3IGNvbnRlbnQu
CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLjBmLCAwLjBmLCAxLjBmLCAy
LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGls
ZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNU
X1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdERh
bWFnZVJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvclJlcGxpY2EpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVj
dCByb290RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZs
b2F0UmVjdCBncmFuZENoaWxkRGFtYWdlUmVjdDsKKworICAgIC8vIERhbWFnZSBvbiBhIHN1cmZh
Y2UgdGhhdCBoYXMgYSByZWZsZWN0aW9uIHNob3VsZCBjYXVzZSB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dG8KKyAgICAvLyByZWNlaXZlIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIGFuZCB0aGUgc3VyZmFjZSdz
IHJlZmxlY3RlZCBkYW1hZ2UuCisKKworICAgIC8vIFNldCB1cCBhIHJlZmxlY3Rpb24gYWJvdXQg
MSB1bml0IGJleW9uZCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hpbGQxLiBUaGlzIHdpbGwgbm90
CisgICAgLy8gY2hhbmdlIHRoZSBjb250ZW50Qm91bmRzIG9mIGNoaWxkMSwgc28gdGhhdCB3ZSBj
YW4gaXNvbGF0ZSB0aGUgcmVmbGVjdGlvbiBkYW1hZ2UKKyAgICAvLyB0ZXN0aW5nLgorICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0
ZSg2KTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLTEu
MGYsIDAuMGYpKTsgLy8gaW1wbGljaXRseSBpbmNsdWRlcyB0aGUgYW5jaG9yIHdoZXJlIHRoZSBy
ZWZsZWN0aW9uIGlzIGNlbnRlcmVkCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlv
bjsKKyAgICByZWZsZWN0aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hp
bGQxUmVwbGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5z
ZXRSZXBsaWNhTGF5ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUg
YXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzIHdlcmUgY3JlYXRlZAorICAgIEFTU0VSVF9UUlVF
KGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgQ0NEYW1hZ2VUcmFja2VyKiBn
cmFuZENoaWxkRGFtYWdlVHJhY2tlciA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKTsKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGREYW1h
Z2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgQ0NEYW1hZ2VUcmFja2VyKiBj
aGlsZERhbWFnZVRyYWNrZXIgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkRGFtYWdlVHJhY2tlci0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBncmFuZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNob3Vs
ZCBub3QgaW5jbHVkZSBpdHMgb3duIHJlcGxpY2EuCisgICAgLy8gRklYTUU6IHRoaXMgKDAsMCkg
ZG9lc24ndCBmZWVsIHJpZ2h0LiBzaG91bGRuJ3QgaXQgYmUgdGhlIHNwYWNlIHdoZXJlIHRoZSBv
cmlnaW4gaXMgYXQgdGhlIGNlbnRlcj8KKyAgICAvLyAgICAgICAgaXQgc2VlbXMgbGlrZSB0aGUg
ImNlbnRlciIgaW5jbHVkZXMgdGhlIHJlZmxlY3Rpb24uCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDYuMGYsIDguMGYpLCBncmFuZENoaWxkRGFtYWdlUmVj
dCk7CisKKyAgICAvLyBUaGUgY2hpbGQgc3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgdGhl
IG5vcm1hbCBhbmQgcmVwbGljYSBzdXJmYWNlcy4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMTg5LjBmLCAxOTYuMGYsIDE0LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcAppbmRleCA5NDJiZWMyZjcxM2EyODQ1MjFiYWE5NDNlY2NjNDRl
MjBiOGFjNWZmLi41ZmMyNWVhYjBiMDZmODVhYTk5M2M5YmIyZjc4ZDFhZjQ3NzcyZDE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBA
IC0zNSwyMSArMzUsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2Ugewog
CiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0NIQU5HRUQoY29kZVRvVGVzdCkg
ICAgICAgICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9y
U3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxD
aGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2Vk
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5s
YXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVY
UEVDVF9UUlVFKGdyYW5kQ2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUg
RVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0UoY29kZVRvVGVzdCkgICAg
ICAgICAgIFwKLSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNr
aW5nRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVz
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNF
KGdyYW5kQ2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9B
TkRfVkVSSUZZX09OTFlfTEFZRVJfQ0hBTkdFRChjb2RlVG9UZXN0KSAgICAgICAgICAgICAgIFwK
LSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3Vi
dHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
RVhQRUNUX1RSVUUocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdl
ZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTUsNyArMTE1LDcgQEAgVEVTVChD
Q0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfT05MWV9MQVlFUl9DSEFOR0VEKHJvb3QtPnNldEJhY2tncm91
bmRDb2xvcihDb2xvcjo6Z3JheSkpOwogCiAgICAgLy8gU3BlY2lhbCBjYXNlOiBjaGVjayB0aGF0
IHN1YmxheWVyIHRyYW5zZm9ybSBjaGFuZ2VzIGFsbCBsYXllcidzIGRlc2NlbmRhbnRzLCBidXQg
bm90IHRoZSBsYXllciBpdHNlbGYuCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFn
Rm9yU3VidHJlZSgpOworICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7CiAgICAgcm9vdC0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKTsK
ICAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKaW5kZXggYzlhMmZjNjUxMzI1NjZiNDI2M2EwMDY4OGY1N2MzZjUyN2IxNjFiMi4uODNhNDRl
Y2FhMGZiMjIwN2U1MTIzM2VkNDFmYTZhOGZlNDZhMjIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
CkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aCIKIAorI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zNiwy
NyArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotLy8g
VGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBl
cnJvcnMgY2FuIGdpdmUgdXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhl
IHRlc3QuCi0vLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRv
dWJsZSwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFu
ZCBzbyB3ZQotLy8gb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGlu
Zy1wb2ludCBwcmVjaXNpb24uCi0jZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4
cGVjdGVkLCBhY3R1YWwpICAgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEo
KSwgKGFjdHVhbCkubTExKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0x
MigpLCAoYWN0dWFsKS5tMTIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTEzKCksIChhY3R1YWwpLm0xMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMTQoKSwgKGFjdHVhbCkubTE0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTIyKCksIChhY3R1YWwpLm0yMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMjMoKSwgKGFjdHVhbCkubTIzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTMxKCksIChhY3R1YWwpLm0zMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAotICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCi0KIHZvaWQg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVz
M0QpCiB7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMTIwLDEyICsx
MDAsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1z
Rm9yTm9PcExheWVyKQogCiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJp
eCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgs
IHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQpAQCAtMTQ0LDggKzEyNCw4
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bmdsZUxheWVyKQogICAgIGFyYml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4w
KTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgYXJiaXRyYXJ5VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDI6IHNldHRpbmcgdGhlIGJv
dW5kcyBvZiB0aGUgbGF5ZXIgc2hvdWxkIHJlc3VsdCBpbiBhIGRyYXcgdHJhbnNmb3JtIHRoYXQg
dHJhbnNsYXRlcyB0byBoYWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0LgogICAgIC8vICAgICAgICAg
VGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0gc2hvdWxkIHJlbWFpbiBhcyB0aGUgaWRlbnRpdHks
IGJlY2F1c2UgaXQgZG9lcyBub3QgZGVhbCB3aXRoIHRyYW5zZm9ybWluZyB0by9mcm9tIHRoZSBj
ZW50ZXIgb2YgdGhlIGxheWVyLgpAQCAtMTUzLDIyICsxMzMsMjIgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgdHJh
bnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjApOwogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
dHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKIAogICAgIC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdp
dGhvdXQgYSBsYXllciB0cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJh
bnNmb3Jtcy4KICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwg
RmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0g
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXIt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRp
dHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlN
YXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDog
QSBjaGFuZ2UgaW4gImFjdHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5z
Zm9ybSBhbmQgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwb3NpdGlvblRyYW5zZm9ybTsKICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4w
LCAxLjIpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBG
bG9hdFBvaW50KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5z
Zm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogSW4gdGhlIGNvcnJl
Y3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJl
LW11bHRpcGx5IHRoZSB0cmFuc2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQg
YnkKICAgICAvLyAgICAgICAgIHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxl
IGFuZCB0cmFuc2xhdGlvbiBhcmUgbm90IGNvbW11dGF0aXZlLgpAQCAtMTc2LDggKzE1Niw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmds
ZUxheWVyKQogICAgIGxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVy
VHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEobGF5ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIENhc2UgNjogVGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBhbmNob3IgcG9pbnQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNsYXRpb25Ub0FuY2hvcjsKQEAgLTE4NSw4ICsxNjUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBleHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXll
clRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3Vs
dCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAv
LyBDYXNlIDc6IFZlcmlmeSB0aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0
cmFuc2Zvcm0uCiAgICAgLy8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHks
IGJ1dCBpdCBpcwpAQCAtMTk0LDggKzE3NCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGV4cGVjdGVkUmVzdWx0
ID0gcG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4
cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkp
CkBAIC0yMTYsMTAgKzE5NiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2
LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3Np
dGlvbiBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZENoaWxkLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtOwpAQCAtMjI4LDEwICsyMDgsMTAgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFy
Y2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0Nl
bnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5z
Zm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9u
VHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0
cmFuc2Zvcm0gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOwpAQCAtMjQzLDEwICsyMjMsMTAgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFy
Y2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IHBhcmVudCdz
IHN1YmxheWVyTWF0cml4IGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICAvLyAgICAg
ICAgIHNjYWxpbmcgaXMgdXNlZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVu
Y2Ugb2YgdHJhbnNmb3JtcyBpcyBwcm9wZXJseSB0ZXN0ZWQuCkBAIC0yNjQsMTAgKzI0NCwxMCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1w
bGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVk
Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
ZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAq
IGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9z
aXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAg
IC8vIENhc2UgNTogc2FtZSBhcyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJlc2Vy
dmUgM0QsIHNvIHRoZSBncmFuZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRlbmVk
IGNvbXBvc2l0ZSB0cmFuc2Zvcm0uCiAgICAgLy8KQEAgLTI3NSwxMCArMjU1LDEwIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJh
cmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCkBAIC0z
MjEsMTIgKzMwMSwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVy
J3MgZHJhdyB0cmFuc2Zvcm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7
IHRoZXkgb25seSBkaWZmZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCiAgICAgLy8gVGhl
IHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0
aGUgcm9vdC4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9y
aWdpbiB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2Fz
ZSkgc2hvdWxkIGJlIHRoZSBzYW1lLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3Jt
KCkpOwogCiB9CiAKQEAgLTQyMywzOCArNDAzLDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAg
Ly8gIG5vdGUgdGhhdCBkcmF3IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIG5lYXJlc3QgYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UKICAgICAvLyAgYnV0IHNjcmVl
biBzcGFjZSB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290
LgogICAgIC8vCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAq
IEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFu
c2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTIt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShC
ICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwogCiAg
ICAgLy8gVmVyaWZ5IGxheWVyIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCiAgICAgLy8KLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJv
b3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEsIHBhcmVudC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShBICogQiAqIEEsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBncmFu
ZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIg
KiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZS
UzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICog
QSwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxk
T2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBC
ICogQSAqIEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAq
IEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFj
ZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jt
cy4KICAgICAvLwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBp
cyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgp
KTsKICAgICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3Jp
YmVkIHdpdGggcmVzcGVjdCB0byByZW5kZXIgc3VyZmFjZSAyLgotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICog
QSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwog
CiAgICAgLy8gU2FuaXR5IGNoZWNrLiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEg
YnVnIGluIHRoZSB0ZXN0IGl0c2VsZi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNv
cnJlY3RseSBzZXQgdXAgdHJhbnNmb3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUg
c2NyZWVuLXNwYWNlIHRyYW5zZm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI4M2RhY2FiYTNjZmUw
MWNhY2EzYWJhNTliZjc4NzY0YTdkZDFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorI2RlZmlu
ZSBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCisv
LyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2Vm
dWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCisjZGVmaW5lIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxv
Y2F0aW9uKCkueCgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9u
KCkueSgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLnkoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5zaXplKCkud2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5z
aXplKCkuaGVpZ2h0KCkpCisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rp
b24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVk
LgorLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUg
cHJlY2lzaW9uLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNl
ZCB0aGF0IGFmZmVjdAorLy8gdGhlIHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0
aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZp
bmUgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAg
ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgp
KTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0
dWFsKS5tMTIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTE0KCksIChhY3R1YWwpLm0xNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9G
TE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICAgICAgICAgIFwKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgICAg
ICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0y
MygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAo
YWN0dWFsKS5tMjQoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMzEoKSwgKGFjdHVhbCkubTMxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTMyKCksIChhY3R1YWwpLm0zMigpKTsgICAgICAgICAgXAorICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICAgICAgICAgIFwK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAg
ICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwp
Lm00MSgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00Migp
LCAoYWN0dWFsKS5tNDIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDMoKSwgKGFjdHVhbCkubTQzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQorCit9IC8vIG5hbWVzcGFjZQor
CisjZW5kaWYgLy8gQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDcwNDU0NGI2
YWRiMzNkM2EwZmZhMzVlOGU3NDJkNDM3ZGMxZWZkZmUuLmMzYjM2NmRkYTMyMzc0Njg2ODZmYmY4
M2VkNGZlMzM5MGY4MmYzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcApAQCAtNTksMTggKzU5LDE2IEBAIFRFU1QoQ0NS
ZW5kZXJTdXJmYWNlVGVzdCwgdmVyaWZ5U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkp
CiAgICAgQVNTRVJUX1RSVUUob3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gb3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2Uo
KTsKICAgICBJbnRSZWN0IHRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgzLCA0KSwgSW50U2l6
ZSg1LCA2KSk7Ci0KLSAgICBvd25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9y
U3VidHJlZSgpOworICAgIG93bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3Vi
dHJlZSgpOwogCiAgICAgLy8gQ3VycmVudGx5LCB0aGUgY29udGVudFJlY3QsIGNsaXBSZWN0LCBh
bmQgb3duaW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgYXJlCiAgICAgLy8gdGhlIG9u
bHkgc291cmNlcyBvZiBjaGFuZ2UuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hB
TkdFRChyZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TVVJGQUNFX0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3Qo
dGVzdFJlY3QpKTsKIAotICAgIG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdG
b3JTdWJ0cmVlKCk7CiAgICAgb3duaW5nTGF5ZXItPnNldE9wYWNpdHkoMC41Zik7CiAgICAgRVhQ
RUNUX1RSVUUocmVuZGVyU3VyZmFjZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKTsKLSAgICBv
d25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93
bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8g
U2V0dGluZyB0aGUgc3VyZmFjZSBwcm9wZXJ0aWVzIHRvIHRoZSBzYW1lIHZhbHVlcyBhZ2FpbiBz
aG91bGQgbm90IGJlIGNvbnNpZGVyZWQgImNoYW5nZSIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJl
Y3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVt
VGVzdC5jcHAKaW5kZXggZWQ5Y2VjYjk2MzY2MTlhY2QyNWU0MDIwNTkxYWRhNmQzNjNhOTMxYi4u
NzgwOWQxOGE0MzY3MGQ0OGFhNzg2MWZiODcwNDY1NjI4NTkzZmEyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDEw
ICsyNiwxMiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NM
YXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGlu
Zzo6XzsKIHVzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKQEAgLTEzMiwxNCArMTM0LDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwogICAgIH0KIAot
ICAgIHZvaWQgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhw
ZWN0ZWQsIGNvbnN0IEZsb2F0UmVjdCYgYWN0dWFsKSBjb25zdAotICAgIHsKLSAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGV4cGVjdGVkLmxvY2F0aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54
KCkpOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFj
dHVhbC5sb2NhdGlvbigpLnkoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5z
aXplKCkud2lkdGgoKSwgYWN0dWFsLnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKGV4cGVjdGVkLnNpemUoKS5oZWlnaHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7
Ci0gICAgfQotCiAgICAgTW9ja0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJl
bnREZWxlZ2F0ZTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQx
LCBtX2NoaWxkMiwgbV9jaGlsZDMsIG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3Jh
bmRDaGlsZDM7CiB9OwpAQCAtNTYyLDI0ICs1NTYsMjQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIAogICAgIC8v
IENhc2UgMTogYmFzaWMKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsK
LSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGly
dHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBi
ZSB1bmlvbmVkIG9mIGRpcnR5MSBhbmQgZGlydHkyLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KGRpcnR5MikpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJl
Y3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwg
MTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMzogZGlydHkg
cmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCiAg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJp
ZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0
LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CiAKICAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0
eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkob3V0T2ZCb3VuZHNEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxt
b3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAu
MGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAg
ICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFy
ZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCiAgICAgLy8gICAg
ICAgICBvdmVycmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9h
dFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5
IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7CkBAIC01OTYsMTMgKzU5MCwxMyBAQCBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0
ZSkKICAgICBGbG9hdFJlY3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAy
LjBmKTsKIAogICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZlcmlm
eUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDgu
MGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpKTsKIAogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFs
KGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTY1
Niw3ICs2NTAsNyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFu
Z2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hv
dWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNh
bGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3Rz
QWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAgICAgdGVzdExh
eWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGly
dHlSZWN0KCkuaXNFbXB0eSgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116707</attachid>
            <date>2011-11-28 00:50:01 -0800</date>
            <delta_ts>2011-11-28 00:58:19 -0800</delta_ts>
            <desc>addressed reviewers feedback</desc>
            <filename>bug-72520-20111128005000.patch</filename>
            <type>text/plain</type>
            <size>107413</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1ZGYwYmE5ZGY4MzFj
ZjgxZmFmNzg0ZWUxZDZiNDQwMDU2YjQxOC4uMDU5NzVmODk0NjgyYjY5ZTg4ODg5ZmZiMmE1NDVl
MzYzYmQxOTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnJlbW92ZVJlY3RGcm9tQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6c2F2ZVJlY3RGb3JO
ZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpjb21wdXRlRGFt
YWdlRnJvbUFjdGl2ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6
OmNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1h
Z2VUcmFja2VyOjpjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJh
Y2tlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI3ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IHZlcnRpY2FsLWFsaWduIHByb3BlcnR5IGluIENT
U1N0eWxlQXBwbHlQcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzlmZDM0
ODYwMTA3MzQ4MWMzZjBkMjQ2ODRkNmQ5MWJmNDJjYTY5Mi4uODJkMDBhYTA4OTlkMTU2YmI5NzZh
ZjZkMGU0NTdhMGVjMTI0OTU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8g
ZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAg
ICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5nT25lRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAg
ICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTI4ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW9yZSBmb3J3YXJkaW5nIGhlYWRl
cnMuICBUdXJucyBvdXQgSSBmb3Jnb3QgdG8gc3ZuIGFkZCB0aGVtLiAgOigKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA0NDkwZmNlMWU3YWNiOTVkMTg1YzBmOTA4NWU5ZWJiYmUyNDQ3ZGY5Li5kNTA3ZmUy
M2YwYTk5MGYyOWVjNmVkNzhkNjIxNDUzNGVjY2FmZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NTY2LDYgKzM1NjYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGViYzM5NGM0YzVkYWQzMTZjY2RiZGE2
MTU1MjRlZjkwN2EyNDA1NmIuLmQxODU1N2NhOTAyNzgxZGE3N2RkMTM0ZDU3Y2JkYTlkMWJkZjU0
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRy
ZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKQEAgLTMzMSw2ICszMzIsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIGlmICh1
c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7CisKKyAgICAgICAgICAgIGlmIChzZXR0
aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCksIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCkpOworCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVy
ICE9IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwog
ICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xv
cigwLCAwLCAwLCAwKSk7CkBAIC0zNDUsNyArMzUwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3
TGEKICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1p
bmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2Nj
dXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJl
ZSgpOworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7CiB9CiAKIApAQCAtNTgzLDcgKzU4OCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKIAogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIEND
UmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKKyAg
ICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xheWVySWQoKSkp
IHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0
RHJhd1JlY3QoKSk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250
ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmFmYWMwOGQ4MzNhNmNlNjIwNTMwNGU1ZDIzNzhkYzhmOTUxZjU4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0RhbWFn
ZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VUcmFja2VyOjpDQ0RhbWFn
ZVRyYWNrZXIoKQoreworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIobmV3IFJl
Y3RNYXApOworICAgIG1fbmV4dFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIobmV3IFJlY3RNYXApOwor
fQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShj
b25zdCBXVEY6OlZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRh
cmdldFN1cmZhY2VMYXllcklELCBDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcikK
K3sKKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlICJkYW1hZ2UgcmVj
dCIgb2YgYSB0YXJnZXQgc3VyZmFjZS4gVGhlIGRhbWFnZQorICAgIC8vIHJlY3QgaXMgdGhlIHJl
Z2lvbiBvZiB0aGUgc3VyZmFjZSB0aGF0IG1heSBoYXZlIGNoYW5nZWQgYW5kIG5lZWRzIHRvIGJl
IHJlZHJhd24uCisgICAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzY2lzc29yIHdoYXQgaXMgYWN0
dWFsbHkgZHJhd24sIHRvIHNhdmUgR1BVIGNvbXB1dGF0aW9uIGFuZAorICAgIC8vIGJhbmR3aWR0
aC4KKyAgICAvLworICAgIC8vIFRoZSBzdXJmYWNlJ3MgZGFtYWdlIHJlY3QgaXMgY29tcHV0ZWQg
YXMgdGhlIHVuaW9uIG9mIGFsbCBwb3NzaWJsZSBjaGFuZ2VzIHRoYXQKKyAgICAvLyBoYXZlIGhh
cHBlbmVkIHRvIHRoZSBzdXJmYWNlIHNpbmNlIHRoZSBsYXN0IGZyYW1lIHdhcyBkcmF3bi4gVGhp
cyBpbmNsdWRlczoKKyAgICAvLyAgIC0gYW55IGNoYW5nZXMgZm9yIGV4aXN0aW5nIGxheWVycy9z
dXJmYWNlcyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHRhcmdldCBzdXJmYWNlCisgICAgLy8gICAt
IGxheWVycy9zdXJmYWNlcyB0aGF0IGV4aXN0ZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLCBidXQg
bm8gbG9uZ2VyIGV4aXN0LgorICAgIC8vCisgICAgLy8gVGhlIGJhc2ljIGFsZ29yaXRobSBmb3Ig
Y29tcHV0aW5nIHRoZSBkYW1hZ2UgcmVnaW9uIGlzIGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAv
LyAgICAgICAvLyAxLiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgY2hhbmdlcyBpbiBhY3RpdmUv
bmV3IGxheWVycworICAgIC8vICAgICAgIGZvciBlYWNoIGxheWVyIGluIHRoZSBsYXllckxpc3Q6
CisgICAgLy8gICAgICAgICAgIGlmIHRoZSBsYXllciBpcyBhY3R1YWxseSBhIHJlbmRlclN1cmZh
Y2U6CisgICAgLy8gICAgICAgICAgICAgICBhZGQgdGhlIHN1cmZhY2UncyBkYW1hZ2UgdG8gb3Vy
IHRhcmdldCBzdXJmYWNlLgorICAgIC8vICAgICAgICAgICBlbHNlCisgICAgLy8gICAgICAgICAg
ICAgICBhZGQgdGhlIGxheWVyJ3MgZGFtYWdlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAv
LworICAgIC8vICAgICAgIC8vIDIuIGNvbXB1dGUgZGFtYWdlIGNhdXNlZCBieSB0aGUgdGFyZ2V0
IHN1cmZhY2UncyBtYXNrLCBpZiBpdCBleGlzdHMuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAz
LiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxv
bmdlciBleGlzdAorICAgIC8vICAgICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8v
ICAgICAgICAgICBhZGQgdGhlIG9sZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0
IHN1cmZhY2UgZGFtYWdlLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gNC4gY29tYmluZSBhbGwg
cGFydGlhbCBkYW1hZ2UgcmVjdHMgdG8gZ2V0IHRoZSBmdWxsIGRhbWFnZSByZWN0LgorICAgIC8v
CisgICAgLy8gQWRkaXRpb25hbCBpbXBvcnRhbnQgcG9pbnRzOgorICAgIC8vCisgICAgLy8gLSBU
aGlzIGFsZ29yaXRobSBpcyBpbXBsaWNpdGx5IHJlY3Vyc2l2ZTsgaXQgYXNzdW1lcyB0aGF0IGRl
c2NlbmRhbnQgc3VyZmFjZXMgaGF2ZQorICAgIC8vICAgYWxyZWFkeSBjb21wdXRlZCB0aGVpciBk
YW1hZ2UuCisgICAgLy8KKyAgICAvLyAtIENoYW5nZXMgdG8gbGF5ZXJzL3N1cmZhY2VzIGluZGlj
YXRlICJkYW1hZ2UiIHRvIHRoZSB0YXJnZXQgc3VyZmFjZTsgSWYgYSBsYXllciBpcworICAgIC8v
ICAgbm90IGNoYW5nZWQsIGl0IGRvZXMgTk9UIG1lYW4gdGhhdCB0aGUgbGF5ZXIgY2FuIHNraXAg
ZHJhd2luZy4gQWxsIGxheWVycyB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBkYW1hZ2VkIHJl
Z2lvbiBzdGlsbCBuZWVkIHRvIGJlIGRyYXduLiBGb3IgZXhhbXBsZSwgaWYgYSBsYXllcgorICAg
IC8vICAgY2hhbmdlZCBpdHMgb3BhY2l0eSwgdGhlbiBsYXllcnMgdW5kZXJuZWF0aCBtdXN0IGJl
IHJlLWRyYXduIGFzIHdlbGwsIGV2ZW4gaWYKKyAgICAvLyAgIHRoZXkgZGlkIG5vdCBjaGFuZ2Uu
CisgICAgLy8KKyAgICAvLyAtIElmIGEgbGF5ZXIvc3VyZmFjZSBwcm9wZXJ0eSBjaGFuZ2VkLCB0
aGUgb2xkIGJvdW5kcyBhbmQgbmV3IGJvdW5kcyBtYXkgb3ZlcmxhcC4uLgorICAgIC8vICAgaS5l
LiBzb21lIG9mIHRoZSBleHBvc2VkIHJlZ2lvbiBtYXkgbm90IGFjdHVhbGx5IGJlIGV4cG9zaW5n
IGFueXRoaW5nLiBCdXQgdGhpcworICAgIC8vICAgZG9lcyBub3QgYXJ0aWZpY2lhbGx5IGluZmxh
dGUgdGhlIGRhbWFnZSByZWN0LiBJZiB0aGUgbGF5ZXIgY2hhbmdlZCwgaXRzIGVudGlyZQorICAg
IC8vICAgb2xkIGJvdW5kcyB3b3VsZCBhbHdheXMgbmVlZCB0byBiZSByZWRyYXduLCByZWdhcmRs
ZXNzIG9mIGhvdyBtdWNoIGl0IG92ZXJsYXBzCisgICAgLy8gICB3aXRoIHRoZSBsYXllcidzIG5l
dyBib3VuZHMsIHdoaWNoIGFsc28gbmVlZCB0byBiZSBlbnRpcmVseSByZWRyYXduLgorICAgIC8v
CisgICAgLy8gLSBTZWUgY29tbWVudHMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc2VlIHdo
YXQgZXhhY3RseSBpcyBjb25zaWRlcmVkIGEgImNoYW5nZSIKKyAgICAvLyAgIGluIGEgbGF5ZXIv
c3VyZmFjZS4KKyAgICAvLworICAgIC8vIC0gVG8gY29ycmVjdGx5IG1hbmFnZSBleHBvc2VkIHJl
Y3RzLCB0d28gUmVjdE1hcHMgYXJlIG1haW50YWluZWQ6CisgICAgLy8KKyAgICAvLyAgICAgIDEu
IFRoZSAiY3VycmVudCIgbWFwIGNvbnRhaW5zIGFsbCB0aGUgbGF5ZXIgYm91bmRzIHRoYXQgY29u
dHJpYnV0ZWQgdG8gdGhlCisgICAgLy8gICAgICAgICBwcmV2aW91cyBmcmFtZSAoZXZlbiBvdXRz
aWRlIHRoZSBwcmV2aW91cyBkYW1hZ2VkIGFyZWEpLiBJZiBhIGxheWVyIGNoYW5nZXMKKyAgICAv
LyAgICAgICAgIG9yIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRob3NlIHJlZ2lvbnMgYXJlIHRo
ZW4gZXhwb3NlZCBhbmQgZGFtYWdlIHRoZQorICAgIC8vICAgICAgICAgdGFyZ2V0IHN1cmZhY2Uu
IEFzIHRoZSBhbGdvcml0aG0gcHJvZ3Jlc3NlcywgZW50cmllcyBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZQorICAgIC8vICAgICAgICAgbWFwIHVudGlsIGl0IGhhcyBvbmx5IGxlZnRvdmVyIGxheWVycyB0
aGF0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vICAgICAgMi4gVGhlICJuZXh0IiBt
YXAgc3RhcnRzIG91dCBlbXB0eSwgYW5kIGFzIHRoZSBhbGdvcml0aG0gcHJvZ3Jlc3NlcywgZXZl
cnkKKyAgICAvLyAgICAgICAgIGxheWVyL3N1cmZhY2UgdGhhdCBjb250cmlidXRlcyB0byB0aGUg
c3VyZmFjZSBpcyBhZGRlZCB0byB0aGUgbWFwLgorICAgIC8vCisgICAgLy8gICAgICAzLiBBZnRl
ciB0aGUgZGFtYWdlIHJlY3QgaXMgY29tcHV0ZWQsIHRoZSB0d28gbWFwcyBhcmUgc3dhcHBlZCwg
c28gdGhhdCB0aGUKKyAgICAvLyAgICAgICAgIGRhbWFnZSB0cmFja2VyIGlzIHJlYWR5IGZvciB0
aGUgbmV4dCBmcmFtZS4KKyAgICAvLworCisgICAgLy8gSWYgdGhlIHRhcmdldCBzdXJmYWNlIGFs
cmVhZHkga25vd3MgaXRzIGVudGlyZSByZWdpb24gaXMgZGFtYWdlZCwgd2UgY2FuIHJldHVybiBl
YXJseS4KKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZ28gYXdheSwgb3Igd2lsbCBiZSBjbGVh
bmVyLCBhZnRlciByZWZhY3RvcmluZyBpbnRvIFJlbmRlclBhc3MvUmVuZGVyU2NoZWR1bGUuCisg
ICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0WzBdLmdldCgpOworICAgIGlmIChsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21E
ZXNjZW5kYW50KCkpIHsKKyAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IEZsb2F0UmVjdChs
YXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29t
cHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMobGF5ZXJMaXN0LCB0YXJnZXRTdXJmYWNlTGF5ZXJJ
RCk7CisgICAgRmxvYXRSZWN0IGRhbWFnZUZyb21TdXJmYWNlTWFzayA9IGNvbXB1dGVEYW1hZ2VG
cm9tU3VyZmFjZU1hc2sodGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7CisgICAgRmxvYXRSZWN0IGRh
bWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7
CisKKyAgICBtX2N1cnJlbnREYW1hZ2VSZWN0ID0gZGFtYWdlRnJvbUFjdGl2ZUxheWVyczsKKyAg
ICBtX2N1cnJlbnREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21TdXJmYWNlTWFz
ayk7CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tTGVm
dG92ZXJSZWN0cyk7CisKKyAgICAvLyBUaGUgbmV4dCBoaXN0b3J5IG1hcCBiZWNvbWVzIHRoZSBj
dXJyZW50IG1hcCBmb3IgdGhlIG5leHQgZnJhbWUuCisgICAgc3dhcChtX2N1cnJlbnRSZWN0SGlz
dG9yeSwgbV9uZXh0UmVjdEhpc3RvcnkpOworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2Vy
OjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShpbnQgbGF5ZXJJRCkKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGV4aXN0cyBtYWlubHkgZm9yIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorICAg
IC8vIHRha2UoKSB3aWxsIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgbWFwLCBvciBpZiBub3Qg
Zm91bmQsIHJldHVybiBhIGRlZmF1bHQgKGVtcHR5KSByZWN0LgorICAgIHJldHVybiBtX2N1cnJl
bnRSZWN0SGlzdG9yeS0+dGFrZShsYXllcklEKTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6
OnNhdmVSZWN0Rm9yTmV4dEZyYW1lKGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFNwYWNlUmVjdCkKK3sKKyAgICAvLyBUaGlzIGxheWVyIHNob3VsZCBub3QgeWV0IGV4aXN0IGlu
IG5leHQgZnJhbWUncyBoaXN0b3J5LgorICAgIEFTU0VSVChtX25leHRSZWN0SGlzdG9yeS0+Zmlu
ZChsYXllcklEKSA9PSBtX25leHRSZWN0SGlzdG9yeS0+ZW5kKCkpOworICAgIG1fbmV4dFJlY3RI
aXN0b3J5LT5zZXQobGF5ZXJJRCwgdGFyZ2V0U3BhY2VSZWN0KTsKK30KKworRmxvYXRSZWN0IEND
RGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgV1RGOjpW
ZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNl
TGF5ZXJJRCkKK3sKKyAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5z
aXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXll
ckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVy
LCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkpCisgICAgICAgICAgICBleHRlbmREYW1hZ2VGb3JSZW5k
ZXJTdXJmYWNlKGxheWVyLCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgIH0KKworICAgIHJl
dHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjpjb21wdXRl
RGFtYWdlRnJvbVN1cmZhY2VNYXNrKENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNlTWFza0xheWVy
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBpZiAo
IXRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCisgICAgICAgIHJldHVybiBkYW1hZ2VSZWN0OworCisg
ICAgLy8gQ3VycmVudGx5LCBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIHRoZSBtYXNrLCB3ZSBj
aG9vc2UgdG8gZGFtYWdlIHRoZSBlbnRpcmUKKyAgICAvLyBzdXJmYWNlLiBUaGlzIGNvdWxkIHBv
dGVudGlhbGx5IGJlIG9wdGltaXplZCBsYXRlciwgYnV0IGl0IGlzIG5vdCBleHBlY3RlZCB0byBi
ZSBhCisgICAgLy8gY29tbW9uIGNhc2UuCisgICAgaWYgKHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgfHwgIXRhcmdldFN1cmZhY2VNYXNrTGF5ZXItPnVwZGF0
ZVJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBGbG9hdFNpemUodGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+Ym91bmRzKCkp
KTsKKworICAgIHJldHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFj
a2VyOjpjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKQoreworICAgIC8vIEFmdGVyIGNv
bXB1dGluZyBkYW1hZ2UgZm9yIGFsbCBhY3RpdmUgbGF5ZXJzLCBhbnkgbGVmdG92ZXIgaXRlbXMg
aW4gdGhlIGN1cnJlbnQKKyAgICAvLyByZWN0IGhpc3RvcnkgY29ycmVzcG9uZCB0byBsYXllcnMv
c3VyZmFjZXMgdGhhdCBubyBsb25nZXIgZXhpc3QuIFNvLCB0aGVzZSByZWdpb25zCisgICAgLy8g
YXJlIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKworICAgIEZsb2F0UmVjdCBk
YW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RIaXN0
b3J5LT5lbmQoKTsgKytpdCkKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsK
KworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5LT5jbGVhcigpOworCisgICAgcmV0dXJuIGRhbWFn
ZVJlY3Q7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHdheXMgdGhhdCBhIGxheWVyIGNhbiBkYW1hZ2UgYSByZWdpb24gb2Yg
dGhlIHRhcmdldCBzdXJmYWNlOgorICAgIC8vICAgMS4gUHJvcGVydHkgY2hhbmdlIChlLmcuIG9w
YWNpdHksIHBvc2l0aW9uLCB0cmFuc2Zvcm1zKToKKyAgICAvLyAgICAgICAgLSB0aGUgZW50aXJl
IHJlZ2lvbiBvZiB0aGUgbGF5ZXIgaXRzZWxmIGRhbWFnZXMgdGhlIHN1cmZhY2UuCisgICAgLy8g
ICAgICAgIC0gdGhlIG9sZCBsYXllciByZWdpb24gYWxzbyBkYW1hZ2VzIHRoZSBzdXJmYWNlLCBi
ZWNhdXNlIHRoaXMgcmVnaW9uIGlzIG5vdyBleHBvc2VkLgorICAgIC8vICAgICAgICAtIG5vdGUg
dGhhdCBpbiBtYW55IGNhc2VzIHRoZSBvbGQgYW5kIG5ldyBsYXllciByZWN0cyBtYXkgb3Zlcmxh
cCwgd2hpY2ggaXMgZmluZS4KKyAgICAvLworICAgIC8vICAgMi4gUmVwYWludC91cGRhdGU6IElm
IGEgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZCwgdGhhdAor
ICAgIC8vICAgICAgcmVnaW9uIGRhbWFnZXMgdGhlIHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyBQ
cm9wZXJ0eSBjaGFuZ2VzIHRha2UgcHJpb3JpdHkgb3ZlciB1cGRhdGUgcmVjdHMuCisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBvcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpOworICAgIG9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbGF5ZXItPmJvdW5k
cygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIDApOworCisgICAg
RmxvYXRSZWN0IG9sZExheWVyUmVjdCA9IHJlbW92ZVJlY3RGcm9tQ3VycmVudEZyYW1lKGxheWVy
LT5pZCgpKTsKKworICAgIEZsb2F0UmVjdCBsYXllclJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2lu
VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJv
dW5kcygpKSk7CisgICAgc2F2ZVJlY3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIGxheWVyUmVj
dEluVGFyZ2V0U3BhY2UpOworCisgICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgp
KSB7CisgICAgICAgIC8vIElmIGEgbGF5ZXIgaGFzIGNoYW5nZWQsIHRoZW4gaXRzIGVudGlyZSBs
YXllciByZWN0IGFmZmVjdHMgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICB0YXJnZXREYW1h
Z2VSZWN0LnVuaXRlSWZOb25aZXJvKGxheWVyUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAg
IC8vIFRoZSBsYXllcidzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBz
dXJmYWNlLCB0b28uCisgICAgICAgIC8vIE5vdGUgb2xkTGF5ZXJSZWN0IGlzIGFscmVhZHkgaW4g
dGFyZ2V0IHNwYWNlLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKG9s
ZExheWVyUmVjdCk7CisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVwZGF0ZVJlY3QoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRpZXMgaGF2ZW50IGNoYW5nZWQs
IHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5CisgICAgICAgIC8vIGFmZmVjdGVk
IGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3VsZCBiZSBlbXB0eS4KKyAgICAg
ICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNmb3JtLm1h
cFJlY3QobGF5ZXItPnVwZGF0ZVJlY3QoKSk7CisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5p
dGVJZk5vblplcm8odXBkYXRlUmVjdEluVGFyZ2V0U3BhY2UpOworICAgIH0KK30KKwordm9pZCBD
Q0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwq
IGxheWVyLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpCit7CisgICAgLy8gVGhlcmUgYXJl
IHR3byB3YXlzIGEgImRlc2NlbmRhbnQgc3VyZmFjZSIgY2FuIGRhbWFnZSByZWdpb25zIG9mIHRo
ZSAidGFyZ2V0IHN1cmZhY2UiOgorICAgIC8vICAgMS4gUHJvcGVydHkgY2hhbmdlOgorICAgIC8v
ICAgICAgICAtIGEgc3VyZmFjZSdzIGdlb21ldHJ5IGNhbiBjaGFuZ2UgYmVjYXVzZSBvZgorICAg
IC8vICAgICAgICAgICAgLSBjaGFuZ2VzIHRvIGRlc2NlbmRhbnRzIChpLmUuIHRoZSBzdWJ0cmVl
KSB0aGF0IGFmZmVjdCB0aGUgc3VyZmFjZSdzIGNvbnRlbnQgcmVjdAorICAgIC8vICAgICAgICAg
ICAgLSBjaGFuZ2VzIHRvIGFuY2VzdG9yIGxheWVycyB0aGF0IHByb3BhZ2F0ZSB0aGVpciBwcm9w
ZXJ0eSBjaGFuZ2VzIHRvIHRoZWlyIGVudGlyZSBzdWJ0cmVlLgorICAgIC8vICAgICAgICAtIGp1
c3QgbGlrZSBsYXllcnMsIGJvdGggdGhlIG9sZCBzdXJmYWNlIHJlY3QgYW5kIG5ldyBzdXJmYWNl
IHJlY3Qgd2lsbAorICAgIC8vICAgICAgICAgIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UgaW4g
dGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8gICAyLiBEYW1hZ2UgcmVjdDogVGhpcyBzdXJmYWNl
IG1heSBoYXZlIGJlZW4gZGFtYWdlZCBieSBpdHMgb3duIGxheWVyTGlzdCBhcyB3ZWxsLCBhbmQg
dGhhdCBkYW1hZ2UKKyAgICAvLyAgICAgIHNob3VsZCBwcm9wYWdhdGUgdG8gdGhlIHRhcmdldCBz
dXJmYWNlLgorICAgIC8vCisKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBs
YXllci0+cmVuZGVyU3VyZmFjZSgpOworCisgICAgRmxvYXRSZWN0IG9sZFN1cmZhY2VSZWN0ID0g
cmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0
IHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVu
dFJlY3QoKTsgLy8gYWxyZWFkeSBpbmNsdWRlcyByZXBsaWNhIGlmIGl0IGV4aXN0cy4KKyAgICBz
YXZlUmVjdEZvck5leHRGcmFtZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNl
KTsKKworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlOworICAgIGlmIChyZW5k
ZXJTdXJmYWNlLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gVGhlIGVu
dGlyZSBzdXJmYWNlIGNvbnRyaWJ1dGVzIGRhbWFnZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9j
YWxTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhl
IHN1cmZhY2UncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFj
ZSwgdG9vLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKG9sZFN1cmZh
Y2VSZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPbmx5IHRoZSBzdXJmYWNlJ3MgZGFt
YWdlUmVjdCB3aWxsIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAgIGRhbWFnZVJl
Y3RJbkxvY2FsU3BhY2UgPSByZW5kZXJTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGRhbWFnZSwgdHJhbnNm
b3JtIGl0IHRvIHRhcmdldCBzcGFjZSwgYW5kIHBvc3NpYmx5IGNvbnRyaWJ1dGUgaXRzIHJlZmxl
Y3Rpb24gaWYgbmVlZGVkLgorICAgIGlmICghZGFtYWdlUmVjdEluTG9jYWxTcGFjZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9y
bSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOworICAgICAgICBGbG9hdFJlY3Qg
ZGFtYWdlUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VS
ZWN0SW5Mb2NhbFNwYWNlKTsKKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVy
byhkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgeworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdp
blRyYW5zZm9ybSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpOwor
ICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubXVsdGlw
bHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICByZXBs
aWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC1sYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7
CisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKHJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFtYWdlIG9uIHRoZSByZXBsaWNhJ3MgbWFz
aywgdGhlbiB0aGUgdGFyZ2V0IHN1cmZhY2UgcmVjZWl2ZXMgdGhhdCBkYW1hZ2UgYXMgd2VsbC4K
KyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
bWFza0xheWVyKCkpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBs
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOworCisgICAgICAgIEZsb2F0UmVjdCBv
bGRSZXBsaWNhTWFza1JlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShyZXBsaWNhTWFz
a0xheWVyLT5pZCgpKTsKKworICAgICAgICAvLyBTaGlmdGluZyB0aGUgcmVjdCBieSBoYWxmIHdp
ZHRoIGFuZCBoYWxmIGhlaWdodCBpcyB0aGUgZXF1aXZhbGVudCBvZiBhcHBseWluZyB0aGUgInJl
cGxpY2Egb3JpZ2luIHRyYW5zZm9ybSIsIGluc3RlYWQgb2YKKyAgICAgICAgLy8gdGhlIHJlcGxp
Y2FEcmF3VHJhbnNmb3JtLiBEb2luZyB0aGlzLCBob3dldmVyLCBzYXZlcyBzZXZlcmFsIG1hdHJp
eCBtdWx0aXBsaWNhdGlvbnMuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0o
KTsKKyAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueSgpLCAwKTsKKyAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShs
YXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKKyAgICAgICAgcmVwbGljYU9yaWdp
blRyYW5zZm9ybS50cmFuc2xhdGUzZCgtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigp
LngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworICAgICAg
ICBGbG9hdFJlY3QgcmVwbGljYU1hc2tMYXllclJlY3QgPSByZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
Lm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRTaXplKHJlcGxpY2FN
YXNrTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIHJlcGxpY2FNYXNrTGF5ZXItPmJvdW5kcygpLmhl
aWdodCgpKSkpOworICAgICAgICBzYXZlUmVjdEZvck5leHRGcmFtZShyZXBsaWNhTWFza0xheWVy
LT5pZCgpLCByZXBsaWNhTWFza0xheWVyUmVjdCk7CisKKyAgICAgICAgLy8gSW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24sIGEgY2hhbmdlIGluIHRoZSByZXBsaWNhIG1hc2sgZGFtYWdlcyB0
aGUgZW50aXJlIHJlcGxpY2EgcmVnaW9uLgorICAgICAgICBpZiAocmVwbGljYU1hc2tMYXllci0+
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSB8fCAhcmVwbGljYU1hc2tMYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8o
cmVwbGljYU1hc2tMYXllclJlY3QpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFj
a2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rh
bWFnZVRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGQzMGYyOTRhY2M4NDA4N2EyNDYyMDYxYzg2MDVi
ZmQ0MzMyZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NEYW1hZ2VUcmFja2VyX2gKKyNkZWZpbmUgQ0NEYW1hZ2VUcmFja2VyX2gK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5
ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworCisvLyBDb21wdXRlcyB0aGUgcmVnaW9u
IHdoZXJlIHBpeGVscyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQgb24gYSBSZW5kZXJTdXJmYWNlLiBU
aGlzIHJlZ2lvbiBpcyB1c2VkCisvLyB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJhd24g
dG8gdGhlIHNjcmVlbiB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQgYmFuZHdpZHRoLgorY2xh
c3MgQ0NEYW1hZ2VUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV1RGOjpQYXNzT3duUHRy
PENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+Q0NEYW1hZ2VUcmFja2Vy
KCkgeyB9CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoY29uc3QgV1RG
OjpWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJm
YWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIGNv
bnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJldHVybiBtX2N1cnJlbnREYW1h
Z2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NEYW1hZ2VUcmFja2VyKCk7CisKKyAgICBGbG9h
dFJlY3QgY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgV1RGOjpWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7
CisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2soQ0NMYXllckltcGwq
IHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJv
bUxlZnRvdmVyUmVjdHMoKTsKKworICAgIEZsb2F0UmVjdCByZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZShpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5
ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRTcGFjZVJlY3QpOworCisgICAgLy8gVGhlc2Ug
aGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGluIGNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZl
TGF5ZXJzKCkuCisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVySW1wbCosIEZs
b2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JSZW5k
ZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBoYXNodGFibGVz
IG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgorICAgIC8vIFRoZSAiY3VycmVudCIgbWFwIGlzIHVz
ZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWxl
CisgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVyIHJlY3RzIHRo
YXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
RmxvYXRSZWN0PiBSZWN0TWFwOworICAgIE93blB0cjxSZWN0TWFwPiBtX2N1cnJlbnRSZWN0SGlz
dG9yeTsKKyAgICBPd25QdHI8UmVjdE1hcD4gbV9uZXh0UmVjdEhpc3Rvcnk7CisKKyAgICBGbG9h
dFJlY3QgbV9jdXJyZW50RGFtYWdlUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIENDRGFtYWdlVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5k
ZXggMTJkMjJlMmEyNDExMjJjYjU3Yjk5ZWRiZGY0NjNmZjljYjI4ODI0ZS4uYWYwNDJlNTY2OWI0
NjJmYjZjMDlkZTZmYzNkNGNmNGI2ZDg0ZTkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApA
QCAtMjM5LDE1ICsyMzksMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6bm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yRGVzY2VuZGFudHMoKQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5ub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnJlc2V0
UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQordm9pZCBDQ0xheWVySW1wbDo6cmVzZXRB
bGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKQogewogICAgIG1fbGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQgPSBmYWxzZTsKKyAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAogICAgIGlmICht
X3JlbmRlclN1cmZhY2UpCiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+cmVzZXRQcm9wZXJ0eUNo
YW5nZWRGbGFnKCk7CiAKKyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xheWVy
LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworCisgICAgaWYgKG1fcmVwbGlj
YUxheWVyKQorICAgICAgICBtX3JlcGxpY2FMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0Zv
clN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgdGhlIHJlcGxpY2EgbWFzaywgaWYgaXQgZXhpc3Rz
LgorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQot
ICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVl
KCk7CisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0
cmVlKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBi
b3VuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZjZjI2
MjU3ZmQ5N2Q0YmQ4MjQxLi5lMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODViY2NkY2Y4MDlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3BlcnR5
Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAgICB2
b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMg
cHJvcGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9pZCBy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ0NMYXllckltcGwoaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IDZjOGRhNDYxYWNkMTc0MTBhMTAyNWU4OTMyNTRlZGFjMDExNzNlZjYuLmFiZGYxNjJkMDNh
MDlmYjJkMjA5MmFlOTQ5YWVlOTA1Y2E3ZWFlZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcApAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAKICAg
ICAgICAgICAgIC8vIExheWVycyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdpbGwg
YmUgcGFpbnRlZCB3aGVuIHRoZSByZW5kZXIKICAgICAgICAgICAgIC8vIHN1cmZhY2UncyBsaXN0
IGlzIHByb2Nlc3NlZC4KLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgIGlm
IChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0
PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKQEAgLTQxNSw3ICs0MTUsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZQogICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CiAgICAgICAgICAgICBMYXllckNocm9t
aXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlm
IChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVu
ZGVyU3VyZmFjZSkKKworICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVu
ZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRl
clN1cmZhY2VMYXllci0+aWQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA0ODdkOGY0YmU2YmNkNjQ0OGRjMDY2
MWQ1OTY3NWVmZDQ2YTA2ZjdkLi41NmQyYjZjNDE4OWM3NjllMDRmNGFlYzdkYzA4YmYzMWQxYjIx
MTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzUsNiArNzUsNyBAQCBzdHJ1
Y3QgQ0NTZXR0aW5ncyB7CiAgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFs
c2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAgICAgLCBz
aG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisgICAgICAgICAgICAsIHVzZURhbWFnZVRyYWNr
ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHJlZnJlc2hSYXRlKDApIHsgfQogCiAgICAgYm9vbCBh
Y2NlbGVyYXRlUGFpbnRpbmc7CkBAIC04Myw2ICs4NCw3IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsK
ICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQ7CiAgICAgYm9vbCBzaG93RlBTQ291bnRl
cjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKKyAgICBib29sIHVzZURhbWFnZVRy
YWNrZXI7CiAgICAgZG91YmxlIHJlZnJlc2hSYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaAppbmRleCA4YTU3YmZlOTU5MzczNDI4YjZhODliOWE4YTJjODNm
Nzk4YmY1OWQxLi4yZTBjYmNmMmM1ODVlODIxNWQyODZkZWU5YjYxZTUzNTE4MGNmZmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApAQCAtNDUsNiArNDUsOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5
ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290
TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUp
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJT
dXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxh
eWVySUQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewogICAgICAgICBpbnQgbGF5
ZXJJZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAgLTgzLDYgKzg1LDIwIEBAIElu
dFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KExh
eWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIHZpc2libGVMYXllclJlY3Q7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK2Jvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpbnQgdGFyZ2V0
U3VyZmFjZUxheWVySUQpCit7CisgICAgLy8gQSBsYXllciB3aWxsIGVpdGhlciBjb250cmlidXRl
IGl0cyBvd24gY29udGVudCwgb3IgaXRzIHJlbmRlciBzdXJmYWNlJ3MgY29udGVudCwgdG8KKyAg
ICAvLyB0aGUgdGFyZ2V0IHN1cmZhY2UuIFRoZSBsYXllciBjb250cmlidXRlcyBpdHMgc3VyZmFj
ZSdzIGNvbnRlbnQgd2hlbiBib3RoIHRoZQorICAgIC8vIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAg
ICAvLyAgKDEpIFRoZSBsYXllciBhY3R1YWxseSBoYXMgYSByZW5kZXJTdXJmYWNlLCBhbmQKKyAg
ICAvLyAgKDIpIFRoZSBsYXllcidzIHJlbmRlclN1cmZhY2UgaXMgbm90IHRoZSBzYW1lIGFzIHRo
ZSB0YXJnZXRTdXJmYWNlLgorICAgIC8vCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbGF5ZXIganVz
dCBjb250cmlidXRlcyBpdHNlbGYgdG8gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgcmV0dXJu
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFjZUxh
eWVySUQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBkZDFhYjYzM2Y5YjA3ZDA2NWUxMTQ2NjM1OWVjMWQz
NTU1Yjk2ZDY2Li5jZWI3NjY3OWNmNmQ1ZWY2Yjc5YTIwN2JiZDg3MTgxNmRmYmE1ZDhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIApAQCAtNDYsNiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQo
ZmFsc2UpCiAgICAgLCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2VyID0g
Q0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKTsKIH0KIAogQ0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5k
ZXJTdXJmYWNlKCkKQEAgLTIzNiw2ICsyMzgsMTAgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmR1
bXBTdXJmYWNlKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8IG1f
ZHJhd1RyYW5zZm9ybS5tMjEoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjIoKSA8PCAi
LCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjMoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5t
MjQoKSA8PCAiICAvLyAgIjsKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMxKCkgPDwgIiwg
IiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMz
KCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTM0KCkgPDwgIiAgLy8gICI7CiAgICAgdHMg
PDwgbV9kcmF3VHJhbnNmb3JtLm00MSgpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00Migp
IDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00MygpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNm
b3JtLm00NCgpIDw8ICJcbiI7CisKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzEpOworICAg
IHRzIDw8ICJkYW1hZ2VSZWN0IGlzIHBvcygiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERh
bWFnZVJlY3QoKS54KCkgPDwgIiwiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJl
Y3QoKS55KCkgPDwgIiksICI7CisgICAgdHMgPDwgInNpemUoIiA8PCBtX2RhbWFnZVRyYWNrZXIt
PmN1cnJlbnREYW1hZ2VSZWN0KCkud2lkdGgoKSA8PCAiLCIgPDwgbV9kYW1hZ2VUcmFja2VyLT5j
dXJyZW50RGFtYWdlUmVjdCgpLmhlaWdodCgpIDw8ICIpXG4iOwogfQogCiBpbnQgQ0NSZW5kZXJT
dXJmYWNlOjpvd25pbmdMYXllcklkKCkgY29uc3QKQEAgLTI3NSw1ICsyODEsMTAgQEAgYm9vbCBD
Q1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdAogICAgIHJldHVy
biBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQgfHwgbV9vd25pbmdMYXllci0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKTsKIH0KIAorYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNo
YW5nZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2VQ
cm9wZXJ0eUNoYW5nZWQgJiYgIW1fb3duaW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCk7
Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDRiZDRhZjg1ODE5NDI2OGNmMGM4NWQzYTZhMGQyZDQw
OWUwZWJjZDguLmQwZTM1YTE3ODY1NDM3ZWRkMmM4NzJkZmE2MjJjMzZiMGQ0M2FkYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NMYXllckltcGw7CiBj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKQEAgLTEw
MCw2ICsxMDEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxh
ZygpIHsgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29sIHN1cmZh
Y2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdDsKKyAgICBib29sIHN1cmZhY2VQcm9wZXJ0eUNoYW5n
ZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdDsKKworICAgIENDRGFtYWdlVHJhY2tlciogZGFt
YWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQogCiBw
cml2YXRlOgogICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDTGF5
ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKQEAgLTEyMCw2ICsxMjQsMTEg
QEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsK
ICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiBtX2xheWVyTGlzdDsKKworICAgIE93blB0cjxDQ0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdlVHJh
Y2tlcjsKKworICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMg
ZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgorICAgIEZsb2F0UmVjdCBtX2RhbWFn
ZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlMDE3MWFj
ZDEzYTFiOWNjMTlkYWE1MWJiZDNmMjNhNzdmNmQ4NjZjLi4xMzY5M2QzYWNjNWMxYTgwMjY0OWI2
MmMzMGU4YjM5NzdiYTVkOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU0
LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAg
ICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29j
aWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLApAQCAtNjEsNiAr
NjIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NSZW5k
ZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNr
ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2Vy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NhOGM1MzlkOTVkOTIxZDEyYzcyY2JiNzdhMGNlMmQ5YWUx
MzY4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NE
YW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgorCisj
aW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNw
YWNlIHsKKwordm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKworICAgIC8vIFNhbml0eSBjaGVjazogVGhlIHRlc3QgaXRzZWxmIHNob3VsZCBj
cmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIgc3VyZmFjZSwgc28KKyAgICAvLyAgICAgICAg
ICAgICAgIHRoYXQgdGhlIHN1cmZhY2UgKGFuZCBpdHMgZGFtYWdlIHRyYWNrZXIpIGNhbiBwZXJz
aXN0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vICAgICAgICAgICAgICAgY2FsbHMgdG8gdGhpcyBm
dW5jdGlvbi4KKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFT
U0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisKKyAgICByb290LT5y
ZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocm9vdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxh
eWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKK30KKwordm9pZCBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQoreworICAgIC8vIFRoaXMgZW11bGF0ZXMgb25s
eSB0aGUgc3RlcHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGVzdGluZyB0aGUgZGFtYWdlIHRyYWNr
ZXI6CisgICAgLy8gICAxLiBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzZXMgYW5kIGxheWVybGlz
dHMKKyAgICAvLyAgIDIuIHVwZGF0aW5nIGFsbCBkYW1hZ2UgdHJhY2tlcnMgaW4gdGhlIGNvcnJl
Y3Qgb3JkZXIKKyAgICAvLyAgIDMuIHJlc2V0dGluZyBhbGwgdXBkYXRlUmVjdHMgYW5kIHByb3Bl
cnR5Q2hhbmdlZCBmbGFncyBmb3IgYWxsIGxheWVycyBhbmQgc3VyZmFjZXMuCisKKyAgICBWZWN0
b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKworICAgIC8vIEl0ZXJhdGUgYmFjay10by1mcm9udCwgc28gdGhhdCBk
YW1hZ2UgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZnJvbSBkZXNjZW5kYW50IHN1cmZhY2VzIHRvIGFu
Y2VzdG9ycy4KKyAgICBmb3IgKGludCBpID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZh
Y2UgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAg
IHRhcmdldFN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRG
cmFtZSh0YXJnZXRTdXJmYWNlLT5sYXllckxpc3QoKSwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5
ZXJJZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5tYXNrTGF5ZXIoKSk7CisgICAgfQor
CisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKK30KKworUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKwor
ICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50
U2l6ZSg1MDAsIDUwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBy
b290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoNTAwLjBmLCA1MDAuMGYp
KSk7CisKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxMDAuMGYsIDEwMC4wZikp
OworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNo
aWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgzMCwgMzApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIHJldHVybiByb290
LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMoKQoreworICAgIC8vIFRoaXMgdGVzdCB0cmVlIGhhcyB0d28gcmVuZGVy
IHN1cmZhY2VzOiBvbmUgZm9yIHRoZSByb290LCBhbmQgb25lIGZvcgorICAgIC8vIGNoaWxkMS4g
QWRkaXRpb25hbGx5LCB0aGUgcm9vdCBoYXMgYSBzZWNvbmQgY2hpbGQgbGF5ZXIsIGFuZCBjaGls
ZDEgaGFzIHR3bworICAgIC8vIGNoaWxkcmVuIG9mIGl0cyBvd24uCisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CisK
KyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJvb3QtPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMC4wZiwgNTAwLjBm
KSkpOworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMC4wZiwgMTAwLjBm
KSk7CisgICAgY2hpbGQxLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGNoaWxkMS0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQxLT5zZXRPcGFj
aXR5KDAuNWYpOyAvLyB3aXRoIGEgY2hpbGQgdGhhdCBkcmF3c0NvbnRlbnQsIHRoaXMgd2lsbCBj
YXVzZSB0aGUgbGF5ZXIgdG8gY3JlYXRlIGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKyAgICBjaGls
ZDEtPnNldERyYXdzQ29udGVudChmYWxzZSk7IC8vIHRoaXMgbGF5ZXIgZG9lcyBub3QgZHJhdywg
YnV0IGlzIGludGVuZGVkIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisKKyAgICBj
aGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTEuMGYsIDExLjBmKSk7CisgICAgY2hpbGQy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91
bmRzKEludFNpemUoMTgsIDE4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisKKyAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAuMGYsIDIwMC4w
ZikpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkp
OworICAgIGdyYW5kQ2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7CisgICAgZ3JhbmRD
aGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDE5MC4wZiwgMTkwLjBmKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5k
cyhJbnRTaXplKDYsIDgpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQxLT5hZGRD
aGlsZChncmFuZENoaWxkMik7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZh
Y2UoKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZp
cnN0IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhh
dCB3ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOwor
fQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3
b1N1cmZhY2VzKCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0
VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAgLy8gU2V0dXAgaW5jbHVkZXMgZ29pbmcgcGFz
dCB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggYWx3YXlzIGRhbWFnZXMgZXZlcnl0aGluZywgc28KKyAg
ICAvLyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwZXJmb3JtIHNwZWNpZmljIHRlc3RzLgorICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICByZXR1cm4gcm9vdC5yZWxl
YXNlKCk7Cit9CisKK2NsYXNzIENDRGFtYWdlVHJhY2tlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6
VGVzdCB7Citwcml2YXRlOgorICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBmYWtlIHRoYXQg
d2UgYXJlIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2V0SW1wbFRocmVhZDsKK307CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlD
aGVja1Rlc3RUcmVlV2l0aE9uZVN1cmZhY2UpCit7CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlIHNpbXBsZSB0ZXN0IHRyZWUgd2lsbCBhY3R1YWxseSBwcm9kdWNlIHRoZSBleHBlY3RlZCBy
ZW5kZXIKKyAgICAvLyBzdXJmYWNlcyBhbmQgbGF5ZXIgbGlzdHMuCisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsK
KworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDEsIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUSgyLCByb290
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzFdLT5pZCgpKTsKKworICAgIEZsb2F0UmVj
dCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCA1MDAuMGYsIDUwMC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHNhbml0eUNoZWNrVGVzdFRyZWVXaXRoVHdvU3VyZmFj
ZXMpCit7CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGNvbXBsZXggdGVzdCB0cmVlIHdp
bGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAgLy8gc3VyZmFjZXMg
YW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRl
QW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1h
Z2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAg
IEFTU0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIGZvciBj
aGlsZDEgb25seSBoYXMgYSBjb250ZW50UmVjdCB0aGF0IGVuY2xvc2VzIGdyYW5kQ2hpbGQxIGFu
ZCBncmFuZENoaWxkMiwgYmVjYXVzZSBjaGlsZDEgZG9lcyBub3QgZHJhdyBjb250ZW50LgorICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAuMGYsIDE5MC4wZiwgMTYuMGYsIDE4
LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJl
Y3QoMC4wZiwgMC4wZiwgNTAwLjBmLCA1MDAuMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hp
bGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hv
dWxkIGNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAgICAv
LworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBm
LCAxMy4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBEYW1hZ2UgcG9zaXRpb24gb24gdGhlIHN1cmZhY2Ugc2hvdWxkIGJlOiBwb3NpdGlvbiBv
ZiB1cGRhdGVSZWN0ICgxMCwgMTEpIHJlbGF0aXZlIHRvIHRoZSBjaGlsZCAoMTAwLCAxMDApLgor
ICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgxMTAuMGYsIDExMS4wZiwgMTIuMGYsIDEzLjBmKSwgcm9vdERhbWFnZVJl
Y3QpOworCisgICAgLy8gQ0FTRSAyOiBUaGUgc2FtZSB1cGRhdGUgcmVjdCB0d2ljZSBpbiBhIHJv
dyBzdGlsbCBwcm9kdWNlcyB0aGUgc2FtZSBkYW1hZ2UuCisgICAgLy8KKyAgICBjaGlsZC0+c2V0
VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYpKTsKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMC4wZiwgMTExLjBmLCAx
Mi4wZiwgMTMuMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDM6IFNldHRpbmcg
YSBkaWZmZXJlbnQgdXBkYXRlIHJlY3Qgc2hvdWxkIGNhdXNlIGRhbWFnZSBvbiB0aGUgbmV3IHVw
ZGF0ZSByZWdpb24sIGJ1dCBubyBhZGRpdGlvbmFsIGV4cG9zZWQgb2xkIHJlZ2lvbi4KKyAgICAv
LworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMC4wZiwgMjUuMGYsIDEuMGYs
IDIuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gRGFtYWdlIHBvc2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNob3VsZCBiZTogcG9zaXRpb24gb2Yg
dXBkYXRlUmVjdCAoMjAsIDI1KSByZWxhdGl2ZSB0byB0aGUgY2hpbGQgKDEwMCwgMTAwKS4KKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgxMjAuMGYsIDEyNS4wZiwgMS4wZiwgMi4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdlcykK
K3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVl
V2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+
Y2hpbGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkgY2hh
bmdlZCBmbGFnIHRha2VzIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3QuCisgICAgLy8KKyAgICBj
aGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYp
KTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIC0gd2Ugc2hvdWxkIG5vdCBo
YXZlIGFjY2lkZW50YWxseSBjcmVhdGVkIGEgc2VwYXJhdGUgcmVuZGVyIHN1cmZhY2UgZm9yIHRo
ZSB0cmFuc2x1Y2VudCBsYXllci4KKyAgICBBU1NFUlRfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIERhbWFnZSBzaG91bGQg
YmUgdGhlIGVudGlyZSBjaGlsZCBsYXllciBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlLgorICAgIEZs
b2F0UmVjdCBleHBlY3RlZFJlY3QgPSBGbG9hdFJlY3QoMTAwLjBmLCAxMDAuMGYsIDMwLjBmLCAz
MC4wZik7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNF
IDI6IElmIGEgbGF5ZXIgbW92ZXMgZHVlIHRvIHByb3BlcnR5IGNoYW5nZSwgaXQgZGFtYWdlcyBi
b3RoIHRoZSBuZXcgbG9jYXRpb24KKyAgICAvLyAgICAgICAgIGFuZCB0aGUgb2xkIChleHBvc2Vk
KSBsb2NhdGlvbi4gVGhlIG9sZCBsb2NhdGlvbiBpcyB0aGUgZW50aXJlIG9sZCBsYXllciwKKyAg
ICAvLyAgICAgICAgIG5vdCBqdXN0IHRoZSB1cGRhdGVSZWN0LgorCisgICAgLy8gQ3ljbGUgb25l
IGZyYW1lIG9mIG5vIGNoYW5nZSwganVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCBy
ZWN0IGlzIG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgp
KTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBj
aGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAuMGYsIDIzMC4wZikpOworICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBFeHBlY3QgZGFtYWdlIHRv
IGJlIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgcHJldmlvdXMgb25lIGFuZCB0aGUgbmV3IG9uZS4K
KyAgICBleHBlY3RlZFJlY3QudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KDIwMC4wZiwgMjMwLjBm
LCAzMC4wZiwgMzAuMGYpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0Yo
Q0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVHJhbnNmb3JtZWRMYXllcikKK3sK
KyAgICAvLyBJZiBhIGxheWVyIGlzIHRyYW5zZm9ybWVkLCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxk
IHN0aWxsIGVuY2xvc2UgdGhlIGVudGlyZQorICAgIC8vIHRyYW5zZm9ybWVkIGxheWVyLgorCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhP
bmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxk
cmVuKClbMF07CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjsKKyAgICByb3Rh
dGlvbi5yb3RhdGUoNDUpOworCisgICAgLy8gTm90ZSBjYXJlZnVsbHksIHRoZSBhbmNob3IgaXMg
YWN0dWFsbHkgcGFydCBvZiBsYXllci0+cG9zaXRpb24oKS4gQnkgc2V0dGluZyBhbmNob3IKKyAg
ICAvLyB0byAoMC41LCAwLjUpLCB0aGUgbGF5ZXIncyBwb3NpdGlvbiAoMTAwLCAxMDApIG5vdyBy
ZWZlcnMgdG8gdGhlIGNlbnRlciBvZiB0aGUKKyAgICAvLyBsYXllciwgbm90IHRoZSBjb3JuZXIu
ICBUaGlzIG1lYW5zIHRoZSBsYXllciBoYXMgYWN0dWFsbHkgY2hhbmdlZCBwb3NpdGlvbi4KKyAg
ICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLjVmLCAwLjVmKSk7CisgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0
aGF0IHRoZSBsYXllciBhY3R1YWxseSBtb3ZlZCB0byAoODUsIDg1KSwgZGFtYWdpbmcgaXRzIG9s
ZCBsb2NhdGlvbiBhbmQgbmV3IGxvY2F0aW9uLgorICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg4NS4wZiwgODUuMGYs
IDQ1LjBmLCA0NS4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIFdpdGggdGhlIGFuY2hv
ciBvbiB0aGUgbGF5ZXIncyBjZW50ZXIsIG5vdyB3ZSBjYW4gdGVzdCB0aGUgcm90YXRpb24gbW9y
ZQorICAgIC8vIGludHVpdGl2ZWx5LCBzaW5jZSBpdCBhcHBsaWVzIGFib3V0IHRoZSBsYXllcidz
IGFuY2hvci4KKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uKTsKKyAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2luY2UgdGhlIGNoaWxkIGxh
eWVyIGlzIHNxdWFyZSwgcm90YXRpb24gYnkgNDUgZGVncmVlcyBhYm91dCB0aGUgY2VudGVyIHNo
b3VsZAorICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBleHBlY3RlZCByZWN0IGJ5IHNx
cnQoMiksIGNlbnRlcmVkIGFyb3VuZCAoMTAwLCAxMDApLiBUaGUKKyAgICAvLyBvbGQgZXhwb3Nl
ZCByZWdpb24gc2hvdWxkIGJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGUgbmV3IHJlZ2lvbi4KKyAg
ICBkb3VibGUgZXhwZWN0ZWRXaWR0aCA9IDMwLjAgKiBzcXJ0KDIuMCk7CisgICAgZG91YmxlIGV4
cGVjdGVkUG9zaXRpb24gPSAxMDAuMCAtIDAuNSAqIGV4cGVjdGVkV2lkdGg7CisgICAgRmxvYXRS
ZWN0IGV4cGVjdGVkUmVjdChleHBlY3RlZFBvc2l0aW9uLCBleHBlY3RlZFBvc2l0aW9uLCBleHBl
Y3RlZFdpZHRoLCBleHBlY3RlZFdpZHRoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQor
CitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVt
b3ZpbmdMYXllcikKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRT
ZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDQwMC4wZiwgMzgwLjBmKSk7CisgICAgY2hpbGQyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkp
OworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgLy8gQ0FTRSAxOiBB
ZGRpbmcgYSBuZXcgbGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCisg
ICAgLy8KKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgLSBhbGwgMyBsYXllcnMg
c2hvdWxkIGJlIG9uIHRoZSBzYW1lIHJlbmRlciBzdXJmYWNlOyByZW5kZXIgc3VyZmFjZXMgYXJl
IHRlc3RlZCBlbHNld2hlcmUuCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyks
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIEZsb2F0
UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0
UmVjdCg0MDAuMGYsIDM4MC4wZiwgNi4wZiwgOC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAg
IC8vIENBU0UgMjogSWYgdGhlIGxheWVyIGlzIHJlbW92ZWQsIGl0cyBlbnRpcmUgb2xkIGxheWVy
IGJlY29tZXMgZXhwb3NlZCwgbm90IGp1c3QgdGhlCisgICAgLy8gICAgICAgICBsYXN0IHVwZGF0
ZSByZWN0LgorCisgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhh
dCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlv
dXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEVY
UEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuLCB0ZXN0IHJlbW92aW5nIGNo
aWxkMS4KKyAgICBjaGlsZDEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQ
RUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwMC4wZiwgMTAwLjBmLCAzMC4wZiwgMzAuMGYp
LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JNdWx0aXBsZUxheWVycykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQwMC4wZiwgMzgwLjBmKSk7CisgICAgY2hpbGQyLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91bmRz
KEludFNpemUoNiwgOCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qg
d2FudCB0aGUgYWJvdmUgdHJlZSBtYW5pcHVsYXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9m
IHRoZSBzYW1lIGZyYW1lLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisKKyAgICAvLyBEYW1hZ2luZyB0d28gbGF5ZXJzIHNpbXVsdGFuZW91c2x5IHNob3VsZCBjYXVz
ZSBjb21iaW5lZCBkYW1hZ2UuCisgICAgLy8gLSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4gc3VyZmFj
ZSBzcGFjZTogRmxvYXRSZWN0KDEwMC4wZiwgMTAwLjBmLCAxLjBmLCAyLjBmKTsKKyAgICAvLyAt
IGNoaWxkMiB1cGRhdGUgcmVjdCBpbiBzdXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoNDAwLjBmLCAz
ODAuMGYsIDMuMGYsIDQuMGYpOworICAgIGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3Qo
MC4wZiwgMC4wZiwgMS4wZiwgMi4wZikpOworICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVjdChGbG9h
dFJlY3QoMC4wZiwgMC4wZiwgMy4wZiwgNC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwMC4wZiwgMTAwLjBmLCAzMDMuMGYsIDI4
NC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvck5lc3RlZFN1cmZhY2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJl
bigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBEYW1hZ2UgdG8gYSBkZXNjZW5kYW50IHN1
cmZhY2Ugc2hvdWxkIHByb3BhZ2F0ZSBwcm9wZXJseSB0byBhbmNlc3RvciBzdXJmYWNlLgorICAg
IC8vCisgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC41Zik7CisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAg
IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCkt
PmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDIwMC4wZiwgMjAwLjBmLCA2LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMzAwLjBmLCAzMDAuMGYsIDYuMGYsIDguMGYpLCBy
b290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IFNhbWUgYXMgcHJldmlvdXMgY2FzZSwg
YnV0IHdpdGggYWRkaXRpb25hbCBkYW1hZ2UgZWxzZXdoZXJlIHRoYXQgc2hvdWxkIGJlIHByb3Bl
cmx5IHVuaW9uZWQuCisgICAgLy8gLSBjaGlsZDEgc3VyZmFjZSBkYW1hZ2UgaW4gcm9vdCBzdXJm
YWNlIHNwYWNlOiBGbG9hdFJlY3QoMzAwLjBmLCAzMDAuMGYsIDYuMGYsIDguMGYpOworICAgIC8v
IC0gY2hpbGQyIGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgxMS4wZiwg
MTEuMGYsIDE4LjBmLCAxOC4wZik7CisgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC43Zik7
CisgICAgY2hpbGQyLT5zZXRPcGFjaXR5KDAuN2YpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyMDAuMGYs
IDIwMC4wZiwgNi4wZiwgOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoRmxvYXRSZWN0KDExLjBmLCAxMS4wZiwgMjk1LjBmLCAyOTcuMGYpLCByb290RGFt
YWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VG
b3JTdXJmYWNlQ2hhbmdlRnJvbURlc2NlbmRhbnRMYXllcikKK3sKKyAgICAvLyBJZiBkZXNjZW5k
YW50IGxheWVyIGNoYW5nZXMgYW5kIGFmZmVjdHMgdGhlIGNvbnRlbnQgYm91bmRzIG9mIHRoZSBy
ZW5kZXIgc3VyZmFjZSwKKyAgICAvLyB0aGVuIHRoZSBlbnRpcmUgZGVzY2VuZGFudCBzdXJmYWNl
IHNob3VsZCBiZSBkYW1hZ2VkLCBhbmQgaXQgc2hvdWxkIGRhbWFnZSBpdHMKKyAgICAvLyBhbmNl
c3RvciBzdXJmYWNlIHdpdGggdGhlIG9sZCBhbmQgbmV3IHN1cmZhY2UgcmVnaW9ucy4KKworICAg
IC8vIFRoaXMgaXMgYSB0cmlja3kgY2FzZSwgc2luY2Ugb25seSB0aGUgZmlyc3QgZ3JhbmRDaGls
ZCBjaGFuZ2VzLCBidXQgdGhlIGVudGlyZQorICAgIC8vIHN1cmZhY2Ugc2hvdWxkIGJlIG1hcmtl
ZCBkaXJ0eS4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVw
VGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENo
aWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0
IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBn
cmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTUuMGYsIDIwNS4wZikpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0
ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gVGhlIG5ldyBzdXJm
YWNlIGJvdW5kcyBzaG91bGQgYmUgZGFtYWdlZCBlbnRpcmVseSwgZXZlbiB0aG91Z2ggb25seSBv
bmUgb2YgdGhlIGxheWVycyBjaGFuZ2VkLgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0
UmVjdCgxOTAuMGYsIDE5MC4wZiwgMTEuMGYsIDIzLjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIERhbWFnZSB0byB0aGUgcm9vdCBzdXJmYWNlIHNob3VsZCBiZSB0aGUgdW5pb24gb2Yg
Y2hpbGQxJ3MgKmVudGlyZSogcmVuZGVyIHN1cmZhY2UKKyAgICAvLyAoaW4gdGFyZ2V0IHNwYWNl
KSwgYW5kIGl0cyBvbGQgZXhwb3NlZCBhcmVhIChhbHNvIGluIHRhcmdldCBzcGFjZSkuCisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5MC4wZiwgMjkwLjBmLCAxNi4wZiwgMjMu
MGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2VzdG9yTGF5ZXIpCit7CisgICAgLy8g
QW4gYW5jZXN0b3Ivb3duaW5nIGxheWVyIGNoYW5nZXMgdGhhdCBhZmZlY3RzIHRoZSBwb3NpdGlv
bi90cmFuc2Zvcm0gb2YgdGhlIHJlbmRlcgorICAgIC8vIHN1cmZhY2UuIE5vdGUgdGhhdCBpbiB0
aGlzIGNhc2UsIHRoZSBsYXllclByb3BlcnR5Q2hhbmdlZCBmbGFnIGFscmVhZHkgcHJvcGFnYXRl
cworICAgIC8vIHRvIHRoZSBzdWJ0cmVlICh0ZXN0ZWQgaW4gQ0NMYXllckltcGx0ZXN0KSwgd2hp
Y2ggZGFtYWdlcyB0aGUgZW50aXJlIGNoaWxkMQorICAgIC8vIHN1cmZhY2UsIGJ1dCB0aGUgZGFt
YWdlIHRyYWNrZXIgc3RpbGwgbmVlZHMgdGhlIGNvcnJlY3QgbG9naWMgdG8gY29tcHV0ZSB0aGUK
KyAgICAvLyBleHBvc2VkIHJlZ2lvbiBvbiB0aGUgcm9vdCBzdXJmYWNlLgorCisgICAgLy8gRklY
TUU6IHRoZSBleHBlY3RhdGlvbnMgb2YgdGhpcyB0ZXN0IGNhc2Ugc2hvdWxkIGNoYW5nZSB3aGVu
IHdlIGFkZCBzdXBwb3J0IGZvciBhCisgICAgLy8gICAgICAgIHVuaXF1ZSBzY2lzc29yUmVjdCBw
ZXIgcmVuZGVyU3VyZmFjZS4gSW4gdGhhdCBjYXNlLCB0aGUgY2hpbGQxIHN1cmZhY2UKKyAgICAv
LyAgICAgICAgc2hvdWxkIGJlIGNvbXBsZXRlbHkgdW5jaGFuZ2VkLCBzaW5jZSB3ZSBhcmUgb25s
eSB0cmFuc2Zvcm1pbmcgaXQsIHdoaWxlIHRoZQorICAgIC8vICAgICAgICByb290IHN1cmZhY2Ug
d291bGQgYmUgZGFtYWdlZCBhcHByb3ByaWF0ZWx5LgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRy
ZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBy
b290RGFtYWdlUmVjdDsKKworICAgIGNoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg1MC4w
ZiwgNTAuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAg
IC8vIFRoZSBuZXcgc3VyZmFjZSBib3VuZHMgc2hvdWxkIGJlIGRhbWFnZWQgZW50aXJlbHkuCisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5MC4wZiwgMTkwLjBmLCAxNi4wZiwg
MTguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gVGhlIGVudGlyZSBjaGlsZDEgc3Vy
ZmFjZSBhbmQgdGhlIG9sZCBleHBvc2VkIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBkYW1hZ2UgdGhl
IHJvb3Qgc3VyZmFjZS4KKyAgICAvLyAgLSBvbGQgY2hpbGQxIHN1cmZhY2UgaW4gdGFyZ2V0IHNw
YWNlOiBGbG9hdFJlY3QoMjkwLjBmLCAyOTAuMGYsIDE2LjBmLCAxOC4wZikKKyAgICAvLyAgLSBu
ZXcgY2hpbGQxIHN1cmZhY2UgaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3QoMjQwLjBmLCAyNDAu
MGYsIDE2LjBmLCAxOC4wZikKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjQw
LCAyNDAsIDY2LjBmLCA2OC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nUmVuZGVyU3Vy
ZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBU
ZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQx
ID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0Owor
ICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIC8vIENBU0UgMTogSWYgYSBkZXNj
ZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBiZWNvbWVzIGV4
cG9zZWQuCisgICAgLy8KKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMS4wZik7CisgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0
IHRoZXJlIGlzIG9ubHkgb25lIHN1cmZhY2Ugbm93LgorICAgIEFTU0VSVF9GQUxTRShjaGlsZDEt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNCks
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5MC4w
ZiwgMjkwLjBmLCAxNi4wZiwgMTguMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNF
IDI6IElmIGEgZGVzY2VuZGFudCBzdXJmYWNlIGFwcGVhcnMsIGl0cyBlbnRpcmUgb2xkIGFyZWEg
YmVjb21lcyBleHBvc2VkLgorCisgICAgLy8gQ3ljbGUgb25lIGZyYW1lIG9mIG5vIGNoYW5nZSwg
anVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCByZWN0IGlzIG5vdCBiZWNhdXNlIG9m
IHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFt
YWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiBjaGFuZ2UgdGhlIHRyZWUgc28gdGhh
dCB0aGUgcmVuZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBjaGlsZDEtPnNldE9wYWNp
dHkoMC41Zik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAg
IC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZXJlIGlzIGEgbmV3IHN1cmZhY2Ugbm93LgorICAgIEFT
U0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigzKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXpl
KCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIGNoaWxkRGFtYWdlUmVjdCA9
IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMTkwLjBmLCAxOTAuMGYsIDE2LjBmLCAxOC4wZiksIGNoaWxkRGFtYWdlUmVj
dCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5MC4wZiwgMjkwLjBmLCAx
Ni4wZiwgMTguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNr
ZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdlZCkKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2Vz
KCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBd
OworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1h
Z2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBJZiBub3RoaW5nIGNoYW5nZXMsIHRoZSBkYW1hZ2Ug
cmVjdCBzaG91bGQgYmUgZW1wdHkuCisgICAgLy8KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gQ0FT
RSAyOiBJZiBub3RoaW5nIGNoYW5nZXMgdHdpY2UgaW4gYSByb3csIHRoZSBkYW1hZ2UgcmVjdCBz
aG91bGQgc3RpbGwgYmUgZW1wdHkuCisgICAgLy8KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0Yo
Q0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VGb3JVcGRhdGVSZWN0VGhhdERvZXNO
b3REcmF3Q29udGVudCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVB
bmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFn
ZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gSW4gb3VyIHNw
ZWNpZmljIHRyZWUsIHRoZSB1cGRhdGUgcmVjdCBvZiBjaGlsZDEgc2hvdWxkIG5vdCBjYXVzZSBh
bnkgZGFtYWdlIHRvIGFueQorICAgIC8vIHN1cmZhY2UgYmVjYXVzZSBpdCBkb2VzIG5vdCBhY3R1
YWxseSBkcmF3IGNvbnRlbnQuCisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCAxLjBmLCAyLjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+
ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0
ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2EpCit7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigp
WzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBjaGlsZDEtPmNoaWxk
cmVuKClbMV07CisKKyAgICAvLyBEYW1hZ2Ugb24gYSBzdXJmYWNlIHRoYXQgaGFzIGEgcmVmbGVj
dGlvbiBzaG91bGQgY2F1c2UgdGhlIHRhcmdldCBzdXJmYWNlIHRvCisgICAgLy8gcmVjZWl2ZSB0
aGUgc3VyZmFjZSdzIGRhbWFnZSBhbmQgdGhlIHN1cmZhY2UncyByZWZsZWN0ZWQgZGFtYWdlLgor
CisgICAgLy8gRm9yIHRoaXMgdGVzdCBjYXNlLCB3ZSBtb2RpZnkgZ3JhbmRDaGlsZDIsIGFuZCBh
ZGQgZ3JhbmRDaGlsZDMgdG8gZXh0ZW5kIHRoZSBib3VuZHMKKyAgICAvLyBvZiBjaGlsZDEncyBz
dXJmYWNlLiAgVGhpcyB3YXksIHdlIGNhbiB0ZXN0IHJlZmxlY3Rpb24gY2hhbmdlcyB3aXRob3V0
IGNoYW5naW5nCisgICAgLy8gY29udGVudEJvdW5kcyBvZiB0aGUgc3VyZmFjZS4KKyAgICBncmFu
ZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxODAuMGYsIDE4MC4wZikpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDMgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDYpOwor
ICAgIGdyYW5kQ2hpbGQzLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDI0MC4wZiwgMjQwLjBmKSk7
CisgICAgZ3JhbmRDaGlsZDMtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7Cisg
ICAgZ3JhbmRDaGlsZDMtPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgIGdyYW5kQ2hp
bGQzLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7
CisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMyk7CisgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIENBU0UgMTogYWRkaW5nIGEgcmVmbGVjdGlv
biBhYm91dCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hpbGQxLgorICAgIC8vCisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDcp
OworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygp
KTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onpl
cm8oKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlvbjsKKyAgICByZWZsZWN0
aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0
VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5zZXRSZXBsaWNhTGF5ZXIo
Z3JhbmRDaGlsZDFSZXBsaWNhKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworCisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGlsZDEt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
ICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+
ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEZsb2F0UmVjdCByb290
RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJy
ZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gVGhlIGdyYW5kQ2hpbGQgc3VyZmFjZSBkYW1hZ2Ug
c2hvdWxkIG5vdCBpbmNsdWRlIGl0cyBvd24gcmVwbGljYS4gVGhlIGNoaWxkCisgICAgLy8gc3Vy
ZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIG5vcm1hbCBhbmQgcmVwbGljYSBzdXJmYWNl
cy4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNi4wZiwg
OC4wZiksIGdyYW5kQ2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMTk0LjBmLCAyMDAuMGYsIDEyLjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjk0LjBmLCAzMDAuMGYsIDEyLjBm
LCA4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBtb3ZpbmcgdGhlIGRl
c2NlbmRhbnQgc3VyZmFjZSBzaG91bGQgY2F1c2UgYm90aCB0aGUgb3JpZ2luYWwgYW5kIHJlZmxl
Y3RlZAorICAgIC8vICAgICAgICAgYXJlYXMgdG8gYmUgZGFtYWdlZCBvbiB0aGUgdGFyZ2V0Lgor
ICAgIEludFJlY3Qgb2xkQ29udGVudFJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKTsKKyAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTUu
MCwgMjA1LjApKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC53aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKS53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEob2xkQ29udGVudFJlY3Qu
aGVpZ2h0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLmhlaWdodCgp
KTsKKworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBj
aGlsZCBzdXJmYWNlIGRhbWFnZSBzaG91bGQgaW5jbHVkZSBub3JtYWwgYW5kIHJlcGxpY2Egc3Vy
ZmFjZXMgZm9yIGJvdGggb2xkIGFuZCBuZXcgbG9jYXRpb25zLgorICAgIC8vICAtIG9sZCBsb2Nh
dGlvbiBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgxOTQuMGYsIDIwMC4wZiwgMTIuMGYsIDgu
MGYpCisgICAgLy8gIC0gbmV3IGxvY2F0aW9uIGluIHRhcmdldCBzcGFjZTogRmxvYXRSZWN0KDE4
OS4wZiwgMjA1LjBmLCAxMi4wZiwgOC4wZikKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMC4wZiwgMC4wZiwgNi4wZiwgOC4wZiksIGdyYW5kQ2hpbGREYW1hZ2VSZWN0KTsKKyAg
ICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LjBmLCAyMDAuMGYsIDE3LjBmLCAx
My4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDI4OS4wZiwgMzAwLjBmLCAxNy4wZiwgMTMuMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAg
ICAvLyBDQVNFIDM6IHJlbW92aW5nIHRoZSByZWZsZWN0aW9uIHNob3VsZCBjYXVzZSB0aGUgZW50
aXJlIHJlZ2lvbiBpbmNsdWRpbmcgcmVmbGVjdGlvbgorICAgIC8vICAgICAgICAgdG8gZGFtYWdl
IHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBncmFuZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKDAp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgQVNTRVJUX0VR
KG9sZENvbnRlbnRSZWN0LndpZHRoKCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
UmVjdCgpLndpZHRoKCkpOworICAgIEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC5oZWlnaHQoKSwg
Y2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkpOworCisgICAg
RVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxODkuMGYsIDIwNS4wZiwgMTIuMGYsIDguMGYpLCBjaGls
ZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyODkuMGYs
IDMwNS4wZiwgMTIuMGYsIDguMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNYXNrKQoreworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisg
ICAgLy8gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRhbWFnZSB0cmFja2Vy
LCBjaGFuZ2VzIHRvIG1hc2sgbGF5ZXJzIHNob3VsZAorICAgIC8vIGRhbWFnZSB0aGUgZW50aXJl
IGNvcnJlc3BvbmRpbmcgc3VyZmFjZS4KKworICAgIC8vIFNldCB1cCB0aGUgbWFzayBsYXllci4K
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1hc2tMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
Myk7CisgICAgbWFza0xheWVyLT5zZXRQb3NpdGlvbihjaGlsZC0+cG9zaXRpb24oKSk7CisgICAg
bWFza0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIG1hc2tM
YXllci0+c2V0Qm91bmRzKGNoaWxkLT5ib3VuZHMoKSk7CisgICAgY2hpbGQtPnNldE1hc2tMYXll
cihtYXNrTGF5ZXIpOworCisgICAgLy8gQWRkIG9wYWNpdHkgYW5kIGEgZ3JhbmRDaGlsZCBzbyB0
aGF0IHRoZSByZW5kZXIgc3VyZmFjZSBwZXJzaXN0cyBldmVuIGFmdGVyIHdlIHJlbW92ZSB0aGUg
bWFzay4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyLjAsIDIuMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRz
KEludFNpemUoMiwgMikpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVG
cmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IGEgbmV3IHN1cmZh
Y2Ugd2FzIGNyZWF0ZWQgZm9yIHRoZSBjaGlsZC4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIENBU0UgMTogdGhlIHVwZGF0ZVJlY3Qgb24gYSBtYXNr
IGxheWVyIHNob3VsZCBkYW1hZ2UgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLwor
ICAgIG1hc2tMYXllci0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMS4wZiwgMi4wZiwgMy4wZiwg
NC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRmxv
YXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgMzAuMGYsIDMwLjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIENBU0UgMjogYSBwcm9wZXJ0eSBjaGFuZ2Ugb24gdGhlIG1hc2sgbGF5ZXIgc2hvdWxk
IGRhbWFnZSB0aGUgZW50aXJlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vCisKKyAgICAvLyBBZHZh
bmNlIG9uZSBmcmFtZSB3aXRob3V0IGRhbWFnZSBzbyB0aGF0IHdlIGtub3cgdGhlIGRhbWFnZSBy
ZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9tIHRoZSBwcmV2aW91cyBjYXNlLgorICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
ICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gVGhl
biB0ZXN0IHRoZSBwcm9wZXJ0eSBjaGFuZ2UuCisgICAgbWFza0xheWVyLT5zZXRPcGFjaXR5KDAu
NWYpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGRE
YW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJy
ZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCAzMC4wZiwgMzAuMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAz
OiByZW1vdmluZyB0aGUgbWFzayBhbHNvIGRhbWFnZXMgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFj
ZS4KKyAgICAvLworCisgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28g
dGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJl
dmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3Qu
aXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4gdGVzdCBtYXNrIHJlbW92YWwuCisgICAgY2hpbGQt
PnNldE1hc2tMYXllcigwKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAg
IC8vIFNhbml0eSBjaGVjayB0aGF0IGEgcmVuZGVyIHN1cmZhY2Ugc3RpbGwgZXhpc3RzLgorICAg
IEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgY2hpbGREYW1hZ2VS
ZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCAzMC4wZiwgMzAuMGYpLCBjaGlsZERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VU
cmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2spCit7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigp
WzBdOworCisgICAgLy8gQ2hhbmdlcyB0byBhIHJlcGxpY2EncyBtYXNrIHNob3VsZCBub3QgZGFt
YWdlIHRoZSBvcmlnaW5hbCBzdXJmYWNlLCBiZWNhdXNlIGl0IGlzCisgICAgLy8gbm90IG1hc2tl
ZC4gQnV0IGl0IGRvZXMgZGFtYWdlIHRoZSBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZS4KKworICAg
IC8vIENyZWF0ZSBhIHJlZmxlY3Rpb24gYWJvdXQgdGhlIGxlZnQgZWRnZSBvZiBncmFuZENoaWxk
MS4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNik7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDo6emVybygpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZWZsZWN0aW9u
OworICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAsIDEuMCk7CisgICAgZ3JhbmRDaGls
ZDFSZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlvbik7CisgICAgZ3JhbmRDaGlsZDEtPnNl
dFJlcGxpY2FMYXllcihncmFuZENoaWxkMVJlcGxpY2EpOworCisgICAgLy8gU2V0IHVwIHRoZSBt
YXNrIGxheWVyIG9uIHRoZSByZXBsaWNhIGxheWVyCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
ZXBsaWNhTWFza0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg3KTsKKyAgICByZXBsaWNhTWFz
a0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJlcGxpY2FNYXNr
TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcmVwbGljYU1h
c2tMYXllci0+c2V0Qm91bmRzKGdyYW5kQ2hpbGQxLT5ib3VuZHMoKSk7CisgICAgZ3JhbmRDaGls
ZDFSZXBsaWNhLT5zZXRNYXNrTGF5ZXIocmVwbGljYU1hc2tMYXllcik7CisKKyAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlIGFwcHJvcHJpYXRlIHJlbmRlciBzdXJmYWNlcyB3ZXJlIGNyZWF0ZWQKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIENBU0UgMTogYSBw
cm9wZXJ0eSBjaGFuZ2Ugb24gdGhlIG1hc2sgc2hvdWxkIGRhbWFnZSBvbmx5IHRoZSByZWZsZWN0
ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICByZXBsaWNhTWFza0xheWVyLT5z
ZXRPcGFjaXR5KDAuNmYpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisKKyAgICBGbG9hdFJlY3QgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmFu
ZENoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCgxOTQuMGYsIDIwMC4wZiwgNi4wZiwgOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisK
KyAgICAvLyBDQVNFIDI6IHJlbW92aW5nIHRoZSByZXBsaWNhIG1hc2sgZGFtYWdlcyBvbmx5IHRo
ZSByZWZsZWN0ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworICAgIGdy
YW5kQ2hpbGQxUmVwbGljYS0+c2V0TWFza0xheWVyKDApOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgRVhQRUNUX1RSVUUoZ3JhbmRD
aGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMTk0LjBmLCAyMDAuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVySW1wbFRlc3QuY3BwCmluZGV4IDk0MmJlYzJmNzEzYTI4NDUyMWJhYTk0M2VjY2M0NGUyMGI4
YWM1ZmYuLjg5MDUwNTBlNjY3MzkzMjY1Yjk0YzlmYjJmNTVhM2RhOWIzZjFmZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTM1
LDIxICszNSwyMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSB7CiAKICNk
ZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfQ0hBTkdFRChjb2RlVG9UZXN0KSAgICAg
ICAgICAgICAgICAgIFwKLSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0
cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5n
ZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBj
b2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShyb290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShjaGlsZC0+bGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBF
Q1RfVFJVRShncmFuZENoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKQogCiAjZGVmaW5lIEVY
RUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9OT1RfQ0hBTkdFKGNvZGVUb1Rlc3QpICAgICAg
ICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2lu
Z0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVz
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNF
KGdyYW5kQ2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9B
TkRfVkVSSUZZX09OTFlfTEFZRVJfQ0hBTkdFRChjb2RlVG9UZXN0KSAgICAgICAgICAgICAgIFwK
LSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3Vi
dHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjb2RlVG9UZXN0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBFWFBFQ1RfVFJVRShyb290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFu
Z2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExNSw3ICsxMTUsNyBAQCBURVNU
KENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5TGF5ZXJDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9PTkxZX0xBWUVSX0NIQU5HRUQocm9vdC0+c2V0QmFja2dy
b3VuZENvbG9yKENvbG9yOjpncmF5KSk7CiAKICAgICAvLyBTcGVjaWFsIGNhc2U6IGNoZWNrIHRo
YXQgc3VibGF5ZXIgdHJhbnNmb3JtIGNoYW5nZXMgYWxsIGxheWVyJ3MgZGVzY2VuZGFudHMsIGJ1
dCBub3QgdGhlIGxheWVyIGl0c2VsZi4KLSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZs
YWdGb3JTdWJ0cmVlKCk7CisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRy
ZWUoKTsKICAgICByb290LT5zZXRTdWJsYXllclRyYW5zZm9ybShhcmJpdHJhcnlUcmFuc2Zvcm0p
OwogICAgIEVYUEVDVF9GQUxTRShyb290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsKICAgICBF
WFBFQ1RfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcAppbmRleCBjOWEyZmM2NTEzMjU2NmI0MjYzYTAwNjg4ZjU3YzNmNTI3YjE2MWIyLi44M2E0
NGVjYWEwZmIyMjA3ZTUxMjMzZWQ0MWZhNmE4ZmU0NmEyMjM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIgogCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTM2
LDI3ICszNyw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi0v
LyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGd0ZXN0
IGVycm9ycyBjYW4gZ2l2ZSB1cyB1c2VmdWwgbGluZSBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aCB0
aGUgdGVzdC4KLS8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUg
ZG91YmxlLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCwg
YW5kIHNvIHdlCi0vLyBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0
aW5nLXBvaW50IHByZWNpc2lvbi4KLSNkZWZpbmUgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
ZXhwZWN0ZWQsIGFjdHVhbCkgICAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0x
MSgpLCAoYWN0dWFsKS5tMTEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTEyKCksIChhY3R1YWwpLm0xMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTIxKCksIChhY3R1YWwpLm0yMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTI0KCksIChhY3R1YWwpLm0yNCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCkubTMxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFsKS5tMzIoKSk7ICBcCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTMzKCksIChhY3R1YWwpLm0zMygpKTsgIFwKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgXAotICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFsKS5tNDEoKSk7ICBcCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQyKCksIChhY3R1YWwpLm00MigpKTsgIFwKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFjdHVhbCkubTQzKCkpOyAgXAotICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAoYWN0dWFsKS5tNDQoKSkKLQogdm9p
ZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2
ZXMzRCkKIHsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CkBAIC0xMjAsMTIg
KzEwMCwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JOb09wTGF5ZXIpCiAKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0
cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJp
eCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBjaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCkBAIC0xNDQsOCArMTI0
LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
U2luZ2xlTGF5ZXIpCiAgICAgYXJiaXRyYXJ5VHJhbnNsYXRpb24udHJhbnNsYXRlKDEwLjAsIDIw
LjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBhcmJpdHJhcnlUcmFuc2xhdGlvbiwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOwogICAgIGV4ZWN1
dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJp
eCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgMjogc2V0dGluZyB0aGUg
Ym91bmRzIG9mIHRoZSBsYXllciBzaG91bGQgcmVzdWx0IGluIGEgZHJhdyB0cmFuc2Zvcm0gdGhh
dCB0cmFuc2xhdGVzIHRvIGhhbGYgdGhlIHdpZHRoIGFuZCBoZWlnaHQuCiAgICAgLy8gICAgICAg
ICBUaGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSBzaG91bGQgcmVtYWluIGFzIHRoZSBpZGVudGl0
eSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBkZWFsIHdpdGggdHJhbnNmb3JtaW5nIHRvL2Zyb20gdGhl
IGNlbnRlciBvZiB0aGUgbGF5ZXIuCkBAIC0xNTMsMjIgKzEzMywyMiBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICB0
cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CiAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRT
aXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNs
YXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAzOiBUaGUgYW5jaG9yIHBvaW50IGJ5IGl0c2VsZiAo
d2l0aG91dCBhIGxheWVyIHRyYW5zZm9ybSkgc2hvdWxkIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSB0
cmFuc2Zvcm1zLgogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYp
LCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBl
eGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVu
dGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0
eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA0
OiBBIGNoYW5nZSBpbiAiYWN0dWFsIiBwb3NpdGlvbiBhZmZlY3RzIGJvdGggdGhlIGRyYXcgdHJh
bnNmb3JtIGFuZCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHBvc2l0aW9uVHJhbnNmb3JtOwogICAgIHBvc2l0aW9uVHJhbnNmb3JtLnRyYW5zbGF0ZSgw
LjAsIDEuMik7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1Ziks
IEZsb2F0UG9pbnQoMi41ZiwgNC4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNs
YXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBvc2l0aW9uVHJh
bnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA1OiBJbiB0aGUgY29y
cmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zLCB0aGUgbGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBw
cmUtbXVsdGlwbHkgdGhlIHRyYW5zbGF0aW9uVG9DZW50ZXIuIFRoaXMgaXMgZWFzaWx5IHRlc3Rl
ZCBieQogICAgIC8vICAgICAgICAgdXNpbmcgYSBzY2FsZSB0cmFuc2Zvcm0sIGJlY2F1c2Ugc2Nh
bGUgYW5kIHRyYW5zbGF0aW9uIGFyZSBub3QgY29tbXV0YXRpdmUuCkBAIC0xNzYsOCArMTU2LDgg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2lu
Z2xlTGF5ZXIpCiAgICAgbGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKICAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5
ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShsYXllclRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgLy8gQ2FzZSA2OiBUaGUgbGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBvY2N1ciB3aXRo
IHJlc3BlY3QgdG8gdGhlIGFuY2hvciBwb2ludC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2xhdGlvblRvQW5jaG9yOwpAQCAtMTg1LDggKzE2NSw4IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkUmVzdWx0ID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDAuMGYp
LCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVz
dWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAg
IC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9zaXRpb24gcHJlLW11bHRpcGxpZXMgdGhlIGxheWVy
IHRyYW5zZm9ybS4KICAgICAvLyAgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9m
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBkb2VzIHRoaXMgaW1wbGljaXRs
eSwgYnV0IGl0IGlzCkBAIC0xOTQsOCArMTc0LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgZXhwZWN0ZWRSZXN1
bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5z
Zm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAxLjJmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
ZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNo
eSkKQEAgLTIxNiwxMCArMTk2LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUo
MTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRD
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNl
KTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZ3JhbmRDaGls
ZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDI6IHBhcmVudCdzIHBv
c2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kQ2hpbGQuCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07CkBAIC0yMjgsMTAgKzIwOCwxMCBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVy
YXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJh
bnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRp
b25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBj
aGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGNo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDM6IHBhcmVudCdzIGxvY2Fs
IHRyYW5zZm9ybSBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZGNoaWxkCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CkBAIC0yNDMsMTAgKzIyMywxMCBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVy
YXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRl
VHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDogcGFyZW50
J3Mgc3VibGF5ZXJNYXRyaXggYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAogICAgIC8vICAg
ICAgICAgc2NhbGluZyBpcyB1c2VkIGhlcmUgYWdhaW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1
ZW5jZSBvZiB0cmFuc2Zvcm1zIGlzIHByb3Blcmx5IHRlc3RlZC4KQEAgLTI2NCwxMCArMjQ0LDEw
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOwogICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVu
ZWRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3Jt
ICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShmbGF0dGVuZWRDb21w
b3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAg
ICAgLy8gQ2FzZSA1OiBzYW1lIGFzIENhc2UgNCwgZXhjZXB0IHRoYXQgY2hpbGQgZG9lcyBwcmVz
ZXJ2ZSAzRCwgc28gdGhlIGdyYW5kQ2hpbGQgc2hvdWxkIHJlY2VpdmUgdGhlIG5vbi1mbGF0dGVu
ZWQgY29tcG9zaXRlIHRyYW5zZm9ybS4KICAgICAvLwpAQCAtMjc1LDEwICsyNTUsMTAgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGll
cmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCB0cnVlKTsKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRl
VHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKQEAg
LTMyMSwxMiArMzAxLDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCiAKICAgICAvLyBUaGUgY2hpbGQgbGF5
ZXIncyBkcmF3IHRyYW5zZm9ybSBzaG91bGQgcmVmZXIgdG8gaXRzIG5ldyByZW5kZXIgc3VyZmFj
ZTsgdGhleSBvbmx5IGRpZmZlciBieSBhIHRyYW5zbGF0aW9uIHRvIGNlbnRlci4KICAgICAvLyBU
aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSwgaG93ZXZlciwgc2hvdWxkIHN0aWxsIHJlZmVyIHRv
IHRoZSByb290LgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRy
YW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBXaXRob3V0IGNsaXBwaW5nLCB0aGUg
b3JpZ2luIHRyYW5zZm9ybSBhbmQgZHJhdyB0cmFuc2Zvcm0gKGluIHRoaXMgcGFydGljdWxhciBj
YXNlKSBzaG91bGQgYmUgdGhlIHNhbWUuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5v
cmlnaW5UcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50
Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zv
cm0oKSk7CiAKIH0KIApAQCAtNDIzLDM4ICs0MDMsMzggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAg
ICAvLyAgbm90ZSB0aGF0IGRyYXcgdHJhbnNmb3JtcyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVj
dCB0byB0aGUgbmVhcmVzdCBhbmNlc3RvciByZW5kZXIgc3VyZmFjZQogICAgIC8vICBidXQgc2Ny
ZWVuIHNwYWNlIHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHJv
b3QuCiAgICAgLy8KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogdHJhbnNsYXRp
b25Ub0NlbnRlciwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSb290
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBC
ICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUm9vdC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVy
LCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRp
b25Ub0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTEtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIHRy
YW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTIt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEg
KiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNl
Mi0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBICogQiAqIEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CiAK
ICAgICAvLyBWZXJpZnkgbGF5ZXIgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybXMKICAgICAvLwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBLCBjaGlsZE9m
Um9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSwgcGFyZW50
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKEEgKiBCICogQSwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEsIGdy
YW5kQ2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICog
QiAqIEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRP
ZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIg
KiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hp
bGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAq
IEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBC
ICogQSwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCByZW5kZXJTdXJm
YWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEg
KiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFZlcmlmeSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zv
cm1zLgogICAgIC8vCiAgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAx
IGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcm9vdC4KLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9y
aWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEg
KiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3Jt
KCkpOwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMiBpcyBkZXNj
cmliZWQgd2l0aCByZXNwZWN0IHRvIHJlbmRlciBzdXJmYWNlIDIuCi0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPm9y
aWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIg
KiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7
CiAKICAgICAvLyBTYW5pdHkgY2hlY2suIElmIHRoZXNlIGZhaWwgdGhlcmUgaXMgcHJvYmFibHkg
YSBidWcgaW4gdGhlIHRlc3QgaXRzZWxmLgogICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoYXQgd2Ug
Y29ycmVjdGx5IHNldCB1cCB0cmFuc2Zvcm1zIHNvIHRoYXQgdGhlIHktY29tcG9uZW50IG9mIHRo
ZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjgzZGFjYWJhM2Nm
ZTAxY2FjYTNhYmE1OWJmNzg3NjRhN2RkMWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlVGVzdENvbW1vbl9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlVGVzdENvbW1vbl9oCisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisK
Ky8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVz
ZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KKyNkZWZpbmUgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLngoKSwgKGFjdHVhbCku
bG9jYXRpb24oKS54KCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRp
b24oKS55KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueSgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9F
USgoZXhwZWN0ZWQpLnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5zaXplKCkud2lkdGgoKSk7IFwK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkuaGVpZ2h0KCksIChhY3R1YWwp
LnNpemUoKS5oZWlnaHQoKSkKKworLy8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5j
dGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWls
ZWQuCisvLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJs
ZSBwcmVjaXNpb24sIHRoZXJlIGFyZSBtYW55IG90aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1
c2VkIHRoYXQgYWZmZWN0CisvLyB0aGUgdHJhbnNmb3JtcywgYW5kIHNvIHdlIG9ubHkgZXhwZWN0
IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgorI2Rl
ZmluZSBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBhY3R1YWwpICAg
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTEx
KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEyKCksIChh
Y3R1YWwpLm0xMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0xMygpLCAoYWN0dWFsKS5tMTMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVhbCkubTE0KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTIxKCksIChhY3R1YWwpLm0yMSgpKTsgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMigpLCAoYWN0dWFsKS5tMjIoKSk7ICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwgKGFjdHVhbCku
bTIzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTI0KCks
IChhY3R1YWwpLm0yNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0zMSgpLCAoYWN0dWFsKS5tMzEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgICAgICAgICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMzKCksIChhY3R1YWwpLm0zMygpKTsgICAgICAgICAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zNCgpLCAoYWN0dWFsKS5tMzQoKSk7
ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDEoKSwgKGFjdHVh
bCkubTQxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQy
KCksIChhY3R1YWwpLm00MigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm00MygpLCAoYWN0dWFsKS5tNDMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCisKK30gLy8gbmFtZXNwYWNl
CisKKyNlbmRpZiAvLyBDQ0xheWVyVHJlZVRlc3RDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggNzA0NTQ0
YjZhZGIzM2QzYTBmZmEzNWU4ZTc0MmQ0MzdkYzFlZmRmZS4uYzNiMzY2ZGRhMzIzNzQ2ODY4NmZi
ZjgzZWQ0ZmUzMzkwZjgyZjMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCkBAIC01OSwxOCArNTksMTYgQEAgVEVTVChD
Q1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlTdXJmYWNlQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJs
eSkKICAgICBBU1NFUlRfVFJVRShvd25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBvd25pbmdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpOwogICAgIEludFJlY3QgdGVzdFJlY3QgPSBJbnRSZWN0KEludFBvaW50KDMsIDQpLCBJbnRT
aXplKDUsIDYpKTsKLQotICAgIG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdG
b3JTdWJ0cmVlKCk7CisgICAgb3duaW5nTGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JT
dWJ0cmVlKCk7CiAKICAgICAvLyBDdXJyZW50bHksIHRoZSBjb250ZW50UmVjdCwgY2xpcFJlY3Qs
IGFuZCBvd25pbmdMYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBhcmUKICAgICAvLyB0aGUg
b25seSBzb3VyY2VzIG9mIGNoYW5nZS4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9D
SEFOR0VEKHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KHRlc3RSZWN0KSk7CiAgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hBTkdFRChyZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50UmVj
dCh0ZXN0UmVjdCkpOwogCi0gICAgb3duaW5nTGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxh
Z0ZvclN1YnRyZWUoKTsKICAgICBvd25pbmdMYXllci0+c2V0T3BhY2l0eSgwLjVmKTsKICAgICBF
WFBFQ1RfVFJVRShyZW5kZXJTdXJmYWNlLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkpOwotICAg
IG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CisgICAg
b3duaW5nTGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKICAgICAv
LyBTZXR0aW5nIHRoZSBzdXJmYWNlIHByb3BlcnRpZXMgdG8gdGhlIHNhbWUgdmFsdWVzIGFnYWlu
IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCAiY2hhbmdlIi4KICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdCh0ZXN0
UmVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21p
dW1UZXN0LmNwcAppbmRleCBlZDljZWNiOTYzNjYxOWFjZDI1ZTQwMjA1OTFhZGE2ZDM2M2E5MzFi
Li43ODA5ZDE4YTQzNjcwZDQ4YWE3ODYxZmI4NzA0NjU2Mjg1OTNmYTI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYs
MTAgKzI2LDEyIEBACiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJD
Q0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwogdXNpbmcgOjp0ZXN0
aW5nOjpfOwogdXNpbmcgOjp0ZXN0aW5nOjpBdExlYXN0OwpAQCAtMTMyLDE0ICsxMzQsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCk7CiAgICAgfQog
Ci0gICAgdm9pZCB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoY29uc3QgRmxvYXRSZWN0JiBl
eHBlY3RlZCwgY29uc3QgRmxvYXRSZWN0JiBhY3R1YWwpIGNvbnN0Ci0gICAgewotICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS54KCksIGFjdHVhbC5sb2NhdGlvbigp
LngoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5sb2NhdGlvbigpLnkoKSwg
YWN0dWFsLmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVk
LnNpemUoKS53aWR0aCgpLCBhY3R1YWwuc2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEoZXhwZWN0ZWQuc2l6ZSgpLmhlaWdodCgpLCBhY3R1YWwuc2l6ZSgpLmhlaWdodCgp
KTsKLSAgICB9Ci0KICAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtX3NpbGVudERlbGVnYXRlLCBtX3Bh
cmVudERlbGVnYXRlOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGls
ZDEsIG1fY2hpbGQyLCBtX2NoaWxkMywgbV9ncmFuZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9n
cmFuZENoaWxkMzsKIH07CkBAIC01NjIsMjQgKzU1NiwyNCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogCiAgICAg
Ly8gQ2FzZSAxOiBiYXNpYwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkp
OwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eTEsIHRlc3RMYXllci0+ZGly
dHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5MSwgdGVzdExheWVyLT5k
aXJ0eVJlY3QoKSk7CiAKICAgICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxk
IGJlIHVuaW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0eTIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0
UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBm
LCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSAzOiBkaXJ0
eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4K
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwotICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwg
MTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKIAogICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRp
cnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5l
ZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNB
bG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RM
YXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgx
MC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAK
ICAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3Qg
YXJnIHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJvdW5kcyB0byBiZSBkaXJ0eSwKICAgICAvLyAg
ICAgICAgIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZs
b2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0
ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJl
Y3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExh
eWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyByZXNldE5lZWRzRGlzcGxheSBzaG91bGQgZW1w
dHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBOT1QgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQuCiAgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwg
dGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKQEAgLTU5NiwxMyArNTkwLDEzIEBAIFRF
U1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVn
YXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYs
IDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcyk7Ci0gICAgdmVy
aWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUw
OC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUwOC4wZiksIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOwogCiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwogICAgIEVYUEVD
VF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKIAogICAgIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5KTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1
YWwoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hy
b21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpAQCAt
NjU2LDcgKzY1MCw3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNo
YW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBz
aG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkKICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwg
Y2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGlydHkgcmVjdC4KICAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwotICAgIHZlcmlmeUZsb2F0UmVj
dHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKICAgICB0ZXN0
TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116708</attachid>
            <date>2011-11-28 00:58:24 -0800</date>
            <delta_ts>2011-11-28 14:59:07 -0800</delta_ts>
            <desc>forgot to commit style fix, should be fixed now</desc>
            <filename>bug-72520-20111128005823.patch</filename>
            <type>text/plain</type>
            <size>107411</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1ZGYwYmE5ZGY4MzFj
ZjgxZmFmNzg0ZWUxZDZiNDQwMDU2YjQxOC4uMDU5NzVmODk0NjgyYjY5ZTg4ODg5ZmZiMmE1NDVl
MzYzYmQxOTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnJlbW92ZVJlY3RGcm9tQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6c2F2ZVJlY3RGb3JO
ZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpjb21wdXRlRGFt
YWdlRnJvbUFjdGl2ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6
OmNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1h
Z2VUcmFja2VyOjpjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJh
Y2tlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI3ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IHZlcnRpY2FsLWFsaWduIHByb3BlcnR5IGluIENT
U1N0eWxlQXBwbHlQcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzlmZDM0
ODYwMTA3MzQ4MWMzZjBkMjQ2ODRkNmQ5MWJmNDJjYTY5Mi4uODJkMDBhYTA4OTlkMTU2YmI5NzZh
ZjZkMGU0NTdhMGVjMTI0OTU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8g
ZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBhIHN1cmZhY2UuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjUyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAg
ICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5nT25lRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAg
ICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTI4ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW9yZSBmb3J3YXJkaW5nIGhlYWRl
cnMuICBUdXJucyBvdXQgSSBmb3Jnb3QgdG8gc3ZuIGFkZCB0aGVtLiAgOigKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA0NDkwZmNlMWU3YWNiOTVkMTg1YzBmOTA4NWU5ZWJiYmUyNDQ3ZGY5Li5kNTA3ZmUy
M2YwYTk5MGYyOWVjNmVkNzhkNjIxNDUzNGVjY2FmZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NTY2LDYgKzM1NjYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGViYzM5NGM0YzVkYWQzMTZjY2RiZGE2
MTU1MjRlZjkwN2EyNDA1NmIuLmQxODU1N2NhOTAyNzgxZGE3N2RkMTM0ZDU3Y2JkYTlkMWJkZjU0
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRy
ZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKQEAgLTMzMSw2ICszMzIsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIGlmICh1
c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7CisKKyAgICAgICAgICAgIGlmIChzZXR0
aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCksIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCkpOworCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVy
ICE9IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwog
ICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xv
cigwLCAwLCAwLCAwKSk7CkBAIC0zNDUsNyArMzUwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3
TGEKICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1p
bmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2Nj
dXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJl
ZSgpOworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7CiB9CiAKIApAQCAtNTgzLDcgKzU4OCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKIAogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIEND
UmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKKyAg
ICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xheWVySWQoKSkp
IHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0
RHJhd1JlY3QoKSk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250
ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmFmYWMwOGQ4MzNhNmNlNjIwNTMwNGU1ZDIzNzhkYzhmOTUxZjU4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0RhbWFn
ZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VUcmFja2VyOjpDQ0RhbWFn
ZVRyYWNrZXIoKQoreworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIobmV3IFJl
Y3RNYXApOworICAgIG1fbmV4dFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIobmV3IFJlY3RNYXApOwor
fQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShj
b25zdCBXVEY6OlZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRh
cmdldFN1cmZhY2VMYXllcklELCBDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcikK
K3sKKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlICJkYW1hZ2UgcmVj
dCIgb2YgYSB0YXJnZXQgc3VyZmFjZS4gVGhlIGRhbWFnZQorICAgIC8vIHJlY3QgaXMgdGhlIHJl
Z2lvbiBvZiB0aGUgc3VyZmFjZSB0aGF0IG1heSBoYXZlIGNoYW5nZWQgYW5kIG5lZWRzIHRvIGJl
IHJlZHJhd24uCisgICAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzY2lzc29yIHdoYXQgaXMgYWN0
dWFsbHkgZHJhd24sIHRvIHNhdmUgR1BVIGNvbXB1dGF0aW9uIGFuZAorICAgIC8vIGJhbmR3aWR0
aC4KKyAgICAvLworICAgIC8vIFRoZSBzdXJmYWNlJ3MgZGFtYWdlIHJlY3QgaXMgY29tcHV0ZWQg
YXMgdGhlIHVuaW9uIG9mIGFsbCBwb3NzaWJsZSBjaGFuZ2VzIHRoYXQKKyAgICAvLyBoYXZlIGhh
cHBlbmVkIHRvIHRoZSBzdXJmYWNlIHNpbmNlIHRoZSBsYXN0IGZyYW1lIHdhcyBkcmF3bi4gVGhp
cyBpbmNsdWRlczoKKyAgICAvLyAgIC0gYW55IGNoYW5nZXMgZm9yIGV4aXN0aW5nIGxheWVycy9z
dXJmYWNlcyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHRhcmdldCBzdXJmYWNlCisgICAgLy8gICAt
IGxheWVycy9zdXJmYWNlcyB0aGF0IGV4aXN0ZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLCBidXQg
bm8gbG9uZ2VyIGV4aXN0LgorICAgIC8vCisgICAgLy8gVGhlIGJhc2ljIGFsZ29yaXRobSBmb3Ig
Y29tcHV0aW5nIHRoZSBkYW1hZ2UgcmVnaW9uIGlzIGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAv
LyAgICAgICAvLyAxLiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgY2hhbmdlcyBpbiBhY3RpdmUv
bmV3IGxheWVycworICAgIC8vICAgICAgIGZvciBlYWNoIGxheWVyIGluIHRoZSBsYXllckxpc3Q6
CisgICAgLy8gICAgICAgICAgIGlmIHRoZSBsYXllciBpcyBhY3R1YWxseSBhIHJlbmRlclN1cmZh
Y2U6CisgICAgLy8gICAgICAgICAgICAgICBhZGQgdGhlIHN1cmZhY2UncyBkYW1hZ2UgdG8gb3Vy
IHRhcmdldCBzdXJmYWNlLgorICAgIC8vICAgICAgICAgICBlbHNlCisgICAgLy8gICAgICAgICAg
ICAgICBhZGQgdGhlIGxheWVyJ3MgZGFtYWdlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAv
LworICAgIC8vICAgICAgIC8vIDIuIGNvbXB1dGUgZGFtYWdlIGNhdXNlZCBieSB0aGUgdGFyZ2V0
IHN1cmZhY2UncyBtYXNrLCBpZiBpdCBleGlzdHMuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAz
LiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxv
bmdlciBleGlzdAorICAgIC8vICAgICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8v
ICAgICAgICAgICBhZGQgdGhlIG9sZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0
IHN1cmZhY2UgZGFtYWdlLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gNC4gY29tYmluZSBhbGwg
cGFydGlhbCBkYW1hZ2UgcmVjdHMgdG8gZ2V0IHRoZSBmdWxsIGRhbWFnZSByZWN0LgorICAgIC8v
CisgICAgLy8gQWRkaXRpb25hbCBpbXBvcnRhbnQgcG9pbnRzOgorICAgIC8vCisgICAgLy8gLSBU
aGlzIGFsZ29yaXRobSBpcyBpbXBsaWNpdGx5IHJlY3Vyc2l2ZTsgaXQgYXNzdW1lcyB0aGF0IGRl
c2NlbmRhbnQgc3VyZmFjZXMgaGF2ZQorICAgIC8vICAgYWxyZWFkeSBjb21wdXRlZCB0aGVpciBk
YW1hZ2UuCisgICAgLy8KKyAgICAvLyAtIENoYW5nZXMgdG8gbGF5ZXJzL3N1cmZhY2VzIGluZGlj
YXRlICJkYW1hZ2UiIHRvIHRoZSB0YXJnZXQgc3VyZmFjZTsgSWYgYSBsYXllciBpcworICAgIC8v
ICAgbm90IGNoYW5nZWQsIGl0IGRvZXMgTk9UIG1lYW4gdGhhdCB0aGUgbGF5ZXIgY2FuIHNraXAg
ZHJhd2luZy4gQWxsIGxheWVycyB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBkYW1hZ2VkIHJl
Z2lvbiBzdGlsbCBuZWVkIHRvIGJlIGRyYXduLiBGb3IgZXhhbXBsZSwgaWYgYSBsYXllcgorICAg
IC8vICAgY2hhbmdlZCBpdHMgb3BhY2l0eSwgdGhlbiBsYXllcnMgdW5kZXJuZWF0aCBtdXN0IGJl
IHJlLWRyYXduIGFzIHdlbGwsIGV2ZW4gaWYKKyAgICAvLyAgIHRoZXkgZGlkIG5vdCBjaGFuZ2Uu
CisgICAgLy8KKyAgICAvLyAtIElmIGEgbGF5ZXIvc3VyZmFjZSBwcm9wZXJ0eSBjaGFuZ2VkLCB0
aGUgb2xkIGJvdW5kcyBhbmQgbmV3IGJvdW5kcyBtYXkgb3ZlcmxhcC4uLgorICAgIC8vICAgaS5l
LiBzb21lIG9mIHRoZSBleHBvc2VkIHJlZ2lvbiBtYXkgbm90IGFjdHVhbGx5IGJlIGV4cG9zaW5n
IGFueXRoaW5nLiBCdXQgdGhpcworICAgIC8vICAgZG9lcyBub3QgYXJ0aWZpY2lhbGx5IGluZmxh
dGUgdGhlIGRhbWFnZSByZWN0LiBJZiB0aGUgbGF5ZXIgY2hhbmdlZCwgaXRzIGVudGlyZQorICAg
IC8vICAgb2xkIGJvdW5kcyB3b3VsZCBhbHdheXMgbmVlZCB0byBiZSByZWRyYXduLCByZWdhcmRs
ZXNzIG9mIGhvdyBtdWNoIGl0IG92ZXJsYXBzCisgICAgLy8gICB3aXRoIHRoZSBsYXllcidzIG5l
dyBib3VuZHMsIHdoaWNoIGFsc28gbmVlZCB0byBiZSBlbnRpcmVseSByZWRyYXduLgorICAgIC8v
CisgICAgLy8gLSBTZWUgY29tbWVudHMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc2VlIHdo
YXQgZXhhY3RseSBpcyBjb25zaWRlcmVkIGEgImNoYW5nZSIKKyAgICAvLyAgIGluIGEgbGF5ZXIv
c3VyZmFjZS4KKyAgICAvLworICAgIC8vIC0gVG8gY29ycmVjdGx5IG1hbmFnZSBleHBvc2VkIHJl
Y3RzLCB0d28gUmVjdE1hcHMgYXJlIG1haW50YWluZWQ6CisgICAgLy8KKyAgICAvLyAgICAgIDEu
IFRoZSAiY3VycmVudCIgbWFwIGNvbnRhaW5zIGFsbCB0aGUgbGF5ZXIgYm91bmRzIHRoYXQgY29u
dHJpYnV0ZWQgdG8gdGhlCisgICAgLy8gICAgICAgICBwcmV2aW91cyBmcmFtZSAoZXZlbiBvdXRz
aWRlIHRoZSBwcmV2aW91cyBkYW1hZ2VkIGFyZWEpLiBJZiBhIGxheWVyIGNoYW5nZXMKKyAgICAv
LyAgICAgICAgIG9yIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRob3NlIHJlZ2lvbnMgYXJlIHRo
ZW4gZXhwb3NlZCBhbmQgZGFtYWdlIHRoZQorICAgIC8vICAgICAgICAgdGFyZ2V0IHN1cmZhY2Uu
IEFzIHRoZSBhbGdvcml0aG0gcHJvZ3Jlc3NlcywgZW50cmllcyBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZQorICAgIC8vICAgICAgICAgbWFwIHVudGlsIGl0IGhhcyBvbmx5IGxlZnRvdmVyIGxheWVycyB0
aGF0IG5vIGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vICAgICAgMi4gVGhlICJuZXh0IiBt
YXAgc3RhcnRzIG91dCBlbXB0eSwgYW5kIGFzIHRoZSBhbGdvcml0aG0gcHJvZ3Jlc3NlcywgZXZl
cnkKKyAgICAvLyAgICAgICAgIGxheWVyL3N1cmZhY2UgdGhhdCBjb250cmlidXRlcyB0byB0aGUg
c3VyZmFjZSBpcyBhZGRlZCB0byB0aGUgbWFwLgorICAgIC8vCisgICAgLy8gICAgICAzLiBBZnRl
ciB0aGUgZGFtYWdlIHJlY3QgaXMgY29tcHV0ZWQsIHRoZSB0d28gbWFwcyBhcmUgc3dhcHBlZCwg
c28gdGhhdCB0aGUKKyAgICAvLyAgICAgICAgIGRhbWFnZSB0cmFja2VyIGlzIHJlYWR5IGZvciB0
aGUgbmV4dCBmcmFtZS4KKyAgICAvLworCisgICAgLy8gSWYgdGhlIHRhcmdldCBzdXJmYWNlIGFs
cmVhZHkga25vd3MgaXRzIGVudGlyZSByZWdpb24gaXMgZGFtYWdlZCwgd2UgY2FuIHJldHVybiBl
YXJseS4KKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZ28gYXdheSwgb3Igd2lsbCBiZSBjbGVh
bmVyLCBhZnRlciByZWZhY3RvcmluZyBpbnRvIFJlbmRlclBhc3MvUmVuZGVyU2NoZWR1bGUuCisg
ICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0WzBdLmdldCgpOworICAgIGlmIChsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21E
ZXNjZW5kYW50KCkpIHsKKyAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IEZsb2F0UmVjdChs
YXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29t
cHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMobGF5ZXJMaXN0LCB0YXJnZXRTdXJmYWNlTGF5ZXJJ
RCk7CisgICAgRmxvYXRSZWN0IGRhbWFnZUZyb21TdXJmYWNlTWFzayA9IGNvbXB1dGVEYW1hZ2VG
cm9tU3VyZmFjZU1hc2sodGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7CisgICAgRmxvYXRSZWN0IGRh
bWFnZUZyb21MZWZ0b3ZlclJlY3RzID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7
CisKKyAgICBtX2N1cnJlbnREYW1hZ2VSZWN0ID0gZGFtYWdlRnJvbUFjdGl2ZUxheWVyczsKKyAg
ICBtX2N1cnJlbnREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21TdXJmYWNlTWFz
ayk7CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tTGVm
dG92ZXJSZWN0cyk7CisKKyAgICAvLyBUaGUgbmV4dCBoaXN0b3J5IG1hcCBiZWNvbWVzIHRoZSBj
dXJyZW50IG1hcCBmb3IgdGhlIG5leHQgZnJhbWUuCisgICAgc3dhcChtX2N1cnJlbnRSZWN0SGlz
dG9yeSwgbV9uZXh0UmVjdEhpc3RvcnkpOworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2Vy
OjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShpbnQgbGF5ZXJJRCkKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGV4aXN0cyBtYWlubHkgZm9yIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorICAg
IC8vIHRha2UoKSB3aWxsIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgbWFwLCBvciBpZiBub3Qg
Zm91bmQsIHJldHVybiBhIGRlZmF1bHQgKGVtcHR5KSByZWN0LgorICAgIHJldHVybiBtX2N1cnJl
bnRSZWN0SGlzdG9yeS0+dGFrZShsYXllcklEKTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6
OnNhdmVSZWN0Rm9yTmV4dEZyYW1lKGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFNwYWNlUmVjdCkKK3sKKyAgICAvLyBUaGlzIGxheWVyIHNob3VsZCBub3QgeWV0IGV4aXN0IGlu
IG5leHQgZnJhbWUncyBoaXN0b3J5LgorICAgIEFTU0VSVChtX25leHRSZWN0SGlzdG9yeS0+Zmlu
ZChsYXllcklEKSA9PSBtX25leHRSZWN0SGlzdG9yeS0+ZW5kKCkpOworICAgIG1fbmV4dFJlY3RI
aXN0b3J5LT5zZXQobGF5ZXJJRCwgdGFyZ2V0U3BhY2VSZWN0KTsKK30KKworRmxvYXRSZWN0IEND
RGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgV1RGOjpW
ZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNl
TGF5ZXJJRCkKK3sKKyAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5z
aXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXll
ckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVy
LCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkpCisgICAgICAgICAgICBleHRlbmREYW1hZ2VGb3JSZW5k
ZXJTdXJmYWNlKGxheWVyLCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgIH0KKworICAgIHJl
dHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjpjb21wdXRl
RGFtYWdlRnJvbVN1cmZhY2VNYXNrKENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNlTWFza0xheWVy
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBpZiAo
IXRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCisgICAgICAgIHJldHVybiBkYW1hZ2VSZWN0OworCisg
ICAgLy8gQ3VycmVudGx5LCBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIHRoZSBtYXNrLCB3ZSBj
aG9vc2UgdG8gZGFtYWdlIHRoZSBlbnRpcmUKKyAgICAvLyBzdXJmYWNlLiBUaGlzIGNvdWxkIHBv
dGVudGlhbGx5IGJlIG9wdGltaXplZCBsYXRlciwgYnV0IGl0IGlzIG5vdCBleHBlY3RlZCB0byBi
ZSBhCisgICAgLy8gY29tbW9uIGNhc2UuCisgICAgaWYgKHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgfHwgIXRhcmdldFN1cmZhY2VNYXNrTGF5ZXItPnVwZGF0
ZVJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBGbG9hdFNpemUodGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+Ym91bmRzKCkp
KTsKKworICAgIHJldHVybiBkYW1hZ2VSZWN0OworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFj
a2VyOjpjb21wdXRlRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKQoreworICAgIC8vIEFmdGVyIGNv
bXB1dGluZyBkYW1hZ2UgZm9yIGFsbCBhY3RpdmUgbGF5ZXJzLCBhbnkgbGVmdG92ZXIgaXRlbXMg
aW4gdGhlIGN1cnJlbnQKKyAgICAvLyByZWN0IGhpc3RvcnkgY29ycmVzcG9uZCB0byBsYXllcnMv
c3VyZmFjZXMgdGhhdCBubyBsb25nZXIgZXhpc3QuIFNvLCB0aGVzZSByZWdpb25zCisgICAgLy8g
YXJlIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKworICAgIEZsb2F0UmVjdCBk
YW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RIaXN0
b3J5LT5lbmQoKTsgKytpdCkKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsK
KworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5LT5jbGVhcigpOworCisgICAgcmV0dXJuIGRhbWFn
ZVJlY3Q7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHdheXMgdGhhdCBhIGxheWVyIGNhbiBkYW1hZ2UgYSByZWdpb24gb2Yg
dGhlIHRhcmdldCBzdXJmYWNlOgorICAgIC8vICAgMS4gUHJvcGVydHkgY2hhbmdlIChlLmcuIG9w
YWNpdHksIHBvc2l0aW9uLCB0cmFuc2Zvcm1zKToKKyAgICAvLyAgICAgICAgLSB0aGUgZW50aXJl
IHJlZ2lvbiBvZiB0aGUgbGF5ZXIgaXRzZWxmIGRhbWFnZXMgdGhlIHN1cmZhY2UuCisgICAgLy8g
ICAgICAgIC0gdGhlIG9sZCBsYXllciByZWdpb24gYWxzbyBkYW1hZ2VzIHRoZSBzdXJmYWNlLCBi
ZWNhdXNlIHRoaXMgcmVnaW9uIGlzIG5vdyBleHBvc2VkLgorICAgIC8vICAgICAgICAtIG5vdGUg
dGhhdCBpbiBtYW55IGNhc2VzIHRoZSBvbGQgYW5kIG5ldyBsYXllciByZWN0cyBtYXkgb3Zlcmxh
cCwgd2hpY2ggaXMgZmluZS4KKyAgICAvLworICAgIC8vICAgMi4gUmVwYWludC91cGRhdGU6IElm
IGEgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZCwgdGhhdAor
ICAgIC8vICAgICAgcmVnaW9uIGRhbWFnZXMgdGhlIHN1cmZhY2UuCisgICAgLy8KKyAgICAvLyBQ
cm9wZXJ0eSBjaGFuZ2VzIHRha2UgcHJpb3JpdHkgb3ZlciB1cGRhdGUgcmVjdHMuCisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBvcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpOworICAgIG9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbGF5ZXItPmJvdW5k
cygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIDApOworCisgICAg
RmxvYXRSZWN0IG9sZExheWVyUmVjdCA9IHJlbW92ZVJlY3RGcm9tQ3VycmVudEZyYW1lKGxheWVy
LT5pZCgpKTsKKworICAgIEZsb2F0UmVjdCBsYXllclJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2lu
VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJv
dW5kcygpKSk7CisgICAgc2F2ZVJlY3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIGxheWVyUmVj
dEluVGFyZ2V0U3BhY2UpOworCisgICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgp
KSB7CisgICAgICAgIC8vIElmIGEgbGF5ZXIgaGFzIGNoYW5nZWQsIHRoZW4gaXRzIGVudGlyZSBs
YXllciByZWN0IGFmZmVjdHMgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICB0YXJnZXREYW1h
Z2VSZWN0LnVuaXRlSWZOb25aZXJvKGxheWVyUmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAg
IC8vIFRoZSBsYXllcidzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRhcmdldCBz
dXJmYWNlLCB0b28uCisgICAgICAgIC8vIE5vdGUgb2xkTGF5ZXJSZWN0IGlzIGFscmVhZHkgaW4g
dGFyZ2V0IHNwYWNlLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKG9s
ZExheWVyUmVjdCk7CisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVwZGF0ZVJlY3QoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRpZXMgaGF2ZW50IGNoYW5nZWQs
IHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5CisgICAgICAgIC8vIGFmZmVjdGVk
IGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3VsZCBiZSBlbXB0eS4KKyAgICAg
ICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNmb3JtLm1h
cFJlY3QobGF5ZXItPnVwZGF0ZVJlY3QoKSk7CisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5p
dGVJZk5vblplcm8odXBkYXRlUmVjdEluVGFyZ2V0U3BhY2UpOworICAgIH0KK30KKwordm9pZCBD
Q0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwq
IGxheWVyLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpCit7CisgICAgLy8gVGhlcmUgYXJl
IHR3byB3YXlzIGEgImRlc2NlbmRhbnQgc3VyZmFjZSIgY2FuIGRhbWFnZSByZWdpb25zIG9mIHRo
ZSAidGFyZ2V0IHN1cmZhY2UiOgorICAgIC8vICAgMS4gUHJvcGVydHkgY2hhbmdlOgorICAgIC8v
ICAgICAgICAtIGEgc3VyZmFjZSdzIGdlb21ldHJ5IGNhbiBjaGFuZ2UgYmVjYXVzZSBvZgorICAg
IC8vICAgICAgICAgICAgLSBjaGFuZ2VzIHRvIGRlc2NlbmRhbnRzIChpLmUuIHRoZSBzdWJ0cmVl
KSB0aGF0IGFmZmVjdCB0aGUgc3VyZmFjZSdzIGNvbnRlbnQgcmVjdAorICAgIC8vICAgICAgICAg
ICAgLSBjaGFuZ2VzIHRvIGFuY2VzdG9yIGxheWVycyB0aGF0IHByb3BhZ2F0ZSB0aGVpciBwcm9w
ZXJ0eSBjaGFuZ2VzIHRvIHRoZWlyIGVudGlyZSBzdWJ0cmVlLgorICAgIC8vICAgICAgICAtIGp1
c3QgbGlrZSBsYXllcnMsIGJvdGggdGhlIG9sZCBzdXJmYWNlIHJlY3QgYW5kIG5ldyBzdXJmYWNl
IHJlY3Qgd2lsbAorICAgIC8vICAgICAgICAgIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UgaW4g
dGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8gICAyLiBEYW1hZ2UgcmVjdDogVGhpcyBzdXJmYWNl
IG1heSBoYXZlIGJlZW4gZGFtYWdlZCBieSBpdHMgb3duIGxheWVyTGlzdCBhcyB3ZWxsLCBhbmQg
dGhhdCBkYW1hZ2UKKyAgICAvLyAgICAgIHNob3VsZCBwcm9wYWdhdGUgdG8gdGhlIHRhcmdldCBz
dXJmYWNlLgorICAgIC8vCisKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBs
YXllci0+cmVuZGVyU3VyZmFjZSgpOworCisgICAgRmxvYXRSZWN0IG9sZFN1cmZhY2VSZWN0ID0g
cmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0
IHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVu
dFJlY3QoKTsgLy8gYWxyZWFkeSBpbmNsdWRlcyByZXBsaWNhIGlmIGl0IGV4aXN0cy4KKyAgICBz
YXZlUmVjdEZvck5leHRGcmFtZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNl
KTsKKworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlOworICAgIGlmIChyZW5k
ZXJTdXJmYWNlLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gVGhlIGVu
dGlyZSBzdXJmYWNlIGNvbnRyaWJ1dGVzIGRhbWFnZS4KKyAgICAgICAgZGFtYWdlUmVjdEluTG9j
YWxTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhl
IHN1cmZhY2UncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFj
ZSwgdG9vLgorICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKG9sZFN1cmZh
Y2VSZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPbmx5IHRoZSBzdXJmYWNlJ3MgZGFt
YWdlUmVjdCB3aWxsIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAgIGRhbWFnZVJl
Y3RJbkxvY2FsU3BhY2UgPSByZW5kZXJTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGRhbWFnZSwgdHJhbnNm
b3JtIGl0IHRvIHRhcmdldCBzcGFjZSwgYW5kIHBvc3NpYmx5IGNvbnRyaWJ1dGUgaXRzIHJlZmxl
Y3Rpb24gaWYgbmVlZGVkLgorICAgIGlmICghZGFtYWdlUmVjdEluTG9jYWxTcGFjZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9y
bSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOworICAgICAgICBGbG9hdFJlY3Qg
ZGFtYWdlUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VS
ZWN0SW5Mb2NhbFNwYWNlKTsKKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVy
byhkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgeworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdp
blRyYW5zZm9ybSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpOwor
ICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubXVsdGlw
bHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICByZXBs
aWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC1sYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7
CisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKHJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFtYWdlIG9uIHRoZSByZXBsaWNhJ3MgbWFz
aywgdGhlbiB0aGUgdGFyZ2V0IHN1cmZhY2UgcmVjZWl2ZXMgdGhhdCBkYW1hZ2UgYXMgd2VsbC4K
KyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
bWFza0xheWVyKCkpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBs
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOworCisgICAgICAgIEZsb2F0UmVjdCBv
bGRSZXBsaWNhTWFza1JlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShyZXBsaWNhTWFz
a0xheWVyLT5pZCgpKTsKKworICAgICAgICAvLyBTaGlmdGluZyB0aGUgcmVjdCBieSBoYWxmIHdp
ZHRoIGFuZCBoYWxmIGhlaWdodCBpcyB0aGUgZXF1aXZhbGVudCBvZiBhcHBseWluZyB0aGUgInJl
cGxpY2Egb3JpZ2luIHRyYW5zZm9ybSIsIGluc3RlYWQgb2YKKyAgICAgICAgLy8gdGhlIHJlcGxp
Y2FEcmF3VHJhbnNmb3JtLiBEb2luZyB0aGlzLCBob3dldmVyLCBzYXZlcyBzZXZlcmFsIG1hdHJp
eCBtdWx0aXBsaWNhdGlvbnMuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0o
KTsKKyAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueSgpLCAwKTsKKyAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShs
YXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKKyAgICAgICAgcmVwbGljYU9yaWdp
blRyYW5zZm9ybS50cmFuc2xhdGUzZCgtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigp
LngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworICAgICAg
ICBGbG9hdFJlY3QgcmVwbGljYU1hc2tMYXllclJlY3QgPSByZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
Lm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRTaXplKHJlcGxpY2FN
YXNrTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIHJlcGxpY2FNYXNrTGF5ZXItPmJvdW5kcygpLmhl
aWdodCgpKSkpOworICAgICAgICBzYXZlUmVjdEZvck5leHRGcmFtZShyZXBsaWNhTWFza0xheWVy
LT5pZCgpLCByZXBsaWNhTWFza0xheWVyUmVjdCk7CisKKyAgICAgICAgLy8gSW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24sIGEgY2hhbmdlIGluIHRoZSByZXBsaWNhIG1hc2sgZGFtYWdlcyB0
aGUgZW50aXJlIHJlcGxpY2EgcmVnaW9uLgorICAgICAgICBpZiAocmVwbGljYU1hc2tMYXllci0+
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSB8fCAhcmVwbGljYU1hc2tMYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8o
cmVwbGljYU1hc2tMYXllclJlY3QpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFj
a2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rh
bWFnZVRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGQzMGYyOTRhY2M4NDA4N2EyNDYyMDYxYzg2MDVi
ZmQ0MzMyZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NEYW1hZ2VUcmFja2VyX2gKKyNkZWZpbmUgQ0NEYW1hZ2VUcmFja2VyX2gK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5
ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworCisvLyBDb21wdXRlcyB0aGUgcmVnaW9u
IHdoZXJlIHBpeGVscyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQgb24gYSBSZW5kZXJTdXJmYWNlLiBU
aGlzIHJlZ2lvbiBpcyB1c2VkCisvLyB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJhd24g
dG8gdGhlIHNjcmVlbiB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQgYmFuZHdpZHRoLgorY2xh
c3MgQ0NEYW1hZ2VUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV1RGOjpQYXNzT3duUHRy
PENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+Q0NEYW1hZ2VUcmFja2Vy
KCkgeyB9CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoY29uc3QgV1RG
OjpWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJm
YWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIGNv
bnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJldHVybiBtX2N1cnJlbnREYW1h
Z2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NEYW1hZ2VUcmFja2VyKCk7CisKKyAgICBGbG9h
dFJlY3QgY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgV1RGOjpWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7
CisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2soQ0NMYXllckltcGwq
IHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJv
bUxlZnRvdmVyUmVjdHMoKTsKKworICAgIEZsb2F0UmVjdCByZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZShpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5
ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRTcGFjZVJlY3QpOworCisgICAgLy8gVGhlc2Ug
aGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGluIGNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZl
TGF5ZXJzKCkuCisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVySW1wbCosIEZs
b2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JSZW5k
ZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsKKwor
ICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBoYXNodGFibGVz
IG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgorICAgIC8vIFRoZSAiY3VycmVudCIgbWFwIGlzIHVz
ZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWxl
CisgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVyIHJlY3RzIHRo
YXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
RmxvYXRSZWN0PiBSZWN0TWFwOworICAgIE93blB0cjxSZWN0TWFwPiBtX2N1cnJlbnRSZWN0SGlz
dG9yeTsKKyAgICBPd25QdHI8UmVjdE1hcD4gbV9uZXh0UmVjdEhpc3Rvcnk7CisKKyAgICBGbG9h
dFJlY3QgbV9jdXJyZW50RGFtYWdlUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIENDRGFtYWdlVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5k
ZXggMTJkMjJlMmEyNDExMjJjYjU3Yjk5ZWRiZGY0NjNmZjljYjI4ODI0ZS4uYWYwNDJlNTY2OWI0
NjJmYjZjMDlkZTZmYzNkNGNmNGI2ZDg0ZTkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApA
QCAtMjM5LDE1ICsyMzksMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6bm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yRGVzY2VuZGFudHMoKQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5ub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnJlc2V0
UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQordm9pZCBDQ0xheWVySW1wbDo6cmVzZXRB
bGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKQogewogICAgIG1fbGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQgPSBmYWxzZTsKKyAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAogICAgIGlmICht
X3JlbmRlclN1cmZhY2UpCiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+cmVzZXRQcm9wZXJ0eUNo
YW5nZWRGbGFnKCk7CiAKKyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xheWVy
LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworCisgICAgaWYgKG1fcmVwbGlj
YUxheWVyKQorICAgICAgICBtX3JlcGxpY2FMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0Zv
clN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgdGhlIHJlcGxpY2EgbWFzaywgaWYgaXQgZXhpc3Rz
LgorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQot
ICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVl
KCk7CisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0
cmVlKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBi
b3VuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZjZjI2
MjU3ZmQ5N2Q0YmQ4MjQxLi5lMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODViY2NkY2Y4MDlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3BlcnR5
Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAgICB2
b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMg
cHJvcGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9pZCBy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ0NMYXllckltcGwoaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IDZjOGRhNDYxYWNkMTc0MTBhMTAyNWU4OTMyNTRlZGFjMDExNzNlZjYuLmFiZGYxNjJkMDNh
MDlmYjJkMjA5MmFlOTQ5YWVlOTA1Y2E3ZWFlZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcApAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAKICAg
ICAgICAgICAgIC8vIExheWVycyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdpbGwg
YmUgcGFpbnRlZCB3aGVuIHRoZSByZW5kZXIKICAgICAgICAgICAgIC8vIHN1cmZhY2UncyBsaXN0
IGlzIHByb2Nlc3NlZC4KLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgIGlm
IChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0
PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKQEAgLTQxNSw3ICs0MTUsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZQogICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CiAgICAgICAgICAgICBMYXllckNocm9t
aXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlm
IChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVu
ZGVyU3VyZmFjZSkKKworICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVu
ZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRl
clN1cmZhY2VMYXllci0+aWQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA0ODdkOGY0YmU2YmNkNjQ0OGRjMDY2
MWQ1OTY3NWVmZDQ2YTA2ZjdkLi41NmQyYjZjNDE4OWM3NjllMDRmNGFlYzdkYzA4YmYzMWQxYjIx
MTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzUsNiArNzUsNyBAQCBzdHJ1
Y3QgQ0NTZXR0aW5ncyB7CiAgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFs
c2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAgICAgLCBz
aG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisgICAgICAgICAgICAsIHVzZURhbWFnZVRyYWNr
ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHJlZnJlc2hSYXRlKDApIHsgfQogCiAgICAgYm9vbCBh
Y2NlbGVyYXRlUGFpbnRpbmc7CkBAIC04Myw2ICs4NCw3IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsK
ICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQ7CiAgICAgYm9vbCBzaG93RlBTQ291bnRl
cjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKKyAgICBib29sIHVzZURhbWFnZVRy
YWNrZXI7CiAgICAgZG91YmxlIHJlZnJlc2hSYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaAppbmRleCA4YTU3YmZlOTU5MzczNDI4YjZhODliOWE4YTJjODNm
Nzk4YmY1OWQxLi4yZTBjYmNmMmM1ODVlODIxNWQyODZkZWU5YjYxZTUzNTE4MGNmZmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApAQCAtNDUsNiArNDUsOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5
ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290
TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUp
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJT
dXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxh
eWVySUQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewogICAgICAgICBpbnQgbGF5
ZXJJZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAgLTgzLDYgKzg1LDIwIEBAIElu
dFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KExh
eWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIHZpc2libGVMYXllclJlY3Q7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK2Jvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpbnQgdGFyZ2V0
U3VyZmFjZUxheWVySUQpCit7CisgICAgLy8gQSBsYXllciB3aWxsIGVpdGhlciBjb250cmlidXRl
IGl0cyBvd24gY29udGVudCwgb3IgaXRzIHJlbmRlciBzdXJmYWNlJ3MgY29udGVudCwgdG8KKyAg
ICAvLyB0aGUgdGFyZ2V0IHN1cmZhY2UuIFRoZSBsYXllciBjb250cmlidXRlcyBpdHMgc3VyZmFj
ZSdzIGNvbnRlbnQgd2hlbiBib3RoIHRoZQorICAgIC8vIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAg
ICAvLyAgKDEpIFRoZSBsYXllciBhY3R1YWxseSBoYXMgYSByZW5kZXJTdXJmYWNlLCBhbmQKKyAg
ICAvLyAgKDIpIFRoZSBsYXllcidzIHJlbmRlclN1cmZhY2UgaXMgbm90IHRoZSBzYW1lIGFzIHRo
ZSB0YXJnZXRTdXJmYWNlLgorICAgIC8vCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbGF5ZXIganVz
dCBjb250cmlidXRlcyBpdHNlbGYgdG8gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgcmV0dXJu
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFjZUxh
eWVySUQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBkZDFhYjYzM2Y5YjA3ZDA2NWUxMTQ2NjM1OWVjMWQz
NTU1Yjk2ZDY2Li5jZWI3NjY3OWNmNmQ1ZWY2Yjc5YTIwN2JiZDg3MTgxNmRmYmE1ZDhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIApAQCAtNDYsNiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQo
ZmFsc2UpCiAgICAgLCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2VyID0g
Q0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKTsKIH0KIAogQ0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5k
ZXJTdXJmYWNlKCkKQEAgLTIzNiw2ICsyMzgsMTAgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmR1
bXBTdXJmYWNlKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8IG1f
ZHJhd1RyYW5zZm9ybS5tMjEoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjIoKSA8PCAi
LCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjMoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5t
MjQoKSA8PCAiICAvLyAgIjsKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMxKCkgPDwgIiwg
IiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMz
KCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTM0KCkgPDwgIiAgLy8gICI7CiAgICAgdHMg
PDwgbV9kcmF3VHJhbnNmb3JtLm00MSgpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00Migp
IDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00MygpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNm
b3JtLm00NCgpIDw8ICJcbiI7CisKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzEpOworICAg
IHRzIDw8ICJkYW1hZ2VSZWN0IGlzIHBvcygiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERh
bWFnZVJlY3QoKS54KCkgPDwgIiwiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJl
Y3QoKS55KCkgPDwgIiksICI7CisgICAgdHMgPDwgInNpemUoIiA8PCBtX2RhbWFnZVRyYWNrZXIt
PmN1cnJlbnREYW1hZ2VSZWN0KCkud2lkdGgoKSA8PCAiLCIgPDwgbV9kYW1hZ2VUcmFja2VyLT5j
dXJyZW50RGFtYWdlUmVjdCgpLmhlaWdodCgpIDw8ICIpXG4iOwogfQogCiBpbnQgQ0NSZW5kZXJT
dXJmYWNlOjpvd25pbmdMYXllcklkKCkgY29uc3QKQEAgLTI3NSw1ICsyODEsMTAgQEAgYm9vbCBD
Q1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdAogICAgIHJldHVy
biBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQgfHwgbV9vd25pbmdMYXllci0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKTsKIH0KIAorYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNo
YW5nZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2VQ
cm9wZXJ0eUNoYW5nZWQgJiYgIW1fb3duaW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCk7
Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDRiZDRhZjg1ODE5NDI2OGNmMGM4NWQzYTZhMGQyZDQw
OWUwZWJjZDguLmQwZTM1YTE3ODY1NDM3ZWRkMmM4NzJkZmE2MjJjMzZiMGQ0M2FkYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NMYXllckltcGw7CiBj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKQEAgLTEw
MCw2ICsxMDEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxh
ZygpIHsgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29sIHN1cmZh
Y2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdDsKKyAgICBib29sIHN1cmZhY2VQcm9wZXJ0eUNoYW5n
ZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdDsKKworICAgIENDRGFtYWdlVHJhY2tlciogZGFt
YWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQogCiBw
cml2YXRlOgogICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDTGF5
ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKQEAgLTEyMCw2ICsxMjQsMTEg
QEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsK
ICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiBtX2xheWVyTGlzdDsKKworICAgIE93blB0cjxDQ0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdlVHJh
Y2tlcjsKKworICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMg
ZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgorICAgIEZsb2F0UmVjdCBtX2RhbWFn
ZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlMDE3MWFj
ZDEzYTFiOWNjMTlkYWE1MWJiZDNmMjNhNzdmNmQ4NjZjLi4xMzY5M2QzYWNjNWMxYTgwMjY0OWI2
MmMzMGU4YjM5NzdiYTVkOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU0
LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAg
ICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29j
aWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLApAQCAtNjEsNiAr
NjIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NSZW5k
ZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNr
ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2Vy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E1NjM4ZDMwYjBhNDE5M2ZmNWJkMjg5YjMwNDY3ZjVlOTlm
OTg2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NE
YW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgorCisj
aW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNw
YWNlIHsKKwordm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKworICAgIC8vIFNhbml0eSBjaGVjazogVGhlIHRlc3QgaXRzZWxmIHNob3VsZCBj
cmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIgc3VyZmFjZSwgc28KKyAgICAvLyAgICAgICAg
ICAgICAgIHRoYXQgdGhlIHN1cmZhY2UgKGFuZCBpdHMgZGFtYWdlIHRyYWNrZXIpIGNhbiBwZXJz
aXN0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vICAgICAgICAgICAgICAgY2FsbHMgdG8gdGhpcyBm
dW5jdGlvbi4KKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFT
U0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisKKyAgICByb290LT5y
ZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocm9vdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxh
eWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKK30KKwordm9pZCBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQoreworICAgIC8vIFRoaXMgZW11bGF0ZXMgb25s
eSB0aGUgc3RlcHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGVzdGluZyB0aGUgZGFtYWdlIHRyYWNr
ZXI6CisgICAgLy8gICAxLiBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzZXMgYW5kIGxheWVybGlz
dHMKKyAgICAvLyAgIDIuIHVwZGF0aW5nIGFsbCBkYW1hZ2UgdHJhY2tlcnMgaW4gdGhlIGNvcnJl
Y3Qgb3JkZXIKKyAgICAvLyAgIDMuIHJlc2V0dGluZyBhbGwgdXBkYXRlUmVjdHMgYW5kIHByb3Bl
cnR5Q2hhbmdlZCBmbGFncyBmb3IgYWxsIGxheWVycyBhbmQgc3VyZmFjZXMuCisKKyAgICBWZWN0
b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKworICAgIC8vIEl0ZXJhdGUgYmFjay10by1mcm9udCwgc28gdGhhdCBk
YW1hZ2UgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZnJvbSBkZXNjZW5kYW50IHN1cmZhY2VzIHRvIGFu
Y2VzdG9ycy4KKyAgICBmb3IgKGludCBpID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZh
Y2UgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAg
IHRhcmdldFN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRG
cmFtZSh0YXJnZXRTdXJmYWNlLT5sYXllckxpc3QoKSwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5
ZXJJZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5tYXNrTGF5ZXIoKSk7CisgICAgfQor
CisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKK30KKworUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKwor
ICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50
U2l6ZSg1MDAsIDUwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBy
b290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoNTAwLjBmLCA1MDAuMGYp
KSk7CisKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxMDAuMGYsIDEwMC4wZikp
OworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNo
aWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgzMCwgMzApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIHJldHVybiByb290
LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMoKQoreworICAgIC8vIFRoaXMgdGVzdCB0cmVlIGhhcyB0d28gcmVuZGVy
IHN1cmZhY2VzOiBvbmUgZm9yIHRoZSByb290LCBhbmQgb25lIGZvcgorICAgIC8vIGNoaWxkMS4g
QWRkaXRpb25hbGx5LCB0aGUgcm9vdCBoYXMgYSBzZWNvbmQgY2hpbGQgbGF5ZXIsIGFuZCBjaGls
ZDEgaGFzIHR3bworICAgIC8vIGNoaWxkcmVuIG9mIGl0cyBvd24uCisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CisK
KyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJvb3QtPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMC4wZiwgNTAwLjBm
KSkpOworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMC4wZiwgMTAwLjBm
KSk7CisgICAgY2hpbGQxLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGNoaWxkMS0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQxLT5zZXRPcGFj
aXR5KDAuNWYpOyAvLyB3aXRoIGEgY2hpbGQgdGhhdCBkcmF3c0NvbnRlbnQsIHRoaXMgd2lsbCBj
YXVzZSB0aGUgbGF5ZXIgdG8gY3JlYXRlIGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKyAgICBjaGls
ZDEtPnNldERyYXdzQ29udGVudChmYWxzZSk7IC8vIHRoaXMgbGF5ZXIgZG9lcyBub3QgZHJhdywg
YnV0IGlzIGludGVuZGVkIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisKKyAgICBj
aGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTEuMGYsIDExLjBmKSk7CisgICAgY2hpbGQy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91
bmRzKEludFNpemUoMTgsIDE4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisKKyAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAuMGYsIDIwMC4w
ZikpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkp
OworICAgIGdyYW5kQ2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7CisgICAgZ3JhbmRD
aGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDE5MC4wZiwgMTkwLjBmKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5k
cyhJbnRTaXplKDYsIDgpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQxLT5hZGRD
aGlsZChncmFuZENoaWxkMik7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZh
Y2UoKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZp
cnN0IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhh
dCB3ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOwor
fQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3
b1N1cmZhY2VzKCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0
VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAgLy8gU2V0dXAgaW5jbHVkZXMgZ29pbmcgcGFz
dCB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggYWx3YXlzIGRhbWFnZXMgZXZlcnl0aGluZywgc28KKyAg
ICAvLyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwZXJmb3JtIHNwZWNpZmljIHRlc3RzLgorICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICByZXR1cm4gcm9vdC5yZWxl
YXNlKCk7Cit9CisKK2NsYXNzIENDRGFtYWdlVHJhY2tlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6
VGVzdCB7Citwcml2YXRlOgorICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBmYWtlIHRoYXQg
d2UgYXJlIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2V0SW1wbFRocmVhZDsKK307CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlD
aGVja1Rlc3RUcmVlV2l0aE9uZVN1cmZhY2UpCit7CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlIHNpbXBsZSB0ZXN0IHRyZWUgd2lsbCBhY3R1YWxseSBwcm9kdWNlIHRoZSBleHBlY3RlZCBy
ZW5kZXIKKyAgICAvLyBzdXJmYWNlcyBhbmQgbGF5ZXIgbGlzdHMuCisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsK
KworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDEsIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUSgyLCByb290
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzFdLT5pZCgpKTsKKworICAgIEZsb2F0UmVj
dCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCA1MDAuMGYsIDUwMC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHNhbml0eUNoZWNrVGVzdFRyZWVXaXRoVHdvU3VyZmFj
ZXMpCit7CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGNvbXBsZXggdGVzdCB0cmVlIHdp
bGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAgLy8gc3VyZmFjZXMg
YW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRl
QW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1h
Z2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAg
IEFTU0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIGZvciBj
aGlsZDEgb25seSBoYXMgYSBjb250ZW50UmVjdCB0aGF0IGVuY2xvc2VzIGdyYW5kQ2hpbGQxIGFu
ZCBncmFuZENoaWxkMiwgYmVjYXVzZSBjaGlsZDEgZG9lcyBub3QgZHJhdyBjb250ZW50LgorICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAuMGYsIDE5MC4wZiwgMTYuMGYsIDE4
LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJl
Y3QoMC4wZiwgMC4wZiwgNTAwLjBmLCA1MDAuMGYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hp
bGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hv
dWxkIGNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAgICAv
LworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMC4wZiwgMTEuMGYsIDEyLjBm
LCAxMy4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBEYW1hZ2UgcG9zaXRpb24gb24gdGhlIHN1cmZhY2Ugc2hvdWxkIGJlOiBwb3NpdGlvbiBv
ZiB1cGRhdGVSZWN0ICgxMCwgMTEpIHJlbGF0aXZlIHRvIHRoZSBjaGlsZCAoMTAwLCAxMDApLgor
ICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgxMTAuMGYsIDExMS4wZiwgMTIuMGYsIDEzLjBmKSwgcm9vdERhbWFnZVJl
Y3QpOworCisgICAgLy8gQ0FTRSAyOiBUaGUgc2FtZSB1cGRhdGUgcmVjdCB0d2ljZSBpbiBhIHJv
dyBzdGlsbCBwcm9kdWNlcyB0aGUgc2FtZSBkYW1hZ2UuCisgICAgLy8KKyAgICBjaGlsZC0+c2V0
VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYpKTsKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMC4wZiwgMTExLjBmLCAx
Mi4wZiwgMTMuMGYpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDM6IFNldHRpbmcg
YSBkaWZmZXJlbnQgdXBkYXRlIHJlY3Qgc2hvdWxkIGNhdXNlIGRhbWFnZSBvbiB0aGUgbmV3IHVw
ZGF0ZSByZWdpb24sIGJ1dCBubyBhZGRpdGlvbmFsIGV4cG9zZWQgb2xkIHJlZ2lvbi4KKyAgICAv
LworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMC4wZiwgMjUuMGYsIDEuMGYs
IDIuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gRGFtYWdlIHBvc2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNob3VsZCBiZTogcG9zaXRpb24gb2Yg
dXBkYXRlUmVjdCAoMjAsIDI1KSByZWxhdGl2ZSB0byB0aGUgY2hpbGQgKDEwMCwgMTAwKS4KKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgxMjAuMGYsIDEyNS4wZiwgMS4wZiwgMi4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVT
VF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdlcykK
K3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVl
V2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+
Y2hpbGRyZW4oKVswXTsKKworICAgIC8vIENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkgY2hh
bmdlZCBmbGFnIHRha2VzIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3QuCisgICAgLy8KKyAgICBj
aGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAuMGYsIDExLjBmLCAxMi4wZiwgMTMuMGYp
KTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIC0gd2Ugc2hvdWxkIG5vdCBo
YXZlIGFjY2lkZW50YWxseSBjcmVhdGVkIGEgc2VwYXJhdGUgcmVuZGVyIHN1cmZhY2UgZm9yIHRo
ZSB0cmFuc2x1Y2VudCBsYXllci4KKyAgICBBU1NFUlRfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIERhbWFnZSBzaG91bGQg
YmUgdGhlIGVudGlyZSBjaGlsZCBsYXllciBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlLgorICAgIEZs
b2F0UmVjdCBleHBlY3RlZFJlY3QgPSBGbG9hdFJlY3QoMTAwLjBmLCAxMDAuMGYsIDMwLjBmLCAz
MC4wZik7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNF
IDI6IElmIGEgbGF5ZXIgbW92ZXMgZHVlIHRvIHByb3BlcnR5IGNoYW5nZSwgaXQgZGFtYWdlcyBi
b3RoIHRoZSBuZXcgbG9jYXRpb24KKyAgICAvLyAgICAgICAgIGFuZCB0aGUgb2xkIChleHBvc2Vk
KSBsb2NhdGlvbi4gVGhlIG9sZCBsb2NhdGlvbiBpcyB0aGUgZW50aXJlIG9sZCBsYXllciwKKyAg
ICAvLyAgICAgICAgIG5vdCBqdXN0IHRoZSB1cGRhdGVSZWN0LgorCisgICAgLy8gQ3ljbGUgb25l
IGZyYW1lIG9mIG5vIGNoYW5nZSwganVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCBy
ZWN0IGlzIG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgp
KTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBj
aGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAuMGYsIDIzMC4wZikpOworICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBFeHBlY3QgZGFtYWdlIHRv
IGJlIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgcHJldmlvdXMgb25lIGFuZCB0aGUgbmV3IG9uZS4K
KyAgICBleHBlY3RlZFJlY3QudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KDIwMC4wZiwgMjMwLjBm
LCAzMC4wZiwgMzAuMGYpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0Yo
Q0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVHJhbnNmb3JtZWRMYXllcikKK3sK
KyAgICAvLyBJZiBhIGxheWVyIGlzIHRyYW5zZm9ybWVkLCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxk
IHN0aWxsIGVuY2xvc2UgdGhlIGVudGlyZQorICAgIC8vIHRyYW5zZm9ybWVkIGxheWVyLgorCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhP
bmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxk
cmVuKClbMF07CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjsKKyAgICByb3Rh
dGlvbi5yb3RhdGUoNDUpOworCisgICAgLy8gTm90ZSBjYXJlZnVsbHksIHRoZSBhbmNob3IgaXMg
YWN0dWFsbHkgcGFydCBvZiBsYXllci0+cG9zaXRpb24oKS4gQnkgc2V0dGluZyBhbmNob3IKKyAg
ICAvLyB0byAoMC41LCAwLjUpLCB0aGUgbGF5ZXIncyBwb3NpdGlvbiAoMTAwLCAxMDApIG5vdyBy
ZWZlcnMgdG8gdGhlIGNlbnRlciBvZiB0aGUKKyAgICAvLyBsYXllciwgbm90IHRoZSBjb3JuZXIu
IFRoaXMgbWVhbnMgdGhlIGxheWVyIGhhcyBhY3R1YWxseSBjaGFuZ2VkIHBvc2l0aW9uLgorICAg
IGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRo
YXQgdGhlIGxheWVyIGFjdHVhbGx5IG1vdmVkIHRvICg4NSwgODUpLCBkYW1hZ2luZyBpdHMgb2xk
IGxvY2F0aW9uIGFuZCBuZXcgbG9jYXRpb24uCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0
ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDg1LjBmLCA4NS4wZiwg
NDUuMGYsIDQ1LjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gV2l0aCB0aGUgYW5jaG9y
IG9uIHRoZSBsYXllcidzIGNlbnRlciwgbm93IHdlIGNhbiB0ZXN0IHRoZSByb3RhdGlvbiBtb3Jl
CisgICAgLy8gaW50dWl0aXZlbHksIHNpbmNlIGl0IGFwcGxpZXMgYWJvdXQgdGhlIGxheWVyJ3Mg
YW5jaG9yLgorICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0ocm90YXRpb24pOworICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTaW5jZSB0aGUgY2hpbGQgbGF5
ZXIgaXMgc3F1YXJlLCByb3RhdGlvbiBieSA0NSBkZWdyZWVzIGFib3V0IHRoZSBjZW50ZXIgc2hv
dWxkCisgICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGV4cGVjdGVkIHJlY3QgYnkgc3Fy
dCgyKSwgY2VudGVyZWQgYXJvdW5kICgxMDAsIDEwMCkuIFRoZQorICAgIC8vIG9sZCBleHBvc2Vk
IHJlZ2lvbiBzaG91bGQgYmUgZnVsbHkgY29udGFpbmVkIGluIHRoZSBuZXcgcmVnaW9uLgorICAg
IGRvdWJsZSBleHBlY3RlZFdpZHRoID0gMzAuMCAqIHNxcnQoMi4wKTsKKyAgICBkb3VibGUgZXhw
ZWN0ZWRQb3NpdGlvbiA9IDEwMC4wIC0gMC41ICogZXhwZWN0ZWRXaWR0aDsKKyAgICBGbG9hdFJl
Y3QgZXhwZWN0ZWRSZWN0KGV4cGVjdGVkUG9zaXRpb24sIGV4cGVjdGVkUG9zaXRpb24sIGV4cGVj
dGVkV2lkdGgsIGV4cGVjdGVkV2lkdGgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7Cit9CisK
K1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1v
dmluZ0xheWVyKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNl
dFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoNDAwLjBmLCAzODAuMGYpKTsKKyAgICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7
CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAvLyBDQVNFIDE6IEFk
ZGluZyBhIG5ldyBsYXllciBzaG91bGQgY2F1c2UgdGhlIGFwcHJvcHJpYXRlIGRhbWFnZS4KKyAg
ICAvLworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVG
cmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayAtIGFsbCAzIGxheWVycyBz
aG91bGQgYmUgb24gdGhlIHNhbWUgcmVuZGVyIHN1cmZhY2U7IHJlbmRlciBzdXJmYWNlcyBhcmUg
dGVzdGVkIGVsc2V3aGVyZS4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgRmxvYXRS
ZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDQwMC4wZiwgMzgwLjBmLCA2LjBmLCA4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAg
Ly8gQ0FTRSAyOiBJZiB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCwgaXRzIGVudGlyZSBvbGQgbGF5ZXIg
YmVjb21lcyBleHBvc2VkLCBub3QganVzdCB0aGUKKyAgICAvLyAgICAgICAgIGxhc3QgdXBkYXRl
IHJlY3QuCisKKyAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0IGRhbWFnZSBzbyB0aGF0
IHdlIGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9tIHRoZSBwcmV2aW91
cyBjYXNlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4sIHRlc3QgcmVtb3ZpbmcgY2hp
bGQxLgorICAgIGNoaWxkMS0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIGVtdWxhdGVEcmF3aW5n
T25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAwLjBmLCAxMDAuMGYsIDMwLjBmLCAzMC4wZiks
IHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlm
eURhbWFnZUZvck11bHRpcGxlTGF5ZXJzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBjaGlsZDIt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLjBmLCAzODAuMGYpKTsKKyAgICBjaGlsZDItPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMo
SW50U2l6ZSg2LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCB3ZSBkb24ndCB3
YW50IHRoZSBhYm92ZSB0cmVlIG1hbmlwdWxhdGlvbiB0byBiZSBjb25zaWRlcmVkIHBhcnQgb2Yg
dGhlIHNhbWUgZnJhbWUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
KworICAgIC8vIERhbWFnaW5nIHR3byBsYXllcnMgc2ltdWx0YW5lb3VzbHkgc2hvdWxkIGNhdXNl
IGNvbWJpbmVkIGRhbWFnZS4KKyAgICAvLyAtIGNoaWxkMSB1cGRhdGUgcmVjdCBpbiBzdXJmYWNl
IHNwYWNlOiBGbG9hdFJlY3QoMTAwLjBmLCAxMDAuMGYsIDEuMGYsIDIuMGYpOworICAgIC8vIC0g
Y2hpbGQyIHVwZGF0ZSByZWN0IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCg0MDAuMGYsIDM4
MC4wZiwgMy4wZiwgNC4wZik7CisgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCAxLjBmLCAyLjBmKSk7CisgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZsb2F0
UmVjdCgwLjBmLCAwLjBmLCAzLjBmLCA0LjBmKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAwLjBmLCAxMDAuMGYsIDMwMy4wZiwgMjg0
LjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5RGFtYWdlRm9yTmVzdGVkU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVu
KClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9v
dERhbWFnZVJlY3Q7CisKKyAgICAvLyBDQVNFIDE6IERhbWFnZSB0byBhIGRlc2NlbmRhbnQgc3Vy
ZmFjZSBzaG91bGQgcHJvcGFnYXRlIHByb3Blcmx5IHRvIGFuY2VzdG9yIHN1cmZhY2UuCisgICAg
Ly8KKyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
cm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3Qo
MjAwLjBmLCAyMDAuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgzMDAuMGYsIDMwMC4wZiwgNi4wZiwgOC4wZiksIHJv
b3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogU2FtZSBhcyBwcmV2aW91cyBjYXNlLCBi
dXQgd2l0aCBhZGRpdGlvbmFsIGRhbWFnZSBlbHNld2hlcmUgdGhhdCBzaG91bGQgYmUgcHJvcGVy
bHkgdW5pb25lZC4KKyAgICAvLyAtIGNoaWxkMSBzdXJmYWNlIGRhbWFnZSBpbiByb290IHN1cmZh
Y2Ugc3BhY2U6IEZsb2F0UmVjdCgzMDAuMGYsIDMwMC4wZiwgNi4wZiwgOC4wZik7CisgICAgLy8g
LSBjaGlsZDIgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDExLjBmLCAx
MS4wZiwgMTguMGYsIDE4LjBmKTsKKyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjdmKTsK
KyAgICBjaGlsZDItPnNldE9wYWNpdHkoMC43Zik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDIwMC4wZiwg
MjAwLjBmLCA2LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMTEuMGYsIDExLjBmLCAyOTUuMGYsIDI5Ny4wZiksIHJvb3REYW1h
Z2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
clN1cmZhY2VDaGFuZ2VGcm9tRGVzY2VuZGFudExheWVyKQoreworICAgIC8vIElmIGRlc2NlbmRh
bnQgbGF5ZXIgY2hhbmdlcyBhbmQgYWZmZWN0cyB0aGUgY29udGVudCBib3VuZHMgb2YgdGhlIHJl
bmRlciBzdXJmYWNlLAorICAgIC8vIHRoZW4gdGhlIGVudGlyZSBkZXNjZW5kYW50IHN1cmZhY2Ug
c2hvdWxkIGJlIGRhbWFnZWQsIGFuZCBpdCBzaG91bGQgZGFtYWdlIGl0cworICAgIC8vIGFuY2Vz
dG9yIHN1cmZhY2Ugd2l0aCB0aGUgb2xkIGFuZCBuZXcgc3VyZmFjZSByZWdpb25zLgorCisgICAg
Ly8gVGhpcyBpcyBhIHRyaWNreSBjYXNlLCBzaW5jZSBvbmx5IHRoZSBmaXJzdCBncmFuZENoaWxk
IGNoYW5nZXMsIGJ1dCB0aGUgZW50aXJlCisgICAgLy8gc3VyZmFjZSBzaG91bGQgYmUgbWFya2Vk
IGRpcnR5LgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBU
ZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQx
ID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hp
bGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3Qg
Y2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIGdy
YW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE5NS4wZiwgMjA1LjBmKSk7CisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3Qg
PSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBUaGUgbmV3IHN1cmZh
Y2UgYm91bmRzIHNob3VsZCBiZSBkYW1hZ2VkIGVudGlyZWx5LCBldmVuIHRob3VnaCBvbmx5IG9u
ZSBvZiB0aGUgbGF5ZXJzIGNoYW5nZWQuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDE5MC4wZiwgMTkwLjBmLCAxMS4wZiwgMjMuMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisg
ICAgLy8gRGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJlIHRoZSB1bmlvbiBvZiBj
aGlsZDEncyAqZW50aXJlKiByZW5kZXIgc3VyZmFjZQorICAgIC8vIChpbiB0YXJnZXQgc3BhY2Up
LCBhbmQgaXRzIG9sZCBleHBvc2VkIGFyZWEgKGFsc28gaW4gdGFyZ2V0IHNwYWNlKS4KKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjkwLjBmLCAyOTAuMGYsIDE2LjBmLCAyMy4w
ZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tQW5jZXN0b3JMYXllcikKK3sKKyAgICAvLyBB
biBhbmNlc3Rvci9vd25pbmcgbGF5ZXIgY2hhbmdlcyB0aGF0IGFmZmVjdHMgdGhlIHBvc2l0aW9u
L3RyYW5zZm9ybSBvZiB0aGUgcmVuZGVyCisgICAgLy8gc3VyZmFjZS4gTm90ZSB0aGF0IGluIHRo
aXMgY2FzZSwgdGhlIGxheWVyUHJvcGVydHlDaGFuZ2VkIGZsYWcgYWxyZWFkeSBwcm9wYWdhdGVz
CisgICAgLy8gdG8gdGhlIHN1YnRyZWUgKHRlc3RlZCBpbiBDQ0xheWVySW1wbHRlc3QpLCB3aGlj
aCBkYW1hZ2VzIHRoZSBlbnRpcmUgY2hpbGQxCisgICAgLy8gc3VyZmFjZSwgYnV0IHRoZSBkYW1h
Z2UgdHJhY2tlciBzdGlsbCBuZWVkcyB0aGUgY29ycmVjdCBsb2dpYyB0byBjb21wdXRlIHRoZQor
ICAgIC8vIGV4cG9zZWQgcmVnaW9uIG9uIHRoZSByb290IHN1cmZhY2UuCisKKyAgICAvLyBGSVhN
RTogdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGlzIHRlc3QgY2FzZSBzaG91bGQgY2hhbmdlIHdoZW4g
d2UgYWRkIHN1cHBvcnQgZm9yIGEKKyAgICAvLyAgICAgICAgdW5pcXVlIHNjaXNzb3JSZWN0IHBl
ciByZW5kZXJTdXJmYWNlLiBJbiB0aGF0IGNhc2UsIHRoZSBjaGlsZDEgc3VyZmFjZQorICAgIC8v
ICAgICAgICBzaG91bGQgYmUgY29tcGxldGVseSB1bmNoYW5nZWQsIHNpbmNlIHdlIGFyZSBvbmx5
IHRyYW5zZm9ybWluZyBpdCwgd2hpbGUgdGhlCisgICAgLy8gICAgICAgIHJvb3Qgc3VyZmFjZSB3
b3VsZCBiZSBkYW1hZ2VkIGFwcHJvcHJpYXRlbHkuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJl
bigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDUwLjBm
LCA1MC4wZikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAg
Y2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAg
Ly8gVGhlIG5ldyBzdXJmYWNlIGJvdW5kcyBzaG91bGQgYmUgZGFtYWdlZCBlbnRpcmVseS4KKyAg
ICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTkwLjBmLCAxOTAuMGYsIDE2LjBmLCAx
OC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBUaGUgZW50aXJlIGNoaWxkMSBzdXJm
YWNlIGFuZCB0aGUgb2xkIGV4cG9zZWQgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGRhbWFnZSB0aGUg
cm9vdCBzdXJmYWNlLgorICAgIC8vICAtIG9sZCBjaGlsZDEgc3VyZmFjZSBpbiB0YXJnZXQgc3Bh
Y2U6IEZsb2F0UmVjdCgyOTAuMGYsIDI5MC4wZiwgMTYuMGYsIDE4LjBmKQorICAgIC8vICAtIG5l
dyBjaGlsZDEgc3VyZmFjZSBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgyNDAuMGYsIDI0MC4w
ZiwgMTYuMGYsIDE4LjBmKQorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyNDAs
IDI0MCwgNjYuMGYsIDY4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdSZW5kZXJTdXJm
YWNlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRl
c3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEg
PSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7Cisg
ICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBJZiBhIGRlc2Nl
bmRhbnQgc3VyZmFjZSBkaXNhcHBlYXJzLCBpdHMgZW50aXJlIG9sZCBhcmVhIGJlY29tZXMgZXhw
b3NlZC4KKyAgICAvLworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgxLjBmKTsKKyAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlcmUgaXMgb25seSBvbmUgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkMS0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgcm9vdERh
bWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjkwLjBm
LCAyOTAuMGYsIDE2LjBmLCAxOC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0Ug
MjogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBi
ZWNvbWVzIGV4cG9zZWQuCisKKyAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBq
dXN0IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2Yg
dGhlIG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1h
Z2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIGNoYW5nZSB0aGUgdHJlZSBzbyB0aGF0
IHRoZSByZW5kZXIgc3VyZmFjZSBpcyBhZGRlZCBiYWNrLgorICAgIGNoaWxkMS0+c2V0T3BhY2l0
eSgwLjVmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFjZSBub3cuCisgICAgQVNT
RVJUX1RSVUUoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUo
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgY2hpbGREYW1hZ2VSZWN0ID0g
Y2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgxOTAuMGYsIDE5MC4wZiwgMTYuMGYsIDE4LjBmKSwgY2hpbGREYW1hZ2VSZWN0
KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjkwLjBmLCAyOTAuMGYsIDE2
LjBmLCAxOC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeU5vRGFtYWdlV2hlbk5vdGhpbmdDaGFuZ2VkKQoreworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMo
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07
CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3Q7CisKKyAgICAvLyBDQVNFIDE6IElmIG5vdGhpbmcgY2hhbmdlcywgdGhlIGRhbWFnZSBy
ZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBDQVNF
IDI6IElmIG5vdGhpbmcgY2hhbmdlcyB0d2ljZSBpbiBhIHJvdywgdGhlIGRhbWFnZSByZWN0IHNo
b3VsZCBzdGlsbCBiZSBlbXB0eS4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZUZvclVwZGF0ZVJlY3RUaGF0RG9lc05v
dERyYXdDb250ZW50KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFu
ZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdl
UmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBJbiBvdXIgc3Bl
Y2lmaWMgdHJlZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNoaWxkMSBzaG91bGQgbm90IGNhdXNlIGFu
eSBkYW1hZ2UgdG8gYW55CisgICAgLy8gc3VyZmFjZSBiZWNhdXNlIGl0IGRvZXMgbm90IGFjdHVh
bGx5IGRyYXcgY29udGVudC4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAu
MGYsIDAuMGYsIDEuMGYsIDIuMGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYSkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClb
MF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IGNoaWxkMS0+Y2hpbGRy
ZW4oKVsxXTsKKworICAgIC8vIERhbWFnZSBvbiBhIHN1cmZhY2UgdGhhdCBoYXMgYSByZWZsZWN0
aW9uIHNob3VsZCBjYXVzZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdG8KKyAgICAvLyByZWNlaXZlIHRo
ZSBzdXJmYWNlJ3MgZGFtYWdlIGFuZCB0aGUgc3VyZmFjZSdzIHJlZmxlY3RlZCBkYW1hZ2UuCisK
KyAgICAvLyBGb3IgdGhpcyB0ZXN0IGNhc2UsIHdlIG1vZGlmeSBncmFuZENoaWxkMiwgYW5kIGFk
ZCBncmFuZENoaWxkMyB0byBleHRlbmQgdGhlIGJvdW5kcworICAgIC8vIG9mIGNoaWxkMSdzIHN1
cmZhY2UuIFRoaXMgd2F5LCB3ZSBjYW4gdGVzdCByZWZsZWN0aW9uIGNoYW5nZXMgd2l0aG91dCBj
aGFuZ2luZworICAgIC8vIGNvbnRlbnRCb3VuZHMgb2YgdGhlIHN1cmZhY2UuCisgICAgZ3JhbmRD
aGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTgwLjBmLCAxODAuMGYpKTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQzID0gQ0NMYXllckltcGw6OmNyZWF0ZSg2KTsKKyAg
ICBncmFuZENoaWxkMy0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyNDAuMGYsIDI0MC4wZikpOwor
ICAgIGdyYW5kQ2hpbGQzLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGdyYW5kQ2hpbGQzLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBncmFuZENoaWxk
My0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwor
ICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBDQVNFIDE6IGFkZGluZyBhIHJlZmxlY3Rpb24g
YWJvdXQgdGhlIGxlZnQgZWRnZSBvZiBncmFuZENoaWxkMS4KKyAgICAvLworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0ZSg3KTsK
KyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7
CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJv
KCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlZmxlY3Rpb247CisgICAgcmVmbGVjdGlv
bi5zY2FsZTNkKC0xLjAsIDEuMCwgMS4wKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFRy
YW5zZm9ybShyZWZsZWN0aW9uKTsKKyAgICBncmFuZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKGdy
YW5kQ2hpbGQxUmVwbGljYSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERh
bWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBncmFuZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNo
b3VsZCBub3QgaW5jbHVkZSBpdHMgb3duIHJlcGxpY2EuIFRoZSBjaGlsZAorICAgIC8vIHN1cmZh
Y2UgZGFtYWdlIHNob3VsZCBpbmNsdWRlIHRoZSBub3JtYWwgYW5kIHJlcGxpY2Egc3VyZmFjZXMu
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDYuMGYsIDgu
MGYpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDE5NC4wZiwgMjAwLjBmLCAxMi4wZiwgOC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5NC4wZiwgMzAwLjBmLCAxMi4wZiwg
OC4wZiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogbW92aW5nIHRoZSBkZXNj
ZW5kYW50IHN1cmZhY2Ugc2hvdWxkIGNhdXNlIGJvdGggdGhlIG9yaWdpbmFsIGFuZCByZWZsZWN0
ZWQKKyAgICAvLyAgICAgICAgIGFyZWFzIHRvIGJlIGRhbWFnZWQgb24gdGhlIHRhcmdldC4KKyAg
ICBJbnRSZWN0IG9sZENvbnRlbnRSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCk7CisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTk1LjAs
IDIwNS4wKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBB
U1NFUlRfRVEob2xkQ29udGVudFJlY3Qud2lkdGgoKSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkt
PmNvbnRlbnRSZWN0KCkud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0Lmhl
aWdodCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSk7
CisKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBUaGUgY2hp
bGQgc3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgbm9ybWFsIGFuZCByZXBsaWNhIHN1cmZh
Y2VzIGZvciBib3RoIG9sZCBhbmQgbmV3IGxvY2F0aW9ucy4KKyAgICAvLyAgLSBvbGQgbG9jYXRp
b24gaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3QoMTk0LjBmLCAyMDAuMGYsIDEyLjBmLCA4LjBm
KQorICAgIC8vICAtIG5ldyBsb2NhdGlvbiBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgxODku
MGYsIDIwNS4wZiwgMTIuMGYsIDguMGYpCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIDYuMGYsIDguMGYpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE4OS4wZiwgMjAwLjBmLCAxNy4wZiwgMTMu
MGYpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgyODkuMGYsIDMwMC4wZiwgMTcuMGYsIDEzLjBmKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAg
Ly8gQ0FTRSAzOiByZW1vdmluZyB0aGUgcmVmbGVjdGlvbiBzaG91bGQgY2F1c2UgdGhlIGVudGly
ZSByZWdpb24gaW5jbHVkaW5nIHJlZmxlY3Rpb24KKyAgICAvLyAgICAgICAgIHRvIGRhbWFnZSB0
aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcigwKTsK
KyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEFTU0VSVF9FUShv
bGRDb250ZW50UmVjdC53aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKS53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEob2xkQ29udGVudFJlY3QuaGVpZ2h0KCksIGNo
aWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKTsKKworICAgIEVY
UEVDVF9GQUxTRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LjBmLCAyMDUuMGYsIDEyLjBmLCA4LjBmKSwgY2hpbGRE
YW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjg5LjBmLCAz
MDUuMGYsIDEyLjBmLCA4LjBmKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKK3sKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAg
IC8vIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYW1hZ2UgdHJhY2tlciwg
Y2hhbmdlcyB0byBtYXNrIGxheWVycyBzaG91bGQKKyAgICAvLyBkYW1hZ2UgdGhlIGVudGlyZSBj
b3JyZXNwb25kaW5nIHN1cmZhY2UuCisKKyAgICAvLyBTZXQgdXAgdGhlIG1hc2sgbGF5ZXIuCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMp
OworICAgIG1hc2tMYXllci0+c2V0UG9zaXRpb24oY2hpbGQtPnBvc2l0aW9uKCkpOworICAgIG1h
c2tMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBtYXNrTGF5
ZXItPnNldEJvdW5kcyhjaGlsZC0+Ym91bmRzKCkpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIo
bWFza0xheWVyKTsKKworICAgIC8vIEFkZCBvcGFjaXR5IGFuZCBhIGdyYW5kQ2hpbGQgc28gdGhh
dCB0aGUgcmVuZGVyIHN1cmZhY2UgcGVyc2lzdHMgZXZlbiBhZnRlciB3ZSByZW1vdmUgdGhlIG1h
c2suCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAgIGdyYW5kQ2hpbGQtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoMi4wLCAyLjApKTsKKyAgICBncmFuZENoaWxkLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJ
bnRTaXplKDIsIDIpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Cisg
ICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCBhIG5ldyBzdXJmYWNl
IHdhcyBjcmVhdGVkIGZvciB0aGUgY2hpbGQuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICAvLyBDQVNFIDE6IHRoZSB1cGRhdGVSZWN0IG9uIGEgbWFzayBs
YXllciBzaG91bGQgZGFtYWdlIHRoZSBlbnRpcmUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAg
ICBtYXNrTGF5ZXItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEuMGYsIDIuMGYsIDMuMGYsIDQu
MGYpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEZsb2F0
UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDAuMGYsIDAuMGYsIDMwLjBmLCAzMC4wZiksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAg
ICAvLyBDQVNFIDI6IGEgcHJvcGVydHkgY2hhbmdlIG9uIHRoZSBtYXNrIGxheWVyIHNob3VsZCBk
YW1hZ2UgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworCisgICAgLy8gQWR2YW5j
ZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVj
dCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4g
dGVzdCB0aGUgcHJvcGVydHkgY2hhbmdlLgorICAgIG1hc2tMYXllci0+c2V0T3BhY2l0eSgwLjVm
KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgMzAuMGYsIDMwLjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMzog
cmVtb3ZpbmcgdGhlIG1hc2sgYWxzbyBkYW1hZ2VzIHRoZSBlbnRpcmUgdGFyZ2V0IHN1cmZhY2Uu
CisgICAgLy8KKworICAgIC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNvIHRo
YXQgd2Uga25vdyB0aGUgZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHByZXZp
b3VzIGNhc2UuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBj
aGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCkt
PmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0Lmlz
RW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIHRlc3QgbWFzayByZW1vdmFsLgorICAgIGNoaWxkLT5z
ZXRNYXNrTGF5ZXIoMCk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFu
Z2VkKCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAv
LyBTYW5pdHkgY2hlY2sgdGhhdCBhIHJlbmRlciBzdXJmYWNlIHN0aWxsIGV4aXN0cy4KKyAgICBB
U1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIGNoaWxkRGFtYWdlUmVj
dCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
MzAuMGYsIDMwLjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJh
Y2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2FNYXNrKQoreworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IGNoaWxkMS0+Y2hpbGRyZW4oKVsw
XTsKKworICAgIC8vIENoYW5nZXMgdG8gYSByZXBsaWNhJ3MgbWFzayBzaG91bGQgbm90IGRhbWFn
ZSB0aGUgb3JpZ2luYWwgc3VyZmFjZSwgYmVjYXVzZSBpdCBpcworICAgIC8vIG5vdCBtYXNrZWQu
IEJ1dCBpdCBkb2VzIGRhbWFnZSB0aGUgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UuCisKKyAgICAv
LyBDcmVhdGUgYSByZWZsZWN0aW9uIGFib3V0IHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEu
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDYpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludDo6emVybygpKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQ6Onplcm8oKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlvbjsK
KyAgICByZWZsZWN0aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hpbGQx
UmVwbGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5zZXRS
ZXBsaWNhTGF5ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhKTsKKworICAgIC8vIFNldCB1cCB0aGUgbWFz
ayBsYXllciBvbiB0aGUgcmVwbGljYSBsYXllcgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcmVw
bGljYU1hc2tMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNyk7CisgICAgcmVwbGljYU1hc2tM
YXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByZXBsaWNhTWFza0xh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJlcGxpY2FNYXNr
TGF5ZXItPnNldEJvdW5kcyhncmFuZENoaWxkMS0+Ym91bmRzKCkpOworICAgIGdyYW5kQ2hpbGQx
UmVwbGljYS0+c2V0TWFza0xheWVyKHJlcGxpY2FNYXNrTGF5ZXIpOworCisgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRo
ZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMgd2VyZSBjcmVhdGVkCisgICAgQVNTRVJUX1RS
VUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBDQVNFIDE6IGEgcHJv
cGVydHkgY2hhbmdlIG9uIHRoZSBtYXNrIHNob3VsZCBkYW1hZ2Ugb25seSB0aGUgcmVmbGVjdGVk
IHJlZ2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgcmVwbGljYU1hc2tMYXllci0+c2V0
T3BhY2l0eSgwLjZmKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwor
CisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGlsZDEtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEZs
b2F0UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgRVhQRUNUX1RSVUUoZ3JhbmRD
aGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMTk0LjBmLCAyMDAuMGYsIDYuMGYsIDguMGYpLCBjaGlsZERhbWFnZVJlY3QpOworCisg
ICAgLy8gQ0FTRSAyOiByZW1vdmluZyB0aGUgcmVwbGljYSBtYXNrIGRhbWFnZXMgb25seSB0aGUg
cmVmbGVjdGVkIHJlZ2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAgICBncmFu
ZENoaWxkMVJlcGxpY2EtPnNldE1hc2tMYXllcigwKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOworCisgICAgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hp
bGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDE5NC4wZiwgMjAwLjBmLCA2LjBmLCA4LjBmKSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
ckltcGxUZXN0LmNwcAppbmRleCA5NDJiZWMyZjcxM2EyODQ1MjFiYWE5NDNlY2NjNDRlMjBiOGFj
NWZmLi44OTA1MDUwZTY2NzM5MzI2NWI5NGM5ZmIyZjU1YTNkYTliM2YxZmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBAIC0zNSwy
MSArMzUsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgewogCiAjZGVm
aW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAg
ICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJl
ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VU
cmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29k
ZVRvVGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUoY2hpbGQtPmxheWVy
UHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNU
X1RSVUUoZ3JhbmRDaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkKIAogI2RlZmluZSBFWEVD
VVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShjb2RlVG9UZXN0KSAgICAgICAg
ICAgXAotICAgIHJvb3QtPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdG
b3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIEVYUEVDVF9GQUxTRShyb290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShn
cmFuZENoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKQogCiAjZGVmaW5lIEVYRUNVVEVfQU5E
X1ZFUklGWV9PTkxZX0xBWUVSX0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAgICAgICAgICBcCi0g
ICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRy
ZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
RVhQRUNUX1RSVUUocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdl
ZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTUsNyArMTE1LDcgQEAgVEVTVChD
Q0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfT05MWV9MQVlFUl9DSEFOR0VEKHJvb3QtPnNldEJhY2tncm91
bmRDb2xvcihDb2xvcjo6Z3JheSkpOwogCiAgICAgLy8gU3BlY2lhbCBjYXNlOiBjaGVjayB0aGF0
IHN1YmxheWVyIHRyYW5zZm9ybSBjaGFuZ2VzIGFsbCBsYXllcidzIGRlc2NlbmRhbnRzLCBidXQg
bm90IHRoZSBsYXllciBpdHNlbGYuCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFn
Rm9yU3VidHJlZSgpOworICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7CiAgICAgcm9vdC0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKTsK
ICAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKaW5kZXggYzlhMmZjNjUxMzI1NjZiNDI2M2EwMDY4OGY1N2MzZjUyN2IxNjFiMi4uODNhNDRl
Y2FhMGZiMjIwN2U1MTIzM2VkNDFmYTZhOGZlNDZhMjIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
CkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aCIKIAorI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zNiwy
NyArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotLy8g
VGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBl
cnJvcnMgY2FuIGdpdmUgdXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhl
IHRlc3QuCi0vLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRv
dWJsZSwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFu
ZCBzbyB3ZQotLy8gb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGlu
Zy1wb2ludCBwcmVjaXNpb24uCi0jZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4
cGVjdGVkLCBhY3R1YWwpICAgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEo
KSwgKGFjdHVhbCkubTExKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0x
MigpLCAoYWN0dWFsKS5tMTIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTEzKCksIChhY3R1YWwpLm0xMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMTQoKSwgKGFjdHVhbCkubTE0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTIyKCksIChhY3R1YWwpLm0yMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMjMoKSwgKGFjdHVhbCkubTIzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTMxKCksIChhY3R1YWwpLm0zMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAotICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCi0KIHZvaWQg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVz
M0QpCiB7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMTIwLDEyICsx
MDAsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1z
Rm9yTm9PcExheWVyKQogCiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJp
eCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgs
IHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQpAQCAtMTQ0LDggKzEyNCw4
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bmdsZUxheWVyKQogICAgIGFyYml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4w
KTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgYXJiaXRyYXJ5VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDI6IHNldHRpbmcgdGhlIGJv
dW5kcyBvZiB0aGUgbGF5ZXIgc2hvdWxkIHJlc3VsdCBpbiBhIGRyYXcgdHJhbnNmb3JtIHRoYXQg
dHJhbnNsYXRlcyB0byBoYWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0LgogICAgIC8vICAgICAgICAg
VGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0gc2hvdWxkIHJlbWFpbiBhcyB0aGUgaWRlbnRpdHks
IGJlY2F1c2UgaXQgZG9lcyBub3QgZGVhbCB3aXRoIHRyYW5zZm9ybWluZyB0by9mcm9tIHRoZSBj
ZW50ZXIgb2YgdGhlIGxheWVyLgpAQCAtMTUzLDIyICsxMzMsMjIgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgdHJh
bnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjApOwogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
dHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKIAogICAgIC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdp
dGhvdXQgYSBsYXllciB0cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJh
bnNmb3Jtcy4KICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwg
RmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0g
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXIt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRp
dHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlN
YXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDog
QSBjaGFuZ2UgaW4gImFjdHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5z
Zm9ybSBhbmQgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwb3NpdGlvblRyYW5zZm9ybTsKICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4w
LCAxLjIpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBG
bG9hdFBvaW50KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5z
Zm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogSW4gdGhlIGNvcnJl
Y3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJl
LW11bHRpcGx5IHRoZSB0cmFuc2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQg
YnkKICAgICAvLyAgICAgICAgIHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxl
IGFuZCB0cmFuc2xhdGlvbiBhcmUgbm90IGNvbW11dGF0aXZlLgpAQCAtMTc2LDggKzE1Niw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmds
ZUxheWVyKQogICAgIGxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVy
VHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEobGF5ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIENhc2UgNjogVGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBhbmNob3IgcG9pbnQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNsYXRpb25Ub0FuY2hvcjsKQEAgLTE4NSw4ICsxNjUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBleHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXll
clRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3Vs
dCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAv
LyBDYXNlIDc6IFZlcmlmeSB0aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0
cmFuc2Zvcm0uCiAgICAgLy8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHks
IGJ1dCBpdCBpcwpAQCAtMTk0LDggKzE3NCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGV4cGVjdGVkUmVzdWx0
ID0gcG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4
cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkp
CkBAIC0yMTYsMTAgKzE5NiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2
LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3Np
dGlvbiBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZENoaWxkLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtOwpAQCAtMjI4LDEwICsyMDgsMTAgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFy
Y2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0Nl
bnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5z
Zm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9u
VHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0
cmFuc2Zvcm0gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOwpAQCAtMjQzLDEwICsyMjMsMTAgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFy
Y2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IHBhcmVudCdz
IHN1YmxheWVyTWF0cml4IGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICAvLyAgICAg
ICAgIHNjYWxpbmcgaXMgdXNlZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVu
Y2Ugb2YgdHJhbnNmb3JtcyBpcyBwcm9wZXJseSB0ZXN0ZWQuCkBAIC0yNjQsMTAgKzI0NCwxMCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1w
bGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVk
Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
ZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAq
IGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9z
aXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAg
IC8vIENhc2UgNTogc2FtZSBhcyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJlc2Vy
dmUgM0QsIHNvIHRoZSBncmFuZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRlbmVk
IGNvbXBvc2l0ZSB0cmFuc2Zvcm0uCiAgICAgLy8KQEAgLTI3NSwxMCArMjU1LDEwIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJh
cmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCkBAIC0z
MjEsMTIgKzMwMSwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVy
J3MgZHJhdyB0cmFuc2Zvcm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7
IHRoZXkgb25seSBkaWZmZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCiAgICAgLy8gVGhl
IHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0
aGUgcm9vdC4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9y
aWdpbiB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2Fz
ZSkgc2hvdWxkIGJlIHRoZSBzYW1lLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3Jt
KCkpOwogCiB9CiAKQEAgLTQyMywzOCArNDAzLDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAg
Ly8gIG5vdGUgdGhhdCBkcmF3IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIG5lYXJlc3QgYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UKICAgICAvLyAgYnV0IHNjcmVl
biBzcGFjZSB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290
LgogICAgIC8vCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAq
IEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFu
c2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTIt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShC
ICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwogCiAg
ICAgLy8gVmVyaWZ5IGxheWVyIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCiAgICAgLy8KLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJv
b3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEsIHBhcmVudC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShBICogQiAqIEEsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBncmFu
ZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIg
KiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZS
UzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICog
QSwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxk
T2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBC
ICogQSAqIEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAq
IEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFj
ZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jt
cy4KICAgICAvLwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBp
cyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgp
KTsKICAgICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3Jp
YmVkIHdpdGggcmVzcGVjdCB0byByZW5kZXIgc3VyZmFjZSAyLgotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICog
QSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwog
CiAgICAgLy8gU2FuaXR5IGNoZWNrLiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEg
YnVnIGluIHRoZSB0ZXN0IGl0c2VsZi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNv
cnJlY3RseSBzZXQgdXAgdHJhbnNmb3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUg
c2NyZWVuLXNwYWNlIHRyYW5zZm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI4M2RhY2FiYTNjZmUw
MWNhY2EzYWJhNTliZjc4NzY0YTdkZDFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorI2RlZmlu
ZSBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCisv
LyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2Vm
dWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCisjZGVmaW5lIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxv
Y2F0aW9uKCkueCgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9u
KCkueSgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLnkoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5zaXplKCkud2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5z
aXplKCkuaGVpZ2h0KCkpCisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rp
b24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVk
LgorLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUg
cHJlY2lzaW9uLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNl
ZCB0aGF0IGFmZmVjdAorLy8gdGhlIHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0
aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZp
bmUgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAg
ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgp
KTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0
dWFsKS5tMTIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTE0KCksIChhY3R1YWwpLm0xNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9G
TE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICAgICAgICAgIFwKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgICAg
ICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0y
MygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAo
YWN0dWFsKS5tMjQoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMzEoKSwgKGFjdHVhbCkubTMxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTMyKCksIChhY3R1YWwpLm0zMigpKTsgICAgICAgICAgXAorICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICAgICAgICAgIFwK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAg
ICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwp
Lm00MSgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00Migp
LCAoYWN0dWFsKS5tNDIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDMoKSwgKGFjdHVhbCkubTQzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQorCit9IC8vIG5hbWVzcGFjZQor
CisjZW5kaWYgLy8gQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDcwNDU0NGI2
YWRiMzNkM2EwZmZhMzVlOGU3NDJkNDM3ZGMxZWZkZmUuLmMzYjM2NmRkYTMyMzc0Njg2ODZmYmY4
M2VkNGZlMzM5MGY4MmYzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcApAQCAtNTksMTggKzU5LDE2IEBAIFRFU1QoQ0NS
ZW5kZXJTdXJmYWNlVGVzdCwgdmVyaWZ5U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkp
CiAgICAgQVNTRVJUX1RSVUUob3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gb3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2Uo
KTsKICAgICBJbnRSZWN0IHRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgzLCA0KSwgSW50U2l6
ZSg1LCA2KSk7Ci0KLSAgICBvd25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9y
U3VidHJlZSgpOworICAgIG93bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3Vi
dHJlZSgpOwogCiAgICAgLy8gQ3VycmVudGx5LCB0aGUgY29udGVudFJlY3QsIGNsaXBSZWN0LCBh
bmQgb3duaW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgYXJlCiAgICAgLy8gdGhlIG9u
bHkgc291cmNlcyBvZiBjaGFuZ2UuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hB
TkdFRChyZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9TVVJGQUNFX0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3Qo
dGVzdFJlY3QpKTsKIAotICAgIG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdG
b3JTdWJ0cmVlKCk7CiAgICAgb3duaW5nTGF5ZXItPnNldE9wYWNpdHkoMC41Zik7CiAgICAgRVhQ
RUNUX1RSVUUocmVuZGVyU3VyZmFjZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKTsKLSAgICBv
d25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93
bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8g
U2V0dGluZyB0aGUgc3VyZmFjZSBwcm9wZXJ0aWVzIHRvIHRoZSBzYW1lIHZhbHVlcyBhZ2FpbiBz
aG91bGQgbm90IGJlIGNvbnNpZGVyZWQgImNoYW5nZSIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJl
Y3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVt
VGVzdC5jcHAKaW5kZXggZWQ5Y2VjYjk2MzY2MTlhY2QyNWU0MDIwNTkxYWRhNmQzNjNhOTMxYi4u
NzgwOWQxOGE0MzY3MGQ0OGFhNzg2MWZiODcwNDY1NjI4NTkzZmEyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDEw
ICsyNiwxMiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NM
YXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGlu
Zzo6XzsKIHVzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKQEAgLTEzMiwxNCArMTM0LDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwogICAgIH0KIAot
ICAgIHZvaWQgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhw
ZWN0ZWQsIGNvbnN0IEZsb2F0UmVjdCYgYWN0dWFsKSBjb25zdAotICAgIHsKLSAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGV4cGVjdGVkLmxvY2F0aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54
KCkpOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFj
dHVhbC5sb2NhdGlvbigpLnkoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5z
aXplKCkud2lkdGgoKSwgYWN0dWFsLnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKGV4cGVjdGVkLnNpemUoKS5oZWlnaHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7
Ci0gICAgfQotCiAgICAgTW9ja0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJl
bnREZWxlZ2F0ZTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQx
LCBtX2NoaWxkMiwgbV9jaGlsZDMsIG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3Jh
bmRDaGlsZDM7CiB9OwpAQCAtNTYyLDI0ICs1NTYsMjQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIAogICAgIC8v
IENhc2UgMTogYmFzaWMKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsK
LSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGly
dHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBi
ZSB1bmlvbmVkIG9mIGRpcnR5MSBhbmQgZGlydHkyLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KGRpcnR5MikpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJl
Y3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwg
MTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMzogZGlydHkg
cmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCiAg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJp
ZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0
LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CiAKICAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0
eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkob3V0T2ZCb3VuZHNEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxt
b3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAu
MGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAg
ICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFy
ZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCiAgICAgLy8gICAg
ICAgICBvdmVycmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9h
dFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5
IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7CkBAIC01OTYsMTMgKzU5MCwxMyBAQCBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0
ZSkKICAgICBGbG9hdFJlY3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAy
LjBmKTsKIAogICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZlcmlm
eUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDgu
MGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpKTsKIAogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFs
KGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTY1
Niw3ICs2NTAsNyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFu
Z2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hv
dWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNh
bGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3Rz
QWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAgICAgdGVzdExh
eWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGly
dHlSZWN0KCkuaXNFbXB0eSgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116829</attachid>
            <date>2011-11-28 14:59:12 -0800</date>
            <delta_ts>2011-11-28 15:31:07 -0800</delta_ts>
            <desc>fixed style nits, moved non-virtual destructor to .cpp</desc>
            <filename>bug-72520-20111128145911.patch</filename>
            <type>text/plain</type>
            <size>106590</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJiNDQ3MmEwNjdmMmFh
NWE3NzM2MWFiZjgyOGQ2OGNkYzM1MjFiNS4uYjkxZjNlMWQxY2E5ZmQ0OTc1MDNmZmY5OWY1MDA3
YjFiZWFiNmM2MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpj
b21wdXRlRGFtYWdlRnJvbVN1cmZhY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEZpeCBBc3BlY3QgUmF0aW8gUHJvcGVydHkgSW5oZXJpdGFuY2UgQW5kIE1ha2Ug
dGhlIENvbXB1dGVkIFZhbHVlIEVxdWFsIHRoZSBTcGVjaWZpZWQgVmFsdWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMjEzZGZmZGI3ZTVmMGI5YWRjMWMzMzU5Y2IyOGIyMDFlMzg2ZjFk
Ni4uZDgxMGI2YWZhODA5YTQ1ODI1ZTFlNDdjZDE2NmY5MTdjMjA3Yzg5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBD
Q0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBh
IHN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5n
T25lRnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZh
Y2VzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9u
ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorCiAyMDExLTExLTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxMjczLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNkMTJhNzhiZDFlMDllZDZkNjZjM2YzMDUwMmY4MzI5MDkwMDI4YWEuLjcwYjNi
MTBjM2M4OGYyM2I4YTAyYTc4MzYwY2Q0MTA0ODBlNmFiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1NzEsNiArMzU3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZWJjMzk0YzRjNWRhZDMxNmNjZGJk
YTYxNTUyNGVmOTA3YTI0MDU2Yi4uZTQxODllYzc5Njk1MmRjN2QxMWU1YTg5MTZkMzc1MzViMWE3
NzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
VHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgpAQCAtMzMxLDYgKzMzMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAg
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworCiAgICAgICAgICAgICBpZiAocmVu
ZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkpOwogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CkBAIC0zNDUsNyArMzQ3LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGEKICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQg
c3RhcnQgYnkgYXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5v
dGVkIGFzIHRoZXkgb2NjdXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5n
ZWRGbGFnRm9yU3VidHJlZSgpOworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJh
Y2tpbmdGb3JTdWJ0cmVlKCk7CiB9CiAKIApAQCAtNTgzLDcgKzU4NSw3IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdl
dFN1cmZhY2UpIHsKKyAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNl
Q29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93
bmluZ0xheWVySWQoKSkpIHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0
aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNl
KCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5Mzk5Yzg3Yjg3ZWY1ZjVjZGVjY2M2
YTBlODA1ODQwYjExMTlkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAsMCArMSwz
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c093blB0cjxDQ0RhbWFnZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VU
cmFja2VyOjpDQ0RhbWFnZVRyYWNrZXIoKQoreworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5ID0g
YWRvcHRQdHIobmV3IFJlY3RNYXApOworICAgIG1fbmV4dFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIo
bmV3IFJlY3RNYXApOworfQorCitDQ0RhbWFnZVRyYWNrZXI6On5DQ0RhbWFnZVRyYWNrZXIoKQor
eworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFt
ZShjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJn
ZXRTdXJmYWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7
CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSAiZGFtYWdlIHJlY3Qi
IG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UKKyAgICAvLyByZWN0IGlzIHRoZSByZWdp
b24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkIGFuZCBuZWVkcyB0byBiZSBy
ZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVh
bGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQKKyAgICAvLyBiYW5kd2lkdGgu
CisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkIGFz
IHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdlcyB0aGF0CisgICAgLy8gaGF2ZSBoYXBw
ZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFzdCBmcmFtZSB3YXMgZHJhd24uIFRoaXMg
aW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2VzIGZvciBleGlzdGluZyBsYXllcnMvc3Vy
ZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZQorICAgIC8vICAgLSBs
YXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRoZSBwcmV2aW91cyBmcmFtZSwgYnV0IG5v
IGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRoZSBiYXNpYyBhbGdvcml0aG0gZm9yIGNv
bXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBmb2xsb3dzOgorICAgIC8vCisgICAgLy8g
ICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IGNoYW5nZXMgaW4gYWN0aXZlL25l
dyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsYXllciBpbiB0aGUgbGF5ZXJMaXN0Ogor
ICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMgYWN0dWFsbHkgYSByZW5kZXJTdXJmYWNl
OgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIHRvIG91ciB0
YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAgZWxzZQorICAgIC8vICAgICAgICAgICAg
ICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8K
KyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgdGhlIHRhcmdldCBz
dXJmYWNlJ3MgbWFzaywgaWYgaXQgZXhpc3RzLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMy4g
Y29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IG9sZCBsYXllcnMvc3VyZmFjZXMgdGhhdCBubyBsb25n
ZXIgZXhpc3QKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsZWZ0b3ZlciBsYXllcjoKKyAgICAvLyAg
ICAgICAgICAgYWRkIHRoZSBvbGQgbGF5ZXIvc3VyZmFjZSBib3VuZHMgdG8gdGhlIHRhcmdldCBz
dXJmYWNlIGRhbWFnZS4KKyAgICAvLworICAgIC8vICAgICAgIC8vIDQuIGNvbWJpbmUgYWxsIHBh
cnRpYWwgZGFtYWdlIHJlY3RzIHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLwor
ICAgIC8vIEFkZGl0aW9uYWwgaW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhp
cyBhbGdvcml0aG0gaXMgaW1wbGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNj
ZW5kYW50IHN1cmZhY2VzIGhhdmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFt
YWdlLgorICAgIC8vCisgICAgLy8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0
ZSAiZGFtYWdlIiB0byB0aGUgdGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAg
IG5vdCBjaGFuZ2VkLCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRy
YXdpbmcuIEFsbCBsYXllcnMgdGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdp
b24gc3RpbGwgbmVlZCB0byBiZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAv
LyAgIGNoYW5nZWQgaXRzIG9wYWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSBy
ZS1kcmF3biBhcyB3ZWxsLCBldmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgor
ICAgIC8vCisgICAgLy8gLSBJZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhl
IG9sZCBib3VuZHMgYW5kIG5ldyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4g
c29tZSBvZiB0aGUgZXhwb3NlZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBh
bnl0aGluZy4gQnV0IHRoaXMKKyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRl
IHRoZSBkYW1hZ2UgcmVjdC4gSWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAv
LyAgIG9sZCBib3VuZHMgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVz
cyBvZiBob3cgbXVjaCBpdCBvdmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcg
Ym91bmRzLCB3aGljaCBhbHNvIG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLwor
ICAgIC8vIC0gU2VlIGNvbW1lbnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0
IGV4YWN0bHkgaXMgY29uc2lkZXJlZCBhICJjaGFuZ2UiCisgICAgLy8gICBpbiBhIGxheWVyL3N1
cmZhY2UuCisgICAgLy8KKyAgICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0
cywgdHdvIFJlY3RNYXBzIGFyZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBU
aGUgImN1cnJlbnQiIG1hcCBjb250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRy
aWJ1dGVkIHRvIHRoZQorICAgIC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lk
ZSB0aGUgcHJldmlvdXMgZGFtYWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8g
ICAgICAgICBvciBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVu
IGV4cG9zZWQgYW5kIGRhbWFnZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBB
cyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUK
KyAgICAvLyAgICAgICAgIG1hcCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhh
dCBubyBsb25nZXIgZXhpc3QuCisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFw
IHN0YXJ0cyBvdXQgZW1wdHksIGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5
CisgICAgLy8gICAgICAgICBsYXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1
cmZhY2UgaXMgYWRkZWQgdG8gdGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIg
dGhlIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNv
IHRoYXQgdGhlCisgICAgLy8gICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhl
IG5leHQgZnJhbWUuCisgICAgLy8KKworICAgIC8vIElmIHRoZSB0YXJnZXQgc3VyZmFjZSBhbHJl
YWR5IGtub3dzIGl0cyBlbnRpcmUgcmVnaW9uIGlzIGRhbWFnZWQsIHdlIGNhbiByZXR1cm4gZWFy
bHkuCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGdvIGF3YXksIG9yIHdpbGwgYmUgY2xlYW5l
ciwgYWZ0ZXIgcmVmYWN0b3JpbmcgaW50byBSZW5kZXJQYXNzL1JlbmRlclNjaGVkdWxlLgorICAg
IENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFswXS5nZXQoKTsKKyAgICBpZiAobGF5ZXIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVz
Y2VuZGFudCgpKSB7CisgICAgICAgIG1fY3VycmVudERhbWFnZVJlY3QgPSBGbG9hdFJlY3QobGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgZGFtYWdlRnJvbUFjdGl2ZUxheWVycyA9IGNvbXB1
dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGxheWVyTGlzdCwgdGFyZ2V0U3VyZmFjZUxheWVySUQp
OworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSBjb21wdXRlRGFtYWdlRnJv
bVN1cmZhY2VNYXNrKHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBkYW1h
Z2VGcm9tTGVmdG92ZXJSZWN0cyA9IGNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOwor
CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IGRhbWFnZUZyb21BY3RpdmVMYXllcnM7CisgICAg
bV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2sp
OworICAgIG1fY3VycmVudERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlRnJvbUxlZnRv
dmVyUmVjdHMpOworCisgICAgLy8gVGhlIG5leHQgaGlzdG9yeSBtYXAgYmVjb21lcyB0aGUgY3Vy
cmVudCBtYXAgZm9yIHRoZSBuZXh0IGZyYW1lLgorICAgIHN3YXAobV9jdXJyZW50UmVjdEhpc3Rv
cnksIG1fbmV4dFJlY3RIaXN0b3J5KTsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6
cmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUoaW50IGxheWVySUQpCit7CisgICAgLy8gVGhpcyBm
dW5jdGlvbiBleGlzdHMgbWFpbmx5IGZvciByZWFkYWJpbGl0eSBvZiB0aGUgY29kZS4KKyAgICAv
LyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcCwgb3IgaWYgbm90IGZv
dW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICByZXR1cm4gbV9jdXJyZW50
UmVjdEhpc3RvcnktPnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpz
YXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRT
cGFjZVJlY3QpCit7CisgICAgLy8gVGhpcyBsYXllciBzaG91bGQgbm90IHlldCBleGlzdCBpbiBu
ZXh0IGZyYW1lJ3MgaGlzdG9yeS4KKyAgICBBU1NFUlQobV9uZXh0UmVjdEhpc3RvcnktPmZpbmQo
bGF5ZXJJRCkgPT0gbV9uZXh0UmVjdEhpc3RvcnktPmVuZCgpKTsKKyAgICBtX25leHRSZWN0SGlz
dG9yeS0+c2V0KGxheWVySUQsIHRhcmdldFNwYWNlUmVjdCk7Cit9CisKK0Zsb2F0UmVjdCBDQ0Rh
bWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklE
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsg
KytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFts
YXllckluZGV4XS5nZXQoKTsKKworICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpy
ZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdl
dFN1cmZhY2VMYXllcklEKSkKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZh
Y2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbmRE
YW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIGRh
bWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VG
cm9tU3VyZmFjZU1hc2soQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7Cisg
ICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGlmICghdGFyZ2V0
U3VyZmFjZU1hc2tMYXllcikKKyAgICAgICAgcmV0dXJuIGRhbWFnZVJlY3Q7CisKKyAgICAvLyBD
dXJyZW50bHksIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2UgdG8gdGhlIG1hc2ssIHdlIGNob29zZSB0
byBkYW1hZ2UgdGhlIGVudGlyZQorICAgIC8vIHN1cmZhY2UuIFRoaXMgY291bGQgcG90ZW50aWFs
bHkgYmUgb3B0aW1pemVkIGxhdGVyLCBidXQgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGEKKyAg
ICAvLyBjb21tb24gY2FzZS4KKyAgICBpZiAodGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+bGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoKSB8fCAhdGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIEZsb2F0U2l6ZSh0YXJnZXRTdXJmYWNlTWFza0xheWVyLT5ib3VuZHMoKSkpOworCisg
ICAgcmV0dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNv
bXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIgY29tcHV0aW5n
IGRhbWFnZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVtcyBpbiB0aGUg
Y3VycmVudAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVycy9zdXJmYWNl
cyB0aGF0IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAvLyBhcmUgbm93
IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0IGRhbWFnZVJl
Y3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAoUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1
cnJlbnRSZWN0SGlzdG9yeS0+YmVnaW4oKTsgaXQgIT0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmVu
ZCgpOyArK2l0KQorICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0LT5zZWNvbmQpOworCisgICAg
bV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsK
K30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJ
bXBsKiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJl
IGFyZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lvbiBvZiB0aGUgdGFy
Z2V0IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUuZy4gb3BhY2l0eSwg
cG9zaXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBlbnRpcmUgcmVnaW9u
IG9mIHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLyAgICAgICAg
LSB0aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWFnZXMgdGhlIHN1cmZhY2UsIGJlY2F1c2Ug
dGhpcyByZWdpb24gaXMgbm93IGV4cG9zZWQuCisgICAgLy8gICAgICAgIC0gbm90ZSB0aGF0IGlu
IG1hbnkgY2FzZXMgdGhlIG9sZCBhbmQgbmV3IGxheWVyIHJlY3RzIG1heSBvdmVybGFwLCB3aGlj
aCBpcyBmaW5lLgorICAgIC8vCisgICAgLy8gICAyLiBSZXBhaW50L3VwZGF0ZTogSWYgYSByZWdp
b24gb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkLCB0aGF0CisgICAgLy8g
ICAgICByZWdpb24gZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLworICAgIC8vIFByb3BlcnR5
IGNoYW5nZXMgdGFrZSBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0cy4KKworICAgIC8vIENvbXB1
dGUgdGhlIGxheWVyJ3MgIm9yaWdpblRyYW5zZm9ybSIgYnkgdHJhbnNsYXRpbmcgdGhlIGRyYXdU
cmFuc2Zvcm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBvcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUg
KiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQo
KSk7CisKKyAgICBGbG9hdFJlY3Qgb2xkTGF5ZXJSZWN0ID0gcmVtb3ZlUmVjdEZyb21DdXJyZW50
RnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3Bh
Y2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBsYXllci0+Ym91bmRzKCkpKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFtZShsYXllci0+aWQo
KSwgbGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVy
dHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gSWYgYSBsYXllciBoYXMgY2hhbmdlZCwgdGhlbiBp
dHMgZW50aXJlIGxheWVyIHJlY3QgYWZmZWN0cyB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAg
IHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8obGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7
CisKKyAgICAgICAgLy8gVGhlIGxheWVyJ3Mgb2xkIHJlZ2lvbiBpcyBub3cgZXhwb3NlZCBvbiB0
aGUgdGFyZ2V0IHN1cmZhY2UsIHRvby4KKyAgICAgICAgLy8gTm90ZSBvbGRMYXllclJlY3QgaXMg
YWxyZWFkeSBpbiB0YXJnZXQgc3BhY2UuCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJ
Zk5vblplcm8ob2xkTGF5ZXJSZWN0KTsKKyAgICB9IGVsc2UgaWYgKCFsYXllci0+dXBkYXRlUmVj
dCgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgcHJvcGVydGllcyBoYXZl
bnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNlIGlzIG9ubHkKKyAgICAgICAg
Ly8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEsIHdoaWNoIGNvdWxkIGJlIGVt
cHR5LgorICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5U
cmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dXBkYXRlUmVjdCgpKTsKKyAgICAgICAgdGFyZ2V0RGFt
YWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0SW5UYXJnZXRTcGFjZSk7CisgICAgfQor
fQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2VuZGFudCBzdXJmYWNlIiBjYW4gZGFtYWdlIHJl
Z2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFu
Z2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNlJ3MgZ2VvbWV0cnkgY2FuIGNoYW5nZSBiZWNh
dXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gZGVzY2VuZGFudHMgKGkuZS4g
dGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBzdXJmYWNlJ3MgY29udGVudCByZWN0CisgICAg
Ly8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5jZXN0b3IgbGF5ZXJzIHRoYXQgcHJvcGFnYXRl
IHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlaXIgZW50aXJlIHN1YnRyZWUuCisgICAgLy8g
ICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90aCB0aGUgb2xkIHN1cmZhY2UgcmVjdCBhbmQg
bmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8gICAgICAgICAgZGFtYWdlIHRoZSB0YXJnZXQg
c3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAgIDIuIERhbWFnZSByZWN0OiBU
aGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IGl0cyBvd24gbGF5ZXJMaXN0IGFz
IHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8vICAgICAgc2hvdWxkIHByb3BhZ2F0ZSB0byB0
aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKworICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICBGbG9hdFJlY3Qgb2xkU3Vy
ZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShsYXllci0+aWQoKSk7CisKKyAg
ICBGbG9hdFJlY3Qgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOyAvLyBhbHJlYWR5IGluY2x1ZGVzIHJlcGxpY2EgaWYgaXQgZXhp
c3RzLgorICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNlUmVjdElu
VGFyZ2V0U3BhY2UpOworCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7Cisg
ICAgaWYgKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAg
ICAvLyBUaGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgorICAgICAgICBkYW1h
Z2VSZWN0SW5Mb2NhbFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKworICAg
ICAgICAvLyBUaGUgc3VyZmFjZSdzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRh
cmdldCBzdXJmYWNlLCB0b28uCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblpl
cm8ob2xkU3VyZmFjZVJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9ubHkgdGhlIHN1
cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFtYWdlIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAg
ICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFt
YWdlLCB0cmFuc2Zvcm0gaXQgdG8gdGFyZ2V0IHNwYWNlLCBhbmQgcG9zc2libHkgY29udHJpYnV0
ZSBpdHMgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgaWYgKCFkYW1hZ2VSZWN0SW5Mb2NhbFNw
YWNlLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3Jp
Z2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBS
ZWN0KGRhbWFnZVJlY3RJbkxvY2FsU3BhY2UpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVu
aXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNh
J3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4g
c3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCks
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICAgICAgcmVw
bGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1s
YXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSk7CisKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5p
dGVJZk5vblplcm8ocmVwbGljYU9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3RJbkxv
Y2FsU3BhY2UpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZXJlIHdhcyBkYW1h
Z2Ugb24gdGhlIHJlcGxpY2EncyBtYXNrLCB0aGVuIHRoZSB0YXJnZXQgc3VyZmFjZSByZWNlaXZl
cyB0aGF0IGRhbWFnZSBhcyB3ZWxsLgorICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYg
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICBDQ0xheWVySW1w
bCogcmVwbGljYU1hc2tMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7
CisKKyAgICAgICAgRmxvYXRSZWN0IG9sZFJlcGxpY2FNYXNrUmVjdCA9IHJlbW92ZVJlY3RGcm9t
Q3VycmVudEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIHJlcGxpY2EncyAib3JpZ2luVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVw
bGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIHNwYWNlLgor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgIHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24o
KS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICBy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJh
bnNmb3JtKCkpOworICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+cG9zaXRpb24oKS55KCkpOworCisgICAgICAgIEZsb2F0UmVjdCByZXBsaWNhTWFza0xheWVy
UmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBGbG9hdFNpemUocmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkud2lkdGgoKSwg
cmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKSk7CisgICAgICAgIHNhdmVSZWN0
Rm9yTmV4dEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCksIHJlcGxpY2FNYXNrTGF5ZXJSZWN0
KTsKKworICAgICAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYSBjaGFuZ2Ug
aW4gdGhlIHJlcGxpY2EgbWFzayBkYW1hZ2VzIHRoZSBlbnRpcmUgcmVwbGljYSByZWdpb24uCisg
ICAgICAgIGlmIChyZXBsaWNhTWFza0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpIHx8ICFy
ZXBsaWNhTWFza0xheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGFy
Z2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhTWFza0xheWVyUmVjdCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcw
MjIyZjY5MGQ0NjEwNTJjNjZlYmM1N2RhYWQyOGUxZDhiODgzMmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRy
YWNrZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RhbWFnZVRyYWNrZXJf
aAorI2RlZmluZSBDQ0RhbWFnZVRyYWNrZXJfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZh
Y2U7CisKKy8vIENvbXB1dGVzIHRoZSByZWdpb24gd2hlcmUgcGl4ZWxzIGhhdmUgYWN0dWFsbHkg
Y2hhbmdlZCBvbiBhIFJlbmRlclN1cmZhY2UuIFRoaXMgcmVnaW9uIGlzIHVzZWQKKy8vIHRvIHNj
aXNzb3Igd2hhdCBpcyBhY3R1YWxseSBkcmF3biB0byB0aGUgc2NyZWVuIHRvIHNhdmUgR1BVIGNv
bXB1dGF0aW9uIGFuZCBiYW5kd2lkdGguCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8Q0NEYW1hZ2VUcmFja2VyPiBjcmVhdGUoKTsK
KyAgICB+Q0NEYW1hZ2VUcmFja2VyKCk7CisKKyAgICB2b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JO
ZXh0RnJhbWUoY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBp
bnQgdGFyZ2V0U3VyZmFjZUxheWVySUQsIENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNlTWFza0xh
eWVyKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGN1cnJlbnREYW1hZ2VSZWN0KCkgeyByZXR1cm4g
bV9jdXJyZW50RGFtYWdlUmVjdDsgfQorCitwcml2YXRlOgorICAgIENDRGFtYWdlVHJhY2tlcigp
OworCisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VM
YXllcklEKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURhbWFnZUZyb21TdXJmYWNlTWFzayhDQ0xh
eWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7CisgICAgRmxvYXRSZWN0IGNvbXB1dGVE
YW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOworCisgICAgRmxvYXRSZWN0IHJlbW92ZVJlY3RGcm9t
Q3VycmVudEZyYW1lKGludCBsYXllcklEKTsKKyAgICB2b2lkIHNhdmVSZWN0Rm9yTmV4dEZyYW1l
KGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFNwYWNlUmVjdCk7CisKKyAgICAv
LyBUaGVzZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSB1c2VkIG9ubHkgaW4gY29tcHV0ZURhbWFnZUZy
b21BY3RpdmVMYXllcnMoKS4KKyAgICB2b2lkIGV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJ
bXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGV4dGVuZERhbWFn
ZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJl
Y3QpOworCisgICAgLy8gVG8gY29ycmVjdGx5IHRyYWNrIGV4cG9zZWQgcmVnaW9ucywgdHdvIGhh
c2h0YWJsZXMgb2YgcmVjdHMgYXJlIG1haW50YWluZWQuCisgICAgLy8gVGhlICJjdXJyZW50IiBt
YXAgaXMgdXNlZCB0byBjb21wdXRlIGV4cG9zZWQgcmVnaW9ucyBvZiB0aGUgY3VycmVudCBmcmFt
ZSwgd2hpbGUKKyAgICAvLyB0aGUgIm5leHQiIG1hcCBpcyB1c2VkIHRvIGNvbGxlY3QgbGF5ZXIg
cmVjdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgbmV4dCBmcmFtZS4KKyAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBGbG9hdFJlY3Q+IFJlY3RNYXA7CisgICAgT3duUHRyPFJlY3RNYXA+IG1fY3VycmVu
dFJlY3RIaXN0b3J5OworICAgIE93blB0cjxSZWN0TWFwPiBtX25leHRSZWN0SGlzdG9yeTsKKwor
ICAgIEZsb2F0UmVjdCBtX2N1cnJlbnREYW1hZ2VSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ0NEYW1hZ2VUcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAppbmRleCAxMmQyMmUyYTI0MTEyMmNiNTdiOTllZGJkZjQ2M2ZmOWNiMjg4MjRlLi5hZjA0
MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCkBAIC0yMzksMTUgKzIzOSwyMiBAQCB2b2lkIENDTGF5ZXJJbXBsOjpub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWRGb3JEZXNjZW5kYW50cygpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPm5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1w
bDo6cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpCit2b2lkIENDTGF5ZXJJbXBs
OjpyZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpCiB7CiAgICAgbV9sYXllclByb3Bl
cnR5Q2hhbmdlZCA9IGZhbHNlOworICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAg
ICAgaWYgKG1fcmVuZGVyU3VyZmFjZSkKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlLT5yZXNldFBy
b3BlcnR5Q2hhbmdlZEZsYWcoKTsKIAorICAgIGlmIChtX21hc2tMYXllcikKKyAgICAgICAgbV9t
YXNrTGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CisKKyAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fcmVwbGljYUxheWVyLT5yZXNldEFsbENoYW5nZVRy
YWNraW5nRm9yU3VidHJlZSgpOyAvLyBhbHNvIHJlc2V0cyB0aGUgcmVwbGljYSBtYXNrLCBpZiBp
dCBleGlzdHMuCisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0Zv
clN1YnRyZWUoKTsKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRBbGxDaGFuZ2VUcmFja2lu
Z0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6c2V0Qm91bmRzKGNvbnN0IElu
dFNpemUmIGJvdW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGJmNmI2OGUxZTc4MjA3Y2Ux
YWM2ZmNmMjYyNTdmZDk3ZDRiZDgyNDEuLmUyYzAwYzg2ODk4MmE3NmM2NThjYWU4MzQxMGU4NWJj
Y2RjZjgwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTkyLDcgKzE5Miw3IEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKICAgICBib29sIGxheWVy
UHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3BlcnR5Q2hhbmdlZDsg
fQotICAgIHZvaWQgcmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAvLyBhbHNv
IHJlc2V0cyBwcm9wZXJ0eSBjaGFuZ2UgZm9yIGV4aXN0aW5nIHJlbmRlciBzdXJmYWNlcy4KKyAg
ICB2b2lkIHJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggNmM4ZGE0NjFhY2QxNzQxMGExMDI1ZTg5MzI1NGVkYWMwMTE3M2VmNi4uYWJk
ZjE2MmQwM2EwOWZiMmQyMDkyYWU5NDlhZWU5MDVjYTdlYWVkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQgc3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZh
Y2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJlbmRlcgogICAgICAgICAgICAgLy8gc3VyZmFj
ZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgotICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAg
ICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVz
VG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRMYXll
clRyZWVIb3N0KHRoaXMpOwpAQCAtNDE1LDcgKzQxNSw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBD
Q1RlCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVy
SW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKICAgICAgICAgICAgIExh
eWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSAhPSByZW5kZXJTdXJmYWNlKQorCisgICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXll
ciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwg
dXBkYXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDQ4N2Q4ZjRiZTZiY2Q2
NDQ4ZGMwNjYxZDU5Njc1ZWZkNDZhMDZmN2QuLjU2ZDJiNmM0MTg5Yzc2OWUwNGY0YWVjN2RjMDhi
ZjMxZDFiMjExNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC03NSw2ICs3NSw3
IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRo
cmVhZChmYWxzZSkKICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAg
ICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKKyAgICAgICAgICAgICwgdXNlRGFt
YWdlVHJhY2tlcihmYWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkgeyB9CiAKICAg
ICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTgzLDYgKzg0LDcgQEAgc3RydWN0IENDU2V0
dGluZ3MgewogICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKICAgICBib29sIHNob3dG
UFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgdXNl
RGFtYWdlVHJhY2tlcjsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDhhNTdiZmU5NTkzNzM0MjhiNmE4OWI5
YThhMmM4M2Y3OThiZjU5ZDEuLjJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2Zm
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00NSw2ICs0
NSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllcklt
cGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0
dXJlU2l6ZSk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29s
IHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRT
dXJmYWNlTGF5ZXJJRCk7CisKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CiAgICAgICAg
IGludCBsYXllcklkOwogICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhOwpAQCAtODMsNiArODUs
MjAgQEAgSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXll
clJlY3QoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1cm4gdmlzaWJsZUxheWVyUmVjdDsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorYm9vbCBDQ0xheWVyVHJlZUhvc3RDb21t
b246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSogbGF5ZXIsIGlu
dCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkKK3sKKyAgICAvLyBBIGxheWVyIHdpbGwgZWl0aGVyIGNv
bnRyaWJ1dGUgaXRzIG93biBjb250ZW50LCBvciBpdHMgcmVuZGVyIHN1cmZhY2UncyBjb250ZW50
LCB0bworICAgIC8vIHRoZSB0YXJnZXQgc3VyZmFjZS4gVGhlIGxheWVyIGNvbnRyaWJ1dGVzIGl0
cyBzdXJmYWNlJ3MgY29udGVudCB3aGVuIGJvdGggdGhlCisgICAgLy8gZm9sbG93aW5nIGFyZSB0
cnVlOgorICAgIC8vICAoMSkgVGhlIGxheWVyIGFjdHVhbGx5IGhhcyBhIHJlbmRlclN1cmZhY2Us
IGFuZAorICAgIC8vICAoMikgVGhlIGxheWVyJ3MgcmVuZGVyU3VyZmFjZSBpcyBub3QgdGhlIHNh
bWUgYXMgdGhlIHRhcmdldFN1cmZhY2UuCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UsIHRoZSBs
YXllciBqdXN0IGNvbnRyaWJ1dGVzIGl0c2VsZiB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisKKyAg
ICByZXR1cm4gbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+aWQoKSAhPSB0YXJnZXRT
dXJmYWNlTGF5ZXJJRDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IGRkMWFiNjMzZjliMDdkMDY1ZTExNDY2
MzU5ZWMxZDM1NTViOTZkNjYuLmNlYjc2Njc5Y2Y2ZDVlZjZiNzlhMjA3YmJkODcxODE2ZGZiYTVk
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJh
Y2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIENDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJT
dXJmYWNlKENDTGF5ZXJJbXBsKiBvd25pbmdMYXllcikKICAgICAsIG1fc3VyZmFjZVByb3BlcnR5
Q2hhbmdlZChmYWxzZSkKICAgICAsIG1fZHJhd09wYWNpdHkoMSkKIHsKKyAgICBtX2RhbWFnZVRy
YWNrZXIgPSBDQ0RhbWFnZVRyYWNrZXI6OmNyZWF0ZSgpOwogfQogCiBDQ1JlbmRlclN1cmZhY2U6
On5DQ1JlbmRlclN1cmZhY2UoKQpAQCAtMjM2LDYgKzIzOCwxMCBAQCB2b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiAgICAg
dHMgPDwgbV9kcmF3VHJhbnNmb3JtLm0yMSgpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0y
MigpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0yMygpIDw8ICIsICIgPDwgbV9kcmF3VHJh
bnNmb3JtLm0yNCgpIDw8ICIgIC8vICAiOwogICAgIHRzIDw8IG1fZHJhd1RyYW5zZm9ybS5tMzEo
KSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMzIoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5z
Zm9ybS5tMzMoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMzQoKSA8PCAiICAvLyAgIjsK
ICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQxKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zv
cm0ubTQyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQzKCkgPDwgIiwgIiA8PCBtX2Ry
YXdUcmFuc2Zvcm0ubTQ0KCkgPDwgIlxuIjsKKworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQr
MSk7CisgICAgdHMgPDwgImRhbWFnZVJlY3QgaXMgcG9zKCIgPDwgbV9kYW1hZ2VUcmFja2VyLT5j
dXJyZW50RGFtYWdlUmVjdCgpLngoKSA8PCAiLCIgPDwgbV9kYW1hZ2VUcmFja2VyLT5jdXJyZW50
RGFtYWdlUmVjdCgpLnkoKSA8PCAiKSwgIjsKKyAgICB0cyA8PCAic2l6ZSgiIDw8IG1fZGFtYWdl
VHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKS53aWR0aCgpIDw8ICIsIiA8PCBtX2RhbWFnZVRy
YWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkuaGVpZ2h0KCkgPDwgIilcbiI7CiB9CiAKIGludCBD
Q1JlbmRlclN1cmZhY2U6Om93bmluZ0xheWVySWQoKSBjb25zdApAQCAtMjc1LDUgKzI4MSwxMCBA
QCBib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCB8fCBtX293bmluZ0xheWVyLT5sYXll
clByb3BlcnR5Q2hhbmdlZCgpOwogfQogCitib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVBy
b3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCAmJiAhbV9vd25pbmdMYXllci0+bGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoKTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggNGJkNGFmODU4MTk0MjY4Y2YwYzg1ZDNh
NmEwZDJkNDA5ZTBlYmNkOC4uZDBlMzVhMTc4NjU0MzdlZGQyYzg3MmRmYTYyMmMzNmIwZDQzYWRj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBjbGFzcyBDQ0xheWVy
SW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJl
OwpAQCAtMTAwLDYgKzEwMSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRQcm9wZXJ0eUNo
YW5nZWRGbGFnKCkgeyBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQgPSBmYWxzZTsgfQogICAgIGJv
b2wgc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0OworICAgIGJvb2wgc3VyZmFjZVByb3Bl
cnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCgpIGNvbnN0OworCisgICAgQ0NEYW1hZ2VUcmFj
a2VyKiBkYW1hZ2VUcmFja2VyKCkgY29uc3QgeyByZXR1cm4gbV9kYW1hZ2VUcmFja2VyLmdldCgp
OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwpAQCAtMTIwLDYg
KzEyNCwxMSBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fb3JpZ2luVHJh
bnNmb3JtOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKICAgICBWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0OworCisgICAgT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gbV9k
YW1hZ2VUcmFja2VyOworCisgICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIgd2hl
cmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCisgICAgRmxvYXRSZWN0
IG1fZGFtYWdlUmVjdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4
IGUwMTcxYWNkMTNhMWI5Y2MxOWRhYTUxYmJkM2YyM2E3N2Y2ZDg2NmMuLjEzNjkzZDNhY2M1YzFh
ODAyNjQ5YjYyYzMwZThiMzk3N2JhNWQ5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwog
ICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVz
dHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0Rh
bWFnZVRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCkBA
IC02MSw2ICs2Miw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVs
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVU
ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFn
ZVRyYWNrZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjM3OWQ2NGVkYmNjNjUwNDdjOWQ3ZWI5NDM4
Y2Q4M2U5ODkzMTVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcApAQCAtMCwwICsxLDc1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgiCisKKyNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwor
CituYW1lc3BhY2UgeworCit2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRl
cjsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8
UmVmUHRyPENDTGF5ZXJJbXBsPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworCisgICAgLy8gU2FuaXR5IGNoZWNrOiBUaGUgdGVzdCBpdHNlbGYg
c2hvdWxkIGNyZWF0ZSB0aGUgcm9vdCBsYXllcidzIHJlbmRlciBzdXJmYWNlLCBzbworICAgIC8v
ICAgICAgICAgICAgICAgdGhhdCB0aGUgc3VyZmFjZSAoYW5kIGl0cyBkYW1hZ2UgdHJhY2tlcikg
Y2FuIHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlCisgICAgLy8gICAgICAgICAgICAgICBjYWxscyB0
byB0aGlzIGZ1bmN0aW9uLgorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgQVNTRVJUX0ZBTFNFKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworfQorCit2b2lkIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3QpCit7CisgICAgLy8gVGhpcyBlbXVs
YXRlcyBvbmx5IHRoZSBzdGVwcyB0aGF0IGFyZSByZWxldmFudCB0byB0ZXN0aW5nIHRoZSBkYW1h
Z2UgdHJhY2tlcjoKKyAgICAvLyAgIDEuIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3NlcyBhbmQg
bGF5ZXJsaXN0cworICAgIC8vICAgMi4gdXBkYXRpbmcgYWxsIGRhbWFnZSB0cmFja2VycyBpbiB0
aGUgY29ycmVjdCBvcmRlcgorICAgIC8vICAgMy4gcmVzZXR0aW5nIGFsbCB1cGRhdGVSZWN0cyBh
bmQgcHJvcGVydHlDaGFuZ2VkIGZsYWdzIGZvciBhbGwgbGF5ZXJzIGFuZCBzdXJmYWNlcy4KKwor
ICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgLy8gSXRlcmF0ZSBiYWNrLXRvLWZyb250LCBz
byB0aGF0IGRhbWFnZSBjb3JyZWN0bHkgcHJvcGFnYXRlcyBmcm9tIGRlc2NlbmRhbnQgc3VyZmFj
ZXMgdG8gYW5jZXN0b3JzLgorICAgIGZvciAoaW50IGkgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllckxpc3RbaV0tPnJlbmRlclN1cmZhY2UoKTsK
KyAgICAgICAgdGFyZ2V0U3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0
Rm9yTmV4dEZyYW1lKHRhcmdldFN1cmZhY2UtPmxheWVyTGlzdCgpLCB0YXJnZXRTdXJmYWNlLT5v
d25pbmdMYXllcklkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbaV0tPm1hc2tMYXllcigpKTsK
KyAgICB9CisKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwor
fQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNl
KCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDIpOworCisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBy
b290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJvb3QtPnNldEJv
dW5kcyhJbnRTaXplKDUwMCwgNTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSg1MDAsIDUw
MCkpKTsKKworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMCwgMTAwKSk7Cisg
ICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQt
PnNldEJvdW5kcyhJbnRTaXplKDMwLCAzMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworCisgICAgcmV0dXJuIHJvb3QucmVs
ZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhU
d29TdXJmYWNlcygpCit7CisgICAgLy8gVGhpcyB0ZXN0IHRyZWUgaGFzIHR3byByZW5kZXIgc3Vy
ZmFjZXM6IG9uZSBmb3IgdGhlIHJvb3QsIGFuZCBvbmUgZm9yCisgICAgLy8gY2hpbGQxLiBBZGRp
dGlvbmFsbHksIHRoZSByb290IGhhcyBhIHNlY29uZCBjaGlsZCBsYXllciwgYW5kIGNoaWxkMSBo
YXMgdHdvCisgICAgLy8gY2hpbGRyZW4gb2YgaXRzIG93bi4KKworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg1KTsKKworICAg
IHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6
ZSg1MDAsIDUwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoNTAwLCA1MDApKSk7CisKKyAg
ICBjaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLCAxMDApKTsKKyAgICBjaGlsZDEt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQxLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgzMCwgMzApKTsKKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41KTsgLy8gd2l0
aCBhIGNoaWxkIHRoYXQgZHJhd3NDb250ZW50LCB0aGlzIHdpbGwgY2F1c2UgdGhlIGxheWVyIHRv
IGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisgICAgY2hpbGQxLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOyAvLyB0aGlzIGxheWVyIGRvZXMgbm90IGRyYXcsIGJ1dCBpcyBpbnRlbmRlZCB0
byBjcmVhdGUgaXRzIG93biByZW5kZXJTdXJmYWNlLgorCisgICAgY2hpbGQyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDExLCAxMSkpOworICAgIGNoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDo6emVybygpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDE4LCAxOCkpOwor
ICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZDEtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLCAyMDApKTsKKyAgICBncmFuZENoaWxkMS0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBncmFuZENoaWxkMS0+c2V0Qm91bmRz
KEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQxLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTAsIDE5MCkpOwor
ICAgIGdyYW5kQ2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7CisgICAgZ3JhbmRDaGlsZDIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGls
ZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOworICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIHJldHVybiBy
b290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQW5kU2V0
VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICAvLyBTZXR1cCBpbmNs
dWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3aGljaCBhbHdheXMgZGFtYWdlcyBldmVy
eXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFjdHVhbGx5IHBlcmZvcm0gc3BlY2lmaWMg
dGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIHJl
dHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRl
QW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKworICAgIC8vIFNl
dHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1h
Z2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBz
cGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwor
CisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXJU
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJpdmF0ZToKKyAgICAvLyBGb3IgdGVzdGlu
ZyBwdXJwb3NlcywgZmFrZSB0aGF0IHdlIGFyZSBvbiB0aGUgaW1wbCB0aHJlYWQuCisgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7Cit9OworCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKQoreworICAg
IC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaW1wbGUgdGVzdCB0cmVlIHdpbGwgYWN0dWFsbHkg
cHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAgLy8gc3VyZmFjZXMgYW5kIGxheWVyIGxp
c3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0
VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigyKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVY
UEVDVF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+
aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwgNTAwLCA1MDApLCByb290RGFtYWdlUmVjdCk7
Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlDaGVja1Rlc3RUcmVlV2l0
aFR3b1N1cmZhY2VzKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wbGV4IHRl
c3QgdHJlZSB3aWxsIGFjdHVhbGx5IHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlbmRlcgorICAgIC8v
IHN1cmZhY2VzIGFuZCBsYXllciBsaXN0cy4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgRmxvYXRSZWN0
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisKKyAgICBBU1NFUlRfVFJVRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigzKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXpl
KCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSByZW5kZXIgc3Vy
ZmFjZSBmb3IgY2hpbGQxIG9ubHkgaGFzIGEgY29udGVudFJlY3QgdGhhdCBlbmNsb3NlcyBncmFu
ZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIsIGJlY2F1c2UgY2hpbGQxIGRvZXMgbm90IGRyYXcgY29u
dGVudC4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTkwLCAxOTAsIDE2LCAx
OCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDAsIDAsIDUwMCwgNTAwKSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VU
cmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVXBkYXRlUmVjdHMpCit7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisK
KyAgICAvLyBDQVNFIDE6IFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUg
Y29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UuCisgICAgLy8KKyAgICBjaGlsZC0+
c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxMiwgMTMpKTsKKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIG9uIHRo
ZSBzdXJmYWNlIHNob3VsZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAoMTAsIDExKSByZWxh
dGl2ZSB0byB0aGUgY2hpbGQgKDEwMCwgMTAwKS4KKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTEwLCAxMTEsIDEy
LCAxMyksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogVGhlIHNhbWUgdXBkYXRl
IHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVjZXMgdGhlIHNhbWUgZGFtYWdlLgorICAg
IC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMTAsIDExMSwg
MTIsIDEzKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0aW5nIGEgZGlm
ZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5ldyB1cGRhdGUg
cmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCByZWdpb24uCisgICAgLy8KKyAg
ICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjAsIDI1LCAxLCAyKSk7CisgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIERhbWFnZSBwb3NpdGlv
biBvbiB0aGUgc3VyZmFjZSBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDIwLCAy
NSkgcmVsYXRpdmUgdG8gdGhlIGNoaWxkICgxMDAsIDEwMCkuCisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTIwLCAxMjUsIDEsIDIp
LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JQcm9wZXJ0eUNoYW5nZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICAvLyBDQVNF
IDE6IFRoZSBsYXllcidzIHByb3BlcnR5IGNoYW5nZWQgZmxhZyB0YWtlcyBwcmlvcml0eSBvdmVy
IHVwZGF0ZSByZWN0LgorICAgIC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0
KDEwLCAxMSwgMTIsIDEzKSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIC0g
d2Ugc2hvdWxkIG5vdCBoYXZlIGFjY2lkZW50YWxseSBjcmVhdGVkIGEgc2VwYXJhdGUgcmVuZGVy
IHN1cmZhY2UgZm9yIHRoZSB0cmFuc2x1Y2VudCBsYXllci4KKyAgICBBU1NFUlRfRkFMU0UoY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MiksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIC8v
IERhbWFnZSBzaG91bGQgYmUgdGhlIGVudGlyZSBjaGlsZCBsYXllciBpbiB0YXJnZXRTdXJmYWNl
IHNwYWNlLgorICAgIEZsb2F0UmVjdCBleHBlY3RlZFJlY3QgPSBGbG9hdFJlY3QoMTAwLCAxMDAs
IDMwLCAzMCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBD
QVNFIDI6IElmIGEgbGF5ZXIgbW92ZXMgZHVlIHRvIHByb3BlcnR5IGNoYW5nZSwgaXQgZGFtYWdl
cyBib3RoIHRoZSBuZXcgbG9jYXRpb24KKyAgICAvLyAgICAgICAgIGFuZCB0aGUgb2xkIChleHBv
c2VkKSBsb2NhdGlvbi4gVGhlIG9sZCBsb2NhdGlvbiBpcyB0aGUgZW50aXJlIG9sZCBsYXllciwK
KyAgICAvLyAgICAgICAgIG5vdCBqdXN0IHRoZSB1cGRhdGVSZWN0LgorCisgICAgLy8gQ3ljbGUg
b25lIGZyYW1lIG9mIG5vIGNoYW5nZSwganVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4
dCByZWN0IGlzIG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0
eSgpKTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBsYXllciBtb3ZlbWVudC4KKyAg
ICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAsIDIzMCkpOworICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBFeHBlY3QgZGFtYWdlIHRvIGJl
IHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgcHJldmlvdXMgb25lIGFuZCB0aGUgbmV3IG9uZS4KKyAg
ICBleHBlY3RlZFJlY3QudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KDIwMCwgMjMwLCAzMCwgMzAp
KTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4
cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2Vy
VGVzdCwgdmVyaWZ5RGFtYWdlRm9yVHJhbnNmb3JtZWRMYXllcikKK3sKKyAgICAvLyBJZiBhIGxh
eWVyIGlzIHRyYW5zZm9ybWVkLCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxkIHN0aWxsIGVuY2xvc2Ug
dGhlIGVudGlyZQorICAgIC8vIHRyYW5zZm9ybWVkIGxheWVyLgorCisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjsKKyAgICByb3RhdGlvbi5yb3RhdGUoNDUp
OworCisgICAgLy8gTm90ZSBjYXJlZnVsbHksIHRoZSBhbmNob3IgaXMgYWN0dWFsbHkgcGFydCBv
ZiBsYXllci0+cG9zaXRpb24oKS4gQnkgc2V0dGluZyBhbmNob3IKKyAgICAvLyB0byAoMC41LCAw
LjUpLCB0aGUgbGF5ZXIncyBwb3NpdGlvbiAoMTAwLCAxMDApIG5vdyByZWZlcnMgdG8gdGhlIGNl
bnRlciBvZiB0aGUKKyAgICAvLyBsYXllciwgbm90IHRoZSBjb3JuZXIuIFRoaXMgbWVhbnMgdGhl
IGxheWVyIGhhcyBhY3R1YWxseSBjaGFuZ2VkIHBvc2l0aW9uLgorICAgIGNoaWxkLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAuNSwgMC41KSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBsYXllciBhY3R1
YWxseSBtb3ZlZCB0byAoODUsIDg1KSwgZGFtYWdpbmcgaXRzIG9sZCBsb2NhdGlvbiBhbmQgbmV3
IGxvY2F0aW9uLgorICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg4NSwgODUsIDQ1LCA0NSksIHJvb3REYW1hZ2VSZWN0
KTsKKworICAgIC8vIFdpdGggdGhlIGFuY2hvciBvbiB0aGUgbGF5ZXIncyBjZW50ZXIsIG5vdyB3
ZSBjYW4gdGVzdCB0aGUgcm90YXRpb24gbW9yZQorICAgIC8vIGludHVpdGl2ZWx5LCBzaW5jZSBp
dCBhcHBsaWVzIGFib3V0IHRoZSBsYXllcidzIGFuY2hvci4KKyAgICBjaGlsZC0+c2V0VHJhbnNm
b3JtKHJvdGF0aW9uKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwor
CisgICAgLy8gU2luY2UgdGhlIGNoaWxkIGxheWVyIGlzIHNxdWFyZSwgcm90YXRpb24gYnkgNDUg
ZGVncmVlcyBhYm91dCB0aGUgY2VudGVyIHNob3VsZAorICAgIC8vIGluY3JlYXNlIHRoZSBzaXpl
IG9mIHRoZSBleHBlY3RlZCByZWN0IGJ5IHNxcnQoMiksIGNlbnRlcmVkIGFyb3VuZCAoMTAwLCAx
MDApLiBUaGUKKyAgICAvLyBvbGQgZXhwb3NlZCByZWdpb24gc2hvdWxkIGJlIGZ1bGx5IGNvbnRh
aW5lZCBpbiB0aGUgbmV3IHJlZ2lvbi4KKyAgICBkb3VibGUgZXhwZWN0ZWRXaWR0aCA9IDMwLjAg
KiBzcXJ0KDIuMCk7CisgICAgZG91YmxlIGV4cGVjdGVkUG9zaXRpb24gPSAxMDAuMCAtIDAuNSAq
IGV4cGVjdGVkV2lkdGg7CisgICAgRmxvYXRSZWN0IGV4cGVjdGVkUmVjdChleHBlY3RlZFBvc2l0
aW9uLCBleHBlY3RlZFBvc2l0aW9uLCBleHBlY3RlZFdpZHRoLCBleHBlY3RlZFdpZHRoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVk
UmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdMYXllcikKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQwMCwgMzgwKSk7CisgICAgY2hp
bGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0
Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgLy8gQ0FTRSAxOiBBZGRpbmcgYSBuZXcgbGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBh
cHByb3ByaWF0ZSBkYW1hZ2UuCisgICAgLy8KKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOwor
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkg
Y2hlY2sgLSBhbGwgMyBsYXllcnMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIHJlbmRlciBzdXJmYWNl
OyByZW5kZXIgc3VyZmFjZXMgYXJlIHRlc3RlZCBlbHNld2hlcmUuCisgICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMyksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCku
c2l6ZSgpKTsKKworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0MDAsIDM4MCwgNiwgOCksIHJvb3REYW1hZ2VSZWN0
KTsKKworICAgIC8vIENBU0UgMjogSWYgdGhlIGxheWVyIGlzIHJlbW92ZWQsIGl0cyBlbnRpcmUg
b2xkIGxheWVyIGJlY29tZXMgZXhwb3NlZCwgbm90IGp1c3QgdGhlCisgICAgLy8gICAgICAgICBs
YXN0IHVwZGF0ZSByZWN0LgorCisgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1h
Z2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0
aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuLCB0ZXN0IHJl
bW92aW5nIGNoaWxkMS4KKyAgICBjaGlsZDEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwMCwgMTAwLCAzMCwgMzApLCBy
b290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlE
YW1hZ2VGb3JNdWx0aXBsZUxheWVycykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KDQwMCwgMzgwKSk7CisgICAgY2hpbGQyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUo
NiwgOCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmFk
ZENoaWxkKGNoaWxkMik7CisKKyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUg
YWJvdmUgdHJlZSBtYW5pcHVsYXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1l
IGZyYW1lLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAv
LyBEYW1hZ2luZyB0d28gbGF5ZXJzIHNpbXVsdGFuZW91c2x5IHNob3VsZCBjYXVzZSBjb21iaW5l
ZCBkYW1hZ2UuCisgICAgLy8gLSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTog
RmxvYXRSZWN0KDEwMCwgMTAwLCAxLCAyKTsKKyAgICAvLyAtIGNoaWxkMiB1cGRhdGUgcmVjdCBp
biBzdXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoNDAwLCAzODAsIDMsIDQpOworICAgIGNoaWxkMS0+
c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMikpOworICAgIGNoaWxkMi0+c2V0VXBk
YXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMywgNCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwMCwgMTAwLCAzMDMsIDI4NCksIHJvb3RE
YW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFn
ZUZvck5lc3RlZFN1cmZhY2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNy
ZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJlbigpWzBdOworICAg
IEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0
OworCisgICAgLy8gQ0FTRSAxOiBEYW1hZ2UgdG8gYSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxk
IHByb3BhZ2F0ZSBwcm9wZXJseSB0byBhbmNlc3RvciBzdXJmYWNlLgorICAgIC8vCisgICAgZ3Jh
bmRDaGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjAwLCAyMDAsIDYs
IDgpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgzMDAsIDMwMCwgNiwgOCksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogU2Ft
ZSBhcyBwcmV2aW91cyBjYXNlLCBidXQgd2l0aCBhZGRpdGlvbmFsIGRhbWFnZSBlbHNld2hlcmUg
dGhhdCBzaG91bGQgYmUgcHJvcGVybHkgdW5pb25lZC4KKyAgICAvLyAtIGNoaWxkMSBzdXJmYWNl
IGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgzMDAsIDMwMCwgNiwgOCk7
CisgICAgLy8gLSBjaGlsZDIgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0
KDExLCAxMSwgMTgsIDE4KTsKKyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjcpOworICAg
IGNoaWxkMi0+c2V0T3BhY2l0eSgwLjcpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVj
dCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyMDAsIDIwMCwgNiwg
OCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDExLCAxMSwgMjk1LCAyOTcpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbURlc2NlbmRhbnRM
YXllcikKK3sKKyAgICAvLyBJZiBkZXNjZW5kYW50IGxheWVyIGNoYW5nZXMgYW5kIGFmZmVjdHMg
dGhlIGNvbnRlbnQgYm91bmRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZSwKKyAgICAvLyB0aGVuIHRo
ZSBlbnRpcmUgZGVzY2VuZGFudCBzdXJmYWNlIHNob3VsZCBiZSBkYW1hZ2VkLCBhbmQgaXQgc2hv
dWxkIGRhbWFnZSBpdHMKKyAgICAvLyBhbmNlc3RvciBzdXJmYWNlIHdpdGggdGhlIG9sZCBhbmQg
bmV3IHN1cmZhY2UgcmVnaW9ucy4KKworICAgIC8vIFRoaXMgaXMgYSB0cmlja3kgY2FzZSwgc2lu
Y2Ugb25seSB0aGUgZmlyc3QgZ3JhbmRDaGlsZCBjaGFuZ2VzLCBidXQgdGhlIGVudGlyZQorICAg
IC8vIHN1cmZhY2Ugc2hvdWxkIGJlIG1hcmtlZCBkaXJ0eS4KKworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNo
aWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJl
Y3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgxOTUsIDIwNSkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
CisgICAgLy8gVGhlIG5ldyBzdXJmYWNlIGJvdW5kcyBzaG91bGQgYmUgZGFtYWdlZCBlbnRpcmVs
eSwgZXZlbiB0aG91Z2ggb25seSBvbmUgb2YgdGhlIGxheWVycyBjaGFuZ2VkLgorICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAsIDE5MCwgMTEsIDIzKSwgY2hpbGREYW1hZ2VS
ZWN0KTsKKworICAgIC8vIERhbWFnZSB0byB0aGUgcm9vdCBzdXJmYWNlIHNob3VsZCBiZSB0aGUg
dW5pb24gb2YgY2hpbGQxJ3MgKmVudGlyZSogcmVuZGVyIHN1cmZhY2UKKyAgICAvLyAoaW4gdGFy
Z2V0IHNwYWNlKSwgYW5kIGl0cyBvbGQgZXhwb3NlZCBhcmVhIChhbHNvIGluIHRhcmdldCBzcGFj
ZSkuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5MCwgMjkwLCAxNiwgMjMp
LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2VzdG9yTGF5ZXIpCit7CisgICAgLy8gQW4g
YW5jZXN0b3Ivb3duaW5nIGxheWVyIGNoYW5nZXMgdGhhdCBhZmZlY3RzIHRoZSBwb3NpdGlvbi90
cmFuc2Zvcm0gb2YgdGhlIHJlbmRlcgorICAgIC8vIHN1cmZhY2UuIE5vdGUgdGhhdCBpbiB0aGlz
IGNhc2UsIHRoZSBsYXllclByb3BlcnR5Q2hhbmdlZCBmbGFnIGFscmVhZHkgcHJvcGFnYXRlcwor
ICAgIC8vIHRvIHRoZSBzdWJ0cmVlICh0ZXN0ZWQgaW4gQ0NMYXllckltcGx0ZXN0KSwgd2hpY2gg
ZGFtYWdlcyB0aGUgZW50aXJlIGNoaWxkMQorICAgIC8vIHN1cmZhY2UsIGJ1dCB0aGUgZGFtYWdl
IHRyYWNrZXIgc3RpbGwgbmVlZHMgdGhlIGNvcnJlY3QgbG9naWMgdG8gY29tcHV0ZSB0aGUKKyAg
ICAvLyBleHBvc2VkIHJlZ2lvbiBvbiB0aGUgcm9vdCBzdXJmYWNlLgorCisgICAgLy8gRklYTUU6
IHRoZSBleHBlY3RhdGlvbnMgb2YgdGhpcyB0ZXN0IGNhc2Ugc2hvdWxkIGNoYW5nZSB3aGVuIHdl
IGFkZCBzdXBwb3J0IGZvciBhCisgICAgLy8gICAgICAgIHVuaXF1ZSBzY2lzc29yUmVjdCBwZXIg
cmVuZGVyU3VyZmFjZS4gSW4gdGhhdCBjYXNlLCB0aGUgY2hpbGQxIHN1cmZhY2UKKyAgICAvLyAg
ICAgICAgc2hvdWxkIGJlIGNvbXBsZXRlbHkgdW5jaGFuZ2VkLCBzaW5jZSB3ZSBhcmUgb25seSB0
cmFuc2Zvcm1pbmcgaXQsIHdoaWxlIHRoZQorICAgIC8vICAgICAgICByb290IHN1cmZhY2Ugd291
bGQgYmUgZGFtYWdlZCBhcHByb3ByaWF0ZWx5LgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4o
KVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290
RGFtYWdlUmVjdDsKKworICAgIGNoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg1MCwgNTAp
KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBu
ZXcgc3VyZmFjZSBib3VuZHMgc2hvdWxkIGJlIGRhbWFnZWQgZW50aXJlbHkuCisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5MCwgMTkwLCAxNiwgMTgpLCBjaGlsZERhbWFnZVJl
Y3QpOworCisgICAgLy8gVGhlIGVudGlyZSBjaGlsZDEgc3VyZmFjZSBhbmQgdGhlIG9sZCBleHBv
c2VkIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBkYW1hZ2UgdGhlIHJvb3Qgc3VyZmFjZS4KKyAgICAv
LyAgLSBvbGQgY2hpbGQxIHN1cmZhY2UgaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3QoMjkwLCAy
OTAsIDE2LCAxOCkKKyAgICAvLyAgLSBuZXcgY2hpbGQxIHN1cmZhY2UgaW4gdGFyZ2V0IHNwYWNl
OiBGbG9hdFJlY3QoMjQwLCAyNDAsIDE2LCAxOCkKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMjQwLCAyNDAsIDY2LCA2OCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nUmVu
ZGVyU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5k
U2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VS
ZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIC8vIENBU0UgMTogSWYg
YSBkZXNjZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBiZWNv
bWVzIGV4cG9zZWQuCisgICAgLy8KKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMSk7CisgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0
aGF0IHRoZXJlIGlzIG9ubHkgb25lIHN1cmZhY2Ugbm93LgorICAgIEFTU0VSVF9GQUxTRShjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
NCksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5
MCwgMjkwLCAxNiwgMTgpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IElmIGEg
ZGVzY2VuZGFudCBzdXJmYWNlIGFwcGVhcnMsIGl0cyBlbnRpcmUgb2xkIGFyZWEgYmVjb21lcyBl
eHBvc2VkLgorCisgICAgLy8gQ3ljbGUgb25lIGZyYW1lIG9mIG5vIGNoYW5nZSwganVzdCB0byBz
YW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCByZWN0IGlzIG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQg
ZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7Cisg
ICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5p
c0VtcHR5KCkpOworCisgICAgLy8gVGhlbiBjaGFuZ2UgdGhlIHRyZWUgc28gdGhhdCB0aGUgcmVu
ZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41KTsK
KyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5
IGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX1RSVUUo
Y2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgxOTAsIDE5MCwgMTYsIDE4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMjkwLCAyOTAsIDE2LCAxOCksIHJvb3REYW1hZ2VSZWN0KTsKK30K
KworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeU5vRGFtYWdlV2hlbk5vdGhpbmdD
aGFuZ2VkKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVw
VGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBDQVNFIDE6IElmIG5vdGhp
bmcgY2hhbmdlcywgdGhlIGRhbWFnZSByZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAvLworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0
ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxk
RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0Lmlz
RW1wdHkoKSk7CisKKyAgICAvLyBDQVNFIDI6IElmIG5vdGhpbmcgY2hhbmdlcyB0d2ljZSBpbiBh
IHJvdywgdGhlIGRhbWFnZSByZWN0IHNob3VsZCBzdGlsbCBiZSBlbXB0eS4KKyAgICAvLworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0
ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxk
RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0Lmlz
RW1wdHkoKSk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFn
ZUZvclVwZGF0ZVJlY3RUaGF0RG9lc05vdERyYXdDb250ZW50KQoreworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07Cisg
ICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJl
Y3Q7CisKKyAgICAvLyBJbiBvdXIgc3BlY2lmaWMgdHJlZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNo
aWxkMSBzaG91bGQgbm90IGNhdXNlIGFueSBkYW1hZ2UgdG8gYW55CisgICAgLy8gc3VyZmFjZSBi
ZWNhdXNlIGl0IGRvZXMgbm90IGFjdHVhbGx5IGRyYXcgY29udGVudC4KKyAgICBjaGlsZDEtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDIpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworfQorCitU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYSkKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3
b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGls
ZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEt
PmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IGNo
aWxkMS0+Y2hpbGRyZW4oKVsxXTsKKworICAgIC8vIERhbWFnZSBvbiBhIHN1cmZhY2UgdGhhdCBo
YXMgYSByZWZsZWN0aW9uIHNob3VsZCBjYXVzZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdG8KKyAgICAv
LyByZWNlaXZlIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIGFuZCB0aGUgc3VyZmFjZSdzIHJlZmxlY3Rl
ZCBkYW1hZ2UuCisKKyAgICAvLyBGb3IgdGhpcyB0ZXN0IGNhc2UsIHdlIG1vZGlmeSBncmFuZENo
aWxkMiwgYW5kIGFkZCBncmFuZENoaWxkMyB0byBleHRlbmQgdGhlIGJvdW5kcworICAgIC8vIG9m
IGNoaWxkMSdzIHN1cmZhY2UuIFRoaXMgd2F5LCB3ZSBjYW4gdGVzdCByZWZsZWN0aW9uIGNoYW5n
ZXMgd2l0aG91dCBjaGFuZ2luZworICAgIC8vIGNvbnRlbnRCb3VuZHMgb2YgdGhlIHN1cmZhY2Uu
CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTgwLCAxODApKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQzID0gQ0NMYXllckltcGw6OmNyZWF0ZSg2
KTsKKyAgICBncmFuZENoaWxkMy0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyNDAsIDI0MCkpOwor
ICAgIGdyYW5kQ2hpbGQzLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGdyYW5kQ2hpbGQzLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBncmFuZENoaWxk
My0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwor
ICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBDQVNFIDE6IGFkZGluZyBhIHJlZmxlY3Rpb24g
YWJvdXQgdGhlIGxlZnQgZWRnZSBvZiBncmFuZENoaWxkMS4KKyAgICAvLworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0ZSg3KTsK
KyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7
CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJv
KCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlZmxlY3Rpb247CisgICAgcmVmbGVjdGlv
bi5zY2FsZTNkKC0xLjAsIDEuMCwgMS4wKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFRy
YW5zZm9ybShyZWZsZWN0aW9uKTsKKyAgICBncmFuZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKGdy
YW5kQ2hpbGQxUmVwbGljYSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERh
bWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBncmFuZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNo
b3VsZCBub3QgaW5jbHVkZSBpdHMgb3duIHJlcGxpY2EuIFRoZSBjaGlsZAorICAgIC8vIHN1cmZh
Y2UgZGFtYWdlIHNob3VsZCBpbmNsdWRlIHRoZSBub3JtYWwgYW5kIHJlcGxpY2Egc3VyZmFjZXMu
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDYsIDgpLCBncmFuZENo
aWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5NCwg
MjAwLCAxMiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDI5NCwgMzAwLCAxMiwgOCksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENB
U0UgMjogbW92aW5nIHRoZSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxkIGNhdXNlIGJvdGggdGhl
IG9yaWdpbmFsIGFuZCByZWZsZWN0ZWQKKyAgICAvLyAgICAgICAgIGFyZWFzIHRvIGJlIGRhbWFn
ZWQgb24gdGhlIHRhcmdldC4KKyAgICBJbnRSZWN0IG9sZENvbnRlbnRSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7CisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoMTk1LjAsIDIwNS4wKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBBU1NFUlRfRVEob2xkQ29udGVudFJlY3Qud2lkdGgoKSwgY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkud2lkdGgoKSk7CisgICAgQVNTRVJU
X0VRKG9sZENvbnRlbnRSZWN0LmhlaWdodCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKS5oZWlnaHQoKSk7CisKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5k
Q2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisKKyAgICAvLyBUaGUgY2hpbGQgc3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgbm9y
bWFsIGFuZCByZXBsaWNhIHN1cmZhY2VzIGZvciBib3RoIG9sZCBhbmQgbmV3IGxvY2F0aW9ucy4K
KyAgICAvLyAgLSBvbGQgbG9jYXRpb24gaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3QoMTk0LCAy
MDAsIDEyLCA4KQorICAgIC8vICAtIG5ldyBsb2NhdGlvbiBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0
UmVjdCgxODksIDIwNSwgMTIsIDgpCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KDAsIDAsIDYsIDgpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JF
Q1RfRVEoRmxvYXRSZWN0KDE4OSwgMjAwLCAxNywgMTMpLCBjaGlsZERhbWFnZVJlY3QpOworICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyODksIDMwMCwgMTcsIDEzKSwgcm9vdERh
bWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiByZW1vdmluZyB0aGUgcmVmbGVjdGlvbiBzaG91
bGQgY2F1c2UgdGhlIGVudGlyZSByZWdpb24gaW5jbHVkaW5nIHJlZmxlY3Rpb24KKyAgICAvLyAg
ICAgICAgIHRvIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgZ3JhbmRDaGlsZDEtPnNl
dFJlcGxpY2FMYXllcigwKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OworICAgIEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC53aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1
cmZhY2UoKS0+Y29udGVudFJlY3QoKS53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEob2xkQ29udGVu
dFJlY3QuaGVpZ2h0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLmhl
aWdodCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LCAyMDUsIDEyLCA4KSwg
Y2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjg5
LCAzMDUsIDEyLCA4KSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIC8vIElu
IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYW1hZ2UgdHJhY2tlciwgY2hhbmdl
cyB0byBtYXNrIGxheWVycyBzaG91bGQKKyAgICAvLyBkYW1hZ2UgdGhlIGVudGlyZSBjb3JyZXNw
b25kaW5nIHN1cmZhY2UuCisKKyAgICAvLyBTZXQgdXAgdGhlIG1hc2sgbGF5ZXIuCisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAg
IG1hc2tMYXllci0+c2V0UG9zaXRpb24oY2hpbGQtPnBvc2l0aW9uKCkpOworICAgIG1hc2tMYXll
ci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBtYXNrTGF5ZXItPnNl
dEJvdW5kcyhjaGlsZC0+Ym91bmRzKCkpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFza0xh
eWVyKTsKKworICAgIC8vIEFkZCBvcGFjaXR5IGFuZCBhIGdyYW5kQ2hpbGQgc28gdGhhdCB0aGUg
cmVuZGVyIHN1cmZhY2UgcGVyc2lzdHMgZXZlbiBhZnRlciB3ZSByZW1vdmUgdGhlIG1hc2suCisg
ICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5k
Q2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoMi4wLCAyLjApKTsKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXpl
KDIsIDIpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCBhIG5ldyBzdXJmYWNlIHdhcyBj
cmVhdGVkIGZvciB0aGUgY2hpbGQuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRlclN1cmZh
Y2UoKSk7CisKKyAgICAvLyBDQVNFIDE6IHRoZSB1cGRhdGVSZWN0IG9uIGEgbWFzayBsYXllciBz
aG91bGQgZGFtYWdlIHRoZSBlbnRpcmUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAgICBtYXNr
TGF5ZXItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEsIDIsIDMsIDQpKTsKKyAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJl
Y3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1h
Z2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDMwLCAz
MCksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IGEgcHJvcGVydHkgY2hhbmdl
IG9uIHRoZSBtYXNrIGxheWVyIHNob3VsZCBkYW1hZ2UgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFj
ZS4KKyAgICAvLworCisgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28g
dGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJl
dmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3Qu
aXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4gdGVzdCB0aGUgcHJvcGVydHkgY2hhbmdlLgorICAg
IG1hc2tMYXllci0+c2V0T3BhY2l0eSgwLjUpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMCwgMzApLCBjaGlsZERhbWFnZVJlY3QpOworCisg
ICAgLy8gQ0FTRSAzOiByZW1vdmluZyB0aGUgbWFzayBhbHNvIGRhbWFnZXMgdGhlIGVudGlyZSB0
YXJnZXQgc3VyZmFjZS4KKyAgICAvLworCisgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91
dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIg
ZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGls
ZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4gdGVzdCBtYXNrIHJlbW92YWwu
CisgICAgY2hpbGQtPnNldE1hc2tMYXllcigwKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+bGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IGEgcmVuZGVyIHN1cmZhY2Ugc3RpbGwg
ZXhpc3RzLgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAg
Y2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgwLCAwLCAzMCwgMzApLCBjaGlsZERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VU
cmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2spCit7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigp
WzBdOworCisgICAgLy8gQ2hhbmdlcyB0byBhIHJlcGxpY2EncyBtYXNrIHNob3VsZCBub3QgZGFt
YWdlIHRoZSBvcmlnaW5hbCBzdXJmYWNlLCBiZWNhdXNlIGl0IGlzCisgICAgLy8gbm90IG1hc2tl
ZC4gQnV0IGl0IGRvZXMgZGFtYWdlIHRoZSBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZS4KKworICAg
IC8vIENyZWF0ZSBhIHJlZmxlY3Rpb24gYWJvdXQgdGhlIGxlZnQgZWRnZSBvZiBncmFuZENoaWxk
MS4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNik7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDo6emVybygpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZWZsZWN0aW9u
OworICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAsIDEuMCk7CisgICAgZ3JhbmRDaGls
ZDFSZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlvbik7CisgICAgZ3JhbmRDaGlsZDEtPnNl
dFJlcGxpY2FMYXllcihncmFuZENoaWxkMVJlcGxpY2EpOworCisgICAgLy8gU2V0IHVwIHRoZSBt
YXNrIGxheWVyIG9uIHRoZSByZXBsaWNhIGxheWVyCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
ZXBsaWNhTWFza0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg3KTsKKyAgICByZXBsaWNhTWFz
a0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJlcGxpY2FNYXNr
TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcmVwbGljYU1h
c2tMYXllci0+c2V0Qm91bmRzKGdyYW5kQ2hpbGQxLT5ib3VuZHMoKSk7CisgICAgZ3JhbmRDaGls
ZDFSZXBsaWNhLT5zZXRNYXNrTGF5ZXIocmVwbGljYU1hc2tMYXllcik7CisKKyAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlIGFwcHJvcHJpYXRlIHJlbmRlciBzdXJmYWNlcyB3ZXJlIGNyZWF0ZWQKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIENBU0UgMTogYSBw
cm9wZXJ0eSBjaGFuZ2Ugb24gdGhlIG1hc2sgc2hvdWxkIGRhbWFnZSBvbmx5IHRoZSByZWZsZWN0
ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICByZXBsaWNhTWFza0xheWVyLT5z
ZXRPcGFjaXR5KDAuNik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
KworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBG
bG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9UUlVFKGdyYW5k
Q2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDE5NCwgMjAwLCA2LCA4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0Ug
MjogcmVtb3ZpbmcgdGhlIHJlcGxpY2EgbWFzayBkYW1hZ2VzIG9ubHkgdGhlIHJlZmxlY3RlZCBy
ZWdpb24gb24gdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vCisgICAgZ3JhbmRDaGlsZDFSZXBs
aWNhLT5zZXRNYXNrTGF5ZXIoMCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGlsZDEtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIGNoaWxk
RGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkRGFtYWdlUmVj
dC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTQsIDIw
MCwgNiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggOTQy
YmVjMmY3MTNhMjg0NTIxYmFhOTQzZWNjYzQ0ZTIwYjhhYzVmZi4uODkwNTA1MGU2NjczOTMyNjVi
OTRjOWZiMmY1NWEzZGE5YjNmMWZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcApAQCAtMzUsMjEgKzM1LDIxIEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIHsKIAogI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllf
U1VCVFJFRV9DSEFOR0VEKGNvZGVUb1Rlc3QpICAgICAgICAgICAgICAgICAgXAotICAgIHJvb3Qt
PnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9U
UlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQtPmxheWVy
UHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVf
RElEX05PVF9DSEFOR0UoY29kZVRvVGVzdCkgICAgICAgICAgIFwKLSAgICByb290LT5yZXNldFBy
b3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFMU0Uocm9v
dC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZC0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSkKIAogI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllfT05MWV9MQVlFUl9DSEFO
R0VEKGNvZGVUb1Rlc3QpICAgICAgICAgICAgICAgXAotICAgIHJvb3QtPnJlc2V0UHJvcGVydHlD
aGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJv
b3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKHJvb3QtPmxheWVy
UHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVD
VF9GQUxTRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMTE1LDcgKzExNSw3IEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlM
YXllckNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX09O
TFlfTEFZRVJfQ0hBTkdFRChyb290LT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmdyYXkpKTsK
IAogICAgIC8vIFNwZWNpYWwgY2FzZTogY2hlY2sgdGhhdCBzdWJsYXllciB0cmFuc2Zvcm0gY2hh
bmdlcyBhbGwgbGF5ZXIncyBkZXNjZW5kYW50cywgYnV0IG5vdCB0aGUgbGF5ZXIgaXRzZWxmLgot
ICAgIHJvb3QtPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICByb290
LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogICAgIHJvb3QtPnNldFN1Ymxh
eWVyVHJhbnNmb3JtKGFyYml0cmFyeVRyYW5zZm9ybSk7CiAgICAgRVhQRUNUX0ZBTFNFKHJvb3Qt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXllclBy
b3BlcnR5Q2hhbmdlZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGM5YTJmYzY1MTMyNTY2
YjQyNjNhMDA2ODhmNTdjM2Y1MjdiMTYxYjIuLjgzYTQ0ZWNhYTBmYjIyMDdlNTEyMzNlZDQxZmE2
YThmZTQ2YTIyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAKKyNpbmNsdWRlICJDQ0xheWVy
VHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzYsMjcgKzM3LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKLS8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFk
IG9mIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgZ3Rlc3QgZXJyb3JzIGNhbiBnaXZlIHVzIHVzZWZ1
bCBsaW5lIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0LgotLy8gRXZlbiB0aG91Z2gg
VHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUsIHRoZXJlIGFyZSBtYW55IG90
aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkLCBhbmQgc28gd2UKLS8vIG9ubHkgZXhwZWN0
IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgotI2Rl
ZmluZSBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZCwgYWN0dWFsKSAgICBcCi0g
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgIFwK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEyKCkpOyAg
XAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMygpLCAoYWN0dWFsKS5tMTMoKSk7
ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChhY3R1YWwpLm0xNCgp
KTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVhbCkubTIx
KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMigpLCAoYWN0dWFsKS5t
MjIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwp
Lm0yMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwgKGFjdHVh
bCkubTI0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMSgpLCAoYWN0
dWFsKS5tMzEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMyKCksIChh
Y3R1YWwpLm0zMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzMoKSwg
KGFjdHVhbCkubTMzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zNCgp
LCAoYWN0dWFsKS5tMzQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQx
KCksIChhY3R1YWwpLm00MSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
NDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm00MygpLCAoYWN0dWFsKS5tNDMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQotCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQogewogICAgIGxheWVyLT5zZXRU
cmFuc2Zvcm0odHJhbnNmb3JtKTsKQEAgLTEyMCwxMiArMTAwLDEyIEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0Zvck5vT3BMYXllcikKIAogICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsK
IAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBwYXJlbnQt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRp
dHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRl
bnRpdHlNYXRyaXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlN
YXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBn
cmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JTaW5nbGVMYXllcikKQEAgLTE0NCw4ICsxMjQsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBhcmJpdHJh
cnlUcmFuc2xhdGlvbi50cmFuc2xhdGUoMTAuMCwgMjAuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGFyYml0cmFyeVRyYW5z
bGF0aW9uLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJ
bnRTaXplKDAsIDApLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1h
dHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgLy8gQ2FzZSAyOiBzZXR0aW5nIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIHNob3Vs
ZCByZXN1bHQgaW4gYSBkcmF3IHRyYW5zZm9ybSB0aGF0IHRyYW5zbGF0ZXMgdG8gaGFsZiB0aGUg
d2lkdGggYW5kIGhlaWdodC4KICAgICAvLyAgICAgICAgIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNm
b3JtIHNob3VsZCByZW1haW4gYXMgdGhlIGlkZW50aXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90IGRl
YWwgd2l0aCB0cmFuc2Zvcm1pbmcgdG8vZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KQEAg
LTE1MywyMiArMTMzLDIyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIHRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNs
YXRlKDUuMCwgNi4wKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAg
IGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50
aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNl
IDM6IFRoZSBhbmNob3IgcG9pbnQgYnkgaXRzZWxmICh3aXRob3V0IGEgbGF5ZXIgdHJhbnNmb3Jt
KSBzaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHRyYW5zZm9ybXMuCiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiks
IEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0
cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IEEgY2hhbmdlIGluICJhY3R1YWwiIHBv
c2l0aW9uIGFmZmVjdHMgYm90aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0
cmFuc2Zvcm0uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25UcmFuc2Zvcm07CiAg
ICAgcG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCA0LjJmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRy
YW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2Vu
dGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CiAKICAgICAvLyBDYXNlIDU6IEluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9y
bXMsIHRoZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRp
b25Ub0NlbnRlci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVkIGJ5CiAgICAgLy8gICAgICAgICB1c2lu
ZyBhIHNjYWxlIHRyYW5zZm9ybSwgYmVjYXVzZSBzY2FsZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5v
dCBjb21tdXRhdGl2ZS4KQEAgLTE3Niw4ICsxNTYsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBsYXllclRyYW5z
Zm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIp
LCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5ZXJUcmFu
c2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSwgbGF5ZXItPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
bGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGxheWVyVHJhbnNmb3Jt
LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDY6IFRoZSBs
YXllciB0cmFuc2Zvcm0gc2hvdWxkIG9jY3VyIHdpdGggcmVzcGVjdCB0byB0aGUgYW5jaG9yIHBv
aW50LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CkBAIC0x
ODUsOCArMTY1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRS
ZXN1bHQgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlv
blRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41
ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2Up
OwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
UmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBw
b3NpdGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgogICAgIC8vICAgICAg
ICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKQEAgLTE5NCw4ICsx
NzQsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNG
b3JTaW5nbGVMYXllcikKICAgICBleHBlY3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICog
dHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hv
ci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQo
KSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYp
LCBGbG9hdFBvaW50KDUuMGYsIDEuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBl
eGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCAq
IHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQpAQCAtMjE2LDEwICsxOTYsMTAgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxl
SGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRy
aXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50
aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKIAogICAgIC8vIENhc2UgMjogcGFyZW50J3MgcG9zaXRpb24gYWZmZWN0cyBjaGlsZCBhbmQg
Z3JhbmRDaGlsZC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRQb3NpdGlvblRyYW5z
Zm9ybTsKQEAgLTIyOCwxMCArMjA4LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNp
emUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3Jh
bmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZh
bHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRp
b25UcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJh
bnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25U
cmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVu
dFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIENhc2UgMzogcGFyZW50J3MgbG9jYWwgdHJhbnNmb3JtIGFmZmVjdHMgY2hpbGQg
YW5kIGdyYW5kY2hpbGQKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRyYW5z
Zm9ybTsKQEAgLTI0MywxMCArMjIzLDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNp
emUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3Jh
bmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZh
bHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwogCiAgICAgLy8gQ2FzZSA0OiBwYXJlbnQncyBzdWJsYXllck1hdHJpeCBhZmZlY3Rz
IGNoaWxkIGFuZCBncmFuZGNoaWxkCiAgICAgLy8gICAgICAgICBzY2FsaW5nIGlzIHVzZWQgaGVy
ZSBhZ2FpbiBzbyB0aGF0IHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMgaXMgcHJv
cGVybHkgdGVzdGVkLgpAQCAtMjY0LDEwICsyNDQsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYs
IDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdy
YW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5z
Zm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRy
YW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDU6IHNhbWUgYXMgQ2Fz
ZSA0LCBleGNlcHQgdGhhdCBjaGlsZCBkb2VzIHByZXNlcnZlIDNELCBzbyB0aGUgZ3JhbmRDaGls
ZCBzaG91bGQgcmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5lZCBjb21wb3NpdGUgdHJhbnNmb3JtLgog
ICAgIC8vCkBAIC0yNzUsMTAgKzI1NSwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRT
aXplKDE2LCAxOCksIHRydWUpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3Jh
bmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZh
bHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQpAQCAtMzIxLDEyICszMDEsMTIgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVy
U3VyZmFjZSkKIAogICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGRyYXcgdHJhbnNmb3JtIHNob3Vs
ZCByZWZlciB0byBpdHMgbmV3IHJlbmRlciBzdXJmYWNlOyB0aGV5IG9ubHkgZGlmZmVyIGJ5IGEg
dHJhbnNsYXRpb24gdG8gY2VudGVyLgogICAgIC8vIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3Jt
LCBob3dldmVyLCBzaG91bGQgc3RpbGwgcmVmZXIgdG8gdGhlIHJvb3QuCi0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIFdpdGhvdXQgY2xpcHBpbmcsIHRoZSBvcmlnaW4gdHJhbnNmb3JtIGFuZCBkcmF3
IHRyYW5zZm9ybSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UpIHNob3VsZCBiZSB0aGUgc2FtZS4K
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxk
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAogfQogCkBAIC00MjMsMzgg
KzQwMywzOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vICBub3RlIHRoYXQgZHJhdyB0cmFu
c2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBuZWFyZXN0IGFuY2VzdG9y
IHJlbmRlciBzdXJmYWNlCiAgICAgLy8gIGJ1dCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtcyBhcmUg
ZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdC4KICAgICAvLwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlv
blRvQ2VudGVyLCBncmFuZENoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVu
dC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSb290LT5kcmF3VHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICog
QiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSb290LT5kcmF3VHJhbnNm
b3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0Nl
bnRlciwgcmVuZGVyU3VyZmFjZTEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMxLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICog
QiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRv
Q2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRP
ZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzEt
PmRyYXdUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFu
c2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNo
aWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMi0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRy
YW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKIAogICAgIC8vIFZlcmlmeSBsYXllciBzY3Jl
ZW4tc3BhY2UgdHJhbnNmb3JtcwogICAgIC8vCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQSwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChBICogQiAqIEEsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwg
Z3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCBjaGlsZE9m
Um9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAq
IEEsIHJlbmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgcmVu
ZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAq
IEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIg
KiBBLCByZW5kZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJT
Mi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIg
KiBBICogQiAqIEEsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSAq
IEIgKiBBLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAg
Ly8gVmVyaWZ5IHJlbmRlciBzdXJmYWNlIHRyYW5zZm9ybXMuCiAgICAgLy8KICAgICAvLyBPcmln
aW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDEgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVj
dCB0byByb290LgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVu
ZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+
cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAgICAgLy8gT3JpZ2luIHRyYW5z
Zm9ybSBvZiByZW5kZXIgc3VyZmFjZSAyIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcmVu
ZGVyIHN1cmZhY2UgMi4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSwgcmVu
ZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5yZW5k
ZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFNhbml0eSBjaGVjay4g
SWYgdGhlc2UgZmFpbCB0aGVyZSBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYu
CiAgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhhdCB3ZSBjb3JyZWN0bHkgc2V0IHVwIHRyYW5zZm9y
bXMgc28gdGhhdCB0aGUgeS1jb21wb25lbnQgb2YgdGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENv
bW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBiODNkYWNhYmEzY2ZlMDFjYWNhM2FiYTU5YmY3ODc2NGE3ZGQx
YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NMYXllclRyZWVUZXN0Q29tbW9u
X2gKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworLy8gVGhpcyBpcyBhIG1hY3JvIGluc3Rl
YWQgb2YgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBh
IHRlc3QgZmFpbGVkLgorI2RlZmluZSBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZCwgYWN0
dWFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7IFwKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRp
b24oKS55KCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLndpZHRo
KCksIChhY3R1YWwpLnNpemUoKS53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCisvLyBU
aGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1
bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KKy8vIEV2ZW4gdGhvdWdoIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUgZG91YmxlIHByZWNpc2lvbiwgdGhlcmUgYXJlIG1h
bnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQgdGhhdCBhZmZlY3QKKy8vIHRoZSB0
cmFuc2Zvcm1zLCBhbmQgc28gd2Ugb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0
byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCisjZGVmaW5lIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9F
USgoZXhwZWN0ZWQpLm0xMSgpLCAoYWN0dWFsKS5tMTEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEyKCkpOyAgICAgICAgICBc
CisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwpLm0xMygpKTsg
ICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xNCgpLCAoYWN0dWFs
KS5tMTQoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEo
KSwgKGFjdHVhbCkubTIxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTIyKCksIChhY3R1YWwpLm0yMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMoKSk7ICAgICAgICAgIFwKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwgKGFjdHVhbCkubTI0KCkpOyAgICAgICAg
ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMxKCksIChhY3R1YWwpLm0zMSgp
KTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0
dWFsKS5tMzIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MzMoKSwgKGFjdHVhbCkubTMzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9G
TE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFsKS5tNDEoKSk7ICAgICAgICAgIFwKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgICAg
ICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00
MygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAo
YWN0dWFsKS5tNDQoKSkKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIENDTGF5ZXJUcmVl
VGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA3MDQ1NDRiNmFkYjMzZDNhMGZmYTM1ZThlNzQyZDQz
N2RjMWVmZGZlLi5jM2IzNjZkZGEzMjM3NDY4Njg2ZmJmODNlZDRmZTMzOTBmODJmMzM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHAKQEAgLTU5LDE4ICs1OSwxNiBAQCBURVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHZlcmlm
eVN1cmZhY2VDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEFTU0VSVF9UUlVFKG93bmlu
Z0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3Vy
ZmFjZSA9IG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgSW50UmVjdCB0ZXN0UmVj
dCA9IEludFJlY3QoSW50UG9pbnQoMywgNCksIEludFNpemUoNSwgNikpOwotCi0gICAgb3duaW5n
TGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICBvd25pbmdM
YXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAogICAgIC8vIEN1cnJl
bnRseSwgdGhlIGNvbnRlbnRSZWN0LCBjbGlwUmVjdCwgYW5kIG93bmluZ0xheWVyLT5sYXllclBy
b3BlcnR5Q2hhbmdlZCgpIGFyZQogICAgIC8vIHRoZSBvbmx5IHNvdXJjZXMgb2YgY2hhbmdlLgog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0
Q2xpcFJlY3QodGVzdFJlY3QpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9DSEFO
R0VEKHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHRlc3RSZWN0KSk7CiAKLSAgICBvd25p
bmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOwogICAgIG93bmlu
Z0xheWVyLT5zZXRPcGFjaXR5KDAuNWYpOwogICAgIEVYUEVDVF9UUlVFKHJlbmRlclN1cmZhY2Ut
PnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSk7Ci0gICAgb3duaW5nTGF5ZXItPnJlc2V0UHJvcGVy
dHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICBvd25pbmdMYXllci0+cmVzZXRBbGxDaGFu
Z2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAogICAgIC8vIFNldHRpbmcgdGhlIHN1cmZhY2UgcHJv
cGVydGllcyB0byB0aGUgc2FtZSB2YWx1ZXMgYWdhaW4gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVk
ICJjaGFuZ2UiLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdF
KHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KHRlc3RSZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGVkOWNlY2I5
NjM2NjE5YWNkMjVlNDAyMDU5MWFkYTZkMzYzYTkzMWIuLjc4MDlkMThhNDM2NzBkNDhhYTc4NjFm
Yjg3MDQ2NTYyODU5M2ZhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiwxMCArMjYsMTIgQEAKIAogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgog
I2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2lu
ZyA6OnRlc3Rpbmc6Ok1vY2s7CiB1c2luZyA6OnRlc3Rpbmc6Ol87CiB1c2luZyA6OnRlc3Rpbmc6
OkF0TGVhc3Q7CkBAIC0xMzIsMTQgKzEzNCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgdmVyaWZ5
VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKICAgICB9CiAKLSAgICB2b2lkIHZlcmlmeUZsb2F0UmVj
dHNBbG1vc3RFcXVhbChjb25zdCBGbG9hdFJlY3QmIGV4cGVjdGVkLCBjb25zdCBGbG9hdFJlY3Qm
IGFjdHVhbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5s
b2NhdGlvbigpLngoKSwgYWN0dWFsLmxvY2F0aW9uKCkueCgpKTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKGV4cGVjdGVkLmxvY2F0aW9uKCkueSgpLCBhY3R1YWwubG9jYXRpb24oKS55KCkpOwot
ICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQuc2l6ZSgpLndpZHRoKCksIGFjdHVhbC5z
aXplKCkud2lkdGgoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCku
aGVpZ2h0KCksIGFjdHVhbC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIH0KLQogICAgIE1vY2tMYXll
ckRlbGVnYXRlIG1fc2lsZW50RGVsZWdhdGUsIG1fcGFyZW50RGVsZWdhdGU7CiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IG1fcGFyZW50LCBtX2NoaWxkMSwgbV9jaGlsZDIsIG1fY2hpbGQzLCBt
X2dyYW5kQ2hpbGQxLCBtX2dyYW5kQ2hpbGQyLCBtX2dyYW5kQ2hpbGQzOwogfTsKQEAgLTU2Miwy
NCArNTU2LDI0IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3Bs
YXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAKICAgICAvLyBDYXNlIDE6IGJhc2ljCiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkxKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENh
c2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25lZCBvZiBkaXJ0eTEgYW5k
IGRpcnR5Mi4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTIpKTsKLSAgICB2
ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYs
IDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0
eVJlY3QoKSk7CiAKICAgICAvLyBDYXNlIDM6IGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2Ug
YmVjYXVzZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KGVtcHR5RGlydHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFs
KEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYs
IDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA0
OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQg
aXRzIGJvdW5kcwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRzRGly
dHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4w
ZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIu
MGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgNTogc2V0TmVlZHNE
aXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRp
cmUgYm91bmRzIHRvIGJlIGRpcnR5LAogICAgIC8vICAgICAgICAgb3ZlcnJpZGluZyBhbnkgZXhp
c3RpbmcgZGlydHkgcmVjdC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKLSAg
ICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMu
d2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRo
KCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAg
IC8vIHJlc2V0TmVlZHNEaXNwbGF5IHNob3VsZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5kIE5P
VCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNw
bGF5KCkpOwpAQCAtNTk2LDEzICs1OTAsMTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBj
aGVja1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5
ID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CiAKICAgICB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyh0ZXN0Qm91bmRzKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwo
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUw
MS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICB0ZXN0TGF5ZXIt
PnJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJl
Y3QoKS5pc0VtcHR5KCkpOwogCiAgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkp
OwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eSwgdGVzdExheWVyLT5kaXJ0
eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHksIHRlc3RMYXllci0+ZGly
dHlSZWN0KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlD
aGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCkBAIC02NTYsNyArNjUwLDcgQEAgVEVTVF9GKExh
eWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9y
KQogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxh
eQogICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBh
bmQgY2hhbmdlIHRoZSBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNp
emUoNSwgMTApKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRl
c3RMYXllci0+ZGlydHlSZWN0KCkpOwogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXko
KTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116839</attachid>
            <date>2011-11-28 15:31:13 -0800</date>
            <delta_ts>2011-11-28 17:49:13 -0800</delta_ts>
            <desc>oops, removed remaining WTF now</desc>
            <filename>bug-72520-20111128153112.patch</filename>
            <type>text/plain</type>
            <size>106585</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJiNDQ3MmEwNjdmMmFh
NWE3NzM2MWFiZjgyOGQ2OGNkYzM1MjFiNS4uYjkxZjNlMWQxY2E5ZmQ0OTc1MDNmZmY5OWY1MDA3
YjFiZWFiNmM2MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpj
b21wdXRlRGFtYWdlRnJvbVN1cmZhY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEZpeCBBc3BlY3QgUmF0aW8gUHJvcGVydHkgSW5oZXJpdGFuY2UgQW5kIE1ha2Ug
dGhlIENvbXB1dGVkIFZhbHVlIEVxdWFsIHRoZSBTcGVjaWZpZWQgVmFsdWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMjEzZGZmZGI3ZTVmMGI5YWRjMWMzMzU5Y2IyOGIyMDFlMzg2ZjFk
Ni4uZDgxMGI2YWZhODA5YTQ1ODI1ZTFlNDdjZDE2NmY5MTdjMjA3Yzg5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBD
Q0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBh
IHN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5n
T25lRnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZh
Y2VzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9u
ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorCiAyMDExLTExLTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxMjczLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNkMTJhNzhiZDFlMDllZDZkNjZjM2YzMDUwMmY4MzI5MDkwMDI4YWEuLjcwYjNi
MTBjM2M4OGYyM2I4YTAyYTc4MzYwY2Q0MTA0ODBlNmFiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1NzEsNiArMzU3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZWJjMzk0YzRjNWRhZDMxNmNjZGJk
YTYxNTUyNGVmOTA3YTI0MDU2Yi4uZTQxODllYzc5Njk1MmRjN2QxMWU1YTg5MTZkMzc1MzViMWE3
NzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
VHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgpAQCAtMzMxLDYgKzMzMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAg
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworCiAgICAgICAgICAgICBpZiAocmVu
ZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkpOwogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CkBAIC0zNDUsNyArMzQ3LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGEKICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQg
c3RhcnQgYnkgYXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5v
dGVkIGFzIHRoZXkgb2NjdXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5n
ZWRGbGFnRm9yU3VidHJlZSgpOworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJh
Y2tpbmdGb3JTdWJ0cmVlKCk7CiB9CiAKIApAQCAtNTgzLDcgKzU4NSw3IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdl
dFN1cmZhY2UpIHsKKyAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNl
Q29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93
bmluZ0xheWVySWQoKSkpIHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0
aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNl
KCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5Mzk5Yzg3Yjg3ZWY1ZjVjZGVjY2M2
YTBlODA1ODQwYjExMTlkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAsMCArMSwz
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c093blB0cjxDQ0RhbWFnZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VU
cmFja2VyOjpDQ0RhbWFnZVRyYWNrZXIoKQoreworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5ID0g
YWRvcHRQdHIobmV3IFJlY3RNYXApOworICAgIG1fbmV4dFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIo
bmV3IFJlY3RNYXApOworfQorCitDQ0RhbWFnZVRyYWNrZXI6On5DQ0RhbWFnZVRyYWNrZXIoKQor
eworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFt
ZShjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJn
ZXRTdXJmYWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7
CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSAiZGFtYWdlIHJlY3Qi
IG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UKKyAgICAvLyByZWN0IGlzIHRoZSByZWdp
b24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkIGFuZCBuZWVkcyB0byBiZSBy
ZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVh
bGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQKKyAgICAvLyBiYW5kd2lkdGgu
CisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkIGFz
IHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdlcyB0aGF0CisgICAgLy8gaGF2ZSBoYXBw
ZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFzdCBmcmFtZSB3YXMgZHJhd24uIFRoaXMg
aW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2VzIGZvciBleGlzdGluZyBsYXllcnMvc3Vy
ZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZQorICAgIC8vICAgLSBs
YXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRoZSBwcmV2aW91cyBmcmFtZSwgYnV0IG5v
IGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRoZSBiYXNpYyBhbGdvcml0aG0gZm9yIGNv
bXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBmb2xsb3dzOgorICAgIC8vCisgICAgLy8g
ICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IGNoYW5nZXMgaW4gYWN0aXZlL25l
dyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsYXllciBpbiB0aGUgbGF5ZXJMaXN0Ogor
ICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMgYWN0dWFsbHkgYSByZW5kZXJTdXJmYWNl
OgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIHRvIG91ciB0
YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAgZWxzZQorICAgIC8vICAgICAgICAgICAg
ICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8K
KyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgdGhlIHRhcmdldCBz
dXJmYWNlJ3MgbWFzaywgaWYgaXQgZXhpc3RzLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMy4g
Y29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IG9sZCBsYXllcnMvc3VyZmFjZXMgdGhhdCBubyBsb25n
ZXIgZXhpc3QKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsZWZ0b3ZlciBsYXllcjoKKyAgICAvLyAg
ICAgICAgICAgYWRkIHRoZSBvbGQgbGF5ZXIvc3VyZmFjZSBib3VuZHMgdG8gdGhlIHRhcmdldCBz
dXJmYWNlIGRhbWFnZS4KKyAgICAvLworICAgIC8vICAgICAgIC8vIDQuIGNvbWJpbmUgYWxsIHBh
cnRpYWwgZGFtYWdlIHJlY3RzIHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLwor
ICAgIC8vIEFkZGl0aW9uYWwgaW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhp
cyBhbGdvcml0aG0gaXMgaW1wbGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNj
ZW5kYW50IHN1cmZhY2VzIGhhdmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFt
YWdlLgorICAgIC8vCisgICAgLy8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0
ZSAiZGFtYWdlIiB0byB0aGUgdGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAg
IG5vdCBjaGFuZ2VkLCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRy
YXdpbmcuIEFsbCBsYXllcnMgdGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdp
b24gc3RpbGwgbmVlZCB0byBiZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAv
LyAgIGNoYW5nZWQgaXRzIG9wYWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSBy
ZS1kcmF3biBhcyB3ZWxsLCBldmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgor
ICAgIC8vCisgICAgLy8gLSBJZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhl
IG9sZCBib3VuZHMgYW5kIG5ldyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4g
c29tZSBvZiB0aGUgZXhwb3NlZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBh
bnl0aGluZy4gQnV0IHRoaXMKKyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRl
IHRoZSBkYW1hZ2UgcmVjdC4gSWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAv
LyAgIG9sZCBib3VuZHMgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVz
cyBvZiBob3cgbXVjaCBpdCBvdmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcg
Ym91bmRzLCB3aGljaCBhbHNvIG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLwor
ICAgIC8vIC0gU2VlIGNvbW1lbnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0
IGV4YWN0bHkgaXMgY29uc2lkZXJlZCBhICJjaGFuZ2UiCisgICAgLy8gICBpbiBhIGxheWVyL3N1
cmZhY2UuCisgICAgLy8KKyAgICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0
cywgdHdvIFJlY3RNYXBzIGFyZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBU
aGUgImN1cnJlbnQiIG1hcCBjb250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRy
aWJ1dGVkIHRvIHRoZQorICAgIC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lk
ZSB0aGUgcHJldmlvdXMgZGFtYWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8g
ICAgICAgICBvciBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVu
IGV4cG9zZWQgYW5kIGRhbWFnZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBB
cyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUK
KyAgICAvLyAgICAgICAgIG1hcCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhh
dCBubyBsb25nZXIgZXhpc3QuCisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFw
IHN0YXJ0cyBvdXQgZW1wdHksIGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5
CisgICAgLy8gICAgICAgICBsYXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1
cmZhY2UgaXMgYWRkZWQgdG8gdGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIg
dGhlIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNv
IHRoYXQgdGhlCisgICAgLy8gICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhl
IG5leHQgZnJhbWUuCisgICAgLy8KKworICAgIC8vIElmIHRoZSB0YXJnZXQgc3VyZmFjZSBhbHJl
YWR5IGtub3dzIGl0cyBlbnRpcmUgcmVnaW9uIGlzIGRhbWFnZWQsIHdlIGNhbiByZXR1cm4gZWFy
bHkuCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGdvIGF3YXksIG9yIHdpbGwgYmUgY2xlYW5l
ciwgYWZ0ZXIgcmVmYWN0b3JpbmcgaW50byBSZW5kZXJQYXNzL1JlbmRlclNjaGVkdWxlLgorICAg
IENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFswXS5nZXQoKTsKKyAgICBpZiAobGF5ZXIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVz
Y2VuZGFudCgpKSB7CisgICAgICAgIG1fY3VycmVudERhbWFnZVJlY3QgPSBGbG9hdFJlY3QobGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgZGFtYWdlRnJvbUFjdGl2ZUxheWVycyA9IGNvbXB1
dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGxheWVyTGlzdCwgdGFyZ2V0U3VyZmFjZUxheWVySUQp
OworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSBjb21wdXRlRGFtYWdlRnJv
bVN1cmZhY2VNYXNrKHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBkYW1h
Z2VGcm9tTGVmdG92ZXJSZWN0cyA9IGNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOwor
CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IGRhbWFnZUZyb21BY3RpdmVMYXllcnM7CisgICAg
bV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2sp
OworICAgIG1fY3VycmVudERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlRnJvbUxlZnRv
dmVyUmVjdHMpOworCisgICAgLy8gVGhlIG5leHQgaGlzdG9yeSBtYXAgYmVjb21lcyB0aGUgY3Vy
cmVudCBtYXAgZm9yIHRoZSBuZXh0IGZyYW1lLgorICAgIHN3YXAobV9jdXJyZW50UmVjdEhpc3Rv
cnksIG1fbmV4dFJlY3RIaXN0b3J5KTsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6
cmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUoaW50IGxheWVySUQpCit7CisgICAgLy8gVGhpcyBm
dW5jdGlvbiBleGlzdHMgbWFpbmx5IGZvciByZWFkYWJpbGl0eSBvZiB0aGUgY29kZS4KKyAgICAv
LyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcCwgb3IgaWYgbm90IGZv
dW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICByZXR1cm4gbV9jdXJyZW50
UmVjdEhpc3RvcnktPnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpz
YXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRT
cGFjZVJlY3QpCit7CisgICAgLy8gVGhpcyBsYXllciBzaG91bGQgbm90IHlldCBleGlzdCBpbiBu
ZXh0IGZyYW1lJ3MgaGlzdG9yeS4KKyAgICBBU1NFUlQobV9uZXh0UmVjdEhpc3RvcnktPmZpbmQo
bGF5ZXJJRCkgPT0gbV9uZXh0UmVjdEhpc3RvcnktPmVuZCgpKTsKKyAgICBtX25leHRSZWN0SGlz
dG9yeS0+c2V0KGxheWVySUQsIHRhcmdldFNwYWNlUmVjdCk7Cit9CisKK0Zsb2F0UmVjdCBDQ0Rh
bWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklE
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsg
KytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFts
YXllckluZGV4XS5nZXQoKTsKKworICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpy
ZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdl
dFN1cmZhY2VMYXllcklEKSkKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZh
Y2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbmRE
YW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIGRh
bWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VG
cm9tU3VyZmFjZU1hc2soQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7Cisg
ICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGlmICghdGFyZ2V0
U3VyZmFjZU1hc2tMYXllcikKKyAgICAgICAgcmV0dXJuIGRhbWFnZVJlY3Q7CisKKyAgICAvLyBD
dXJyZW50bHksIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2UgdG8gdGhlIG1hc2ssIHdlIGNob29zZSB0
byBkYW1hZ2UgdGhlIGVudGlyZQorICAgIC8vIHN1cmZhY2UuIFRoaXMgY291bGQgcG90ZW50aWFs
bHkgYmUgb3B0aW1pemVkIGxhdGVyLCBidXQgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGEKKyAg
ICAvLyBjb21tb24gY2FzZS4KKyAgICBpZiAodGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+bGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoKSB8fCAhdGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIEZsb2F0U2l6ZSh0YXJnZXRTdXJmYWNlTWFza0xheWVyLT5ib3VuZHMoKSkpOworCisg
ICAgcmV0dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNv
bXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIgY29tcHV0aW5n
IGRhbWFnZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVtcyBpbiB0aGUg
Y3VycmVudAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVycy9zdXJmYWNl
cyB0aGF0IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAvLyBhcmUgbm93
IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0IGRhbWFnZVJl
Y3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAoUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1
cnJlbnRSZWN0SGlzdG9yeS0+YmVnaW4oKTsgaXQgIT0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmVu
ZCgpOyArK2l0KQorICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0LT5zZWNvbmQpOworCisgICAg
bV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsK
K30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJ
bXBsKiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJl
IGFyZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lvbiBvZiB0aGUgdGFy
Z2V0IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUuZy4gb3BhY2l0eSwg
cG9zaXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBlbnRpcmUgcmVnaW9u
IG9mIHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLyAgICAgICAg
LSB0aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWFnZXMgdGhlIHN1cmZhY2UsIGJlY2F1c2Ug
dGhpcyByZWdpb24gaXMgbm93IGV4cG9zZWQuCisgICAgLy8gICAgICAgIC0gbm90ZSB0aGF0IGlu
IG1hbnkgY2FzZXMgdGhlIG9sZCBhbmQgbmV3IGxheWVyIHJlY3RzIG1heSBvdmVybGFwLCB3aGlj
aCBpcyBmaW5lLgorICAgIC8vCisgICAgLy8gICAyLiBSZXBhaW50L3VwZGF0ZTogSWYgYSByZWdp
b24gb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkLCB0aGF0CisgICAgLy8g
ICAgICByZWdpb24gZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLworICAgIC8vIFByb3BlcnR5
IGNoYW5nZXMgdGFrZSBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0cy4KKworICAgIC8vIENvbXB1
dGUgdGhlIGxheWVyJ3MgIm9yaWdpblRyYW5zZm9ybSIgYnkgdHJhbnNsYXRpbmcgdGhlIGRyYXdU
cmFuc2Zvcm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBvcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUg
KiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQo
KSk7CisKKyAgICBGbG9hdFJlY3Qgb2xkTGF5ZXJSZWN0ID0gcmVtb3ZlUmVjdEZyb21DdXJyZW50
RnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3Bh
Y2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBsYXllci0+Ym91bmRzKCkpKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFtZShsYXllci0+aWQo
KSwgbGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVy
dHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gSWYgYSBsYXllciBoYXMgY2hhbmdlZCwgdGhlbiBp
dHMgZW50aXJlIGxheWVyIHJlY3QgYWZmZWN0cyB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAg
IHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8obGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7
CisKKyAgICAgICAgLy8gVGhlIGxheWVyJ3Mgb2xkIHJlZ2lvbiBpcyBub3cgZXhwb3NlZCBvbiB0
aGUgdGFyZ2V0IHN1cmZhY2UsIHRvby4KKyAgICAgICAgLy8gTm90ZSBvbGRMYXllclJlY3QgaXMg
YWxyZWFkeSBpbiB0YXJnZXQgc3BhY2UuCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJ
Zk5vblplcm8ob2xkTGF5ZXJSZWN0KTsKKyAgICB9IGVsc2UgaWYgKCFsYXllci0+dXBkYXRlUmVj
dCgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgcHJvcGVydGllcyBoYXZl
bnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNlIGlzIG9ubHkKKyAgICAgICAg
Ly8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEsIHdoaWNoIGNvdWxkIGJlIGVt
cHR5LgorICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5U
cmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dXBkYXRlUmVjdCgpKTsKKyAgICAgICAgdGFyZ2V0RGFt
YWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0SW5UYXJnZXRTcGFjZSk7CisgICAgfQor
fQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2VuZGFudCBzdXJmYWNlIiBjYW4gZGFtYWdlIHJl
Z2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFu
Z2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNlJ3MgZ2VvbWV0cnkgY2FuIGNoYW5nZSBiZWNh
dXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gZGVzY2VuZGFudHMgKGkuZS4g
dGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBzdXJmYWNlJ3MgY29udGVudCByZWN0CisgICAg
Ly8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5jZXN0b3IgbGF5ZXJzIHRoYXQgcHJvcGFnYXRl
IHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlaXIgZW50aXJlIHN1YnRyZWUuCisgICAgLy8g
ICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90aCB0aGUgb2xkIHN1cmZhY2UgcmVjdCBhbmQg
bmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8gICAgICAgICAgZGFtYWdlIHRoZSB0YXJnZXQg
c3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAgIDIuIERhbWFnZSByZWN0OiBU
aGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IGl0cyBvd24gbGF5ZXJMaXN0IGFz
IHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8vICAgICAgc2hvdWxkIHByb3BhZ2F0ZSB0byB0
aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKworICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICBGbG9hdFJlY3Qgb2xkU3Vy
ZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShsYXllci0+aWQoKSk7CisKKyAg
ICBGbG9hdFJlY3Qgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOyAvLyBhbHJlYWR5IGluY2x1ZGVzIHJlcGxpY2EgaWYgaXQgZXhp
c3RzLgorICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNlUmVjdElu
VGFyZ2V0U3BhY2UpOworCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7Cisg
ICAgaWYgKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAg
ICAvLyBUaGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgorICAgICAgICBkYW1h
Z2VSZWN0SW5Mb2NhbFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKworICAg
ICAgICAvLyBUaGUgc3VyZmFjZSdzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRh
cmdldCBzdXJmYWNlLCB0b28uCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblpl
cm8ob2xkU3VyZmFjZVJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9ubHkgdGhlIHN1
cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFtYWdlIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAg
ICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFt
YWdlLCB0cmFuc2Zvcm0gaXQgdG8gdGFyZ2V0IHNwYWNlLCBhbmQgcG9zc2libHkgY29udHJpYnV0
ZSBpdHMgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgaWYgKCFkYW1hZ2VSZWN0SW5Mb2NhbFNw
YWNlLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3Jp
Z2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBS
ZWN0KGRhbWFnZVJlY3RJbkxvY2FsU3BhY2UpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVu
aXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNh
J3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4g
c3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCks
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICAgICAgcmVw
bGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1s
YXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSk7CisKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5p
dGVJZk5vblplcm8ocmVwbGljYU9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3RJbkxv
Y2FsU3BhY2UpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZXJlIHdhcyBkYW1h
Z2Ugb24gdGhlIHJlcGxpY2EncyBtYXNrLCB0aGVuIHRoZSB0YXJnZXQgc3VyZmFjZSByZWNlaXZl
cyB0aGF0IGRhbWFnZSBhcyB3ZWxsLgorICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYg
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICBDQ0xheWVySW1w
bCogcmVwbGljYU1hc2tMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7
CisKKyAgICAgICAgRmxvYXRSZWN0IG9sZFJlcGxpY2FNYXNrUmVjdCA9IHJlbW92ZVJlY3RGcm9t
Q3VycmVudEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIHJlcGxpY2EncyAib3JpZ2luVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVw
bGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIHNwYWNlLgor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgIHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24o
KS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICBy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJh
bnNmb3JtKCkpOworICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+cG9zaXRpb24oKS55KCkpOworCisgICAgICAgIEZsb2F0UmVjdCByZXBsaWNhTWFza0xheWVy
UmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBGbG9hdFNpemUocmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkud2lkdGgoKSwg
cmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKSk7CisgICAgICAgIHNhdmVSZWN0
Rm9yTmV4dEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCksIHJlcGxpY2FNYXNrTGF5ZXJSZWN0
KTsKKworICAgICAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYSBjaGFuZ2Ug
aW4gdGhlIHJlcGxpY2EgbWFzayBkYW1hZ2VzIHRoZSBlbnRpcmUgcmVwbGljYSByZWdpb24uCisg
ICAgICAgIGlmIChyZXBsaWNhTWFza0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpIHx8ICFy
ZXBsaWNhTWFza0xheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGFy
Z2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhTWFza0xheWVyUmVjdCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVm
MjdiMmYwMTNhNGExN2M0YjIyZTMyOGFlOWVmOWQwMzJmMmJlZTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRy
YWNrZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RhbWFnZVRyYWNrZXJf
aAorI2RlZmluZSBDQ0RhbWFnZVRyYWNrZXJfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZh
Y2U7CisKKy8vIENvbXB1dGVzIHRoZSByZWdpb24gd2hlcmUgcGl4ZWxzIGhhdmUgYWN0dWFsbHkg
Y2hhbmdlZCBvbiBhIFJlbmRlclN1cmZhY2UuIFRoaXMgcmVnaW9uIGlzIHVzZWQKKy8vIHRvIHNj
aXNzb3Igd2hhdCBpcyBhY3R1YWxseSBkcmF3biB0byB0aGUgc2NyZWVuIHRvIHNhdmUgR1BVIGNv
bXB1dGF0aW9uIGFuZCBiYW5kd2lkdGguCitjbGFzcyBDQ0RhbWFnZVRyYWNrZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CisgICAg
fkNDRGFtYWdlVHJhY2tlcigpOworCisgICAgdm9pZCB1cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZy
YW1lKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRh
cmdldFN1cmZhY2VMYXllcklELCBDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7
CisgICAgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50RGFtYWdlUmVjdCgpIHsgcmV0dXJuIG1fY3Vy
cmVudERhbWFnZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RhbWFnZVRyYWNrZXIoKTsKKwor
ICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhjb25zdCBWZWN0b3I8
UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJ
RCk7CisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2soQ0NMYXllcklt
cGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdl
RnJvbUxlZnRvdmVyUmVjdHMoKTsKKworICAgIEZsb2F0UmVjdCByZW1vdmVSZWN0RnJvbUN1cnJl
bnRGcmFtZShpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBzYXZlUmVjdEZvck5leHRGcmFtZShpbnQg
bGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRTcGFjZVJlY3QpOworCisgICAgLy8gVGhl
c2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGluIGNvbXB1dGVEYW1hZ2VGcm9tQWN0
aXZlTGF5ZXJzKCkuCisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVySW1wbCos
IEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CisgICAgdm9pZCBleHRlbmREYW1hZ2VGb3JS
ZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsK
KworICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBoYXNodGFi
bGVzIG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgorICAgIC8vIFRoZSAiY3VycmVudCIgbWFwIGlz
IHVzZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdo
aWxlCisgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVyIHJlY3Rz
IHRoYXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgRmxvYXRSZWN0PiBSZWN0TWFwOworICAgIE93blB0cjxSZWN0TWFwPiBtX2N1cnJlbnRSZWN0
SGlzdG9yeTsKKyAgICBPd25QdHI8UmVjdE1hcD4gbV9uZXh0UmVjdEhpc3Rvcnk7CisKKyAgICBG
bG9hdFJlY3QgbV9jdXJyZW50RGFtYWdlUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIENDRGFtYWdlVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
aW5kZXggMTJkMjJlMmEyNDExMjJjYjU3Yjk5ZWRiZGY0NjNmZjljYjI4ODI0ZS4uYWYwNDJlNTY2
OWI0NjJmYjZjMDlkZTZmYzNkNGNmNGI2ZDg0ZTkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cApAQCAtMjM5LDE1ICsyMzksMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6bm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkRm9yRGVzY2VuZGFudHMoKQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5ub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKQordm9pZCBDQ0xheWVySW1wbDo6cmVz
ZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKQogewogICAgIG1fbGF5ZXJQcm9wZXJ0eUNo
YW5nZWQgPSBmYWxzZTsKKyAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAogICAgIGlm
IChtX3JlbmRlclN1cmZhY2UpCiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+cmVzZXRQcm9wZXJ0
eUNoYW5nZWRGbGFnKCk7CiAKKyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xh
eWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOworCisgICAgaWYgKG1fcmVw
bGljYUxheWVyKQorICAgICAgICBtX3JlcGxpY2FMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2lu
Z0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNldHMgdGhlIHJlcGxpY2EgbWFzaywgaWYgaXQgZXhp
c3RzLgorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytp
KQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0
cmVlKCk7CisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JT
dWJ0cmVlKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXpl
JiBib3VuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlMWU3ODIwN2NlMWFjNmZj
ZjI2MjU3ZmQ5N2Q0YmQ4MjQxLi5lMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODViY2NkY2Y4
MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBsYXllclByb3Bl
cnR5Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KLSAg
ICB2b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgLy8gYWxzbyByZXNl
dHMgcHJvcGVydHkgY2hhbmdlIGZvciBleGlzdGluZyByZW5kZXIgc3VyZmFjZXMuCisgICAgdm9p
ZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
ZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IDZjOGRhNDYxYWNkMTc0MTBhMTAyNWU4OTMyNTRlZGFjMDExNzNlZjYuLmFiZGYxNjJk
MDNhMDlmYjJkMjA5MmFlOTQ5YWVlOTA1Y2E3ZWFlZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcApAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWlu
dExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAK
ICAgICAgICAgICAgIC8vIExheWVycyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdp
bGwgYmUgcGFpbnRlZCB3aGVuIHRoZSByZW5kZXIKICAgICAgICAgICAgIC8vIHN1cmZhY2UncyBs
aXN0IGlzIHByb2Nlc3NlZC4KLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgp
ICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAg
IGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFy
Z2V0PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVl
SG9zdCh0aGlzKTsKQEAgLTQxNSw3ICs0MTUsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZQog
ICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4
IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CiAgICAgICAgICAgICBMYXllckNo
cm9taXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0g
cmVuZGVyU3VyZmFjZSkKKworICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJl
bmRlclN1cmZhY2VMYXllci0+aWQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA0ODdkOGY0YmU2YmNkNjQ0OGRj
MDY2MWQ1OTY3NWVmZDQ2YTA2ZjdkLi41NmQyYjZjNDE4OWM3NjllMDRmNGFlYzdkYzA4YmYzMWQx
YjIxMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzUsNiArNzUsNyBAQCBz
dHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQo
ZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAgICAg
LCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisgICAgICAgICAgICAsIHVzZURhbWFnZVRy
YWNrZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHJlZnJlc2hSYXRlKDApIHsgfQogCiAgICAgYm9v
bCBhY2NlbGVyYXRlUGFpbnRpbmc7CkBAIC04Myw2ICs4NCw3IEBAIHN0cnVjdCBDQ1NldHRpbmdz
IHsKICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQ7CiAgICAgYm9vbCBzaG93RlBTQ291
bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKKyAgICBib29sIHVzZURhbWFn
ZVRyYWNrZXI7CiAgICAgZG91YmxlIHJlZnJlc2hSYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCA4YTU3YmZlOTU5MzczNDI4YjZhODliOWE4YTJj
ODNmNzk4YmY1OWQxLi4yZTBjYmNmMmM1ODVlODIxNWQyODZkZWU5YjYxZTUzNTE4MGNmZmFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApAQCAtNDUsNiArNDUsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
bGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiBy
b290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRy
PENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNp
emUpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFj
ZUxheWVySUQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewogICAgICAgICBpbnQg
bGF5ZXJJZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAgLTgzLDYgKzg1LDIwIEBA
IEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
KExheWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIHZpc2libGVMYXllclJlY3Q7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK2Jvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpy
ZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpbnQgdGFy
Z2V0U3VyZmFjZUxheWVySUQpCit7CisgICAgLy8gQSBsYXllciB3aWxsIGVpdGhlciBjb250cmli
dXRlIGl0cyBvd24gY29udGVudCwgb3IgaXRzIHJlbmRlciBzdXJmYWNlJ3MgY29udGVudCwgdG8K
KyAgICAvLyB0aGUgdGFyZ2V0IHN1cmZhY2UuIFRoZSBsYXllciBjb250cmlidXRlcyBpdHMgc3Vy
ZmFjZSdzIGNvbnRlbnQgd2hlbiBib3RoIHRoZQorICAgIC8vIGZvbGxvd2luZyBhcmUgdHJ1ZToK
KyAgICAvLyAgKDEpIFRoZSBsYXllciBhY3R1YWxseSBoYXMgYSByZW5kZXJTdXJmYWNlLCBhbmQK
KyAgICAvLyAgKDIpIFRoZSBsYXllcidzIHJlbmRlclN1cmZhY2UgaXMgbm90IHRoZSBzYW1lIGFz
IHRoZSB0YXJnZXRTdXJmYWNlLgorICAgIC8vCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbGF5ZXIg
anVzdCBjb250cmlidXRlcyBpdHNlbGYgdG8gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgcmV0
dXJuIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFj
ZUxheWVySUQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBkZDFhYjYzM2Y5YjA3ZDA2NWUxMTQ2NjM1OWVj
MWQzNTU1Yjk2ZDY2Li5jZWI3NjY3OWNmNmQ1ZWY2Yjc5YTIwN2JiZDg3MTgxNmRmYmE1ZDhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIApAQCAtNDYsNiArNDcsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFj
ZShDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5n
ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdPcGFjaXR5KDEpCiB7CisgICAgbV9kYW1hZ2VUcmFja2Vy
ID0gQ0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKTsKIH0KIAogQ0NSZW5kZXJTdXJmYWNlOjp+Q0NS
ZW5kZXJTdXJmYWNlKCkKQEAgLTIzNiw2ICsyMzgsMTAgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6
OmR1bXBTdXJmYWNlKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8
IG1fZHJhd1RyYW5zZm9ybS5tMjEoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjIoKSA8
PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMjMoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9y
bS5tMjQoKSA8PCAiICAvLyAgIjsKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMxKCkgPDwg
IiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTMyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0u
bTMzKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTM0KCkgPDwgIiAgLy8gICI7CiAgICAg
dHMgPDwgbV9kcmF3VHJhbnNmb3JtLm00MSgpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00
MigpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm00MygpIDw8ICIsICIgPDwgbV9kcmF3VHJh
bnNmb3JtLm00NCgpIDw8ICJcbiI7CisKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzEpOwor
ICAgIHRzIDw8ICJkYW1hZ2VSZWN0IGlzIHBvcygiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVu
dERhbWFnZVJlY3QoKS54KCkgPDwgIiwiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFn
ZVJlY3QoKS55KCkgPDwgIiksICI7CisgICAgdHMgPDwgInNpemUoIiA8PCBtX2RhbWFnZVRyYWNr
ZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkud2lkdGgoKSA8PCAiLCIgPDwgbV9kYW1hZ2VUcmFja2Vy
LT5jdXJyZW50RGFtYWdlUmVjdCgpLmhlaWdodCgpIDw8ICIpXG4iOwogfQogCiBpbnQgQ0NSZW5k
ZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKCkgY29uc3QKQEAgLTI3NSw1ICsyODEsMTAgQEAgYm9v
bCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdAogICAgIHJl
dHVybiBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQgfHwgbV9vd25pbmdMYXllci0+bGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoKTsKIH0KIAorYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0
eUNoYW5nZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZh
Y2VQcm9wZXJ0eUNoYW5nZWQgJiYgIW1fb3duaW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2Vk
KCk7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDRiZDRhZjg1ODE5NDI2OGNmMGM4NWQzYTZhMGQy
ZDQwOWUwZWJjZDguLmQwZTM1YTE3ODY1NDM3ZWRkMmM4NzJkZmE2MjJjMzZiMGQ0M2FkYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NMYXllckltcGw7
CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKQEAg
LTEwMCw2ICsxMDEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0UHJvcGVydHlDaGFuZ2Vk
RmxhZygpIHsgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0KICAgICBib29sIHN1
cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdDsKKyAgICBib29sIHN1cmZhY2VQcm9wZXJ0eUNo
YW5nZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdDsKKworICAgIENDRGFtYWdlVHJhY2tlciog
ZGFtYWdlVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlVHJhY2tlci5nZXQoKTsgfQog
CiBwcml2YXRlOgogICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIEND
TGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKQEAgLTEyMCw2ICsxMjQs
MTEgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9y
bTsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1w
bD4gPiBtX2xheWVyTGlzdDsKKworICAgIE93blB0cjxDQ0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdl
VHJhY2tlcjsKKworICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRo
aXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgorICAgIEZsb2F0UmVjdCBtX2Rh
bWFnZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlMDE3
MWFjZDEzYTFiOWNjMTlkYWE1MWJiZDNmMjNhNzdmNmQ4NjZjLi4xMzY5M2QzYWNjNWMxYTgwMjY0
OWI2MmMzMGU4YjM5NzdiYTVkOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAg
LTU0LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAg
ICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fz
c29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VU
cmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3Vy
Y2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLApAQCAtNjEs
NiArNjIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKKyAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NS
ZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYzNzlkNjRlZGJjYzY1MDQ3YzlkN2ViOTQzOGNkODNl
OTg5MzE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgor
CisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFt
ZXNwYWNlIHsKKwordm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIC8vIFNhbml0eSBjaGVjazogVGhlIHRlc3QgaXRzZWxmIHNob3Vs
ZCBjcmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIgc3VyZmFjZSwgc28KKyAgICAvLyAgICAg
ICAgICAgICAgIHRoYXQgdGhlIHN1cmZhY2UgKGFuZCBpdHMgZGFtYWdlIHRyYWNrZXIpIGNhbiBw
ZXJzaXN0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vICAgICAgICAgICAgICAgY2FsbHMgdG8gdGhp
cyBmdW5jdGlvbi4KKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEFTU0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisKKyAgICByb290
LT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocm9vdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
JmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKK30KKwordm9pZCBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQoreworICAgIC8vIFRoaXMgZW11bGF0ZXMg
b25seSB0aGUgc3RlcHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGVzdGluZyB0aGUgZGFtYWdlIHRy
YWNrZXI6CisgICAgLy8gICAxLiBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzZXMgYW5kIGxheWVy
bGlzdHMKKyAgICAvLyAgIDIuIHVwZGF0aW5nIGFsbCBkYW1hZ2UgdHJhY2tlcnMgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIKKyAgICAvLyAgIDMuIHJlc2V0dGluZyBhbGwgdXBkYXRlUmVjdHMgYW5kIHBy
b3BlcnR5Q2hhbmdlZCBmbGFncyBmb3IgYWxsIGxheWVycyBhbmQgc3VyZmFjZXMuCisKKyAgICBW
ZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIC8vIEl0ZXJhdGUgYmFjay10by1mcm9udCwgc28gdGhh
dCBkYW1hZ2UgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZnJvbSBkZXNjZW5kYW50IHN1cmZhY2VzIHRv
IGFuY2VzdG9ycy4KKyAgICBmb3IgKGludCBpID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1
cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5yZW5kZXJTdXJmYWNlKCk7CisgICAg
ICAgIHRhcmdldFN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5l
eHRGcmFtZSh0YXJnZXRTdXJmYWNlLT5sYXllckxpc3QoKSwgdGFyZ2V0U3VyZmFjZS0+b3duaW5n
TGF5ZXJJZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W2ldLT5tYXNrTGF5ZXIoKSk7CisgICAg
fQorCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKK30KKwor
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpCit7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsK
KworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5zZXRCb3VuZHMo
SW50U2l6ZSg1MDAsIDUwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoNTAwLCA1MDApKSk7
CisKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxMDAsIDEwMCkpOworICAgIGNo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkLT5zZXRC
b3VuZHMoSW50U2l6ZSgzMCwgMzApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVGVzdFRyZWVXaXRoVHdvU3Vy
ZmFjZXMoKQoreworICAgIC8vIFRoaXMgdGVzdCB0cmVlIGhhcyB0d28gcmVuZGVyIHN1cmZhY2Vz
OiBvbmUgZm9yIHRoZSByb290LCBhbmQgb25lIGZvcgorICAgIC8vIGNoaWxkMS4gQWRkaXRpb25h
bGx5LCB0aGUgcm9vdCBoYXMgYSBzZWNvbmQgY2hpbGQgbGF5ZXIsIGFuZCBjaGlsZDEgaGFzIHR3
bworICAgIC8vIGNoaWxkcmVuIG9mIGl0cyBvd24uCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBncmFuZENoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CisKKyAgICByb290
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJvb3QtPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoNTAw
LCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUwMCwgNTAwKSkpOworCisgICAgY2hp
bGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMCwgMTAwKSk7CisgICAgY2hpbGQxLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMS0+c2V0Qm91bmRzKElu
dFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7IC8vIHdpdGggYSBj
aGlsZCB0aGF0IGRyYXdzQ29udGVudCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBjcmVh
dGUgaXRzIG93biByZW5kZXJTdXJmYWNlLgorICAgIGNoaWxkMS0+c2V0RHJhd3NDb250ZW50KGZh
bHNlKTsgLy8gdGhpcyBsYXllciBkb2VzIG5vdCBkcmF3LCBidXQgaXMgaW50ZW5kZWQgdG8gY3Jl
YXRlIGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCgxMSwgMTEpKTsKKyAgICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6
Onplcm8oKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSgxOCwgMTgpKTsKKyAgICBj
aGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQxLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDIwMCwgMjAwKSk7CisgICAgZ3JhbmRDaGlsZDEtPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZDEtPnNldEJvdW5kcyhJbnRT
aXplKDYsIDgpKTsKKyAgICBncmFuZENoaWxkMS0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisg
ICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTkwLCAxOTApKTsKKyAgICBn
cmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBncmFu
ZENoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsK
KyAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsKKyAgICByb290LT5hZGRDaGlsZChj
aGlsZDEpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICByZXR1cm4gcm9vdC5y
ZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUFuZFNldFVwVGVz
dFRyZWVXaXRoT25lU3VyZmFjZSgpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworCisgICAgLy8gU2V0dXAgaW5jbHVkZXMg
Z29pbmcgcGFzdCB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggYWx3YXlzIGRhbWFnZXMgZXZlcnl0aGlu
Zywgc28KKyAgICAvLyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwZXJmb3JtIHNwZWNpZmljIHRlc3Rz
LgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICByZXR1cm4g
cm9vdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUFuZFNl
dFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IGNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisKKyAgICAvLyBTZXR1cCBp
bmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3aGljaCBhbHdheXMgZGFtYWdlcyBl
dmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFjdHVhbGx5IHBlcmZvcm0gc3BlY2lm
aWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAg
IHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworY2xhc3MgQ0NEYW1hZ2VUcmFja2VyVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3ByaXZhdGU6CisgICAgLy8gRm9yIHRlc3RpbmcgcHVy
cG9zZXMsIGZha2UgdGhhdCB3ZSBhcmUgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBzZXRJbXBsVGhyZWFkOworfTsKKworVEVTVF9GKENDRGFtYWdlVHJh
Y2tlclRlc3QsIHNhbml0eUNoZWNrVGVzdFRyZWVXaXRoT25lU3VyZmFjZSkKK3sKKyAgICAvLyBT
YW5pdHkgY2hlY2sgdGhhdCB0aGUgc2ltcGxlIHRlc3QgdHJlZSB3aWxsIGFjdHVhbGx5IHByb2R1
Y2UgdGhlIGV4cGVjdGVkIHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBsYXllciBsaXN0cy4K
KworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoT25lU3VyZmFjZSgpOworCisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiks
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVswXS0+aWQoKSk7CisgICAg
RVhQRUNUX0VRKDIsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkp
OworCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgcm9vdERhbWFnZVJlY3QpOworfQor
CitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJlZVdpdGhUd29T
dXJmYWNlcykKK3sKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGxleCB0ZXN0IHRy
ZWUgd2lsbCBhY3R1YWxseSBwcm9kdWNlIHRoZSBleHBlY3RlZCByZW5kZXIKKyAgICAvLyBzdXJm
YWNlcyBhbmQgbGF5ZXIgbGlzdHMuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBj
cmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdOworICAgIEZsb2F0UmVjdCBjaGls
ZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
CisgICAgQVNTRVJUX1RSVUUoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9G
QUxTRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oMyksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ug
Zm9yIGNoaWxkMSBvbmx5IGhhcyBhIGNvbnRlbnRSZWN0IHRoYXQgZW5jbG9zZXMgZ3JhbmRDaGls
ZDEgYW5kIGdyYW5kQ2hpbGQyLCBiZWNhdXNlIGNoaWxkMSBkb2VzIG5vdCBkcmF3IGNvbnRlbnQu
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5MCwgMTkwLCAxNiwgMTgpLCBj
aGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAw
LCA1MDAsIDUwMCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvclVwZGF0ZVJlY3RzKQoreworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAg
Ly8gQ0FTRSAxOiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgdGhlIGNvcnJl
c3BvbmRpbmcgZGFtYWdlIHRvIHRoZSBzdXJmYWNlLgorICAgIC8vCisgICAgY2hpbGQtPnNldFVw
ZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CisgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIERhbWFnZSBwb3NpdGlvbiBvbiB0aGUgc3Vy
ZmFjZSBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDEwLCAxMSkgcmVsYXRpdmUg
dG8gdGhlIGNoaWxkICgxMDAsIDEwMCkuCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMCwgMTExLCAxMiwgMTMp
LCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IFRoZSBzYW1lIHVwZGF0ZSByZWN0
IHR3aWNlIGluIGEgcm93IHN0aWxsIHByb2R1Y2VzIHRoZSBzYW1lIGRhbWFnZS4KKyAgICAvLwor
ICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMCwgMTEsIDEyLCAxMykpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTEwLCAxMTEsIDEyLCAx
MyksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMzogU2V0dGluZyBhIGRpZmZlcmVu
dCB1cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgZGFtYWdlIG9uIHRoZSBuZXcgdXBkYXRlIHJlZ2lv
biwgYnV0IG5vIGFkZGl0aW9uYWwgZXhwb3NlZCBvbGQgcmVnaW9uLgorICAgIC8vCisgICAgY2hp
bGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDIwLCAyNSwgMSwgMikpOworICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2UgcG9zaXRpb24gb24g
dGhlIHN1cmZhY2Ugc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgyMCwgMjUpIHJl
bGF0aXZlIHRvIHRoZSBjaGlsZCAoMTAwLCAxMDApLgorICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEyMCwgMTI1LCAxLCAyKSwgcm9v
dERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yUHJvcGVydHlDaGFuZ2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgLy8gQ0FTRSAxOiBU
aGUgbGF5ZXIncyBwcm9wZXJ0eSBjaGFuZ2VkIGZsYWcgdGFrZXMgcHJpb3JpdHkgb3ZlciB1cGRh
dGUgcmVjdC4KKyAgICAvLworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMCwg
MTEsIDEyLCAxMykpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayAtIHdlIHNo
b3VsZCBub3QgaGF2ZSBhY2NpZGVudGFsbHkgY3JlYXRlZCBhIHNlcGFyYXRlIHJlbmRlciBzdXJm
YWNlIGZvciB0aGUgdHJhbnNsdWNlbnQgbGF5ZXIuCisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkLT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBy
b290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBEYW1h
Z2Ugc2hvdWxkIGJlIHRoZSBlbnRpcmUgY2hpbGQgbGF5ZXIgaW4gdGFyZ2V0U3VyZmFjZSBzcGFj
ZS4KKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0ID0gRmxvYXRSZWN0KDEwMCwgMTAwLCAzMCwg
MzApOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAy
OiBJZiBhIGxheWVyIG1vdmVzIGR1ZSB0byBwcm9wZXJ0eSBjaGFuZ2UsIGl0IGRhbWFnZXMgYm90
aCB0aGUgbmV3IGxvY2F0aW9uCisgICAgLy8gICAgICAgICBhbmQgdGhlIG9sZCAoZXhwb3NlZCkg
bG9jYXRpb24uIFRoZSBvbGQgbG9jYXRpb24gaXMgdGhlIGVudGlyZSBvbGQgbGF5ZXIsCisgICAg
Ly8gICAgICAgICBub3QganVzdCB0aGUgdXBkYXRlUmVjdC4KKworICAgIC8vIEN5Y2xlIG9uZSBm
cmFtZSBvZiBubyBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5leHQgcmVj
dCBpcyBub3QgYmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7
CisKKyAgICAvLyBUaGVuLCB0ZXN0IHRoZSBhY3R1YWwgbGF5ZXIgbW92ZW1lbnQuCisgICAgY2hp
bGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLCAyMzApKTsKKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRXhwZWN0IGRhbWFnZSB0byBiZSB0aGUg
Y29tYmluYXRpb24gb2YgdGhlIHByZXZpb3VzIG9uZSBhbmQgdGhlIG5ldyBvbmUuCisgICAgZXhw
ZWN0ZWRSZWN0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdCgyMDAsIDIzMCwgMzAsIDMwKSk7Cisg
ICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3Rl
ZFJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvclRyYW5zZm9ybWVkTGF5ZXIpCit7CisgICAgLy8gSWYgYSBsYXllciBp
cyB0cmFuc2Zvcm1lZCwgdGhlIGRhbWFnZSByZWN0IHNob3VsZCBzdGlsbCBlbmNsb3NlIHRoZSBl
bnRpcmUKKyAgICAvLyB0cmFuc2Zvcm1lZCBsYXllci4KKworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggcm90YXRpb247CisgICAgcm90YXRpb24ucm90YXRlKDQ1KTsKKwor
ICAgIC8vIE5vdGUgY2FyZWZ1bGx5LCB0aGUgYW5jaG9yIGlzIGFjdHVhbGx5IHBhcnQgb2YgbGF5
ZXItPnBvc2l0aW9uKCkuIEJ5IHNldHRpbmcgYW5jaG9yCisgICAgLy8gdG8gKDAuNSwgMC41KSwg
dGhlIGxheWVyJ3MgcG9zaXRpb24gKDEwMCwgMTAwKSBub3cgcmVmZXJzIHRvIHRoZSBjZW50ZXIg
b2YgdGhlCisgICAgLy8gbGF5ZXIsIG5vdCB0aGUgY29ybmVyLiBUaGlzIG1lYW5zIHRoZSBsYXll
ciBoYXMgYWN0dWFsbHkgY2hhbmdlZCBwb3NpdGlvbi4KKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9p
bnQoRmxvYXRQb2ludCgwLjUsIDAuNSkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgbGF5ZXIgYWN0dWFsbHkg
bW92ZWQgdG8gKDg1LCA4NSksIGRhbWFnaW5nIGl0cyBvbGQgbG9jYXRpb24gYW5kIG5ldyBsb2Nh
dGlvbi4KKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoODUsIDg1LCA0NSwgNDUpLCByb290RGFtYWdlUmVjdCk7CisK
KyAgICAvLyBXaXRoIHRoZSBhbmNob3Igb24gdGhlIGxheWVyJ3MgY2VudGVyLCBub3cgd2UgY2Fu
IHRlc3QgdGhlIHJvdGF0aW9uIG1vcmUKKyAgICAvLyBpbnR1aXRpdmVseSwgc2luY2UgaXQgYXBw
bGllcyBhYm91dCB0aGUgbGF5ZXIncyBhbmNob3IuCisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShy
b3RhdGlvbik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAg
IC8vIFNpbmNlIHRoZSBjaGlsZCBsYXllciBpcyBzcXVhcmUsIHJvdGF0aW9uIGJ5IDQ1IGRlZ3Jl
ZXMgYWJvdXQgdGhlIGNlbnRlciBzaG91bGQKKyAgICAvLyBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0
aGUgZXhwZWN0ZWQgcmVjdCBieSBzcXJ0KDIpLCBjZW50ZXJlZCBhcm91bmQgKDEwMCwgMTAwKS4g
VGhlCisgICAgLy8gb2xkIGV4cG9zZWQgcmVnaW9uIHNob3VsZCBiZSBmdWxseSBjb250YWluZWQg
aW4gdGhlIG5ldyByZWdpb24uCisgICAgZG91YmxlIGV4cGVjdGVkV2lkdGggPSAzMC4wICogc3Fy
dCgyLjApOworICAgIGRvdWJsZSBleHBlY3RlZFBvc2l0aW9uID0gMTAwLjAgLSAwLjUgKiBleHBl
Y3RlZFdpZHRoOworICAgIEZsb2F0UmVjdCBleHBlY3RlZFJlY3QoZXhwZWN0ZWRQb3NpdGlvbiwg
ZXhwZWN0ZWRQb3NpdGlvbiwgZXhwZWN0ZWRXaWR0aCwgZXhwZWN0ZWRXaWR0aCk7CisgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZFJlY3Qs
IHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlm
eURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nTGF5ZXIpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAg
IGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MDAsIDM4MCkpOworICAgIGNoaWxkMi0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBjaGlsZDItPnNldEJvdW5k
cyhJbnRTaXplKDYsIDgpKTsKKyAgICBjaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKwor
ICAgIC8vIENBU0UgMTogQWRkaW5nIGEgbmV3IGxheWVyIHNob3VsZCBjYXVzZSB0aGUgYXBwcm9w
cmlhdGUgZGFtYWdlLgorICAgIC8vCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyKTsKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNr
IC0gYWxsIDMgbGF5ZXJzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSByZW5kZXIgc3VyZmFjZTsgcmVu
ZGVyIHN1cmZhY2VzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgorICAgIEFTU0VSVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUo
KSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoNDAwLCAzODAsIDYsIDgpLCByb290RGFtYWdlUmVjdCk7CisK
KyAgICAvLyBDQVNFIDI6IElmIHRoZSBsYXllciBpcyByZW1vdmVkLCBpdHMgZW50aXJlIG9sZCBs
YXllciBiZWNvbWVzIGV4cG9zZWQsIG5vdCBqdXN0IHRoZQorICAgIC8vICAgICAgICAgbGFzdCB1
cGRhdGUgcmVjdC4KKworICAgIC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNv
IHRoYXQgd2Uga25vdyB0aGUgZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHBy
ZXZpb3VzIGNhc2UuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiwgdGVzdCByZW1vdmlu
ZyBjaGlsZDEuCisgICAgY2hpbGQxLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMDAsIDEwMCwgMzAsIDMwKSwgcm9vdERh
bWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdl
Rm9yTXVsdGlwbGVMYXllcnMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3Jl
YXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgIGNoaWxkMi0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCg0MDAsIDM4MCkpOworICAgIGNoaWxkMi0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDo6emVybygpKTsKKyAgICBjaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDYsIDgp
KTsKKyAgICBjaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5hZGRDaGls
ZChjaGlsZDIpOworCisgICAgLy8gSW4gdGhpcyB0ZXN0IHdlIGRvbid0IHdhbnQgdGhlIGFib3Zl
IHRyZWUgbWFuaXB1bGF0aW9uIHRvIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2FtZSBmcmFt
ZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFt
YWdpbmcgdHdvIGxheWVycyBzaW11bHRhbmVvdXNseSBzaG91bGQgY2F1c2UgY29tYmluZWQgZGFt
YWdlLgorICAgIC8vIC0gY2hpbGQxIHVwZGF0ZSByZWN0IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0
UmVjdCgxMDAsIDEwMCwgMSwgMik7CisgICAgLy8gLSBjaGlsZDIgdXBkYXRlIHJlY3QgaW4gc3Vy
ZmFjZSBzcGFjZTogRmxvYXRSZWN0KDQwMCwgMzgwLCAzLCA0KTsKKyAgICBjaGlsZDEtPnNldFVw
ZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDIpKTsKKyAgICBjaGlsZDItPnNldFVwZGF0ZVJl
Y3QoRmxvYXRSZWN0KDAsIDAsIDMsIDQpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMDAsIDEwMCwgMzAzLCAyODQpLCByb290RGFtYWdl
UmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JO
ZXN0ZWRTdXJmYWNlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVB
bmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdy
YW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9h
dFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKwor
ICAgIC8vIENBU0UgMTogRGFtYWdlIHRvIGEgZGVzY2VuZGFudCBzdXJmYWNlIHNob3VsZCBwcm9w
YWdhdGUgcHJvcGVybHkgdG8gYW5jZXN0b3Igc3VyZmFjZS4KKyAgICAvLworICAgIGdyYW5kQ2hp
bGQxLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDIwMCwgMjAwLCA2LCA4KSwg
Y2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMzAw
LCAzMDAsIDYsIDgpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IFNhbWUgYXMg
cHJldmlvdXMgY2FzZSwgYnV0IHdpdGggYWRkaXRpb25hbCBkYW1hZ2UgZWxzZXdoZXJlIHRoYXQg
c2hvdWxkIGJlIHByb3Blcmx5IHVuaW9uZWQuCisgICAgLy8gLSBjaGlsZDEgc3VyZmFjZSBkYW1h
Z2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoMzAwLCAzMDAsIDYsIDgpOworICAg
IC8vIC0gY2hpbGQyIGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgxMSwg
MTEsIDE4LCAxOCk7CisgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC43KTsKKyAgICBjaGls
ZDItPnNldE9wYWNpdHkoMC43KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSBy
b290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjAwLCAyMDAsIDYsIDgpLCBj
aGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMSwg
MTEsIDI5NSwgMjk3KSwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21EZXNjZW5kYW50TGF5ZXIp
Cit7CisgICAgLy8gSWYgZGVzY2VuZGFudCBsYXllciBjaGFuZ2VzIGFuZCBhZmZlY3RzIHRoZSBj
b250ZW50IGJvdW5kcyBvZiB0aGUgcmVuZGVyIHN1cmZhY2UsCisgICAgLy8gdGhlbiB0aGUgZW50
aXJlIGRlc2NlbmRhbnQgc3VyZmFjZSBzaG91bGQgYmUgZGFtYWdlZCwgYW5kIGl0IHNob3VsZCBk
YW1hZ2UgaXRzCisgICAgLy8gYW5jZXN0b3Igc3VyZmFjZSB3aXRoIHRoZSBvbGQgYW5kIG5ldyBz
dXJmYWNlIHJlZ2lvbnMuCisKKyAgICAvLyBUaGlzIGlzIGEgdHJpY2t5IGNhc2UsIHNpbmNlIG9u
bHkgdGhlIGZpcnN0IGdyYW5kQ2hpbGQgY2hhbmdlcywgYnV0IHRoZSBlbnRpcmUKKyAgICAvLyBz
dXJmYWNlIHNob3VsZCBiZSBtYXJrZWQgZGlydHkuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJl
bigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworCisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTk1LCAyMDUpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAg
IC8vIFRoZSBuZXcgc3VyZmFjZSBib3VuZHMgc2hvdWxkIGJlIGRhbWFnZWQgZW50aXJlbHksIGV2
ZW4gdGhvdWdoIG9ubHkgb25lIG9mIHRoZSBsYXllcnMgY2hhbmdlZC4KKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTkwLCAxOTAsIDExLCAyMyksIGNoaWxkRGFtYWdlUmVjdCk7
CisKKyAgICAvLyBEYW1hZ2UgdG8gdGhlIHJvb3Qgc3VyZmFjZSBzaG91bGQgYmUgdGhlIHVuaW9u
IG9mIGNoaWxkMSdzICplbnRpcmUqIHJlbmRlciBzdXJmYWNlCisgICAgLy8gKGluIHRhcmdldCBz
cGFjZSksIGFuZCBpdHMgb2xkIGV4cG9zZWQgYXJlYSAoYWxzbyBpbiB0YXJnZXQgc3BhY2UpLgor
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyOTAsIDI5MCwgMTYsIDIzKSwgcm9v
dERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yU3VyZmFjZUNoYW5nZUZyb21BbmNlc3RvckxheWVyKQoreworICAgIC8vIEFuIGFuY2Vz
dG9yL293bmluZyBsYXllciBjaGFuZ2VzIHRoYXQgYWZmZWN0cyB0aGUgcG9zaXRpb24vdHJhbnNm
b3JtIG9mIHRoZSByZW5kZXIKKyAgICAvLyBzdXJmYWNlLiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNl
LCB0aGUgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgZmxhZyBhbHJlYWR5IHByb3BhZ2F0ZXMKKyAgICAv
LyB0byB0aGUgc3VidHJlZSAodGVzdGVkIGluIENDTGF5ZXJJbXBsdGVzdCksIHdoaWNoIGRhbWFn
ZXMgdGhlIGVudGlyZSBjaGlsZDEKKyAgICAvLyBzdXJmYWNlLCBidXQgdGhlIGRhbWFnZSB0cmFj
a2VyIHN0aWxsIG5lZWRzIHRoZSBjb3JyZWN0IGxvZ2ljIHRvIGNvbXB1dGUgdGhlCisgICAgLy8g
ZXhwb3NlZCByZWdpb24gb24gdGhlIHJvb3Qgc3VyZmFjZS4KKworICAgIC8vIEZJWE1FOiB0aGUg
ZXhwZWN0YXRpb25zIG9mIHRoaXMgdGVzdCBjYXNlIHNob3VsZCBjaGFuZ2Ugd2hlbiB3ZSBhZGQg
c3VwcG9ydCBmb3IgYQorICAgIC8vICAgICAgICB1bmlxdWUgc2Npc3NvclJlY3QgcGVyIHJlbmRl
clN1cmZhY2UuIEluIHRoYXQgY2FzZSwgdGhlIGNoaWxkMSBzdXJmYWNlCisgICAgLy8gICAgICAg
IHNob3VsZCBiZSBjb21wbGV0ZWx5IHVuY2hhbmdlZCwgc2luY2Ugd2UgYXJlIG9ubHkgdHJhbnNm
b3JtaW5nIGl0LCB3aGlsZSB0aGUKKyAgICAvLyAgICAgICAgcm9vdCBzdXJmYWNlIHdvdWxkIGJl
IGRhbWFnZWQgYXBwcm9wcmlhdGVseS4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07
CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3Q7CisKKyAgICBjaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNTAsIDUwKSk7Cisg
ICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJl
Y3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBUaGUgbmV3IHN1
cmZhY2UgYm91bmRzIHNob3VsZCBiZSBkYW1hZ2VkIGVudGlyZWx5LgorICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAsIDE5MCwgMTYsIDE4KSwgY2hpbGREYW1hZ2VSZWN0KTsK
KworICAgIC8vIFRoZSBlbnRpcmUgY2hpbGQxIHN1cmZhY2UgYW5kIHRoZSBvbGQgZXhwb3NlZCBj
aGlsZDEgc3VyZmFjZSBzaG91bGQgZGFtYWdlIHRoZSByb290IHN1cmZhY2UuCisgICAgLy8gIC0g
b2xkIGNoaWxkMSBzdXJmYWNlIGluIHRhcmdldCBzcGFjZTogRmxvYXRSZWN0KDI5MCwgMjkwLCAx
NiwgMTgpCisgICAgLy8gIC0gbmV3IGNoaWxkMSBzdXJmYWNlIGluIHRhcmdldCBzcGFjZTogRmxv
YXRSZWN0KDI0MCwgMjQwLCAxNiwgMTgpCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDI0MCwgMjQwLCA2NiwgNjgpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1
cmZhY2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVw
VGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
MSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBDQVNFIDE6IElmIGEgZGVz
Y2VuZGFudCBzdXJmYWNlIGRpc2FwcGVhcnMsIGl0cyBlbnRpcmUgb2xkIGFyZWEgYmVjb21lcyBl
eHBvc2VkLgorICAgIC8vCisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDEpOworICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCB0
aGVyZSBpcyBvbmx5IG9uZSBzdXJmYWNlIG5vdy4KKyAgICBBU1NFUlRfRkFMU0UoY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBy
b290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyOTAsIDI5
MCwgMTYsIDE4KSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiBhIGRlc2Nl
bmRhbnQgc3VyZmFjZSBhcHBlYXJzLCBpdHMgZW50aXJlIG9sZCBhcmVhIGJlY29tZXMgZXhwb3Nl
ZC4KKworICAgIC8vIEN5Y2xlIG9uZSBmcmFtZSBvZiBubyBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5
IGNoZWNrIHRoYXQgdGhlIG5leHQgcmVjdCBpcyBub3QgYmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFn
ZSBzdGF0ZS4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0
eSgpKTsKKworICAgIC8vIFRoZW4gY2hhbmdlIHRoZSB0cmVlIHNvIHRoYXQgdGhlIHJlbmRlciBz
dXJmYWNlIGlzIGFkZGVkIGJhY2suCisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7CisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGF0IHRoZXJlIGlzIGEgbmV3IHN1cmZhY2Ugbm93LgorICAgIEFTU0VSVF9UUlVFKGNoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigz
KSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTkw
LCAxOTAsIDE2LCAxOCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDI5MCwgMjkwLCAxNiwgMTgpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdl
ZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RU
cmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBy
b290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAg
RmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBJZiBub3RoaW5nIGNo
YW5nZXMsIHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgYmUgZW1wdHkuCisgICAgLy8KKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNo
aWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFn
ZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5
KCkpOworCisgICAgLy8gQ0FTRSAyOiBJZiBub3RoaW5nIGNoYW5nZXMgdHdpY2UgaW4gYSByb3cs
IHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgc3RpbGwgYmUgZW1wdHkuCisgICAgLy8KKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNo
aWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFn
ZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5
KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VGb3JV
cGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZs
b2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0Owor
CisgICAgLy8gSW4gb3VyIHNwZWNpZmljIHRyZWUsIHRoZSB1cGRhdGUgcmVjdCBvZiBjaGlsZDEg
c2hvdWxkIG5vdCBjYXVzZSBhbnkgZGFtYWdlIHRvIGFueQorICAgIC8vIHN1cmZhY2UgYmVjYXVz
ZSBpdCBkb2VzIG5vdCBhY3R1YWxseSBkcmF3IGNvbnRlbnQuCisgICAgY2hpbGQxLT5zZXRVcGRh
dGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAyKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2EpCit7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJm
YWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4o
KVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGls
ZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBjaGlsZDEt
PmNoaWxkcmVuKClbMV07CisKKyAgICAvLyBEYW1hZ2Ugb24gYSBzdXJmYWNlIHRoYXQgaGFzIGEg
cmVmbGVjdGlvbiBzaG91bGQgY2F1c2UgdGhlIHRhcmdldCBzdXJmYWNlIHRvCisgICAgLy8gcmVj
ZWl2ZSB0aGUgc3VyZmFjZSdzIGRhbWFnZSBhbmQgdGhlIHN1cmZhY2UncyByZWZsZWN0ZWQgZGFt
YWdlLgorCisgICAgLy8gRm9yIHRoaXMgdGVzdCBjYXNlLCB3ZSBtb2RpZnkgZ3JhbmRDaGlsZDIs
IGFuZCBhZGQgZ3JhbmRDaGlsZDMgdG8gZXh0ZW5kIHRoZSBib3VuZHMKKyAgICAvLyBvZiBjaGls
ZDEncyBzdXJmYWNlLiBUaGlzIHdheSwgd2UgY2FuIHRlc3QgcmVmbGVjdGlvbiBjaGFuZ2VzIHdp
dGhvdXQgY2hhbmdpbmcKKyAgICAvLyBjb250ZW50Qm91bmRzIG9mIHRoZSBzdXJmYWNlLgorICAg
IGdyYW5kQ2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE4MCwgMTgwKSk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMyA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNik7Cisg
ICAgZ3JhbmRDaGlsZDMtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjQwLCAyNDApKTsKKyAgICBn
cmFuZENoaWxkMy0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBncmFu
ZENoaWxkMy0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgZ3JhbmRDaGlsZDMtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBj
aGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQzKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworCisgICAgLy8gQ0FTRSAxOiBhZGRpbmcgYSByZWZsZWN0aW9uIGFib3V0
IHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEuCisgICAgLy8KKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNyk7CisgICAg
Z3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAg
IGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZWZsZWN0aW9uOworICAgIHJlZmxlY3Rpb24uc2Nh
bGUzZCgtMS4wLCAxLjAsIDEuMCk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRUcmFuc2Zv
cm0ocmVmbGVjdGlvbik7CisgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcihncmFuZENo
aWxkMVJlcGxpY2EpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisK
KyAgICBGbG9hdFJlY3QgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxv
YXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VS
ZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1h
Z2VSZWN0KCk7CisKKyAgICAvLyBUaGUgZ3JhbmRDaGlsZCBzdXJmYWNlIGRhbWFnZSBzaG91bGQg
bm90IGluY2x1ZGUgaXRzIG93biByZXBsaWNhLiBUaGUgY2hpbGQKKyAgICAvLyBzdXJmYWNlIGRh
bWFnZSBzaG91bGQgaW5jbHVkZSB0aGUgbm9ybWFsIGFuZCByZXBsaWNhIHN1cmZhY2VzLgorICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCA2LCA4KSwgZ3JhbmRDaGlsZERh
bWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTQsIDIwMCwg
MTIsIDgpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0
UmVjdCgyOTQsIDMwMCwgMTIsIDgpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6
IG1vdmluZyB0aGUgZGVzY2VuZGFudCBzdXJmYWNlIHNob3VsZCBjYXVzZSBib3RoIHRoZSBvcmln
aW5hbCBhbmQgcmVmbGVjdGVkCisgICAgLy8gICAgICAgICBhcmVhcyB0byBiZSBkYW1hZ2VkIG9u
IHRoZSB0YXJnZXQuCisgICAgSW50UmVjdCBvbGRDb250ZW50UmVjdCA9IGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDE5NS4wLCAyMDUuMCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0LndpZHRoKCksIGNoaWxkMS0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLndpZHRoKCkpOworICAgIEFTU0VSVF9FUShv
bGRDb250ZW50UmVjdC5oZWlnaHQoKSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRS
ZWN0KCkuaGVpZ2h0KCkpOworCisgICAgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
CisgICAgLy8gVGhlIGNoaWxkIHN1cmZhY2UgZGFtYWdlIHNob3VsZCBpbmNsdWRlIG5vcm1hbCBh
bmQgcmVwbGljYSBzdXJmYWNlcyBmb3IgYm90aCBvbGQgYW5kIG5ldyBsb2NhdGlvbnMuCisgICAg
Ly8gIC0gb2xkIGxvY2F0aW9uIGluIHRhcmdldCBzcGFjZTogRmxvYXRSZWN0KDE5NCwgMjAwLCAx
MiwgOCkKKyAgICAvLyAgLSBuZXcgbG9jYXRpb24gaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3Qo
MTg5LCAyMDUsIDEyLCA4KQorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAw
LCA2LCA4KSwgZ3JhbmRDaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgxODksIDIwMCwgMTcsIDEzKSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjg5LCAzMDAsIDE3LCAxMyksIHJvb3REYW1hZ2VS
ZWN0KTsKKworICAgIC8vIENBU0UgMzogcmVtb3ZpbmcgdGhlIHJlZmxlY3Rpb24gc2hvdWxkIGNh
dXNlIHRoZSBlbnRpcmUgcmVnaW9uIGluY2x1ZGluZyByZWZsZWN0aW9uCisgICAgLy8gICAgICAg
ICB0byBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIGdyYW5kQ2hpbGQxLT5zZXRSZXBs
aWNhTGF5ZXIoMCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAg
ICBBU1NFUlRfRVEob2xkQ29udGVudFJlY3Qud2lkdGgoKSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmNvbnRlbnRSZWN0KCkud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0
LmhlaWdodCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS5oZWlnaHQo
KSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNr
ZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE4OSwgMjA1LCAxMiwgOCksIGNoaWxk
RGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI4OSwgMzA1
LCAxMiwgOCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRl
c3QsIHZlcmlmeURhbWFnZUZvck1hc2spCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICAvLyBJbiB0aGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGFtYWdlIHRyYWNrZXIsIGNoYW5nZXMgdG8g
bWFzayBsYXllcnMgc2hvdWxkCisgICAgLy8gZGFtYWdlIHRoZSBlbnRpcmUgY29ycmVzcG9uZGlu
ZyBzdXJmYWNlLgorCisgICAgLy8gU2V0IHVwIHRoZSBtYXNrIGxheWVyLgorICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gbWFza0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBtYXNr
TGF5ZXItPnNldFBvc2l0aW9uKGNoaWxkLT5wb3NpdGlvbigpKTsKKyAgICBtYXNrTGF5ZXItPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgbWFza0xheWVyLT5zZXRCb3Vu
ZHMoY2hpbGQtPmJvdW5kcygpKTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2tMYXllcik7
CisKKyAgICAvLyBBZGQgb3BhY2l0eSBhbmQgYSBncmFuZENoaWxkIHNvIHRoYXQgdGhlIHJlbmRl
ciBzdXJmYWNlIHBlcnNpc3RzIGV2ZW4gYWZ0ZXIgd2UgcmVtb3ZlIHRoZSBtYXNrLgorICAgIGNo
aWxkLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDIuMCwgMi4wKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDo6emVybygpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgyLCAy
KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYSBuZXcgc3VyZmFjZSB3YXMgY3JlYXRl
ZCBmb3IgdGhlIGNoaWxkLgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkp
OworCisgICAgLy8gQ0FTRSAxOiB0aGUgdXBkYXRlUmVjdCBvbiBhIG1hc2sgbGF5ZXIgc2hvdWxk
IGRhbWFnZSB0aGUgZW50aXJlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vCisgICAgbWFza0xheWVy
LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxLCAyLCAzLCA0KSk7CisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0g
Y2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMCwgMzApLCBj
aGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBhIHByb3BlcnR5IGNoYW5nZSBvbiB0
aGUgbWFzayBsYXllciBzaG91bGQgZGFtYWdlIHRoZSBlbnRpcmUgdGFyZ2V0IHN1cmZhY2UuCisg
ICAgLy8KKworICAgIC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNvIHRoYXQg
d2Uga25vdyB0aGUgZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHByZXZpb3Vz
IGNhc2UuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGls
ZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1w
dHkoKSk7CisKKyAgICAvLyBUaGVuIHRlc3QgdGhlIHByb3BlcnR5IGNoYW5nZS4KKyAgICBtYXNr
TGF5ZXItPnNldE9wYWNpdHkoMC41KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMCwgMCwgMzAsIDMwKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8v
IENBU0UgMzogcmVtb3ZpbmcgdGhlIG1hc2sgYWxzbyBkYW1hZ2VzIHRoZSBlbnRpcmUgdGFyZ2V0
IHN1cmZhY2UuCisgICAgLy8KKworICAgIC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFt
YWdlIHNvIHRoYXQgd2Uga25vdyB0aGUgZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20g
dGhlIHByZXZpb3VzIGNhc2UuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1h
Z2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIHRlc3QgbWFzayByZW1vdmFsLgorICAg
IGNoaWxkLT5zZXRNYXNrTGF5ZXIoMCk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPmxheWVyUHJv
cGVydHlDaGFuZ2VkKCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhhdCBhIHJlbmRlciBzdXJmYWNlIHN0aWxsIGV4aXN0
cy4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIGNoaWxk
RGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwg
MCwgMzAsIDMwKSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2FNYXNrKQoreworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IGNoaWxkMS0+Y2hpbGRyZW4oKVswXTsK
KworICAgIC8vIENoYW5nZXMgdG8gYSByZXBsaWNhJ3MgbWFzayBzaG91bGQgbm90IGRhbWFnZSB0
aGUgb3JpZ2luYWwgc3VyZmFjZSwgYmVjYXVzZSBpdCBpcworICAgIC8vIG5vdCBtYXNrZWQuIEJ1
dCBpdCBkb2VzIGRhbWFnZSB0aGUgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UuCisKKyAgICAvLyBD
cmVhdGUgYSByZWZsZWN0aW9uIGFib3V0IHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEuCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDYpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dDo6emVybygpKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQ6Onplcm8oKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlvbjsKKyAg
ICByZWZsZWN0aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hpbGQxUmVw
bGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5zZXRSZXBs
aWNhTGF5ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhKTsKKworICAgIC8vIFNldCB1cCB0aGUgbWFzayBs
YXllciBvbiB0aGUgcmVwbGljYSBsYXllcgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcmVwbGlj
YU1hc2tMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNyk7CisgICAgcmVwbGljYU1hc2tMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByZXBsaWNhTWFza0xheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJlcGxpY2FNYXNrTGF5
ZXItPnNldEJvdW5kcyhncmFuZENoaWxkMS0+Ym91bmRzKCkpOworICAgIGdyYW5kQ2hpbGQxUmVw
bGljYS0+c2V0TWFza0xheWVyKHJlcGxpY2FNYXNrTGF5ZXIpOworCisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBh
cHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMgd2VyZSBjcmVhdGVkCisgICAgQVNTRVJUX1RSVUUo
Z3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBDQVNFIDE6IGEgcHJvcGVy
dHkgY2hhbmdlIG9uIHRoZSBtYXNrIHNob3VsZCBkYW1hZ2Ugb25seSB0aGUgcmVmbGVjdGVkIHJl
Z2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgcmVwbGljYU1hc2tMYXllci0+c2V0T3Bh
Y2l0eSgwLjYpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICBGbG9hdFJlY3QgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxvYXRS
ZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxk
RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgxOTQsIDIwMCwgNiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IHJl
bW92aW5nIHRoZSByZXBsaWNhIG1hc2sgZGFtYWdlcyBvbmx5IHRoZSByZWZsZWN0ZWQgcmVnaW9u
IG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+
c2V0TWFza0xheWVyKDApOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisKKyAgICBncmFuZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworCisgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZERhbWFnZVJlY3QuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTk0LCAyMDAsIDYs
IDgpLCBjaGlsZERhbWFnZVJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDk0MmJlYzJm
NzEzYTI4NDUyMWJhYTk0M2VjY2M0NGUyMGI4YWM1ZmYuLjg5MDUwNTBlNjY3MzkzMjY1Yjk0Yzlm
YjJmNTVhM2RhOWIzZjFmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTM1LDIxICszNSwyMSBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIG5hbWVzcGFjZSB7CiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRS
RUVfQ0hBTkdFRChjb2RlVG9UZXN0KSAgICAgICAgICAgICAgICAgIFwKLSAgICByb290LT5yZXNl
dFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShy
b290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBFWFBFQ1RfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkLT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpKQogCiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9O
T1RfQ0hBTkdFKGNvZGVUb1Rlc3QpICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0
eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
cm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmxh
eWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQ
RUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQtPmxheWVyUHJvcGVydHlDaGFu
Z2VkKCkpCiAKICNkZWZpbmUgRVhFQ1VURV9BTkRfVkVSSUZZX09OTFlfTEFZRVJfQ0hBTkdFRChj
b2RlVG9UZXN0KSAgICAgICAgICAgICAgIFwKLSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdl
ZEZsYWdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5y
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfVFJVRShyb290LT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFM
U0UoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
IFwKQEAgLTExNSw3ICsxMTUsNyBAQCBURVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5TGF5ZXJD
aGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9PTkxZX0xB
WUVSX0NIQU5HRUQocm9vdC0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjpncmF5KSk7CiAKICAg
ICAvLyBTcGVjaWFsIGNhc2U6IGNoZWNrIHRoYXQgc3VibGF5ZXIgdHJhbnNmb3JtIGNoYW5nZXMg
YWxsIGxheWVyJ3MgZGVzY2VuZGFudHMsIGJ1dCBub3QgdGhlIGxheWVyIGl0c2VsZi4KLSAgICBy
b290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CisgICAgcm9vdC0+cmVz
ZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKICAgICByb290LT5zZXRTdWJsYXllclRy
YW5zZm9ybShhcmJpdHJhcnlUcmFuc2Zvcm0pOwogICAgIEVYUEVDVF9GQUxTRShyb290LT5sYXll
clByb3BlcnR5Q2hhbmdlZCgpKTsKICAgICBFWFBFQ1RfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBjOWEyZmM2NTEzMjU2NmI0MjYz
YTAwNjg4ZjU3YzNmNTI3YjE2MWIyLi44M2E0NGVjYWEwZmIyMjA3ZTUxMjMzZWQ0MWZhNmE4ZmU0
NmEyMjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogCisjaW5jbHVkZSAiQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTM2LDI3ICszNyw2IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi0vLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBh
IGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGd0ZXN0IGVycm9ycyBjYW4gZ2l2ZSB1cyB1c2VmdWwgbGlu
ZSBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVzdC4KLS8vIEV2ZW4gdGhvdWdoIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUgZG91YmxlLCB0aGVyZSBhcmUgbWFueSBvdGhlciBm
bG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCwgYW5kIHNvIHdlCi0vLyBvbmx5IGV4cGVjdCB0aGVt
IHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KLSNkZWZpbmUg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWQsIGFjdHVhbCkgICAgXAotICAgIEVY
UEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMSgpLCAoYWN0dWFsKS5tMTEoKSk7ICBcCi0gICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEyKCksIChhY3R1YWwpLm0xMigpKTsgIFwKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgXAot
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7ICBc
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIxKCksIChhY3R1YWwpLm0yMSgpKTsg
IFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkp
OyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMo
KSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTI0KCksIChhY3R1YWwpLm0y
NCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCku
bTMxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFs
KS5tMzIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMzKCksIChhY3R1
YWwpLm0zMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFj
dHVhbCkubTM0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAo
YWN0dWFsKS5tNDEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQyKCks
IChhY3R1YWwpLm00MigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMo
KSwgKGFjdHVhbCkubTQzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00
NCgpLCAoYWN0dWFsKS5tNDQoKSkKLQogdm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IElu
dFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKIHsKICAgICBsYXllci0+c2V0VHJhbnNm
b3JtKHRyYW5zZm9ybSk7CkBAIC0xMjAsMTIgKzEwMCwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JOb09wTGF5ZXIpCiAKICAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CiAKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0
cml4LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50
aXR5TWF0cml4LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5
TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
U2luZ2xlTGF5ZXIpCkBAIC0xNDQsOCArMTI0LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgYXJiaXRyYXJ5VHJh
bnNsYXRpb24udHJhbnNsYXRlKDEwLjAsIDIwLjApOwogICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBhcmJpdHJhcnlUcmFuc2xhdGlv
biwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgwLCAwKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAog
ICAgIC8vIENhc2UgMjogc2V0dGluZyB0aGUgYm91bmRzIG9mIHRoZSBsYXllciBzaG91bGQgcmVz
dWx0IGluIGEgZHJhdyB0cmFuc2Zvcm0gdGhhdCB0cmFuc2xhdGVzIHRvIGhhbGYgdGhlIHdpZHRo
IGFuZCBoZWlnaHQuCiAgICAgLy8gICAgICAgICBUaGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSBz
aG91bGQgcmVtYWluIGFzIHRoZSBpZGVudGl0eSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBkZWFsIHdp
dGggdHJhbnNmb3JtaW5nIHRvL2Zyb20gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCkBAIC0xNTMs
MjIgKzEzMywyMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JTaW5nbGVMYXllcikKICAgICB0cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1
LjAsIDYuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0
eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1h
dHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAzOiBU
aGUgYW5jaG9yIHBvaW50IGJ5IGl0c2VsZiAod2l0aG91dCBhIGxheWVyIHRyYW5zZm9ybSkgc2hv
dWxkIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSB0cmFuc2Zvcm1zLgogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRT
aXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNs
YXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA0OiBBIGNoYW5nZSBpbiAiYWN0dWFsIiBwb3NpdGlv
biBhZmZlY3RzIGJvdGggdGhlIGRyYXcgdHJhbnNmb3JtIGFuZCBzY3JlZW4gc3BhY2UgdHJhbnNm
b3JtLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBvc2l0aW9uVHJhbnNmb3JtOwogICAgIHBv
c2l0aW9uVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLjAsIDEuMik7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgNC4yZiksIEludFNp
emUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zv
cm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
bGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShwb3NpdGlvblRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwog
CiAgICAgLy8gQ2FzZSA1OiBJbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zLCB0
aGUgbGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBwcmUtbXVsdGlwbHkgdGhlIHRyYW5zbGF0aW9uVG9D
ZW50ZXIuIFRoaXMgaXMgZWFzaWx5IHRlc3RlZCBieQogICAgIC8vICAgICAgICAgdXNpbmcgYSBz
Y2FsZSB0cmFuc2Zvcm0sIGJlY2F1c2Ugc2NhbGUgYW5kIHRyYW5zbGF0aW9uIGFyZSBub3QgY29t
bXV0YXRpdmUuCkBAIC0xNzYsOCArMTU2LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgbGF5ZXJUcmFuc2Zvcm0u
c2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFs
c2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5
ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3Jt
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGxheWVy
VHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShsYXllclRyYW5zZm9ybSwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA2OiBUaGUgbGF5ZXIg
dHJhbnNmb3JtIHNob3VsZCBvY2N1ciB3aXRoIHJlc3BlY3QgdG8gdGhlIGFuY2hvciBwb2ludC4K
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOwpAQCAtMTg1LDgg
KzE2NSw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0ZvclNpbmdsZUxheWVyKQogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkUmVzdWx0
ID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0Fu
Y2hvci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAu
MGYpLCBGbG9hdFBvaW50KDUuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgp
KTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5z
bGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3Vs
dCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9zaXRp
b24gcHJlLW11bHRpcGxpZXMgdGhlIGxheWVyIHRyYW5zZm9ybS4KICAgICAvLyAgICAgICAgIFRo
ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eSBkb2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCkBAIC0xOTQsOCArMTc0LDgg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2lu
Z2xlTGF5ZXIpCiAgICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5z
bGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52
ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxh
eWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxv
YXRQb2ludCg1LjBmLCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0
ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRv
Q2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQgKiB0cmFu
c2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKQEAgLTIxNiwxMCArMTk2LDEwIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJh
cmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBn
cmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1h
dHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAK
ICAgICAvLyBDYXNlIDI6IHBhcmVudCdzIHBvc2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5k
Q2hpbGQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07
CkBAIC0yMjgsMTAgKzIwOCwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2
LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJh
bnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9y
bSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNm
b3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3Np
dGlvblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAvLyBDYXNlIDM6IHBhcmVudCdzIGxvY2FsIHRyYW5zZm9ybSBhZmZlY3RzIGNoaWxkIGFuZCBn
cmFuZGNoaWxkCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07
CkBAIC0yNDMsMTAgKzIyMywxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2
LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFy
ZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKIAogICAgIC8vIENhc2UgNDogcGFyZW50J3Mgc3VibGF5ZXJNYXRyaXggYWZmZWN0cyBjaGls
ZCBhbmQgZ3JhbmRjaGlsZAogICAgIC8vICAgICAgICAgc2NhbGluZyBpcyB1c2VkIGhlcmUgYWdh
aW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zIGlzIHByb3Blcmx5
IHRlc3RlZC4KQEAgLTI2NCwxMCArMjQ0LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIElu
dFNpemUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Z3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCks
IGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENo
aWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0s
IGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50
ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA1OiBzYW1lIGFzIENhc2UgNCwg
ZXhjZXB0IHRoYXQgY2hpbGQgZG9lcyBwcmVzZXJ2ZSAzRCwgc28gdGhlIGdyYW5kQ2hpbGQgc2hv
dWxkIHJlY2VpdmUgdGhlIG5vbi1mbGF0dGVuZWQgY29tcG9zaXRlIHRyYW5zZm9ybS4KICAgICAv
LwpAQCAtMjc1LDEwICsyNTUsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCB0cnVlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFy
ZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1z
Rm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKQEAgLTMyMSwxMiArMzAxLDEyIEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZh
Y2UpCiAKICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIncyBkcmF3IHRyYW5zZm9ybSBzaG91bGQgcmVm
ZXIgdG8gaXRzIG5ldyByZW5kZXIgc3VyZmFjZTsgdGhleSBvbmx5IGRpZmZlciBieSBhIHRyYW5z
bGF0aW9uIHRvIGNlbnRlci4KICAgICAvLyBUaGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSwgaG93
ZXZlciwgc2hvdWxkIHN0aWxsIHJlZmVyIHRvIHRoZSByb290LgotICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50
Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAvLyBXaXRob3V0IGNsaXBwaW5nLCB0aGUgb3JpZ2luIHRyYW5zZm9ybSBhbmQgZHJhdyB0cmFu
c2Zvcm0gKGluIHRoaXMgcGFydGljdWxhciBjYXNlKSBzaG91bGQgYmUgdGhlIHNhbWUuCi0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGls
ZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CiAKIH0KIApAQCAtNDIzLDM4ICs0MDMs
MzggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
UmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICAvLyAgbm90ZSB0aGF0IGRyYXcgdHJhbnNmb3Jt
cyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byB0aGUgbmVhcmVzdCBhbmNlc3RvciByZW5k
ZXIgc3VyZmFjZQogICAgIC8vICBidXQgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybXMgYXJlIGRlc2Ny
aWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QuCiAgICAgLy8KLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgcGFyZW50LT5kcmF3VHJhbnNm
b3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIHRyYW5z
bGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgZ3JhbmRDaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICog
QiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBB
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgp
KTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIs
IHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBB
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEodHJhbnNsYXRpb25Ub0NlbnRl
ciwgcmVuZGVyU3VyZmFjZTEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzEt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShC
ICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMxLT5kcmF3
VHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRp
b25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9m
UlMyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIg
KiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzItPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xh
dGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMi0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxk
T2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBWZXJpZnkgbGF5ZXIgc2NyZWVuLXNw
YWNlIHRyYW5zZm9ybXMKICAgICAvLwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEs
IHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBLCBjaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGdyYW5k
Q2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoQSwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgY2hpbGRPZlJvb3Qt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBLCBy
ZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAq
IEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIHJlbmRlclN1
cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICog
QSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwg
cmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEg
KiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEg
KiBCICogQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAq
IEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBCICog
QSwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFZl
cmlmeSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zvcm1zLgogICAgIC8vCiAgICAgLy8gT3JpZ2luIHRy
YW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAxIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8g
cm9vdC4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1
cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnJlbmRl
clN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0g
b2YgcmVuZGVyIHN1cmZhY2UgMiBpcyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJlbmRlciBz
dXJmYWNlIDIuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEsIHJlbmRlclN1
cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3Vy
ZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBTYW5pdHkgY2hlY2suIElmIHRo
ZXNlIGZhaWwgdGhlcmUgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIHRlc3QgaXRzZWxmLgogICAg
IC8vIEl0IGlzIGV4cGVjdGVkIHRoYXQgd2UgY29ycmVjdGx5IHNldCB1cCB0cmFuc2Zvcm1zIHNv
IHRoYXQgdGhlIHktY29tcG9uZW50IG9mIHRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1v
bi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYjgzZGFjYWJhM2NmZTAxY2FjYTNhYmE1OWJmNzg3NjRhN2RkMWEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZVRlc3RDb21tb24uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEND
TGF5ZXJUcmVlVGVzdENvbW1vbl9oCisjZGVmaW5lIENDTGF5ZXJUcmVlVGVzdENvbW1vbl9oCisK
K25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9m
IGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0
IGZhaWxlZC4KKyNkZWZpbmUgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5sb2NhdGlvbigpLngoKSwgKGFjdHVhbCkubG9jYXRpb24oKS54KCkpOyBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS55KCksIChhY3R1YWwpLmxvY2F0aW9uKCku
eSgpKTsgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS53aWR0aCgpLCAo
YWN0dWFsKS5zaXplKCkud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5zaXplKCkuaGVpZ2h0KCksIChhY3R1YWwpLnNpemUoKS5oZWlnaHQoKSkKKworLy8gVGhpcyBp
cyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGlu
ZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCisvLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSBwcmVjaXNpb24sIHRoZXJlIGFyZSBtYW55IG90
aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkIHRoYXQgYWZmZWN0CisvLyB0aGUgdHJhbnNm
b3JtcywgYW5kIHNvIHdlIG9ubHkgZXhwZWN0IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxv
YXRpbmctcG9pbnQgcHJlY2lzaW9uLgorI2RlZmluZSBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkLCBhY3R1YWwpICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTExKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTEyKCksIChhY3R1YWwpLm0xMigpKTsgICAgICAgICAgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMygpLCAoYWN0dWFsKS5tMTMoKSk7ICAgICAg
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVhbCkubTE0
KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIxKCksIChh
Y3R1YWwpLm0yMSgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0yMigpLCAoYWN0dWFsKS5tMjIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMjMoKSwgKGFjdHVhbCkubTIzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTI0KCksIChhY3R1YWwpLm0yNCgpKTsgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMSgpLCAoYWN0dWFsKS5tMzEoKSk7ICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzIoKSwgKGFjdHVhbCku
bTMyKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMzKCks
IChhY3R1YWwpLm0zMygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0zNCgpLCAoYWN0dWFsKS5tMzQoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgICAgICAgICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQyKCksIChhY3R1YWwpLm00MigpKTsgICAgICAgICAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MygpLCAoYWN0dWFsKS5tNDMoKSk7
ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVh
bCkubTQ0KCkpCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBDQ0xheWVyVHJlZVRlc3RD
b21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRl
clN1cmZhY2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJT
dXJmYWNlVGVzdC5jcHAKaW5kZXggNzA0NTQ0YjZhZGIzM2QzYTBmZmEzNWU4ZTc0MmQ0MzdkYzFl
ZmRmZS4uYzNiMzY2ZGRhMzIzNzQ2ODY4NmZiZjgzZWQ0ZmUzMzkwZjgyZjMzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3Bw
CkBAIC01OSwxOCArNTksMTYgQEAgVEVTVChDQ1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlTdXJm
YWNlQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBBU1NFUlRfVFJVRShvd25pbmdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSBvd25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgIEludFJlY3QgdGVzdFJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDMsIDQpLCBJbnRTaXplKDUsIDYpKTsKLQotICAgIG93bmluZ0xheWVy
LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CisgICAgb3duaW5nTGF5ZXIt
PnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKICAgICAvLyBDdXJyZW50bHks
IHRoZSBjb250ZW50UmVjdCwgY2xpcFJlY3QsIGFuZCBvd25pbmdMYXllci0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSBhcmUKICAgICAvLyB0aGUgb25seSBzb3VyY2VzIG9mIGNoYW5nZS4KICAgICBF
WEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9DSEFOR0VEKHJlbmRlclN1cmZhY2UtPnNldENsaXBS
ZWN0KHRlc3RSZWN0KSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hBTkdFRChy
ZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50UmVjdCh0ZXN0UmVjdCkpOwogCi0gICAgb3duaW5nTGF5
ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKICAgICBvd25pbmdMYXll
ci0+c2V0T3BhY2l0eSgwLjVmKTsKICAgICBFWFBFQ1RfVFJVRShyZW5kZXJTdXJmYWNlLT5zdXJm
YWNlUHJvcGVydHlDaGFuZ2VkKCkpOwotICAgIG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hh
bmdlZEZsYWdGb3JTdWJ0cmVlKCk7CisgICAgb3duaW5nTGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJh
Y2tpbmdGb3JTdWJ0cmVlKCk7CiAKICAgICAvLyBTZXR0aW5nIHRoZSBzdXJmYWNlIHByb3BlcnRp
ZXMgdG8gdGhlIHNhbWUgdmFsdWVzIGFnYWluIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCAiY2hh
bmdlIi4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5k
ZXJTdXJmYWNlLT5zZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBlZDljZWNiOTYzNjYx
OWFjZDI1ZTQwMjA1OTFhZGE2ZDM2M2E5MzFiLi43ODA5ZDE4YTQzNjcwZDQ4YWE3ODYxZmI4NzA0
NjU2Mjg1OTNmYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYsMTAgKzI2LDEyIEBACiAKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgOjp0
ZXN0aW5nOjpNb2NrOwogdXNpbmcgOjp0ZXN0aW5nOjpfOwogdXNpbmcgOjp0ZXN0aW5nOjpBdExl
YXN0OwpAQCAtMTMyLDE0ICsxMzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHZlcmlmeVRlc3RU
cmVlSW5pdGlhbFN0YXRlKCk7CiAgICAgfQogCi0gICAgdm9pZCB2ZXJpZnlGbG9hdFJlY3RzQWxt
b3N0RXF1YWwoY29uc3QgRmxvYXRSZWN0JiBleHBlY3RlZCwgY29uc3QgRmxvYXRSZWN0JiBhY3R1
YWwpIGNvbnN0Ci0gICAgewotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRp
b24oKS54KCksIGFjdHVhbC5sb2NhdGlvbigpLngoKSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9F
UShleHBlY3RlZC5sb2NhdGlvbigpLnkoKSwgYWN0dWFsLmxvY2F0aW9uKCkueSgpKTsKLSAgICAg
ICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUoKS53aWR0aCgpLCBhY3R1YWwuc2l6ZSgp
LndpZHRoKCkpOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQuc2l6ZSgpLmhlaWdo
dCgpLCBhY3R1YWwuc2l6ZSgpLmhlaWdodCgpKTsKLSAgICB9Ci0KICAgICBNb2NrTGF5ZXJEZWxl
Z2F0ZSBtX3NpbGVudERlbGVnYXRlLCBtX3BhcmVudERlbGVnYXRlOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBtX2NoaWxkMywgbV9ncmFu
ZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKIH07CkBAIC01NjIsMjQgKzU1
NiwyNCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1
c2VzQ29ycmVjdEJlaGF2aW9yKQogCiAgICAgLy8gQ2FzZSAxOiBiYXNpYwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RF
cXVhbChkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9S
RUNUX0VRKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBDYXNlIDI6
IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxkIGJlIHVuaW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0
eTIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgdmVyaWZ5
RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4w
ZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0
KCkpOwogCiAgICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1
c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxh
eShlbXB0eURpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9h
dFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4w
ZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgNDogTGF5
ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBi
b3VuZHMKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVj
dCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1
LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwg
dGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxh
eSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnIHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJv
dW5kcyB0byBiZSBkaXJ0eSwKICAgICAvLyAgICAgICAgIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5n
IGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgdmVy
aWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRo
KCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0
ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBy
ZXNldE5lZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBOT1QgY2Fs
bCBub3RpZnlTeW5jUmVxdWlyZWQuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgp
KTsKQEAgLTU5NiwxMyArNTkwLDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tT
ZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZs
b2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRC
b3VuZHModGVzdEJvdW5kcyk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0
UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUwOC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYs
IDUwOC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgdGVzdExheWVyLT5yZXNl
dE5lZWRzRGlzcGxheSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCku
aXNFbXB0eSgpKTsKIAogICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5KTsKLSAg
ICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0
KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdl
Q2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpAQCAtNjU2LDcgKzY1MCw3IEBAIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAg
ICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkKICAg
ICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNo
YW5nZSB0aGUgZGlydHkgcmVjdC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUs
IDEwKSkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116860</attachid>
            <date>2011-11-28 17:49:19 -0800</date>
            <delta_ts>2011-11-28 17:55:44 -0800</delta_ts>
            <desc>previous patch is missing an include, fails commit queue</desc>
            <filename>bug-72520-20111128174918.patch</filename>
            <type>text/plain</type>
            <size>106614</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJiNDQ3MmEwNjdmMmFh
NWE3NzM2MWFiZjgyOGQ2OGNkYzM1MjFiNS4uYjkxZjNlMWQxY2E5ZmQ0OTc1MDNmZmY5OWY1MDA3
YjFiZWFiNmM2MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpj
b21wdXRlRGFtYWdlRnJvbVN1cmZhY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEZpeCBBc3BlY3QgUmF0aW8gUHJvcGVydHkgSW5oZXJpdGFuY2UgQW5kIE1ha2Ug
dGhlIENvbXB1dGVkIFZhbHVlIEVxdWFsIHRoZSBTcGVjaWZpZWQgVmFsdWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMjEzZGZmZGI3ZTVmMGI5YWRjMWMzMzU5Y2IyOGIyMDFlMzg2ZjFk
Ni4uZDgxMGI2YWZhODA5YTQ1ODI1ZTFlNDdjZDE2NmY5MTdjMjA3Yzg5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBD
Q0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBh
IHN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5n
T25lRnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZh
Y2VzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9u
ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorCiAyMDExLTExLTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxMjczLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNkMTJhNzhiZDFlMDllZDZkNjZjM2YzMDUwMmY4MzI5MDkwMDI4YWEuLjcwYjNi
MTBjM2M4OGYyM2I4YTAyYTc4MzYwY2Q0MTA0ODBlNmFiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1NzEsNiArMzU3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZWJjMzk0YzRjNWRhZDMxNmNjZGJk
YTYxNTUyNGVmOTA3YTI0MDU2Yi4uZTQxODllYzc5Njk1MmRjN2QxMWU1YTg5MTZkMzc1MzViMWE3
NzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
VHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgpAQCAtMzMxLDYgKzMzMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAg
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworCiAgICAgICAgICAgICBpZiAocmVu
ZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkpOwogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CkBAIC0zNDUsNyArMzQ3LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGEKICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQg
c3RhcnQgYnkgYXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5v
dGVkIGFzIHRoZXkgb2NjdXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5n
ZWRGbGFnRm9yU3VidHJlZSgpOworICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJh
Y2tpbmdGb3JTdWJ0cmVlKCk7CiB9CiAKIApAQCAtNTgzLDcgKzU4NSw3IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdl
dFN1cmZhY2UpIHsKKyAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNl
Q29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93
bmluZ0xheWVySWQoKSkpIHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0
aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNl
KCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5Mzk5Yzg3Yjg3ZWY1ZjVjZGVjY2M2
YTBlODA1ODQwYjExMTlkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTAsMCArMSwz
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c093blB0cjxDQ0RhbWFnZVRyYWNrZXI+IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDRGFtYWdlVHJhY2tlcigpKTsKK30KKworQ0NEYW1hZ2VU
cmFja2VyOjpDQ0RhbWFnZVRyYWNrZXIoKQoreworICAgIG1fY3VycmVudFJlY3RIaXN0b3J5ID0g
YWRvcHRQdHIobmV3IFJlY3RNYXApOworICAgIG1fbmV4dFJlY3RIaXN0b3J5ID0gYWRvcHRQdHIo
bmV3IFJlY3RNYXApOworfQorCitDQ0RhbWFnZVRyYWNrZXI6On5DQ0RhbWFnZVRyYWNrZXIoKQor
eworfQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFt
ZShjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIGludCB0YXJn
ZXRTdXJmYWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7
CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSAiZGFtYWdlIHJlY3Qi
IG9mIGEgdGFyZ2V0IHN1cmZhY2UuIFRoZSBkYW1hZ2UKKyAgICAvLyByZWN0IGlzIHRoZSByZWdp
b24gb2YgdGhlIHN1cmZhY2UgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkIGFuZCBuZWVkcyB0byBiZSBy
ZWRyYXduLgorICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVh
bGx5IGRyYXduLCB0byBzYXZlIEdQVSBjb21wdXRhdGlvbiBhbmQKKyAgICAvLyBiYW5kd2lkdGgu
CisgICAgLy8KKyAgICAvLyBUaGUgc3VyZmFjZSdzIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkIGFz
IHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgY2hhbmdlcyB0aGF0CisgICAgLy8gaGF2ZSBoYXBw
ZW5lZCB0byB0aGUgc3VyZmFjZSBzaW5jZSB0aGUgbGFzdCBmcmFtZSB3YXMgZHJhd24uIFRoaXMg
aW5jbHVkZXM6CisgICAgLy8gICAtIGFueSBjaGFuZ2VzIGZvciBleGlzdGluZyBsYXllcnMvc3Vy
ZmFjZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZQorICAgIC8vICAgLSBs
YXllcnMvc3VyZmFjZXMgdGhhdCBleGlzdGVkIGluIHRoZSBwcmV2aW91cyBmcmFtZSwgYnV0IG5v
IGxvbmdlciBleGlzdC4KKyAgICAvLworICAgIC8vIFRoZSBiYXNpYyBhbGdvcml0aG0gZm9yIGNv
bXB1dGluZyB0aGUgZGFtYWdlIHJlZ2lvbiBpcyBhcyBmb2xsb3dzOgorICAgIC8vCisgICAgLy8g
ICAgICAgLy8gMS4gY29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IGNoYW5nZXMgaW4gYWN0aXZlL25l
dyBsYXllcnMKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsYXllciBpbiB0aGUgbGF5ZXJMaXN0Ogor
ICAgIC8vICAgICAgICAgICBpZiB0aGUgbGF5ZXIgaXMgYWN0dWFsbHkgYSByZW5kZXJTdXJmYWNl
OgorICAgIC8vICAgICAgICAgICAgICAgYWRkIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIHRvIG91ciB0
YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAgICAgICAgICAgZWxzZQorICAgIC8vICAgICAgICAgICAg
ICAgYWRkIHRoZSBsYXllcidzIGRhbWFnZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8K
KyAgICAvLyAgICAgICAvLyAyLiBjb21wdXRlIGRhbWFnZSBjYXVzZWQgYnkgdGhlIHRhcmdldCBz
dXJmYWNlJ3MgbWFzaywgaWYgaXQgZXhpc3RzLgorICAgIC8vCisgICAgLy8gICAgICAgLy8gMy4g
Y29tcHV0ZSBkYW1hZ2UgY2F1c2VkIGJ5IG9sZCBsYXllcnMvc3VyZmFjZXMgdGhhdCBubyBsb25n
ZXIgZXhpc3QKKyAgICAvLyAgICAgICBmb3IgZWFjaCBsZWZ0b3ZlciBsYXllcjoKKyAgICAvLyAg
ICAgICAgICAgYWRkIHRoZSBvbGQgbGF5ZXIvc3VyZmFjZSBib3VuZHMgdG8gdGhlIHRhcmdldCBz
dXJmYWNlIGRhbWFnZS4KKyAgICAvLworICAgIC8vICAgICAgIC8vIDQuIGNvbWJpbmUgYWxsIHBh
cnRpYWwgZGFtYWdlIHJlY3RzIHRvIGdldCB0aGUgZnVsbCBkYW1hZ2UgcmVjdC4KKyAgICAvLwor
ICAgIC8vIEFkZGl0aW9uYWwgaW1wb3J0YW50IHBvaW50czoKKyAgICAvLworICAgIC8vIC0gVGhp
cyBhbGdvcml0aG0gaXMgaW1wbGljaXRseSByZWN1cnNpdmU7IGl0IGFzc3VtZXMgdGhhdCBkZXNj
ZW5kYW50IHN1cmZhY2VzIGhhdmUKKyAgICAvLyAgIGFscmVhZHkgY29tcHV0ZWQgdGhlaXIgZGFt
YWdlLgorICAgIC8vCisgICAgLy8gLSBDaGFuZ2VzIHRvIGxheWVycy9zdXJmYWNlcyBpbmRpY2F0
ZSAiZGFtYWdlIiB0byB0aGUgdGFyZ2V0IHN1cmZhY2U7IElmIGEgbGF5ZXIgaXMKKyAgICAvLyAg
IG5vdCBjaGFuZ2VkLCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlIGxheWVyIGNhbiBza2lwIGRy
YXdpbmcuIEFsbCBsYXllcnMgdGhhdAorICAgIC8vICAgb3ZlcmxhcCB0aGUgZGFtYWdlZCByZWdp
b24gc3RpbGwgbmVlZCB0byBiZSBkcmF3bi4gRm9yIGV4YW1wbGUsIGlmIGEgbGF5ZXIKKyAgICAv
LyAgIGNoYW5nZWQgaXRzIG9wYWNpdHksIHRoZW4gbGF5ZXJzIHVuZGVybmVhdGggbXVzdCBiZSBy
ZS1kcmF3biBhcyB3ZWxsLCBldmVuIGlmCisgICAgLy8gICB0aGV5IGRpZCBub3QgY2hhbmdlLgor
ICAgIC8vCisgICAgLy8gLSBJZiBhIGxheWVyL3N1cmZhY2UgcHJvcGVydHkgY2hhbmdlZCwgdGhl
IG9sZCBib3VuZHMgYW5kIG5ldyBib3VuZHMgbWF5IG92ZXJsYXAuLi4KKyAgICAvLyAgIGkuZS4g
c29tZSBvZiB0aGUgZXhwb3NlZCByZWdpb24gbWF5IG5vdCBhY3R1YWxseSBiZSBleHBvc2luZyBh
bnl0aGluZy4gQnV0IHRoaXMKKyAgICAvLyAgIGRvZXMgbm90IGFydGlmaWNpYWxseSBpbmZsYXRl
IHRoZSBkYW1hZ2UgcmVjdC4gSWYgdGhlIGxheWVyIGNoYW5nZWQsIGl0cyBlbnRpcmUKKyAgICAv
LyAgIG9sZCBib3VuZHMgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgcmVkcmF3biwgcmVnYXJkbGVz
cyBvZiBob3cgbXVjaCBpdCBvdmVybGFwcworICAgIC8vICAgd2l0aCB0aGUgbGF5ZXIncyBuZXcg
Ym91bmRzLCB3aGljaCBhbHNvIG5lZWQgdG8gYmUgZW50aXJlbHkgcmVkcmF3bi4KKyAgICAvLwor
ICAgIC8vIC0gU2VlIGNvbW1lbnRzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSB3aGF0
IGV4YWN0bHkgaXMgY29uc2lkZXJlZCBhICJjaGFuZ2UiCisgICAgLy8gICBpbiBhIGxheWVyL3N1
cmZhY2UuCisgICAgLy8KKyAgICAvLyAtIFRvIGNvcnJlY3RseSBtYW5hZ2UgZXhwb3NlZCByZWN0
cywgdHdvIFJlY3RNYXBzIGFyZSBtYWludGFpbmVkOgorICAgIC8vCisgICAgLy8gICAgICAxLiBU
aGUgImN1cnJlbnQiIG1hcCBjb250YWlucyBhbGwgdGhlIGxheWVyIGJvdW5kcyB0aGF0IGNvbnRy
aWJ1dGVkIHRvIHRoZQorICAgIC8vICAgICAgICAgcHJldmlvdXMgZnJhbWUgKGV2ZW4gb3V0c2lk
ZSB0aGUgcHJldmlvdXMgZGFtYWdlZCBhcmVhKS4gSWYgYSBsYXllciBjaGFuZ2VzCisgICAgLy8g
ICAgICAgICBvciBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aG9zZSByZWdpb25zIGFyZSB0aGVu
IGV4cG9zZWQgYW5kIGRhbWFnZSB0aGUKKyAgICAvLyAgICAgICAgIHRhcmdldCBzdXJmYWNlLiBB
cyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGVudHJpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUK
KyAgICAvLyAgICAgICAgIG1hcCB1bnRpbCBpdCBoYXMgb25seSBsZWZ0b3ZlciBsYXllcnMgdGhh
dCBubyBsb25nZXIgZXhpc3QuCisgICAgLy8KKyAgICAvLyAgICAgIDIuIFRoZSAibmV4dCIgbWFw
IHN0YXJ0cyBvdXQgZW1wdHksIGFuZCBhcyB0aGUgYWxnb3JpdGhtIHByb2dyZXNzZXMsIGV2ZXJ5
CisgICAgLy8gICAgICAgICBsYXllci9zdXJmYWNlIHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHN1
cmZhY2UgaXMgYWRkZWQgdG8gdGhlIG1hcC4KKyAgICAvLworICAgIC8vICAgICAgMy4gQWZ0ZXIg
dGhlIGRhbWFnZSByZWN0IGlzIGNvbXB1dGVkLCB0aGUgdHdvIG1hcHMgYXJlIHN3YXBwZWQsIHNv
IHRoYXQgdGhlCisgICAgLy8gICAgICAgICBkYW1hZ2UgdHJhY2tlciBpcyByZWFkeSBmb3IgdGhl
IG5leHQgZnJhbWUuCisgICAgLy8KKworICAgIC8vIElmIHRoZSB0YXJnZXQgc3VyZmFjZSBhbHJl
YWR5IGtub3dzIGl0cyBlbnRpcmUgcmVnaW9uIGlzIGRhbWFnZWQsIHdlIGNhbiByZXR1cm4gZWFy
bHkuCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGdvIGF3YXksIG9yIHdpbGwgYmUgY2xlYW5l
ciwgYWZ0ZXIgcmVmYWN0b3JpbmcgaW50byBSZW5kZXJQYXNzL1JlbmRlclNjaGVkdWxlLgorICAg
IENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFswXS5nZXQoKTsKKyAgICBpZiAobGF5ZXIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVz
Y2VuZGFudCgpKSB7CisgICAgICAgIG1fY3VycmVudERhbWFnZVJlY3QgPSBGbG9hdFJlY3QobGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgZGFtYWdlRnJvbUFjdGl2ZUxheWVycyA9IGNvbXB1
dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGxheWVyTGlzdCwgdGFyZ2V0U3VyZmFjZUxheWVySUQp
OworICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSBjb21wdXRlRGFtYWdlRnJv
bVN1cmZhY2VNYXNrKHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOworICAgIEZsb2F0UmVjdCBkYW1h
Z2VGcm9tTGVmdG92ZXJSZWN0cyA9IGNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOwor
CisgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IGRhbWFnZUZyb21BY3RpdmVMYXllcnM7CisgICAg
bV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2sp
OworICAgIG1fY3VycmVudERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlRnJvbUxlZnRv
dmVyUmVjdHMpOworCisgICAgLy8gVGhlIG5leHQgaGlzdG9yeSBtYXAgYmVjb21lcyB0aGUgY3Vy
cmVudCBtYXAgZm9yIHRoZSBuZXh0IGZyYW1lLgorICAgIHN3YXAobV9jdXJyZW50UmVjdEhpc3Rv
cnksIG1fbmV4dFJlY3RIaXN0b3J5KTsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6
cmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUoaW50IGxheWVySUQpCit7CisgICAgLy8gVGhpcyBm
dW5jdGlvbiBleGlzdHMgbWFpbmx5IGZvciByZWFkYWJpbGl0eSBvZiB0aGUgY29kZS4KKyAgICAv
LyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcCwgb3IgaWYgbm90IGZv
dW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICByZXR1cm4gbV9jdXJyZW50
UmVjdEhpc3RvcnktPnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpz
YXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRT
cGFjZVJlY3QpCit7CisgICAgLy8gVGhpcyBsYXllciBzaG91bGQgbm90IHlldCBleGlzdCBpbiBu
ZXh0IGZyYW1lJ3MgaGlzdG9yeS4KKyAgICBBU1NFUlQobV9uZXh0UmVjdEhpc3RvcnktPmZpbmQo
bGF5ZXJJRCkgPT0gbV9uZXh0UmVjdEhpc3RvcnktPmVuZCgpKTsKKyAgICBtX25leHRSZWN0SGlz
dG9yeS0+c2V0KGxheWVySUQsIHRhcmdldFNwYWNlUmVjdCk7Cit9CisKK0Zsb2F0UmVjdCBDQ0Rh
bWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklE
KQoreworICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsg
KytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFts
YXllckluZGV4XS5nZXQoKTsKKworICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpy
ZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdl
dFN1cmZhY2VMYXllcklEKSkKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZh
Y2UobGF5ZXIsIGRhbWFnZVJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbmRE
YW1hZ2VGb3JMYXllcihsYXllciwgZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIGRh
bWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNvbXB1dGVEYW1hZ2VG
cm9tU3VyZmFjZU1hc2soQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpCit7Cisg
ICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGlmICghdGFyZ2V0
U3VyZmFjZU1hc2tMYXllcikKKyAgICAgICAgcmV0dXJuIGRhbWFnZVJlY3Q7CisKKyAgICAvLyBD
dXJyZW50bHksIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2UgdG8gdGhlIG1hc2ssIHdlIGNob29zZSB0
byBkYW1hZ2UgdGhlIGVudGlyZQorICAgIC8vIHN1cmZhY2UuIFRoaXMgY291bGQgcG90ZW50aWFs
bHkgYmUgb3B0aW1pemVkIGxhdGVyLCBidXQgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGEKKyAg
ICAvLyBjb21tb24gY2FzZS4KKyAgICBpZiAodGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+bGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoKSB8fCAhdGFyZ2V0U3VyZmFjZU1hc2tMYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIEZsb2F0U2l6ZSh0YXJnZXRTdXJmYWNlTWFza0xheWVyLT5ib3VuZHMoKSkpOworCisg
ICAgcmV0dXJuIGRhbWFnZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OmNv
bXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCit7CisgICAgLy8gQWZ0ZXIgY29tcHV0aW5n
IGRhbWFnZSBmb3IgYWxsIGFjdGl2ZSBsYXllcnMsIGFueSBsZWZ0b3ZlciBpdGVtcyBpbiB0aGUg
Y3VycmVudAorICAgIC8vIHJlY3QgaGlzdG9yeSBjb3JyZXNwb25kIHRvIGxheWVycy9zdXJmYWNl
cyB0aGF0IG5vIGxvbmdlciBleGlzdC4gU28sIHRoZXNlIHJlZ2lvbnMKKyAgICAvLyBhcmUgbm93
IGV4cG9zZWQgb24gdGhlIHRhcmdldCBzdXJmYWNlLgorCisgICAgRmxvYXRSZWN0IGRhbWFnZVJl
Y3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAoUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1
cnJlbnRSZWN0SGlzdG9yeS0+YmVnaW4oKTsgaXQgIT0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmVu
ZCgpOyArK2l0KQorICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0LT5zZWNvbmQpOworCisgICAg
bV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsK
K30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJ
bXBsKiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJl
IGFyZSB0d28gd2F5cyB0aGF0IGEgbGF5ZXIgY2FuIGRhbWFnZSBhIHJlZ2lvbiBvZiB0aGUgdGFy
Z2V0IHN1cmZhY2U6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFuZ2UgKGUuZy4gb3BhY2l0eSwg
cG9zaXRpb24sIHRyYW5zZm9ybXMpOgorICAgIC8vICAgICAgICAtIHRoZSBlbnRpcmUgcmVnaW9u
IG9mIHRoZSBsYXllciBpdHNlbGYgZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLyAgICAgICAg
LSB0aGUgb2xkIGxheWVyIHJlZ2lvbiBhbHNvIGRhbWFnZXMgdGhlIHN1cmZhY2UsIGJlY2F1c2Ug
dGhpcyByZWdpb24gaXMgbm93IGV4cG9zZWQuCisgICAgLy8gICAgICAgIC0gbm90ZSB0aGF0IGlu
IG1hbnkgY2FzZXMgdGhlIG9sZCBhbmQgbmV3IGxheWVyIHJlY3RzIG1heSBvdmVybGFwLCB3aGlj
aCBpcyBmaW5lLgorICAgIC8vCisgICAgLy8gICAyLiBSZXBhaW50L3VwZGF0ZTogSWYgYSByZWdp
b24gb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkLCB0aGF0CisgICAgLy8g
ICAgICByZWdpb24gZGFtYWdlcyB0aGUgc3VyZmFjZS4KKyAgICAvLworICAgIC8vIFByb3BlcnR5
IGNoYW5nZXMgdGFrZSBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0cy4KKworICAgIC8vIENvbXB1
dGUgdGhlIGxheWVyJ3MgIm9yaWdpblRyYW5zZm9ybSIgYnkgdHJhbnNsYXRpbmcgdGhlIGRyYXdU
cmFuc2Zvcm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBvcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUg
KiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQo
KSk7CisKKyAgICBGbG9hdFJlY3Qgb2xkTGF5ZXJSZWN0ID0gcmVtb3ZlUmVjdEZyb21DdXJyZW50
RnJhbWUobGF5ZXItPmlkKCkpOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdEluVGFyZ2V0U3Bh
Y2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBsYXllci0+Ym91bmRzKCkpKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFtZShsYXllci0+aWQo
KSwgbGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVy
dHlDaGFuZ2VkKCkpIHsKKyAgICAgICAgLy8gSWYgYSBsYXllciBoYXMgY2hhbmdlZCwgdGhlbiBp
dHMgZW50aXJlIGxheWVyIHJlY3QgYWZmZWN0cyB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgICAg
IHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8obGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSk7
CisKKyAgICAgICAgLy8gVGhlIGxheWVyJ3Mgb2xkIHJlZ2lvbiBpcyBub3cgZXhwb3NlZCBvbiB0
aGUgdGFyZ2V0IHN1cmZhY2UsIHRvby4KKyAgICAgICAgLy8gTm90ZSBvbGRMYXllclJlY3QgaXMg
YWxyZWFkeSBpbiB0YXJnZXQgc3BhY2UuCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJ
Zk5vblplcm8ob2xkTGF5ZXJSZWN0KTsKKyAgICB9IGVsc2UgaWYgKCFsYXllci0+dXBkYXRlUmVj
dCgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgcHJvcGVydGllcyBoYXZl
bnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNlIGlzIG9ubHkKKyAgICAgICAg
Ly8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEsIHdoaWNoIGNvdWxkIGJlIGVt
cHR5LgorICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5U
cmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dXBkYXRlUmVjdCgpKTsKKyAgICAgICAgdGFyZ2V0RGFt
YWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0SW5UYXJnZXRTcGFjZSk7CisgICAgfQor
fQorCit2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCkKK3sKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHdheXMgYSAiZGVzY2VuZGFudCBzdXJmYWNlIiBjYW4gZGFtYWdlIHJl
Z2lvbnMgb2YgdGhlICJ0YXJnZXQgc3VyZmFjZSI6CisgICAgLy8gICAxLiBQcm9wZXJ0eSBjaGFu
Z2U6CisgICAgLy8gICAgICAgIC0gYSBzdXJmYWNlJ3MgZ2VvbWV0cnkgY2FuIGNoYW5nZSBiZWNh
dXNlIG9mCisgICAgLy8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gZGVzY2VuZGFudHMgKGkuZS4g
dGhlIHN1YnRyZWUpIHRoYXQgYWZmZWN0IHRoZSBzdXJmYWNlJ3MgY29udGVudCByZWN0CisgICAg
Ly8gICAgICAgICAgICAtIGNoYW5nZXMgdG8gYW5jZXN0b3IgbGF5ZXJzIHRoYXQgcHJvcGFnYXRl
IHRoZWlyIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlaXIgZW50aXJlIHN1YnRyZWUuCisgICAgLy8g
ICAgICAgIC0ganVzdCBsaWtlIGxheWVycywgYm90aCB0aGUgb2xkIHN1cmZhY2UgcmVjdCBhbmQg
bmV3IHN1cmZhY2UgcmVjdCB3aWxsCisgICAgLy8gICAgICAgICAgZGFtYWdlIHRoZSB0YXJnZXQg
c3VyZmFjZSBpbiB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAgIDIuIERhbWFnZSByZWN0OiBU
aGlzIHN1cmZhY2UgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IGl0cyBvd24gbGF5ZXJMaXN0IGFz
IHdlbGwsIGFuZCB0aGF0IGRhbWFnZQorICAgIC8vICAgICAgc2hvdWxkIHByb3BhZ2F0ZSB0byB0
aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKworICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICBGbG9hdFJlY3Qgb2xkU3Vy
ZmFjZVJlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShsYXllci0+aWQoKSk7CisKKyAg
ICBGbG9hdFJlY3Qgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOyAvLyBhbHJlYWR5IGluY2x1ZGVzIHJlcGxpY2EgaWYgaXQgZXhp
c3RzLgorICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNlUmVjdElu
VGFyZ2V0U3BhY2UpOworCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7Cisg
ICAgaWYgKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAg
ICAvLyBUaGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgorICAgICAgICBkYW1h
Z2VSZWN0SW5Mb2NhbFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKworICAg
ICAgICAvLyBUaGUgc3VyZmFjZSdzIG9sZCByZWdpb24gaXMgbm93IGV4cG9zZWQgb24gdGhlIHRh
cmdldCBzdXJmYWNlLCB0b28uCisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblpl
cm8ob2xkU3VyZmFjZVJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9ubHkgdGhlIHN1
cmZhY2UncyBkYW1hZ2VSZWN0IHdpbGwgZGFtYWdlIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAg
ICAgZGFtYWdlUmVjdEluTG9jYWxTcGFjZSA9IHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgZGFt
YWdlLCB0cmFuc2Zvcm0gaXQgdG8gdGFyZ2V0IHNwYWNlLCBhbmQgcG9zc2libHkgY29udHJpYnV0
ZSBpdHMgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgaWYgKCFkYW1hZ2VSZWN0SW5Mb2NhbFNw
YWNlLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3Jp
Z2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBS
ZWN0KGRhbWFnZVJlY3RJbkxvY2FsU3BhY2UpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVu
aXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNh
J3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4g
c3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCks
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICAgICAgcmVw
bGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1s
YXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSk7CisKKyAgICAgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5p
dGVJZk5vblplcm8ocmVwbGljYU9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3RJbkxv
Y2FsU3BhY2UpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZXJlIHdhcyBkYW1h
Z2Ugb24gdGhlIHJlcGxpY2EncyBtYXNrLCB0aGVuIHRoZSB0YXJnZXQgc3VyZmFjZSByZWNlaXZl
cyB0aGF0IGRhbWFnZSBhcyB3ZWxsLgorICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYg
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICBDQ0xheWVySW1w
bCogcmVwbGljYU1hc2tMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7
CisKKyAgICAgICAgRmxvYXRSZWN0IG9sZFJlcGxpY2FNYXNrUmVjdCA9IHJlbW92ZVJlY3RGcm9t
Q3VycmVudEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIHJlcGxpY2EncyAib3JpZ2luVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVw
bGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIHNwYWNlLgor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgIHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24o
KS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICBy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJh
bnNmb3JtKCkpOworICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+cG9zaXRpb24oKS55KCkpOworCisgICAgICAgIEZsb2F0UmVjdCByZXBsaWNhTWFza0xheWVy
UmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBGbG9hdFNpemUocmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkud2lkdGgoKSwg
cmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKSk7CisgICAgICAgIHNhdmVSZWN0
Rm9yTmV4dEZyYW1lKHJlcGxpY2FNYXNrTGF5ZXItPmlkKCksIHJlcGxpY2FNYXNrTGF5ZXJSZWN0
KTsKKworICAgICAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYSBjaGFuZ2Ug
aW4gdGhlIHJlcGxpY2EgbWFzayBkYW1hZ2VzIHRoZSBlbnRpcmUgcmVwbGljYSByZWdpb24uCisg
ICAgICAgIGlmIChyZXBsaWNhTWFza0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpIHx8ICFy
ZXBsaWNhTWFza0xheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGFy
Z2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhTWFza0xheWVyUmVjdCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
ZWI0NDhjMDJjMmQwMjEzNGZkNDVjZWFmYTllMDYyYmUwZDcyZmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRy
YWNrZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RhbWFnZVRyYWNrZXJf
aAorI2RlZmluZSBDQ0RhbWFnZVRyYWNrZXJfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xh
eWVySW1wbDsKK2NsYXNzIENDUmVuZGVyU3VyZmFjZTsKKworLy8gQ29tcHV0ZXMgdGhlIHJlZ2lv
biB3aGVyZSBwaXhlbHMgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkIG9uIGEgUmVuZGVyU3VyZmFjZS4g
VGhpcyByZWdpb24gaXMgdXNlZAorLy8gdG8gc2Npc3NvciB3aGF0IGlzIGFjdHVhbGx5IGRyYXdu
IHRvIHRoZSBzY3JlZW4gdG8gc2F2ZSBHUFUgY29tcHV0YXRpb24gYW5kIGJhbmR3aWR0aC4KK2Ns
YXNzIENDRGFtYWdlVHJhY2tlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NE
YW1hZ2VUcmFja2VyPiBjcmVhdGUoKTsKKyAgICB+Q0NEYW1hZ2VUcmFja2VyKCk7CisKKyAgICB2
b2lkIHVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUoY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQsIENDTGF5ZXJJ
bXBsKiB0YXJnZXRTdXJmYWNlTWFza0xheWVyKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGN1cnJl
bnREYW1hZ2VSZWN0KCkgeyByZXR1cm4gbV9jdXJyZW50RGFtYWdlUmVjdDsgfQorCitwcml2YXRl
OgorICAgIENDRGFtYWdlVHJhY2tlcigpOworCisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VG
cm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVy
TGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURh
bWFnZUZyb21TdXJmYWNlTWFzayhDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7
CisgICAgRmxvYXRSZWN0IGNvbXB1dGVEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpOworCisgICAg
RmxvYXRSZWN0IHJlbW92ZVJlY3RGcm9tQ3VycmVudEZyYW1lKGludCBsYXllcklEKTsKKyAgICB2
b2lkIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFNwYWNlUmVjdCk7CisKKyAgICAvLyBUaGVzZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSB1c2Vk
IG9ubHkgaW4gY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoKS4KKyAgICB2b2lkIGV4dGVu
ZERhbWFnZUZvckxheWVyKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0
KTsKKyAgICB2b2lkIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqLCBG
bG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOworCisgICAgLy8gVG8gY29ycmVjdGx5IHRyYWNr
IGV4cG9zZWQgcmVnaW9ucywgdHdvIGhhc2h0YWJsZXMgb2YgcmVjdHMgYXJlIG1haW50YWluZWQu
CisgICAgLy8gVGhlICJjdXJyZW50IiBtYXAgaXMgdXNlZCB0byBjb21wdXRlIGV4cG9zZWQgcmVn
aW9ucyBvZiB0aGUgY3VycmVudCBmcmFtZSwgd2hpbGUKKyAgICAvLyB0aGUgIm5leHQiIG1hcCBp
cyB1c2VkIHRvIGNvbGxlY3QgbGF5ZXIgcmVjdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgbmV4dCBm
cmFtZS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBGbG9hdFJlY3Q+IFJlY3RNYXA7CisgICAg
T3duUHRyPFJlY3RNYXA+IG1fY3VycmVudFJlY3RIaXN0b3J5OworICAgIE93blB0cjxSZWN0TWFw
PiBtX25leHRSZWN0SGlzdG9yeTsKKworICAgIEZsb2F0UmVjdCBtX2N1cnJlbnREYW1hZ2VSZWN0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NEYW1hZ2VUcmFj
a2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAxMmQyMmUyYTI0MTEyMmNiNTdiOTll
ZGJkZjQ2M2ZmOWNiMjg4MjRlLi5hZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRl
OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0yMzksMTUgKzIzOSwyMiBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JEZXNjZW5kYW50cygpCiAg
ICAgICAgIG1fY2hpbGRyZW5baV0tPm5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUo
KTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3Vi
dHJlZSgpCit2b2lkIENDTGF5ZXJJbXBsOjpyZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJl
ZSgpCiB7CiAgICAgbV9sYXllclByb3BlcnR5Q2hhbmdlZCA9IGZhbHNlOworICAgIG1fdXBkYXRl
UmVjdCA9IEZsb2F0UmVjdCgpOwogCiAgICAgaWYgKG1fcmVuZGVyU3VyZmFjZSkKICAgICAgICAg
bV9yZW5kZXJTdXJmYWNlLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWcoKTsKIAorICAgIGlmICht
X21hc2tMYXllcikKKyAgICAgICAgbV9tYXNrTGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdG
b3JTdWJ0cmVlKCk7CisKKyAgICBpZiAobV9yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fcmVwbGlj
YUxheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOyAvLyBhbHNvIHJlc2V0
cyB0aGUgcmVwbGljYSBtYXNrLCBpZiBpdCBleGlzdHMuCisKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICAgICAgbV9jaGlsZHJlbltp
XS0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBDQ0xheWVy
SW1wbDo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGJmNmI2OGUxZTc4MjA3Y2UxYWM2ZmNmMjYyNTdmZDk3ZDRiZDgyNDEuLmUyYzAwYzg2
ODk4MmE3NmM2NThjYWU4MzQxMGU4NWJjY2RjZjgwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkg
Y29uc3Q7CiAKICAgICBib29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclByb3BlcnR5Q2hhbmdlZDsgfQotICAgIHZvaWQgcmVzZXRQcm9wZXJ0eUNoYW5nZWRG
bGFnRm9yU3VidHJlZSgpOyAvLyBhbHNvIHJlc2V0cyBwcm9wZXJ0eSBjaGFuZ2UgZm9yIGV4aXN0
aW5nIHJlbmRlciBzdXJmYWNlcy4KKyAgICB2b2lkIHJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JT
dWJ0cmVlKCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmM4ZGE0NjFhY2QxNzQxMGExMDI1
ZTg5MzI1NGVkYWMwMTE3M2VmNi4uYWJkZjE2MmQwM2EwOWZiMmQyMDkyYWU5NDlhZWU5MDVjYTdl
YWVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zODEsNyArMzgxLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQg
c3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJlbmRl
cgogICAgICAgICAgICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgotICAgICAgICAg
ICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAh
PSByZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJl
bmRlclN1cmZhY2VMYXllci0+aWQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwpAQCAtNDE1LDcgKzQxNSw4
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RlCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5
ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVy
SW5kZXgpIHsKICAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xh
eWVySW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorCisgICAgICAgICAg
ICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IDQ4N2Q4ZjRiZTZiY2Q2NDQ4ZGMwNjYxZDU5Njc1ZWZkNDZhMDZmN2QuLjU2ZDJi
NmM0MTg5Yzc2OWUwNGY0YWVjN2RjMDhiZjMxZDFiMjExNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAg
ICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkKICAgICAgICAgICAgICwgc2hvd0ZQ
U0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxz
ZSkKKyAgICAgICAgICAgICwgdXNlRGFtYWdlVHJhY2tlcihmYWxzZSkKICAgICAgICAgICAgICwg
cmVmcmVzaFJhdGUoMCkgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTgz
LDYgKzg0LDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRv
clRocmVhZDsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlOworICAgIGJvb2wgdXNlRGFtYWdlVHJhY2tlcjsKICAgICBkb3VibGUgcmVmcmVz
aFJhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4
IDhhNTdiZmU5NTkzNzM0MjhiNmE4OWI5YThhMmM4M2Y3OThiZjU5ZDEuLjJlMGNiY2YyYzU4NWU4
MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVy
Q2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6
ZSk7CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgQ0NM
YXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0
KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisKICAgICBzdHJ1Y3QgU2Ny
b2xsVXBkYXRlSW5mbyB7CiAgICAgICAgIGludCBsYXllcklkOwogICAgICAgICBJbnRTaXplIHNj
cm9sbERlbHRhOwpAQCAtODMsNiArODUsMjAgQEAgSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1
cm4gdmlzaWJsZUxheWVyUmVjdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgor
Ym9vbCBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFy
Z2V0KExheWVyVHlwZSogbGF5ZXIsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkKK3sKKyAgICAv
LyBBIGxheWVyIHdpbGwgZWl0aGVyIGNvbnRyaWJ1dGUgaXRzIG93biBjb250ZW50LCBvciBpdHMg
cmVuZGVyIHN1cmZhY2UncyBjb250ZW50LCB0bworICAgIC8vIHRoZSB0YXJnZXQgc3VyZmFjZS4g
VGhlIGxheWVyIGNvbnRyaWJ1dGVzIGl0cyBzdXJmYWNlJ3MgY29udGVudCB3aGVuIGJvdGggdGhl
CisgICAgLy8gZm9sbG93aW5nIGFyZSB0cnVlOgorICAgIC8vICAoMSkgVGhlIGxheWVyIGFjdHVh
bGx5IGhhcyBhIHJlbmRlclN1cmZhY2UsIGFuZAorICAgIC8vICAoMikgVGhlIGxheWVyJ3MgcmVu
ZGVyU3VyZmFjZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHRhcmdldFN1cmZhY2UuCisgICAgLy8K
KyAgICAvLyBPdGhlcndpc2UsIHRoZSBsYXllciBqdXN0IGNvbnRyaWJ1dGVzIGl0c2VsZiB0byB0
aGUgdGFyZ2V0IHN1cmZhY2UuCisKKyAgICByZXR1cm4gbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAm
JiBsYXllci0+aWQoKSAhPSB0YXJnZXRTdXJmYWNlTGF5ZXJJRDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4
IGRkMWFiNjMzZjliMDdkMDY1ZTExNDY2MzU5ZWMxZDM1NTViOTZkNjYuLmNlYjc2Njc5Y2Y2ZDVl
ZjZiNzlhMjA3YmJkODcxODE2ZGZiYTVkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgor
I2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIEND
UmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBvd25pbmdMYXllcikK
ICAgICAsIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZChmYWxzZSkKICAgICAsIG1fZHJhd09wYWNp
dHkoMSkKIHsKKyAgICBtX2RhbWFnZVRyYWNrZXIgPSBDQ0RhbWFnZVRyYWNrZXI6OmNyZWF0ZSgp
OwogfQogCiBDQ1JlbmRlclN1cmZhY2U6On5DQ1JlbmRlclN1cmZhY2UoKQpAQCAtMjM2LDYgKzIz
OCwxMCBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpIGNvbnN0CiAgICAgdHMgPDwgbV9kcmF3VHJhbnNmb3JtLm0yMSgpIDw8ICIs
ICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0yMigpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0y
MygpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0yNCgpIDw8ICIgIC8vICAiOwogICAgIHRz
IDw8IG1fZHJhd1RyYW5zZm9ybS5tMzEoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMzIo
KSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tMzMoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5z
Zm9ybS5tMzQoKSA8PCAiICAvLyAgIjsKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQxKCkg
PDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zv
cm0ubTQzKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQ0KCkgPDwgIlxuIjsKKworICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7CisgICAgdHMgPDwgImRhbWFnZVJlY3QgaXMgcG9z
KCIgPDwgbV9kYW1hZ2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpLngoKSA8PCAiLCIgPDwg
bV9kYW1hZ2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpLnkoKSA8PCAiKSwgIjsKKyAgICB0
cyA8PCAic2l6ZSgiIDw8IG1fZGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKS53aWR0
aCgpIDw8ICIsIiA8PCBtX2RhbWFnZVRyYWNrZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkuaGVpZ2h0
KCkgPDwgIilcbiI7CiB9CiAKIGludCBDQ1JlbmRlclN1cmZhY2U6Om93bmluZ0xheWVySWQoKSBj
b25zdApAQCAtMjc1LDUgKzI4MSwxMCBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVBy
b3BlcnR5Q2hhbmdlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdl
ZCB8fCBtX293bmluZ0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpOwogfQogCitib29sIEND
UmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCAmJiAhbV9vd25p
bmdMYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXgg
NGJkNGFmODU4MTk0MjY4Y2YwYzg1ZDNhNmEwZDJkNDA5ZTBlYmNkOC4uZDBlMzVhMTc4NjU0Mzdl
ZGQyYzg3MmRmYTYyMmMzNmIwZDQzYWRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgK
QEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0RhbWFn
ZVRyYWNrZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwpAQCAtMTAwLDYgKzEwMSw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnKCkgeyBtX3N1cmZhY2VQcm9wZXJ0eUNo
YW5nZWQgPSBmYWxzZTsgfQogICAgIGJvb2wgc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0
OworICAgIGJvb2wgc3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCgpIGNv
bnN0OworCisgICAgQ0NEYW1hZ2VUcmFja2VyKiBkYW1hZ2VUcmFja2VyKCkgY29uc3QgeyByZXR1
cm4gbV9kYW1hZ2VUcmFja2VyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TGF5
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOwpAQCAtMTIwLDYgKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsK
ICAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0OworCisgICAgT3du
UHRyPENDRGFtYWdlVHJhY2tlcj4gbV9kYW1hZ2VUcmFja2VyOworCisgICAgLy8gU3RvcmVkIGlu
IHRoZSAic3VyZmFjZSBzcGFjZSIgd2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNj
aXNzb3JpbmcuCisgICAgRmxvYXRSZWN0IG1fZGFtYWdlUmVjdDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCmluZGV4IGUwMTcxYWNkMTNhMWI5Y2MxOWRhYTUxYmJkM2YyM2E3
N2Y2ZDg2NmMuLjEzNjkzZDNhY2M1YzFhODAyNjQ5YjYyYzMwZThiMzk3N2JhNWQ5NDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgICAnd2Vi
a2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBl
cnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcCcsCkBAIC02MSw2ICs2Miw3IEBACiAgICAgICAgICAgICAndGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1v
bi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjM3
OWQ2NGVkYmNjNjUwNDdjOWQ3ZWI5NDM4Y2Q4M2U5ODkzMTVlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcApAQCAt
MCwwICsxLDc1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisKKyNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RD
b21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJTb3J0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNs
dWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdFRlc3RzOworCituYW1lc3BhY2UgeworCit2b2lkIGV4ZWN1dGVDYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAg
Q0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gU2FuaXR5
IGNoZWNrOiBUaGUgdGVzdCBpdHNlbGYgc2hvdWxkIGNyZWF0ZSB0aGUgcm9vdCBsYXllcidzIHJl
bmRlciBzdXJmYWNlLCBzbworICAgIC8vICAgICAgICAgICAgICAgdGhhdCB0aGUgc3VyZmFjZSAo
YW5kIGl0cyBkYW1hZ2UgdHJhY2tlcikgY2FuIHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlCisgICAg
Ly8gICAgICAgICAgICAgICBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgorICAgIEFTU0VSVF9UUlVF
KHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpKTsKKworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXll
ckxpc3QoKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290KTsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworfQorCit2b2lkIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJv
b3QpCit7CisgICAgLy8gVGhpcyBlbXVsYXRlcyBvbmx5IHRoZSBzdGVwcyB0aGF0IGFyZSByZWxl
dmFudCB0byB0ZXN0aW5nIHRoZSBkYW1hZ2UgdHJhY2tlcjoKKyAgICAvLyAgIDEuIGNvbXB1dGlu
ZyB0aGUgcmVuZGVyIHBhc3NlcyBhbmQgbGF5ZXJsaXN0cworICAgIC8vICAgMi4gdXBkYXRpbmcg
YWxsIGRhbWFnZSB0cmFja2VycyBpbiB0aGUgY29ycmVjdCBvcmRlcgorICAgIC8vICAgMy4gcmVz
ZXR0aW5nIGFsbCB1cGRhdGVSZWN0cyBhbmQgcHJvcGVydHlDaGFuZ2VkIGZsYWdzIGZvciBhbGwg
bGF5ZXJzIGFuZCBzdXJmYWNlcy4KKworICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgLy8g
SXRlcmF0ZSBiYWNrLXRvLWZyb250LCBzbyB0aGF0IGRhbWFnZSBjb3JyZWN0bHkgcHJvcGFnYXRl
cyBmcm9tIGRlc2NlbmRhbnQgc3VyZmFjZXMgdG8gYW5jZXN0b3JzLgorICAgIGZvciAoaW50IGkg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllckxp
c3RbaV0tPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgdGFyZ2V0U3VyZmFjZS0+ZGFtYWdlVHJh
Y2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHRhcmdldFN1cmZhY2UtPmxheWVy
TGlzdCgpLCB0YXJnZXRTdXJmYWNlLT5vd25pbmdMYXllcklkKCksIHJlbmRlclN1cmZhY2VMYXll
ckxpc3RbaV0tPm1hc2tMYXllcigpKTsKKyAgICB9CisKKyAgICByb290LT5yZXNldEFsbENoYW5n
ZVRyYWNraW5nRm9yU3VidHJlZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVh
dGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworCisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6
ZXJvKCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDUwMCwgNTAwKSk7CisgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgSW50U2l6ZSg1MDAsIDUwMCkpKTsKKworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQ6Onplcm8oKSk7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDMwLCAzMCkpOworICAg
IGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQp
OworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGVUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpCit7CisgICAgLy8gVGhpcyB0ZXN0
IHRyZWUgaGFzIHR3byByZW5kZXIgc3VyZmFjZXM6IG9uZSBmb3IgdGhlIHJvb3QsIGFuZCBvbmUg
Zm9yCisgICAgLy8gY2hpbGQxLiBBZGRpdGlvbmFsbHksIHRoZSByb290IGhhcyBhIHNlY29uZCBj
aGlsZCBsYXllciwgYW5kIGNoaWxkMSBoYXMgdHdvCisgICAgLy8gY2hpbGRyZW4gb2YgaXRzIG93
bi4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDIpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgzKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gQ0NMYXllckltcGw6
OmNyZWF0ZSg0KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSg1KTsKKworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onpl
cm8oKSk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAg
ICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSg1MDAsIDUwMCkpOworICAgIHJvb3QtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIElu
dFNpemUoNTAwLCA1MDApKSk7CisKKyAgICBjaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTAwLCAxMDApKTsKKyAgICBjaGlsZDEtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8o
KSk7CisgICAgY2hpbGQxLT5zZXRCb3VuZHMoSW50U2l6ZSgzMCwgMzApKTsKKyAgICBjaGlsZDEt
PnNldE9wYWNpdHkoMC41KTsgLy8gd2l0aCBhIGNoaWxkIHRoYXQgZHJhd3NDb250ZW50LCB0aGlz
IHdpbGwgY2F1c2UgdGhlIGxheWVyIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisg
ICAgY2hpbGQxLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOyAvLyB0aGlzIGxheWVyIGRvZXMgbm90
IGRyYXcsIGJ1dCBpcyBpbnRlbmRlZCB0byBjcmVhdGUgaXRzIG93biByZW5kZXJTdXJmYWNlLgor
CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDExLCAxMSkpOworICAgIGNoaWxk
Mi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBjaGlsZDItPnNldEJv
dW5kcyhJbnRTaXplKDE4LCAxOCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMjAwLCAyMDApKTsK
KyAgICBncmFuZENoaWxkMS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAg
ICBncmFuZENoaWxkMS0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGdyYW5kQ2hpbGQx
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgxOTAsIDE5MCkpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6ZSg2
LCA4KSk7CisgICAgZ3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNo
aWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZDIpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQyKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCkKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhPbmVTdXJmYWNl
KCk7CisKKyAgICAvLyBTZXR1cCBpbmNsdWRlcyBnb2luZyBwYXN0IHRoZSBmaXJzdCBmcmFtZSB3
aGljaCBhbHdheXMgZGFtYWdlcyBldmVyeXRoaW5nLCBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFj
dHVhbGx5IHBlcmZvcm0gc3BlY2lmaWMgdGVzdHMuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
Cit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKworICAgIC8vIFNldHVwIGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0
IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2VzIGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3
ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVjaWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQor
CitjbGFzcyBDQ0RhbWFnZVRyYWNrZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJp
dmF0ZToKKyAgICAvLyBGb3IgdGVzdGluZyBwdXJwb3NlcywgZmFrZSB0aGF0IHdlIGFyZSBvbiB0
aGUgaW1wbCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJl
YWQ7Cit9OworCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgc2FuaXR5Q2hlY2tUZXN0VHJl
ZVdpdGhPbmVTdXJmYWNlKQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaW1wbGUg
dGVzdCB0cmVlIHdpbGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisgICAg
Ly8gc3VyZmFjZXMgYW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwgNTAw
LCA1MDApLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCBzYW5pdHlDaGVja1Rlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKQoreworICAgIC8vIFNhbml0eSBj
aGVjayB0aGF0IHRoZSBjb21wbGV4IHRlc3QgdHJlZSB3aWxsIGFjdHVhbGx5IHByb2R1Y2UgdGhl
IGV4cGVjdGVkIHJlbmRlcgorICAgIC8vIHN1cmZhY2VzIGFuZCBsYXllciBsaXN0cy4KKworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdv
U3VyZmFjZXMoKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hp
bGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxk
cmVuKClbMV07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRmxv
YXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBBU1NFUlRfVFJVRShjaGlsZDEtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDIpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsK
KworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBmb3IgY2hpbGQxIG9ubHkgaGFzIGEgY29udGVu
dFJlY3QgdGhhdCBlbmNsb3NlcyBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIsIGJlY2F1c2Ug
Y2hpbGQxIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMTkwLCAxOTAsIDE2LCAxOCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgcm9vdERhbWFnZVJlY3Qp
OworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVXBkYXRl
UmVjdHMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBU
ZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9
IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICAvLyBDQVNFIDE6IFNldHRpbmcgdGhlIHVwZGF0
ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhlIHN1cmZh
Y2UuCisgICAgLy8KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAx
MiwgMTMpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gRGFtYWdlIHBvc2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNob3VsZCBiZTogcG9zaXRpb24gb2Yg
dXBkYXRlUmVjdCAoMTAsIDExKSByZWxhdGl2ZSB0byB0aGUgY2hpbGQgKDEwMCwgMTAwKS4KKyAg
ICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMTEwLCAxMTEsIDEyLCAxMyksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8v
IENBU0UgMjogVGhlIHNhbWUgdXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVj
ZXMgdGhlIHNhbWUgZGFtYWdlLgorICAgIC8vCisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxv
YXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgxMTAsIDExMSwgMTIsIDEzKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAg
Ly8gQ0FTRSAzOiBTZXR0aW5nIGEgZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBk
YW1hZ2Ugb24gdGhlIG5ldyB1cGRhdGUgcmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2Vk
IG9sZCByZWdpb24uCisgICAgLy8KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3Qo
MjAsIDI1LCAxLCAyKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
KworICAgIC8vIERhbWFnZSBwb3NpdGlvbiBvbiB0aGUgc3VyZmFjZSBzaG91bGQgYmU6IHBvc2l0
aW9uIG9mIHVwZGF0ZVJlY3QgKDIwLCAyNSkgcmVsYXRpdmUgdG8gdGhlIGNoaWxkICgxMDAsIDEw
MCkuCisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMTIwLCAxMjUsIDEsIDIpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JQcm9wZXJ0eUNoYW5nZXMpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhP
bmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJvb3QtPmNoaWxk
cmVuKClbMF07CisKKyAgICAvLyBDQVNFIDE6IFRoZSBsYXllcidzIHByb3BlcnR5IGNoYW5nZWQg
ZmxhZyB0YWtlcyBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0LgorICAgIC8vCisgICAgY2hpbGQt
PnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CisgICAgY2hpbGQtPnNl
dE9wYWNpdHkoMC41KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwor
CisgICAgLy8gU2FuaXR5IGNoZWNrIC0gd2Ugc2hvdWxkIG5vdCBoYXZlIGFjY2lkZW50YWxseSBj
cmVhdGVkIGEgc2VwYXJhdGUgcmVuZGVyIHN1cmZhY2UgZm9yIHRoZSB0cmFuc2x1Y2VudCBsYXll
ci4KKyAgICBBU1NFUlRfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJM
aXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIERhbWFnZSBzaG91bGQgYmUgdGhlIGVudGlyZSBjaGls
ZCBsYXllciBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlLgorICAgIEZsb2F0UmVjdCBleHBlY3RlZFJl
Y3QgPSBGbG9hdFJlY3QoMTAwLCAxMDAsIDMwLCAzMCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWRSZWN0LCByb290
RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDI6IElmIGEgbGF5ZXIgbW92ZXMgZHVlIHRvIHBy
b3BlcnR5IGNoYW5nZSwgaXQgZGFtYWdlcyBib3RoIHRoZSBuZXcgbG9jYXRpb24KKyAgICAvLyAg
ICAgICAgIGFuZCB0aGUgb2xkIChleHBvc2VkKSBsb2NhdGlvbi4gVGhlIG9sZCBsb2NhdGlvbiBp
cyB0aGUgZW50aXJlIG9sZCBsYXllciwKKyAgICAvLyAgICAgICAgIG5vdCBqdXN0IHRoZSB1cGRh
dGVSZWN0LgorCisgICAgLy8gQ3ljbGUgb25lIGZyYW1lIG9mIG5vIGNoYW5nZSwganVzdCB0byBz
YW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCByZWN0IGlzIG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQg
ZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFj
dHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgy
MDAsIDIzMCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBFeHBlY3QgZGFtYWdlIHRvIGJlIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgcHJldmlvdXMg
b25lIGFuZCB0aGUgbmV3IG9uZS4KKyAgICBleHBlY3RlZFJlY3QudW5pdGVJZk5vblplcm8oRmxv
YXRSZWN0KDIwMCwgMjMwLCAzMCwgMzApKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQor
CitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVHJhbnNmb3JtZWRM
YXllcikKK3sKKyAgICAvLyBJZiBhIGxheWVyIGlzIHRyYW5zZm9ybWVkLCB0aGUgZGFtYWdlIHJl
Y3Qgc2hvdWxkIHN0aWxsIGVuY2xvc2UgdGhlIGVudGlyZQorICAgIC8vIHRyYW5zZm9ybWVkIGxh
eWVyLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0
VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IHJv
b3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjsK
KyAgICByb3RhdGlvbi5yb3RhdGUoNDUpOworCisgICAgLy8gTm90ZSBjYXJlZnVsbHksIHRoZSBh
bmNob3IgaXMgYWN0dWFsbHkgcGFydCBvZiBsYXllci0+cG9zaXRpb24oKS4gQnkgc2V0dGluZyBh
bmNob3IKKyAgICAvLyB0byAoMC41LCAwLjUpLCB0aGUgbGF5ZXIncyBwb3NpdGlvbiAoMTAwLCAx
MDApIG5vdyByZWZlcnMgdG8gdGhlIGNlbnRlciBvZiB0aGUKKyAgICAvLyBsYXllciwgbm90IHRo
ZSBjb3JuZXIuIFRoaXMgbWVhbnMgdGhlIGxheWVyIGhhcyBhY3R1YWxseSBjaGFuZ2VkIHBvc2l0
aW9uLgorICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNSwgMC41KSk7Cisg
ICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBj
aGVjayB0aGF0IHRoZSBsYXllciBhY3R1YWxseSBtb3ZlZCB0byAoODUsIDg1KSwgZGFtYWdpbmcg
aXRzIG9sZCBsb2NhdGlvbiBhbmQgbmV3IGxvY2F0aW9uLgorICAgIEZsb2F0UmVjdCByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg4NSwgODUs
IDQ1LCA0NSksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIFdpdGggdGhlIGFuY2hvciBvbiB0
aGUgbGF5ZXIncyBjZW50ZXIsIG5vdyB3ZSBjYW4gdGVzdCB0aGUgcm90YXRpb24gbW9yZQorICAg
IC8vIGludHVpdGl2ZWx5LCBzaW5jZSBpdCBhcHBsaWVzIGFib3V0IHRoZSBsYXllcidzIGFuY2hv
ci4KKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uKTsKKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2luY2UgdGhlIGNoaWxkIGxheWVyIGlz
IHNxdWFyZSwgcm90YXRpb24gYnkgNDUgZGVncmVlcyBhYm91dCB0aGUgY2VudGVyIHNob3VsZAor
ICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBleHBlY3RlZCByZWN0IGJ5IHNxcnQoMiks
IGNlbnRlcmVkIGFyb3VuZCAoMTAwLCAxMDApLiBUaGUKKyAgICAvLyBvbGQgZXhwb3NlZCByZWdp
b24gc2hvdWxkIGJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGUgbmV3IHJlZ2lvbi4KKyAgICBkb3Vi
bGUgZXhwZWN0ZWRXaWR0aCA9IDMwLjAgKiBzcXJ0KDIuMCk7CisgICAgZG91YmxlIGV4cGVjdGVk
UG9zaXRpb24gPSAxMDAuMCAtIDAuNSAqIGV4cGVjdGVkV2lkdGg7CisgICAgRmxvYXRSZWN0IGV4
cGVjdGVkUmVjdChleHBlY3RlZFBvc2l0aW9uLCBleHBlY3RlZFBvc2l0aW9uLCBleHBlY3RlZFdp
ZHRoLCBleHBlY3RlZFdpZHRoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCitURVNU
X0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdM
YXllcikKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRl
c3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9
IHJvb3QtPmNoaWxkcmVuKClbMF07CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDQwMCwgMzgwKSk7CisgICAgY2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6
ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGNoaWxk
Mi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgLy8gQ0FTRSAxOiBBZGRpbmcgYSBuZXcg
bGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCisgICAgLy8KKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgLSBhbGwgMyBsYXllcnMgc2hvdWxkIGJlIG9u
IHRoZSBzYW1lIHJlbmRlciBzdXJmYWNlOyByZW5kZXIgc3VyZmFjZXMgYXJlIHRlc3RlZCBlbHNl
d2hlcmUuCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKworICAgIEZsb2F0UmVjdCByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0MDAsIDM4
MCwgNiwgOCksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogSWYgdGhlIGxheWVy
IGlzIHJlbW92ZWQsIGl0cyBlbnRpcmUgb2xkIGxheWVyIGJlY29tZXMgZXhwb3NlZCwgbm90IGp1
c3QgdGhlCisgICAgLy8gICAgICAgICBsYXN0IHVwZGF0ZSByZWN0LgorCisgICAgLy8gQWR2YW5j
ZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVj
dCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7
CisKKyAgICAvLyBUaGVuLCB0ZXN0IHJlbW92aW5nIGNoaWxkMS4KKyAgICBjaGlsZDEtPnJlbW92
ZUZyb21QYXJlbnQoKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwor
ICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDEwMCwgMTAwLCAzMCwgMzApLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNdWx0aXBsZUxheWVycykKK3sKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVu
KClbMF07CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMyk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQwMCwgMzgwKSk7
CisgICAgY2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNo
aWxkMi0+c2V0Qm91bmRzKEludFNpemUoNiwgOCkpOworICAgIGNoaWxkMi0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICAvLyBJbiB0aGlz
IHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUgYWJvdmUgdHJlZSBtYW5pcHVsYXRpb24gdG8gYmUgY29u
c2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1lIGZyYW1lLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2luZyB0d28gbGF5ZXJzIHNpbXVsdGFuZW91
c2x5IHNob3VsZCBjYXVzZSBjb21iaW5lZCBkYW1hZ2UuCisgICAgLy8gLSBjaGlsZDEgdXBkYXRl
IHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDEwMCwgMTAwLCAxLCAyKTsKKyAgICAv
LyAtIGNoaWxkMiB1cGRhdGUgcmVjdCBpbiBzdXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoNDAwLCAz
ODAsIDMsIDQpOworICAgIGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwg
MikpOworICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMywgNCkpOwor
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEw
MCwgMTAwLCAzMDMsIDI4NCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdl
VHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck5lc3RlZFN1cmZhY2VzKQoreworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFj
ZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClb
MF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFd
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigp
WzBdLT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAg
RmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAxOiBEYW1hZ2UgdG8gYSBk
ZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxkIHByb3BhZ2F0ZSBwcm9wZXJseSB0byBhbmNlc3RvciBz
dXJmYWNlLgorICAgIC8vCisgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9
IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMjAwLCAyMDAsIDYsIDgpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgzMDAsIDMwMCwgNiwgOCksIHJvb3REYW1hZ2VSZWN0
KTsKKworICAgIC8vIENBU0UgMjogU2FtZSBhcyBwcmV2aW91cyBjYXNlLCBidXQgd2l0aCBhZGRp
dGlvbmFsIGRhbWFnZSBlbHNld2hlcmUgdGhhdCBzaG91bGQgYmUgcHJvcGVybHkgdW5pb25lZC4K
KyAgICAvLyAtIGNoaWxkMSBzdXJmYWNlIGRhbWFnZSBpbiByb290IHN1cmZhY2Ugc3BhY2U6IEZs
b2F0UmVjdCgzMDAsIDMwMCwgNiwgOCk7CisgICAgLy8gLSBjaGlsZDIgZGFtYWdlIGluIHJvb3Qg
c3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDExLCAxMSwgMTgsIDE4KTsKKyAgICBncmFuZENoaWxk
MS0+c2V0T3BhY2l0eSgwLjcpOworICAgIGNoaWxkMi0+c2V0T3BhY2l0eSgwLjcpOworICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0g
Y2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgyMDAsIDIwMCwgNiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExLCAxMSwgMjk1LCAyOTcpLCByb290RGFtYWdlUmVj
dCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JTdXJm
YWNlQ2hhbmdlRnJvbURlc2NlbmRhbnRMYXllcikKK3sKKyAgICAvLyBJZiBkZXNjZW5kYW50IGxh
eWVyIGNoYW5nZXMgYW5kIGFmZmVjdHMgdGhlIGNvbnRlbnQgYm91bmRzIG9mIHRoZSByZW5kZXIg
c3VyZmFjZSwKKyAgICAvLyB0aGVuIHRoZSBlbnRpcmUgZGVzY2VuZGFudCBzdXJmYWNlIHNob3Vs
ZCBiZSBkYW1hZ2VkLCBhbmQgaXQgc2hvdWxkIGRhbWFnZSBpdHMKKyAgICAvLyBhbmNlc3RvciBz
dXJmYWNlIHdpdGggdGhlIG9sZCBhbmQgbmV3IHN1cmZhY2UgcmVnaW9ucy4KKworICAgIC8vIFRo
aXMgaXMgYSB0cmlja3kgY2FzZSwgc2luY2Ugb25seSB0aGUgZmlyc3QgZ3JhbmRDaGlsZCBjaGFu
Z2VzLCBidXQgdGhlIGVudGlyZQorICAgIC8vIHN1cmZhY2Ugc2hvdWxkIGJlIG1hcmtlZCBkaXJ0
eS4KKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRy
ZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJv
b3QtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9
IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxk
RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICBncmFuZENo
aWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxOTUsIDIwNSkpOworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gVGhlIG5ldyBzdXJmYWNlIGJvdW5kcyBz
aG91bGQgYmUgZGFtYWdlZCBlbnRpcmVseSwgZXZlbiB0aG91Z2ggb25seSBvbmUgb2YgdGhlIGxh
eWVycyBjaGFuZ2VkLgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAsIDE5
MCwgMTEsIDIzKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIERhbWFnZSB0byB0aGUgcm9v
dCBzdXJmYWNlIHNob3VsZCBiZSB0aGUgdW5pb24gb2YgY2hpbGQxJ3MgKmVudGlyZSogcmVuZGVy
IHN1cmZhY2UKKyAgICAvLyAoaW4gdGFyZ2V0IHNwYWNlKSwgYW5kIGl0cyBvbGQgZXhwb3NlZCBh
cmVhIChhbHNvIGluIHRhcmdldCBzcGFjZSkuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDI5MCwgMjkwLCAxNiwgMjMpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2Vz
dG9yTGF5ZXIpCit7CisgICAgLy8gQW4gYW5jZXN0b3Ivb3duaW5nIGxheWVyIGNoYW5nZXMgdGhh
dCBhZmZlY3RzIHRoZSBwb3NpdGlvbi90cmFuc2Zvcm0gb2YgdGhlIHJlbmRlcgorICAgIC8vIHN1
cmZhY2UuIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBsYXllclByb3BlcnR5Q2hhbmdlZCBm
bGFnIGFscmVhZHkgcHJvcGFnYXRlcworICAgIC8vIHRvIHRoZSBzdWJ0cmVlICh0ZXN0ZWQgaW4g
Q0NMYXllckltcGx0ZXN0KSwgd2hpY2ggZGFtYWdlcyB0aGUgZW50aXJlIGNoaWxkMQorICAgIC8v
IHN1cmZhY2UsIGJ1dCB0aGUgZGFtYWdlIHRyYWNrZXIgc3RpbGwgbmVlZHMgdGhlIGNvcnJlY3Qg
bG9naWMgdG8gY29tcHV0ZSB0aGUKKyAgICAvLyBleHBvc2VkIHJlZ2lvbiBvbiB0aGUgcm9vdCBz
dXJmYWNlLgorCisgICAgLy8gRklYTUU6IHRoZSBleHBlY3RhdGlvbnMgb2YgdGhpcyB0ZXN0IGNh
c2Ugc2hvdWxkIGNoYW5nZSB3aGVuIHdlIGFkZCBzdXBwb3J0IGZvciBhCisgICAgLy8gICAgICAg
IHVuaXF1ZSBzY2lzc29yUmVjdCBwZXIgcmVuZGVyU3VyZmFjZS4gSW4gdGhhdCBjYXNlLCB0aGUg
Y2hpbGQxIHN1cmZhY2UKKyAgICAvLyAgICAgICAgc2hvdWxkIGJlIGNvbXBsZXRlbHkgdW5jaGFu
Z2VkLCBzaW5jZSB3ZSBhcmUgb25seSB0cmFuc2Zvcm1pbmcgaXQsIHdoaWxlIHRoZQorICAgIC8v
ICAgICAgICByb290IHN1cmZhY2Ugd291bGQgYmUgZGFtYWdlZCBhcHByb3ByaWF0ZWx5LgorCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhU
d29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hp
bGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+
Y2hpbGRyZW4oKVswXS0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VS
ZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIGNoaWxkMS0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCg1MCwgNTApKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKworICAgIC8vIFRoZSBuZXcgc3VyZmFjZSBib3VuZHMgc2hvdWxkIGJlIGRhbWFn
ZWQgZW50aXJlbHkuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5MCwgMTkw
LCAxNiwgMTgpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gVGhlIGVudGlyZSBjaGlsZDEg
c3VyZmFjZSBhbmQgdGhlIG9sZCBleHBvc2VkIGNoaWxkMSBzdXJmYWNlIHNob3VsZCBkYW1hZ2Ug
dGhlIHJvb3Qgc3VyZmFjZS4KKyAgICAvLyAgLSBvbGQgY2hpbGQxIHN1cmZhY2UgaW4gdGFyZ2V0
IHNwYWNlOiBGbG9hdFJlY3QoMjkwLCAyOTAsIDE2LCAxOCkKKyAgICAvLyAgLSBuZXcgY2hpbGQx
IHN1cmZhY2UgaW4gdGFyZ2V0IHNwYWNlOiBGbG9hdFJlY3QoMjQwLCAyNDAsIDE2LCAxOCkKKyAg
ICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjQwLCAyNDAsIDY2LCA2OCksIHJvb3RE
YW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFn
ZUZvckFkZGluZ0FuZFJlbW92aW5nUmVuZGVyU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAg
ICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dDsKKworICAgIC8vIENBU0UgMTogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgZGlzYXBwZWFycywg
aXRzIGVudGlyZSBvbGQgYXJlYSBiZWNvbWVzIGV4cG9zZWQuCisgICAgLy8KKyAgICBjaGlsZDEt
PnNldE9wYWNpdHkoMSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
KworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHN1cmZhY2Ugbm93
LgorICAgIEFTU0VSVF9GQUxTRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNCksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJM
aXN0KCkuc2l6ZSgpKTsKKworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5MCwgMjkwLCAxNiwgMTgpLCByb290RGFtYWdlUmVjdCk7
CisKKyAgICAvLyBDQVNFIDI6IElmIGEgZGVzY2VuZGFudCBzdXJmYWNlIGFwcGVhcnMsIGl0cyBl
bnRpcmUgb2xkIGFyZWEgYmVjb21lcyBleHBvc2VkLgorCisgICAgLy8gQ3ljbGUgb25lIGZyYW1l
IG9mIG5vIGNoYW5nZSwganVzdCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCByZWN0IGlz
IG5vdCBiZWNhdXNlIG9mIHRoZSBvbGQgZGFtYWdlIHN0YXRlLgorICAgIGVtdWxhdGVEcmF3aW5n
T25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfVFJVRShyb290RGFtYWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiBjaGFuZ2Ug
dGhlIHRyZWUgc28gdGhhdCB0aGUgcmVuZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBj
aGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBuZXcgc3VyZmFj
ZSBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxh
eWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiks
IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgY2hp
bGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAsIDE5MCwgMTYsIDE4KSwgY2hpbGREYW1hZ2VS
ZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjkwLCAyOTAsIDE2LCAx
OCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeU5vRGFtYWdlV2hlbk5vdGhpbmdDaGFuZ2VkKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxv
YXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisK
KyAgICAvLyBDQVNFIDE6IElmIG5vdGhpbmcgY2hhbmdlcywgdGhlIGRhbWFnZSByZWN0IHNob3Vs
ZCBiZSBlbXB0eS4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBDQVNFIDI6IElmIG5v
dGhpbmcgY2hhbmdlcyB0d2ljZSBpbiBhIHJvdywgdGhlIGRhbWFnZSByZWN0IHNob3VsZCBzdGls
bCBiZSBlbXB0eS4KKyAgICAvLworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRy
YWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZUZvclVwZGF0ZVJlY3RUaGF0RG9lc05vdERyYXdDb250
ZW50KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVz
dFRyZWVXaXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9
IHJvb3QtPmNoaWxkcmVuKClbMF07CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAg
ICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAvLyBJbiBvdXIgc3BlY2lmaWMgdHJl
ZSwgdGhlIHVwZGF0ZSByZWN0IG9mIGNoaWxkMSBzaG91bGQgbm90IGNhdXNlIGFueSBkYW1hZ2Ug
dG8gYW55CisgICAgLy8gc3VyZmFjZSBiZWNhdXNlIGl0IGRvZXMgbm90IGFjdHVhbGx5IGRyYXcg
Y29udGVudC4KKyAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDIp
KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfVFJV
RShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdl
UmVjdC5pc0VtcHR5KCkpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5
RGFtYWdlRm9yUmVwbGljYSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkMiA9IGNoaWxkMS0+Y2hpbGRyZW4oKVsxXTsKKworICAgIC8vIERh
bWFnZSBvbiBhIHN1cmZhY2UgdGhhdCBoYXMgYSByZWZsZWN0aW9uIHNob3VsZCBjYXVzZSB0aGUg
dGFyZ2V0IHN1cmZhY2UgdG8KKyAgICAvLyByZWNlaXZlIHRoZSBzdXJmYWNlJ3MgZGFtYWdlIGFu
ZCB0aGUgc3VyZmFjZSdzIHJlZmxlY3RlZCBkYW1hZ2UuCisKKyAgICAvLyBGb3IgdGhpcyB0ZXN0
IGNhc2UsIHdlIG1vZGlmeSBncmFuZENoaWxkMiwgYW5kIGFkZCBncmFuZENoaWxkMyB0byBleHRl
bmQgdGhlIGJvdW5kcworICAgIC8vIG9mIGNoaWxkMSdzIHN1cmZhY2UuIFRoaXMgd2F5LCB3ZSBj
YW4gdGVzdCByZWZsZWN0aW9uIGNoYW5nZXMgd2l0aG91dCBjaGFuZ2luZworICAgIC8vIGNvbnRl
bnRCb3VuZHMgb2YgdGhlIHN1cmZhY2UuCisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoMTgwLCAxODApKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQz
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSg2KTsKKyAgICBncmFuZENoaWxkMy0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgyNDAsIDI0MCkpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MCwgMTApKTsKKyAgICBncmFuZENoaWxkMy0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNo
aWxkMS0+c2V0T3BhY2l0eSgwLjUpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMp
OworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBDQVNF
IDE6IGFkZGluZyBhIHJlZmxlY3Rpb24gYWJvdXQgdGhlIGxlZnQgZWRnZSBvZiBncmFuZENoaWxk
MS4KKyAgICAvLworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0g
Q0NMYXllckltcGw6OmNyZWF0ZSg3KTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJl
ZmxlY3Rpb247CisgICAgcmVmbGVjdGlvbi5zY2FsZTNkKC0xLjAsIDEuMCwgMS4wKTsKKyAgICBn
cmFuZENoaWxkMVJlcGxpY2EtPnNldFRyYW5zZm9ybShyZWZsZWN0aW9uKTsKKyAgICBncmFuZENo
aWxkMS0+c2V0UmVwbGljYUxheWVyKGdyYW5kQ2hpbGQxUmVwbGljYSk7CisgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFt
YWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIC8vIFRoZSBncmFu
ZENoaWxkIHN1cmZhY2UgZGFtYWdlIHNob3VsZCBub3QgaW5jbHVkZSBpdHMgb3duIHJlcGxpY2Eu
IFRoZSBjaGlsZAorICAgIC8vIHN1cmZhY2UgZGFtYWdlIHNob3VsZCBpbmNsdWRlIHRoZSBub3Jt
YWwgYW5kIHJlcGxpY2Egc3VyZmFjZXMuCisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDAsIDAsIDYsIDgpLCBncmFuZENoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoRmxvYXRSZWN0KDE5NCwgMjAwLCAxMiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI5NCwgMzAwLCAxMiwgOCksIHJvb3RE
YW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogbW92aW5nIHRoZSBkZXNjZW5kYW50IHN1cmZh
Y2Ugc2hvdWxkIGNhdXNlIGJvdGggdGhlIG9yaWdpbmFsIGFuZCByZWZsZWN0ZWQKKyAgICAvLyAg
ICAgICAgIGFyZWFzIHRvIGJlIGRhbWFnZWQgb24gdGhlIHRhcmdldC4KKyAgICBJbnRSZWN0IG9s
ZENvbnRlbnRSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7Cisg
ICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTk1LjAsIDIwNS4wKSk7Cisg
ICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBBU1NFUlRfRVEob2xk
Q29udGVudFJlY3Qud2lkdGgoKSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0
KCkud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0LmhlaWdodCgpLCBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSk7CisKKyAgICBncmFu
ZENoaWxkRGFtYWdlUmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAvLyBUaGUgY2hpbGQgc3VyZmFjZSBk
YW1hZ2Ugc2hvdWxkIGluY2x1ZGUgbm9ybWFsIGFuZCByZXBsaWNhIHN1cmZhY2VzIGZvciBib3Ro
IG9sZCBhbmQgbmV3IGxvY2F0aW9ucy4KKyAgICAvLyAgLSBvbGQgbG9jYXRpb24gaW4gdGFyZ2V0
IHNwYWNlOiBGbG9hdFJlY3QoMTk0LCAyMDAsIDEyLCA4KQorICAgIC8vICAtIG5ldyBsb2NhdGlv
biBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgxODksIDIwNSwgMTIsIDgpCisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDYsIDgpLCBncmFuZENoaWxkRGFtYWdlUmVj
dCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE4OSwgMjAwLCAxNywgMTMp
LCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgy
ODksIDMwMCwgMTcsIDEzKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiByZW1v
dmluZyB0aGUgcmVmbGVjdGlvbiBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSByZWdpb24gaW5jbHVk
aW5nIHJlZmxlY3Rpb24KKyAgICAvLyAgICAgICAgIHRvIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZh
Y2UuCisgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcigwKTsKKyAgICBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC53
aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS53aWR0aCgpKTsK
KyAgICBBU1NFUlRfRVEob2xkQ29udGVudFJlY3QuaGVpZ2h0KCksIGNoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShncmFu
ZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
ICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMTg5LCAyMDUsIDEyLCA4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMjg5LCAzMDUsIDEyLCA4KSwgcm9vdERhbWFnZVJlY3QpOwor
fQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKK3sK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hp
bGRyZW4oKVswXTsKKworICAgIC8vIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBkYW1hZ2UgdHJhY2tlciwgY2hhbmdlcyB0byBtYXNrIGxheWVycyBzaG91bGQKKyAgICAvLyBk
YW1hZ2UgdGhlIGVudGlyZSBjb3JyZXNwb25kaW5nIHN1cmZhY2UuCisKKyAgICAvLyBTZXQgdXAg
dGhlIG1hc2sgbGF5ZXIuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDMpOworICAgIG1hc2tMYXllci0+c2V0UG9zaXRpb24oY2hpbGQtPnBv
c2l0aW9uKCkpOworICAgIG1hc2tMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVy
bygpKTsKKyAgICBtYXNrTGF5ZXItPnNldEJvdW5kcyhjaGlsZC0+Ym91bmRzKCkpOworICAgIGNo
aWxkLT5zZXRNYXNrTGF5ZXIobWFza0xheWVyKTsKKworICAgIC8vIEFkZCBvcGFjaXR5IGFuZCBh
IGdyYW5kQ2hpbGQgc28gdGhhdCB0aGUgcmVuZGVyIHN1cmZhY2UgcGVyc2lzdHMgZXZlbiBhZnRl
ciB3ZSByZW1vdmUgdGhlIG1hc2suCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMi4wLCAyLjApKTsKKyAgICBn
cmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5k
Q2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDIsIDIpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sg
dGhhdCBhIG5ldyBzdXJmYWNlIHdhcyBjcmVhdGVkIGZvciB0aGUgY2hpbGQuCisgICAgQVNTRVJU
X1RSVUUoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBDQVNFIDE6IHRoZSB1cGRh
dGVSZWN0IG9uIGEgbWFzayBsYXllciBzaG91bGQgZGFtYWdlIHRoZSBlbnRpcmUgdGFyZ2V0IHN1
cmZhY2UuCisgICAgLy8KKyAgICBtYXNrTGF5ZXItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEs
IDIsIDMsIDQpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAg
IEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KDAsIDAsIDMwLCAzMCksIGNoaWxkRGFtYWdlUmVjdCk7CisKKyAgICAvLyBD
QVNFIDI6IGEgcHJvcGVydHkgY2hhbmdlIG9uIHRoZSBtYXNrIGxheWVyIHNob3VsZCBkYW1hZ2Ug
dGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworCisgICAgLy8gQWR2YW5jZSBvbmUg
ZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBu
b3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBF
Q1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4gdGVzdCB0
aGUgcHJvcGVydHkgY2hhbmdlLgorICAgIG1hc2tMYXllci0+c2V0T3BhY2l0eSgwLjUpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0
ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMCwgMzAp
LCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiByZW1vdmluZyB0aGUgbWFzayBh
bHNvIGRhbWFnZXMgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworCisgICAgLy8g
QWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1h
Z2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKworICAgIC8v
IFRoZW4gdGVzdCBtYXNrIHJlbW92YWwuCisgICAgY2hpbGQtPnNldE1hc2tMYXllcigwKTsKKyAg
ICBBU1NFUlRfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CisgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0
IGEgcmVuZGVyIHN1cmZhY2Ugc3RpbGwgZXhpc3RzLgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMCwgMzApLCBjaGlsZERhbWFnZVJlY3Qp
OworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGlj
YU1hc2spCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBU
ZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQx
ID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hp
bGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdOworCisgICAgLy8gQ2hhbmdlcyB0byBhIHJlcGxp
Y2EncyBtYXNrIHNob3VsZCBub3QgZGFtYWdlIHRoZSBvcmlnaW5hbCBzdXJmYWNlLCBiZWNhdXNl
IGl0IGlzCisgICAgLy8gbm90IG1hc2tlZC4gQnV0IGl0IGRvZXMgZGFtYWdlIHRoZSBhbmNlc3Rv
ciB0YXJnZXQgc3VyZmFjZS4KKworICAgIC8vIENyZWF0ZSBhIHJlZmxlY3Rpb24gYWJvdXQgdGhl
IGxlZnQgZWRnZSBvZiBncmFuZENoaWxkMS4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5k
Q2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNik7CisgICAgZ3JhbmRDaGlsZDFS
ZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQx
UmVwbGljYS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCByZWZsZWN0aW9uOworICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAx
LjAsIDEuMCk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlv
bik7CisgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcihncmFuZENoaWxkMVJlcGxpY2Ep
OworCisgICAgLy8gU2V0IHVwIHRoZSBtYXNrIGxheWVyIG9uIHRoZSByZXBsaWNhIGxheWVyCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByZXBsaWNhTWFza0xheWVyID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSg3KTsKKyAgICByZXBsaWNhTWFza0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6
ZXJvKCkpOworICAgIHJlcGxpY2FNYXNrTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6
Onplcm8oKSk7CisgICAgcmVwbGljYU1hc2tMYXllci0+c2V0Qm91bmRzKGdyYW5kQ2hpbGQxLT5i
b3VuZHMoKSk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRNYXNrTGF5ZXIocmVwbGljYU1h
c2tMYXllcik7CisKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisg
ICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHJlbmRlciBzdXJmYWNlcyB3
ZXJlIGNyZWF0ZWQKKyAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIC8vIENBU0UgMTogYSBwcm9wZXJ0eSBjaGFuZ2Ugb24gdGhlIG1hc2sgc2hvdWxk
IGRhbWFnZSBvbmx5IHRoZSByZWZsZWN0ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4K
KyAgICByZXBsaWNhTWFza0xheWVyLT5zZXRPcGFjaXR5KDAuNik7CisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIEZsb2F0UmVjdCBncmFuZENoaWxkRGFtYWdl
UmVjdCA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5NCwgMjAwLCA2LCA4KSwgY2hpbGREYW1h
Z2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogcmVtb3ZpbmcgdGhlIHJlcGxpY2EgbWFzayBkYW1h
Z2VzIG9ubHkgdGhlIHJlZmxlY3RlZCByZWdpb24gb24gdGhlIHRhcmdldCBzdXJmYWNlLgorICAg
IC8vCisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRNYXNrTGF5ZXIoMCk7CisgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0
ID0gZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBFWFBFQ1Rf
VFJVRShncmFuZENoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GTE9BVF9S
RUNUX0VRKEZsb2F0UmVjdCgxOTQsIDIwMCwgNiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJJbXBsVGVzdC5jcHAKaW5kZXggOTQyYmVjMmY3MTNhMjg0NTIxYmFhOTQzZWNjYzQ0ZTIwYjhh
YzVmZi4uODkwNTA1MGU2NjczOTMyNjViOTRjOWZiMmY1NWEzZGE5YjNmMWZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcApAQCAtMzUs
MjEgKzM1LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIHsKIAogI2Rl
ZmluZSBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9DSEFOR0VEKGNvZGVUb1Rlc3QpICAgICAg
ICAgICAgICAgICAgXAotICAgIHJvb3QtPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRy
ZWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdl
VHJhY2tpbmdGb3JTdWJ0cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNv
ZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5sYXll
clByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVD
VF9UUlVFKGdyYW5kQ2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCiAKICNkZWZpbmUgRVhF
Q1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0UoY29kZVRvVGVzdCkgICAgICAg
ICAgIFwKLSAgICByb290LT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5n
Rm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjb2RlVG9UZXN0
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPmxheWVyUHJvcGVy
dHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1RfRkFMU0Uo
Z3JhbmRDaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkKIAogI2RlZmluZSBFWEVDVVRFX0FO
RF9WRVJJRllfT05MWV9MQVlFUl9DSEFOR0VEKGNvZGVUb1Rlc3QpICAgICAgICAgICAgICAgXAot
ICAgIHJvb3QtPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0
cmVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IEVYUEVDVF9UUlVFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTE1LDcgKzExNSw3IEBAIFRFU1Qo
Q0NMYXllckltcGxUZXN0LCB2ZXJpZnlMYXllckNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX09OTFlfTEFZRVJfQ0hBTkdFRChyb290LT5zZXRCYWNrZ3Jv
dW5kQ29sb3IoQ29sb3I6OmdyYXkpKTsKIAogICAgIC8vIFNwZWNpYWwgY2FzZTogY2hlY2sgdGhh
dCBzdWJsYXllciB0cmFuc2Zvcm0gY2hhbmdlcyBhbGwgbGF5ZXIncyBkZXNjZW5kYW50cywgYnV0
IG5vdCB0aGUgbGF5ZXIgaXRzZWxmLgotICAgIHJvb3QtPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxh
Z0ZvclN1YnRyZWUoKTsKKyAgICByb290LT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJl
ZSgpOwogICAgIHJvb3QtPnNldFN1YmxheWVyVHJhbnNmb3JtKGFyYml0cmFyeVRyYW5zZm9ybSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwogICAgIEVY
UEVDVF9UUlVFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCmluZGV4IGM5YTJmYzY1MTMyNTY2YjQyNjNhMDA2ODhmNTdjM2Y1MjdiMTYxYjIuLjgzYTQ0
ZWNhYTBmYjIyMDdlNTEyMzNlZDQxZmE2YThmZTQ2YTIyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAKKyNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzYs
MjcgKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKLS8v
IFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgZ3Rlc3Qg
ZXJyb3JzIGNhbiBnaXZlIHVzIHVzZWZ1bCBsaW5lIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSB0ZXN0LgotLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBk
b3VibGUsIHRoZXJlIGFyZSBtYW55IG90aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkLCBh
bmQgc28gd2UKLS8vIG9ubHkgZXhwZWN0IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRp
bmctcG9pbnQgcHJlY2lzaW9uLgotI2RlZmluZSBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChl
eHBlY3RlZCwgYWN0dWFsKSAgICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEx
KCksIChhY3R1YWwpLm0xMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MTIoKSwgKGFjdHVhbCkubTEyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0xMygpLCAoYWN0dWFsKS5tMTMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTE0KCksIChhY3R1YWwpLm0xNCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tMjEoKSwgKGFjdHVhbCkubTIxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm0yMigpLCAoYWN0dWFsKS5tMjIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0yMygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMjQoKSwgKGFjdHVhbCkubTI0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9F
USgoZXhwZWN0ZWQpLm0zMSgpLCAoYWN0dWFsKS5tMzEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubTMyKCksIChhY3R1YWwpLm0zMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5tMzMoKSwgKGFjdHVhbCkubTMzKCkpOyAgXAotICAgIEVYUEVDVF9G
TE9BVF9FUSgoZXhwZWN0ZWQpLm0zNCgpLCAoYWN0dWFsKS5tMzQoKSk7ICBcCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwpLm00MSgpKTsgIFwKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgXAotICAgIEVY
UEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MygpLCAoYWN0dWFsKS5tNDMoKSk7ICBcCi0gICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQotCiB2b2lk
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZl
czNEKQogewogICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKQEAgLTEyMCwxMiAr
MTAwLDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0Zvck5vT3BMYXllcikKIAogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRy
aXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4
LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGNoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKQEAgLTE0NCw4ICsxMjQs
OCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JT
aW5nbGVMYXllcikKICAgICBhcmJpdHJhcnlUcmFuc2xhdGlvbi50cmFuc2xhdGUoMTAuMCwgMjAu
MCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGFyYml0cmFyeVRyYW5zbGF0aW9uLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CiAgICAgZXhlY3V0
ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5kcmF3VHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4
LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAyOiBzZXR0aW5nIHRoZSBi
b3VuZHMgb2YgdGhlIGxheWVyIHNob3VsZCByZXN1bHQgaW4gYSBkcmF3IHRyYW5zZm9ybSB0aGF0
IHRyYW5zbGF0ZXMgdG8gaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodC4KICAgICAvLyAgICAgICAg
IFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIHNob3VsZCByZW1haW4gYXMgdGhlIGlkZW50aXR5
LCBiZWNhdXNlIGl0IGRvZXMgbm90IGRlYWwgd2l0aCB0cmFuc2Zvcm1pbmcgdG8vZnJvbSB0aGUg
Y2VudGVyIG9mIHRoZSBsYXllci4KQEAgLTE1MywyMiArMTMzLDIyIEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIHRy
YW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNp
emUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xh
dGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDM6IFRoZSBhbmNob3IgcG9pbnQgYnkgaXRzZWxmICh3
aXRob3V0IGEgbGF5ZXIgdHJhbnNmb3JtKSBzaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHRy
YW5zZm9ybXMuCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1Ziks
IEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50
aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5
TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6
IEEgY2hhbmdlIGluICJhY3R1YWwiIHBvc2l0aW9uIGFmZmVjdHMgYm90aCB0aGUgZHJhdyB0cmFu
c2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcG9zaXRpb25UcmFuc2Zvcm07CiAgICAgcG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAu
MCwgMS4yKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwg
RmxvYXRQb2ludCgyLjVmLCA0LjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0g
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xh
dGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFu
c2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDU6IEluIHRoZSBjb3Jy
ZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMsIHRoZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIHBy
ZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRpb25Ub0NlbnRlci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVk
IGJ5CiAgICAgLy8gICAgICAgICB1c2luZyBhIHNjYWxlIHRyYW5zZm9ybSwgYmVjYXVzZSBzY2Fs
ZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5vdCBjb21tdXRhdGl2ZS4KQEAgLTE3Niw4ICsxNTYsOCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5n
bGVMYXllcikKICAgICBsYXllclRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOwogICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3Jt
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwobGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXll
clRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEobGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2Vu
dGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGxheWVyVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CiAKICAgICAvLyBDYXNlIDY6IFRoZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIG9jY3VyIHdpdGgg
cmVzcGVjdCB0byB0aGUgYW5jaG9yIHBvaW50LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zbGF0aW9uVG9BbmNob3I7CkBAIC0xODUsOCArMTY1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRSZXN1bHQgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5
ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMC4wZiks
IEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1
bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAg
Ly8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBwb3NpdGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIg
dHJhbnNmb3JtLgogICAgIC8vICAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Yg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5
LCBidXQgaXQgaXMKQEAgLTE5NCw4ICsxNzQsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBleHBlY3RlZFJlc3Vs
dCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNm
b3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDEuMmYpLCBJbnRTaXpl
KDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChl
eHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3Jt
KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0KIAogVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5
KQpAQCAtMjE2LDEwICsxOTYsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2Up
OwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShncmFuZENoaWxk
VHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgMjogcGFyZW50J3MgcG9z
aXRpb24gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRDaGlsZC4KICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybTsKQEAgLTIyOCwxMCArMjA4LDEwIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJh
cmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFu
c2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlv
blRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGNo
aWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgY2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgMzogcGFyZW50J3MgbG9jYWwg
dHJhbnNmb3JtIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKQEAgLTI0MywxMCArMjIzLDEwIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJh
cmNoeSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
ICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5k
Q2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA0OiBwYXJlbnQn
cyBzdWJsYXllck1hdHJpeCBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZGNoaWxkCiAgICAgLy8gICAg
ICAgICBzY2FsaW5nIGlzIHVzZWQgaGVyZSBhZ2FpbiBzbyB0aGF0IHRoZSBjb3JyZWN0IHNlcXVl
bmNlIG9mIHRyYW5zZm9ybXMgaXMgcHJvcGVybHkgdGVzdGVkLgpAQCAtMjY0LDEwICsyNDQsMTAg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2lt
cGxlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5z
bGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5l
ZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFu
ZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGZsYXR0ZW5lZENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAvLyBDYXNlIDU6IHNhbWUgYXMgQ2FzZSA0LCBleGNlcHQgdGhhdCBjaGlsZCBkb2VzIHByZXNl
cnZlIDNELCBzbyB0aGUgZ3JhbmRDaGlsZCBzaG91bGQgcmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5l
ZCBjb21wb3NpdGUgdHJhbnNmb3JtLgogICAgIC8vCkBAIC0yNzUsMTAgKzI1NSwxMCBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVy
YXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIHRydWUpOwogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
ICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5k
Q2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQpAQCAt
MzIxLDEyICszMDEsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKIAogICAgIC8vIFRoZSBjaGlsZCBsYXll
cidzIGRyYXcgdHJhbnNmb3JtIHNob3VsZCByZWZlciB0byBpdHMgbmV3IHJlbmRlciBzdXJmYWNl
OyB0aGV5IG9ubHkgZGlmZmVyIGJ5IGEgdHJhbnNsYXRpb24gdG8gY2VudGVyLgogICAgIC8vIFRo
ZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLCBob3dldmVyLCBzaG91bGQgc3RpbGwgcmVmZXIgdG8g
dGhlIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFdpdGhvdXQgY2xpcHBpbmcsIHRoZSBv
cmlnaW4gdHJhbnNmb3JtIGFuZCBkcmF3IHRyYW5zZm9ybSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNh
c2UpIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9y
aWdpblRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9y
bSgpKTsKIAogfQogCkBAIC00MjMsMzggKzQwMywzOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAg
IC8vICBub3RlIHRoYXQgZHJhdyB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0
IHRvIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlCiAgICAgLy8gIGJ1dCBzY3Jl
ZW4gc3BhY2UgdHJhbnNmb3JtcyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9v
dC4KICAgICAvLwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiB0cmFuc2xhdGlv
blRvQ2VudGVyLCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3Qt
PmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSb290LT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIHRy
YW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIs
IGNoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFu
ZENoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTEtPmRyYXdUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlv
blRvQ2VudGVyLCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFu
ZENoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUSh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMi0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAq
IHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2Uy
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
QiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRy
YW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKIAog
ICAgIC8vIFZlcmlmeSBsYXllciBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtcwogICAgIC8vCi0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIGNoaWxkT2ZS
b290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBLCBwYXJlbnQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQSAqIEIgKiBBLCBjaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgZ3Jh
bmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBC
ICogQSwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9m
UlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAq
IEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGls
ZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICog
QiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSAqIEIg
KiBBLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1cmZh
Y2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGNoaWxkT2ZSUzItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAq
IEIgKiBBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVmVyaWZ5IHJlbmRlciBzdXJmYWNlIHRyYW5zZm9y
bXMuCiAgICAgLy8KICAgICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDEg
aXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byByb290LgotICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAq
IEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0o
KSk7CiAgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAyIGlzIGRlc2Ny
aWJlZCB3aXRoIHJlc3BlY3QgdG8gcmVuZGVyIHN1cmZhY2UgMi4KLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChCICogQSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAq
IEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIFNhbml0eSBjaGVjay4gSWYgdGhlc2UgZmFpbCB0aGVyZSBpcyBwcm9iYWJseSBh
IGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYuCiAgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhhdCB3ZSBj
b3JyZWN0bHkgc2V0IHVwIHRyYW5zZm9ybXMgc28gdGhhdCB0aGUgeS1jb21wb25lbnQgb2YgdGhl
IHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiODNkYWNhYmEzY2Zl
MDFjYWNhM2FiYTU5YmY3ODc2NGE3ZGQxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKKyNkZWZp
bmUgQ0NMYXllclRyZWVUZXN0Q29tbW9uX2gKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKwor
Ly8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNl
ZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorI2RlZmluZSBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5s
b2NhdGlvbigpLngoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlv
bigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55KCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChhY3R1YWwpLnNpemUoKS53aWR0aCgpKTsgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCku
c2l6ZSgpLmhlaWdodCgpKQorCisvLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0
aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxl
ZC4KKy8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUgZG91Ymxl
IHByZWNpc2lvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVz
ZWQgdGhhdCBhZmZlY3QKKy8vIHRoZSB0cmFuc2Zvcm1zLCBhbmQgc28gd2Ugb25seSBleHBlY3Qg
dGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCisjZGVm
aW5lIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAg
ICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMSgpLCAoYWN0dWFsKS5tMTEo
KSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFj
dHVhbCkubTEyKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTEzKCksIChhY3R1YWwpLm0xMygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVhbCkubTIxKCkpOyAgICAgICAgICBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChhY3R1YWwpLm0yMigpKTsgICAg
ICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5t
MjMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwg
KGFjdHVhbCkubTI0KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTMxKCksIChhY3R1YWwpLm0zMSgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9F
USgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFsKS5tMzIoKSk7ICAgICAgICAgIFwKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzMoKSwgKGFjdHVhbCkubTMzKCkpOyAgICAgICAgICBc
CisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsg
ICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFs
KS5tNDEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDIo
KSwgKGFjdHVhbCkubTQyKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAoYWN0dWFsKS5tNDQoKSkKKworfSAvLyBuYW1lc3BhY2UK
KworI2VuZGlmIC8vIENDTGF5ZXJUcmVlVGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA3MDQ1NDRi
NmFkYjMzZDNhMGZmYTM1ZThlNzQyZDQzN2RjMWVmZGZlLi5jM2IzNjZkZGEzMjM3NDY4Njg2ZmJm
ODNlZDRmZTMzOTBmODJmMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAgLTU5LDE4ICs1OSwxNiBAQCBURVNUKEND
UmVuZGVyU3VyZmFjZVRlc3QsIHZlcmlmeVN1cmZhY2VDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5
KQogICAgIEFTU0VSVF9UUlVFKG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAgICAgSW50UmVjdCB0ZXN0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMywgNCksIEludFNp
emUoNSwgNikpOwotCi0gICAgb3duaW5nTGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0Zv
clN1YnRyZWUoKTsKKyAgICBvd25pbmdMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1
YnRyZWUoKTsKIAogICAgIC8vIEN1cnJlbnRseSwgdGhlIGNvbnRlbnRSZWN0LCBjbGlwUmVjdCwg
YW5kIG93bmluZ0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpIGFyZQogICAgIC8vIHRoZSBv
bmx5IHNvdXJjZXMgb2YgY2hhbmdlLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0NI
QU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJlY3QpKTsKICAgICBFWEVDVVRF
X0FORF9WRVJJRllfU1VSRkFDRV9DSEFOR0VEKHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0
KHRlc3RSZWN0KSk7CiAKLSAgICBvd25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFn
Rm9yU3VidHJlZSgpOwogICAgIG93bmluZ0xheWVyLT5zZXRPcGFjaXR5KDAuNWYpOwogICAgIEVY
UEVDVF9UUlVFKHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSk7Ci0gICAg
b3duaW5nTGF5ZXItPnJlc2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsKKyAgICBv
d25pbmdMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAogICAgIC8v
IFNldHRpbmcgdGhlIHN1cmZhY2UgcHJvcGVydGllcyB0byB0aGUgc2FtZSB2YWx1ZXMgYWdhaW4g
c2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJjaGFuZ2UiLgogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KHRlc3RS
ZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hy
b21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCmluZGV4IGVkOWNlY2I5NjM2NjE5YWNkMjVlNDAyMDU5MWFkYTZkMzYzYTkzMWIu
Ljc4MDlkMThhNDM2NzBkNDhhYTc4NjFmYjg3MDQ2NTYyODU5M2ZhMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiwx
MCArMjYsMTIgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkND
TGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7CiB1c2luZyA6OnRlc3Rp
bmc6Ol87CiB1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7CkBAIC0xMzIsMTQgKzEzNCw2IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKICAgICB9CiAK
LSAgICB2b2lkIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChjb25zdCBGbG9hdFJlY3QmIGV4
cGVjdGVkLCBjb25zdCBGbG9hdFJlY3QmIGFjdHVhbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEVY
UEVDVF9GTE9BVF9FUShleHBlY3RlZC5sb2NhdGlvbigpLngoKSwgYWN0dWFsLmxvY2F0aW9uKCku
eCgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLmxvY2F0aW9uKCkueSgpLCBh
Y3R1YWwubG9jYXRpb24oKS55KCkpOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQu
c2l6ZSgpLndpZHRoKCksIGFjdHVhbC5zaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIEVYUEVDVF9G
TE9BVF9FUShleHBlY3RlZC5zaXplKCkuaGVpZ2h0KCksIGFjdHVhbC5zaXplKCkuaGVpZ2h0KCkp
OwotICAgIH0KLQogICAgIE1vY2tMYXllckRlbGVnYXRlIG1fc2lsZW50RGVsZWdhdGUsIG1fcGFy
ZW50RGVsZWdhdGU7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcGFyZW50LCBtX2NoaWxk
MSwgbV9jaGlsZDIsIG1fY2hpbGQzLCBtX2dyYW5kQ2hpbGQxLCBtX2dyYW5kQ2hpbGQyLCBtX2dy
YW5kQ2hpbGQzOwogfTsKQEAgLTU2MiwyNCArNTU2LDI0IEBAIFRFU1RfRihMYXllckNocm9taXVt
VGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAKICAgICAv
LyBDYXNlIDE6IGJhc2ljCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkxKSk7
Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0
eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHkxLCB0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQg
YmUgdW5pb25lZCBvZiBkaXJ0eTEgYW5kIGRpcnR5Mi4KICAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRz
RGlzcGxheShkaXJ0eTIpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYs
IDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBDYXNlIDM6IGRpcnR5
IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0Lgog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5RGlydHlSZWN0KSk7Ci0gICAgdmVy
aWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAx
NC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGly
dHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcwogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVl
ZHNEaXNwbGF5KG91dE9mQm91bmRzRGlydHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwgdGVzdExh
eWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEw
LjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAog
ICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBh
cmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAogICAgIC8vICAg
ICAgICAgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheSgpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxv
YXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRl
c3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIHJlc2V0TmVlZHNEaXNwbGF5IHNob3VsZCBlbXB0
eSB0aGUgZGlydHkgcmVjdCwgYW5kIE5PVCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZC4KICAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0
ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwpAQCAtNTk2LDEzICs1OTAsMTMgQEAgVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdh
dGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwg
Mi4wZik7CiAKICAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKTsKLSAgICB2ZXJp
ZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4
LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOwogCiAgICAgdGVzdExheWVy
LT5zZXROZWVkc0Rpc3BsYXkoZGlydHkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVh
bChkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCkBAIC02
NTYsNyArNjUwLDcgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hh
bmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNo
b3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQogICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBj
YWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBkaXJ0eSByZWN0LgogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRl
c3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0
c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogICAgIHRlc3RM
YXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116862</attachid>
            <date>2011-11-28 17:55:48 -0800</date>
            <delta_ts>2011-11-28 19:34:03 -0800</delta_ts>
            <desc>remove one more unnecessary include, this time checked that it compiles</desc>
            <filename>bug-72520-20111128175547.patch</filename>
            <type>text/plain</type>
            <size>106367</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJiNDQ3MmEwNjdmMmFh
NWE3NzM2MWFiZjgyOGQ2OGNkYzM1MjFiNS4uYjkxZjNlMWQxY2E5ZmQ0OTc1MDNmZmY5OWY1MDA3
YjFiZWFiNmM2MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTExLTI4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDRGFtYWdlVHJhY2tlciBjbGFzcyB0byBkZXRlcm1pbmUgcmVnaW9ucyBvZiBjaGFu
Z2UgZm9yIGEgc3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgQ0NEYW1hZ2VUcmFja2VyVGVzdCBhbmQgdXBkYXRlZCBvdGhlciB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Q0NEYW1hZ2VUcmFja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbUN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpj
b21wdXRlRGFtYWdlRnJvbVN1cmZhY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdl
VHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmN1cnJlbnREYW1hZ2VS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRp
bmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmR1bXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRhbWFnZVRyYWNr
ZXIpOgorCiAyMDExLTExLTI4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEZpeCBBc3BlY3QgUmF0aW8gUHJvcGVydHkgSW5oZXJpdGFuY2UgQW5kIE1ha2Ug
dGhlIENvbXB1dGVkIFZhbHVlIEVxdWFsIHRoZSBTcGVjaWZpZWQgVmFsdWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMjEzZGZmZGI3ZTVmMGI5YWRjMWMzMzU5Y2IyOGIyMDFlMzg2ZjFk
Ni4uZDgxMGI2YWZhODA5YTQ1ODI1ZTFlNDdjZDE2NmY5MTdjMjA3Yzg5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0xMS0yOCAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBD
Q0RhbWFnZVRyYWNrZXIgY2xhc3MgdG8gZGV0ZXJtaW5lIHJlZ2lvbnMgb2YgY2hhbmdlIGZvciBh
IHN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmVtdWxhdGVEcmF3aW5n
T25lRnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZVRlc3RUcmVlV2l0aFR3b1N1cmZh
Y2VzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9u
ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorCiAyMDExLTExLTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxMjczLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNkMTJhNzhiZDFlMDllZDZkNjZjM2YzMDUwMmY4MzI5MDkwMDI4YWEuLjcwYjNi
MTBjM2M4OGYyM2I4YTAyYTc4MzYwY2Q0MTA0ODBlNmFiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1NzEsNiArMzU3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZWJjMzk0YzRjNWRhZDMxNmNjZGJk
YTYxNTUyNGVmOTA3YTI0MDU2Yi4uMDc3OGU1ZGZmZjE5ODgwMTFlZjJmNmMwZmM2MmViYmJlNzgy
NjVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zMzEsNiAr
MzMxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVy
U3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJl
bmRlclN1cmZhY2UpKSB7CisKICAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0g
cm9vdERyYXdMYXllcikgewogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAg
ICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAs
IDAsIDAsIDApKTsKQEAgLTM0NSw3ICszNDYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYQog
ICAgIH0KIAogICAgIC8vIFRoZSBuZXh0IGZyYW1lIHNob3VsZCBzdGFydCBieSBhc3N1bWluZyBu
b3RoaW5nIGhhcyBjaGFuZ2VkLCBhbmQgY2hhbmdlcyBhcmUgbm90ZWQgYXMgdGhleSBvY2N1ci4K
LSAgICByb290RHJhd0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7
CisgICAgcm9vdERyYXdMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsK
IH0KIAogCkBAIC01ODMsNyArNTg0LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5k
ZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQogewotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFj
ZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gdGFyZ2V0U3VyZmFjZSkgeworICAgIGlm
IChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0
PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5ZXJJZCgpKSkgewog
ICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMsIGxheWVyLT5nZXREcmF3
UmVjdCgpKTsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRz
VGV4dHVyZSgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MTkzOTljODdiODdlZjVmNWNkZWNjYzZhMGU4MDU4NDBiMTExOWQyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNj
L0NDRGFtYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1
cmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDRGFtYWdlVHJh
Y2tlcj4gQ0NEYW1hZ2VUcmFja2VyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NEYW1hZ2VUcmFja2VyKCkpOworfQorCitDQ0RhbWFnZVRyYWNrZXI6OkNDRGFtYWdlVHJh
Y2tlcigpCit7CisgICAgbV9jdXJyZW50UmVjdEhpc3RvcnkgPSBhZG9wdFB0cihuZXcgUmVjdE1h
cCk7CisgICAgbV9uZXh0UmVjdEhpc3RvcnkgPSBhZG9wdFB0cihuZXcgUmVjdE1hcCk7Cit9CisK
K0NDRGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcigpCit7Cit9CisKK3ZvaWQgQ0NEYW1h
Z2VUcmFja2VyOjp1cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklELCBD
Q0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcikKK3sKKyAgICAvLworICAgIC8vIFRo
aXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlICJkYW1hZ2UgcmVjdCIgb2YgYSB0YXJnZXQgc3VyZmFj
ZS4gVGhlIGRhbWFnZQorICAgIC8vIHJlY3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgc3VyZmFjZSB0
aGF0IG1heSBoYXZlIGNoYW5nZWQgYW5kIG5lZWRzIHRvIGJlIHJlZHJhd24uCisgICAgLy8gVGhp
cyBjYW4gYmUgdXNlZCB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJhd24sIHRvIHNhdmUg
R1BVIGNvbXB1dGF0aW9uIGFuZAorICAgIC8vIGJhbmR3aWR0aC4KKyAgICAvLworICAgIC8vIFRo
ZSBzdXJmYWNlJ3MgZGFtYWdlIHJlY3QgaXMgY29tcHV0ZWQgYXMgdGhlIHVuaW9uIG9mIGFsbCBw
b3NzaWJsZSBjaGFuZ2VzIHRoYXQKKyAgICAvLyBoYXZlIGhhcHBlbmVkIHRvIHRoZSBzdXJmYWNl
IHNpbmNlIHRoZSBsYXN0IGZyYW1lIHdhcyBkcmF3bi4gVGhpcyBpbmNsdWRlczoKKyAgICAvLyAg
IC0gYW55IGNoYW5nZXMgZm9yIGV4aXN0aW5nIGxheWVycy9zdXJmYWNlcyB0aGF0IGNvbnRyaWJ1
dGUgdG8gdGhlIHRhcmdldCBzdXJmYWNlCisgICAgLy8gICAtIGxheWVycy9zdXJmYWNlcyB0aGF0
IGV4aXN0ZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLCBidXQgbm8gbG9uZ2VyIGV4aXN0LgorICAg
IC8vCisgICAgLy8gVGhlIGJhc2ljIGFsZ29yaXRobSBmb3IgY29tcHV0aW5nIHRoZSBkYW1hZ2Ug
cmVnaW9uIGlzIGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAvLyAgICAgICAvLyAxLiBjb21wdXRl
IGRhbWFnZSBjYXVzZWQgYnkgY2hhbmdlcyBpbiBhY3RpdmUvbmV3IGxheWVycworICAgIC8vICAg
ICAgIGZvciBlYWNoIGxheWVyIGluIHRoZSBsYXllckxpc3Q6CisgICAgLy8gICAgICAgICAgIGlm
IHRoZSBsYXllciBpcyBhY3R1YWxseSBhIHJlbmRlclN1cmZhY2U6CisgICAgLy8gICAgICAgICAg
ICAgICBhZGQgdGhlIHN1cmZhY2UncyBkYW1hZ2UgdG8gb3VyIHRhcmdldCBzdXJmYWNlLgorICAg
IC8vICAgICAgICAgICBlbHNlCisgICAgLy8gICAgICAgICAgICAgICBhZGQgdGhlIGxheWVyJ3Mg
ZGFtYWdlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworICAgIC8vICAgICAgIC8vIDIu
IGNvbXB1dGUgZGFtYWdlIGNhdXNlZCBieSB0aGUgdGFyZ2V0IHN1cmZhY2UncyBtYXNrLCBpZiBp
dCBleGlzdHMuCisgICAgLy8KKyAgICAvLyAgICAgICAvLyAzLiBjb21wdXRlIGRhbWFnZSBjYXVz
ZWQgYnkgb2xkIGxheWVycy9zdXJmYWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAgIC8vICAg
ICAgIGZvciBlYWNoIGxlZnRvdmVyIGxheWVyOgorICAgIC8vICAgICAgICAgICBhZGQgdGhlIG9s
ZCBsYXllci9zdXJmYWNlIGJvdW5kcyB0byB0aGUgdGFyZ2V0IHN1cmZhY2UgZGFtYWdlLgorICAg
IC8vCisgICAgLy8gICAgICAgLy8gNC4gY29tYmluZSBhbGwgcGFydGlhbCBkYW1hZ2UgcmVjdHMg
dG8gZ2V0IHRoZSBmdWxsIGRhbWFnZSByZWN0LgorICAgIC8vCisgICAgLy8gQWRkaXRpb25hbCBp
bXBvcnRhbnQgcG9pbnRzOgorICAgIC8vCisgICAgLy8gLSBUaGlzIGFsZ29yaXRobSBpcyBpbXBs
aWNpdGx5IHJlY3Vyc2l2ZTsgaXQgYXNzdW1lcyB0aGF0IGRlc2NlbmRhbnQgc3VyZmFjZXMgaGF2
ZQorICAgIC8vICAgYWxyZWFkeSBjb21wdXRlZCB0aGVpciBkYW1hZ2UuCisgICAgLy8KKyAgICAv
LyAtIENoYW5nZXMgdG8gbGF5ZXJzL3N1cmZhY2VzIGluZGljYXRlICJkYW1hZ2UiIHRvIHRoZSB0
YXJnZXQgc3VyZmFjZTsgSWYgYSBsYXllciBpcworICAgIC8vICAgbm90IGNoYW5nZWQsIGl0IGRv
ZXMgTk9UIG1lYW4gdGhhdCB0aGUgbGF5ZXIgY2FuIHNraXAgZHJhd2luZy4gQWxsIGxheWVycyB0
aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBkYW1hZ2VkIHJlZ2lvbiBzdGlsbCBuZWVkIHRvIGJl
IGRyYXduLiBGb3IgZXhhbXBsZSwgaWYgYSBsYXllcgorICAgIC8vICAgY2hhbmdlZCBpdHMgb3Bh
Y2l0eSwgdGhlbiBsYXllcnMgdW5kZXJuZWF0aCBtdXN0IGJlIHJlLWRyYXduIGFzIHdlbGwsIGV2
ZW4gaWYKKyAgICAvLyAgIHRoZXkgZGlkIG5vdCBjaGFuZ2UuCisgICAgLy8KKyAgICAvLyAtIElm
IGEgbGF5ZXIvc3VyZmFjZSBwcm9wZXJ0eSBjaGFuZ2VkLCB0aGUgb2xkIGJvdW5kcyBhbmQgbmV3
IGJvdW5kcyBtYXkgb3ZlcmxhcC4uLgorICAgIC8vICAgaS5lLiBzb21lIG9mIHRoZSBleHBvc2Vk
IHJlZ2lvbiBtYXkgbm90IGFjdHVhbGx5IGJlIGV4cG9zaW5nIGFueXRoaW5nLiBCdXQgdGhpcwor
ICAgIC8vICAgZG9lcyBub3QgYXJ0aWZpY2lhbGx5IGluZmxhdGUgdGhlIGRhbWFnZSByZWN0LiBJ
ZiB0aGUgbGF5ZXIgY2hhbmdlZCwgaXRzIGVudGlyZQorICAgIC8vICAgb2xkIGJvdW5kcyB3b3Vs
ZCBhbHdheXMgbmVlZCB0byBiZSByZWRyYXduLCByZWdhcmRsZXNzIG9mIGhvdyBtdWNoIGl0IG92
ZXJsYXBzCisgICAgLy8gICB3aXRoIHRoZSBsYXllcidzIG5ldyBib3VuZHMsIHdoaWNoIGFsc28g
bmVlZCB0byBiZSBlbnRpcmVseSByZWRyYXduLgorICAgIC8vCisgICAgLy8gLSBTZWUgY29tbWVu
dHMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc2VlIHdoYXQgZXhhY3RseSBpcyBjb25zaWRl
cmVkIGEgImNoYW5nZSIKKyAgICAvLyAgIGluIGEgbGF5ZXIvc3VyZmFjZS4KKyAgICAvLworICAg
IC8vIC0gVG8gY29ycmVjdGx5IG1hbmFnZSBleHBvc2VkIHJlY3RzLCB0d28gUmVjdE1hcHMgYXJl
IG1haW50YWluZWQ6CisgICAgLy8KKyAgICAvLyAgICAgIDEuIFRoZSAiY3VycmVudCIgbWFwIGNv
bnRhaW5zIGFsbCB0aGUgbGF5ZXIgYm91bmRzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlCisgICAg
Ly8gICAgICAgICBwcmV2aW91cyBmcmFtZSAoZXZlbiBvdXRzaWRlIHRoZSBwcmV2aW91cyBkYW1h
Z2VkIGFyZWEpLiBJZiBhIGxheWVyIGNoYW5nZXMKKyAgICAvLyAgICAgICAgIG9yIGRvZXMgbm90
IGV4aXN0IGFueW1vcmUsIHRob3NlIHJlZ2lvbnMgYXJlIHRoZW4gZXhwb3NlZCBhbmQgZGFtYWdl
IHRoZQorICAgIC8vICAgICAgICAgdGFyZ2V0IHN1cmZhY2UuIEFzIHRoZSBhbGdvcml0aG0gcHJv
Z3Jlc3NlcywgZW50cmllcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgIC8vICAgICAgICAgbWFw
IHVudGlsIGl0IGhhcyBvbmx5IGxlZnRvdmVyIGxheWVycyB0aGF0IG5vIGxvbmdlciBleGlzdC4K
KyAgICAvLworICAgIC8vICAgICAgMi4gVGhlICJuZXh0IiBtYXAgc3RhcnRzIG91dCBlbXB0eSwg
YW5kIGFzIHRoZSBhbGdvcml0aG0gcHJvZ3Jlc3NlcywgZXZlcnkKKyAgICAvLyAgICAgICAgIGxh
eWVyL3N1cmZhY2UgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc3VyZmFjZSBpcyBhZGRlZCB0byB0
aGUgbWFwLgorICAgIC8vCisgICAgLy8gICAgICAzLiBBZnRlciB0aGUgZGFtYWdlIHJlY3QgaXMg
Y29tcHV0ZWQsIHRoZSB0d28gbWFwcyBhcmUgc3dhcHBlZCwgc28gdGhhdCB0aGUKKyAgICAvLyAg
ICAgICAgIGRhbWFnZSB0cmFja2VyIGlzIHJlYWR5IGZvciB0aGUgbmV4dCBmcmFtZS4KKyAgICAv
LworCisgICAgLy8gSWYgdGhlIHRhcmdldCBzdXJmYWNlIGFscmVhZHkga25vd3MgaXRzIGVudGly
ZSByZWdpb24gaXMgZGFtYWdlZCwgd2UgY2FuIHJldHVybiBlYXJseS4KKyAgICAvLyBGSVhNRTog
dGhpcyBzaG91bGQgZ28gYXdheSwgb3Igd2lsbCBiZSBjbGVhbmVyLCBhZnRlciByZWZhY3Rvcmlu
ZyBpbnRvIFJlbmRlclBhc3MvUmVuZGVyU2NoZWR1bGUuCisgICAgQ0NMYXllckltcGwqIGxheWVy
ID0gbGF5ZXJMaXN0WzBdLmdldCgpOworICAgIGlmIChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50KCkpIHsKKyAgICAg
ICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IEZsb2F0UmVjdChsYXllci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZs
b2F0UmVjdCBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzID0gY29tcHV0ZURhbWFnZUZyb21BY3RpdmVM
YXllcnMobGF5ZXJMaXN0LCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisgICAgRmxvYXRSZWN0IGRh
bWFnZUZyb21TdXJmYWNlTWFzayA9IGNvbXB1dGVEYW1hZ2VGcm9tU3VyZmFjZU1hc2sodGFyZ2V0
U3VyZmFjZU1hc2tMYXllcik7CisgICAgRmxvYXRSZWN0IGRhbWFnZUZyb21MZWZ0b3ZlclJlY3Rz
ID0gY29tcHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7CisKKyAgICBtX2N1cnJlbnREYW1h
Z2VSZWN0ID0gZGFtYWdlRnJvbUFjdGl2ZUxheWVyczsKKyAgICBtX2N1cnJlbnREYW1hZ2VSZWN0
LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21TdXJmYWNlTWFzayk7CisgICAgbV9jdXJyZW50RGFt
YWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CisKKyAgICAv
LyBUaGUgbmV4dCBoaXN0b3J5IG1hcCBiZWNvbWVzIHRoZSBjdXJyZW50IG1hcCBmb3IgdGhlIG5l
eHQgZnJhbWUuCisgICAgc3dhcChtX2N1cnJlbnRSZWN0SGlzdG9yeSwgbV9uZXh0UmVjdEhpc3Rv
cnkpOworfQorCitGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjpyZW1vdmVSZWN0RnJvbUN1cnJl
bnRGcmFtZShpbnQgbGF5ZXJJRCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBtYWlu
bHkgZm9yIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorICAgIC8vIHRha2UoKSB3aWxsIHJlbW92
ZSB0aGUgZW50cnkgZnJvbSB0aGUgbWFwLCBvciBpZiBub3QgZm91bmQsIHJldHVybiBhIGRlZmF1
bHQgKGVtcHR5KSByZWN0LgorICAgIHJldHVybiBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+dGFrZShs
YXllcklEKTsKK30KKwordm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4dEZyYW1l
KGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFNwYWNlUmVjdCkKK3sKKyAgICAv
LyBUaGlzIGxheWVyIHNob3VsZCBub3QgeWV0IGV4aXN0IGluIG5leHQgZnJhbWUncyBoaXN0b3J5
LgorICAgIEFTU0VSVChtX25leHRSZWN0SGlzdG9yeS0+ZmluZChsYXllcklEKSA9PSBtX25leHRS
ZWN0SGlzdG9yeS0+ZW5kKCkpOworICAgIG1fbmV4dFJlY3RIaXN0b3J5LT5zZXQobGF5ZXJJRCwg
dGFyZ2V0U3BhY2VSZWN0KTsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29tcHV0
ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpCit7CisgICAgRmxvYXRSZWN0
IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRl
eCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAg
ICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwor
CisgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmli
dXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0U3VyZmFjZUxheWVySUQpKQor
ICAgICAgICAgICAgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShsYXllciwgZGFtYWdlUmVj
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvckxheWVyKGxheWVy
LCBkYW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGFtYWdlUmVjdDsKK30KKworRmxv
YXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21TdXJmYWNlTWFzayhDQ0xh
eWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllcikKK3sKKyAgICBGbG9hdFJlY3QgZGFtYWdl
UmVjdCA9IEZsb2F0UmVjdCgpOworCisgICAgaWYgKCF0YXJnZXRTdXJmYWNlTWFza0xheWVyKQor
ICAgICAgICByZXR1cm4gZGFtYWdlUmVjdDsKKworICAgIC8vIEN1cnJlbnRseSwgaWYgdGhlcmUg
aXMgYW55IGNoYW5nZSB0byB0aGUgbWFzaywgd2UgY2hvb3NlIHRvIGRhbWFnZSB0aGUgZW50aXJl
CisgICAgLy8gc3VyZmFjZS4gVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBiZSBvcHRpbWl6ZWQgbGF0
ZXIsIGJ1dCBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgYQorICAgIC8vIGNvbW1vbiBjYXNlLgor
ICAgIGlmICh0YXJnZXRTdXJmYWNlTWFza0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpIHx8
ICF0YXJnZXRTdXJmYWNlTWFza0xheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQorICAgICAg
ICBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRTaXplKHRh
cmdldFN1cmZhY2VNYXNrTGF5ZXItPmJvdW5kcygpKSk7CisKKyAgICByZXR1cm4gZGFtYWdlUmVj
dDsKK30KKworRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6Y29tcHV0ZURhbWFnZUZyb21MZWZ0
b3ZlclJlY3RzKCkKK3sKKyAgICAvLyBBZnRlciBjb21wdXRpbmcgZGFtYWdlIGZvciBhbGwgYWN0
aXZlIGxheWVycywgYW55IGxlZnRvdmVyIGl0ZW1zIGluIHRoZSBjdXJyZW50CisgICAgLy8gcmVj
dCBoaXN0b3J5IGNvcnJlc3BvbmQgdG8gbGF5ZXJzL3N1cmZhY2VzIHRoYXQgbm8gbG9uZ2VyIGV4
aXN0LiBTbywgdGhlc2UgcmVnaW9ucworICAgIC8vIGFyZSBub3cgZXhwb3NlZCBvbiB0aGUgdGFy
Z2V0IHN1cmZhY2UuCisKKyAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwor
CisgICAgZm9yIChSZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5i
ZWdpbigpOyBpdCAhPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+ZW5kKCk7ICsraXQpCisgICAgICAg
IGRhbWFnZVJlY3QudW5pdGUoaXQtPnNlY29uZCk7CisKKyAgICBtX2N1cnJlbnRSZWN0SGlzdG9y
eS0+Y2xlYXIoKTsKKworICAgIHJldHVybiBkYW1hZ2VSZWN0OworfQorCit2b2lkIENDRGFtYWdl
VHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJl
Y3QmIHRhcmdldERhbWFnZVJlY3QpCit7CisgICAgLy8gVGhlcmUgYXJlIHR3byB3YXlzIHRoYXQg
YSBsYXllciBjYW4gZGFtYWdlIGEgcmVnaW9uIG9mIHRoZSB0YXJnZXQgc3VyZmFjZToKKyAgICAv
LyAgIDEuIFByb3BlcnR5IGNoYW5nZSAoZS5nLiBvcGFjaXR5LCBwb3NpdGlvbiwgdHJhbnNmb3Jt
cyk6CisgICAgLy8gICAgICAgIC0gdGhlIGVudGlyZSByZWdpb24gb2YgdGhlIGxheWVyIGl0c2Vs
ZiBkYW1hZ2VzIHRoZSBzdXJmYWNlLgorICAgIC8vICAgICAgICAtIHRoZSBvbGQgbGF5ZXIgcmVn
aW9uIGFsc28gZGFtYWdlcyB0aGUgc3VyZmFjZSwgYmVjYXVzZSB0aGlzIHJlZ2lvbiBpcyBub3cg
ZXhwb3NlZC4KKyAgICAvLyAgICAgICAgLSBub3RlIHRoYXQgaW4gbWFueSBjYXNlcyB0aGUgb2xk
IGFuZCBuZXcgbGF5ZXIgcmVjdHMgbWF5IG92ZXJsYXAsIHdoaWNoIGlzIGZpbmUuCisgICAgLy8K
KyAgICAvLyAgIDIuIFJlcGFpbnQvdXBkYXRlOiBJZiBhIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhh
dCB3YXMgcmVwYWludGVkL3VwZGF0ZWQsIHRoYXQKKyAgICAvLyAgICAgIHJlZ2lvbiBkYW1hZ2Vz
IHRoZSBzdXJmYWNlLgorICAgIC8vCisgICAgLy8gUHJvcGVydHkgY2hhbmdlcyB0YWtlIHByaW9y
aXR5IG92ZXIgdXBkYXRlIHJlY3RzLgorCisgICAgLy8gQ29tcHV0ZSB0aGUgbGF5ZXIncyAib3Jp
Z2luVHJhbnNmb3JtIiBieSB0cmFuc2xhdGluZyB0aGUgZHJhd1RyYW5zZm9ybS4KKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBvcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgIG9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKworICAgIEZsb2F0UmVj
dCBvbGRMYXllclJlY3QgPSByZW1vdmVSZWN0RnJvbUN1cnJlbnRGcmFtZShsYXllci0+aWQoKSk7
CisKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9y
bS5tYXBSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxheWVyLT5ib3VuZHMoKSkp
OworICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBsYXllclJlY3RJblRhcmdl
dFNwYWNlKTsKKworICAgIGlmIChsYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAg
ICAgICAvLyBJZiBhIGxheWVyIGhhcyBjaGFuZ2VkLCB0aGVuIGl0cyBlbnRpcmUgbGF5ZXIgcmVj
dCBhZmZlY3RzIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51
bml0ZUlmTm9uWmVybyhsYXllclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICAvLyBUaGUg
bGF5ZXIncyBvbGQgcmVnaW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwg
dG9vLgorICAgICAgICAvLyBOb3RlIG9sZExheWVyUmVjdCBpcyBhbHJlYWR5IGluIHRhcmdldCBz
cGFjZS4KKyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRMYXllclJl
Y3QpOworICAgIH0gZWxzZSBpZiAoIWxheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBsYXllciBwcm9wZXJ0aWVzIGhhdmVudCBjaGFuZ2VkLCB0aGVuIHRo
ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgaXMgb25seQorICAgICAgICAvLyBhZmZlY3RlZCBieSB0aGUg
bGF5ZXIncyB1cGRhdGUgYXJlYSwgd2hpY2ggY291bGQgYmUgZW1wdHkuCisgICAgICAgIEZsb2F0
UmVjdCB1cGRhdGVSZWN0SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGxh
eWVyLT51cGRhdGVSZWN0KCkpOworICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25a
ZXJvKHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NEYW1hZ2VU
cmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllciwg
RmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KQoreworICAgIC8vIFRoZXJlIGFyZSB0d28gd2F5
cyBhICJkZXNjZW5kYW50IHN1cmZhY2UiIGNhbiBkYW1hZ2UgcmVnaW9ucyBvZiB0aGUgInRhcmdl
dCBzdXJmYWNlIjoKKyAgICAvLyAgIDEuIFByb3BlcnR5IGNoYW5nZToKKyAgICAvLyAgICAgICAg
LSBhIHN1cmZhY2UncyBnZW9tZXRyeSBjYW4gY2hhbmdlIGJlY2F1c2Ugb2YKKyAgICAvLyAgICAg
ICAgICAgIC0gY2hhbmdlcyB0byBkZXNjZW5kYW50cyAoaS5lLiB0aGUgc3VidHJlZSkgdGhhdCBh
ZmZlY3QgdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3QKKyAgICAvLyAgICAgICAgICAgIC0gY2hh
bmdlcyB0byBhbmNlc3RvciBsYXllcnMgdGhhdCBwcm9wYWdhdGUgdGhlaXIgcHJvcGVydHkgY2hh
bmdlcyB0byB0aGVpciBlbnRpcmUgc3VidHJlZS4KKyAgICAvLyAgICAgICAgLSBqdXN0IGxpa2Ug
bGF5ZXJzLCBib3RoIHRoZSBvbGQgc3VyZmFjZSByZWN0IGFuZCBuZXcgc3VyZmFjZSByZWN0IHdp
bGwKKyAgICAvLyAgICAgICAgICBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlIGluIHRoaXMgY2Fz
ZS4KKyAgICAvLworICAgIC8vICAgMi4gRGFtYWdlIHJlY3Q6IFRoaXMgc3VyZmFjZSBtYXkgaGF2
ZSBiZWVuIGRhbWFnZWQgYnkgaXRzIG93biBsYXllckxpc3QgYXMgd2VsbCwgYW5kIHRoYXQgZGFt
YWdlCisgICAgLy8gICAgICBzaG91bGQgcHJvcGFnYXRlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4K
KyAgICAvLworCisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKKworICAgIEZsb2F0UmVjdCBvbGRTdXJmYWNlUmVjdCA9IHJlbW92ZVJl
Y3RGcm9tQ3VycmVudEZyYW1lKGxheWVyLT5pZCgpKTsKKworICAgIEZsb2F0UmVjdCBzdXJmYWNl
UmVjdEluVGFyZ2V0U3BhY2UgPSByZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7
IC8vIGFscmVhZHkgaW5jbHVkZXMgcmVwbGljYSBpZiBpdCBleGlzdHMuCisgICAgc2F2ZVJlY3RG
b3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSk7CisKKyAg
ICBGbG9hdFJlY3QgZGFtYWdlUmVjdEluTG9jYWxTcGFjZTsKKyAgICBpZiAocmVuZGVyU3VyZmFj
ZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKSB7CisgICAgICAgIC8vIFRoZSBlbnRpcmUgc3Vy
ZmFjZSBjb250cmlidXRlcyBkYW1hZ2UuCisgICAgICAgIGRhbWFnZVJlY3RJbkxvY2FsU3BhY2Ug
PSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOworCisgICAgICAgIC8vIFRoZSBzdXJmYWNl
J3Mgb2xkIHJlZ2lvbiBpcyBub3cgZXhwb3NlZCBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UsIHRvby4K
KyAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhvbGRTdXJmYWNlUmVjdCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT25seSB0aGUgc3VyZmFjZSdzIGRhbWFnZVJlY3Qg
d2lsbCBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICBkYW1hZ2VSZWN0SW5Mb2Nh
bFNwYWNlID0gcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIHdhcyBkYW1hZ2UsIHRyYW5zZm9ybSBpdCB0
byB0YXJnZXQgc3BhY2UsIGFuZCBwb3NzaWJseSBjb250cmlidXRlIGl0cyByZWZsZWN0aW9uIGlm
IG5lZWRlZC4KKyAgICBpZiAoIWRhbWFnZVJlY3RJbkxvY2FsU3BhY2UuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0gPSByZW5k
ZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgRmxvYXRSZWN0IGRhbWFnZVJl
Y3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9j
YWxTcGFjZSk7CisgICAgICAgIHRhcmdldERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdl
UmVjdEluVGFyZ2V0U3BhY2UpOworCisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKKyAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHJlcGxpY2EncyAib3JpZ2luVHJhbnNmb3Jt
IiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVwbGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgdGFyZ2V0
IHN1cmZhY2Ugb3JpZ2luIHNwYWNlLgorICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVwbGljYU9yaWdpblRyYW5zZm9ybSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRy
YW5zZm9ybSgpOworICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUo
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSk7CisgICAgICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
Lm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICAg
ICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLWxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+cG9zaXRpb24oKS54KCksIC1sYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgp
KTsKKworICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNh
T3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxTcGFjZSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGRhbWFnZSBvbiB0aGUgcmVwbGljYSdz
IG1hc2ssIHRoZW4gdGhlIHRhcmdldCBzdXJmYWNlIHJlY2VpdmVzIHRoYXQgZGFtYWdlIGFzIHdl
bGwuCisgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVy
KCktPm1hc2tMYXllcigpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTWFza0xheWVy
ID0gbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKKworICAgICAgICBGbG9hdFJl
Y3Qgb2xkUmVwbGljYU1hc2tSZWN0ID0gcmVtb3ZlUmVjdEZyb21DdXJyZW50RnJhbWUocmVwbGlj
YU1hc2tMYXllci0+aWQoKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcmVwbGljYSdzICJv
cmlnaW5UcmFuc2Zvcm0iIHRoYXQgbWFwcyBmcm9tIHRoZSByZXBsaWNhJ3Mgb3JpZ2luIHNwYWNl
IHRvIHRoZSB0YXJnZXQgc3VyZmFjZSBvcmlnaW4gc3BhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgp
LT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS50cmFu
c2xhdGUobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSk7CisgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAg
IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1sYXllci0+cmVwbGljYUxheWVyKCkt
PnBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSk7
CisKKyAgICAgICAgRmxvYXRSZWN0IHJlcGxpY2FNYXNrTGF5ZXJSZWN0ID0gcmVwbGljYU9yaWdp
blRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0U2l6
ZShyZXBsaWNhTWFza0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCByZXBsaWNhTWFza0xheWVyLT5i
b3VuZHMoKS5oZWlnaHQoKSkpKTsKKyAgICAgICAgc2F2ZVJlY3RGb3JOZXh0RnJhbWUocmVwbGlj
YU1hc2tMYXllci0+aWQoKSwgcmVwbGljYU1hc2tMYXllclJlY3QpOworCisgICAgICAgIC8vIElu
IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBhIGNoYW5nZSBpbiB0aGUgcmVwbGljYSBtYXNr
IGRhbWFnZXMgdGhlIGVudGlyZSByZXBsaWNhIHJlZ2lvbi4KKyAgICAgICAgaWYgKHJlcGxpY2FN
YXNrTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkgfHwgIXJlcGxpY2FNYXNrTGF5ZXItPnVw
ZGF0ZVJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVuaXRl
SWZOb25aZXJvKHJlcGxpY2FNYXNrTGF5ZXJSZWN0KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGFtYWdlVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJlYjQ0OGMwMmMyZDAyMTM0ZmQ0
NWNlYWZhOWUwNjJiZTBkNzJmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDRGFtYWdlVHJhY2tlcl9oCisjZGVmaW5lIENDRGFtYWdl
VHJhY2tlcl9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NS
ZW5kZXJTdXJmYWNlOworCisvLyBDb21wdXRlcyB0aGUgcmVnaW9uIHdoZXJlIHBpeGVscyBoYXZl
IGFjdHVhbGx5IGNoYW5nZWQgb24gYSBSZW5kZXJTdXJmYWNlLiBUaGlzIHJlZ2lvbiBpcyB1c2Vk
CisvLyB0byBzY2lzc29yIHdoYXQgaXMgYWN0dWFsbHkgZHJhd24gdG8gdGhlIHNjcmVlbiB0byBz
YXZlIEdQVSBjb21wdXRhdGlvbiBhbmQgYmFuZHdpZHRoLgorY2xhc3MgQ0NEYW1hZ2VUcmFja2Vy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0RhbWFnZVRyYWNrZXI+IGNyZWF0
ZSgpOworICAgIH5DQ0RhbWFnZVRyYWNrZXIoKTsKKworICAgIHZvaWQgdXBkYXRlRGFtYWdlUmVj
dEZvck5leHRGcmFtZShjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxp
c3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VN
YXNrTGF5ZXIpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJl
dHVybiBtX2N1cnJlbnREYW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NEYW1hZ2VUcmFj
a2VyKCk7CisKKyAgICBGbG9hdFJlY3QgY29tcHV0ZURhbWFnZUZyb21BY3RpdmVMYXllcnMoY29u
c3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3Vy
ZmFjZUxheWVySUQpOworICAgIEZsb2F0UmVjdCBjb21wdXRlRGFtYWdlRnJvbVN1cmZhY2VNYXNr
KENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNlTWFza0xheWVyKTsKKyAgICBGbG9hdFJlY3QgY29t
cHV0ZURhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7CisKKyAgICBGbG9hdFJlY3QgcmVtb3ZlUmVj
dEZyb21DdXJyZW50RnJhbWUoaW50IGxheWVySUQpOworICAgIHZvaWQgc2F2ZVJlY3RGb3JOZXh0
RnJhbWUoaW50IGxheWVySUQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0U3BhY2VSZWN0KTsKKwor
ICAgIC8vIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBpbiBjb21wdXRlRGFt
YWdlRnJvbUFjdGl2ZUxheWVycygpLgorICAgIHZvaWQgZXh0ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NM
YXllckltcGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOworICAgIHZvaWQgZXh0ZW5k
RGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCosIEZsb2F0UmVjdCYgdGFyZ2V0RGFt
YWdlUmVjdCk7CisKKyAgICAvLyBUbyBjb3JyZWN0bHkgdHJhY2sgZXhwb3NlZCByZWdpb25zLCB0
d28gaGFzaHRhYmxlcyBvZiByZWN0cyBhcmUgbWFpbnRhaW5lZC4KKyAgICAvLyBUaGUgImN1cnJl
bnQiIG1hcCBpcyB1c2VkIHRvIGNvbXB1dGUgZXhwb3NlZCByZWdpb25zIG9mIHRoZSBjdXJyZW50
IGZyYW1lLCB3aGlsZQorICAgIC8vIHRoZSAibmV4dCIgbWFwIGlzIHVzZWQgdG8gY29sbGVjdCBs
YXllciByZWN0cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBuZXh0IGZyYW1lLgorICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIEZsb2F0UmVjdD4gUmVjdE1hcDsKKyAgICBPd25QdHI8UmVjdE1hcD4gbV9j
dXJyZW50UmVjdEhpc3Rvcnk7CisgICAgT3duUHRyPFJlY3RNYXA+IG1fbmV4dFJlY3RIaXN0b3J5
OworCisgICAgRmxvYXRSZWN0IG1fY3VycmVudERhbWFnZVJlY3Q7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0RhbWFnZVRyYWNrZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCmluZGV4IDEyZDIyZTJhMjQxMTIyY2I1N2I5OWVkYmRmNDYzZmY5Y2IyODgyNGUu
LmFmMDQyZTU2NjliNDYyZmI2YzA5ZGU2ZmMzZDRjZjRiNmQ4NGU5MmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKQEAgLTIzOSwxNSArMjM5LDIyIEBAIHZvaWQgQ0NMYXllckltcGw6Om5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZEZvckRlc2NlbmRhbnRzKCkKICAgICAgICAgbV9jaGlsZHJlbltp
XS0+bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12b2lkIENDTGF5
ZXJJbXBsOjpyZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCkKK3ZvaWQgQ0NMYXll
ckltcGw6OnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCkKIHsKICAgICBtX2xheWVy
UHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7CisgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KCk7
CiAKICAgICBpZiAobV9yZW5kZXJTdXJmYWNlKQogICAgICAgICBtX3JlbmRlclN1cmZhY2UtPnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZygpOwogCisgICAgaWYgKG1fbWFza0xheWVyKQorICAgICAg
ICBtX21hc2tMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKKworICAg
IGlmIChtX3JlcGxpY2FMYXllcikKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPnJlc2V0QWxsQ2hh
bmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7IC8vIGFsc28gcmVzZXRzIHRoZSByZXBsaWNhIG1hc2ss
IGlmIGl0IGV4aXN0cy4KKwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRG
bGFnRm9yU3VidHJlZSgpOworICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldEFsbENoYW5nZVRy
YWNraW5nRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjpzZXRCb3VuZHMoY29u
c3QgSW50U2l6ZSYgYm91bmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmY2YjY4ZTFlNzgy
MDdjZTFhYzZmY2YyNjI1N2ZkOTdkNGJkODI0MS4uZTJjMDBjODY4OTgyYTc2YzY1OGNhZTgzNDEw
ZTg1YmNjZGNmODA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xOTIsNyArMTkyLDcgQEAg
cHVibGljOgogICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAogICAgIGJvb2wg
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFu
Z2VkOyB9Ci0gICAgdm9pZCByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7IC8v
IGFsc28gcmVzZXRzIHByb3BlcnR5IGNoYW5nZSBmb3IgZXhpc3RpbmcgcmVuZGVyIHN1cmZhY2Vz
LgorICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCA2YzhkYTQ2MWFjZDE3NDEwYTEwMjVlODkzMjU0ZWRhYzAxMTczZWY2
Li5hYmRmMTYyZDAzYTA5ZmIyZDIwOTJhZTk0OWFlZTkwNWNhN2VhZWQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdAogCiAgICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIg
c3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCiAgICAgICAgICAgICAvLyBz
dXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRl
clN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisg
ICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJp
YnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5p
ZCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgbGF5ZXItPnNl
dExheWVyVHJlZUhvc3QodGhpcyk7CkBAIC00MTUsNyArNDE1LDggQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIENDVGUKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsg
bGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewogICAgICAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0g
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisKKyAgICAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhv
c3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PExheWVyQ2hyb21pdW0+
KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250
ZXh0LCB1cGRhdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNDg3ZDhmNGJl
NmJjZDY0NDhkYzA2NjFkNTk2NzVlZmQ0NmEwNmY3ZC4uNTZkMmI2YzQxODljNzY5ZTA0ZjRhZWM3
ZGMwOGJmMzFkMWIyMTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTc1LDYg
Kzc1LDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAgICAgLCBlbmFibGVDb21wb3Np
dG9yVGhyZWFkKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAg
ICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQorICAgICAgICAgICAgLCB1
c2VEYW1hZ2VUcmFja2VyKGZhbHNlKQogICAgICAgICAgICAgLCByZWZyZXNoUmF0ZSgwKSB7IH0K
IAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwpAQCAtODMsNiArODQsNyBAQCBzdHJ1Y3Qg
Q0NTZXR0aW5ncyB7CiAgICAgYm9vbCBlbmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wg
c2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CisgICAgYm9v
bCB1c2VEYW1hZ2VUcmFja2VyOwogICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggOGE1N2JmZTk1OTM3MzQyOGI2
YTg5YjlhOGEyYzgzZjc5OGJmNTlkMS4uMmUwY2JjZjJjNTg1ZTgyMTVkMjg2ZGVlOWI2MWU1MzUx
ODBjZmZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ1
LDYgKzQ1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsKICAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xh
eWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0
cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9y
PFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1h
eFRleHR1cmVTaXplKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGlj
IGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRh
cmdldFN1cmZhY2VMYXllcklEKTsKKwogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKICAg
ICAgICAgaW50IGxheWVySWQ7CiAgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGE7CkBAIC04Myw2
ICs4NSwyMCBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdChMYXllclR5cGUqIGxheWVyKQogICAgIHJldHVybiB2aXNpYmxlTGF5ZXJSZWN0
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Citib29sIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiBsYXll
ciwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKQoreworICAgIC8vIEEgbGF5ZXIgd2lsbCBlaXRo
ZXIgY29udHJpYnV0ZSBpdHMgb3duIGNvbnRlbnQsIG9yIGl0cyByZW5kZXIgc3VyZmFjZSdzIGNv
bnRlbnQsIHRvCisgICAgLy8gdGhlIHRhcmdldCBzdXJmYWNlLiBUaGUgbGF5ZXIgY29udHJpYnV0
ZXMgaXRzIHN1cmZhY2UncyBjb250ZW50IHdoZW4gYm90aCB0aGUKKyAgICAvLyBmb2xsb3dpbmcg
YXJlIHRydWU6CisgICAgLy8gICgxKSBUaGUgbGF5ZXIgYWN0dWFsbHkgaGFzIGEgcmVuZGVyU3Vy
ZmFjZSwgYW5kCisgICAgLy8gICgyKSBUaGUgbGF5ZXIncyByZW5kZXJTdXJmYWNlIGlzIG5vdCB0
aGUgc2FtZSBhcyB0aGUgdGFyZ2V0U3VyZmFjZS4KKyAgICAvLworICAgIC8vIE90aGVyd2lzZSwg
dGhlIGxheWVyIGp1c3QgY29udHJpYnV0ZXMgaXRzZWxmIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4K
KworICAgIHJldHVybiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5pZCgpICE9IHRh
cmdldFN1cmZhY2VMYXllcklEOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggZGQxYWI2MzNmOWIwN2QwNjVl
MTE0NjYzNTllYzFkMzU1NWI5NmQ2Ni4uY2ViNzY2NzljZjZkNWVmNmI3OWEyMDdiYmQ4NzE4MTZk
ZmJhNWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgQ0NSZW5kZXJTdXJmYWNlOjpDQ1Jl
bmRlclN1cmZhY2UoQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogICAgICwgbV9zdXJmYWNlUHJv
cGVydHlDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9kcmF3T3BhY2l0eSgxKQogeworICAgIG1fZGFt
YWdlVHJhY2tlciA9IENDRGFtYWdlVHJhY2tlcjo6Y3JlYXRlKCk7CiB9CiAKIENDUmVuZGVyU3Vy
ZmFjZTo6fkNDUmVuZGVyU3VyZmFjZSgpCkBAIC0yMzYsNiArMjM4LDEwIEBAIHZvaWQgQ0NSZW5k
ZXJTdXJmYWNlOjpkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
ICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTIxKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zv
cm0ubTIyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTIzKCkgPDwgIiwgIiA8PCBtX2Ry
YXdUcmFuc2Zvcm0ubTI0KCkgPDwgIiAgLy8gICI7CiAgICAgdHMgPDwgbV9kcmF3VHJhbnNmb3Jt
Lm0zMSgpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0zMigpIDw8ICIsICIgPDwgbV9kcmF3
VHJhbnNmb3JtLm0zMygpIDw8ICIsICIgPDwgbV9kcmF3VHJhbnNmb3JtLm0zNCgpIDw8ICIgIC8v
ICAiOwogICAgIHRzIDw8IG1fZHJhd1RyYW5zZm9ybS5tNDEoKSA8PCAiLCAiIDw8IG1fZHJhd1Ry
YW5zZm9ybS5tNDIoKSA8PCAiLCAiIDw8IG1fZHJhd1RyYW5zZm9ybS5tNDMoKSA8PCAiLCAiIDw8
IG1fZHJhd1RyYW5zZm9ybS5tNDQoKSA8PCAiXG4iOworCisgICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCsxKTsKKyAgICB0cyA8PCAiZGFtYWdlUmVjdCBpcyBwb3MoIiA8PCBtX2RhbWFnZVRyYWNr
ZXItPmN1cnJlbnREYW1hZ2VSZWN0KCkueCgpIDw8ICIsIiA8PCBtX2RhbWFnZVRyYWNrZXItPmN1
cnJlbnREYW1hZ2VSZWN0KCkueSgpIDw8ICIpLCAiOworICAgIHRzIDw8ICJzaXplKCIgPDwgbV9k
YW1hZ2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpLndpZHRoKCkgPDwgIiwiIDw8IG1fZGFt
YWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKS5oZWlnaHQoKSA8PCAiKVxuIjsKIH0KIAog
aW50IENDUmVuZGVyU3VyZmFjZTo6b3duaW5nTGF5ZXJJZCgpIGNvbnN0CkBAIC0yNzUsNSArMjgx
LDEwIEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkgY29u
c3QKICAgICByZXR1cm4gbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkIHx8IG1fb3duaW5nTGF5ZXIt
PmxheWVyUHJvcGVydHlDaGFuZ2VkKCk7CiB9CiAKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpzdXJm
YWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkICYmICFtX293bmluZ0xheWVyLT5sYXllclByb3Bl
cnR5Q2hhbmdlZCgpOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCA0YmQ0YWY4NTgxOTQyNjhjZjBj
ODVkM2E2YTBkMmQ0MDllMGViY2Q4Li5kMGUzNWExNzg2NTQzN2VkZDJjODcyZGZhNjIyYzM2YjBk
NDNhZGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNDAsNiArNDAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDRGFtYWdlVHJhY2tlcjsKIGNsYXNzIEND
TGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogY2xhc3MgTWFuYWdlZFRl
eHR1cmU7CkBAIC0xMDAsNiArMTAxLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldFByb3Bl
cnR5Q2hhbmdlZEZsYWcoKSB7IG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCA9IGZhbHNlOyB9CiAg
ICAgYm9vbCBzdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkgY29uc3Q7CisgICAgYm9vbCBzdXJmYWNl
UHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50KCkgY29uc3Q7CisKKyAgICBDQ0RhbWFn
ZVRyYWNrZXIqIGRhbWFnZVRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBtX2RhbWFnZVRyYWNrZXIu
Z2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CkBAIC0x
MjAsNiArMTI0LDExIEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmln
aW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7CisKKyAgICBPd25QdHI8Q0NEYW1hZ2VUcmFja2Vy
PiBtX2RhbWFnZVRyYWNrZXI7CisKKyAgICAvLyBTdG9yZWQgaW4gdGhlICJzdXJmYWNlIHNwYWNl
IiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Npc3NvcmluZy4KKyAgICBGbG9h
dFJlY3QgbV9kYW1hZ2VSZWN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
aW5kZXggZTAxNzFhY2QxM2ExYjljYzE5ZGFhNTFiYmQzZjIzYTc3ZjZkODY2Yy4uMTM2OTNkM2Fj
YzVjMWE4MDI2NDliNjJjMzBlOGIzOTc3YmE1ZDk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMn
OiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAg
ICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29u
dHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3Bw
JywKQEAgLTYxLDYgKzYyLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCisg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Nj
aGVkdWxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
RGFtYWdlVHJhY2tlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMzc5ZDY0ZWRiY2M2NTA0N2M5ZDdl
Yjk0MzhjZDgzZTk4OTMxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC0wLDAgKzEsNzUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRy
YWNrZXIuaCIKKworI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVz
dHM7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1w
bD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBDQ0xheWVyU29ydGVyIGxheWVy
U29ydGVyOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFZl
Y3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBTYW5pdHkgY2hlY2s6IFRoZSB0ZXN0IGl0
c2VsZiBzaG91bGQgY3JlYXRlIHRoZSByb290IGxheWVyJ3MgcmVuZGVyIHN1cmZhY2UsIHNvCisg
ICAgLy8gICAgICAgICAgICAgICB0aGF0IHRoZSBzdXJmYWNlIChhbmQgaXRzIGRhbWFnZSB0cmFj
a2VyKSBjYW4gcGVyc2lzdCBhY3Jvc3MgbXVsdGlwbGUKKyAgICAvLyAgICAgICAgICAgICAgIGNh
bGxzIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwor
CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOworICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShDQ0xheWVySW1wbCogcm9vdCkKK3sKKyAgICAvLyBUaGlz
IGVtdWxhdGVzIG9ubHkgdGhlIHN0ZXBzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRlc3RpbmcgdGhl
IGRhbWFnZSB0cmFja2VyOgorICAgIC8vICAgMS4gY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzc2Vz
IGFuZCBsYXllcmxpc3RzCisgICAgLy8gICAyLiB1cGRhdGluZyBhbGwgZGFtYWdlIHRyYWNrZXJz
IGluIHRoZSBjb3JyZWN0IG9yZGVyCisgICAgLy8gICAzLiByZXNldHRpbmcgYWxsIHVwZGF0ZVJl
Y3RzIGFuZCBwcm9wZXJ0eUNoYW5nZWQgZmxhZ3MgZm9yIGFsbCBsYXllcnMgYW5kIHN1cmZhY2Vz
LgorCisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKKyAgICAvLyBJdGVyYXRlIGJhY2stdG8tZnJv
bnQsIHNvIHRoYXQgZGFtYWdlIGNvcnJlY3RseSBwcm9wYWdhdGVzIGZyb20gZGVzY2VuZGFudCBz
dXJmYWNlcyB0byBhbmNlc3RvcnMuCisgICAgZm9yIChpbnQgaSA9IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtpXS0+cmVuZGVyU3VyZmFj
ZSgpOworICAgICAgICB0YXJnZXRTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPnVwZGF0ZURhbWFn
ZVJlY3RGb3JOZXh0RnJhbWUodGFyZ2V0U3VyZmFjZS0+bGF5ZXJMaXN0KCksIHRhcmdldFN1cmZh
Y2UtPm93bmluZ0xheWVySWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtpXS0+bWFza0xheWVy
KCkpOworICAgIH0KKworICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1
cmZhY2UoKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMik7CisKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOwor
ICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcm9vdC0+
c2V0Qm91bmRzKEludFNpemUoNTAwLCA1MDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDUw
MCwgNTAwKSkpOworCisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAwLCAxMDAp
KTsKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBj
aGlsZC0+c2V0Qm91bmRzKEludFNpemUoMzAsIDMwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisKKyAgICByZXR1cm4gcm9v
dC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZVRlc3RUcmVl
V2l0aFR3b1N1cmZhY2VzKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgdHJlZSBoYXMgdHdvIHJlbmRl
ciBzdXJmYWNlczogb25lIGZvciB0aGUgcm9vdCwgYW5kIG9uZSBmb3IKKyAgICAvLyBjaGlsZDEu
IEFkZGl0aW9uYWxseSwgdGhlIHJvb3QgaGFzIGEgc2Vjb25kIGNoaWxkIGxheWVyLCBhbmQgY2hp
bGQxIGhhcyB0d28KKyAgICAvLyBjaGlsZHJlbiBvZiBpdHMgb3duLgorCisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDUpOwor
CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByb290LT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJ
bnRTaXplKDUwMCwgNTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSg1MDAsIDUwMCkpKTsK
KworICAgIGNoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxMDAsIDEwMCkpOworICAgIGNo
aWxkMS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICBjaGlsZDEtPnNl
dEJvdW5kcyhJbnRTaXplKDMwLCAzMCkpOworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOyAv
LyB3aXRoIGEgY2hpbGQgdGhhdCBkcmF3c0NvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZSB0aGUgbGF5
ZXIgdG8gY3JlYXRlIGl0cyBvd24gcmVuZGVyU3VyZmFjZS4KKyAgICBjaGlsZDEtPnNldERyYXdz
Q29udGVudChmYWxzZSk7IC8vIHRoaXMgbGF5ZXIgZG9lcyBub3QgZHJhdywgYnV0IGlzIGludGVu
ZGVkIHRvIGNyZWF0ZSBpdHMgb3duIHJlbmRlclN1cmZhY2UuCisKKyAgICBjaGlsZDItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoMTEsIDExKSk7CisgICAgY2hpbGQyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGNoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoMTgsIDE4
KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxk
MS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAsIDIwMCkpOworICAgIGdyYW5kQ2hpbGQxLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRC
b3VuZHMoSW50U2l6ZSg2LCA4KSk7CisgICAgZ3JhbmRDaGlsZDEtPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE5MCwgMTkw
KSk7CisgICAgZ3JhbmRDaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7
CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKDYsIDgpKTsKKyAgICBncmFuZENo
aWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFu
ZENoaWxkMSk7CisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMik7CisgICAgcm9vdC0+
YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgcmV0
dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVB
bmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKworICAgIC8vIFNldHVw
IGluY2x1ZGVzIGdvaW5nIHBhc3QgdGhlIGZpcnN0IGZyYW1lIHdoaWNoIGFsd2F5cyBkYW1hZ2Vz
IGV2ZXJ5dGhpbmcsIHNvCisgICAgLy8gdGhhdCB3ZSBjYW4gYWN0dWFsbHkgcGVyZm9ybSBzcGVj
aWZpYyB0ZXN0cy4KKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisg
ICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAg
Ly8gU2V0dXAgaW5jbHVkZXMgZ29pbmcgcGFzdCB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggYWx3YXlz
IGRhbWFnZXMgZXZlcnl0aGluZywgc28KKyAgICAvLyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwZXJm
b3JtIHNwZWNpZmljIHRlc3RzLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisKKyAgICByZXR1cm4gcm9vdC5yZWxlYXNlKCk7Cit9CisKK2NsYXNzIENDRGFtYWdlVHJh
Y2tlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citwcml2YXRlOgorICAgIC8vIEZvciB0
ZXN0aW5nIHB1cnBvc2VzLCBmYWtlIHRoYXQgd2UgYXJlIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2V0SW1wbFRocmVhZDsKK307CisKK1RFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCBzYW5pdHlDaGVja1Rlc3RUcmVlV2l0aE9uZVN1cmZhY2UpCit7
CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHNpbXBsZSB0ZXN0IHRyZWUgd2lsbCBhY3R1
YWxseSBwcm9kdWNlIHRoZSBleHBlY3RlZCByZW5kZXIKKyAgICAvLyBzdXJmYWNlcyBhbmQgbGF5
ZXIgbGlzdHMuCisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRV
cFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDIpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlk
KCkpOworICAgIEVYUEVDVF9FUSgyLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
WzFdLT5pZCgpKTsKKworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCA1MDAsIDUwMCksIHJvb3REYW1hZ2VS
ZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHNhbml0eUNoZWNrVGVzdFRy
ZWVXaXRoVHdvU3VyZmFjZXMpCit7CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGNvbXBs
ZXggdGVzdCB0cmVlIHdpbGwgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVuZGVyCisg
ICAgLy8gc3VyZmFjZXMgYW5kIGxheWVyIGxpc3RzLgorCisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXTsKKyAgICBGbG9h
dFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKworICAgIEFTU0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNoaWxkMS0+
cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gVGhlIHJlbmRl
ciBzdXJmYWNlIGZvciBjaGlsZDEgb25seSBoYXMgYSBjb250ZW50UmVjdCB0aGF0IGVuY2xvc2Vz
IGdyYW5kQ2hpbGQxIGFuZCBncmFuZENoaWxkMiwgYmVjYXVzZSBjaGlsZDEgZG9lcyBub3QgZHJh
dyBjb250ZW50LgorICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxOTAsIDE5MCwg
MTYsIDE4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMCwgMCwgNTAwLCA1MDApLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZh
Y2UoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XTsKKworICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hvdWxkIGNhdXNl
IHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KKyAgICAvLworICAgIGNo
aWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMCwgMTEsIDEyLCAxMykpOworICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBEYW1hZ2UgcG9zaXRpb24g
b24gdGhlIHN1cmZhY2Ugc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgxMCwgMTEp
IHJlbGF0aXZlIHRvIHRoZSBjaGlsZCAoMTAwLCAxMDApLgorICAgIEZsb2F0UmVjdCByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMTAsIDEx
MSwgMTIsIDEzKSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBUaGUgc2FtZSB1
cGRhdGUgcmVjdCB0d2ljZSBpbiBhIHJvdyBzdGlsbCBwcm9kdWNlcyB0aGUgc2FtZSBkYW1hZ2Uu
CisgICAgLy8KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxMiwg
MTMpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMCwg
MTExLCAxMiwgMTMpLCByb290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDM6IFNldHRpbmcg
YSBkaWZmZXJlbnQgdXBkYXRlIHJlY3Qgc2hvdWxkIGNhdXNlIGRhbWFnZSBvbiB0aGUgbmV3IHVw
ZGF0ZSByZWdpb24sIGJ1dCBubyBhZGRpdGlvbmFsIGV4cG9zZWQgb2xkIHJlZ2lvbi4KKyAgICAv
LworICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMCwgMjUsIDEsIDIpKTsKKyAg
ICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gRGFtYWdlIHBv
c2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNob3VsZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAo
MjAsIDI1KSByZWxhdGl2ZSB0byB0aGUgY2hpbGQgKDEwMCwgMTAwKS4KKyAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMjAsIDEyNSwg
MSwgMiksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIC8v
IENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkgY2hhbmdlZCBmbGFnIHRha2VzIHByaW9yaXR5
IG92ZXIgdXBkYXRlIHJlY3QuCisgICAgLy8KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9h
dFJlY3QoMTAsIDExLCAxMiwgMTMpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hl
Y2sgLSB3ZSBzaG91bGQgbm90IGhhdmUgYWNjaWRlbnRhbGx5IGNyZWF0ZWQgYSBzZXBhcmF0ZSBy
ZW5kZXIgc3VyZmFjZSBmb3IgdGhlIHRyYW5zbHVjZW50IGxheWVyLgorICAgIEFTU0VSVF9GQUxT
RShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigyKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisg
ICAgLy8gRGFtYWdlIHNob3VsZCBiZSB0aGUgZW50aXJlIGNoaWxkIGxheWVyIGluIHRhcmdldFN1
cmZhY2Ugc3BhY2UuCisgICAgRmxvYXRSZWN0IGV4cGVjdGVkUmVjdCA9IEZsb2F0UmVjdCgxMDAs
IDEwMCwgMzAsIDMwKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZFJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKKworICAg
IC8vIENBU0UgMjogSWYgYSBsYXllciBtb3ZlcyBkdWUgdG8gcHJvcGVydHkgY2hhbmdlLCBpdCBk
YW1hZ2VzIGJvdGggdGhlIG5ldyBsb2NhdGlvbgorICAgIC8vICAgICAgICAgYW5kIHRoZSBvbGQg
KGV4cG9zZWQpIGxvY2F0aW9uLiBUaGUgb2xkIGxvY2F0aW9uIGlzIHRoZSBlbnRpcmUgb2xkIGxh
eWVyLAorICAgIC8vICAgICAgICAgbm90IGp1c3QgdGhlIHVwZGF0ZVJlY3QuCisKKyAgICAvLyBD
eWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBqdXN0IHRvIHNhbml0eSBjaGVjayB0aGF0IHRo
ZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2YgdGhlIG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKS5p
c0VtcHR5KCkpOworCisgICAgLy8gVGhlbiwgdGVzdCB0aGUgYWN0dWFsIGxheWVyIG1vdmVtZW50
LgorICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDIwMCwgMjMwKSk7CisgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIEV4cGVjdCBkYW1hZ2Ug
dG8gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91cyBvbmUgYW5kIHRoZSBuZXcgb25l
LgorICAgIGV4cGVjdGVkUmVjdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoMjAwLCAyMzAsIDMw
LCAzMCkpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoZXhwZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRy
YWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JUcmFuc2Zvcm1lZExheWVyKQoreworICAgIC8vIElm
IGEgbGF5ZXIgaXMgdHJhbnNmb3JtZWQsIHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgc3RpbGwgZW5j
bG9zZSB0aGUgZW50aXJlCisgICAgLy8gdHJhbnNmb3JtZWQgbGF5ZXIuCisKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2Uo
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uOworICAgIHJvdGF0aW9uLnJvdGF0
ZSg0NSk7CisKKyAgICAvLyBOb3RlIGNhcmVmdWxseSwgdGhlIGFuY2hvciBpcyBhY3R1YWxseSBw
YXJ0IG9mIGxheWVyLT5wb3NpdGlvbigpLiBCeSBzZXR0aW5nIGFuY2hvcgorICAgIC8vIHRvICgw
LjUsIDAuNSksIHRoZSBsYXllcidzIHBvc2l0aW9uICgxMDAsIDEwMCkgbm93IHJlZmVycyB0byB0
aGUgY2VudGVyIG9mIHRoZQorICAgIC8vIGxheWVyLCBub3QgdGhlIGNvcm5lci4gVGhpcyBtZWFu
cyB0aGUgbGF5ZXIgaGFzIGFjdHVhbGx5IGNoYW5nZWQgcG9zaXRpb24uCisgICAgY2hpbGQtPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41LCAwLjUpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGxheWVy
IGFjdHVhbGx5IG1vdmVkIHRvICg4NSwgODUpLCBkYW1hZ2luZyBpdHMgb2xkIGxvY2F0aW9uIGFu
ZCBuZXcgbG9jYXRpb24uCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDg1LCA4NSwgNDUsIDQ1KSwgcm9vdERhbWFn
ZVJlY3QpOworCisgICAgLy8gV2l0aCB0aGUgYW5jaG9yIG9uIHRoZSBsYXllcidzIGNlbnRlciwg
bm93IHdlIGNhbiB0ZXN0IHRoZSByb3RhdGlvbiBtb3JlCisgICAgLy8gaW50dWl0aXZlbHksIHNp
bmNlIGl0IGFwcGxpZXMgYWJvdXQgdGhlIGxheWVyJ3MgYW5jaG9yLgorICAgIGNoaWxkLT5zZXRU
cmFuc2Zvcm0ocm90YXRpb24pOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CisKKyAgICAvLyBTaW5jZSB0aGUgY2hpbGQgbGF5ZXIgaXMgc3F1YXJlLCByb3RhdGlvbiBi
eSA0NSBkZWdyZWVzIGFib3V0IHRoZSBjZW50ZXIgc2hvdWxkCisgICAgLy8gaW5jcmVhc2UgdGhl
IHNpemUgb2YgdGhlIGV4cGVjdGVkIHJlY3QgYnkgc3FydCgyKSwgY2VudGVyZWQgYXJvdW5kICgx
MDAsIDEwMCkuIFRoZQorICAgIC8vIG9sZCBleHBvc2VkIHJlZ2lvbiBzaG91bGQgYmUgZnVsbHkg
Y29udGFpbmVkIGluIHRoZSBuZXcgcmVnaW9uLgorICAgIGRvdWJsZSBleHBlY3RlZFdpZHRoID0g
MzAuMCAqIHNxcnQoMi4wKTsKKyAgICBkb3VibGUgZXhwZWN0ZWRQb3NpdGlvbiA9IDEwMC4wIC0g
MC41ICogZXhwZWN0ZWRXaWR0aDsKKyAgICBGbG9hdFJlY3QgZXhwZWN0ZWRSZWN0KGV4cGVjdGVk
UG9zaXRpb24sIGV4cGVjdGVkUG9zaXRpb24sIGV4cGVjdGVkV2lkdGgsIGV4cGVjdGVkV2lkdGgp
OworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZXhw
ZWN0ZWRSZWN0LCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJU
ZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ0xheWVyKQoreworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFj
ZSgpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgzKTsKKyAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKKyAg
ICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQy
LT5zZXRCb3VuZHMoSW50U2l6ZSg2LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisKKyAgICAvLyBDQVNFIDE6IEFkZGluZyBhIG5ldyBsYXllciBzaG91bGQgY2F1c2Ug
dGhlIGFwcHJvcHJpYXRlIGRhbWFnZS4KKyAgICAvLworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
Mik7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNh
bml0eSBjaGVjayAtIGFsbCAzIGxheWVycyBzaG91bGQgYmUgb24gdGhlIHNhbWUgcmVuZGVyIHN1
cmZhY2U7IHJlbmRlciBzdXJmYWNlcyBhcmUgdGVzdGVkIGVsc2V3aGVyZS4KKyAgICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxp
c3QoKS5zaXplKCkpOworCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDQwMCwgMzgwLCA2LCA4KSwgcm9vdERhbWFn
ZVJlY3QpOworCisgICAgLy8gQ0FTRSAyOiBJZiB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCwgaXRzIGVu
dGlyZSBvbGQgbGF5ZXIgYmVjb21lcyBleHBvc2VkLCBub3QganVzdCB0aGUKKyAgICAvLyAgICAg
ICAgIGxhc3QgdXBkYXRlIHJlY3QuCisKKyAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0
IGRhbWFnZSBzbyB0aGF0IHdlIGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBm
cm9tIHRoZSBwcmV2aW91cyBjYXNlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZW4sIHRl
c3QgcmVtb3ZpbmcgY2hpbGQxLgorICAgIGNoaWxkMS0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAg
IGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAwLCAxMDAsIDMwLCAz
MCksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvck11bHRpcGxlTGF5ZXJzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBjaGls
ZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKKyAgICBjaGlsZDItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgY2hpbGQyLT5zZXRCb3VuZHMoSW50
U2l6ZSg2LCA4KSk7CisgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCB3ZSBkb24ndCB3YW50
IHRoZSBhYm92ZSB0cmVlIG1hbmlwdWxhdGlvbiB0byBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhl
IHNhbWUgZnJhbWUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKwor
ICAgIC8vIERhbWFnaW5nIHR3byBsYXllcnMgc2ltdWx0YW5lb3VzbHkgc2hvdWxkIGNhdXNlIGNv
bWJpbmVkIGRhbWFnZS4KKyAgICAvLyAtIGNoaWxkMSB1cGRhdGUgcmVjdCBpbiBzdXJmYWNlIHNw
YWNlOiBGbG9hdFJlY3QoMTAwLCAxMDAsIDEsIDIpOworICAgIC8vIC0gY2hpbGQyIHVwZGF0ZSBy
ZWN0IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCg0MDAsIDM4MCwgMywgNCk7CisgICAgY2hp
bGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAyKSk7CisgICAgY2hpbGQyLT5z
ZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAzLCA0KSk7CisgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAwLCAxMDAsIDMwMywgMjg0KSwg
cm9vdERhbWFnZVJlY3QpOworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5
RGFtYWdlRm9yTmVzdGVkU3VyZmFjZXMpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV07CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF07
CisgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFn
ZVJlY3Q7CisKKyAgICAvLyBDQVNFIDE6IERhbWFnZSB0byBhIGRlc2NlbmRhbnQgc3VyZmFjZSBz
aG91bGQgcHJvcGFnYXRlIHByb3Blcmx5IHRvIGFuY2VzdG9yIHN1cmZhY2UuCisgICAgLy8KKyAg
ICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFt
YWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyMDAsIDIw
MCwgNiwgOCksIGNoaWxkRGFtYWdlUmVjdCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDMwMCwgMzAwLCA2LCA4KSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAy
OiBTYW1lIGFzIHByZXZpb3VzIGNhc2UsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgZGFtYWdlIGVsc2V3
aGVyZSB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSB1bmlvbmVkLgorICAgIC8vIC0gY2hpbGQxIHN1
cmZhY2UgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDMwMCwgMzAwLCA2
LCA4KTsKKyAgICAvLyAtIGNoaWxkMiBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBGbG9h
dFJlY3QoMTEsIDExLCAxOCwgMTgpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNyk7
CisgICAgY2hpbGQyLT5zZXRPcGFjaXR5KDAuNyk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDIwMCwgMjAw
LCA2LCA4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMTEsIDExLCAyOTUsIDI5NyksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tRGVzY2Vu
ZGFudExheWVyKQoreworICAgIC8vIElmIGRlc2NlbmRhbnQgbGF5ZXIgY2hhbmdlcyBhbmQgYWZm
ZWN0cyB0aGUgY29udGVudCBib3VuZHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlLAorICAgIC8vIHRo
ZW4gdGhlIGVudGlyZSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxkIGJlIGRhbWFnZWQsIGFuZCBp
dCBzaG91bGQgZGFtYWdlIGl0cworICAgIC8vIGFuY2VzdG9yIHN1cmZhY2Ugd2l0aCB0aGUgb2xk
IGFuZCBuZXcgc3VyZmFjZSByZWdpb25zLgorCisgICAgLy8gVGhpcyBpcyBhIHRyaWNreSBjYXNl
LCBzaW5jZSBvbmx5IHRoZSBmaXJzdCBncmFuZENoaWxkIGNoYW5nZXMsIGJ1dCB0aGUgZW50aXJl
CisgICAgLy8gc3VyZmFjZSBzaG91bGQgYmUgbWFya2VkIGRpcnR5LgorCisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XS0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZs
b2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIGdyYW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDE5NSwgMjA1KSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisKKyAgICAvLyBUaGUgbmV3IHN1cmZhY2UgYm91bmRzIHNob3VsZCBiZSBkYW1hZ2VkIGVu
dGlyZWx5LCBldmVuIHRob3VnaCBvbmx5IG9uZSBvZiB0aGUgbGF5ZXJzIGNoYW5nZWQuCisgICAg
RVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5MCwgMTkwLCAxMSwgMjMpLCBjaGlsZERh
bWFnZVJlY3QpOworCisgICAgLy8gRGFtYWdlIHRvIHRoZSByb290IHN1cmZhY2Ugc2hvdWxkIGJl
IHRoZSB1bmlvbiBvZiBjaGlsZDEncyAqZW50aXJlKiByZW5kZXIgc3VyZmFjZQorICAgIC8vIChp
biB0YXJnZXQgc3BhY2UpLCBhbmQgaXRzIG9sZCBleHBvc2VkIGFyZWEgKGFsc28gaW4gdGFyZ2V0
IHNwYWNlKS4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMjkwLCAyOTAsIDE2
LCAyMyksIHJvb3REYW1hZ2VSZWN0KTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tQW5jZXN0b3JMYXllcikKK3sKKyAgICAv
LyBBbiBhbmNlc3Rvci9vd25pbmcgbGF5ZXIgY2hhbmdlcyB0aGF0IGFmZmVjdHMgdGhlIHBvc2l0
aW9uL3RyYW5zZm9ybSBvZiB0aGUgcmVuZGVyCisgICAgLy8gc3VyZmFjZS4gTm90ZSB0aGF0IGlu
IHRoaXMgY2FzZSwgdGhlIGxheWVyUHJvcGVydHlDaGFuZ2VkIGZsYWcgYWxyZWFkeSBwcm9wYWdh
dGVzCisgICAgLy8gdG8gdGhlIHN1YnRyZWUgKHRlc3RlZCBpbiBDQ0xheWVySW1wbHRlc3QpLCB3
aGljaCBkYW1hZ2VzIHRoZSBlbnRpcmUgY2hpbGQxCisgICAgLy8gc3VyZmFjZSwgYnV0IHRoZSBk
YW1hZ2UgdHJhY2tlciBzdGlsbCBuZWVkcyB0aGUgY29ycmVjdCBsb2dpYyB0byBjb21wdXRlIHRo
ZQorICAgIC8vIGV4cG9zZWQgcmVnaW9uIG9uIHRoZSByb290IHN1cmZhY2UuCisKKyAgICAvLyBG
SVhNRTogdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGlzIHRlc3QgY2FzZSBzaG91bGQgY2hhbmdlIHdo
ZW4gd2UgYWRkIHN1cHBvcnQgZm9yIGEKKyAgICAvLyAgICAgICAgdW5pcXVlIHNjaXNzb3JSZWN0
IHBlciByZW5kZXJTdXJmYWNlLiBJbiB0aGF0IGNhc2UsIHRoZSBjaGlsZDEgc3VyZmFjZQorICAg
IC8vICAgICAgICBzaG91bGQgYmUgY29tcGxldGVseSB1bmNoYW5nZWQsIHNpbmNlIHdlIGFyZSBv
bmx5IHRyYW5zZm9ybWluZyBpdCwgd2hpbGUgdGhlCisgICAgLy8gICAgICAgIHJvb3Qgc3VyZmFj
ZSB3b3VsZCBiZSBkYW1hZ2VkIGFwcHJvcHJpYXRlbHkuCisKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGls
ZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0
IHJvb3REYW1hZ2VSZWN0OworCisgICAgY2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDUw
LCA1MCkpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hp
bGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8g
VGhlIG5ldyBzdXJmYWNlIGJvdW5kcyBzaG91bGQgYmUgZGFtYWdlZCBlbnRpcmVseS4KKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTkwLCAxOTAsIDE2LCAxOCksIGNoaWxkRGFt
YWdlUmVjdCk7CisKKyAgICAvLyBUaGUgZW50aXJlIGNoaWxkMSBzdXJmYWNlIGFuZCB0aGUgb2xk
IGV4cG9zZWQgY2hpbGQxIHN1cmZhY2Ugc2hvdWxkIGRhbWFnZSB0aGUgcm9vdCBzdXJmYWNlLgor
ICAgIC8vICAtIG9sZCBjaGlsZDEgc3VyZmFjZSBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgy
OTAsIDI5MCwgMTYsIDE4KQorICAgIC8vICAtIG5ldyBjaGlsZDEgc3VyZmFjZSBpbiB0YXJnZXQg
c3BhY2U6IEZsb2F0UmVjdCgyNDAsIDI0MCwgMTYsIDE4KQorICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgyNDAsIDI0MCwgNjYsIDY4KSwgcm9vdERhbWFnZVJlY3QpOworfQorCitU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3Zp
bmdSZW5kZXJTdXJmYWNlcykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdOworICAgIEZsb2F0UmVjdCBjaGlsZERh
bWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgLy8gQ0FTRSAx
OiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBkaXNhcHBlYXJzLCBpdHMgZW50aXJlIG9sZCBhcmVh
IGJlY29tZXMgZXhwb3NlZC4KKyAgICAvLworICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgxKTsKKyAg
ICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNo
ZWNrIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgc3VyZmFjZSBub3cuCisgICAgQVNTRVJUX0ZBTFNF
KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90Pig0KSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisg
ICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJl
Y3QoMjkwLCAyOTAsIDE2LCAxOCksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjog
SWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBiZWNv
bWVzIGV4cG9zZWQuCisKKyAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBqdXN0
IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2YgdGhl
IG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VS
ZWN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGVuIGNoYW5nZSB0aGUgdHJlZSBzbyB0aGF0IHRo
ZSByZW5kZXIgc3VyZmFjZSBpcyBhZGRlZCBiYWNrLgorICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgw
LjUpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBT
YW5pdHkgY2hlY2sgdGhhdCB0aGVyZSBpcyBhIG5ldyBzdXJmYWNlIG5vdy4KKyAgICBBU1NFUlRf
VFJVRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oMyksIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDE5MCwgMTkwLCAxNiwgMTgpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgyOTAsIDI5MCwgMTYsIDE4KSwgcm9vdERhbWFnZVJlY3Qp
OworfQorCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VXaGVuTm90
aGluZ0NoYW5nZWQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5k
U2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VS
ZWN0OworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgIC8vIENBU0UgMTogSWYg
bm90aGluZyBjaGFuZ2VzLCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxkIGJlIGVtcHR5LgorICAgIC8v
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUo
Y2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJl
Y3QuaXNFbXB0eSgpKTsKKworICAgIC8vIENBU0UgMjogSWYgbm90aGluZyBjaGFuZ2VzIHR3aWNl
IGluIGEgcm93LCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxkIHN0aWxsIGJlIGVtcHR5LgorICAgIC8v
CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUo
Y2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJl
Y3QuaXNFbXB0eSgpKTsKK30KKworVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeU5v
RGFtYWdlRm9yVXBkYXRlUmVjdFRoYXREb2VzTm90RHJhd0NvbnRlbnQpCit7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNl
cygpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XTsKKyAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCByb290RGFt
YWdlUmVjdDsKKworICAgIC8vIEluIG91ciBzcGVjaWZpYyB0cmVlLCB0aGUgdXBkYXRlIHJlY3Qg
b2YgY2hpbGQxIHNob3VsZCBub3QgY2F1c2UgYW55IGRhbWFnZSB0byBhbnkKKyAgICAvLyBzdXJm
YWNlIGJlY2F1c2UgaXQgZG9lcyBub3QgYWN0dWFsbHkgZHJhdyBjb250ZW50LgorICAgIGNoaWxk
MS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMikpOworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9
CisKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhKQor
eworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVX
aXRoVHdvU3VyZmFjZXMoKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IHJvb3Qt
PmNoaWxkcmVuKClbMF07CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IGNo
aWxkMS0+Y2hpbGRyZW4oKVswXTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQy
ID0gY2hpbGQxLT5jaGlsZHJlbigpWzFdOworCisgICAgLy8gRGFtYWdlIG9uIGEgc3VyZmFjZSB0
aGF0IGhhcyBhIHJlZmxlY3Rpb24gc2hvdWxkIGNhdXNlIHRoZSB0YXJnZXQgc3VyZmFjZSB0bwor
ICAgIC8vIHJlY2VpdmUgdGhlIHN1cmZhY2UncyBkYW1hZ2UgYW5kIHRoZSBzdXJmYWNlJ3MgcmVm
bGVjdGVkIGRhbWFnZS4KKworICAgIC8vIEZvciB0aGlzIHRlc3QgY2FzZSwgd2UgbW9kaWZ5IGdy
YW5kQ2hpbGQyLCBhbmQgYWRkIGdyYW5kQ2hpbGQzIHRvIGV4dGVuZCB0aGUgYm91bmRzCisgICAg
Ly8gb2YgY2hpbGQxJ3Mgc3VyZmFjZS4gVGhpcyB3YXksIHdlIGNhbiB0ZXN0IHJlZmxlY3Rpb24g
Y2hhbmdlcyB3aXRob3V0IGNoYW5naW5nCisgICAgLy8gY29udGVudEJvdW5kcyBvZiB0aGUgc3Vy
ZmFjZS4KKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxODAsIDE4MCkp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDMgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDYpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDI0MCwgMjQw
KSk7CisgICAgZ3JhbmRDaGlsZDMtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7
CisgICAgZ3JhbmRDaGlsZDMtPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgIGdyYW5k
Q2hpbGQzLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDAu
NSk7CisgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMyk7CisgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIENBU0UgMTogYWRkaW5nIGEgcmVmbGVj
dGlvbiBhYm91dCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hpbGQxLgorICAgIC8vCisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDcpOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVy
bygpKTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6
Onplcm8oKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlvbjsKKyAgICByZWZs
ZWN0aW9uLnNjYWxlM2QoLTEuMCwgMS4wLCAxLjApOworICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+
c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOworICAgIGdyYW5kQ2hpbGQxLT5zZXRSZXBsaWNhTGF5
ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOworCisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OworICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEZsb2F0UmVjdCBy
b290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgLy8gVGhlIGdyYW5kQ2hpbGQgc3VyZmFjZSBkYW1h
Z2Ugc2hvdWxkIG5vdCBpbmNsdWRlIGl0cyBvd24gcmVwbGljYS4gVGhlIGNoaWxkCisgICAgLy8g
c3VyZmFjZSBkYW1hZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIG5vcm1hbCBhbmQgcmVwbGljYSBzdXJm
YWNlcy4KKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwgNiwgOCksIGdy
YW5kQ2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3Qo
MTk0LCAyMDAsIDEyLCA4KSwgY2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMjk0LCAzMDAsIDEyLCA4KSwgcm9vdERhbWFnZVJlY3QpOworCisgICAg
Ly8gQ0FTRSAyOiBtb3ZpbmcgdGhlIGRlc2NlbmRhbnQgc3VyZmFjZSBzaG91bGQgY2F1c2UgYm90
aCB0aGUgb3JpZ2luYWwgYW5kIHJlZmxlY3RlZAorICAgIC8vICAgICAgICAgYXJlYXMgdG8gYmUg
ZGFtYWdlZCBvbiB0aGUgdGFyZ2V0LgorICAgIEludFJlY3Qgb2xkQ29udGVudFJlY3QgPSBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKKyAgICBncmFuZENoaWxkMS0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgxOTUuMCwgMjA1LjApKTsKKyAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC53aWR0aCgp
LCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS53aWR0aCgpKTsKKyAgICBB
U1NFUlRfRVEob2xkQ29udGVudFJlY3QuaGVpZ2h0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5jb250ZW50UmVjdCgpLmhlaWdodCgpKTsKKworICAgIGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0g
Z3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKworICAgIC8vIFRoZSBjaGlsZCBzdXJmYWNlIGRhbWFnZSBzaG91bGQgaW5jbHVk
ZSBub3JtYWwgYW5kIHJlcGxpY2Egc3VyZmFjZXMgZm9yIGJvdGggb2xkIGFuZCBuZXcgbG9jYXRp
b25zLgorICAgIC8vICAtIG9sZCBsb2NhdGlvbiBpbiB0YXJnZXQgc3BhY2U6IEZsb2F0UmVjdCgx
OTQsIDIwMCwgMTIsIDgpCisgICAgLy8gIC0gbmV3IGxvY2F0aW9uIGluIHRhcmdldCBzcGFjZTog
RmxvYXRSZWN0KDE4OSwgMjA1LCAxMiwgOCkKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9h
dFJlY3QoMCwgMCwgNiwgOCksIGdyYW5kQ2hpbGREYW1hZ2VSZWN0KTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTg5LCAyMDAsIDE3LCAxMyksIGNoaWxkRGFtYWdlUmVjdCk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDI4OSwgMzAwLCAxNywgMTMpLCBy
b290RGFtYWdlUmVjdCk7CisKKyAgICAvLyBDQVNFIDM6IHJlbW92aW5nIHRoZSByZWZsZWN0aW9u
IHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIHJlZ2lvbiBpbmNsdWRpbmcgcmVmbGVjdGlvbgorICAg
IC8vICAgICAgICAgdG8gZGFtYWdlIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBncmFuZENoaWxk
MS0+c2V0UmVwbGljYUxheWVyKDApOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0LndpZHRoKCksIGNoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLndpZHRoKCkpOworICAgIEFTU0VSVF9FUShvbGRD
b250ZW50UmVjdC5oZWlnaHQoKSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0
KCkuaGVpZ2h0KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgcm9vdERhbWFnZVJlY3Qg
PSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKKworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxODksIDIwNSwgMTIs
IDgpLCBjaGlsZERhbWFnZVJlY3QpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVj
dCgyODksIDMwNSwgMTIsIDgpLCByb290RGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNYXNrKQoreworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdOworCisgICAg
Ly8gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRhbWFnZSB0cmFja2VyLCBj
aGFuZ2VzIHRvIG1hc2sgbGF5ZXJzIHNob3VsZAorICAgIC8vIGRhbWFnZSB0aGUgZW50aXJlIGNv
cnJlc3BvbmRpbmcgc3VyZmFjZS4KKworICAgIC8vIFNldCB1cCB0aGUgbWFzayBsYXllci4KKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1hc2tMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
CisgICAgbWFza0xheWVyLT5zZXRQb3NpdGlvbihjaGlsZC0+cG9zaXRpb24oKSk7CisgICAgbWFz
a0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIG1hc2tMYXll
ci0+c2V0Qm91bmRzKGNoaWxkLT5ib3VuZHMoKSk7CisgICAgY2hpbGQtPnNldE1hc2tMYXllciht
YXNrTGF5ZXIpOworCisgICAgLy8gQWRkIG9wYWNpdHkgYW5kIGEgZ3JhbmRDaGlsZCBzbyB0aGF0
IHRoZSByZW5kZXIgc3VyZmFjZSBwZXJzaXN0cyBldmVuIGFmdGVyIHdlIHJlbW92ZSB0aGUgbWFz
ay4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
Z3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgyLjAsIDIuMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKElu
dFNpemUoMiwgMikpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IGEgbmV3IHN1cmZhY2Ug
d2FzIGNyZWF0ZWQgZm9yIHRoZSBjaGlsZC4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIC8vIENBU0UgMTogdGhlIHVwZGF0ZVJlY3Qgb24gYSBtYXNrIGxh
eWVyIHNob3VsZCBkYW1hZ2UgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworICAg
IG1hc2tMYXllci0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMSwgMiwgMywgNCkpOworICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgRmxvYXRSZWN0IGNoaWxkRGFt
YWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwg
MzAsIDMwKSwgY2hpbGREYW1hZ2VSZWN0KTsKKworICAgIC8vIENBU0UgMjogYSBwcm9wZXJ0eSBj
aGFuZ2Ugb24gdGhlIG1hc2sgbGF5ZXIgc2hvdWxkIGRhbWFnZSB0aGUgZW50aXJlIHRhcmdldCBz
dXJmYWNlLgorICAgIC8vCisKKyAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0IGRhbWFn
ZSBzbyB0aGF0IHdlIGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9tIHRo
ZSBwcmV2aW91cyBjYXNlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdl
UmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiB0ZXN0IHRoZSBwcm9wZXJ0eSBjaGFuZ2Uu
CisgICAgbWFza0xheWVyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVG
cmFtZShyb290LmdldCgpKTsKKyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDMwLCAzMCksIGNoaWxkRGFtYWdlUmVjdCk7
CisKKyAgICAvLyBDQVNFIDM6IHJlbW92aW5nIHRoZSBtYXNrIGFsc28gZGFtYWdlcyB0aGUgZW50
aXJlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vCisKKyAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3
aXRob3V0IGRhbWFnZSBzbyB0aGF0IHdlIGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0
b3ZlciBmcm9tIHRoZSBwcmV2aW91cyBjYXNlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CisgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9UUlVF
KGNoaWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOworCisgICAgLy8gVGhlbiB0ZXN0IG1hc2sgcmVt
b3ZhbC4KKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKDApOworICAgIEFTU0VSVF9UUlVFKGNoaWxk
LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYSByZW5kZXIgc3VyZmFjZSBz
dGlsbCBleGlzdHMuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisK
KyAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDAsIDAsIDMwLCAzMCksIGNoaWxkRGFtYWdlUmVjdCk7Cit9CisKK1RFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhTWFzaykKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZh
Y2VzKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigp
WzBdOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxk
cmVuKClbMF07CisKKyAgICAvLyBDaGFuZ2VzIHRvIGEgcmVwbGljYSdzIG1hc2sgc2hvdWxkIG5v
dCBkYW1hZ2UgdGhlIG9yaWdpbmFsIHN1cmZhY2UsIGJlY2F1c2UgaXQgaXMKKyAgICAvLyBub3Qg
bWFza2VkLiBCdXQgaXQgZG9lcyBkYW1hZ2UgdGhlIGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlLgor
CisgICAgLy8gQ3JlYXRlIGEgcmVmbGVjdGlvbiBhYm91dCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5k
Q2hpbGQxLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NM
YXllckltcGw6OmNyZWF0ZSg2KTsKKyAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlZmxl
Y3Rpb247CisgICAgcmVmbGVjdGlvbi5zY2FsZTNkKC0xLjAsIDEuMCwgMS4wKTsKKyAgICBncmFu
ZENoaWxkMVJlcGxpY2EtPnNldFRyYW5zZm9ybShyZWZsZWN0aW9uKTsKKyAgICBncmFuZENoaWxk
MS0+c2V0UmVwbGljYUxheWVyKGdyYW5kQ2hpbGQxUmVwbGljYSk7CisKKyAgICAvLyBTZXQgdXAg
dGhlIG1hc2sgbGF5ZXIgb24gdGhlIHJlcGxpY2EgbGF5ZXIKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJlcGxpY2FNYXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDcpOworICAgIHJlcGxp
Y2FNYXNrTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CisgICAgcmVwbGlj
YU1hc2tMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKKyAgICByZXBs
aWNhTWFza0xheWVyLT5zZXRCb3VuZHMoZ3JhbmRDaGlsZDEtPmJvdW5kcygpKTsKKyAgICBncmFu
ZENoaWxkMVJlcGxpY2EtPnNldE1hc2tMYXllcihyZXBsaWNhTWFza0xheWVyKTsKKworICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sg
dGhhdCB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzIHdlcmUgY3JlYXRlZAorICAgIEFT
U0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gQ0FTRSAx
OiBhIHByb3BlcnR5IGNoYW5nZSBvbiB0aGUgbWFzayBzaG91bGQgZGFtYWdlIG9ubHkgdGhlIHJl
ZmxlY3RlZCByZWdpb24gb24gdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIHJlcGxpY2FNYXNrTGF5
ZXItPnNldE9wYWNpdHkoMC42KTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0
KCkpOworCisgICAgRmxvYXRSZWN0IGdyYW5kQ2hpbGREYW1hZ2VSZWN0ID0gZ3JhbmRDaGlsZDEt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
ICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+
ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgRVhQRUNUX1RSVUUo
Z3JhbmRDaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShGbG9hdFJlY3QoMTk0LCAyMDAsIDYsIDgpLCBjaGlsZERhbWFnZVJlY3QpOworCisgICAgLy8g
Q0FTRSAyOiByZW1vdmluZyB0aGUgcmVwbGljYSBtYXNrIGRhbWFnZXMgb25seSB0aGUgcmVmbGVj
dGVkIHJlZ2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8KKyAgICBncmFuZENoaWxk
MVJlcGxpY2EtPnNldE1hc2tMYXllcigwKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOworCisgICAgZ3JhbmRDaGlsZERhbWFnZVJlY3QgPSBncmFuZENoaWxkMS0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAg
Y2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGREYW1h
Z2VSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDE5
NCwgMjAwLCA2LCA4KSwgY2hpbGREYW1hZ2VSZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAppbmRl
eCA5NDJiZWMyZjcxM2EyODQ1MjFiYWE5NDNlY2NjNDRlMjBiOGFjNWZmLi44OTA1MDUwZTY2NzM5
MzI2NWI5NGM5ZmIyZjU1YTNkYTliM2YxZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgewogCiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZF
UklGWV9TVUJUUkVFX0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAgICAgICAgICAgICBcCi0gICAg
cm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQ
RUNUX1RSVUUocm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZC0+
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkKIAogI2RlZmluZSBFWEVDVVRFX0FORF9WRVJJRllfU1VC
VFJFRV9ESURfTk9UX0NIQU5HRShjb2RlVG9UZXN0KSAgICAgICAgICAgXAotICAgIHJvb3QtPnJl
c2V0UHJvcGVydHlDaGFuZ2VkRmxhZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxT
RShyb290LT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkLT5sYXllclBy
b3BlcnR5Q2hhbmdlZCgpKQogCiAjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9PTkxZX0xBWUVS
X0NIQU5HRUQoY29kZVRvVGVzdCkgICAgICAgICAgICAgICBcCi0gICAgcm9vdC0+cmVzZXRQcm9w
ZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcm9vdC0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgY29kZVRvVGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX1RSVUUocm9vdC0+
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
RVhQRUNUX0ZBTFNFKGNoaWxkLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKTsgICAgICAgICAgICAg
ICAgICAgICAgICBcCkBAIC0xMTUsNyArMTE1LDcgQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZl
cmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfT05MWV9MQVlFUl9DSEFOR0VEKHJvb3QtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6Z3Jh
eSkpOwogCiAgICAgLy8gU3BlY2lhbCBjYXNlOiBjaGVjayB0aGF0IHN1YmxheWVyIHRyYW5zZm9y
bSBjaGFuZ2VzIGFsbCBsYXllcidzIGRlc2NlbmRhbnRzLCBidXQgbm90IHRoZSBsYXllciBpdHNl
bGYuCi0gICAgcm9vdC0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAg
IHJvb3QtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAgICAgcm9vdC0+c2V0
U3VibGF5ZXJUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKTsKICAgICBFWFBFQ1RfRkFMU0Uo
cm9vdC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY2hpbGQtPmxh
eWVyUHJvcGVydHlDaGFuZ2VkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggYzlhMmZjNjUx
MzI1NjZiNDI2M2EwMDY4OGY1N2MzZjUyN2IxNjFiMi4uODNhNDRlY2FhMGZiMjIwN2U1MTIzM2Vk
NDFmYTZhOGZlNDZhMjIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKIAorI2luY2x1ZGUgIkND
TGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zNiwyNyArMzcsNiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotLy8gVGhpcyBpcyBhIG1hY3JvIGlu
c3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUgdXMg
dXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QuCi0vLyBFdmVuIHRo
b3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJlIG1h
bnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQotLy8gb25seSBl
eHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24u
Ci0jZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwpICAg
IFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTExKCkp
OyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIo
KSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwpLm0x
MygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVhbCku
bTE0KCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0dWFs
KS5tMjEoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChhY3R1
YWwpLm0yMigpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwgKGFj
dHVhbCkubTIzKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAo
YWN0dWFsKS5tMjQoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMxKCks
IChhY3R1YWwpLm0zMSgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzIo
KSwgKGFjdHVhbCkubTMyKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0z
MygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAotICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCi0gICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKLSAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCi0KIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgbGF5ZXIt
PnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMTIwLDEyICsxMDAsMTIgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9PcExheWVyKQogCiAg
ICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBh
cmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChp
ZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShpZGVu
dGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRy
aXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJh
bnNmb3Jtc0ZvclNpbmdsZUxheWVyKQpAQCAtMTQ0LDggKzEyNCw4IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGFy
Yml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4wKTsKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgYXJiaXRyYXJ5
VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50
aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CiAKICAgICAvLyBDYXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIg
c2hvdWxkIHJlc3VsdCBpbiBhIGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBoYWxm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0LgogICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFjZSB0
cmFuc2Zvcm0gc2hvdWxkIHJlbWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9lcyBu
b3QgZGVhbCB3aXRoIHRyYW5zZm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVy
LgpAQCAtMTUzLDIyICsxMzMsMjIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgdHJhbnNsYXRpb25Ub0NlbnRlci50
cmFuc2xhdGUoNS4wLCA2LjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7
CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5n
ZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRl
ciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
aWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8v
IENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXllciB0cmFu
c2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAz
LjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7
Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNDogQSBjaGFuZ2UgaW4gImFjdHVh
bCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQgc2NyZWVuIHNw
YWNlIHRyYW5zZm9ybS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRyYW5zZm9y
bTsKICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDQu
MmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBvc2l0
aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogSW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJh
bnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJlLW11bHRpcGx5IHRoZSB0cmFu
c2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQgYnkKICAgICAvLyAgICAgICAg
IHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxlIGFuZCB0cmFuc2xhdGlvbiBh
cmUgbm90IGNvbW11dGF0aXZlLgpAQCAtMTc2LDggKzE1Niw4IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGxheWVy
VHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDEw
LCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KGxheWVyLmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXll
clRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkp
OwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtLCBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEobGF5ZXJUcmFu
c2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNjog
VGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCByZXNwZWN0IHRvIHRoZSBhbmNo
b3IgcG9pbnQuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0FuY2hvcjsK
QEAgLTE4NSw4ICsxNjUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5z
bGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBm
YWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShs
YXllci5nZXQoKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1
bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBs
YXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6IFZlcmlmeSB0
aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCiAgICAgLy8g
ICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwpAQCAtMTk0
LDggKzE3NCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25UcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRv
QW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
LmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41Ziwg
MC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwog
ICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0
KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJh
bnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVz
dWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCkBAIC0yMTYsMTAgKzE5Niwx
MCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JT
aW1wbGVIaWVyYXJjaHkpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2lu
dCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlN
YXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0
eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
aWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVy
LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOwogCiAgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3NpdGlvbiBhZmZlY3RzIGNoaWxk
IGFuZCBncmFuZENoaWxkLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFBvc2l0aW9u
VHJhbnNmb3JtOwpAQCAtMjI4LDEwICsyMDgsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
SW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4
KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQ
b3NpdGlvblRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRp
b25UcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRQb3Np
dGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwogCiAgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0cyBj
aGlsZCBhbmQgZ3JhbmRjaGlsZAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVy
VHJhbnNmb3JtOwpAQCAtMjQzLDEwICsyMjMsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
SW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4
KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3Jh
bmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDQ6IHBhcmVudCdzIHN1YmxheWVyTWF0cml4IGFm
ZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKICAgICAvLyAgICAgICAgIHNjYWxpbmcgaXMgdXNl
ZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcyBp
cyBwcm9wZXJseSB0ZXN0ZWQuCkBAIC0yNjQsMTAgKzI0NCwxMCBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSg3NiwgNzgpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFy
ZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Ci0g
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3Jt
ICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRl
VHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNo
aWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNTogc2FtZSBh
cyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJlc2VydmUgM0QsIHNvIHRoZSBncmFu
ZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRlbmVkIGNvbXBvc2l0ZSB0cmFuc2Zv
cm0uCiAgICAgLy8KQEAgLTI3NSwxMCArMjU1LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4
KSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRD
b21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwotICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3Jh
bmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCkBAIC0zMjEsMTIgKzMwMSwxMiBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVS
ZW5kZXJTdXJmYWNlKQogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgZHJhdyB0cmFuc2Zvcm0g
c2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRoZXkgb25seSBkaWZmZXIg
YnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCiAgICAgLy8gVGhlIHNjcmVlbi1zcGFjZSB0cmFu
c2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUgcm9vdC4KLSAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBj
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwogCiAgICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9yaWdpbiB0cmFuc2Zvcm0gYW5k
IGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSkgc2hvdWxkIGJlIHRoZSBz
YW1lLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwg
Y2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hp
bGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGls
ZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkpOwogCiB9CiAKQEAgLTQy
MywzOCArNDAzLDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJh
bnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgLy8gIG5vdGUgdGhhdCBkcmF3
IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG5lYXJlc3QgYW5j
ZXN0b3IgcmVuZGVyIHN1cmZhY2UKICAgICAvLyAgYnV0IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm1z
IGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290LgogICAgIC8vCi0gICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+
ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAq
IEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsK
LSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIHRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
cGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAq
IEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdU
cmFuc2Zvcm0oKSk7CiAKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlv
blRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZS
UzEtPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAq
IEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHRyYW5zbGF0
aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBj
aGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRP
ZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOwot
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRl
ciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9m
UlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwg
Z3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVmVyaWZ5IGxheWVy
IHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCiAgICAgLy8KLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIg
KiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIGNo
aWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEg
KiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwotICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMxLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChB
ICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBB
LCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOwogCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBB
ICogQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBjaGls
ZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKLSAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJT
Mi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBB
ICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSAqIEIg
KiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAK
ICAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jtcy4KICAgICAvLwogICAgIC8v
IE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNjcmliZWQgd2l0aCBy
ZXNwZWN0IHRvIHJvb3QuCi0gICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBB
LCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIHJlbmRlclN1cmZh
Y2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICAvLyBPcmlnaW4g
dHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0
byByZW5kZXIgc3VyZmFjZSAyLgotICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBB
LCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSwgcmVuZGVyU3VyZmFjZTIt
PnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gU2FuaXR5IGNo
ZWNrLiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0IGl0
c2VsZi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAgdHJh
bnNmb3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRyYW5z
Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZVRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI4M2RhY2FiYTNjZmUwMWNhY2EzYWJhNTliZjc4NzY0
YTdkZDFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ0xheWVyVHJlZVRlc3RDb21tb25faAorI2RlZmluZSBDQ0xheWVyVHJlZVRlc3RD
b21tb25faAorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCisvLyBUaGlzIGlzIGEgbWFjcm8g
aW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdo
ZXJlIGEgdGVzdCBmYWlsZWQuCisjZGVmaW5lIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVk
LCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueCgpKTsgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5s
b2NhdGlvbigpLnkoKSk7IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCku
d2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCkuaGVpZ2h0KCkpCisK
Ky8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQg
dXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gRXZlbiB0aG91Z2gg
VHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUgcHJlY2lzaW9uLCB0aGVyZSBh
cmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCB0aGF0IGFmZmVjdAorLy8g
dGhlIHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRl
IHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZpbmUgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAgICBcCisgICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgICAgICAgICAgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIoKSk7ICAgICAg
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTMoKSwgKGFjdHVhbCkubTEz
KCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChh
Y3R1YWwpLm0xNCgpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1YWwpLm0yMygpKTsgICAgICAgICAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7ICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCku
bTMxKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMyKCks
IChhY3R1YWwpLm0zMigpKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgICAgICAgICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQxKCksIChhY3R1YWwpLm00MSgpKTsgICAgICAgICAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7
ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFjdHVh
bCkubTQzKCkpOyAgICAgICAgICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQ0
KCksIChhY3R1YWwpLm00NCgpKQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gQ0NMYXll
clRyZWVUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDcwNDU0NGI2YWRiMzNkM2EwZmZhMzVlOGU3
NDJkNDM3ZGMxZWZkZmUuLmMzYjM2NmRkYTMyMzc0Njg2ODZmYmY4M2VkNGZlMzM5MGY4MmYzMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNl
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZh
Y2VUZXN0LmNwcApAQCAtNTksMTggKzU5LDE2IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwg
dmVyaWZ5U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgQVNTRVJUX1RSVUUo
b3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlID0gb3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICBJbnRSZWN0IHRl
c3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgzLCA0KSwgSW50U2l6ZSg1LCA2KSk7Ci0KLSAgICBv
d25pbmdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93
bmluZ0xheWVyLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8g
Q3VycmVudGx5LCB0aGUgY29udGVudFJlY3QsIGNsaXBSZWN0LCBhbmQgb3duaW5nTGF5ZXItPmxh
eWVyUHJvcGVydHlDaGFuZ2VkKCkgYXJlCiAgICAgLy8gdGhlIG9ubHkgc291cmNlcyBvZiBjaGFu
Z2UuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfQ0hBTkdFRChyZW5kZXJTdXJmYWNl
LT5zZXRDbGlwUmVjdCh0ZXN0UmVjdCkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNF
X0NIQU5HRUQocmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3QodGVzdFJlY3QpKTsKIAotICAg
IG93bmluZ0xheWVyLT5yZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7CiAgICAg
b3duaW5nTGF5ZXItPnNldE9wYWNpdHkoMC41Zik7CiAgICAgRVhQRUNUX1RSVUUocmVuZGVyU3Vy
ZmFjZS0+c3VyZmFjZVByb3BlcnR5Q2hhbmdlZCgpKTsKLSAgICBvd25pbmdMYXllci0+cmVzZXRQ
cm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOworICAgIG93bmluZ0xheWVyLT5yZXNldEFs
bENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCiAgICAgLy8gU2V0dGluZyB0aGUgc3VyZmFj
ZSBwcm9wZXJ0aWVzIHRvIHRoZSBzYW1lIHZhbHVlcyBhZ2FpbiBzaG91bGQgbm90IGJlIGNvbnNp
ZGVyZWQgImNoYW5nZSIuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05PVF9D
SEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QodGVzdFJlY3QpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggZWQ5
Y2VjYjk2MzY2MTlhY2QyNWU0MDIwNTkxYWRhNmQzNjNhOTMxYi4uNzgwOWQxOGE0MzY3MGQ0OGFh
Nzg2MWZiODcwNDY1NjI4NTkzZmEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDEwICsyNiwxMiBAQAogCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9u
LmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsK
IHVzaW5nIDo6dGVzdGluZzo6TW9jazsKIHVzaW5nIDo6dGVzdGluZzo6XzsKIHVzaW5nIDo6dGVz
dGluZzo6QXRMZWFzdDsKQEAgLTEzMiwxNCArMTM0LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICB2
ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOwogICAgIH0KIAotICAgIHZvaWQgdmVyaWZ5Rmxv
YXRSZWN0c0FsbW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhwZWN0ZWQsIGNvbnN0IEZsb2F0
UmVjdCYgYWN0dWFsKSBjb25zdAotICAgIHsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVj
dGVkLmxvY2F0aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54KCkpOwotICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFjdHVhbC5sb2NhdGlvbigpLnko
KSk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCkud2lkdGgoKSwgYWN0
dWFsLnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNp
emUoKS5oZWlnaHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgfQotCiAgICAgTW9j
a0xheWVyRGVsZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0ZTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQxLCBtX2NoaWxkMiwgbV9jaGls
ZDMsIG1fZ3JhbmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3JhbmRDaGlsZDM7CiB9OwpAQCAt
NTYyLDI0ICs1NTYsMjQgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRz
RGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIAogICAgIC8vIENhc2UgMTogYmFzaWMKICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsKLSAgICB2ZXJpZnlGbG9hdFJl
Y3RzQWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAg
Ly8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9mIGRpcnR5
MSBhbmQgZGlydHkyLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwot
ICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAx
My4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKIAogICAgIC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90IGNo
YW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0
RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5k
aXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAx
NS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAKICAgICAvLyBD
YXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJl
eW9uZCBpdHMgYm91bmRzCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZCb3Vu
ZHNEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0
KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYs
IDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwogCiAgICAgLy8gQ2FzZSA1OiBzZXRO
ZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhl
IGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCiAgICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFu
eSBleGlzdGluZyBkaXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkp
OwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJv
dW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3Qo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMu
d2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwog
CiAgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBh
bmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVk
c0Rpc3BsYXkoKSk7CkBAIC01OTYsMTMgKzU5MCwxMyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRl
c3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKICAgICBGbG9hdFJlY3Qg
ZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAyLjBmKTsKIAogICAgIHRlc3RM
YXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RF
cXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4w
ZiwgNTAxLjBmLCA1MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKIAogICAgIHRlc3RM
YXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRp
cnR5UmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShk
aXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5LCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9w
ZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTY1Niw3ICs2NTAsNyBAQCBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVo
YXZpb3IpCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNE
aXNwbGF5CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVp
cmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBm
KSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlz
cGxheSgpOwogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgp
KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>