<?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>80622</bug_id>
          
          <creation_ts>2012-03-08 11:47:22 -0800</creation_ts>
          <short_desc>[chromium] Refactor CCLayerTreeHostCommon: clean up clipRect and drawableContentRect design</short_desc>
          <delta_ts>2012-07-23 13:46:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>74147</dependson>
    
    <dependson>91472</dependson>
          <blocked>88953</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>574024</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-08 11:47:22 -0800</bug_when>
    <thetext>The clipRect is being computed in all cases anyway, and therefore usesLayerClipping is probably unnecessary.

This is desirable because it reduces the risks in clipRect logic, since there would only be one variable (the clipRect) instead of two variables (usesLayerClipping and clipRect).

Additionally, removing usesLayerClipping has the following implications:
  - we have to be careful of the meaning of an empty clipRect.  it should always imply that the layer is not visible;  it should not imply that the layer is not clipped.
  - clipRect becomes very similar to visibleLayerRect, and its worth investigating if they can be merged in a follow-up bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574030</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-08 11:52:44 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt;   - we have to be careful of the meaning of an empty clipRect.  it should always imply that the layer is not visible;  it should not imply that the layer is not clipped.

Yeh that definitely needs to be changed in CCOcclusionTracker then. (After/during this CL?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574037</commentid>
    <comment_count>2</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-08 11:55:26 -0800</bug_when>
    <thetext>I think during this CL is probably fine.  =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666996</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-11 13:14:32 -0700</bug_when>
    <thetext>I&apos;m having second thoughts about this.  As I tried to refactor to remove the root special cases before calcDrawTransforms, i ran into this issue again.   It seems like some test code behavior changed when clipRects were initialized differently than they are now.

The problem is inconsistent behavior across 3 locations where cilpRect is owned, and the confusion of possible states that the clipRect may have.

state 1: clipRect should not be applied
state 2: clipRect is empty, and should be applied, meaning that everything is clipped away.
state 3: clipRect is normal and should be applied.

(a) For layers, all 3 possible states need to be represented.

(b) For surfaces and quads, ideally state 2 is unnecessary, so we have encoded state 1 as an empty clipRect.

(c) For surfaces, another condition must be true - which is where I encountered some minor bugs and got stuck when refactoring the root - the owningLayer&apos;s parent must have usesLayerClipping == true.  The surface&apos;s clipRect could potentially be initialized when it should in theory be un-used because of this condition.

proposed solution #1:
I think the right way to simplify this is to always have usesLayerClipping + clipRect, and NOT encode an emptyRect to mean &quot;don&apos;t apply this rect&quot;.  This way this precarious code remains readable, more robust, and consistent across all 3 uses of clipRect.

What do you guys think?   If you agree, I&apos;ll re-name this bug and submit a patch that does this.  It will require adding bool usesLayerClipping to some additional data structures, however.

proposed solution #2:
As a compromise, if you want to avoid messing with quads for now, we could still change the semantics on renderSurfaces to be consistent with layers.  Fixing that should probably be enough for me to get un-stuck on the other refactoring patch, at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667004</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 13:20:28 -0700</bug_when>
    <thetext>It sounds like state 1 is causing the mess? But if the clip rect is large (equal to contentrect of target surface?) then that&apos;s the same as not applying anything right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667011</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-11 13:25:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It sounds like state 1 is causing the mess? But if the clip rect is large (equal to contentrect of target surface?) then that&apos;s the same as not applying anything right?

If we want to remove state 1, we would have to support &quot;infinite rects&quot;, so that we don&apos;t have to make assumptions about where/how the rect is positioned.  this is an approach that webcore has taken in a few places, and I&apos;ve personally already encountered a few bugs related to that for things like overflow.

usesLayerClipping seems to be a better option for robustness.   I once toyed with the idea of proposing to add &quot;infinite&quot; size concept to rect data types, but now I&apos;m not convinced that&apos;s a good idea - it would cause a domino effect of necessary refactors, so that size, point, quad, etc can take infinite concept into account, and tat would spill over into users of these data types making it more error prone than it is with tolerating overflow or usesLayerClipping boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667030</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-11 13:56:49 -0700</bug_when>
    <thetext>
summary of offline discussion with Dana - if we start by assuming clipRect would never be infinite (limited to the viewport, at its largest), then we can probably remove state 1.   a boolean might be necessary, but probably it could be placed on the stack, as part of recursion in calcDrawTransforms, and not stored in layers.  we could probably then ensure that clipRect is a valid finite rect at all times for all layers and surfaces and quads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667222</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-11 17:06:19 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; summary of offline discussion with Dana - if we start by assuming clipRect would never be infinite (limited to the viewport, at its largest), then we can probably remove state 1.   a boolean might be necessary, but probably it could be placed on the stack, as part of recursion in calcDrawTransforms, and not stored in layers.  we could probably then ensure that clipRect is a valid finite rect at all times for all layers and surfaces and quads.

That&apos;s my thought too.  There&apos;s always going to be a clipRect, whether it&apos;s the viewport or the size of a surface.  However, I realize that there&apos;s some point during CCLayerTreeHostCommon traversal where the size of the surface is unknown, and thus the clip rect is essentially infinite temporarily.

If it makes it easier to add an explicit boolean function, then let&apos;s do that.  If it&apos;s easier to do without, let&apos;s do that.  I don&apos;t feel too strongly, but I agree that we should be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669425</commentid>
    <comment_count>8</comment_count>
      <attachid>152333</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-13 14:34:53 -0700</bug_when>
    <thetext>Created attachment 152333
Refactor complete, but not thoroughly tested yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669426</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-13 14:35:08 -0700</bug_when>
    <thetext>
This refactor has a wonderful refreshing feeling =)  I hope you guys feel the same.

(1) Removed clipRect() and usesLayerClipping() from layer types.  Users of LayerChromium and CCLayerImpl should use drawableContentRect().

(2) Removed a lot of confusing and error-prone code about drawableContentRect(), and instead refactored that computation into the recursion itself, where it makes much more sense.  Before this patch, drawableContentRect was a half-meaningless value that represented the aggregate drawable rect of the layer and its subtree.  Now, after the patch, drawableContentRect is the properly clipped rect of what the layer can draw (not counting scissoring/occlusion/visibility).

(3) Based on (2) above, I would like to propose re-naming drawableContentRect() to &quot;clippedContentRectInTargetSpace()&quot; because that&apos;s really what it is.  &quot;drawable&quot; could be potentially misleading, for example a layer hidden by an overflow clip could arguably be &quot;drawable&quot; but not &quot;visible&quot;, that contradicts the meaning we&apos;ve been using for &quot;drawable&quot;.

(4) for now, clipRect still exists on surfaces, with the same isEmpty() encoding for when it should/shouldnot be used.  I&apos;d prefer to remove that in a separate patch, since it requires toying with drawableContentRect() and making 2 accessors out of it (one with replica, one with clip + without replica)

(5) The list of args in calcDrawTransforms will reduce a little in the follow-up refactoring in 88953.

(6) I&apos;ll be testing with layout tests and unit tests and removing the FIXMEs before submitting the real patch.

(7) If you guys like the approach, then these bugs are swallowed by this one, and I&apos;ll make them dupes.
  https://bugs.webkit.org/show_bug.cgi?id=82485
  https://bugs.webkit.org/show_bug.cgi?id=80331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669440</commentid>
    <comment_count>10</comment_count>
      <attachid>152333</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-13 14:46:04 -0700</bug_when>
    <thetext>Comment on attachment 152333
Refactor complete, but not thoroughly tested yet

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

OMG go Shawn! This is really cool :) I like clippedContentRectInTargetSpace also.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt; +static inline bool layerClipsSubtree(LayerType* layer)

yay

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt;                                              const WebTransformationMatrix&amp; fullHierarchyMatrix, const WebTransformationMatrix&amp; currentScrollCompensationMatrix,
&gt; +                                            const IntRect&amp; clipRectFromAncestor, const bool ancestorClipsSubtree,
&gt;                                              RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList&amp; renderSurfaceLayerList, LayerList&amp; layerList,
&gt;                                              LayerSorter* layerSorter, int maxTextureSize)

i guess indenting has to be fixed here :(

aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669523</commentid>
    <comment_count>11</comment_count>
      <attachid>152333</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-13 15:50:47 -0700</bug_when>
    <thetext>Comment on attachment 152333
Refactor complete, but not thoroughly tested yet

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

I really like clippedContentRectInTargetSpace.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:390
&gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,

Nooooo, don&apos;t return one thing via a return value but modify other things via reference parameters.  This should also be reference parameter.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt;&gt;                                              LayerSorter* layerSorter, int maxTextureSize)
&gt; 
&gt; i guess indenting has to be fixed here :(
&gt; 
&gt; aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?

We should really make this a struct.  The number of parameters here makes me cry every time I touch it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669530</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-13 16:00:42 -0700</bug_when>
    <thetext>
OK, thanks to both of you for the initial reviews =)   I&apos;ll come back probably ETA monday with fixed unit tests.

A few responses to Enne&apos;s comments...


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:390
&gt; &gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt; 
&gt; Nooooo, don&apos;t return one thing via a return value but modify other things via reference parameters.  This should also be reference parameter.

OK - so just to avoid redundancy between the existing bool return value, I&apos;ll make it void instead?

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; &gt;&gt;                                              LayerSorter* layerSorter, int maxTextureSize)
&gt; &gt; 
&gt; &gt; i guess indenting has to be fixed here :(
&gt; &gt; 
&gt; &gt; aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?
&gt; 
&gt; We should really make this a struct.  The number of parameters here makes me cry every time I touch it.

Sounds good - i&apos;ll try to do that in bug 88953.  I already was able to simplify the args in the public calcDrawTransforms invocations in that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669531</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-13 16:01:55 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:390
&gt; &gt; &gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt; &gt; 
&gt; &gt; Nooooo, don&apos;t return one thing via a return value but modify other things via reference parameters.  This should also be reference parameter.
&gt; 
&gt; OK - so just to avoid redundancy between the existing bool return value, I&apos;ll make it void instead?

Yes please.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670385</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-16 09:09:13 -0700</bug_when>
    <thetext>*** Bug 80331 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670387</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-16 09:09:24 -0700</bug_when>
    <thetext>*** Bug 82485 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673245</commentid>
    <comment_count>16</comment_count>
      <attachid>153194</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-19 00:27:51 -0700</bug_when>
    <thetext>Created attachment 153194
Work in progress, well tested, only few issues remain

(1) Did not yet address reviewers comments (2) debugged and fixed a large number of unit tests; most failing tests either had bad initialization, and some tests really did need to be updated because after this patch, the rootLayer does clip the layer tree. (3) need to rebase, a lot of related code has changed since 550 CLs ago.  Will submit patch for review soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674712</commentid>
    <comment_count>17</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-20 10:43:10 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 152333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152333&amp;action=review
&gt; 
&gt; OMG go Shawn! This is really cool :) I like clippedContentRectInTargetSpace also.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt; &gt; +static inline bool layerClipsSubtree(LayerType* layer)
&gt; 
&gt; yay
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; &gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt; &gt;                                              const WebTransformationMatrix&amp; fullHierarchyMatrix, const WebTransformationMatrix&amp; currentScrollCompensationMatrix,
&gt; &gt; +                                            const IntRect&amp; clipRectFromAncestor, const bool ancestorClipsSubtree,
&gt; &gt;                                              RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList&amp; renderSurfaceLayerList, LayerList&amp; layerList,
&gt; &gt;                                              LayerSorter* layerSorter, int maxTextureSize)
&gt; 
&gt; i guess indenting has to be fixed here :(
&gt; 
&gt; aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?

looking again at the style guide, I don&apos;t see anything that requires this.

I tried indenting them only 4 spaces, and it actually looks very cluttered to me personally.  I like the indentation aligned with the parentheses (which it wasn&apos;t when you wrote this comment, but I fixed it), because that makes it much visually easier to realize its the beginning of a function definition.

ok with you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674713</commentid>
    <comment_count>18</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-20 10:44:02 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 152333 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152333&amp;action=review
&gt; &gt; 
&gt; &gt; OMG go Shawn! This is really cool :) I like clippedContentRectInTargetSpace also.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt; &gt; &gt; +static inline bool layerClipsSubtree(LayerType* layer)
&gt; &gt; 
&gt; &gt; yay
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; &gt; &gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt; &gt; &gt;                                              const WebTransformationMatrix&amp; fullHierarchyMatrix, const WebTransformationMatrix&amp; currentScrollCompensationMatrix,
&gt; &gt; &gt; +                                            const IntRect&amp; clipRectFromAncestor, const bool ancestorClipsSubtree,
&gt; &gt; &gt;                                              RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList&amp; renderSurfaceLayerList, LayerList&amp; layerList,
&gt; &gt; &gt;                                              LayerSorter* layerSorter, int maxTextureSize)
&gt; &gt; 
&gt; &gt; i guess indenting has to be fixed here :(
&gt; &gt; 
&gt; &gt; aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?
&gt; 
&gt; looking again at the style guide, I don&apos;t see anything that requires this.
&gt; 
&gt; I tried indenting them only 4 spaces, and it actually looks very cluttered to me personally.  I like the indentation aligned with the parentheses (which it wasn&apos;t when you wrote this comment, but I fixed it), because that makes it much visually easier to realize its the beginning of a function definition.
&gt; 
&gt; ok with you?


I think it&apos;s also worth noting that I&apos;m going to try and make structs out of this as many people have suggested/agreed =)  We should discuss that soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674727</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-20 10:56:47 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 152333 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152333&amp;action=review
&gt; &gt; 
&gt; &gt; OMG go Shawn! This is really cool :) I like clippedContentRectInTargetSpace also.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt; &gt; &gt; +static inline bool layerClipsSubtree(LayerType* layer)
&gt; &gt; 
&gt; &gt; yay
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; &gt; &gt; +static IntRect calculateDrawTransformsInternal(LayerType* layer, LayerType* rootLayer, const WebTransformationMatrix&amp; parentMatrix,
&gt; &gt; &gt;                                              const WebTransformationMatrix&amp; fullHierarchyMatrix, const WebTransformationMatrix&amp; currentScrollCompensationMatrix,
&gt; &gt; &gt; +                                            const IntRect&amp; clipRectFromAncestor, const bool ancestorClipsSubtree,
&gt; &gt; &gt;                                              RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList&amp; renderSurfaceLayerList, LayerList&amp; layerList,
&gt; &gt; &gt;                                              LayerSorter* layerSorter, int maxTextureSize)
&gt; &gt; 
&gt; &gt; i guess indenting has to be fixed here :(
&gt; &gt; 
&gt; &gt; aren&apos;t the non-first lines supposed to be indented only 4 chars to avoid that?
&gt; 
&gt; looking again at the style guide, I don&apos;t see anything that requires this.
&gt; 
&gt; I tried indenting them only 4 spaces, and it actually looks very cluttered to me personally.  I like the indentation aligned with the parentheses (which it wasn&apos;t when you wrote this comment, but I fixed it), because that makes it much visually easier to realize its the beginning of a function definition.
&gt; 
&gt; ok with you?

Personally, I hate indenting to match parenthesis in the same way that I hate all variable width vertical alignment in code: it creates extra work for anybody making changes and bloats diffs with whitespace modifications.

If a function takes a million parameters, it&apos;s going to be equally unclear no matter how it&apos;s indented.  :)

The style guide does not say one way or the other on this issue, although http://www.webkit.org/coding/coding-style.html#braces-one-line has an example of a function call that only gets indented by four spaces.  That&apos;s a weak argument, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674855</commentid>
    <comment_count>20</comment_count>
      <attachid>153568</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-20 12:41:24 -0700</bug_when>
    <thetext>Created attachment 153568
Well tested, cleaned up, ready for review

tested on linux manually, unit tests, and layout tests, no obvious regressions.  finally ready for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674865</commentid>
    <comment_count>21</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-20 12:46:31 -0700</bug_when>
    <thetext>
Based on comment 19 I opted for the 4-spacing.   I guess it doesn&apos;t really matter in the end, feel free to nitpick about it and I&apos;ll do it whichever way you want =)

Please note, some upcoming refactors that will follow-up:

  - removing a large amount of root-layer special case part 1 (from the outside of calcDrawTransforms)
  - reducing as much as possible the special-ness of root layer part 2 (from inside calcDrawTransforms)
  - grouping values into structs as follows: (1) given properties from the user of the compositor (2) computed properties (3) something that clarifies and enforces when values are valid related to the confusion data flow in the recursion of calcDrawTransforms
   - onward!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675330</commentid>
    <comment_count>22</comment_count>
      <attachid>153568</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-22 11:16:35 -0700</bug_when>
    <thetext>Comment on attachment 153568
Well tested, cleaned up, ready for review

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

I like this patch quite a bit.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:468
&gt;          rootLayer-&gt;createRenderSurface();
&gt;      rootLayer-&gt;renderSurface()-&gt;setContentRect(IntRect(IntPoint(0, 0), deviceViewportSize()));

In the future, I&apos;d love if deviceViewportSize could just become a parameter on calcDraw and this render surface creation and content rect setting could move there too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:407
&gt; +    /* NOT const, valid only after recursion returns */ IntRect&amp; drawableContentRectOfSubtree,

Could you move the &apos;out&apos; parameter to the end so that it&apos;s not mixed in with all of the &apos;in&apos; parameters?

I also don&apos;t think this needs such a warning on it; reference out parameters are a pretty regular occurrence. If you want to clarify, maybe just prepend the variable name with &apos;out&apos; or &apos;resulting&apos;? We do something similar for LayerTextureUpdater::prepareToUpdate.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:408
&gt; +    const IntRect&amp; clipRectFromAncestor, const bool ancestorClipsSubtree,

No need for const on bool params.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:-548
&gt; -    // FIXME: This seems like the wrong place to set this
&gt; -    layer-&gt;setUsesLayerClipping(false);

&lt;3

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:615
&gt; +        if (ancestorClipsSubtree)
&gt; +            renderSurface-&gt;setClipRect(clipRectFromAncestor);

If the ancestor doesn&apos;t clip the subtree, do you need to initialize this clip rect? Alternatively, since the surface gets post-recursion clip rect setting, maybe this clip rect code should get moved post-recursion?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:621
&gt; +        // The new renderSurface here will correctly clip the entire subtree. So, we do
&gt; +        // not need to continue propagating the clipping state further down the tree. This
&gt; +        // way, we can avoid transforming clipRects from ancestor target surface space to
&gt; +        // current target surface space that could cause more w &lt; 0 headaches.
&gt; +        subtreeShouldBeClipped = false;

Even if you don&apos;t want to transform the clip rect of the target of the contributing surface into that surface&apos;s spaces, wouldn&apos;t you want to pass down subtreeShouldBeClipped in the case of layerClipsSubtree(layer)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:722
&gt; +        if (!drawableContentRectOfChildSubtree.isEmpty()) {
&gt; +            accumulatedDrawableContentRectOfChildren.unite(drawableContentRectOfChildSubtree);
&gt; +            if (child-&gt;renderSurface())

Ooh, this loop is much better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675367</commentid>
    <comment_count>23</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-22 16:29:56 -0700</bug_when>
    <thetext>
Thanks for review as always.  Inline replies below.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:468
&gt; &gt;          rootLayer-&gt;createRenderSurface();
&gt; &gt;      rootLayer-&gt;renderSurface()-&gt;setContentRect(IntRect(IntPoint(0, 0), deviceViewportSize()));
&gt; 
&gt; In the future, I&apos;d love if deviceViewportSize could just become a parameter on calcDraw and this render surface creation and content rect setting could move there too.

Sounds good - I&apos;ve actually already done that as part of 88593


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:615
&gt; &gt; +        if (ancestorClipsSubtree)
&gt; &gt; +            renderSurface-&gt;setClipRect(clipRectFromAncestor);
&gt; 
&gt; If the ancestor doesn&apos;t clip the subtree, do you need to initialize this clip rect? Alternatively, since the surface gets post-recursion clip rect setting, maybe this clip rect code should get moved post-recursion?

Yes I think it should work to move it to the post-recursion chunk of code.  In the existing patch, the idea was that clipRect would remain empty if ancestor does not clip the subtree, but now I realize that is wrong, and it needs to be explicitly initialized.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:621
&gt; &gt; +        // The new renderSurface here will correctly clip the entire subtree. So, we do
&gt; &gt; +        // not need to continue propagating the clipping state further down the tree. This
&gt; &gt; +        // way, we can avoid transforming clipRects from ancestor target surface space to
&gt; &gt; +        // current target surface space that could cause more w &lt; 0 headaches.
&gt; &gt; +        subtreeShouldBeClipped = false;
&gt; 
&gt; Even if you don&apos;t want to transform the clip rect of the target of the contributing surface into that surface&apos;s spaces, wouldn&apos;t you want to pass down subtreeShouldBeClipped in the case of layerClipsSubtree(layer)?

That situation is already accounted for in the layerClipsSubtree if-statement below this.  I&apos;m happy to adjust it if you think its more readable - but maybe I think it just simply needs a comment.   I specifically chose the code the way it is to be a bit more robust to changes we might make; the layerClipsSubtree if-statement would indicate the correct semantics without any nuanced logic from previous if statements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675914</commentid>
    <comment_count>24</comment_count>
      <attachid>153842</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-23 12:45:53 -0700</bug_when>
    <thetext>Created attachment 153842
diff between previous patch and upcoming next one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675918</commentid>
    <comment_count>25</comment_count>
      <attachid>153843</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-23 12:54:13 -0700</bug_when>
    <thetext>Created attachment 153843
addressed reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675937</commentid>
    <comment_count>26</comment_count>
      <attachid>153843</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-23 13:16:02 -0700</bug_when>
    <thetext>Comment on attachment 153843
addressed reviewer comments

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675969</commentid>
    <comment_count>27</comment_count>
      <attachid>153843</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 13:46:32 -0700</bug_when>
    <thetext>Comment on attachment 153843
addressed reviewer comments

Clearing flags on attachment: 153843

Committed r123375: &lt;http://trac.webkit.org/changeset/123375&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675971</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 13:46:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152333</attachid>
            <date>2012-07-13 14:34:53 -0700</date>
            <delta_ts>2012-07-19 00:27:48 -0700</delta_ts>
            <desc>Refactor complete, but not thoroughly tested yet</desc>
            <filename>bug-80622-20120713143453.patch</filename>
            <type>text/plain</type>
            <size>29400</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRh
ZThkYjM5YzU0NzhhMTliMTliNGQ3ZTYxYmM0NmMzM2JiOWYxNGEuLmQ3Y2U3YzBhZDFiMTFhOWI4
ZDc2NjE4NTdkNmIxNjcwNTM3NGM4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC03Nyw3
ICs3Nyw2IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9tYXNrc1Rv
Qm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgLCBtX2RvdWJsZVNpZGVk
KHRydWUpCi0gICAgLCBtX3VzZXNMYXllckNsaXBwaW5nKGZhbHNlKQogICAgICwgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50KGZhbHNlKQogICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkKICAgICAs
IG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDQwNjY4ZjU1NjczN2Y4YzQ5MjdhY2UyNjZlOWM3MWIwMzZmNzA4YzcuLmRiZDdiNzllZjk0
N2RjYjcxYzQ3MDgzMzM4YzhmOTg0NmI3YTJjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE5
NSw5ICsxOTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VQYXJlbnRCYWNrZmFjZVZpc2li
aWxpdHkoYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkpIHsgbV91c2VQYXJlbnRCYWNr
ZmFjZVZpc2liaWxpdHkgPSB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHk7IH0KICAgICBib29s
IHVzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUGFyZW50
QmFja2ZhY2VWaXNpYmlsaXR5OyB9CiAKLSAgICB2b2lkIHNldFVzZXNMYXllckNsaXBwaW5nKGJv
b2wgdXNlc0xheWVyQ2xpcHBpbmcpIHsgbV91c2VzTGF5ZXJDbGlwcGluZyA9IHVzZXNMYXllckNs
aXBwaW5nOyB9Ci0gICAgYm9vbCB1c2VzTGF5ZXJDbGlwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc0xheWVyQ2xpcHBpbmc7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc05vbkNvbXBvc2l0
ZWRDb250ZW50KGJvb2wpOwogICAgIGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsgfQogCkBAIC0yMzIsOCArMjI5LDYg
QEAgcHVibGljOgogICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJ
c0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlz
QW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogCi0gICAgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9Ci0gICAgdm9pZCBzZXRD
bGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgeyBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7
IH0KICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJl
bmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIApAQCAtMzQ3LDggKzM0Miw3IEBAIHByaXZhdGU6CiAg
ICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKIAogICAgIC8vIER1cmluZyBkcmF3aW5n
LCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBi
ZSBkcmF3bi4KLSAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBjbGlwUmVj
dCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKLSAgICAvLyBpdCdzIHRh
cmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBUaGlzIGlzIHRoZSBpbnRl
cnNlY3Rpb24gb2YgdGhlIGxheWVyJ3MgZHJhd2FibGVDb250ZW50UmVjdCBhbmQgZGFtYWdlIChp
ZiBkYW1hZ2UgdHJhY2tpbmcgaXMgZW5hYmxlZCkuCiAgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFj
ZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Nj
cm9sbFBvc2l0aW9uOwpAQCAtMzc0LDcgKzM2OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21h
c2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7
Ci0gICAgYm9vbCBtX3VzZXNMYXllckNsaXBwaW5nOwogICAgIGJvb2wgbV9pc05vbkNvbXBvc2l0
ZWRDb250ZW50OwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBib29sIG1fdXNlUGFyZW50
QmFja2ZhY2VWaXNpYmlsaXR5OwpAQCAtMzkzLDggKzM4Niw2IEBAIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKIAot
ICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCi0gICAgSW50UmVjdCBtX2NsaXBSZWN0
OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMGU3ZDRlMzhjNTZjMWVjY2Q5NmY1
Y2JhZmQ3NGY5ZGU1ZjNkODdkOS4uNzA3YzViNGEzYzFjNDdjZTJkODY0NDM0Yzk2Y2FlNjlkZjY3
N2M5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTE0MSw4ICsxNDEs
NiBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKIAogICAgIC8vIER1cmluZyBk
cmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNo
b3VsZCBiZSBkcmF3bi4KLSAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBj
bGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKLSAgICAvLyBp
dCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KICAgICAvLyBVc2VzIHRoZSBz
cGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9zY2lz
c29yUmVjdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDlhODgzNzZjMmQ2MTVkODcw
YWFlZWVjN2Y0MmE2NzBiMDk4NDk5MGQuLjI5MGE5Y2Q0ODMzMzliMGEyOTc2YWIwZWU2OGQ2Yzc0
NDhiOTJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAgQ0NM
YXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2Up
CiAgICAgLCBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKICAgICAsIG1fZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhmYWxzZSkKLSAgICAsIG1fdXNlc0xheWVyQ2xp
cHBpbmcoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCiAgICAg
LCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMmI5YTQ5YmQzMDM2ZmRmZjRiOGM5NzFkNjJmMDMx
OWQ1Njc4MTM1My4uMjg2OGI4YTIwZWU5YjE0N2QxYzY2ZjUyMWYxMDVlYTczNjZmN2UzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNDQsOSArMTQ0LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdXNlUGFyZW50QmFja2ZhY2VWaXNp
YmlsaXR5KSB7IG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5ID0gdXNlUGFyZW50QmFja2Zh
Y2VWaXNpYmlsaXR5OyB9CiAgICAgYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eTsgfQogCi0gICAgdm9p
ZCBzZXRVc2VzTGF5ZXJDbGlwcGluZyhib29sIHVzZXNMYXllckNsaXBwaW5nKSB7IG1fdXNlc0xh
eWVyQ2xpcHBpbmcgPSB1c2VzTGF5ZXJDbGlwcGluZzsgfQotICAgIGJvb2wgdXNlc0xheWVyQ2xp
cHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3VzZXNMYXllckNsaXBwaW5nOyB9Ci0KICAgICB2b2lk
IHNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KSB7
IG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7IH0KICAg
ICBib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lzTm9uQ29t
cG9zaXRlZENvbnRlbnQ7IH0KIApAQCAtMTc0LDEwICsxNzEsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eUlz
QW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGJvb2wgZHJh
d09wYWNpdHlJc0FuaW1hdGluZykgeyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nOyB9CiAKLSAgICAvLyBVc2FnZTogaWYgdGhpcy0+dXNlc0xheWVyQ2xp
cHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4K
LSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7
IH0KLSAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jbGlwUmVj
dCA9IHJlY3Q7IH0KLQogICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQogCkBAIC0zNDIsNyArMzM1LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsK
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKLSAgICBi
b29sIG1fdXNlc0xheWVyQ2xpcHBpbmc7CiAgICAgYm9vbCBtX2lzTm9uQ29tcG9zaXRlZENvbnRl
bnQ7CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwpAQCAtMzg5LDEyICszODEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9iZXR3ZWVuV2lsbERyYXdBbmREaWREcmF3OwogI2VuZGlmCiAKLSAg
ICAvLyBUaGUgcmVjdCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lzc29yIHdoZW4gdGhpcyBs
YXllciBpcyBkcmF3bi4KLSAgICAvLyBJbmhlcml0ZWQgYnkgdGhlIHBhcmVudCBsYXllciBhbmQg
ZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MKLSAgICAvLyB0byBib3VuZHMu
Ci0gICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgotICAgIEludFJlY3QgbV9jbGlw
UmVjdDsKLQogICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0
c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KICAgICAvLyBVc2VzIHRhcmdl
dCBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZDY1Mzk3ZWVkMTkzMzU4Y2JkZDQzY2MxNTA1MmNh
ZmZkNzIzYmExZC4uMzllOTc1YjRmOGVhY2Q2MmQxMjYyYWU1OTM4YWUyYWMxOWQ0MzQ4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC00NjcsOSArNDY3LDYgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIEND
VGV4dHVyZVVwZGF0ZXImIHUKICAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CiAgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7CiAKLSAgICBJbnRSZWN0
IHJvb3RDbGlwUmVjdChJbnRQb2ludCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSk7Ci0gICAgcm9v
dExheWVyLT5zZXRDbGlwUmVjdChyb290Q2xpcFJlY3QpOwotCiAgICAgTGF5ZXJMaXN0IHVwZGF0
ZUxpc3Q7CiAgICAgdXBkYXRlTGlzdC5hcHBlbmQocm9vdExheWVyKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMjljYTRlNzc1ZmE1Yjc4Y2FmMDgx
MTAzNzBmMmI4MDMwOTJlOWU5Yy4uMTUxYmQ4NzJkM2MxYjBlMTYwZjUzMWMyZWIzYzZhZmM4MmM5
NjJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC03
MSwxMSArNzEsNyBAQCBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KExh
eWVyVHlwZSogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdAogICAgIFJlbmRlclN1cmZhY2VU
eXBlKiB0YXJnZXRTdXJmYWNlID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKIAogICAg
IEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UgPSB0YXJnZXRTdXJmYWNl
LT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3NvclJlY3Qp
OwotICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlOwotICAgIGlmIChsYXllci0+dXNlc0xheWVy
Q2xpcHBpbmcoKSkKLSAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Np
c3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JSZWN0SW5UYXJn
ZXRTdXJmYWNlLCB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKKyAgICBGbG9hdFJlY3Qg
Y2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZh
Y2UsIGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoY2xpcEFuZERhbWFnZSk7CiB9CkBAIC05Miw2ICs4OCw4IEBAIHN0YXRpYyBJbnRS
ZWN0IGNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIHJvCiAKICAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBjdXJyZW50U3VyZmFjZS0+
Y2xpcFJlY3QoKTsKIAorICAgIC8vIEZJWE1FOiBmaXggdGhlIGNsaXBSZWN0IGxvZ2ljIGhlcmUu
CisKICAgICAvLyBGb3Igc3VyZmFjZXMsIGVtcHR5IGNsaXBSZWN0IG1lYW5zIHRoZSBzYW1lIGFz
IENDTGF5ZXJJbXBsOjp1c2VzTGF5ZXJDbGlwcGluZyBiZWluZyBmYWxzZQogICAgIGlmIChjbGlw
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1
cmZhY2UtPmNvbnRlbnRSZWN0KCksIGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCkpOwpAQCAtMTUzLDE0ICsxNTEsMTggQEAgc3RhdGljIGJvb2wgaXNTdXJmYWNlQmFja0ZhY2VW
aXNpYmxlKExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWEKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGxheWVyQ2xp
cHNTdWJ0cmVlKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5tYXNrc1Rv
Qm91bmRzKCkgfHwgbGF5ZXItPm1hc2tMYXllcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGU+CiBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlQ29udGVudFJlY3QoTGF5
ZXJUeXBlKiBsYXllcikKIHsKICAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSk7CiAKICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKLQotICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSkKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5jbGlw
UmVjdCgpKTsKKyAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKSk7CiAKICAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8
IGxheWVyLT5jb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwpAQCAtMjkwLDcgKzI5Miw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVTaG91bGRSZW5kZXJU
b1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBib29sIGF4aXNBbGlnCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgdGhlIGxheWVyIGNsaXBzIGl0cyBkZXNjZW5kYW50
cyBidXQgaXQgaXMgbm90IGF4aXMtYWxpZ25lZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHBhcmVudC4K
LSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhYXhpc0FsaWduZWRXaXRoUmVzcGVj
dFRvUGFyZW50ICYmIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQpCisgICAgaWYgKGxheWVyQ2xpcHNT
dWJ0cmVlKGxheWVyKSAmJiAhYXhpc0FsaWduZWRXaXRoUmVzcGVjdFRvUGFyZW50ICYmIGRlc2Nl
bmRhbnREcmF3c0NvbnRlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgdGhl
IGxheWVyIGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90IGhhdmUgYSBwcmVzZXJ2ZXMtM2Qg
dHJhbnNmb3JtIHN0eWxlLgpAQCAtMzg1LDggKzM4Nyw5IEBAIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25NYXRyaXhGb3JDaGlsZHJlbihDQ0xheWVySW1w
bCoKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBn
aXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRp
b25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
LCB0eXBlbmFtZSBMYXllclNvcnRlcj4KLXN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsCitzdGF0aWMgSW50UmVjdCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlw
ZSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0RnJvbUFuY2VzdG9yLCBjb25zdCBib29sIGFuY2VzdG9yQ2xpcHNTdWJ0cmVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSog
bmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0
dXJlU2l6ZSkKIHsKQEAgLTQ5MCw4ICs0OTMsMTEgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkK
ICAgICAvLwogCiAgICAgaWYgKHN1YnRyZWVTaG91bGRCZVNraXBwZWQobGF5ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKKyAgICBJbnRSZWN0
IGNsaXBSZWN0Rm9yU3VidHJlZTsKKyAgICBib29sIHN1YnRyZWVTaG91bGRCZUNsaXBwZWQgPSBm
YWxzZTsKKyAgICAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CiAg
ICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gbGF5ZXItPm9wYWNpdHlJc0FuaW1hdGlu
ZygpOwogICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2
ZXMzRCgpKSB7CkBAIC01NDUsMTMgKzU1MSwxMCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQog
ICAgIC8vIG5leHRIaWVyYXJjaHlNYXRyaXggd2lsbCBvbmx5IGNoYW5nZSBpZiB0aGlzIGxheWVy
IHVzZXMgYSBuZXcgUmVuZGVyU3VyZmFjZSwgb3RoZXJ3aXNlIHJlbWFpbnMgdGhlIHNhbWUuCiAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dEhpZXJhcmNoeU1hdHJpeCA9IGZ1bGxIaWVy
YXJjaHlNYXRyaXg7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBw
bGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7
Ci0KICAgICBpZiAoc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKGxheWVyLCBp
c1NjYWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSkpKSB7CiAgICAgICAgIC8vIENo
ZWNrIGJhY2stZmFjZSB2aXNpYmlsaXR5IGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhpcyBzdXJm
YWNlIGFuZCBpdHMgc3VidHJlZQogICAgICAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpICYm
IHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihsYXllcikgJiYgaXNTdXJmYWNlQmFja0ZhY2VWaXNp
YmxlKGxheWVyLCBjb21iaW5lZFRyYW5zZm9ybSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgICAgIGlmICghbGF5ZXItPnJl
bmRlclN1cmZhY2UoKSkKICAgICAgICAgICAgIGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
CkBAIC01OTgsMTEgKzYwMSwxNCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgICAgICAv
LyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgY29udHJpYnV0ZXMgdG8gdGhlIHNjaXNzb3Ig
cmVjdCB0aGF0IG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIGFwcGxpZWQgYmVmb3JlIGRyYXdpbmcg
dGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKICAgICAgICAgLy8gc3VyZmFj
ZSBhbmQgaXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBz
eXN0ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGxheWVyLT5wYXJlbnQo
KSA/IGxheWVyLT5wYXJlbnQoKS0+Y2xpcFJlY3QoKSA6IGxheWVyLT5jbGlwUmVjdCgpKTsKKyAg
ICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlKQorICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3RGcm9tQW5jZXN0b3IpOwogCi0gICAgICAgIC8vIFRoZSBs
YXllcidzIGNsaXBSZWN0IGNhbiBiZSByZXNldCBoZXJlLiBUaGUgcmVuZGVyU3VyZmFjZSB3aWxs
IGNvcnJlY3RseSBjbGlwIHRoZSBzdWJ0cmVlLgotICAgICAgICBsYXllci0+c2V0VXNlc0xheWVy
Q2xpcHBpbmcoZmFsc2UpOwotICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgpKTsK
KyAgICAgICAgLy8gVGhlIG5ldyByZW5kZXJTdXJmYWNlIGhlcmUgd2lsbCBjb3JyZWN0bHkgY2xp
cCB0aGUgZW50aXJlIHN1YnRyZWUuIFNvLCB3ZSBkbworICAgICAgICAvLyBub3QgbmVlZCB0byBj
b250aW51ZSBwcm9wYWdhdGluZyB0aGUgY2xpcHBpbmcgc3RhdGUgZnVydGhlciBkb3duIHRoZSB0
cmVlLiBUaGlzCisgICAgICAgIC8vIHdheSwgd2UgY2FuIGF2b2lkIHRyYW5zZm9ybWluZyBjbGlw
UmVjdHMgZnJvbSBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZSBzcGFjZSB0bworICAgICAgICAvLyBj
dXJyZW50IHRhcmdldCBzdXJmYWNlIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgbW9yZSB3IDwgMCBo
ZWFkYWNoZXMuCisgICAgICAgIHN1YnRyZWVTaG91bGRCZUNsaXBwZWQgPSBmYWxzZTsKIAogICAg
ICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXll
cigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwpAQCAtNjI3LDMwICs2
MzMsMjcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KGRyYXdPcGFjaXR5KTsKICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5SXNBbmlt
YXRpbmcoZHJhd09wYWNpdHlJc0FuaW1hdGluZyk7CiAKKyAgICAgICAgLy8gTGF5ZXJzIHdpdGhv
dXQgcmVuZGVyU3VyZmFjZXMgZGlyZWN0bHkgaW5oZXJpdCB0aGUgYW5jZXN0b3IncyBjbGlwIHN0
YXR1cy4KKyAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IGFuY2VzdG9yQ2xpcHNTdWJ0
cmVlOworICAgICAgICBpZiAoYW5jZXN0b3JDbGlwc1N1YnRyZWUpCisgICAgICAgICAgICBjbGlw
UmVjdEZvclN1YnRyZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsKKyAgICAgICAgCiAgICAgICAg
IGlmIChsYXllciAhPSByb290TGF5ZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChsYXllci0+cGFy
ZW50KCkpOwogICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCi0gICAg
ICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgY2xpcCByZWN0IGZyb20gdGhlaXIgcGFyZW50
LgotICAgICAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGxheWVyLT5wYXJlbnQoKS0+Y2xpcFJl
Y3QoKSk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGlu
ZygpKQotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsK
LQogICAgICAgICAgICAgLy8gTGF5ZXJzIHdpdGhvdXQgdGhlaXIgb3duIHJlbmRlclN1cmZhY2Ug
d2lsbCByZW5kZXIgaW50byB0aGUgbmVhcmVzdCBhbmNlc3RvciBzdXJmYWNlLgogICAgICAgICAg
ICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tYXNr
c1RvQm91bmRzKCkpIHsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5
ZXJSZWN0OwotCi0gICAgICAgIC8vIElmIHRoZSBsYXllciBhbHJlYWR5IGluaGVyaXRlZCBhIGNs
aXBSZWN0LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRoIGl0IGJlZm9yZQotICAgICAgICAvLyBv
dmVycmlkaW5nIHRoZSBsYXllcidzIGNsaXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZy4KLSAg
ICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICAgICAgY2xpcFJl
Y3QuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKLQotICAgICAgICBsYXllci0+c2V0Q2xp
cFJlY3QoY2xpcFJlY3QpOwotICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1
ZSk7CisgICAgaWYgKGxheWVyQ2xpcHNTdWJ0cmVlKGxheWVyKSkgeworICAgICAgICBzdWJ0cmVl
U2hvdWxkQmVDbGlwcGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVl
ICYmICFsYXllci0+cmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBjbGlwUmVjdEZvclN1
YnRyZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsKKyAgICAgICAgICAgIGNsaXBSZWN0Rm9yU3Vi
dHJlZS5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGNsaXBSZWN0Rm9yU3VidHJlZSA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwogICAg
IH0KIAogICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJh
bnNmb3JtLgpAQCAtNjYwLDE2ICs2NjMsNiBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAg
IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0
aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICBsYXllci0+c2V0U2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0obGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBkcmF3YWJs
ZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlCi0gICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBp
ZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllckNsaXBwaW5nKCkpCi0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2Vj
dChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgIH0gZWxzZQotICAgICAgICBsYXllci0+c2V0
RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwotCiAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8g
RmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KQEAgLTY5OSwz
NCArNjkyLDM2IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAKICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4ID0gY29tcHV0ZVNjcm9sbENv
bXBlbnNhdGlvbk1hdHJpeEZvckNoaWxkcmVuKGxheWVyLCBwYXJlbnRNYXRyaXgsIGN1cnJlbnRT
Y3JvbGxDb21wZW5zYXRpb25NYXRyaXgpOzsKIAorICAgIEludFJlY3QgYWNjdW11bGF0ZWREcmF3
YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZHJlbjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQg
PSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQg
PSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBS
ZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVy
TWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4
LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotCi0gICAgICAgIGlm
IChkcmF3c0NvbnRlbnQpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgp
KSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFj
ZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBkcmF3
YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAg
ICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoY2hpbGRS
ZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAg
ICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRyZWUgPSBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNl
VHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0
SGllcmFyY2h5TWF0cml4LCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
aXBSZWN0Rm9yU3VidHJlZSwgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0
QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRh
bnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgICAgICBpZiAoIWRyYXdhYmxl
Q29udGVudFJlY3RPZkNoaWxkU3VidHJlZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGFjY3Vt
dWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9mQ2hpbGRyZW4udW5pdGUoZHJhd2FibGVDb250ZW50
UmVjdE9mQ2hpbGRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKQogICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChjaGlsZCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVj
dCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgZHJhd2Fi
bGVDb250ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKLSAgICAg
ICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+
bWFza3NUb0JvdW5kcygpIHx8IGxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBJbnRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwotICAg
ICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7
Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJl
Y3QpOwotICAgIH0KKyAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkcmF3YWJsZUNvbnRlbnRSZWN0
IGZvciB0aGlzIHN1YnRyZWUgKHRoZSByZWN0IGlzIGluIHRhcmdldFN1cmZhY2Ugc3BhY2UpCisg
ICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlID0gYWNjdW11bGF0ZWREcmF3
YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZHJlbjsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KQorICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlLnVuaXRlKHRyYW5zZm9ybWVk
TGF5ZXJSZWN0KTsKKyAgICBpZiAoc3VidHJlZVNob3VsZEJlQ2xpcHBlZCkKKyAgICAgICAgZHJh
d2FibGVDb250ZW50UmVjdE9mU3VidHJlZS5pbnRlcnNlY3QoY2xpcFJlY3RGb3JTdWJ0cmVlKTsK
IAorICAgIC8vIENvbXB1dGUgdGhlIGxheWVyJ3MgZHJhd2FibGUgY29udGVudCByZWN0ICh0aGUg
cmVjdCBpcyBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlKQorICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdE9mTGF5ZXIgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICBpZiAoc3VidHJlZVNo
b3VsZEJlQ2xpcHBlZCkKKyAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdE9mTGF5ZXIuaW50ZXJz
ZWN0KGNsaXBSZWN0Rm9yU3VidHJlZSk7CisgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJl
Y3QoZHJhd2FibGVDb250ZW50UmVjdE9mTGF5ZXIpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVt
YWluaW5nIHByb3BlcnRpZXMgZm9yIHRoZSByZW5kZXIgc3VyZmFjZSwgaWYgdGhlIGxheWVyIGhh
cyBvbmUuCiAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gcm9vdExh
eWVyKSB7CiAgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwcGVkQ29udGVudFJlY3QgPSBs
YXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250
ZW50UmVjdCA9IGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWU7CiAgICAgICAgIEZsb2F0UG9p
bnQgc3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNlbnRlcigp
OwogCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBv
cnRpb24gdGhhdCdzIHZpc2libGUuCkBAIC03MzcsNyArNzMyLDcgQEAgc3RhdGljIGJvb2wgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUq
IHJvb3RMYXkKICAgICAgICAgLy8gaXRzIHRhcmdldCBpcyBub3Qga25vd24gb24gdGhlIG1haW4g
dGhyZWFkLCBhbmQgd2Ugc2hvdWxkIG5vdCB1c2UgaXQKICAgICAgICAgLy8gdG8gY2xpcC4KICAg
ICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkgJiYgdHJhbnNmb3JtVG9QYXJlbnRJc0tu
b3duKGxheWVyKSkgewotICAgICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5jbGlwUmVjdCgp
LmlzRW1wdHkoKSAmJiAhY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlICYmICFjbGlwcGVkQ29udGVudFJlY3QuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBzdXJmYWNlQ2xpcFJlY3QgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPmNsaXBS
ZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3Jt
KCkpOwogICAgICAgICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFj
ZUNsaXBSZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTc1NSwxMCArNzUwLDYgQEAgc3RhdGljIGJv
b2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXll
clR5cGUqIHJvb3RMYXkKIAogICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50UmVjdChj
bGlwcGVkQ29udGVudFJlY3QpOwogCi0gICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMg
YSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2UgbmVlZCB0byBhZGp1c3QgaXRzCi0gICAgICAgIC8vIGNs
aXBSZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5
c3RlbS4KLSAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpOwotCiAgICAgICAgIC8vIEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0g
dG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCiAgICAgICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFu
c2Zvcm0oKTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVy
LngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNlbnRlci55
KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKQEAgLTgxNSwxMyAr
ODA2LDEzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgICAgICBBU1NFUlQocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIpOwogICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBsYXllci0+Y2xlYXJS
ZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgbmVpdGhlciB0
aGlzIGxheWVyIG5vciBhbnkgb2YgaXRzIGNoaWxkcmVuIHdlcmUgYWRkZWQsIGVhcmx5IG91dC4K
ICAgICBpZiAoc29ydGluZ1N0YXJ0SW5kZXggPT0gZGVzY2VuZGFudHMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICAvLyBJZiBw
cmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0
aGV5IGNhbiBiZQogICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNl
cnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgcGFyZW50IHRoZW4KQEAgLTgyOSw3
ICs4MjAsNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExh
eWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgIGlmIChkZXNjZW5kYW50cy5z
aXplKCkgJiYgbGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxh
eWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCiAgICAgICAgIHNvcnRMYXllcnMoJmRlc2Nl
bmRhbnRzLmF0KHNvcnRpbmdTdGFydEluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxheWVyU29y
dGVyKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkcmF3YWJsZUNvbnRlbnRSZWN0
T2ZTdWJ0cmVlOwogfQogCiAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyB0aGUgZm9sbG93aW5n
IGZ1bmN0aW9uIHRvIHNldCB2aXNpYmlsaXR5IHJlY3RzIG9uIGEgc2Vjb25kCkBAIC04NjYsMTMg
Kzg1NywxNyBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50
ZXJuYWwoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYQogdm9pZCBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXll
ckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJl
bnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0
cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4
dHVyZVNpemUpCiB7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0
aW9uTWF0cml4OwotICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8
TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LCAwLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKKyAgICBXZWJDb3JlOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihsYXllciwg
cm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHNjcm9sbENvbXBl
bnNhdGlvbk1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dFJlY3QoKSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsIDAsIG1heFRleHR1cmVTaXplKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwq
IHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1
cmVTaXplKQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlv
bk1hdHJpeDsKLSAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPEND
TGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVy
U29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
bGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgIFdlYkNvcmU6OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIs
IHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9uTWF0
cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVT
aXplKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKQEAgLTkxMSw5
ICs5MDYsOSBAQCBzdGF0aWMgYm9vbCBwb2ludElzQ2xpcHBlZEJ5U3VyZmFjZU9yQ2xpcFJlY3Qo
Y29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDTAogICAgICAgICBpZiAoY3VycmVudExh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwgY3Vy
cmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIGN1cnJl
bnRMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgICAgIC8vIE5vdGUgdGhhdCBjbGlwUmVjdHMgYXJlIGFjdHVhbGx5
IGluIHRhcmdldFN1cmZhY2Ugc3BhY2UsIHNvIHRoZSB0cmFuc2Zvcm0gd2UKKyAgICAgICAgLy8g
Tm90ZSB0aGF0IGRyYXdhYmxlQ29udGVudFJlY3RzIGFyZSBhY3R1YWxseSBpbiB0YXJnZXRTdXJm
YWNlIHNwYWNlLCBzbyB0aGUgdHJhbnNmb3JtIHdlCiAgICAgICAgIC8vIGhhdmUgdG8gcHJvdmlk
ZSBpcyB0aGUgdGFyZ2V0IHN1cmZhY2UncyBzY3JlZW5TcGFjZVRyYW5zZm9ybS4KLSAgICAgICAg
aWYgKGN1cnJlbnRMYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiAhcG9pbnRIaXRzUmVjdCh2
aWV3cG9ydFBvaW50LCBjdXJyZW50TGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSwgY3VycmVudExheWVyLT5jbGlwUmVjdCgpKSkKKyAgICAgICAgaWYg
KCFwb2ludEhpdHNSZWN0KHZpZXdwb3J0UG9pbnQsIGN1cnJlbnRMYXllci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBjdXJyZW50TGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBjdXJy
ZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAppbmRleCA3OGU3MDkxNGRhMTI4YTdkODI2MGU1MGQzZTliMzBiNTg5
MmM4ZjQzLi4wNGIyMzc5ZThmZTc4MWVmY2M4OGQyNDIzOWEwZGUxN2Q4ZmQ4NjEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjU5LDggKzI1OSw2IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyCiAgICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmNsZWFyTGF5ZXJMaXN0KCk7CiAgICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXpl
KCkpKTsKIAotICAgIG1fcm9vdExheWVySW1wbC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwotCiAgICAgewogICAgICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIik7CiAgICAgICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2Nj
bHVzaW9uVHJhY2tlci5jcHAKaW5kZXggNjEyNGRkYzljYzhmMDhiNGVhYjEyZjE0ZjQxY2EzMTZm
MzI2ZGEzNy4uZDc2YzFkMTY2Nzg5Mzg5ODYzMjAyZDdlMTljMjZlMjA5ODk4YzEwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC00OTksOCArNDk5LDcgQEAgSW50
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+
OjpsYXllclNjaXNzb3JSZWN0SW4KIHsKICAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogdGFy
Z2V0U3VyZmFjZSA9IG1fc3RhY2subGFzdCgpLnN1cmZhY2U7CiAgICAgRmxvYXRSZWN0IHRvdGFs
U2Npc3NvciA9IHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgaWYgKGxheWVyLT51
c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICB0b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKKyAgICB0b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCkpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRvdGFsU2Npc3Nv
cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggMDY4YTQxMDZiYmYyMWNk
YTVlOWM0NjZkYzQzZDc2YjA0ZjNmMGE3MC4uYzM4ODkzZWNmMWUyOGI0Mjc2YjhmZjM3M2VmZDI1
MWFlZWIwMThjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTk4LDcgKzk4LDYg
QEAgcHVibGljOgogICAgIGJvb2wgc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7IH0KICAg
ICB2b2lkIHNldFNjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhib29sIGFuaW1hdGlu
ZykgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQog
Ci0gICAgLy8gVXNhZ2U6IHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG9uZSBv
ZiB0aGUgdHdvIGNvbmRpdGlvbnMgaXMgdHJ1ZTogKGEpIGNsaXBSZWN0KCkgaXMgZW1wdHksIG9y
IChiKSBvd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkgaXMgZmFsc2Uu
CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153194</attachid>
            <date>2012-07-19 00:27:51 -0700</date>
            <delta_ts>2012-07-20 12:41:21 -0700</delta_ts>
            <desc>Work in progress, well tested, only few issues remain</desc>
            <filename>bug-80622-20120719002751.patch</filename>
            <type>text/plain</type>
            <size>87096</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRh
ZThkYjM5YzU0NzhhMTliMTliNGQ3ZTYxYmM0NmMzM2JiOWYxNGEuLmQ3Y2U3YzBhZDFiMTFhOWI4
ZDc2NjE4NTdkNmIxNjcwNTM3NGM4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC03Nyw3
ICs3Nyw2IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9tYXNrc1Rv
Qm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgLCBtX2RvdWJsZVNpZGVk
KHRydWUpCi0gICAgLCBtX3VzZXNMYXllckNsaXBwaW5nKGZhbHNlKQogICAgICwgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50KGZhbHNlKQogICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkKICAgICAs
IG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDQwNjY4ZjU1NjczN2Y4YzQ5MjdhY2UyNjZlOWM3MWIwMzZmNzA4YzcuLmRiZDdiNzllZjk0
N2RjYjcxYzQ3MDgzMzM4YzhmOTg0NmI3YTJjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE5
NSw5ICsxOTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VQYXJlbnRCYWNrZmFjZVZpc2li
aWxpdHkoYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkpIHsgbV91c2VQYXJlbnRCYWNr
ZmFjZVZpc2liaWxpdHkgPSB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHk7IH0KICAgICBib29s
IHVzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUGFyZW50
QmFja2ZhY2VWaXNpYmlsaXR5OyB9CiAKLSAgICB2b2lkIHNldFVzZXNMYXllckNsaXBwaW5nKGJv
b2wgdXNlc0xheWVyQ2xpcHBpbmcpIHsgbV91c2VzTGF5ZXJDbGlwcGluZyA9IHVzZXNMYXllckNs
aXBwaW5nOyB9Ci0gICAgYm9vbCB1c2VzTGF5ZXJDbGlwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc0xheWVyQ2xpcHBpbmc7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc05vbkNvbXBvc2l0
ZWRDb250ZW50KGJvb2wpOwogICAgIGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsgfQogCkBAIC0yMzIsOCArMjI5LDYg
QEAgcHVibGljOgogICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJ
c0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlz
QW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogCi0gICAgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9Ci0gICAgdm9pZCBzZXRD
bGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgeyBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7
IH0KICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJl
bmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIApAQCAtMzQ3LDggKzM0Miw3IEBAIHByaXZhdGU6CiAg
ICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKIAogICAgIC8vIER1cmluZyBkcmF3aW5n
LCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBi
ZSBkcmF3bi4KLSAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBjbGlwUmVj
dCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKLSAgICAvLyBpdCdzIHRh
cmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBUaGlzIGlzIHRoZSBpbnRl
cnNlY3Rpb24gb2YgdGhlIGxheWVyJ3MgZHJhd2FibGVDb250ZW50UmVjdCBhbmQgZGFtYWdlIChp
ZiBkYW1hZ2UgdHJhY2tpbmcgaXMgZW5hYmxlZCkuCiAgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFj
ZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Nj
cm9sbFBvc2l0aW9uOwpAQCAtMzc0LDcgKzM2OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21h
c2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7
Ci0gICAgYm9vbCBtX3VzZXNMYXllckNsaXBwaW5nOwogICAgIGJvb2wgbV9pc05vbkNvbXBvc2l0
ZWRDb250ZW50OwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBib29sIG1fdXNlUGFyZW50
QmFja2ZhY2VWaXNpYmlsaXR5OwpAQCAtMzkzLDggKzM4Niw2IEBAIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKIAot
ICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCi0gICAgSW50UmVjdCBtX2NsaXBSZWN0
OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMGU3ZDRlMzhjNTZjMWVjY2Q5NmY1
Y2JhZmQ3NGY5ZGU1ZjNkODdkOS4uNzA3YzViNGEzYzFjNDdjZTJkODY0NDM0Yzk2Y2FlNjlkZjY3
N2M5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTE0MSw4ICsxNDEs
NiBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKIAogICAgIC8vIER1cmluZyBk
cmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNo
b3VsZCBiZSBkcmF3bi4KLSAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBj
bGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKLSAgICAvLyBp
dCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KICAgICAvLyBVc2VzIHRoZSBz
cGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9zY2lz
c29yUmVjdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDlhODgzNzZjMmQ2MTVkODcw
YWFlZWVjN2Y0MmE2NzBiMDk4NDk5MGQuLjI5MGE5Y2Q0ODMzMzliMGEyOTc2YWIwZWU2OGQ2Yzc0
NDhiOTJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAgQ0NM
YXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2Up
CiAgICAgLCBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKICAgICAsIG1fZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhmYWxzZSkKLSAgICAsIG1fdXNlc0xheWVyQ2xp
cHBpbmcoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCiAgICAg
LCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMmI5YTQ5YmQzMDM2ZmRmZjRiOGM5NzFkNjJmMDMx
OWQ1Njc4MTM1My4uMjg2OGI4YTIwZWU5YjE0N2QxYzY2ZjUyMWYxMDVlYTczNjZmN2UzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNDQsOSArMTQ0LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdXNlUGFyZW50QmFja2ZhY2VWaXNp
YmlsaXR5KSB7IG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5ID0gdXNlUGFyZW50QmFja2Zh
Y2VWaXNpYmlsaXR5OyB9CiAgICAgYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eTsgfQogCi0gICAgdm9p
ZCBzZXRVc2VzTGF5ZXJDbGlwcGluZyhib29sIHVzZXNMYXllckNsaXBwaW5nKSB7IG1fdXNlc0xh
eWVyQ2xpcHBpbmcgPSB1c2VzTGF5ZXJDbGlwcGluZzsgfQotICAgIGJvb2wgdXNlc0xheWVyQ2xp
cHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3VzZXNMYXllckNsaXBwaW5nOyB9Ci0KICAgICB2b2lk
IHNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KSB7
IG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7IH0KICAg
ICBib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lzTm9uQ29t
cG9zaXRlZENvbnRlbnQ7IH0KIApAQCAtMTc0LDEwICsxNzEsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eUlz
QW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGJvb2wgZHJh
d09wYWNpdHlJc0FuaW1hdGluZykgeyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nOyB9CiAKLSAgICAvLyBVc2FnZTogaWYgdGhpcy0+dXNlc0xheWVyQ2xp
cHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4K
LSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7
IH0KLSAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jbGlwUmVj
dCA9IHJlY3Q7IH0KLQogICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQogCkBAIC0zNDIsNyArMzM1LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsK
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKLSAgICBi
b29sIG1fdXNlc0xheWVyQ2xpcHBpbmc7CiAgICAgYm9vbCBtX2lzTm9uQ29tcG9zaXRlZENvbnRl
bnQ7CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwpAQCAtMzg5LDEyICszODEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9iZXR3ZWVuV2lsbERyYXdBbmREaWREcmF3OwogI2VuZGlmCiAKLSAg
ICAvLyBUaGUgcmVjdCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lzc29yIHdoZW4gdGhpcyBs
YXllciBpcyBkcmF3bi4KLSAgICAvLyBJbmhlcml0ZWQgYnkgdGhlIHBhcmVudCBsYXllciBhbmQg
ZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MKLSAgICAvLyB0byBib3VuZHMu
Ci0gICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgotICAgIEludFJlY3QgbV9jbGlw
UmVjdDsKLQogICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0
c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KICAgICAvLyBVc2VzIHRhcmdl
dCBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZDY1Mzk3ZWVkMTkzMzU4Y2JkZDQzY2MxNTA1MmNh
ZmZkNzIzYmExZC4uMzllOTc1YjRmOGVhY2Q2MmQxMjYyYWU1OTM4YWUyYWMxOWQ0MzQ4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC00NjcsOSArNDY3LDYgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIEND
VGV4dHVyZVVwZGF0ZXImIHUKICAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CiAgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7CiAKLSAgICBJbnRSZWN0
IHJvb3RDbGlwUmVjdChJbnRQb2ludCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSk7Ci0gICAgcm9v
dExheWVyLT5zZXRDbGlwUmVjdChyb290Q2xpcFJlY3QpOwotCiAgICAgTGF5ZXJMaXN0IHVwZGF0
ZUxpc3Q7CiAgICAgdXBkYXRlTGlzdC5hcHBlbmQocm9vdExheWVyKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMjljYTRlNzc1ZmE1Yjc4Y2FmMDgx
MTAzNzBmMmI4MDMwOTJlOWU5Yy4uMTRjZWE3MTlhZDJhZTZmOTFhMTVkMjdjNzMwNDdiNzVlYjA2
MDBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC03
MSwxMSArNzEsNyBAQCBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KExh
eWVyVHlwZSogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdAogICAgIFJlbmRlclN1cmZhY2VU
eXBlKiB0YXJnZXRTdXJmYWNlID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKIAogICAg
IEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UgPSB0YXJnZXRTdXJmYWNl
LT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3NvclJlY3Qp
OwotICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlOwotICAgIGlmIChsYXllci0+dXNlc0xheWVy
Q2xpcHBpbmcoKSkKLSAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Np
c3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JSZWN0SW5UYXJn
ZXRTdXJmYWNlLCB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKKyAgICBGbG9hdFJlY3Qg
Y2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZh
Y2UsIGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoY2xpcEFuZERhbWFnZSk7CiB9CkBAIC05Miw5ICs4OCwxMSBAQCBzdGF0aWMgSW50
UmVjdCBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBybwogCiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY3VycmVudFN1cmZhY2Ut
PmNsaXBSZWN0KCk7CiAKLSAgICAvLyBGb3Igc3VyZmFjZXMsIGVtcHR5IGNsaXBSZWN0IG1lYW5z
IHRoZSBzYW1lIGFzIENDTGF5ZXJJbXBsOjp1c2VzTGF5ZXJDbGlwcGluZyBiZWluZyBmYWxzZQor
ICAgIC8vIEZvciBzdXJmYWNlcywgZW1wdHkgY2xpcFJlY3QgbWVhbnMgdGhhdCB0aGUgc3VyZmFj
ZSBkb2VzIG5vdCBjbGlwIGFueXRoaW5nLgogICAgIGlmIChjbGlwUmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0
KCksIGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAgIGVsc2UKKyAg
ICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpOwogCiAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9
IHRhcmdldFN1cmZhY2UtPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJv
b3RTY2lzc29yUmVjdCk7CiAKQEAgLTE1MywxNCArMTUxLDE4IEBAIHN0YXRpYyBib29sIGlzU3Vy
ZmFjZUJhY2tGYWNlVmlzaWJsZShMYXllclR5cGUqIGxheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUg
Ym9vbCBsYXllckNsaXBzU3VidHJlZShMYXllclR5cGUqIGxheWVyKQoreworICAgIHJldHVybiBs
YXllci0+bWFza3NUb0JvdW5kcygpIHx8IGxheWVyLT5tYXNrTGF5ZXIoKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUNv
bnRlbnRSZWN0KExheWVyVHlwZSogbGF5ZXIpCiB7CiAgICAgQVNTRVJUKGxheWVyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOwogCiAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVy
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7Ci0KLSAgICBpZiAobGF5ZXIt
PnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2Vj
dChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0
LmlzRW1wdHkoKSB8fCBsYXllci0+Y29udGVudEJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKQEAgLTI5MCw3ICsyOTIsNyBAQCBzdGF0aWMgYm9vbCBzdWJ0cmVl
U2hvdWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlz
QWxpZwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIHRoZSBsYXllciBjbGlwcyBp
dHMgZGVzY2VuZGFudHMgYnV0IGl0IGlzIG5vdCBheGlzLWFsaWduZWQgd2l0aCByZXNwZWN0IHRv
IGl0cyBwYXJlbnQuCi0gICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWF4aXNBbGln
bmVkV2l0aFJlc3BlY3RUb1BhcmVudCAmJiBkZXNjZW5kYW50RHJhd3NDb250ZW50KQorICAgIGlm
IChsYXllckNsaXBzU3VidHJlZShsYXllcikgJiYgIWF4aXNBbGlnbmVkV2l0aFJlc3BlY3RUb1Bh
cmVudCAmJiBkZXNjZW5kYW50RHJhd3NDb250ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIElmIHRoZSBsYXllciBoYXMgb3BhY2l0eSAhPSAxIGFuZCBkb2VzIG5vdCBoYXZlIGEg
cHJlc2VydmVzLTNkIHRyYW5zZm9ybSBzdHlsZS4KQEAgLTM4NSw4ICszODcsOSBAQCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4Rm9yQ2hpbGRy
ZW4oQ0NMYXllckltcGwqCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFy
dGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5
IHRyYW5zZm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgYm9vbCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9v
dExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LAorc3Rh
dGljIEludFJlY3QgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHBhcmVudE1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0
cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdEZyb21BbmNlc3RvciwgY29uc3QgYm9vbCBhbmNlc3RvckNsaXBzU3Vi
dHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVy
LCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CkBAIC00OTAsOCArNDkzLDExIEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJU
eXBlKiByb290TGF5CiAgICAgLy8KIAogICAgIGlmIChzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKGxh
eWVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
CisgICAgSW50UmVjdCBjbGlwUmVjdEZvclN1YnRyZWU7CisgICAgYm9vbCBzdWJ0cmVlU2hvdWxk
QmVDbGlwcGVkID0gZmFsc2U7CisgICAgCiAgICAgZmxvYXQgZHJhd09wYWNpdHkgPSBsYXllci0+
b3BhY2l0eSgpOwogICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGxheWVyLT5vcGFj
aXR5SXNBbmltYXRpbmcoKTsKICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJl
bnQoKS0+cHJlc2VydmVzM0QoKSkgewpAQCAtNTE0LDYgKzUyMCw3IEBAIHN0YXRpYyBib29sIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBl
KiByb290TGF5CiAgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54
KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50WigpKTsKICAgICAvLyBMVCA9IFRy
W29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3JdICogTVtsYXll
cl0KICAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7
CisKICAgICAvLyBMVCA9IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdp
bjJhbmNob3JdICogTVtsYXllcl0gKiBUclthbmNob3IyY2VudGVyXQogICAgIGxheWVyTG9jYWxU
cmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVy
LT5hbmNob3JQb2ludFooKSk7CiAKQEAgLTU0NSwxMyArNTUyLDEwIEBAIHN0YXRpYyBib29sIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBl
KiByb290TGF5CiAgICAgLy8gbmV4dEhpZXJhcmNoeU1hdHJpeCB3aWxsIG9ubHkgY2hhbmdlIGlm
IHRoaXMgbGF5ZXIgdXNlcyBhIG5ldyBSZW5kZXJTdXJmYWNlLCBvdGhlcndpc2UgcmVtYWlucyB0
aGUgc2FtZS4KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXh0SGllcmFyY2h5TWF0cml4
ID0gZnVsbEhpZXJhcmNoeU1hdHJpeDsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHBsYWNlIHRvIHNldCB0aGlzCi0gICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBw
aW5nKGZhbHNlKTsKLQogICAgIGlmIChzdWJ0cmVlU2hvdWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZh
Y2UobGF5ZXIsIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKSkpIHsKICAg
ICAgICAgLy8gQ2hlY2sgYmFjay1mYWNlIHZpc2liaWxpdHkgYmVmb3JlIGNvbnRpbnVpbmcgd2l0
aCB0aGlzIHN1cmZhY2UgYW5kIGl0cyBzdWJ0cmVlCiAgICAgICAgIGlmICghbGF5ZXItPmRvdWJs
ZVNpZGVkKCkgJiYgdHJhbnNmb3JtVG9QYXJlbnRJc0tub3duKGxheWVyKSAmJiBpc1N1cmZhY2VC
YWNrRmFjZVZpc2libGUobGF5ZXIsIGNvbWJpbmVkVHJhbnNmb3JtKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICAgICAgaWYg
KCFsYXllci0+cmVuZGVyU3VyZmFjZSgpKQogICAgICAgICAgICAgbGF5ZXItPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKQEAgLTU5OCwxMSArNjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5
CiAgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBjbGlwUmVjdCBjb250cmlidXRlcyB0byB0
aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgYXBwbGllZCBiZWZv
cmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmluZwogICAgICAg
ICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBj
b29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QobGF5
ZXItPnBhcmVudCgpID8gbGF5ZXItPnBhcmVudCgpLT5jbGlwUmVjdCgpIDogbGF5ZXItPmNsaXBS
ZWN0KCkpOworICAgICAgICBpZiAoYW5jZXN0b3JDbGlwc1N1YnRyZWUpCisgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdEZyb21BbmNlc3Rvcik7CiAKLSAgICAg
ICAgLy8gVGhlIGxheWVyJ3MgY2xpcFJlY3QgY2FuIGJlIHJlc2V0IGhlcmUuIFRoZSByZW5kZXJT
dXJmYWNlIHdpbGwgY29ycmVjdGx5IGNsaXAgdGhlIHN1YnRyZWUuCi0gICAgICAgIGxheWVyLT5z
ZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7Ci0gICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChJ
bnRSZWN0KCkpOworICAgICAgICAvLyBUaGUgbmV3IHJlbmRlclN1cmZhY2UgaGVyZSB3aWxsIGNv
cnJlY3RseSBjbGlwIHRoZSBlbnRpcmUgc3VidHJlZS4gU28sIHdlIGRvCisgICAgICAgIC8vIG5v
dCBuZWVkIHRvIGNvbnRpbnVlIHByb3BhZ2F0aW5nIHRoZSBjbGlwcGluZyBzdGF0ZSBmdXJ0aGVy
IGRvd24gdGhlIHRyZWUuIFRoaXMKKyAgICAgICAgLy8gd2F5LCB3ZSBjYW4gYXZvaWQgdHJhbnNm
b3JtaW5nIGNsaXBSZWN0cyBmcm9tIGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHNwYWNlIHRvCisg
ICAgICAgIC8vIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBt
b3JlIHcgPCAwIGhlYWRhY2hlcy4KKyAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IGZh
bHNlOwogCiAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCiAgICAgICAgICAgICBsYXll
ci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CkBA
IC02MzEsMjYgKzYzOCwzMyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0lu
dGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgICAgICAgICAg
QVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7CiAgICAgICAgICAgICBsYXllci0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7CiAKLSAgICAgICAgICAgIC8vIExheWVycyBpbmhlcml0IHRoZSBjbGlwIHJlY3Qg
ZnJvbSB0aGVpciBwYXJlbnQuCi0gICAgICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QobGF5ZXIt
PnBhcmVudCgpLT5jbGlwUmVjdCgpKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkt
PnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXll
ckNsaXBwaW5nKHRydWUpOwotCisgICAgICAgICAgICAvLyBMYXllcnMgd2l0aG91dCByZW5kZXJT
dXJmYWNlcyBkaXJlY3RseSBpbmhlcml0IHRoZSBhbmNlc3RvcidzIGNsaXAgc3RhdHVzLgorICAg
ICAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IGFuY2VzdG9yQ2xpcHNTdWJ0cmVlOwor
ICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlKQorICAgICAgICAgICAgICAgIGNs
aXBSZWN0Rm9yU3VidHJlZSA9IGNsaXBSZWN0RnJvbUFuY2VzdG9yOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBMYXllcnMgd2l0aG91dCB0aGVpciBvd24gcmVuZGVyU3VyZmFjZSB3aWxs
IHJlbmRlciBpbnRvIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHN1cmZhY2UuCiAgICAgICAgICAgICBs
YXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRhcmdldFJlbmRl
clN1cmZhY2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyByb290IGxheWVyIHNwZWNpYWwgY2FzZSBjb2RlIHNob3VsZCBldmVudHVhbGx5IGdvIGF3YXku
IEJ1dCBiZWZvcmUgdGhhdCBpcyB0cnVseSBwb3NzaWJsZSwKKyAgICAgICAgICAgIC8vICAgICAg
ICB0ZXN0cyAob3IgY29kZSkgcmVsYXRlZCB0byBDQ09jY2x1c2lvblRyYWNrZXIgbmVlZCB0byBi
ZSBhZGp1c3RlZCBzbyB0aGF0IHRoZXkgZG8gbm90IHJlcXVpcmUKKyAgICAgICAgICAgIC8vICAg
ICAgICB0aGUgcm9vdExheWVyIHRvIGNsaXA7IHRoZSByb290IGxheWVyJ3MgUmVuZGVyU3VyZmFj
ZSB3b3VsZCBhbHJlYWR5IGNsaXAgYW5kIHNob3VsZCBiZSBlbm91Z2guCisgICAgICAgICAgICBB
U1NFUlQoIWxheWVyLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3JDbGlwc1N1YnRyZWUpOwor
ICAgICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3RG
cm9tQW5jZXN0b3IpOworICAgICAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IHRydWU7
CisgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0g
ICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKLQotICAgICAg
ICAvLyBJZiB0aGUgbGF5ZXIgYWxyZWFkeSBpbmhlcml0ZWQgYSBjbGlwUmVjdCwgd2UgbmVlZCB0
byBpbnRlcnNlY3Qgd2l0aCBpdCBiZWZvcmUKLSAgICAgICAgLy8gb3ZlcnJpZGluZyB0aGUgbGF5
ZXIncyBjbGlwUmVjdCBhbmQgdXNlc0xheWVyQ2xpcHBpbmcuCi0gICAgICAgIGlmIChsYXllci0+
dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChsYXll
ci0+Y2xpcFJlY3QoKSk7Ci0KLSAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0KTsK
LSAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOworICAgIGlmIChsYXll
ckNsaXBzU3VidHJlZShsYXllcikpIHsKKyAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9
IHRydWU7CisgICAgICAgIGlmIChhbmNlc3RvckNsaXBzU3VidHJlZSAmJiAhbGF5ZXItPnJlbmRl
clN1cmZhY2UoKSkgeworICAgICAgICAgICAgY2xpcFJlY3RGb3JTdWJ0cmVlID0gY2xpcFJlY3RG
cm9tQW5jZXN0b3I7CisgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUuaW50ZXJzZWN0KHRy
YW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjbGlwUmVj
dEZvclN1YnRyZWUgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKICAgICB9CiAKICAgICAvLyBOb3Rl
IHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSBpcyBub3QgbmVjZXNz
YXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1RyYW5zZm9ybS4KQEAgLTY2MCwx
NiArNjc0LDYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICBsYXllclNjcmVlblNwYWNl
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5k
cy5oZWlnaHQoKSwgMCk7CiAgICAgbGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGxheWVy
U2NyZWVuU3BhY2VUcmFuc2Zvcm0pOwogCi0gICAgLy8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlz
IGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQotICAgIC8vIFJl
bmRlclN1cmZhY2UgdGhlIGxheWVyIGRyYXdzIGludG8uCi0gICAgaWYgKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSkgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zv
cm1lZExheWVyUmVjdDsKLSAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQot
ICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0
KCkpOwotICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJl
Y3QoSW50UmVjdCgpKTsKLQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0
cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYg
dGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0QuCkBAIC02OTksMzQgKzcwMywzNiBAQCBzdGF0
aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyVHlwZSogcm9vdExheQogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dFNj
cm9sbENvbXBlbnNhdGlvbk1hdHJpeCA9IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25NYXRyaXhG
b3JDaGlsZHJlbihsYXllciwgcGFyZW50TWF0cml4LCBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9u
TWF0cml4KTs7CiAKKyAgICBJbnRSZWN0IGFjY3VtdWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9m
Q2hpbGRyZW47CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCk7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNJbnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUs
IExheWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJh
cmNoeU1hdHJpeCwgbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgbmVhcmVzdEFuY2VzdG9y
VGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5
ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKLQotICAgICAgICBpZiAoZHJhd3NDb250ZW50KSB7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlclN1cmZhY2VUeXBlKiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9
IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgZHJhd2FibGVD
b250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxl
Q29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgIEludFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlID0gY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRl
cm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVy
PihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwg
bmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUs
IHN1YnRyZWVTaG91bGRCZUNsaXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVz
UGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIs
IG1heFRleHR1cmVTaXplKTsKKyAgICAgICAgaWYgKCFkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGls
ZFN1YnRyZWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhY2N1bXVsYXRlZERyYXdhYmxlQ29u
dGVudFJlY3RPZkNoaWxkcmVuLnVuaXRlKGRyYXdhYmxlQ29udGVudFJlY3RPZkNoaWxkU3VidHJl
ZSk7CisgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgICAg
ICAgICBkZXNjZW5kYW50cy5hcHBlbmQoY2hpbGQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5p
dGUoY2hpbGQtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8
fCBsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRS
ZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgZHJhd2FibGVDb250
ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwotICAgICAgICBsYXllci0+
c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKLSAgICB9CisgICAg
Ly8gQ29tcHV0ZSB0aGUgdG90YWwgZHJhd2FibGVDb250ZW50UmVjdCBmb3IgdGhpcyBzdWJ0cmVl
ICh0aGUgcmVjdCBpcyBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlKQorICAgIEludFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdE9mU3VidHJlZSA9IGFjY3VtdWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9m
Q2hpbGRyZW47CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgZHJhd2Fi
bGVDb250ZW50UmVjdE9mU3VidHJlZS51bml0ZSh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAg
aWYgKHN1YnRyZWVTaG91bGRCZUNsaXBwZWQpCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RP
ZlN1YnRyZWUuaW50ZXJzZWN0KGNsaXBSZWN0Rm9yU3VidHJlZSk7CisKKyAgICAvLyBDb21wdXRl
IHRoZSBsYXllcidzIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCAodGhlIHJlY3QgaXMgaW4gdGFyZ2V0
U3VyZmFjZSBzcGFjZSkKKyAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyID0g
dHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgaWYgKHN1YnRyZWVTaG91bGRCZUNsaXBwZWQpCisg
ICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyLmludGVyc2VjdChjbGlwUmVjdEZvclN1
YnRyZWUpOworICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVu
dFJlY3RPZkxheWVyKTsKIAorICAgIC8vIENvbXB1dGUgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVz
IGZvciB0aGUgcmVuZGVyIHN1cmZhY2UsIGlmIHRoZSBsYXllciBoYXMgb25lLgogICAgIGlmIChs
YXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IHJvb3RMYXllcikgewogICAgICAgICBS
ZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7
Ci0gICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29u
dGVudFJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBjbGlwcGVkQ29udGVudFJlY3QgPSBkcmF3YWJs
ZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlOwogICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VDZW50ZXIg
PSBGbG9hdFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKIAogICAgICAgICAvLyBS
ZXN0cmljdCB0aGUgUmVuZGVyU3VyZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNp
YmxlLgpAQCAtNzM3LDcgKzc0Myw4IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAg
IC8vIGl0cyB0YXJnZXQgaXMgbm90IGtub3duIG9uIHRoZSBtYWluIHRocmVhZCwgYW5kIHdlIHNo
b3VsZCBub3QgdXNlIGl0CiAgICAgICAgIC8vIHRvIGNsaXAuCiAgICAgICAgIGlmICghbGF5ZXIt
PnJlcGxpY2FMYXllcigpICYmIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihsYXllcikpIHsKLSAg
ICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkgJiYgIWNs
aXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE5vdGUsIGl0IGlz
IGNvcnJlY3QgdG8gdXNlIGFuY2VzdG9yQ2xpcHNTdWJ0cmVlIGhlcmUsIGJlY2F1c2Ugd2UgYXJl
IGxvb2tpbmcgYXQgdGhpcyBsYXllcidzIHJlbmRlclN1cmZhY2UsIG5vdCB0aGUgbGF5ZXIgaXRz
ZWxmLgorICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlICYmICFjbGlwcGVkQ29u
dGVudFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBzdXJmYWNlQ2xp
cFJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRl
clN1cmZhY2UtPmNsaXBSZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+
b3JpZ2luVHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5p
bnRlcnNlY3Qoc3VyZmFjZUNsaXBSZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTc1NSwxMCArNzYy
LDYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5
cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKIAogICAgICAgICByZW5kZXJTdXJmYWNlLT5z
ZXRDb250ZW50UmVjdChjbGlwcGVkQ29udGVudFJlY3QpOwogCi0gICAgICAgIC8vIFNpbmNlIHRo
ZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2UgbmVlZCB0byBhZGp1c3QgaXRz
Ci0gICAgICAgIC8vIGNsaXBSZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2Un
cyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGxheWVyLT5k
cmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotCiAgICAgICAgIC8vIEFkanVzdCB0aGUgb3JpZ2luIG9m
IHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCiAg
ICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJm
YWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUz
ZChzdXJmYWNlQ2VudGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwg
c3VyZmFjZUNlbnRlci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAw
KTsKQEAgLTgxNSwxMyArODE4LDEzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIpOwogICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICBsYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Ly8gSWYgbmVpdGhlciB0aGlzIGxheWVyIG5vciBhbnkgb2YgaXRzIGNoaWxkcmVuIHdlcmUgYWRk
ZWQsIGVhcmx5IG91dC4KICAgICBpZiAoc29ydGluZ1N0YXJ0SW5kZXggPT0gZGVzY2VuZGFudHMu
c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CiAKICAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMg
aW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZQogICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9u
dC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgcGFyZW50
IHRoZW4KQEAgLTgyOSw3ICs4MzIsMTUgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICBp
ZiAoZGVzY2VuZGFudHMuc2l6ZSgpICYmIGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXIt
PnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQogICAgICAgICBz
b3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdChzb3J0aW5nU3RhcnRJbmRleCksIGRlc2NlbmRhbnRz
LmVuZCgpLCBsYXllclNvcnRlcik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBXaGVuIHdl
IHJldHVybiB0aGlzIHZhbHVlLCBwdXQgaXQgaW4gdGhlIHBhcmVudCdzIHRhcmdldFN1cmZhY2Ug
c3BhY2UsIHNvIHRoYXQgdGhlIHBhcmVudCBjYW4gaW1tZWRpYXRlbHkgdXNlIGl0IHByb3Blcmx5
LgorICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdE9mU3VidHJlZUluUGFyZW50VGFyZ2V0
U3VyZmFjZVNwYWNlOworCisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAg
IGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWVJblBhcmVudFRhcmdldFN1cmZhY2VTcGFjZSA9
IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhd2FibGVDb250ZW50
UmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWVJ
blBhcmVudFRhcmdldFN1cmZhY2VTcGFjZSA9IGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWU7
CisKKyAgICByZXR1cm4gZHJhd2FibGVDb250ZW50UmVjdE9mU3VidHJlZUluUGFyZW50VGFyZ2V0
U3VyZmFjZVNwYWNlOwogfQogCiAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyB0aGUgZm9sbG93
aW5nIGZ1bmN0aW9uIHRvIHNldCB2aXNpYmlsaXR5IHJlY3RzIG9uIGEgc2Vjb25kCkBAIC04NjYs
MTMgKzg3NywxNyBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
SW50ZXJuYWwoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYQogdm9pZCBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIGxheWVyLCBM
YXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5
TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4
VGV4dHVyZVNpemUpCiB7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsQ29tcGVu
c2F0aW9uTWF0cml4OwotICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJu
YWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVs
bEhpZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LCAwLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKKyAgICBXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihsYXll
ciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHNjcm9sbENv
bXBlbnNhdGlvbk1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXll
ckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllcklt
cGwqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJp
eCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZl
Y3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRl
eHR1cmVTaXplKQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNh
dGlvbk1hdHJpeDsKLSAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFs
PENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xh
eWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlN
YXRyaXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgIFdlYkNvcmU6
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5
ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9u
TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1
cmVTaXplKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKQEAgLTkx
MSw5ICs5MjYsOSBAQCBzdGF0aWMgYm9vbCBwb2ludElzQ2xpcHBlZEJ5U3VyZmFjZU9yQ2xpcFJl
Y3QoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDTAogICAgICAgICBpZiAoY3VycmVu
dExheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwg
Y3VycmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIGN1
cnJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgICAgIC8vIE5vdGUgdGhhdCBjbGlwUmVjdHMgYXJlIGFjdHVh
bGx5IGluIHRhcmdldFN1cmZhY2Ugc3BhY2UsIHNvIHRoZSB0cmFuc2Zvcm0gd2UKKyAgICAgICAg
Ly8gTm90ZSB0aGF0IGRyYXdhYmxlQ29udGVudFJlY3RzIGFyZSBhY3R1YWxseSBpbiB0YXJnZXRT
dXJmYWNlIHNwYWNlLCBzbyB0aGUgdHJhbnNmb3JtIHdlCiAgICAgICAgIC8vIGhhdmUgdG8gcHJv
dmlkZSBpcyB0aGUgdGFyZ2V0IHN1cmZhY2UncyBzY3JlZW5TcGFjZVRyYW5zZm9ybS4KLSAgICAg
ICAgaWYgKGN1cnJlbnRMYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiAhcG9pbnRIaXRzUmVj
dCh2aWV3cG9ydFBvaW50LCBjdXJyZW50TGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSwgY3VycmVudExheWVyLT5jbGlwUmVjdCgpKSkKKyAgICAgICAg
aWYgKCFwb2ludEhpdHNSZWN0KHZpZXdwb3J0UG9pbnQsIGN1cnJlbnRMYXllci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBjdXJyZW50TGF5ZXItPmRyYXdh
YmxlQ29udGVudFJlY3QoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBj
dXJyZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA3OGU3MDkxNGRhMTI4YTdkODI2MGU1MGQzZTliMzBi
NTg5MmM4ZjQzLi4wNGIyMzc5ZThmZTc4MWVmY2M4OGQyNDIzOWEwZGUxN2Q4ZmQ4NjEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjU5LDggKzI1OSw2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyCiAgICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CiAgICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRT
aXplKCkpKTsKIAotICAgIG1fcm9vdExheWVySW1wbC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwotCiAgICAgewogICAgICAgICBUUkFDRV9F
VkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIik7CiAgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggNjEyNGRkYzljYzhmMDhiNGVhYjEyZjE0ZjQxY2Ez
MTZmMzI2ZGEzNy4uMDRjNzUwYzNmZjFmZWMxNmE2YjhhOTU1NTY4YWVlZDliZGVlMDNkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0zMjYsNiArMzI2LDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGFkZE9jY2x1c2lvbkJlaGluZExheWVyKFJlZ2lvbiYgcmVnaW9u
LCBjb25zdCBMYXllclR5cGUqIGxheWUKICAgICAgICAgaWYgKHRyYW5zZm9ybWVkUmVjdC53aWR0
aCgpID49IG1pbmltdW1UcmFja2luZ1NpemUud2lkdGgoKSB8fCB0cmFuc2Zvcm1lZFJlY3QuaGVp
Z2h0KCkgPj0gbWluaW11bVRyYWNraW5nU2l6ZS5oZWlnaHQoKSkgewogICAgICAgICAgICAgaWYg
KG9jY2x1ZGluZ1NjcmVlblNwYWNlUmVjdHMpCiAgICAgICAgICAgICAgICAgb2NjbHVkaW5nU2Ny
ZWVuU3BhY2VSZWN0cy0+YXBwZW5kKHRyYW5zZm9ybWVkUmVjdCk7CisKICAgICAgICAgICAgIHJl
Z2lvbi51bml0ZSh0cmFuc2Zvcm1lZFJlY3QpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDQxLDYg
KzQ0Miw3IEBAIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSCiAgICAgaWYgKGxheWVyVHJhbnNmb3Jt
c1RvVGFyZ2V0S25vd24obGF5ZXIpKQogICAgICAgICB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21w
dXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJm
YWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRT
dXJmYWNlKGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQpOwogCisKICAg
ICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5vY2NsdWRlZEluVGFy
Z2V0KTsKIH0KIApAQCAtNDk3LDExICs0OTksMTMgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udHJpYnUK
IHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46OmxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiBs
YXllcikgY29uc3QKIHsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0U3VyZmFj
ZSA9IG1fc3RhY2subGFzdCgpLnN1cmZhY2U7Ci0gICAgRmxvYXRSZWN0IHRvdGFsU2Npc3NvciA9
IHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJD
bGlwcGluZygpKQotICAgICAgICB0b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVj
dCgpKTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0b3RhbFNjaXNzb3IpOworICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCByZW1vdmUgdGhpcyBoZWxwZXIgZnVuY3Rpb24sIGJ1dCB1bml0IHRl
c3RzIGN1cnJlbnRseSBvdmVycmlkZSB0aGlzCisgICAgLy8gICAgICAgIGZ1bmN0aW9uLCBhbmQg
dGhleSBuZWVkIHRvIGJlIHZlcmlmaWVkL2FkanVzdGVkIGJlZm9yZSBpdCBjYW4gYmUgcmVtb3Zl
ZC4KKyAgICByZXR1cm4gbGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgLy8gY29uc3QgUmVuZGVy
U3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOworICAg
IC8vIEZsb2F0UmVjdCB0b3RhbFNjaXNzb3IgPSB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgp
OworICAgIC8vIHRvdGFsU2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJl
Y3QoKSk7CisgICAgLy8gcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodG90YWxTY2lzc29yKTsKIH0K
IAogLy8gRGVjbGFyZSB0aGUgcG9zc2libGUgZnVuY3Rpb25zIGhlcmUgZm9yIHRoZSBsaW5rZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDA2OGE0MTA2YmJmMjFjZGE1ZTljNDY2
ZGM0M2Q3NmIwNGYzZjBhNzAuLmMzODg5M2VjZjFlMjhiNDI3NmI4ZmYzNzNlZmQyNTFhZWViMDE4
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC05OCw3ICs5OCw2IEBAIHB1Ymxp
YzoKICAgICBib29sIHNjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBz
ZXRTY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmcgPSBhbmltYXRpbmc7IH0KIAotICAgIC8v
IFVzYWdlOiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZCBpZiBvbmUgb2YgdGhlIHR3
byBjb25kaXRpb25zIGlzIHRydWU6IChhKSBjbGlwUmVjdCgpIGlzIGVtcHR5LCBvciAoYikgb3du
aW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpIGlzIGZhbHNlLgogICAgIHZv
aWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggODkyZGE0ZjJmNGI2YmVj
YWQ4M2NlNmVmMDUzY2M0NDVkNDQ4ODg4Ni4uZThlMmY1YmUyYzcxMDMzZjdhZTNkNjVhODIzYjQx
MWJiOWZiOGQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
ckltcGxUZXN0LmNwcApAQCAtMTY3LDggKzE2Nyw2IEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2
ZXJpZnlMYXllckNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAKICAgICAvLyBUaGVzZSBwcm9w
ZXJ0aWVzIGFyZSBpbnRlcm5hbCwgYW5kIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCAiY2hhbmdl
IiB3aGVuIHRoZXkgYXJlIHVzZWQuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElE
X05PVF9DSEFOR0Uocm9vdC0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7Ci0gICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0Uocm9vdC0+c2V0Q2xpcFJl
Y3QoYXJiaXRyYXJ5SW50UmVjdCkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJ
RF9OT1RfQ0hBTkdFKHJvb3QtPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpKTsKICAgICBFWEVD
VVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXREcmF3T3BhY2l0
eShhcmJpdHJhcnlOdW1iZXIpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURf
Tk9UX0NIQU5HRShyb290LT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApKTsKICAgICBFWEVDVVRF
X0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXREcmF3VHJhbnNmb3Jt
KGFyYml0cmFyeVRyYW5zZm9ybSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKaW5kZXggODZhMzc0MzI1NWViMmE4NmMxNjdk
NTA0NjRkZWRiZmU0ZjcxZTQ0MS4uNzZkYzQyNWFhOWY2YjFlMjk0NDBlMWNhZjVhYzgwOWUyNDc2
OWZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRl
cmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJ
dGVyYXRvclRlc3QuY3BwCkBAIC01OCw3ICs1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9k
cmF3c0NvbnRlbnQodHJ1ZSkKICAgICB7CiAgICAgICAgIHNldEJvdW5kcyhJbnRTaXplKDEwMCwg
MTAwKSk7Ci0gICAgICAgIHNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpOworICAgICAgICBzZXRQb3NpdGlvbihJbnRQb2ludDo6emVybygpKTsKKyAgICAgICAg
c2V0QW5jaG9yUG9pbnQoSW50UG9pbnQ6Onplcm8oKSk7CiAgICAgfQogCiAgICAgYm9vbCBtX2Ry
YXdzQ29udGVudDsKQEAgLTIzOSw2ICsyNDAsNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3Qs
IGNvbXBsZXhUcmVlTXVsdGlTdXJmYWNlKQogICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4g
cm9vdDIzMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKIAogICAgIHJvb3RMYXllci0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHJvb3RMYXllci0+Ym91bmRzKCkpKTsK
IAogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOwogICAgIHJvb3RMYXllci0+YWRkQ2hp
bGQocm9vdDIpOwpAQCAtMjU2LDYgKzI1OCw3IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwg
Y29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290
TGF5ZXIuZ2V0KCkpOworICAgIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggNTQ0MDk1MTRjZTYzMzg5ZDA4
YTZkMTdlZGU2YjhhYjk3NjdiOGQ0ZC4uODgxZDQyMDQ2NjY2MzBmNzQzZWQxNmU4YzJhOTkwZWQy
Y2ZmOGYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC03Nyw2ICs3NywxMSBAQCB2b2lkIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSog
cm9vdExheWVyKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAg
QVNTRVJUKHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlQoIXJvb3RMYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByb290TGF5ZXItPmJvdW5kcygpKSk7
CisgICAgCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBk
dW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1
cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CkBAIC0xMjUsNiArMTMwLDcgQEAgUGFzc093
blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpCiAgICAg
Y2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKICAgICByb290LT5hZGRDaGls
ZChjaGlsZC5yZWxlYXNlKCkpOwogICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKIAogICAgIHJldHVybiByb290LnJlbGVhc2UoKTsK
IH0KQEAgLTMzNSwyNCArMzQxLDI3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCiAKICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRMYXllclRyYW5zZm9ybTsKLSAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNk
KDIuMCwgMi4wLCAxLjApOworICAgIHBhcmVudExheWVyVHJhbnNmb3JtLnNjYWxlM2QoMS4wLCAx
LjAsIDEuMCk7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25U
b0FuY2hvcjsKLSAgICBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDMu
MCk7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoMjUsIDMwKTsKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKLSAgICBwYXJl
bnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAgcGFyZW50U3Vi
bGF5ZXJNYXRyaXguc2NhbGUzZCgxLjAsIDEuMCwgMy4zKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOwotICAgIHBhcmVudFRyYW5zbGF0aW9u
VG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQ2Vu
dGVyLnRyYW5zbGF0ZSg1MCwgNjApOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRM
YXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCiAgICAg
ICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1hdHJp
eCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworCiAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyOwogICAgIGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjApOworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg0LjAsIDUuMCk7CiAKICAgICAvLyBDaGlsZCdzIHJl
bmRlciBzdXJmYWNlIHNob3VsZCBub3QgZXhpc3QgeWV0LgogICAgIEFTU0VSVF9GQUxTRShjaGls
ZC0+cmVuZGVyU3VyZmFjZSgpKTsKIAotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgs
IEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxv
YXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDI1LjBmLCAzMC4wZiksIEludFNpemUo
MTAwLCAxMjApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsK
LSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQ
b2ludCgtMC41ZiwgLTAuNWYpLCBJbnRTaXplKDEsIDEpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoOCwgMTApLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwogCiAgICAgLy8gUmVuZGVyIHN1cmZhY2Ugc2hv
dWxkIGhhdmUgYmVlbiBjcmVhdGVkIG5vdy4KQEAgLTM2NCwxOTMgKzM3MywxNiBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJT
dXJmYWNlKQogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKICAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOwogCi0gICAgLy8gV2l0aG91dCBjbGlwcGluZywgdGhlIG9yaWdp
biB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSkg
c2hvdWxkIGJlIHRoZSBzYW1lLgogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5v
cmlnaW5UcmFuc2Zvcm0oKSk7Ci0gICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRy
YXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBCZWNhdXNlIHRoZSBncmFuZENoaWxkIGlzIHRoZSBv
bmx5IGRyYXdhYmxlIGNvbnRlbnQsIHRoZSBjaGlsZCdzIHJlbmRlclN1cmZhY2Ugd2lsbCB0aWdo
dGVuIGl0cyBib3VuZHMgdG8gdGhlIGdyYW5kQ2hpbGQuCisgICAgLy8gVGhlcmVmb3JlLCB0aGUg
ZHJhdyB0cmFuc2Zvcm0gd2lsbCBoYXZlIGEgdHJhbnNsYXRpb24gb2YgaGFsZi13aWR0aCwgaGFs
Zi1oZWlnaHQgb2YgdGhlIGdyYW5kQ2hpbGQncyBib3VuZHMuCisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKIAogICAgIC8vIFRoZSBzY3JlZW4gc3BhY2UgaXMgdGhlIHNhbWUgYXMgdGhlIHRh
cmdldCBzaW5jZSB0aGUgY2hpbGQgc3VyZmFjZSBkcmF3cyBpbnRvIHRoZSByb290LgogICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0K
IAotVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdE5vQ2xpcCkKLXsK
LSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7Ci0K
LSAgICAvKgotICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwK
LSAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKLSAgICAgICAgIHwgIHwgICAgICAgICAy
IHwgICAgIHwKLSAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICB8
ICB8IHwgICAzICAgICAgICAgICAgICAgfAotICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0t
LS0tLSsKLSAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKLSAgICAgICAgIHwgICstLS0t
LS0tLS0tLSsgICAgIHwKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LQotICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKLSAgICAgKi8KLSAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
Ci0KLSAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKLSAgICBJbnRSZWN0IGNo
aWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7Ci0gICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1
LCAxNTAsIDE1MCk7Ci0KLSAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9v
dC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOwotICAgIHJvb3QtPnNl
dEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7Ci0g
ICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0Lndp
ZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOwotCi0gICAgY2hpbGQtPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOwotICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNo
aWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKLSAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVm
KTsKLSAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxk
UmVjdC5oZWlnaHQoKSkpOwotICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0KLSAg
ICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKLSAgICBncmFu
ZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hp
bGRSZWN0LnkoKSkpOwotICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hp
bGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7Ci0gICAgZ3JhbmRDaGls
ZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotCi0gICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0g
Y2hpbGQuZ2V0KCk7Ci0gICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxk
LmdldCgpOwotCi0gICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKLSAg
ICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOwotCi0gICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICB7Ci0gICAgICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwq
PiBsYXllckxpc3Q7Ci0gICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAg
ICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXll
ckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICAgICAgRmxv
YXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5y
ZW5kZXJTdXJmYWNlKCkpOwotICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7
Ci0gICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAg
Ci0gICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAyVSk7Ci0gICAg
Ci0gICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwot
Ci0gICAgLy8gTGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9uIG9mIGFsbCBpdHMgY2hpbGRyZW4n
cyBib3VuZHMKLSAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGls
ZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKLSAgICBBU1NFUlRfRVEoZ3Jh
bmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KLSAgICBBU1NF
UlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKLSAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3Qo
KSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAgCi0gICAgQVNTRVJUX0ZBTFNFKHJvb3QtPnVz
ZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVy
Q2xpcHBpbmcoKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNs
aXBwaW5nKCkpOwotICAgIAotICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgotICAgIElu
dFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3REYW1hZ2UpOwotICAgIAotICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0gICAgLy8gY2hpbGQg
c3VyZmFjZSBkb2Vzbid0IGhhdmUgYSBjbGlwIHJlY3QsIHRoZXJlZm9yZSBpdCB3aWxsIGJlIGNv
bXB1dGVkIGFzIGludGVyc2VjdGlvbgotICAgIC8vIGJldHdlZW4gcm9vdCBzdXJmYWNlJ3MgY29u
dGVudHJlY3QgYW5kIGNoaWxkIHN1cmZhY2UncyBkcmF3YWJsZSBjb250ZW50IHJlY3QuCi0gICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAt
IGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOwotCi0g
ICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKLQot
ICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVy
IHN0YXJ0cyBhdCBhbiBvZmZzZXQuCi0gICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywg
aXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KLSAgICAvLyAod2hp
Y2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAotICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVj
dC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3Qu
eSgpKSk7Ci0KLSAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3NvciBy
ZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKLSAgICAvLyBvZiBpdHMgb3duCi0gICAg
RVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9v
dFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRS
ZWN0LnkoKSkpOwotICAgIAotICAgIC8vIEVtcHR5IGRhbWFnZQotICAgIHJvb3REYW1hZ2UgPSBJ
bnRSZWN0KDAsIDAsIDAsIDApOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
KTsKLSAgICAKLSAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgotICAgIEVYUEVD
VF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOwotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICAKLSAgICBFWFBF
Q1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAg
ICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7Ci0gICAgCi0gICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCi0gICAgcm9v
dERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOwotICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290RGFtYWdlKTsKLSAgICAKLSAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVk
IGZvciByb290Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KLSAgICAvLyBFbnRpcmUgZGFtYWdl
IHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7Ci0gICAg
Ci0gICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKLSAgICBFWFBF
Q1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7Ci0KLSAgICAvLyBFbnRpcmUg
ZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNl
dAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFt
YWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwg
cm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBHcmFu
ZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVj
dCBpcyBpZGVudGljYWwgdG8gY2hpbGQncwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9v
dERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1h
Z2UuaGVpZ2h0KCkpKTsKLQotICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAotICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgcm9vdERhbWFnZSk7Ci0gICAgCi0gICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21w
dXRlZCBmb3Igcm9vdAotICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0gICAgLy8gRW50aXJlIGRh
bWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCi0gICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwot
ICAgIAotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCi0gICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwotCi0gICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBv
ZmZzZXQKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwotCi0gICAgLy8g
R3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29y
IHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKLSAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAot
ICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKLSAgICAKLSAgICAvLyBTY2lzc29ycyBhcmUgbm90
IGNvbXB1dGVkIGZvciByb290Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KLSAgICAvLyBSb290
IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2ls
bCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KLSAgICAvLyBSZXN1bHQgaXMgdGhh
dCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQotICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgo
KSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7
Ci0gICAgCi0gICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBj
b250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQotICAgIC8v
IFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVy
IGJvdW5kYXJ5Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFn
ZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKLQotICAgIC8vIENo
aWxkcmVuJ3MgY29udGVudCByZWN0cyBhcmUgYmlnZ2VyIHRoYW4gdGhlIHJvb3QncyBzbyB0aGV5
IGRvbid0IGNsaXAgdGhlIGRhbWFnZSByZWN0LCBidXQgY2hhbmdlIGl0cyBvZmZzZXQuCi0gICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFt
YWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKLSAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgp
LCByb290RGFtYWdlLmhlaWdodCgpKSk7Ci19Ci0KIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CkBAIC02MjgsMzkgKzQ2MCwyNyBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXApCiAgICAgCiAgICAg
RVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAyVSk7CiAgICAgCi0gICAg
Ly8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcwotICAgIEFTU0VSVF9FUShyb290
LT5jbGlwUmVjdCgpLCByb290UmVjdCk7Ci0KLSAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEg
dW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcwotICAgIEFTU0VSVF9FUShjaGlsZFB0
ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENo
aWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWln
aHQoKSkpOwotICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKLQotICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNs
aXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCisgICAgQVNTRVJUX0VRKHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOwogICAgIC8vIENoaWxkIHN1cmZh
Y2UncyBjbGlwcGluZyByZWN0IGlzIG5vdyBzZXQgdG8gcm9vdCdzCiAgICAgQVNTRVJUX0VRKGNo
aWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKICAgICAKLSAg
ICBBU1NFUlRfVFJVRShyb290LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICBBU1NFUlRfRkFM
U0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEFTU0VSVF9GQUxTRShncmFu
ZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICAKICAgICAvLyBEYW1hZ2UgdGhl
IGVudGlyZSBzY3JlZW4KICAgICBJbnRSZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOwogICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKICAgICAKLSAgICBFWFBFQ1RfRVEocm9v
dC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworICAgIEFTU0VSVF9FUShyb290LT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
ICAgIC8vIENoaWxkJ3MgcmVuZGVyU3VyZmFjZSB3b3VsZCBoYXZlIGV4cGFuZGVkIHRvIGluY2x1
ZGUgdGhlIDE1MHgxNTAgZ3JhbmRDaGlsZCBsb2NhdGVkIGF0ICg1LCA1KSwgYW5kIHRoZW4gaGF2
ZSBiZWVuIGNsaXBwZWQgYnkgdGhlIHBhcmVudC4KKyAgICBJbnRSZWN0IGV4cGVjdGVkQ2hpbGRS
ZW5kZXJTdXJmYWNlU2Npc3NvciA9IGludGVyc2VjdGlvbihyb290UmVjdCwgSW50UmVjdCgxMCwg
MTAsIDE1NSwgMTU1KSk7CisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIGV4cGVjdGVkQ2hpbGRSZW5kZXJTdXJmYWNlU2Npc3Nvcik7
CiAgICAgCiAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJl
Y3QpKTsKIAotICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNo
aWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCi0gICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFz
IGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KLSAg
ICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3Ig
cmVjdAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisgICAgLy8gVGhlIGNoaWxkIGxheWVyIGlzIG5vdCBjbGlwcGVkIGJ5
IGFueXRoaW5nICh0aGF0IGNsaXAgaXMgYWxyZWFkeSByZXByZXNlbnRlZCBieSB0aGUgcm9vdFN1
cmZhY2UgY2xpcHBpbmcgdGhlIGNoaWxkJ3Mgc3VyZmFjZSkKKyAgICAvLyBTbyBoZXJlLCB0aGUg
ZXhwZWN0ZWQgc2Npc3NvciBpcyBqdXN0IHRoZSBjaGlsZCBsYXllcidzIHJlY3QgZXhwcmVzc2Vk
IGluIHRhcmdldFN1cmZhY2UgKGNoaWxkIHN1cmZhY2UpIHNwYWNlLgorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCBjaGlsZFJlY3Qud2lkdGgoKSwg
Y2hpbGRSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhl
IHNhbWUgc2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKLSAgICAvLyBv
ZiBpdHMgb3duCi0gICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0Lmhl
aWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIC8vIEdyYW5kIGNoaWxkIGlzIChpbmRpcmVj
dGx5KSBjbGlwcGVkIGJ5IHRoZSByb290IHN1cmZhY2UuIEJ1dCB0aGUgc2Npc3NvciBpcyBleHBy
ZXNzZWQgaW4gdGhlIHRhcmdldFN1cmZhY2UgKGNoaWxkIHN1cmZhY2UpIHNwYWNlLgorICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUs
IDUsIDg1LCA4NSkpOwogICAgIAogICAgIC8vIEVtcHR5IGRhbWFnZQogICAgIHJvb3REYW1hZ2Ug
PSBJbnRSZWN0KDAsIDAsIDAsIDApOwpAQCAtNjkwLDggKzUxMCw4IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAog
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CiAKLSAgICAvLyBHcmFuZCBj
aGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBp
cyBpZGVudGljYWwgdG8gY2hpbGQncwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERh
bWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2Uu
aGVpZ2h0KCkpKTsKKyAgICAvLyBHcmFuZCBjaGlsZCBzY2lzc29yIGlzIHRoZSBkYW1hZ2UgaW50
ZXJzZWN0ZWQgd2l0aCB0aGUgY2xpcHBlZCBncmFuZENoaWxkIGxheWVyIHJlY3QgKGV4cHJlc3Nl
ZCBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlKS4KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCg1LCA1LCAxNSwgMTUpKTsKIAogICAgIC8vIFBhcnRpYWwg
ZGFtYWdlIGJleW9uZCBjaGlsZAogICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAs
IDgwKTsKQEAgLTcwNiwxMSArNTI2LDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSBsYXllcgogICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFt
YWdlKTsKIAotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBi
dXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVp
Z2h0KCkpKTsKKyAgICAvLyBDaGlsZCBsYXllciBvdmVybGFwcyBhIHBvcnRpb24gb2YgdGhlIGRh
bWFnZSByZWN0LgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgp
IC0gY2hpbGRSZWN0LnkoKSwgY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkp
OwogCi0gICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNv
IGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKLSAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisgICAgLy8gR3JhbmQgY2hpbGQgc2Npc3Nv
ciBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIGRhbWFnZSBhbmQgZ3JhbmRDaGlsZCByZWN0LCBleHBy
ZXNzZWQgaW4gY2hpbGQgc3VyZmFjZS4KKyAgICAvLyBUaGUgZGFtYWdlIGZpdHMgZW50aXJlbHkg
d2l0aGluIHRoZSBncmFuZENoaWxkLgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShncmFuZENoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUsIDUsIDc1LCA3NSkpOwogCiAgICAgLy8gUGFy
dGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKICAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAs
IDExMCwgMTEwKTsKQEAgLTcxOSwxNyArNTQwLDEzIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNv
bXB1dGVkIGZvciByb290CiAgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CiAKLSAgICAvLyBSb290IHN1
cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBi
ZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KLSAgICAvLyBSZXN1bHQgaXMgdGhhdCBy
b290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIC8v
IFJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5LgogICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgo
KSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7
Ci0gICAgCi0gICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBj
b250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQotICAgIC8v
IFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVy
IGJvdW5kYXJ5CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFn
ZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKIAogICAgIC8vIE5v
dyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAot
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3RE
YW1hZ2UueSgpKSk7Ci0gICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJl
Y3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShj
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgY2hpbGRSZWN0LndpZHRoKCks
IGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShncmFuZENoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUsIDUsIDEwNSwgMTA1KSk7CiB9CiAKIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJh
bnNmb3JtKQpAQCAtODE4LDM4ICs2MzUsMjYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwQW5kU3BhY2VUcmFuc2Zvcm0pCiAgICAgCiAgICAgRVhQ
RUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAzVSk7CiAgICAgCi0gICAgLy8g
Tm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcwotICAgIEFTU0VSVF9FUShyb290LT5j
bGlwUmVjdCgpLCByb290UmVjdCk7Ci0KLSAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0
KCksIEludFJlY3QoMCwgMCwgY2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCkg
LCBjaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIC8vIEdy
YW5kY2hpbGQgbm93IGNsaXBzCi0gICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0
KCksIEludFJlY3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lk
dGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKLQot
ICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOwotCisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOwogICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlw
cGluZyByZWN0IGlzIG5vdyBzZXQgdG8gcm9vdCdzCi0gICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5y
ZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKLSAgICAKLSAgICBBU1NFUlRf
VFJVRShyb290LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICBBU1NFUlRfRkFMU0UoY2hpbGRQ
dHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRy
LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoY2hpbGRQdHIt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOwogICAgIAogICAgIC8vIERh
bWFnZSB0aGUgZW50aXJlIHNjcmVlbgogICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7
CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOwogICAgIAotICAgIEVYUEVD
VF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOwotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgQVNTRVJUX0VRKHJv
b3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisgICAgLy8gQ2hpbGQncyByZW5kZXJTdXJmYWNlIHdvdWxkIGhhdmUgZXhwYW5kZWQg
dG8gaW5jbHVkZSB0aGUgZ3JhbmRDaGlsZDEgYW5kIGdyYW5kQ2hpbGQyLCBhbmQgdGhlbiBoYXZl
IGJlZW4gY2xpcHBlZCBieSB0aGUgcGFyZW50LgorICAgIEludFJlY3QgZXhwZWN0ZWRDaGlsZFJl
bmRlclN1cmZhY2VTY2lzc29yID0gaW50ZXJzZWN0aW9uKHJvb3RSZWN0LCBJbnRSZWN0KDEwLCAx
MCwgMTYwLCAxNjApKTsKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgZXhwZWN0ZWRDaGlsZFJlbmRlclN1cmZhY2VTY2lzc29yKTsK
ICAgICAKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVj
dCkpOwogCi0gICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hp
bGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KLSAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMg
Ym91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgotICAg
IC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciBy
ZWN0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNo
aWxkUmVjdC55KCkpKTsKKyAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgbm90IGNsaXBwZWQgYnkg
YW55dGhpbmcgKHRoYXQgY2xpcCBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IHRoZSByb290U3Vy
ZmFjZSBjbGlwcGluZyB0aGUgY2hpbGQncyBzdXJmYWNlKQorICAgIC8vIFNvIGhlcmUsIHRoZSBl
eHBlY3RlZCBzY2lzc29yIGlzIGp1c3QgdGhlIGNoaWxkIGxheWVyJ3MgcmVjdCBleHByZXNzZWQg
aW4gdGFyZ2V0U3VyZmFjZSAoY2hpbGQgc3VyZmFjZSkgc3BhY2UuCisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGNoaWxkUmVjdC53aWR0aCgpLCBj
aGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIC8vIEdyYW5kIGNoaWxkIGlzIG5vdyBzY2lzc29y
ZWQgYnkgdGhlIHJlbmRlciBzdXJmYWNlCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGRyYXdzIHRv
IGl0cyBvd24gcmVuZGVyIHN1cmZhY2UsIHNvIHRoZSBzY2lzc29yUmVjdCBpcyBpbiB0aGF0IHN1
cmZhY2UncyBzcGFjZS4KICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSAtIGdyYW5k
Q2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpIC0gZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CiAgICAgCiAgICAgLy8gRW1wdHkgZGFtYWdlCkBAIC04OTYsOCArNzAx
LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlw
QW5kU3BhY2VUcmFuc2Zvcm0pCiAgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0
aGUgbGF5ZXIKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7
CiAKLSAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdp
dGggZGlmZmVyZW50IG9mZnNldAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgp
IC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgp
KSk7CisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCBp
dCBpcyBzdGlsbCBjbGlwcGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdC4KKyAgICBFWFBFQ1Rf
SU5UX1JFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIGNoaWxk
UmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIEdyYW5kIGNoaWxk
IG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMgd2VsbCBhcyByb290
CiAgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOwpAQCAtOTE3LDggKzcyMiw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJh
bnNmb3JtKQogICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBl
ZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0
aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkp
KTsKIAotICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNl
cyBjb250ZW50UmVjdAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hp
bGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5o
ZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGNoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0Lngo
KSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBjaGlsZFJlY3Qud2lkdGgoKSwgY2hp
bGRSZWN0LmhlaWdodCgpKSk7CiAKICAgICAvLyBHcmFuZGNoaWxkJ3Mgc2Npc3NvciByZWN0IGlz
IGNsaXBwZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlCiAgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgp
LCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdy
YW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0Lnko
KSkpOwpAQCAtMTEzOSwxMSArOTQzLDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RGb3JDbGlwTGF5ZXIpCiAgICAgcmVuZGVyU3VyZmFj
ZTEtPnNldE9wYWNpdHkoMC45Zik7CiAKICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJv
KCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMS5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxz
ZSk7CiAKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPnNl
dENsaXBSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7CisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMo
KSkpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTEpOwogICAgIHJlbmRlclN1
cmZhY2UxLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENo
aWxkKGNoaWxkKTsKQEAgLTEyMDEsMTEgKzEwMDYsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRlclN1cmZhY2UpCiAgICAgcmVuZGVyU3VyZmFjZTEt
PnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKIAogICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsK
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZhY2UxLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQ
b2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAx
MCksIGZhbHNlKTsKIAogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdCgwLCAwLCAxMCwgMTApKTsKKyAgICBwYXJlbnQtPnJl
bmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChyZW5kZXJTdXJmYWNlMSk7CiAgICAg
cmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxkKTsKIApAQCAtMTU5NCwxNSArMTQwMCwxOSBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlv
bkZvckZpeGVkUG9zaXRpb25MYXllcldpdAogICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZp
eGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CiAgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCg4LCA2KSk7CiAgICAgZ3JhbmRDaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRy
dWUpOwotICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxNDAsIDEy
MCkpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MCwgNjAp
KTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKICAg
ICBmaXhlZFBvc2l0aW9uQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllcih0cnVlKTsKICAg
ICBmaXhlZFBvc2l0aW9uQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKIAogICAgIC8vIFRo
ZSBhZGRpdGlvbmFsIHJvdGF0aW9ucywgd2hpY2ggYXJlIG5vbi1jb21tdXRhdGl2ZSB3aXRoIHRy
YW5zbGF0aW9ucywgaGVscCB0bwogICAgIC8vIHZlcmlmeSB0aGF0IHdlIGhhdmUgY29ycmVjdCBv
cmRlci1vZi1vcGVyYXRpb25zIGluIHRoZSBmaW5hbCBzY3JvbGwgY29tcGVuc2F0aW9uLgorICAg
IC8vIE5vdGUgdGhhdCByb3RhdGluZyBhYm91dCB0aGUgY2VudGVyIG9mIHRoZSBsYXllciBlbnN1
cmVzIHdlIGRvIG5vdCBhY2NpZGVudGFsbHkKKyAgICAvLyBjbGlwIGF3YXkgbGF5ZXJzIHRoYXQg
d2Ugd2FudCB0byB0ZXN0LgogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uQWJv
dXRaOworICAgIHJvdGF0aW9uQWJvdXRaLnRyYW5zbGF0ZSg1MCwgNTApOwogICAgIHJvdGF0aW9u
QWJvdXRaLnJvdGF0ZTNkKDAsIDAsIDkwKTsKKyAgICByb3RhdGlvbkFib3V0Wi50cmFuc2xhdGUo
LTUwLCAtNTApOwogICAgIGdyYW5kQ2hpbGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbkFib3V0Wik7
CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRUcmFuc2Zvcm0ocm90YXRpb25BYm91dFopOwogCkBA
IC0xNjIxLDcgKzE0MzEsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdAogICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKIAogICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkU3VyZmFjZU9yaWdpblRyYW5zZm9y
bTsKLSAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJh
bnNsYXRlKDE0MCwgMTIwKTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFN1cmZhY2VPcmln
aW5UcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA2MCk7CiAgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hp
bGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKIAogICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3Jt
OwpAQCAtMTY2Miw3ICsxNDcyLDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXQKICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wb3VuZE9yaWdpblRyYW5zZm9ybTsgLy8gdHJhbnNmb3Jt
IGZyb20gZ3JlYXRHcmFuZENoaWxkU3VyZmFjZSdzIG9yaWdpbiB0byB0aGUgcm9vdCBzdXJmYWNl
LgogICAgIGNvbXBvdW5kT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSg4LCA2KTsgLy8gb3JpZ2lu
IHRyYW5zbGF0aW9uIG9mIGdyYW5kQ2hpbGQKICAgICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS5t
dWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIHJvdGF0aW9uIG9mIGdyYW5kQ2hpbGQKLSAgICBj
b21wb3VuZE9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoMTQwLCAxMjApOyAvLyBvcmlnaW4gdHJh
bnNsYXRpb24gb2YgZ3JlYXRHcmFuZENoaWxkCisgICAgY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlKDQwLCA2MCk7IC8vIG9yaWdpbiB0cmFuc2xhdGlvbiBvZiBncmVhdEdyYW5kQ2hp
bGQKICAgICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7
IC8vIHJvdGF0aW9uIG9mIGdyZWF0R3JhbmRDaGlsZAogCiAgICAgZXhwZWN0ZWRGaXhlZFBvc2l0
aW9uQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CkBAIC0xODY4LDcgKzE2NzgsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJT
dXJmYWNlcykKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIC8vIEZJ
WE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3Ig
aW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0xODgyLDY3ICsxNjkyLDYg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMpCiAgICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0WzFdLT5pZCgpKTsKIH0KIAotVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQotewotICAgIC8vIFRo
aXMgaXMgYSBzaW1pbGFyIHNpdHVhdGlvbiBhcyB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3Vy
ZmFjZXMsIGV4Y2VwdCB0aGF0Ci0gICAgLy8gaXQgcmVwcm9kdWNlcyBhIGNyYXNoIGJ1ZyBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQuCi0K
LSAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JlYXRHcmFuZENoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsZWFmTm9kZTEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsZWFmTm9kZTIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
Ci0gICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7Ci0gICAgY2hpbGQtPmFkZENoaWxkKGdyYW5k
Q2hpbGQpOwotICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyZWF0R3JhbmRDaGlsZCk7Ci0KLSAg
ICAvLyBsZWFmTm9kZTEgZW5zdXJlcyB0aGF0IHBhcmVudCBhbmQgY2hpbGQgYXJlIGtlcHQgb24g
dGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsCi0gICAgLy8gZXZlbiB0aG91Z2ggZ3JhbmRDaGls
ZCBhbmQgZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBiZSBjbGlwcGVkLgotICAgIGNoaWxkLT5hZGRD
aGlsZChsZWFmTm9kZTEpOwotICAgIGdyZWF0R3JhbmRDaGlsZC0+YWRkQ2hpbGQobGVhZk5vZGUy
KTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNl
KTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyZWF0R3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2Rl
MS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMjAsIDIwKSwgZmFsc2UpOwotCi0gICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7
Ci0gICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7Ci0gICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0
eSgwLjVmKTsKLSAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40Zik7Ci0KLSAgICAv
LyBDb250YW1pbmF0ZSB0aGUgZ3JhbmRDaGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxkJ3MgY2xpcFJl
Y3QgdG8gcmVwcm9kdWNlIHRoZSBjcmFzaAotICAgIC8vIGJ1ZyBmb3VuZCBpbiBodHRwOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQuIEluIHRoaXMK
LSAgICAvLyBidWcsIHRoZSBjbGlwUmVjdCB3YXMgbm90IHJlLWNvbXB1dGVkIGZvciBsYXllcnMg
dGhhdCBjcmVhdGUgUmVuZGVyU3VyZmFjZXMsIGFuZAotICAgIC8vIHRoZXJlZm9yZSBsZWFmTm9k
ZTIgdGhpbmtzIGl0IHNob3VsZCBkcmF3IGl0c2VsZi4gQXMgYSByZXN1bHQsIGFuIGV4dHJhCi0g
ICAgLy8gcmVuZGVyU3VyZmFjZSByZW1haW5zIG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCB3aGljaCB2aW9sYXRlcyB0aGUgYXNzdW1wdGlvbgotICAgIC8vIHRoYXQgYW4gZW1wdHkgcmVu
ZGVyU3VyZmFjZSB3aWxsIGFsd2F5cyBiZSB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0LCB3aGlj
aAotICAgIC8vIHVsdGltYXRlbHkgY2F1c2VkIHRoZSBjcmFzaC4KLSAgICBjaGlsZC0+c2V0Q2xp
cFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpKTsKLSAgICBn
cmVhdEdyYW5kQ2hpbGQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50
U2l6ZSgxMjM0LCAxMjM0KSkpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwot
Ci0gICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNl
IiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVy
ZSwgdG9vLgotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50LmdldCgpKTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKLQotICAgIEFTU0VSVF9FUSgyVSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwotICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOwotICAgIEVYUEVDVF9FUShjaGlsZC0+
aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7Ci19Ci0KIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0Vmlz
aWJsZUNvbnRlbnQpCiB7CiAgICAgLy8gV2hlbiBhIHJlbmRlclN1cmZhY2UgaGFzIGEgY2xpcFJl
Y3QsIGl0IGlzIHVzZWQgdG8gY2xpcCB0aGUgY29udGVudFJlY3QKQEAgLTE5ODMsOCArMTczMiw4
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1
cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEy
OwogCi0gICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMjAwMiw4ICsxNzUxLDggQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNp
YmxlQ29udGVudCkKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgZHVt
bXlMYXllckxpc3QuY2xlYXIoKTsKIAotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcGFyZW50LT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKQEAgLTIwMTUsMTQgKzE3
NjQsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1
bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsyXS0+aWQoKSk7CiB9CiAKLVRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0
bHlUb0xheWVycykKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5RHJhd2Fi
bGVDb250ZW50UmVjdEZvckxheWVycykKIHsKLSAgICAvLyBWZXJpZnkgdGhhdCBsYXllcnMgZ2V0
IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NUb0JvdW5k
cyBpcyB0cnVlLgorICAgIC8vIFZlcmlmeSB0aGF0IGxheWVycyBnZXQgdGhlIGFwcHJvcHJpYXRl
IGRyYXdhYmxlQ29udGVudFJlY3Qgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0
cnVlLgogICAgIC8vCi0gICAgLy8gICBncmFuZENoaWxkMSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRo
ZSByZWdpb247IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUgbWFzayByZWdpb24gKGxhcmdlciB0aGFu
IHRoaXMgbGF5ZXIncyBib3VuZHMpLgotICAgIC8vICAgZ3JhbmRDaGlsZDIgLSBwYXJ0aWFsbHkg
Y2xpcHBlZCBidXQgTk9UIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgdGhl
IHBhcmVudCdzIGNsaXBSZWN0IHJlZ2FyZGxlc3Mgb2YgdGhlIGxheWVyJ3MgYm91bmRzLgotICAg
IC8vICAgZ3JhbmRDaGlsZDMgLSBwYXJ0aWFsbHkgY2xpcHBlZCBhbmQgbWFza3NUb0JvdW5kczsg
dGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlIGludGVyc2VjdGlvbiBvZiBsYXllckJvdW5kcyBhbmQg
dGhlIG1hc2sgcmVnaW9uLgotICAgIC8vICAgZ3JhbmRDaGlsZDQgLSBvdXRzaWRlIHBhcmVudCdz
IGNsaXBSZWN0LCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHNob3VsZCBiZSBlbXB0
eS4KKyAgICAvLyAgIGdyYW5kQ2hpbGQxIC0gY29tcGxldGVseSBpbnNpZGUgdGhlIHJlZ2lvbjsg
ZHJhd2FibGVDb250ZW50UmVjdCBzaG91bGQgYmUgdGhlIGxheWVyIHJlY3QgZXhwcmVzc2VkIGlu
IHRhcmdldCBzcGFjZS4KKyAgICAvLyAgIGdyYW5kQ2hpbGQyIC0gcGFydGlhbGx5IGNsaXBwZWQg
YnV0IE5PVCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgd2lsbCBiZSB0aGUgaW50ZXJzZWN0
aW9uIG9mIGxheWVyQm91bmRzIGFuZCB0aGUgbWFzayByZWdpb24uCisgICAgLy8gICBncmFuZENo
aWxkMyAtIHBhcnRpYWxseSBjbGlwcGVkIGFuZCBtYXNrc1RvQm91bmRzOyB0aGUgZHJhd2FibGVD
b250ZW50UmVjdCB3aWxsIHN0aWxsIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgbGF5ZXJCb3VuZHMg
YW5kIHRoZSBtYXNrIHJlZ2lvbi4KKyAgICAvLyAgIGdyYW5kQ2hpbGQ0IC0gb3V0c2lkZSBwYXJl
bnQncyBjbGlwUmVjdDsgdGhlIGRyYXdhYmxlQ29udGVudFJlY3Qgc2hvdWxkIGJlIGVtcHR5Lgog
ICAgIC8vCiAKICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKQEAgLTIwNDksNyArMTc5OCw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKIAogICAgIGNoaWxk
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwogICAgIGdyYW5kQ2hpbGQzLT5zZXRNYXNrc1RvQm91
bmRzKHRydWUpOwotICAgIGdyYW5kQ2hpbGQ0LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwogCiAg
ICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUgYSByZW5kZXIgc3VyZmFjZS4KICAgICBjaGlsZC0+
c2V0T3BhY2l0eSgwLjRmKTsKQEAgLTIwNjMsNyArMTgxMSw3IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVy
cykKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIC8vIEZJWE1FOiB3
aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NM
YXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0
KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yMDcxLDE3ICsxODE5LDE3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRD
b3JyZWN0bHlUb0xheWVycykKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAKLSAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+
Y2xpcFJlY3QoKSk7Ci0gICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOwotICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkp
LCBncmFuZENoaWxkMy0+Y2xpcFJlY3QoKSk7Ci0gICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQt
PmNsaXBSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJ
bnRQb2ludCg1LCA1KSwgSW50U2l6ZSgxMCwgMTApKSwgZ3JhbmRDaGlsZDEtPmRyYXdhYmxlQ29u
dGVudFJlY3QoKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMTUs
IDE1KSwgSW50U2l6ZSg1LCA1KSksIGdyYW5kQ2hpbGQzLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
OworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNp
emUoNSwgNSkpLCBncmFuZENoaWxkMy0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShncmFuZENoaWxkNC0+ZHJhd2FibGVDb250ZW50UmVjdCgpLmlzRW1wdHkoKSk7CiB9
CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3Bh
Z2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQogewogICAgIC8vIFZlcmlmeSB0aGF0IHJlbmRlclN1
cmZhY2VzIChhbmQgdGhlaXIgbGF5ZXJzKSBnZXQgdGhlIGFwcHJvcHJpYXRlIGNsaXBSZWN0cyB3
aGVuIHRoZWlyIHBhcmVudCBtYXNrc1RvQm91bmRzIGlzIHRydWUuCiAgICAgLy8KLSAgICAvLyBM
YXllcnMgdGhhdCBvd24gcmVuZGVyU3VyZmFjZXMgKGF0IGxlYXN0IGZvciBub3cpIGRvIG5vdCBp
bmhlcml0IGFueSBjbGlwUmVjdDsKKyAgICAvLyBMYXllcnMgdGhhdCBvd24gcmVuZGVyU3VyZmFj
ZXMgKGF0IGxlYXN0IGZvciBub3cpIGRvIG5vdCBpbmhlcml0IGFueSBjbGlwcGluZzsKICAgICAv
LyBpbnN0ZWFkIHRoZSBzdXJmYWNlIHdpbGwgZW5mb3JjZSB0aGUgY2xpcCBmb3IgdGhlIGVudGly
ZSBzdWJ0cmVlLiBUaGV5IG1heSBzdGlsbAogICAgIC8vIGhhdmUgYSBjbGlwUmVjdCBvZiB0aGVp
ciBvd24gbGF5ZXIgYm91bmRzLCBob3dldmVyLCBpZiBtYXNrc1RvQm91bmRzIHdhcyB0cnVlLgog
ICAgIC8vCkBAIC0yMTM4LDcgKzE4ODYsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZp
eCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVI
b3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnNldENs
aXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAg
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yMTU0LDEyICsxOTAyLDYgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRv
U3VyZmFjZXMpCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCks
IEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0
KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRT
aXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsK
ICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgy
MCwgMjApKSwgZ3JhbmRDaGlsZDMtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSk7Ci0KLSAg
ICAvLyBMYXllcnMgZG8gbm90IGluaGVyaXQgdGhlIGNsaXBSZWN0IGZyb20gdGhlaXIgb3duZWQg
c3VyZmFjZXMsIGJ1dCBpZiBtYXNrc1RvQm91bmRzIGlzIHRydWUsIHRoZXkgZG8gY3JlYXRlIHRo
ZWlyIG93biBjbGlwUmVjdC4KLSAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDEtPnVzZXNMYXll
ckNsaXBwaW5nKCkpOwotICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMi0+dXNlc0xheWVyQ2xp
cHBpbmcoKSk7Ci0gICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDMtPnVzZXNMYXllckNsaXBwaW5n
KCkpOwotICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQ0LT51c2VzTGF5ZXJDbGlwcGluZygpKTsK
IH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlBbmltYXRpb25zRm9y
UmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKQEAgLTI2MjQsNyArMjM2Niw2IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aG91dFByZXNlcnZl
czNkKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsK
ICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5k
cygpKSk7Ci0gICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yNzI5LDcgKzI0NzAsNiBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQcmVzZXJ2ZXMzZCkKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwot
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOwpAQCAtMjgxNiw3ICsyNTU2LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoQW5pbWF0aW5nVHJhbnNmb3JtcykKICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKQEAgLTI4OTAsNyArMjYyOSw2IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxh
dHRlbmluCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0
OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogICAgIHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKQEAgLTM3MDgsNyArMzQ0Niw2IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZVRyYW5mb3Jtc0luSGlnaERQSSkK
IAogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHBhcmVudC5nZXQoKSk7CiAKICAgICBjb25zdCBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3IgPSAx
LjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGFiZjFlZmY4ZTExMTM0YTAzMjcyZDY1ZjU5MDcyMDcw
ZDQ0NWQwOTguLjgwM2ZmYWQwYWQwN2U4YzI5YTg3MjAzNzgwODg4NTUzMTgyNGIyMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwCkBAIC0xMzUsMTAgKzEzNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKElu
dFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29udGVu
dFNpemUpOworICAgICAgICByb290LT5zZXRCb3VuZHMoY29udGVudFNpemUpOworICAgICAgICBy
b290LT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRTaXplKTsKKyAgICAgICAgcm9vdC0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworCiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwogICAgICAgICBjb250ZW50cy0+c2V0RHJhd3NDb250
ZW50KHRydWUpOwogICAgICAgICBjb250ZW50cy0+c2V0Qm91bmRzKGNvbnRlbnRTaXplKTsKICAg
ICAgICAgY29udGVudHMtPnNldENvbnRlbnRCb3VuZHMoY29udGVudFNpemUpOworICAgICAgICBj
b250ZW50cy0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIGNvbnRlbnRz
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+YWRkQ2hp
bGQoY29udGVudHMucmVsZWFzZSgpKTsKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKICAgICB9CkBAIC04MzQsMTMgKzg0MSwxOCBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQogICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAg
ICBjb250ZW50TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CiAgICAgY29u
dGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgY29udGVudExheWVyLT5zZXRQ
b3NpdGlvbihJbnRQb2ludCg1LCA1KSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDAsIDApKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOwogICAgIGNvbnRlbnRMYXllci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsK
ICAgICBjb250ZW50TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53
aWR0aCgpICogMiwgc3VyZmFjZVNpemUuaGVpZ2h0KCkgKiAyKSk7CiAKICAgICBPd25QdHI8Q0NM
YXllckltcGw+IHNjcm9sbExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKICAgICBzY3Jv
bGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICBzY3JvbGxMYXllci0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oc3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5zZXRCb3VuZHMoc3Vy
ZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5zZXRDb250ZW50Qm91bmRzKHN1cmZhY2VTaXpl
KTsKKyAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
c2Nyb2xsTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIHNjcm9s
bExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5yZWxlYXNlKCkpOwpAQCAtODU4LDYgKzg3MCw4
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1p
dEFuZFJlZHJhdykKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICByb290
LT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMoc3Vy
ZmFjZVNpemUpOwogICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1
cmZhY2VTaXplKTsKQEAgLTk5NCw2ICsxMDA4LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKIHsKICAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICByb290LT5zZXRCb3VuZHMoc3VyZmFj
ZVNpemUpOworICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMoc3VyZmFjZVNpemUpOwogICAgIC8v
IEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Ny
b2xsIGxheWVyLgogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgaW50IHNjcm9s
bExheWVySWQgPSAyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggOTdkNDU2OGRhNDA0ZjQ5YjhlODg0MjA1YzIzNWRj
OTBkYmI3Y2JlNy4uNDIzNjVhYWU5MmNhODBmYWMzN2U1MjMwMjdlMzM2NDkwMDc0NjFhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCkBAIC0yMTc2LDggKzIxNzYsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSBPVkVSUklERQogICAgIHsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5y
b290TGF5ZXIoKS0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIAogICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9j
a0RlbGVnYXRlKTsKICAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOworCisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50KDAsIDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOworCiAgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRJc0Ry
YXdhYmxlKHRydWUpOwogICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKICAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKQEAgLTIxODgsNiArMjE5NCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY2hpbGRMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKICAgICAgICAgbV9jaGlsZExheWVy
LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworCiAgICAgICAgIG1fcm9vdFNjcm9sbExheWVy
LT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOwogICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01h
aW5UaHJlYWQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCBmMGJmZDBlYTMzNDQyYzkzYTYz
YWMyNDgzNzczYTE2Y2VmMzdhYTRkLi4wNjhlY2VkMzA2NGYzMjRhMTgyMzk2OTRiMzdmYmIxYjI2
NzBmZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTI2Myw3ICsyNjMsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEFTU0VSVCghcm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgcm9vdC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOwogICAgICAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKLSAg
ICAgICAgcm9vdC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5i
b3VuZHMoKSkpOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZCht
X3Jvb3QuZ2V0KCkpOwogCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29y
dGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKQEAgLTI4Miw3ICsyODEsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVCghcm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgICAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNl
dENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsK
LSAgICAgICAgcm9vdC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290
LT5ib3VuZHMoKSkpOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bS5h
cHBlbmQobV9yb290KTsKIAogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKQEAgLTIwNjksNyArMjA2Nyw3IEBAIHByb3RlY3RlZDoKIAogICAg
ICAgICB0aGlzLT52aXNpdExheWVyKHN1cmZhY2VDaGlsZDIsIG9jY2x1c2lvbik7CiAgICAgICAg
IHRoaXMtPmVudGVyTGF5ZXIoc3VyZmFjZUNoaWxkLCBvY2NsdXNpb24pOwotICAgICAgICBFWFBF
Q1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgxMDAsIDAsIDE1MCwgMzAwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ2hpbGQsIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7
CisgICAgICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KDEwMCwgMCwgMTAwLCAzMDApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VDaGlsZCwgSW50UmVjdCgwLCAw
LCAzMDAsIDMwMCkpKTsKICAgICAgICAgdGhpcy0+bGVhdmVMYXllcihzdXJmYWNlQ2hpbGQsIG9j
Y2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoc3VyZmFjZSwgb2NjbHVzaW9uKTsK
ICAgICAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoMjAwLCAwLCA1MCwgMzAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlLCBJbnRSZWN0KDAsIDAsIDMwMCwg
MzAwKSkpOwpAQCAtMjEyMSw3ICsyMTE5LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHRoaXMt
PnZpc2l0TGF5ZXIoc3VyZmFjZUNoaWxkMiwgb2NjbHVzaW9uKTsKICAgICAgICAgdGhpcy0+ZW50
ZXJMYXllcihzdXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7Ci0gICAgICAgIEVYUEVDVF9JTlRfUkVD
VF9FUShJbnRSZWN0KDEwMCwgMCwgMTUwLCAzMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHN1cmZhY2VDaGlsZCwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICAgICAg
RVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoMTAwLCAwLCAxMDAsIDMwMCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNoaWxkLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAw
KSkpOwogICAgICAgICB0aGlzLT5sZWF2ZUxheWVyKHN1cmZhY2VDaGlsZCwgb2NjbHVzaW9uKTsK
ICAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihzdXJmYWNlLCBvY2NsdXNpb24pOwogICAgICAgICBF
WFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgyMDAsIDAsIDUwLCAzMDApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2UsIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CmluZGV4IGZkYWUzN2M2YWRmMTYxYmE5OGFjMTg3NjQzNTVmZjUwYjFjODI4OGUuLjViNTM5MWRi
ZGEyMGMwNWRmYTA3YWYwODJhNTJmZmM2YjFmYWYxYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC00OTUsMTAgKzQ5NSw4
IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0Nv
cnJlY3RCZWhhdmlvcikKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3Qg
Y2FsbCBuZWVkc0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZC4KICAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNl
dFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKLSAgICBFWEVDVVRF
X0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFVz
ZXNMYXllckNsaXBwaW5nKHRydWUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQo
dHJ1ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDAsIHRlc3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41ZikpOwotICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0Q2xpcFJlY3Qo
SW50UmVjdCgzLCAzLCA4LCA4KSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNf
Q09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVz
dExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5
ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153568</attachid>
            <date>2012-07-20 12:41:24 -0700</date>
            <delta_ts>2012-07-23 12:54:09 -0700</delta_ts>
            <desc>Well tested, cleaned up, ready for review</desc>
            <filename>bug-80622-20120720124120.patch</filename>
            <type>text/plain</type>
            <size>97692</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M4MGI1MTkwMmY0YTdh
NjE5MjhkYTYwNGQ4ZjBjNmExYjU0N2NiOC4uMzZhYWRjYTM0MTI3NTRmOTMwZmEzMTU2YzRiY2Fh
MDFiNTEwOWRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA3LTIwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBjbGVhbiB1cCBjbGlwUmVjdCBhbmQgZHJh
d2FibGVDb250ZW50UmVjdCBkZXNpZ24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgY2xpcFJlY3QoKSwgdXNlc0xheWVyQ2xpcHBpbmcoKSwgYW5kIGRyYXdh
YmxlQ29udGVudFJlY3QoKSBoYXZlIGJlZW4KKyAgICAgICAgdmVyeSBjb25mdXNpbmcgaW4gQ0NM
YXllclRyZWVIb3N0Q29tbW9uIGZvciBhIHdoaWxlLiBUaGlzIHBhdGNoCisgICAgICAgIHJlZmFj
dG9ycyBpdCBzbyB0aGF0ICgxKSBjbGlwcGluZyBpcyBvbmx5IGRvbmUgbG9jYWxseSBpbgorICAg
ICAgICBjYWxjRHJhd1RyYW5zZm9ybXMsIGFuZCAoMikgdGhlIGxheWVyJ3MgZHJhd2FibGVDb250
ZW50UmVjdCB2YWx1ZQorICAgICAgICBpcyBub3cgbWVhbmluZ2Z1bCB2YWx1ZSBvdXRzaWRlIG9m
IGNhbGNEcmF3VHJhbnNmb3Jtcy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgbGF5ZXIgaXMg
bm93IGFsd2F5cyBjbGlwcGVkIHRvIHRoZSByb290CisgICAgICAgIHN1cmZhY2UncyBjb250ZW50
Qm91bmRzICh3aGljaCBhcmUgc2V0IHRvIHRoZSB2aWV3cG9ydCBib3VuZHMpLgorICAgICAgICBU
aGlzIHJlZmFjdG9yIG5vdCBvbmx5IG1ha2VzIGNhbGNEcmF3VHJhbnNmb3JtcyBmYXIgbW9yZSBy
ZWFkYWJsZSBhbmQgaW50dWl0aXZlLCBidXQKKyAgICAgICAgdGhpcyBwYXRjaCBlbmFibGVzIG1v
cmUgdXBjb21pbmcgYmVuZWZpY2lhbCByZWZhY3RvcnMsIGluY2x1ZGluZworICAgICAgICB0aGUg
cGVuZGluZyByZWZhY3RvciBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODg5NTMuCisKKyAgICAgICAgVGVzdHMgYXJlIGFsc28gc2lnbmlmaWNhbnRseSB1cGRhdGVk
IHRvIGtlZXAgdXAgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIGNoYW5nZS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIFJlbW92ZWQgbV91c2VzTGF5ZXJDbGlwcGluZyBhbmQgbV9jbGlwUmVjdCBh
bmQgYXNzb2NpYXRlZCBhY2Nlc3NvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VD
aHJvbWl1bSk6CisgICAgICAgIFVwZGF0ZWQgY29tbWVudAorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAg
ICBSZW1vdmVkIG1fdXNlc0xheWVyQ2xpcHBpbmcgYW5kIG1fY2xpcFJlY3QgYW5kIGFzc29jaWF0
ZWQgYWNjZXNzb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgcmVtb3ZlZCBzZXRDbGlwUmVjdCBjb2RlIHRoYXQgbm8g
bG9uZ2VyIGFwcGxpZXMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVM
YXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgc2Npc3NvciByZWN0IGlzIG5vdyBhIGxpdHRsZSBi
aXQgdGlnaHRlciwgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIGRhbWFnZSBhbmQgbGF5ZXIncyBu
ZXcgZHJhd2FibGVDb250ZW50UmVjdC4KKworICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3Vy
ZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgc2Npc3NvciByZWN0IGlzIG5vdyBhIGxpdHRsZSBi
aXQgdGlnaHRlciwgZXhjZXB0IHdoZW4gZmlsdGVycyBhcmUgaW52b2x2ZWQuCisKKyAgICAgICAg
KFdlYkNvcmU6OmxheWVyQ2xpcHNTdWJ0cmVlKToKKyAgICAgICAgbmV3IGhlbHBlciBmdW5jdGlv
bgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVZpc2li
bGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmVlU2hvdWxkUmVuZGVyVG9T
ZXBhcmF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNJbnRlcm5hbCk6CisgICAgICAgICAgIC0gYWRkZWQgZHJhd2FibGVDb250ZW50UmVjdE9mU3Vi
dHJlZSB0byB0aGUgZnVuY3Rpb24gYXJncywgaXQgaXMgdmFsaWQgb25seSBhZnRlciByZWN1cnNp
b24gcmV0dXJucywKKyAgICAgICAgICAgLSBhZGRlZCBjbGlwUmVjdEZyb21BbmNlc3RvciBhbmQg
Ym9vbCBhbmNlc3RvckNsaXBzU3VidHJlZSB0byBmdW5jdGlvbiBhcmdzLCB0aGlzIHJlcGxhY2Vz
IHRoZSBsYXllcidzIGNsaXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZy4KKyAgICAgICAgICAg
LSByZW1vdmVkIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSwgd2hpY2ggd2FzIHJlZHVuZGFudCB3
aXRoIGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUuCisgICAgICAgICAgIC0gcmVwbGFjZWQg
YWxsIHRoZSAic2V0RHJhd2FibGVDb250ZW50UmVjdCIgbG9naWMgd2l0aCBtb3JlIGludHVpdGl2
ZSwgY2xlYXIgbG9naWMuCisgICAgICAgICAgIC0gbm93LCBsYXllcidzIGRyYXdhYmxlQ29udGVu
dFJlY3QgcmVwcmVzZW50cyB0aGUgY2xpcHBlZCBib3VuZHMgb2YgdGhlIGxheWVyIGV4cHJlc3Nl
ZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAgICAgICAoV2Vi
Q29yZTo6cG9pbnRJc0NsaXBwZWRCeVN1cmZhY2VPckNsaXBSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VM
YXllckxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2Nj
bHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmxheWVyU2Npc3NvclJlY3RJ
blRhcmdldFN1cmZhY2UpOgorICAgICAgICBVcGRhdGVkIHRoaXMgYWNjZXNzb3IuICBJdCBjb3Vs
ZCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUsIGJ1dCBub3QgYXBwcm9wcmlhdGUgZm9yIHRoaXMg
cGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaDoKKwogMjAxMi0wNy0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMjI4NzMpOiAxNSUgcmVncmVzc2lvbiBvbiBEcm9t
YWVvL2RvbS1hdHRyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQ5OTAxODk3YTgyMDAw
MjI2NjdkMTc0NDc5MzNmOWI1MDE3YWE3ZjQuLmJhN2JjYWRiODNhNGE2MjgwYzc2N2E5ZGQyMTdh
MTVmZjEzMDg0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTItMDctMjAgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVyVHJlZUhvc3RDb21tb246IGNsZWFuIHVw
IGNsaXBSZWN0IGFuZCBkcmF3YWJsZUNvbnRlbnRSZWN0IGRlc2lnbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYW55IHRlc3RzIG5lZWRlZCB0byBiZSB1
cGRhdGVkIGJlY2F1c2UgdGhlIHNlbWFudGljcyBvZiB0aGUgbGF5ZXIgdHJlZSBoYXZlIGNoYW5n
ZWQ6CisgICAgICAgICAgLSBhIGZldyB0ZXN0cyB0aGF0IHdlcmUgbm8gbG9uZ2VyIGFwcGxpY2Fi
bGUgd2VyZSByZW1vdmVkLgorICAgICAgICAgIC0gbWFueSB0ZXN0cyBuZWVkZWQgdG8gaGF2ZSBm
aXhlZCBpbml0aWFsaXphdGlvbiwgcHJvcGVybHkKKyAgICAgICAgICAgIHNldHRpbmcgc3VyZmFj
ZSBjb250ZW50UmVjdCBhbmQgcm9vdExheWVyIGJvdW5kcy4KKyAgICAgICAgICAtIGJlY2F1c2Ug
Y2xpcFJlY3QgYW5kIHVzZXNMYXllckNsaXBwaW5nIG5vIGxvbmdlciBleGlzdHMsIHRob3NlIHBs
YWNlcyBpbiBjb2RlIGhhZCB0byBiZSByZW1vdmVkL2NoYW5nZWQKKyAgICAgICAgICAtIHRoZSBz
Y2lzc29yUmVjdCB0ZXN0cyBuZWVkZWQgdG8gaGF2ZSB1cGRhdGVkIGV4cGVjdGF0aW9ucworICAg
ICAgICAgICAgYmVjYXVzZSBhZnRlciB0aGlzIHBhdGNoLCB0aGUgcm9vdExheWVyIFN1cmZhY2Ug
bm93IGNsaXBzCisgICAgICAgICAgICB0byBpdHMgY29udGVudEJvdW5kcy4KKyAgICAgICAgICAt
IHRoZSBjbGlwUmVjdCB0ZXN0cyB3ZXJlIGNoYW5nZWQgdG8gdGVzdCB0aGUgbGF5ZXIncyBuZXcg
c2VtYW50aWNzIGZvciB0aGUgZHJhd2FibGVDb250ZW50UmVjdCBpbnN0ZWFkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOgorICAgICAgICAqIHRlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0OjpjYWxjRHJhd0V0Yyk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdEFuaW1hdGlvbk9wYWNp
dHkxT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2Nj
bHVzaW9uVHJhY2tlclRlc3RBbmltYXRpb25PcGFjaXR5ME9uTWFpblRocmVhZDo6cnVuTXlUZXN0
KToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTItMDctMjAg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBXZWJWaWV3Ojp6b29tVG9GaW5kSW5QYWdlUmVjdCBmb3IgQW5kcm9pZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAppbmRleCAwMzIwM2JmMWNjZDYwMzI0NjgzOWFiMmM3YzJiYThlMDc1YmI2ZGM3Li4y
NDgyN2U5NDY4MTc3ZjQwMjYwZTIyMDdiZTlkZTliYTVlNTQ3MDE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcApAQCAtNzcsNyArNzcsNiBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkK
ICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQogICAg
ICwgbV9kb3VibGVTaWRlZCh0cnVlKQotICAgICwgbV91c2VzTGF5ZXJDbGlwcGluZyhmYWxzZSkK
ICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKICAgICAsIG1fcHJlc2VydmVz
M0QoZmFsc2UpCiAgICAgLCBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCA4MzA1OGU2MzNhNjQ3NmQyNGI3NzI0ZTY1NzE2MmFiOGQzMmU5
YmQ1Li5hYmQ5ZTM2ZjgwNDVhMDc1M2Y3NDk3ZDYwNGNhOWUwM2JmY2Q0ZTIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCkBAIC0xOTUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlUGFy
ZW50QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KSB7
IG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5ID0gdXNlUGFyZW50QmFja2ZhY2VWaXNpYmls
aXR5OyB9CiAgICAgYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eTsgfQogCi0gICAgdm9pZCBzZXRVc2Vz
TGF5ZXJDbGlwcGluZyhib29sIHVzZXNMYXllckNsaXBwaW5nKSB7IG1fdXNlc0xheWVyQ2xpcHBp
bmcgPSB1c2VzTGF5ZXJDbGlwcGluZzsgfQotICAgIGJvb2wgdXNlc0xheWVyQ2xpcHBpbmcoKSBj
b25zdCB7IHJldHVybiBtX3VzZXNMYXllckNsaXBwaW5nOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29sKTsKICAgICBib29sIGlzTm9uQ29tcG9zaXRl
ZENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQ7IH0KIApA
QCAtMjM2LDggKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KICAgICB2b2lk
IHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKSB7
IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KIAot
ICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsg
fQotICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlw
UmVjdCA9IGNsaXBSZWN0OyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyVGFyZ2V0KCkgY29u
c3QgeyBBU1NFUlQoIW1fcmVuZGVyVGFyZ2V0IHx8IG1fcmVuZGVyVGFyZ2V0LT5yZW5kZXJTdXJm
YWNlKCkpOyByZXR1cm4gbV9yZW5kZXJUYXJnZXQ7IH0KICAgICB2b2lkIHNldFJlbmRlclRhcmdl
dChMYXllckNocm9taXVtKiB0YXJnZXQpIHsgbV9yZW5kZXJUYXJnZXQgPSB0YXJnZXQ7IH0KIApA
QCAtMzUxLDggKzM0Niw3IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50
UmVjdDsKIAogICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0
c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KLSAgICAvLyBDdXJyZW50bHkg
dGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBjbGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0
cnVlLCBvdGhlcndpc2UKLSAgICAvLyBpdCdzIHJlbmRlclRhcmdldCdzIFJlbmRlclN1cmZhY2Ug
Y29udGVudFJlY3QuCisgICAgLy8gVGhpcyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsYXll
cidzIGRyYXdhYmxlQ29udGVudFJlY3QgYW5kIGRhbWFnZSAoaWYgZGFtYWdlIHRyYWNraW5nIGlz
IGVuYWJsZWQpLgogICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRS
ZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKQEAgLTM3
OCw3ICszNzIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJv
b2wgbV9vcGFxdWU7CiAgICAgYm9vbCBtX2RvdWJsZVNpZGVkOwotICAgIGJvb2wgbV91c2VzTGF5
ZXJDbGlwcGluZzsKICAgICBib29sIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsKICAgICBib29s
IG1fcHJlc2VydmVzM0Q7CiAgICAgYm9vbCBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eTsK
QEAgLTM5Nyw5ICszOTAsOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAg
ICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CiAKLSAgICAvLyBVc2VzIHRhcmdldCBz
dXJmYWNlIHNwYWNlLgotICAgIEludFJlY3QgbV9jbGlwUmVjdDsKICAgICBMYXllckNocm9taXVt
KiBtX3JlbmRlclRhcmdldDsKKwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9kcmF3VHJhbnNmb3JtOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybTsKICAgICBib29sIG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5n
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRleCAxNjgxYzViYTNhNDc3NmM3
ODc1NGI2MTJkZWExMWFkMTgxMzA5MjZkLi40NzQ5YzEzMGUwNDI0ZTNlZmIxNWVmYTgxN2VhMzcz
OWE2NjMwM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtMTE2LDgg
KzExNiw2IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogCiAgICAgLy8gRHVy
aW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhp
bmcgc2hvdWxkIGJlIGRyYXduLgotICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXll
cidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQotICAg
IC8vIGl0J3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgogICAgIC8vIFVzZXMg
dGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZhY2UuCiAgICAgSW50UmVjdCBt
X3NjaXNzb3JSZWN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNzE3ZDk2ZDEwMTZm
NWY2NzM2OTcyMTc2MjYzNzQ5ZjI5MGQzYjEzMC4uOGEwNWE4ODA3MGYyZjVhZTIxNTQ4Mzg3ZDgy
ZGE3YjAzMzAzM2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNjQsNyArNjQsNiBA
QCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9wcmVzZXJ2ZXMzRChm
YWxzZSkKICAgICAsIG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICwg
bV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGZhbHNlKQotICAgICwgbV91c2VzTGF5
ZXJDbGlwcGluZyhmYWxzZSkKICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkK
ICAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwgbV9mb3JjZVJlbmRlclN1cmZhY2Uo
ZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA2MTk2YzJjNGQ1MDlmOGNhMTY3NGQzMjZj
MWIyYzllNWRhNjU1MzBmLi4yNWJlZGMyMjA3ZTcyOTBjZWI3YWY5Yjg1NWZkYjJjNTc1NzdmNmMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE0OCw5ICsxNDgsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRVc2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB1c2VQYXJlbnRCYWNrZmFj
ZVZpc2liaWxpdHkpIHsgbV91c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkgPSB1c2VQYXJlbnRC
YWNrZmFjZVZpc2liaWxpdHk7IH0KICAgICBib29sIHVzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5OyB9CiAKLSAg
ICB2b2lkIHNldFVzZXNMYXllckNsaXBwaW5nKGJvb2wgdXNlc0xheWVyQ2xpcHBpbmcpIHsgbV91
c2VzTGF5ZXJDbGlwcGluZyA9IHVzZXNMYXllckNsaXBwaW5nOyB9Ci0gICAgYm9vbCB1c2VzTGF5
ZXJDbGlwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0xheWVyQ2xpcHBpbmc7IH0KLQogICAg
IHZvaWQgc2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENvbnRl
bnQpIHsgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsg
fQogICAgIGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNO
b25Db21wb3NpdGVkQ29udGVudDsgfQogCkBAIC0xNzgsMTAgKzE3NSw2IEBAIHB1YmxpYzoKICAg
ICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFj
aXR5SXNBbmltYXRpbmc7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9v
bCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRy
YXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KIAotICAgIC8vIFVzYWdlOiBpZiB0aGlzLT51c2VzTGF5
ZXJDbGlwcGluZygpIGlzIGZhbHNlLCB0aGVuIHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1
c2VkLgotICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlw
UmVjdDsgfQotICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2Ns
aXBSZWN0ID0gcmVjdDsgfQotCiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0OyB9CiAKQEAgLTM0Myw3ICsz
MzYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1Rp
bGVzOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5z
Zm9ybTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwot
ICAgIGJvb2wgbV91c2VzTGF5ZXJDbGlwcGluZzsKICAgICBib29sIG1faXNOb25Db21wb3NpdGVk
Q29udGVudDsKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CkBAIC0zODksMTIgKzM4MSw2IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2JldHdlZW5XaWxsRHJhd0FuZERpZERyYXc7CiAjZW5kaWYK
IAotICAgIC8vIFRoZSByZWN0IHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHNjaXNzb3Igd2hlbiB0
aGlzIGxheWVyIGlzIGRyYXduLgotICAgIC8vIEluaGVyaXRlZCBieSB0aGUgcGFyZW50IGxheWVy
IGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBsYXllciBtYXNrcwotICAgIC8vIHRvIGJv
dW5kcy4KLSAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCi0gICAgSW50UmVjdCBt
X2NsaXBSZWN0OwotCiAgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lv
biBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgogICAgIC8vIFVzZXMg
dGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAzNzdmNzRkNTQ0ODE5ZWNkMjQ0MjllZDRi
NTljNjcwMTE4YjU3OWEyLi5kMmE3OWViMWJmYmU1ZjY2ZGUxZjI5MGJlNTcxMmJmMTBhNmZhMTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQ2Nyw5ICs0NjcsNiBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXll
ciwgQ0NUZXh0dXJlVXBkYXRlciYgdQogICAgICAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3Qo
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpKTsKIAotICAgIElu
dFJlY3Qgcm9vdENsaXBSZWN0KEludFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKTsKLSAg
ICByb290TGF5ZXItPnNldENsaXBSZWN0KHJvb3RDbGlwUmVjdCk7Ci0KICAgICBMYXllckxpc3Qg
dXBkYXRlTGlzdDsKICAgICB1cGRhdGVMaXN0LmFwcGVuZChyb290TGF5ZXIpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAzOTQ2YzIzZGM1ZDY0NTY2
YzNhZWU4YzhiOTIyMDE3NzY5NDVlNDUyLi5lMDEwNGE2ZTBkNTA5ZjMyNjVjNTlkMGQzMDNmNmY3
NzZlMGY3NWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAK
QEAgLTcyLDExICs3Miw3IEBAIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJl
Y3QoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290CiAgICAgUmVuZGVyU3Vy
ZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSByZW5kZXJUYXJnZXQtPnJlbmRlclN1cmZhY2UoKTsK
IAogICAgIEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UgPSB0YXJnZXRT
dXJmYWNlLT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3Nv
clJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlOwotICAgIGlmIChsYXllci0+dXNl
c0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihy
b290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JSZWN0
SW5UYXJnZXRTdXJmYWNlLCB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKKyAgICBGbG9h
dFJlY3QgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJblRhcmdl
dFN1cmZhY2UsIGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZSk7CiB9CkBAIC05NSwxMyArOTEsMjEgQEAgc3Rh
dGljIEludFJlY3QgY2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KExheWVyVHlwZSogbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcm8KIAogICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IGN1cnJlbnRT
dXJmYWNlLT5jbGlwUmVjdCgpOwogCi0gICAgLy8gRm9yIHN1cmZhY2VzLCBlbXB0eSBjbGlwUmVj
dCBtZWFucyB0aGUgc2FtZSBhcyBDQ0xheWVySW1wbDo6dXNlc0xheWVyQ2xpcHBpbmcgYmVpbmcg
ZmFsc2UKKyAgICAvLyBGb3Igc3VyZmFjZXMsIGVtcHR5IGNsaXBSZWN0IG1lYW5zIHRoYXQgdGhl
IHN1cmZhY2UgZG9lcyBub3QgY2xpcCBhbnl0aGluZy4KICAgICBpZiAoY2xpcFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICBjbGlwUmVjdCA9IGludGVyc2VjdGlvbih0YXJnZXRTdXJmYWNlLT5jb250
ZW50UmVjdCgpLCBjdXJyZW50U3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChjdXJyZW50U3VyZmFjZS0+ZHJhd2FibGVD
b250ZW50UmVjdCgpKTsKIAogICAgIEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1
cmZhY2UgPSB0YXJnZXRTdXJmYWNlLT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3Vy
ZmFjZShyb290U2Npc3NvclJlY3QpOwogCiAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2UgPSBp
bnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlLCBjbGlwUmVjdCk7CisK
KyAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIGJhY2tncm91bmQgZmlsdGVycyB0aGF0IG1vdmUgcGl4
ZWxzLCB3ZSBjYW5ub3Qgc2Npc3NvciBhcyB0aWdodGx5LgorICAgIC8vIEZJWE1FOiB0aGlzIHNo
b3VsZCBiZSBhYmxlIHRvIGJlIGEgdGlnaHRlciBzY2lzc29yLCBwZXJoYXBzIGV4cGFuZGVkIGJ5
IHRoZSBmaWx0ZXIgb3V0c2V0cz8KKyAgICBpZiAobGF5ZXItPmJhY2tncm91bmRGaWx0ZXJzKCku
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIGNsaXBBbmREYW1hZ2UgPSByb290
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2U7CisKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChjbGlwQW5kRGFtYWdlKTsKIH0KIApAQCAtMTU2LDE0ICsxNjAsMTkgQEAgc3RhdGljIGJvb2wg
aXNTdXJmYWNlQmFja0ZhY2VWaXNpYmxlKExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWEKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlu
bGluZSBib29sIGxheWVyQ2xpcHNTdWJ0cmVlKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgcmV0
dXJuIGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgbGF5ZXItPm1hc2tMYXllcigpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNp
YmxlQ29udGVudFJlY3QoTGF5ZXJUeXBlKiBsYXllcikKIHsKICAgICBBU1NFUlQobGF5ZXItPnJl
bmRlclRhcmdldCgpKTsKIAogICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+
cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKIAotICAgIGlm
IChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3Qu
aW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRl
cnNlY3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CiAKICAgICBpZiAodGFyZ2V0U3Vy
ZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGxheWVyLT5jb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAtMjk4LDcgKzMwNyw3IEBAIHN0YXRpYyBib29s
IHN1YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBi
b29sIGF4aXNBbGlnCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgdGhlIGxheWVy
IGNsaXBzIGl0cyBkZXNjZW5kYW50cyBidXQgaXQgaXMgbm90IGF4aXMtYWxpZ25lZCB3aXRoIHJl
c3BlY3QgdG8gaXRzIHBhcmVudC4KLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAh
YXhpc0FsaWduZWRXaXRoUmVzcGVjdFRvUGFyZW50ICYmIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQp
CisgICAgaWYgKGxheWVyQ2xpcHNTdWJ0cmVlKGxheWVyKSAmJiAhYXhpc0FsaWduZWRXaXRoUmVz
cGVjdFRvUGFyZW50ICYmIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90
IGhhdmUgYSBwcmVzZXJ2ZXMtM2QgdHJhbnNmb3JtIHN0eWxlLgpAQCAtMzkzLDEwICs0MDIsMTIg
QEAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcm9sbENvbXBlbnNhdGlvbk1hdHJp
eEZvckNoaWxkcmVuKENDTGF5ZXJJbXBsKgogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVy
IHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8v
IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIGNsaXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBl
dGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgotc3RhdGljIGJv
b2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXll
clR5cGUqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlVHlw
ZSogbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhU
ZXh0dXJlU2l6ZSkKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsCisgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAorICAgIC8qIE5PVCBjb25zdCwgdmFs
aWQgb25seSBhZnRlciByZWN1cnNpb24gcmV0dXJucyAqLyBJbnRSZWN0JiBkcmF3YWJsZUNvbnRl
bnRSZWN0T2ZTdWJ0cmVlLAorICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0RnJvbUFuY2VzdG9y
LCBjb25zdCBib29sIGFuY2VzdG9yQ2xpcHNTdWJ0cmVlLAorICAgIFJlbmRlclN1cmZhY2VUeXBl
KiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsCisgICAgTGF5ZXJTb3J0ZXIqIGxheWVy
U29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb21w
dXRlcyB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZlbHkgZm9yIHRoaXMK
ICAgICAvLyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxzbyBjb21wdXRlcyB0
aGUgYXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtNDg4LDkgKzQ5OSwxNSBAQCBzdGF0
aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyVHlwZSogcm9vdExheQogICAgIC8vICAgICAgICBNW3JlcGxpY2Eycm9vdF0gPSBNW3N1
cmZhY2Uycm9vdF0gKiBUcltyZXBsaWNhLT5wb3NpdGlvbigpXSAqIFRyW3JlcGxpY2FdICogVHJb
b3JpZ2luMmFuY2hvcl0uaW52ZXJzZSgpCiAgICAgLy8KIAorICAgIC8vIElmIHdlIGVhcmx5LWV4
aXQgYW55d2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgdGhlIGRyYXdhYmxlQ29udGVudFJlY3Qgb2Yg
dGhpcyBzdWJ0cmVlIHNob3VsZCBiZSBjb25zaWRlcmVkIGVtcHR5LgorICAgIGRyYXdhYmxlQ29u
dGVudFJlY3RPZlN1YnRyZWUgPSBJbnRSZWN0KCk7CisKICAgICBpZiAoc3VidHJlZVNob3VsZEJl
U2tpcHBlZChsYXllcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwog
CisgICAgSW50UmVjdCBjbGlwUmVjdEZvclN1YnRyZWU7CisgICAgYm9vbCBzdWJ0cmVlU2hvdWxk
QmVDbGlwcGVkID0gZmFsc2U7CisgICAgCiAgICAgZmxvYXQgZHJhd09wYWNpdHkgPSBsYXllci0+
b3BhY2l0eSgpOwogICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGxheWVyLT5vcGFj
aXR5SXNBbmltYXRpbmcoKTsKICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJl
bnQoKS0+cHJlc2VydmVzM0QoKSkgewpAQCAtNTQ0LDEzICs1NjEsMTAgQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5
cGUqIHJvb3RMYXkKICAgICAvLyBuZXh0SGllcmFyY2h5TWF0cml4IHdpbGwgb25seSBjaGFuZ2Ug
aWYgdGhpcyBsYXllciB1c2VzIGEgbmV3IFJlbmRlclN1cmZhY2UsIG90aGVyd2lzZSByZW1haW5z
IHRoZSBzYW1lLgogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG5leHRIaWVyYXJjaHlNYXRy
aXggPSBmdWxsSGllcmFyY2h5TWF0cml4OwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgbGlr
ZSB0aGUgd3JvbmcgcGxhY2UgdG8gc2V0IHRoaXMKLSAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xp
cHBpbmcoZmFsc2UpOwotCiAgICAgaWYgKHN1YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3Vy
ZmFjZShsYXllciwgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pKSkgewog
ICAgICAgICAvLyBDaGVjayBiYWNrLWZhY2UgdmlzaWJpbGl0eSBiZWZvcmUgY29udGludWluZyB3
aXRoIHRoaXMgc3VyZmFjZSBhbmQgaXRzIHN1YnRyZWUKICAgICAgICAgaWYgKCFsYXllci0+ZG91
YmxlU2lkZWQoKSAmJiB0cmFuc2Zvcm1Ub1BhcmVudElzS25vd24obGF5ZXIpICYmIGlzU3VyZmFj
ZUJhY2tGYWNlVmlzaWJsZShsYXllciwgY29tYmluZWRUcmFuc2Zvcm0pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgICAgIGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CkBAIC01OTcsMTEgKzYxMSwxNCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgICAg
ICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgY29udHJpYnV0ZXMgdG8gdGhlIHNjaXNz
b3IgcmVjdCB0aGF0IG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIGFwcGxpZWQgYmVmb3JlIGRyYXdp
bmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKICAgICAgICAgLy8gc3Vy
ZmFjZSBhbmQgaXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0
ZSBzeXN0ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGxheWVyLT5wYXJl
bnQoKSA/IGxheWVyLT5wYXJlbnQoKS0+Y2xpcFJlY3QoKSA6IGxheWVyLT5jbGlwUmVjdCgpKTsK
KyAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlKQorICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3RGcm9tQW5jZXN0b3IpOwogCi0gICAgICAgIC8vIFRo
ZSBsYXllcidzIGNsaXBSZWN0IGNhbiBiZSByZXNldCBoZXJlLiBUaGUgcmVuZGVyU3VyZmFjZSB3
aWxsIGNvcnJlY3RseSBjbGlwIHRoZSBzdWJ0cmVlLgotICAgICAgICBsYXllci0+c2V0VXNlc0xh
eWVyQ2xpcHBpbmcoZmFsc2UpOwotICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgp
KTsKKyAgICAgICAgLy8gVGhlIG5ldyByZW5kZXJTdXJmYWNlIGhlcmUgd2lsbCBjb3JyZWN0bHkg
Y2xpcCB0aGUgZW50aXJlIHN1YnRyZWUuIFNvLCB3ZSBkbworICAgICAgICAvLyBub3QgbmVlZCB0
byBjb250aW51ZSBwcm9wYWdhdGluZyB0aGUgY2xpcHBpbmcgc3RhdGUgZnVydGhlciBkb3duIHRo
ZSB0cmVlLiBUaGlzCisgICAgICAgIC8vIHdheSwgd2UgY2FuIGF2b2lkIHRyYW5zZm9ybWluZyBj
bGlwUmVjdHMgZnJvbSBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZSBzcGFjZSB0bworICAgICAgICAv
LyBjdXJyZW50IHRhcmdldCBzdXJmYWNlIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgbW9yZSB3IDwg
MCBoZWFkYWNoZXMuCisgICAgICAgIHN1YnRyZWVTaG91bGRCZUNsaXBwZWQgPSBmYWxzZTsKIAog
ICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPm1hc2tM
YXllcigpLT5zZXRSZW5kZXJUYXJnZXQobGF5ZXIpOwpAQCAtNjExLDYgKzYyOCw3IEBAIHN0YXRp
YyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXJUeXBlKiByb290TGF5CiAKICAgICAgICAgaWYgKGxheWVyLT5maWx0ZXJzKCkuaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgICAgICBuZWFyZXN0QW5jZXN0b3JUaGF0TW92
ZXNQaXhlbHMgPSByZW5kZXJTdXJmYWNlOworCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE5l
YXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhl
bHMpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsKQEAg
LTYyNywyNiArNjQ1LDMzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50
ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgICAgICBB
U1NFUlQobGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1
cmZhY2UoKTsKIAotICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIGNsaXAgcmVjdCBm
cm9tIHRoZWlyIHBhcmVudC4KLSAgICAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChsYXllci0+
cGFyZW50KCktPmNsaXBSZWN0KCkpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKS0+
dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVy
Q2xpcHBpbmcodHJ1ZSk7Ci0KKyAgICAgICAgICAgIC8vIExheWVycyB3aXRob3V0IHJlbmRlclN1
cmZhY2VzIGRpcmVjdGx5IGluaGVyaXQgdGhlIGFuY2VzdG9yJ3MgY2xpcCBzdGF0dXMuCisgICAg
ICAgICAgICBzdWJ0cmVlU2hvdWxkQmVDbGlwcGVkID0gYW5jZXN0b3JDbGlwc1N1YnRyZWU7Cisg
ICAgICAgICAgICBpZiAoYW5jZXN0b3JDbGlwc1N1YnRyZWUpCisgICAgICAgICAgICAgICAgY2xp
cFJlY3RGb3JTdWJ0cmVlID0gY2xpcFJlY3RGcm9tQW5jZXN0b3I7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIExheWVycyB0aGF0IGFyZSBub3QgdGhlaXIgb3duIHJlbmRlclRhcmdldCB3
aWxsIHJlbmRlciBpbnRvIHRoZSB0YXJnZXQgb2YgdGhlaXIgbmVhcmVzdCBhbmNlc3Rvci4KICAg
ICAgICAgICAgIGxheWVyLT5zZXRSZW5kZXJUYXJnZXQobGF5ZXItPnBhcmVudCgpLT5yZW5kZXJU
YXJnZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBy
b290IGxheWVyIHNwZWNpYWwgY2FzZSBjb2RlIHNob3VsZCBldmVudHVhbGx5IGdvIGF3YXkuIEJ1
dCBiZWZvcmUgdGhhdCBpcyB0cnVseSBwb3NzaWJsZSwKKyAgICAgICAgICAgIC8vICAgICAgICB0
ZXN0cyAob3IgY29kZSkgcmVsYXRlZCB0byBDQ09jY2x1c2lvblRyYWNrZXIgbmVlZCB0byBiZSBh
ZGp1c3RlZCBzbyB0aGF0IHRoZXkgZG8gbm90IHJlcXVpcmUKKyAgICAgICAgICAgIC8vICAgICAg
ICB0aGUgcm9vdExheWVyIHRvIGNsaXA7IHRoZSByb290IGxheWVyJ3MgUmVuZGVyU3VyZmFjZSB3
b3VsZCBhbHJlYWR5IGNsaXAgYW5kIHNob3VsZCBiZSBlbm91Z2guCisgICAgICAgICAgICBBU1NF
UlQoIWxheWVyLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3JDbGlwc1N1YnRyZWUpOworICAg
ICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3RGcm9t
QW5jZXN0b3IpOworICAgICAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IHRydWU7Cisg
ICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0gICAg
ICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKLQotICAgICAgICAv
LyBJZiB0aGUgbGF5ZXIgYWxyZWFkeSBpbmhlcml0ZWQgYSBjbGlwUmVjdCwgd2UgbmVlZCB0byBp
bnRlcnNlY3Qgd2l0aCBpdCBiZWZvcmUKLSAgICAgICAgLy8gb3ZlcnJpZGluZyB0aGUgbGF5ZXIn
cyBjbGlwUmVjdCBhbmQgdXNlc0xheWVyQ2xpcHBpbmcuCi0gICAgICAgIGlmIChsYXllci0+dXNl
c0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChsYXllci0+
Y2xpcFJlY3QoKSk7Ci0KLSAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0KTsKLSAg
ICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOworICAgIGlmIChsYXllckNs
aXBzU3VidHJlZShsYXllcikpIHsKKyAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IHRy
dWU7CisgICAgICAgIGlmIChhbmNlc3RvckNsaXBzU3VidHJlZSAmJiAhbGF5ZXItPnJlbmRlclN1
cmZhY2UoKSkgeworICAgICAgICAgICAgY2xpcFJlY3RGb3JTdWJ0cmVlID0gY2xpcFJlY3RGcm9t
QW5jZXN0b3I7CisgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUuaW50ZXJzZWN0KHRyYW5z
Zm9ybWVkTGF5ZXJSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjbGlwUmVjdEZv
clN1YnRyZWUgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKICAgICB9CiAKICAgICAvLyBOb3RlIHRo
YXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSBpcyBub3QgbmVjZXNzYXJp
bHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1RyYW5zZm9ybS4KQEAgLTY1NiwxNiAr
NjgxLDYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICBsYXllclNjcmVlblNwYWNlVHJh
bnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5o
ZWlnaHQoKSwgMCk7CiAgICAgbGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGxheWVyU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0pOwogCi0gICAgLy8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlzIGFs
d2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQotICAgIC8vIFJlbmRl
clN1cmZhY2UgdGhlIGxheWVyIGRyYXdzIGludG8uCi0gICAgaWYgKGxheWVyLT5kcmF3c0NvbnRl
bnQoKSkgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1l
ZExheWVyUmVjdDsKLSAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAg
ICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkp
OwotICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3Qo
SW50UmVjdCgpKTsKLQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4
ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhl
IGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0QuCkBAIC02OTUsMzQgKzcxMCwzNyBAQCBzdGF0aWMg
Ym9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExh
eWVyVHlwZSogcm9vdExheQogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dFNjcm9s
bENvbXBlbnNhdGlvbk1hdHJpeCA9IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25NYXRyaXhGb3JD
aGlsZHJlbihsYXllciwgcGFyZW50TWF0cml4LCBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0
cml4KTs7CiAKKyAgICBJbnRSZWN0IGFjY3VtdWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9mQ2hp
bGRyZW47CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVuKClb
aV0uZ2V0KCk7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNJbnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExh
eWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNo
eU1hdHJpeCwgbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgbmVhcmVzdEFuY2VzdG9yVGhh
dE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJT
b3J0ZXIsIG1heFRleHR1cmVTaXplKTsKLQotICAgICAgICBpZiAoZHJhd3NDb250ZW50KSB7Ci0g
ICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAgICAg
IFJlbmRlclN1cmZhY2VUeXBlKiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgZHJhd2FibGVDb250
ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29u
dGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgIEludFJlY3QgZHJhd2FibGVD
b250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJT
b3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0
cml4LCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZkNoaWxkU3VidHJlZSwgY2xpcFJl
Y3RGb3JTdWJ0cmVlLCBzdWJ0cmVlU2hvdWxkQmVDbGlwcGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6
ZSk7CisgICAgICAgIGlmICghZHJhd2FibGVDb250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgYWNjdW11bGF0ZWREcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGls
ZHJlbi51bml0ZShkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRyZWUpOworICAgICAgICAg
ICAgaWYgKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgICAgICAgICAgZGVzY2VuZGFu
dHMuYXBwZW5kKGNoaWxkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3Qo
KTsKLSAgICAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGNoaWxkLT5kcmF3
YWJsZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNv
bnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgbGF5ZXItPm1hc2tM
YXllcigpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5k
cmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJz
ZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29u
dGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgfQorICAgIC8vIENvbXB1dGUgdGhl
IHRvdGFsIGRyYXdhYmxlQ29udGVudFJlY3QgZm9yIHRoaXMgc3VidHJlZSAodGhlIHJlY3QgaXMg
aW4gdGFyZ2V0U3VyZmFjZSBzcGFjZSkKKyAgICBJbnRSZWN0IGxvY2FsRHJhd2FibGVDb250ZW50
UmVjdE9mU3VidHJlZSA9IGFjY3VtdWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9mQ2hpbGRyZW47
CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbG9jYWxEcmF3YWJsZUNv
bnRlbnRSZWN0T2ZTdWJ0cmVlLnVuaXRlKHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICBpZiAo
c3VidHJlZVNob3VsZEJlQ2xpcHBlZCkKKyAgICAgICAgbG9jYWxEcmF3YWJsZUNvbnRlbnRSZWN0
T2ZTdWJ0cmVlLmludGVyc2VjdChjbGlwUmVjdEZvclN1YnRyZWUpOwogCisgICAgLy8gQ29tcHV0
ZSB0aGUgbGF5ZXIncyBkcmF3YWJsZSBjb250ZW50IHJlY3QgKHRoZSByZWN0IGlzIGluIHRhcmdl
dFN1cmZhY2Ugc3BhY2UpCisgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZMYXllciA9
IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OworICAgIGlmIChzdWJ0cmVlU2hvdWxkQmVDbGlwcGVkKQor
ICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZMYXllci5pbnRlcnNlY3QoY2xpcFJlY3RGb3JT
dWJ0cmVlKTsKKyAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0T2ZMYXllcik7CisKKyAgICAvLyBDb21wdXRlIHRoZSByZW1haW5pbmcgcHJvcGVydGll
cyBmb3IgdGhlIHJlbmRlciBzdXJmYWNlLCBpZiB0aGUgbGF5ZXIgaGFzIG9uZS4KICAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSByb290TGF5ZXIpIHsKICAgICAgICAg
UmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgp
OwotICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRSZWN0ID0gbG9jYWxE
cmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlOwogICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VD
ZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKIAogICAgICAg
ICAvLyBSZXN0cmljdCB0aGUgUmVuZGVyU3VyZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQn
cyB2aXNpYmxlLgpAQCAtNzMzLDcgKzc1MSw4IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAg
ICAgICAgIC8vIGl0cyB0YXJnZXQgaXMgbm90IGtub3duIG9uIHRoZSBtYWluIHRocmVhZCwgYW5k
IHdlIHNob3VsZCBub3QgdXNlIGl0CiAgICAgICAgIC8vIHRvIGNsaXAuCiAgICAgICAgIGlmICgh
bGF5ZXItPnJlcGxpY2FMYXllcigpICYmIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihsYXllcikp
IHsKLSAgICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkg
JiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE5vdGUs
IGl0IGlzIGNvcnJlY3QgdG8gdXNlIGFuY2VzdG9yQ2xpcHNTdWJ0cmVlIGhlcmUsIGJlY2F1c2Ug
d2UgYXJlIGxvb2tpbmcgYXQgdGhpcyBsYXllcidzIHJlbmRlclN1cmZhY2UsIG5vdCB0aGUgbGF5
ZXIgaXRzZWxmLgorICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlICYmICFjbGlw
cGVkQ29udGVudFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBzdXJm
YWNlQ2xpcFJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0
KHJlbmRlclN1cmZhY2UtPmNsaXBSZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVyU3Vy
ZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgICAgIGNsaXBwZWRDb250ZW50
UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZUNsaXBSZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTc1MSwx
MCArNzcwLDYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKIAogICAgICAgICByZW5kZXJTdXJm
YWNlLT5zZXRDb250ZW50UmVjdChjbGlwcGVkQ29udGVudFJlY3QpOwogCi0gICAgICAgIC8vIFNp
bmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2UgbmVlZCB0byBhZGp1
c3QgaXRzCi0gICAgICAgIC8vIGNsaXBSZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1
cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotCiAgICAgICAgIC8vIEFkanVzdCB0aGUgb3Jp
Z2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZh
Y2UuCiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5k
ZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFu
c2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lk
dGgoKSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdo
dCgpLCAwKTsKQEAgLTgxMywxMyArODI4LDEzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAg
ICAgICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIp
OwogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAg
ICAgICAgICBsYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJ
ZiBuZWl0aGVyIHRoaXMgbGF5ZXIgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gd2VyZSBhZGRlZCwg
ZWFybHkgb3V0LgogICAgIGlmIChzb3J0aW5nU3RhcnRJbmRleCA9PSBkZXNjZW5kYW50cy5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYg
cHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGluIDNEIHNvIHRoYXQg
dGhleSBjYW4gYmUKICAgICAvLyBkcmF3biBmcm9tIGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVz
ZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHBhcmVudCB0aGVuCkBAIC04Mjcs
NyArODQyLDEyIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgaWYgKGRlc2NlbmRhbnRz
LnNpemUoKSAmJiBsYXllci0+cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAh
bGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkKICAgICAgICAgc29ydExheWVycygmZGVz
Y2VuZGFudHMuYXQoc29ydGluZ1N0YXJ0SW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJT
b3J0ZXIpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUgPSBlbmNsb3NpbmdJbnRS
ZWN0KGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisgICAg
ZWxzZQorICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlID0gbG9jYWxEcmF3YWJs
ZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlOworCisgICAgcmV0dXJuOwogfQogCiAvLyBGSVhNRTogSW5z
dGVhZCBvZiB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIHNldCB2aXNpYmlsaXR5IHJl
Y3RzIG9uIGEgc2Vjb25kCkBAIC04NjQsMTMgKzg4NCwxOSBAQCBzdGF0aWMgdm9pZCBjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50ZXJuYWwoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYQogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4OwotICAgIFdlYkNvcmU6OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290
TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0
aW9uTWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRl
eHR1cmVTaXplKTsKKyAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7CisgICAgV2ViQ29y
ZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5
ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxD
b21wZW5zYXRpb25NYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdCwgcm9vdExheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCksIHRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7CiB9CiAKIHZv
aWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVy
SW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBm
dWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciog
bGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JvbGxDb21wZW5zYXRpb25NYXRyaXg7Ci0gICAgV2ViQ29yZTo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4s
IENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50
TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsIDAs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1
cmVTaXplKTsKKyAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7CisgICAgV2ViQ29yZTo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXll
ciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxDb21wZW5zYXRpb25N
YXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHJhd2FibGVDb250ZW50UmVjdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCksIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBs
YXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9v
dFNjaXNzb3JSZWN0KQpAQCAtOTA5LDEwICs5MzUsMTAgQEAgc3RhdGljIGJvb2wgcG9pbnRJc0Ns
aXBwZWRCeVN1cmZhY2VPckNsaXBSZWN0KGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBD
Q0wKICAgICAgICAgaWYgKGN1cnJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpICYmICFwb2ludEhp
dHNSZWN0KHZpZXdwb3J0UG9pbnQsIGN1cnJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLCBjdXJyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dFJlY3QoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAvLyBOb3RlIHRo
YXQgY2xpcFJlY3RzIGFyZSBhY3R1YWxseSBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlLCBzbyB0aGUg
dHJhbnNmb3JtIHdlCisgICAgICAgIC8vIE5vdGUgdGhhdCBkcmF3YWJsZUNvbnRlbnRSZWN0cyBh
cmUgYWN0dWFsbHkgaW4gdGFyZ2V0U3VyZmFjZSBzcGFjZSwgc28gdGhlIHRyYW5zZm9ybSB3ZQog
ICAgICAgICAvLyBoYXZlIHRvIHByb3ZpZGUgaXMgdGhlIHRhcmdldCBzdXJmYWNlJ3Mgc2NyZWVu
U3BhY2VUcmFuc2Zvcm0uCiAgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJUYXJnZXQgPSBjdXJy
ZW50TGF5ZXItPnJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoY3VycmVudExheWVyLT51c2Vz
TGF5ZXJDbGlwcGluZygpICYmICFwb2ludEhpdHNSZWN0KHZpZXdwb3J0UG9pbnQsIHJlbmRlclRh
cmdldC0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBjdXJyZW50TGF5
ZXItPmNsaXBSZWN0KCkpKQorICAgICAgICBpZiAoIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2lu
dCwgcmVuZGVyVGFyZ2V0LT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCks
IGN1cnJlbnRMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgICAgIGN1cnJlbnRMYXllciA9IGN1cnJlbnRMYXllci0+cGFyZW50KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDdmMTI0MDQzMmI5
Nzg2MjNmMjNhNGIyMGIwMTE5NWMwOGM1MjljYmYuLjBkOWQ3ZmY0MWU1ZWI1MWZkNDhmMDJmZmZk
MmQ1OWFmOWNjNDEwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CkBAIC0yNTksOCArMjU5LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICBtX3Jvb3RM
YXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAgICBtX3Jvb3RM
YXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwogCi0gICAgbV9yb290TGF5ZXJJbXBsLT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7Ci0KICAg
ICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y0RyYXdFdGMiKTsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAppbmRleCAwMDgzYWQxZGQ0
MmI5NDg3Mjg1ODdmZmMyMWVmOWY4Zjk4NjZiNmVjLi4zOTQ2MTU3OGY4NzEzNWE2ZTdkNDlhMjdk
ZDI0ODM5MmI5NDdkNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAK
QEAgLTUxMCwxMSArNTEwLDkgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udHJpYnUKIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBJbnRSZWN0IEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxheWVy
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiBsYXllcikgY29uc3QK
IHsKLSAgICBjb25zdCBMYXllclR5cGUqIHJlbmRlclRhcmdldCA9IG1fc3RhY2subGFzdCgpLnRh
cmdldDsKLSAgICBGbG9hdFJlY3QgdG90YWxTY2lzc29yID0gcmVuZGVyVGFyZ2V0LT5yZW5kZXJT
dXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7Ci0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGlu
ZygpKQotICAgICAgICB0b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsK
LSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0b3RhbFNjaXNzb3IpOworICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCByZW1vdmUgdGhpcyBoZWxwZXIgZnVuY3Rpb24sIGJ1dCB1bml0IHRlc3RzIGN1
cnJlbnRseSBvdmVycmlkZSB0aGlzCisgICAgLy8gICAgICAgIGZ1bmN0aW9uLCBhbmQgdGhleSBu
ZWVkIHRvIGJlIHZlcmlmaWVkL2FkanVzdGVkIGJlZm9yZSB0aGlzIGNhbiBiZSByZW1vdmVkLgor
ICAgIHJldHVybiBsYXllci0+c2Npc3NvclJlY3QoKTsKIH0KIAogLy8gRGVjbGFyZSB0aGUgcG9z
c2libGUgZnVuY3Rpb25zIGhlcmUgZm9yIHRoZSBsaW5rZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCmluZGV4IDc5ZmRhYzRlY2M5MDVmMTNhZTg3ODczNGIwNTE2NDAwYWZiZjViNzYuLjE2
ZDhmYTE5NDk1MjJlMWE1NDZiMjk0OTA1MTY3YTZlMmE3YWJhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCkBAIC05MSw3ICs5MSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNjcmVlblNw
YWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm1zQXJlQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9y
bXNBcmVBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybXNB
cmVBbmltYXRpbmcgPSBhbmltYXRpbmc7IH0KIAotICAgIC8vIFVzYWdlOiB0aGlzIGNsaXBSZWN0
IHNob3VsZCBub3QgYmUgdXNlZCBpZiBvbmUgb2YgdGhlIHR3byBjb25kaXRpb25zIGlzIHRydWU6
IChhKSBjbGlwUmVjdCgpIGlzIGVtcHR5LCBvciAoYikgb3duaW5nTGF5ZXItPnBhcmVudCgpLT51
c2VzTGF5ZXJDbGlwcGluZygpIGlzIGZhbHNlLgogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3Qg
SW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jbGlwUmVjdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJJbXBsVGVzdC5jcHAKaW5kZXggMjJjZjg5N2NiODVjMDEzMTA2OThkOGNlYzgzM2IxNmMzMGFm
YWU1Ni4uNDdlZGVlYzlkY2MwNzhkZTE2MmE0NGI2ZjhhZDY2ZGU4NWI2NGUxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcApAQCAtMTY3
LDggKzE2Nyw2IEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlMYXllckNoYW5nZXNBcmVU
cmFja2VkUHJvcGVybHkpCiAKICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBpbnRlcm5hbCwg
YW5kIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCAiY2hhbmdlIiB3aGVuIHRoZXkgYXJlIHVzZWQu
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0Uocm9vdC0+c2V0
SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NV
QlRSRUVfRElEX05PVF9DSEFOR0Uocm9vdC0+c2V0Q2xpcFJlY3QoYXJiaXRyYXJ5SW50UmVjdCkp
OwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNl
dFVzZXNMYXllckNsaXBwaW5nKHRydWUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJF
RV9ESURfTk9UX0NIQU5HRShyb290LT5zZXREcmF3T3BhY2l0eShhcmJpdHJhcnlOdW1iZXIpKTsK
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRS
ZW5kZXJUYXJnZXQoMCkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9OT1Rf
Q0hBTkdFKHJvb3QtPnNldERyYXdUcmFuc2Zvcm0oYXJiaXRyYXJ5VHJhbnNmb3JtKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNw
cAppbmRleCA4NmEzNzQzMjU1ZWIyYTg2YzE2N2Q1MDQ2NGRlZGJmZTRmNzFlNDQxLi43NmRjNDI1
YWE5ZjZiMWUyOTQ0MGUxY2FmNWFjODA5ZTI0NzY5ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTU4LDcgKzU4
LDggQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQogICAgIHsKICAg
ICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKLSAgICAgICAgc2V0RHJhd2FibGVD
b250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgICAgIHNldFBvc2l0aW9u
KEludFBvaW50Ojp6ZXJvKCkpOworICAgICAgICBzZXRBbmNob3JQb2ludChJbnRQb2ludDo6emVy
bygpKTsKICAgICB9CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwpAQCAtMjM5LDYgKzI0MCw3
IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjMxID0gVGVzdExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwogCiAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgcm9vdExheWVyLT5ib3VuZHMoKSkpOwogCiAgICAgcm9vdExheWVyLT5hZGRDaGlsZChy
b290MSk7CiAgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Mik7CkBAIC0yNTYsNiArMjU4LDcg
QEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
ICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7CisgICAgCiAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0
KCksIHJvb3RMYXllci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcAppbmRleCAyNmFlNmNhNDczMjFkMGJkYTYwNjczY2M3MjAzN2Q3MTZiNzczZmM4Li4wZTNl
M2VjZTRkYTk3YjBiNGRjZGVmODJiYzI5NmUwZjQzNTU3M2U1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKQEAgLTc3LDYgKzc3LDExIEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBBU1NFUlQocm9vdExheWVyLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVCghcm9vdExheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOworICAg
IHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIHJvb3RMYXllci0+Ym91bmRzKCkpKTsKKyAgICAKICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
IH0KQEAgLTEyNSw2ICsxMzAsNyBAQCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUcmVl
Rm9yRml4ZWRQb3NpdGlvblRlc3RzKCkKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5y
ZWxlYXNlKCkpOwogICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CiAgICAgcm9v
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwog
CiAgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOwogfQpAQCAtMjAwLDcgKzIwNiw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVy
KQogICAgIC8vIENhc2UgNDogQSBjaGFuZ2UgaW4gYWN0dWFsIHBvc2l0aW9uIGFmZmVjdHMgYm90
aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0uCiAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25UcmFuc2Zvcm07CiAgICAgcG9zaXRpb25UcmFu
c2Zvcm0udHJhbnNsYXRlKDAsIDEuMik7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMjUsIDAuMjUpLCBGbG9hdFBvaW50KDAsIDEuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNSwgMC4yNSksIEZsb2F0UG9p
bnQoMCwgMS4yKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKQEAgLTIyNyw3ICsyMzMsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICAvLyAgICAgICAgIFRoZSBjdXJy
ZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zIGRvZXMgdGhpcyBp
bXBsaWNpdGx5LCBidXQgaXQgaXMKICAgICAvLyAgICAgICAgIHN0aWxsIHdvcnRoIHRlc3Rpbmcg
dG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMuCiAgICAgZXhwZWN0ZWRSZXN1bHQgPSBw
b3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAq
IHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwotICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjUsIDApLCBGbG9hdFBvaW50KDAsIDEuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXll
clRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41LCAwKSwgRmxvYXRQb2lu
dCgwLCAxLjIpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKICAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRl
ciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwpA
QCAtMjU5LDcgKzI2NSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICAvLyBDYXNlIDI6IHBhcmVudCdzIHBv
c2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kQ2hpbGQuCiAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07CiAgICAgcGFyZW50UG9zaXRpb25UcmFu
c2Zvcm0udHJhbnNsYXRlKDAsIDEuMik7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLjI1LCAwLjI1KSwgRmxvYXRQb2ludCgwLCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1LCAwLjI1KSwgRmxvYXRQ
b2ludCgwLCAxLjIpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTYsIDE4KSwg
ZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CkBAIC0zMzAsMjQg
KzMzNiwyNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJU
cmFuc2Zvcm07Ci0gICAgcGFyZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLCAyLCAxKTsKKyAg
ICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNkKDEsIDAuOSwgMSk7CiAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKLSAgICBwYXJlbnRUcmFu
c2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDMpOworICAgIHBhcmVudFRyYW5zbGF0aW9u
VG9BbmNob3IudHJhbnNsYXRlKDI1LCAzMCk7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
cGFyZW50U3VibGF5ZXJNYXRyaXg7Ci0gICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgx
MCwgMTAsIDMuMyk7CisgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgwLjksIDEsIDMu
Myk7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRl
cjsKLSAgICBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LCA2KTsKKyAgICBw
YXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1MCwgNjApOwogICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0
aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9B
bmNob3IuaW52ZXJzZSgpCiAgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIg
KiBwYXJlbnRTdWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJz
ZSgpOworCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyOwogICAgIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOCwgOSk7CisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7Cisg
ICAgZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDQsIDUpOwogCiAgICAg
Ly8gQ2hpbGQncyByZW5kZXIgc3VyZmFjZSBzaG91bGQgbm90IGV4aXN0IHlldC4KICAgICBBU1NF
UlRfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAKLSAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1
YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjUsIDAuMjUpLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1YmxheWVyTWF0cml4
LCBGbG9hdFBvaW50KDAuMjUsIDAuMjUpLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwg
MTIwKSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoLTAuNSwgLTAuNSksIEludFNp
emUoMSwgMSksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5k
Q2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg4LCAxMCksIGZhbHNlKTsKICAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CiAK
ICAgICAvLyBSZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgbm93LgpAQCAt
MzU5LDE5MyArMzY4LDE2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCiAgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOwogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKLSAgICAvLyBX
aXRob3V0IGNsaXBwaW5nLCB0aGUgb3JpZ2luIHRyYW5zZm9ybSBhbmQgZHJhdyB0cmFuc2Zvcm0g
KGluIHRoaXMgcGFydGljdWxhciBjYXNlKSBzaG91bGQgYmUgdGhlIHNhbWUuCiAgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxk
LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Ci0g
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3Jt
KCkpOworCisgICAgLy8gQmVjYXVzZSB0aGUgZ3JhbmRDaGlsZCBpcyB0aGUgb25seSBkcmF3YWJs
ZSBjb250ZW50LCB0aGUgY2hpbGQncyByZW5kZXJTdXJmYWNlIHdpbGwgdGlnaHRlbiBpdHMgYm91
bmRzIHRvIHRoZSBncmFuZENoaWxkLgorICAgIC8vIFRoZXJlZm9yZSwgdGhlIGRyYXcgdHJhbnNm
b3JtIHdpbGwgaGF2ZSBhIHRyYW5zbGF0aW9uIG9mIGhhbGYtd2lkdGgsIGhhbGYtaGVpZ2h0IG9m
IHRoZSBncmFuZENoaWxkJ3MgYm91bmRzLgorICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNm
b3JtKCkpOwogCiAgICAgLy8gVGhlIHNjcmVlbiBzcGFjZSBpcyB0aGUgc2FtZSBhcyB0aGUgdGFy
Z2V0IHNpbmNlIHRoZSBjaGlsZCBzdXJmYWNlIGRyYXdzIGludG8gdGhlIHJvb3QuCiAgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNo
aWxkLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKIH0KIAotVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdE5v
Q2xpcCkKLXsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxU
aHJlYWQ7Ci0KLSAgICAvKgotICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6Ci0K
LSAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAxIHwKLSAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKLSAgICAgICAgIHwgIHwg
ICAgICAgICAyIHwgICAgIHwKLSAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0g
ICAgICAgICB8ICB8IHwgICAzICAgICAgICAgICAgICAgfAotICAgICAgICAgfCAgfCArLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKLSAgICAgICAg
IHwgICstLS0tLS0tLS0tLSsgICAgIHwKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwK
LSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLSsKLQotICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKLSAg
ICAgKi8KLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEpOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDIpOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMyk7Ci0KLSAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKLSAgICBJ
bnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7Ci0gICAgSW50UmVjdCBncmFuZENoaWxk
UmVjdCg1LCA1LCAxNTAsIDE1MCk7Ci0KLSAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
Ci0gICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOwotICAg
IHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdo
dCgpKSk7Ci0gICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJv
b3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOwotCi0gICAgY2hpbGQtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwotICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKLSAgICBjaGlsZC0+c2V0T3Bh
Y2l0eSgwLjUpOwotICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgo
KSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7Ci0gICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKLQotICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwot
ICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwg
Z3JhbmRDaGlsZFJlY3QueSgpKSk7Ci0gICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUo
Z3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKLSAgICBn
cmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0KLSAgICBDQ0xheWVySW1wbCogY2hp
bGRQdHIgPSBjaGlsZC5nZXQoKTsKLSAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdy
YW5kQ2hpbGQuZ2V0KCk7Ci0KLSAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNl
KCkpOwotICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7Ci0KLSAgICBWZWN0b3I8
Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIHsKLSAgICAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IGxheWVyTGlzdDsKLSAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7Ci0gICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7Ci0KLSAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0KLSAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKLQotICAg
ICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX1RSVUUoY2hp
bGRQdHItPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpKTsKLSAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgp
KTsKLSAgICAKLSAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJV
KTsKLSAgICAKLSAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7Ci0KLSAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBj
aGlsZHJlbidzIGJvdW5kcwotICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50
UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBn
cmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOwotICAgIEFTU0VS
VF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLQot
ICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOwotICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5j
bGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICAKLSAgICBBU1NFUlRfRkFMU0Uo
cm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51
c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNl
c0xheWVyQ2xpcHBpbmcoKSk7Ci0gICAgCi0gICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVu
Ci0gICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKLSAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdERhbWFnZSk7Ci0gICAgCi0gICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdl
dCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OwotCi0gICAgLy8gY2hpbGQgc3VyZmFjZSBkb2Vzbid0IGhhdmUgYSBjbGlwIHJlY3QsIHRoZXJl
Zm9yZSBpdCB3aWxsIGJlIGNvbXB1dGVkIGFzIGludGVyc2VjdGlvbgotICAgIC8vIGJldHdlZW4g
cm9vdCBzdXJmYWNlJ3MgY29udGVudHJlY3QgYW5kIGNoaWxkIHN1cmZhY2UncyBkcmF3YWJsZSBj
b250ZW50IHJlY3QuCi0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KGNoaWxkUmVjdC54KCksIGNoaWxk
UmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKLQotICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7Ci0KLSAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRp
cmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgotICAgIC8v
IEV2ZW4gdGhvdWdoIGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMg
c28gaXRzIGNoaWxkcmVuCi0gICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykg
ZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JS
ZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJv
b3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOwotCi0gICAgLy8gR3JhbmQgY2hpbGQg
d2lsbCBoYXZlIHRoZSBzYW1lIHNjaXNzb3IgcmVjdCBhcyBpdCBkb2Vzbid0IGhhdmUgYSBzdXJm
YWNlCi0gICAgLy8gb2YgaXRzIG93bgotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgp
LCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKLSAgICAKLSAgICAvLyBFbXB0
eSBkYW1hZ2UKLSAgICByb290RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7Ci0gICAgCi0gICAgLy8gRW1wdHkgZGFtYWdl
ID09IGVtcHR5IHNjaXNzb3IKLSAgICBFWFBFQ1RfRVEocm9vdC0+cmVuZGVyVGFyZ2V0KCktPnJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICAKLSAgICBFWFBFQ1RfRVEocm9v
dC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICBFWFBFQ1Rf
RVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0g
ICAgCi0gICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCi0gICAgcm9vdERhbWFnZSA9
IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKLSAgICAKLSAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290
Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNlKCktPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0gICAgLy8gRW50aXJlIGRhbWFn
ZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCi0gICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFt
YWdlKTsKLSAgICAKLSAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXll
cgotICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKLQotICAg
IC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZm
ZXJlbnQgb2Zmc2V0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGls
ZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKLQot
ICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMg
c2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCi0gICAgRVhQRUNUX0VRKGdyYW5k
Q2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJl
Y3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgo
KSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25k
IGNoaWxkCi0gICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOwotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKLSAgICAKLSAgICAvLyBTY2lzc29ycyBh
cmUgbm90IGNvbXB1dGVkIGZvciByb290Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdl
dCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OwotCi0gICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNl
Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKLSAgICAKLSAgICAvLyBFbnRpcmUgZGFtYWdl
IHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgotICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVj
dCgpLCByb290RGFtYWdlKTsKLQotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4g
dGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0Ci0gICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0Lngo
KSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJv
b3REYW1hZ2UuaGVpZ2h0KCkpKTsKLQotICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUg
aXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGls
ZCdzCi0gICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwotCi0gICAg
Ly8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKLSAgICByb290RGFtYWdlID0gSW50UmVjdCgx
MCwgMTAsIDExMCwgMTEwKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7
Ci0gICAgCi0gICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAotICAgIEVY
UEVDVF9FUShyb290LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLQotICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5v
dCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50
ZXJzZWN0IHdpdGggZGFtYWdlLgotICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJl
Y3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5Ci0gICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJv
b3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7Ci0gICAg
Ci0gICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50
IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQotICAgIC8vIFJlc3Vs
dCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5k
YXJ5Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCks
IHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKLQotICAgIC8vIENoaWxkcmVu
J3MgY29udGVudCByZWN0cyBhcmUgYmlnZ2VyIHRoYW4gdGhlIHJvb3QncyBzbyB0aGV5IGRvbid0
IGNsaXAgdGhlIGRhbWFnZSByZWN0LCBidXQgY2hhbmdlIGl0cyBvZmZzZXQuCi0gICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndp
ZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKLSAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7Ci19Ci0KIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
c2Npc3NvclJlY3RXaXRoQ2xpcCkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhp
c1Njb3BlSXNPbkltcGxUaHJlYWQ7CkBAIC02MjMsMzkgKzQ1NSwyNyBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXApCiAgICAgCiAgICAgRVhQRUNU
X0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAyVSk7CiAgICAgCi0gICAgLy8gTm93
IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcwotICAgIEFTU0VSVF9FUShyb290LT5jbGlw
UmVjdCgpLCByb290UmVjdCk7Ci0KLSAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24g
b2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcwotICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xp
cFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVj
dC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkp
OwotICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKLQotICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCisgICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOwogICAgIC8vIENoaWxkIHN1cmZhY2UncyBj
bGlwcGluZyByZWN0IGlzIG5vdyBzZXQgdG8gcm9vdCdzCiAgICAgQVNTRVJUX0VRKGNoaWxkUHRy
LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKICAgICAKLSAgICBBU1NF
UlRfVFJVRShyb290LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICBBU1NFUlRfRkFMU0UoY2hp
bGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxk
UHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICAKICAgICAvLyBEYW1hZ2UgdGhlIGVudGly
ZSBzY3JlZW4KICAgICBJbnRSZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOwogICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKICAgICAKICAgICBFWFBFQ1RfRVEocm9vdC0+cmVu
ZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgLy8gQ2hp
bGQncyByZW5kZXJTdXJmYWNlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdG8gaW5jbHVkZSB0aGUgMTUw
eDE1MCBncmFuZENoaWxkIGxvY2F0ZWQgYXQgKDUsIDUpLCBhbmQgdGhlbiBoYXZlIGJlZW4gY2xp
cHBlZCBieSB0aGUgcGFyZW50LgorICAgIEludFJlY3QgZXhwZWN0ZWRDaGlsZFJlbmRlclN1cmZh
Y2VTY2lzc29yID0gaW50ZXJzZWN0aW9uKHJvb3RSZWN0LCBJbnRSZWN0KDEwLCAxMCwgMTU1LCAx
NTUpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIGV4cGVjdGVkQ2hpbGRSZW5kZXJTdXJmYWNlU2Npc3Nvcik7
CiAgICAgCiAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJl
Y3QpKTsKIAotICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNo
aWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCi0gICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFz
IGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KLSAg
ICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3Ig
cmVjdAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisgICAgLy8gVGhlIGNoaWxkIGxheWVyIGlzIG5vdCBjbGlwcGVkIGJ5
IGFueXRoaW5nICh0aGF0IGNsaXAgaXMgYWxyZWFkeSByZXByZXNlbnRlZCBieSB0aGUgcm9vdFN1
cmZhY2UgY2xpcHBpbmcgdGhlIGNoaWxkJ3Mgc3VyZmFjZSkKKyAgICAvLyBTbyBoZXJlLCB0aGUg
ZXhwZWN0ZWQgc2Npc3NvciBpcyBqdXN0IHRoZSBjaGlsZCBsYXllcidzIHJlY3QgZXhwcmVzc2Vk
IGluIHRhcmdldFN1cmZhY2UgKGNoaWxkIHN1cmZhY2UpIHNwYWNlLgorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCBjaGlsZFJlY3Qud2lkdGgoKSwg
Y2hpbGRSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhl
IHNhbWUgc2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKLSAgICAvLyBv
ZiBpdHMgb3duCi0gICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0Lmhl
aWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIC8vIEdyYW5kIGNoaWxkIGlzIChpbmRpcmVj
dGx5KSBjbGlwcGVkIGJ5IHRoZSByb290IHN1cmZhY2UuIEJ1dCB0aGUgc2Npc3NvciBpcyBleHBy
ZXNzZWQgaW4gdGhlIHRhcmdldFN1cmZhY2UgKGNoaWxkIHN1cmZhY2UpIHNwYWNlLgorICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUs
IDUsIDg1LCA4NSkpOwogICAgIAogICAgIC8vIEVtcHR5IGRhbWFnZQogICAgIHJvb3REYW1hZ2Ug
PSBJbnRSZWN0KDAsIDAsIDAsIDApOwpAQCAtNjg1LDggKzUwNSw4IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAog
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CiAKLSAgICAvLyBHcmFuZCBj
aGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBp
cyBpZGVudGljYWwgdG8gY2hpbGQncwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERh
bWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2Uu
aGVpZ2h0KCkpKTsKKyAgICAvLyBHcmFuZCBjaGlsZCBzY2lzc29yIGlzIHRoZSBkYW1hZ2UgaW50
ZXJzZWN0ZWQgd2l0aCB0aGUgY2xpcHBlZCBncmFuZENoaWxkIGxheWVyIHJlY3QgKGV4cHJlc3Nl
ZCBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlKS4KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCg1LCA1LCAxNSwgMTUpKTsKIAogICAgIC8vIFBhcnRpYWwg
ZGFtYWdlIGJleW9uZCBjaGlsZAogICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAs
IDgwKTsKQEAgLTcwMSwxMSArNTIxLDEyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSBsYXllcgogICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFt
YWdlKTsKIAotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBi
dXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVp
Z2h0KCkpKTsKKyAgICAvLyBDaGlsZCBsYXllciBvdmVybGFwcyBhIHBvcnRpb24gb2YgdGhlIGRh
bWFnZSByZWN0LgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgp
IC0gY2hpbGRSZWN0LnkoKSwgY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkp
OwogCi0gICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNv
IGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKLSAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisgICAgLy8gR3JhbmQgY2hpbGQgc2Npc3Nv
ciBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIGRhbWFnZSBhbmQgZ3JhbmRDaGlsZCByZWN0LCBleHBy
ZXNzZWQgaW4gY2hpbGQgc3VyZmFjZS4KKyAgICAvLyBUaGUgZGFtYWdlIGZpdHMgZW50aXJlbHkg
d2l0aGluIHRoZSBncmFuZENoaWxkLgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShncmFuZENoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUsIDUsIDc1LCA3NSkpOwogCiAgICAgLy8gUGFy
dGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKICAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAs
IDExMCwgMTEwKTsKQEAgLTcxNCwxNyArNTM1LDEzIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKICAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNv
bXB1dGVkIGZvciByb290CiAgICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdldCgpLT5yZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwogCi0gICAg
Ly8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRS
ZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCi0gICAgLy8gUmVzdWx0
IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRh
cnkKKyAgICAvLyBSb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3Vu
ZGFyeS4KICAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2Uu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKLSAgICAKLSAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXll
ciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0
IHdpdGggZGFtYWdlCi0gICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBj
bGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0
LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdl
LnkoKSkpOwogCiAgICAgLy8gTm93IHRoZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1
cmZhY2VzIGNvbnRlbnRSZWN0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkg
LSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RS
ZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKLSAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJv
b3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAg
RVhQRUNUX0lOVF9SRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RE
YW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgp
LCBjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgRVhQRUNUX0lO
VF9SRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoNSwgNSwgMTA1
LCAxMDUpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVj
dFdpdGhDbGlwQW5kU3BhY2VUcmFuc2Zvcm0pCkBAIC04MTMsMzggKzYzMCwyNiBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5z
Zm9ybSkKICAgICAKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCks
IDNVKTsKICAgICAKLSAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRzCi0g
ICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKLQotICAgIEFTU0VSVF9F
UShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBjaGlsZFJlY3QueCgpICsgZ3Jh
bmRDaGlsZFJlY3Qud2lkdGgoKSAsIGNoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWln
aHQoKSkpOwotCi0gICAgLy8gR3JhbmRjaGlsZCBub3cgY2xpcHMKLSAgICBBU1NFUlRfRVEoZ3Jh
bmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkg
KyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxk
UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KKyAgICBFWFBFQ1RfSU5UX1JFQ1Rf
RVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7CiAgICAgLy8g
Q2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290J3MKLSAgICBB
U1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3Qp
OwotICAgIAotICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAg
IEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Ci0gICAgQVNTRVJU
X0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEVYUEVDVF9J
TlRfUkVDVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVj
dCk7CiAgICAgCiAgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCiAgICAgSW50UmVjdCBy
b290RGFtYWdlKHJvb3RSZWN0KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFn
ZSk7CiAgICAgCi0gICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290UmVjdCkpOworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJUYXJnZXQo
KS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KyAgICAvLyBDaGlsZCdzIHJlbmRlclN1cmZhY2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0byBpbmNs
dWRlIHRoZSBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIsIGFuZCB0aGVuIGhhdmUgYmVlbiBj
bGlwcGVkIGJ5IHRoZSBwYXJlbnQuCisgICAgSW50UmVjdCBleHBlY3RlZENoaWxkUmVuZGVyU3Vy
ZmFjZVNjaXNzb3IgPSBpbnRlcnNlY3Rpb24ocm9vdFJlY3QsIEludFJlY3QoMTAsIDEwLCAxNjAs
IDE2MCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgZXhwZWN0ZWRDaGlsZFJlbmRlclN1cmZhY2VTY2lzc29y
KTsKICAgICAKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
UmVjdCkpOwogCi0gICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQg
Y2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KLSAgICAvLyBFdmVuIHRob3VnaCBpdCBo
YXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgot
ICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3Nv
ciByZWN0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAt
IGNoaWxkUmVjdC55KCkpKTsKKyAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgbm90IGNsaXBwZWQg
YnkgYW55dGhpbmcgKHRoYXQgY2xpcCBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IHRoZSByb290
U3VyZmFjZSBjbGlwcGluZyB0aGUgY2hpbGQncyBzdXJmYWNlKQorICAgIC8vIFNvIGhlcmUsIHRo
ZSBleHBlY3RlZCBzY2lzc29yIGlzIGp1c3QgdGhlIGNoaWxkIGxheWVyJ3MgcmVjdCBleHByZXNz
ZWQgaW4gdGFyZ2V0U3VyZmFjZSAoY2hpbGQgc3VyZmFjZSkgc3BhY2UuCisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGNoaWxkUmVjdC53aWR0aCgp
LCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIC8vIEdyYW5kIGNoaWxkIGlzIG5vdyBzY2lz
c29yZWQgYnkgdGhlIHJlbmRlciBzdXJmYWNlCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGRyYXdz
IHRvIGl0cyBvd24gcmVuZGVyIHN1cmZhY2UsIHNvIHRoZSBzY2lzc29yUmVjdCBpcyBpbiB0aGF0
IHN1cmZhY2UncyBzcGFjZS4KICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSAtIGdy
YW5kQ2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpIC0gZ3Jh
bmRDaGlsZFJlY3QueSgpKSk7CiAgICAgCiAgICAgLy8gRW1wdHkgZGFtYWdlCkBAIC04OTEsOCAr
Njk2LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhD
bGlwQW5kU3BhY2VUcmFuc2Zvcm0pCiAgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgbGF5ZXIKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CiAKLSAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0
IHdpdGggZGlmZmVyZW50IG9mZnNldAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdo
dCgpKSk7CisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1
dCBpdCBpcyBzdGlsbCBjbGlwcGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdC4KKyAgICBFWFBF
Q1RfSU5UX1JFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIGNo
aWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIEdyYW5kIGNo
aWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMgd2VsbCBhcyBy
b290CiAgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOwpAQCAtOTEyLDggKzcxNyw3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNl
VHJhbnNmb3JtKQogICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xp
cHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JS
ZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53
aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55
KCkpKTsKIAotICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJm
YWNlcyBjb250ZW50UmVjdAotICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVj
dC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0
LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBjaGlsZFJlY3Qud2lkdGgoKSwg
Y2hpbGRSZWN0LmhlaWdodCgpKSk7CiAKICAgICAvLyBHcmFuZGNoaWxkJ3Mgc2Npc3NvciByZWN0
IGlzIGNsaXBwZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlCiAgICAgRVhQRUNUX0VRKGdyYW5kQ2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3Qu
eCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAt
IGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0
LnkoKSkpOwpAQCAtMTAwMSw3ICs4MDUsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogCiAgICAgLy8g
SW4gY29tYmluYXRpb24gd2l0aCBkZXNjZW5kYW50RHJhd3NDb250ZW50LCBvcGFjaXR5ICE9IDEg
Zm9yY2VzIHRoZSBsYXllciB0byBoYXZlIGEgbmV3IHJlbmRlclN1cmZhY2UuCiAgICAgcmVuZGVy
U3VyZmFjZTEtPnNldE9wYWNpdHkoMC41KTsKLSAgICByZW5kZXJTdXJmYWNlMi0+c2V0T3BhY2l0
eSgwLjMzZik7CisgICAgcmVuZGVyU3VyZmFjZTItPnNldE9wYWNpdHkoMC4zMyk7CiAKICAgICAv
LyBBbGwgbGF5ZXJzIGluIHRoZSB0cmVlIGFyZSBpbml0aWFsaXplZCB3aXRoIGFuIGFuY2hvciBh
dCAuMjUgYW5kIGEgc2l6ZSBvZiAoMTAsMTApLgogICAgIC8vIG1hdHJpeCAiQSIgaXMgdGhlIGNv
bXBvc2l0ZSBsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwgbGF5ZXJzLCBjZW50ZXJlZCBhYm91
dCB0aGUgYW5jaG9yIHBvaW50CkBAIC0xMTMxLDE0ICs5MzUsMTUgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlbmRlclN1cmZhY2UxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBjaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKLSAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwLjlmKTsKKyAgICByZW5k
ZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwLjkpOwogCiAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dDo6emVybygpLCBGbG9hdFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwog
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVuZGVyU3VyZmFjZTEuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBv
aW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoMTAsIDEw
KSwgZmFsc2UpOwogCiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgIHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKICAgICBy
ZW5kZXJTdXJmYWNlMS0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2Ux
LT5hZGRDaGlsZChjaGlsZCk7CkBAIC0xMTk2LDExICsxMDAxLDEyIEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Rm9yY2VSZW5kZXJTdXJmYWNlKQogICAgIHJlbmRlclN1
cmZhY2UxLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CiAKICAgICBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBm
YWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMS5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCks
IEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZSgxMCwgMTApLCBmYWxzZSk7CiAKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
LSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7CisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTEp
OwogICAgIHJlbmRlclN1cmZhY2UxLT5hZGRDaGlsZChjaGlsZCk7CiAKQEAgLTE1ODksMTUgKzEz
OTUsMTkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21w
ZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXQKICAgICBjaGlsZC0+c2V0SXNDb250YWlu
ZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOwogICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoOCwgNikpOwogICAgIGdyYW5kQ2hpbGQtPnNldEZvcmNlUmVuZGVyU3Vy
ZmFjZSh0cnVlKTsKLSAgICBncmVhdEdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTQwLCAxMjApKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
NDAsIDYwKSk7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1
ZSk7CiAgICAgZml4ZWRQb3NpdGlvbkNoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXIodHJ1
ZSk7CiAgICAgZml4ZWRQb3NpdGlvbkNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAKICAg
ICAvLyBUaGUgYWRkaXRpb25hbCByb3RhdGlvbnMsIHdoaWNoIGFyZSBub24tY29tbXV0YXRpdmUg
d2l0aCB0cmFuc2xhdGlvbnMsIGhlbHAgdG8KICAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGNv
cnJlY3Qgb3JkZXItb2Ytb3BlcmF0aW9ucyBpbiB0aGUgZmluYWwgc2Nyb2xsIGNvbXBlbnNhdGlv
bi4KKyAgICAvLyBOb3RlIHRoYXQgcm90YXRpbmcgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5
ZXIgZW5zdXJlcyB3ZSBkbyBub3QgYWNjaWRlbnRhbGx5CisgICAgLy8gY2xpcCBhd2F5IGxheWVy
cyB0aGF0IHdlIHdhbnQgdG8gdGVzdC4KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3Rh
dGlvbkFib3V0WjsKKyAgICByb3RhdGlvbkFib3V0Wi50cmFuc2xhdGUoNTAsIDUwKTsKICAgICBy
b3RhdGlvbkFib3V0Wi5yb3RhdGUzZCgwLCAwLCA5MCk7CisgICAgcm90YXRpb25BYm91dFoudHJh
bnNsYXRlKC01MCwgLTUwKTsKICAgICBncmFuZENoaWxkLT5zZXRUcmFuc2Zvcm0ocm90YXRpb25B
Ym91dFopOwogICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRa
KTsKIApAQCAtMTYxNiw3ICsxNDI2LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXQKICAgICBl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CiAKICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFN1cmZhY2VPcmlnaW5U
cmFuc2Zvcm07Ci0gICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNm
b3JtLnRyYW5zbGF0ZSgxNDAsIDEyMCk7CisgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRTdXJm
YWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSg0MCwgNjApOwogICAgIGV4cGVjdGVkR3JlYXRH
cmFuZENoaWxkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7
CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRy
YW5zZm9ybTsKQEAgLTE2NTcsNyArMTQ2Nyw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0CiAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcG91bmRPcmlnaW5UcmFuc2Zvcm07IC8vIHRy
YW5zZm9ybSBmcm9tIGdyZWF0R3JhbmRDaGlsZFN1cmZhY2UncyBvcmlnaW4gdG8gdGhlIHJvb3Qg
c3VyZmFjZS4KICAgICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7IC8v
IG9yaWdpbiB0cmFuc2xhdGlvbiBvZiBncmFuZENoaWxkCiAgICAgY29tcG91bmRPcmlnaW5UcmFu
c2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOyAvLyByb3RhdGlvbiBvZiBncmFuZENoaWxk
Ci0gICAgY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDE0MCwgMTIwKTsgLy8gb3Jp
Z2luIHRyYW5zbGF0aW9uIG9mIGdyZWF0R3JhbmRDaGlsZAorICAgIGNvbXBvdW5kT3JpZ2luVHJh
bnNmb3JtLnRyYW5zbGF0ZSg0MCwgNjApOyAvLyBvcmlnaW4gdHJhbnNsYXRpb24gb2YgZ3JlYXRH
cmFuZENoaWxkCiAgICAgY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25B
Ym91dFopOyAvLyByb3RhdGlvbiBvZiBncmVhdEdyYW5kQ2hpbGQKIAogICAgIGV4cGVjdGVkRml4
ZWRQb3NpdGlvbkNoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwpAQCAtMTg1NCwxNiArMTY2
NCwxNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3Vs
bHNSZW5kZXJTdXJmYWNlcykKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZO
b2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNlKTsKIAogICAgIGNo
aWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwotICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNGYp
OworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CiAgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0
eSgwLjUpOwotICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjRmKTsKKyAgICBncmVh
dEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKIAogICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNw
ZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8g
Zml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CkBAIC0xODc3LDY3ICsxNjg3LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgRVhQRUNUX0VRKGNoaWxkLT5p
ZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKIH0KIAotVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFz
aFJlcHJvKQotewotICAgIC8vIFRoaXMgaXMgYSBzaW1pbGFyIHNpdHVhdGlvbiBhcyB2ZXJpZnlD
bGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMsIGV4Y2VwdCB0aGF0Ci0gICAgLy8gaXQgcmVwcm9k
dWNlcyBhIGNyYXNoIGJ1ZyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVz
L2RldGFpbD9pZD0xMDY3MzQuCi0KLSAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hp
bGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Z3JlYXRHcmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTIgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7Ci0gICAg
Y2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwotICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdy
ZWF0R3JhbmRDaGlsZCk7Ci0KLSAgICAvLyBsZWFmTm9kZTEgZW5zdXJlcyB0aGF0IHBhcmVudCBh
bmQgY2hpbGQgYXJlIGtlcHQgb24gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsCi0gICAgLy8g
ZXZlbiB0aG91Z2ggZ3JhbmRDaGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBiZSBjbGlw
cGVkLgotICAgIGNoaWxkLT5hZGRDaGlsZChsZWFmTm9kZTEpOwotICAgIGdyZWF0R3JhbmRDaGls
ZC0+YWRkQ2hpbGQobGVhZk5vZGUyKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0g
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDIwLCAyMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsK
LSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyZWF0R3JhbmRDaGlsZC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxlYWZOb2RlMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAw
KSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOwotCi0gICAgY2hpbGQtPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7Ci0gICAg
Z3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwotICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3Bh
Y2l0eSgwLjRmKTsKLQotICAgIC8vIENvbnRhbWluYXRlIHRoZSBncmFuZENoaWxkIGFuZCBncmVh
dEdyYW5kQ2hpbGQncyBjbGlwUmVjdCB0byByZXByb2R1Y2UgdGhlIGNyYXNoCi0gICAgLy8gYnVn
IGZvdW5kIGluIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTEwNjczNC4gSW4gdGhpcwotICAgIC8vIGJ1ZywgdGhlIGNsaXBSZWN0IHdhcyBub3QgcmUt
Y29tcHV0ZWQgZm9yIGxheWVycyB0aGF0IGNyZWF0ZSBSZW5kZXJTdXJmYWNlcywgYW5kCi0gICAg
Ly8gdGhlcmVmb3JlIGxlYWZOb2RlMiB0aGlua3MgaXQgc2hvdWxkIGRyYXcgaXRzZWxmLiBBcyBh
IHJlc3VsdCwgYW4gZXh0cmEKLSAgICAvLyByZW5kZXJTdXJmYWNlIHJlbWFpbnMgb24gdGhlIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHdoaWNoIHZpb2xhdGVzIHRoZSBhc3N1bXB0aW9uCi0gICAg
Ly8gdGhhdCBhbiBlbXB0eSByZW5kZXJTdXJmYWNlIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXN0IGl0
ZW0gb24gdGhlIGxpc3QsIHdoaWNoCi0gICAgLy8gdWx0aW1hdGVseSBjYXVzZWQgdGhlIGNyYXNo
LgotICAgIGNoaWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNp
emUoMjAsIDIwKSkpOwotICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBJbnRTaXplKDEyMzQsIDEyMzQpKSk7Ci0KLSAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9v
dC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2ls
bCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwotCi0g
ICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7Ci0gICAgRVhQ
RUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7Ci0g
ICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgp
KTsKLX0KLQogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1
bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKIHsKICAgICAvLyBXaGVuIGEgcmVuZGVy
U3VyZmFjZSBoYXMgYSBjbGlwUmVjdCwgaXQgaXMgdXNlZCB0byBjbGlwIHRoZSBjb250ZW50UmVj
dApAQCAtMTk3MSwxNSArMTcyMCwxNSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAKICAgICBwYXJlbnQtPnNldE1hc2tzVG9Cb3VuZHModHJ1
ZSk7Ci0gICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7Ci0gICAgZ3JhbmRDaGlsZC0+c2V0T3Bh
Y2l0eSgwLjRmKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQt
PnNldE9wYWNpdHkoMC40KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAot
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKQEAgLTE5OTcsOCArMTc0Niw4IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNv
bnRlbnQpCiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOwogICAgIGR1bW15TGF5
ZXJMaXN0LmNsZWFyKCk7CiAKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yMDEwLDE0ICsxNzU5LDE0
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1
cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQtPmlk
KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMl0tPmlkKCkpOwogfQogCi1URVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9M
YXllcnMpCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeURyYXdhYmxlQ29u
dGVudFJlY3RGb3JMYXllcnMpCiB7Ci0gICAgLy8gVmVyaWZ5IHRoYXQgbGF5ZXJzIGdldCB0aGUg
YXBwcm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMgaXMg
dHJ1ZS4KKyAgICAvLyBWZXJpZnkgdGhhdCBsYXllcnMgZ2V0IHRoZSBhcHByb3ByaWF0ZSBkcmF3
YWJsZUNvbnRlbnRSZWN0IHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMgaXMgdHJ1ZS4K
ICAgICAvLwotICAgIC8vICAgZ3JhbmRDaGlsZDEgLSBjb21wbGV0ZWx5IGluc2lkZSB0aGUgcmVn
aW9uOyBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIG1hc2sgcmVnaW9uIChsYXJnZXIgdGhhbiB0aGlz
IGxheWVyJ3MgYm91bmRzKS4KLSAgICAvLyAgIGdyYW5kQ2hpbGQyIC0gcGFydGlhbGx5IGNsaXBw
ZWQgYnV0IE5PVCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJlIHRoZSBwYXJl
bnQncyBjbGlwUmVjdCByZWdhcmRsZXNzIG9mIHRoZSBsYXllcidzIGJvdW5kcy4KLSAgICAvLyAg
IGdyYW5kQ2hpbGQzIC0gcGFydGlhbGx5IGNsaXBwZWQgYW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBj
bGlwUmVjdCB3aWxsIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgbGF5ZXJCb3VuZHMgYW5kIHRoZSBt
YXNrIHJlZ2lvbi4KLSAgICAvLyAgIGdyYW5kQ2hpbGQ0IC0gb3V0c2lkZSBwYXJlbnQncyBjbGlw
UmVjdCwgYW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgZW1wdHkuCisg
ICAgLy8gICBncmFuZENoaWxkMSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247IGRyYXdh
YmxlQ29udGVudFJlY3Qgc2hvdWxkIGJlIHRoZSBsYXllciByZWN0IGV4cHJlc3NlZCBpbiB0YXJn
ZXQgc3BhY2UuCisgICAgLy8gICBncmFuZENoaWxkMiAtIHBhcnRpYWxseSBjbGlwcGVkIGJ1dCBO
T1QgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlIGludGVyc2VjdGlvbiBv
ZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sgcmVnaW9uLgorICAgIC8vICAgZ3JhbmRDaGlsZDMg
LSBwYXJ0aWFsbHkgY2xpcHBlZCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGRyYXdhYmxlQ29udGVu
dFJlY3Qgd2lsbCBzdGlsbCBiZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGxheWVyQm91bmRzIGFuZCB0
aGUgbWFzayByZWdpb24uCisgICAgLy8gICBncmFuZENoaWxkNCAtIG91dHNpZGUgcGFyZW50J3Mg
Y2xpcFJlY3Q7IHRoZSBkcmF3YWJsZUNvbnRlbnRSZWN0IHNob3VsZCBiZSBlbXB0eS4KICAgICAv
LwogCiAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CkBA
IC0yMDQ0LDEwICsxNzkzLDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvTGF5ZXJzKQogCiAgICAgY2hpbGQtPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAgICAgZ3JhbmRDaGlsZDMtPnNldE1hc2tzVG9Cb3VuZHMo
dHJ1ZSk7Ci0gICAgZ3JhbmRDaGlsZDQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAKICAgICAv
LyBGb3JjZSBldmVyeW9uZSB0byBiZSBhIHJlbmRlciBzdXJmYWNlLgotICAgIGNoaWxkLT5zZXRP
cGFjaXR5KDAuNGYpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CiAgICAgZ3JhbmRDaGls
ZDEtPnNldE9wYWNpdHkoMC41KTsKICAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUpOwog
ICAgIGdyYW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAuNSk7CkBAIC0yMDU4LDcgKzE4MDYsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVk
Q29ycmVjdGx5VG9MYXllcnMpCiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAK
ICAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2Ui
IGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJl
LCB0b28uCi0gICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMjA2Niwx
NyArMTgxNCwxNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9MYXllcnMpCiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogCi0gICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjAp
KSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkpOwotICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQyLT5jbGlw
UmVjdCgpKTsKLSAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgxNSwgMTUp
LCBJbnRTaXplKDUsIDUpKSwgZ3JhbmRDaGlsZDMtPmNsaXBSZWN0KCkpOwotICAgIEVYUEVDVF9U
UlVFKGdyYW5kQ2hpbGQ0LT5jbGlwUmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0lOVF9S
RUNUX0VRKEludFJlY3QoSW50UG9pbnQoNSwgNSksIEludFNpemUoMTAsIDEwKSksIGdyYW5kQ2hp
bGQxLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRS
ZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBncmFuZENoaWxkMy0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2lu
dCgxNSwgMTUpLCBJbnRTaXplKDUsIDUpKSwgZ3JhbmRDaGlsZDMtPmRyYXdhYmxlQ29udGVudFJl
Y3QoKSk7CisgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPmRyYXdhYmxlQ29udGVudFJlY3Qo
KS5pc0VtcHR5KCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKIHsKICAgICAvLyBWZXJp
ZnkgdGhhdCByZW5kZXJTdXJmYWNlcyAoYW5kIHRoZWlyIGxheWVycykgZ2V0IHRoZSBhcHByb3By
aWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgog
ICAgIC8vCi0gICAgLy8gTGF5ZXJzIHRoYXQgb3duIHJlbmRlclN1cmZhY2VzIChhdCBsZWFzdCBm
b3Igbm93KSBkbyBub3QgaW5oZXJpdCBhbnkgY2xpcFJlY3Q7CisgICAgLy8gTGF5ZXJzIHRoYXQg
b3duIHJlbmRlclN1cmZhY2VzIChhdCBsZWFzdCBmb3Igbm93KSBkbyBub3QgaW5oZXJpdCBhbnkg
Y2xpcHBpbmc7CiAgICAgLy8gaW5zdGVhZCB0aGUgc3VyZmFjZSB3aWxsIGVuZm9yY2UgdGhlIGNs
aXAgZm9yIHRoZSBlbnRpcmUgc3VidHJlZS4gVGhleSBtYXkgc3RpbGwKICAgICAvLyBoYXZlIGEg
Y2xpcFJlY3Qgb2YgdGhlaXIgb3duIGxheWVyIGJvdW5kcywgaG93ZXZlciwgaWYgbWFza3NUb0Jv
dW5kcyB3YXMgdHJ1ZS4KICAgICAvLwpAQCAtMjEyMiw3ICsxODcwLDcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRv
U3VyZmFjZXMpCiAgICAgZ3JhbmRDaGlsZDQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAKICAg
ICAvLyBGb3JjZSBldmVyeW9uZSB0byBiZSBhIHJlbmRlciBzdXJmYWNlLgotICAgIGNoaWxkLT5z
ZXRPcGFjaXR5KDAuNGYpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CiAgICAgZ3JhbmRD
aGlsZDEtPnNldE9wYWNpdHkoMC41KTsKICAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUp
OwogICAgIGdyYW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAuNSk7CkBAIC0yMTMzLDcgKzE4ODEsNyBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdh
dGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKIAogICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwg
Y2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0
IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0y
MTQ5LDEyICsxODk3LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlD
bGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCiAgICAgRVhQRUNUX0lOVF9S
RUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+
cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDMtPnJlbmRl
clN1cmZhY2UoKS0+Y2xpcFJlY3QoKSk7Ci0KLSAgICAvLyBMYXllcnMgZG8gbm90IGluaGVyaXQg
dGhlIGNsaXBSZWN0IGZyb20gdGhlaXIgb3duZWQgc3VyZmFjZXMsIGJ1dCBpZiBtYXNrc1RvQm91
bmRzIGlzIHRydWUsIHRoZXkgZG8gY3JlYXRlIHRoZWlyIG93biBjbGlwUmVjdC4KLSAgICBFWFBF
Q1RfRkFMU0UoZ3JhbmRDaGlsZDEtPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEVYUEVDVF9G
QUxTRShncmFuZENoaWxkMi0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Ci0gICAgRVhQRUNUX1RSVUUo
Z3JhbmRDaGlsZDMtPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEVYUEVDVF9UUlVFKGdyYW5k
Q2hpbGQ0LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlBbmltYXRpb25zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKQEAg
LTI2MTksNyArMjM2MSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
QmFja0ZhY2VDdWxsaW5nV2l0aG91dFByZXNlcnZlczNkKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKICAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCiAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yNzI0
LDcgKzI0NjUsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tG
YWNlQ3VsbGluZ1dpdGhQcmVzZXJ2ZXMzZCkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7
CiAgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMjgxMSw3ICsyNTUx
LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxp
bmdXaXRoQW5pbWF0aW5nVHJhbnNmb3JtcykKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKIAogICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKQEAgLTI4ODUs
NyArMjYyNCw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0Zh
Y2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOwogICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENs
aXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKQEAgLTM3
MDMsNyArMzQ0MSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVu
ZGVyU3VyZmFjZVRyYW5mb3Jtc0luSGlnaERQSSkKIAogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwogICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENs
aXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKICAgICBjb25z
dCBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3IgPSAxLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGRk
NTI1ZmNiZjc3ODhmMjQwYzFiMmI0NmNiM2QxNWEzMzAxMjE1YjkuLjE0MTkxNjRiNTI5OWIyNWE4
MmM1MDljMzVjYzgzNDA4ZGUzZWNiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMzcsMTAgKzEz
NywxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnRl
bnRTaXplKTsKICAgICAgICAgcm9vdC0+c2V0Qm91bmRzKGNvbnRlbnRTaXplKTsKICAgICAgICAg
cm9vdC0+c2V0Q29udGVudEJvdW5kcyhjb250ZW50U2l6ZSk7CisgICAgICAgIHJvb3QtPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICByb290LT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KDAsIDApKTsKKwogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRz
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKICAgICAgICAgY29udGVudHMtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKICAgICAgICAgY29udGVudHMtPnNldEJvdW5kcyhjb250ZW50U2l6ZSk7CiAg
ICAgICAgIGNvbnRlbnRzLT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRTaXplKTsKKyAgICAgICAg
Y29udGVudHMtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICBjb250ZW50
cy0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgICAgIHJvb3QtPmFkZENo
aWxkKGNvbnRlbnRzLnJlbGVhc2UoKSk7CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtODM4LDEzICs4NDMsMTggQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKICAgICBPd25Q
dHI8Q0NMYXllckltcGw+IGNvbnRlbnRMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAg
ICAgY29udGVudExheWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOwogICAgIGNv
bnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIGNvbnRlbnRMYXllci0+c2V0
UG9zaXRpb24oSW50UG9pbnQoNSwgNSkpOworICAgIGNvbnRlbnRMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgY29udGVudExheWVyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKICAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7
CiAgICAgY29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUu
d2lkdGgoKSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikpOwogCiAgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CiAgICAgc2Ny
b2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgc2Nyb2xsTGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+c2V0Qm91bmRzKHN1
cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+c2V0Q29udGVudEJvdW5kcyhzdXJmYWNlU2l6
ZSk7CisgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAg
IHNjcm9sbExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBzY3Jv
bGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CiAKICAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKQEAgLTg2Miw2ICs4NzIs
OCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21t
aXRBbmRSZWRyYXcpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwogICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgcm9v
dC0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAgICByb290LT5zZXRDb250ZW50Qm91bmRzKHN1
cmZhY2VTaXplKTsKICAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwg
RmxvYXRQb2ludCgwLCAwKSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShz
dXJmYWNlU2l6ZSk7CkBAIC0xMDM4LDYgKzEwNTAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQogewog
ICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKICAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3QtPnNldEJvdW5kcyhzdXJm
YWNlU2l6ZSk7CisgICAgcm9vdC0+c2V0Q29udGVudEJvdW5kcyhzdXJmYWNlU2l6ZSk7CiAgICAg
Ly8gQWxzbyBtYXJrIHRoZSByb290IHNjcm9sbGFibGUgc28gaXQgYmVjb21lcyB0aGUgcm9vdCBz
Y3JvbGwgbGF5ZXIuCiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICBpbnQgc2Ny
b2xsTGF5ZXJJZCA9IDI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBiMGU5ZWU4ZDZjOGJjYTkzMzczOGRmNGJlYjBm
NmYwZjZkZTRkZTQ1Li5jYTNlMjFjM2Q1NTExNWJjNjA3MjczOTAzM2E4YjkyZjE1Mzk4YzZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKQEAgLTIxNzYsOCArMjE3NiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luVGVzdCgpIE9WRVJSSURFCiAgICAgewogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnJvb3RMYXllcigpLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgCiAgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9t
b2NrRGVsZWdhdGUpOwogICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CisKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoMCwgMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0QW5jaG9yUG9p
bnQoRmxvYXRQb2ludCgwLCAwKSk7CisKICAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElz
RHJhd2FibGUodHJ1ZSk7CiAgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxl
KHRydWUpOwogICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMjE4OCw2ICsyMTk0LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdhYmxlKHRydWUpOwogICAgICAgICBtX2NoaWxkTGF5
ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgICAgIG1fY2hpbGRMYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisKICAgICAgICAgbV9yb290U2Nyb2xsTGF5
ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CiAgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRv
TWFpblRocmVhZCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDg3YmRlNTExNzIyODUxNzY4
MzYzYmM4ODk1NGMzYmNhNzBlOWJiNjguLmI1NTlkYjEyY2FlNDQyYzYxMWU5NWE1OTZmNTg0MzUx
MGViNmM3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMjYzLDcgKzI2Myw2IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgQVNTRVJUKCFyb290LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICByb290LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwot
ICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3Qt
PmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwuYXBwZW5k
KG1fcm9vdC5nZXQoKSk7CiAKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJT
b3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMjgyLDcgKzI4MSw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgQVNTRVJUKCFyb290LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICByb290
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkp
OwotICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJv
b3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVt
LmFwcGVuZChtX3Jvb3QpOwogCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMjA2OSw3ICsyMDY3LDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoc3VyZmFjZUNoaWxkMiwgb2NjbHVzaW9uKTsKICAgICAg
ICAgdGhpcy0+ZW50ZXJMYXllcihzdXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7Ci0gICAgICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KDEwMCwgMCwgMTUwLCAzMDApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VDaGlsZCwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkp
KTsKKyAgICAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoMTAwLCAwLCAxMDAsIDMwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNoaWxkLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMzAwKSkpOwogICAgICAgICB0aGlzLT5sZWF2ZUxheWVyKHN1cmZhY2VDaGlsZCwg
b2NjbHVzaW9uKTsKICAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihzdXJmYWNlLCBvY2NsdXNpb24p
OwogICAgICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgyMDAsIDAsIDUwLCAzMDApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2UsIEludFJlY3QoMCwgMCwgMzAw
LCAzMDApKSk7CkBAIC0yMTIxLDcgKzIxMTksNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgdGhp
cy0+dmlzaXRMYXllcihzdXJmYWNlQ2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT5l
bnRlckxheWVyKHN1cmZhY2VDaGlsZCwgb2NjbHVzaW9uKTsKLSAgICAgICAgRVhQRUNUX0lOVF9S
RUNUX0VRKEludFJlY3QoMTAwLCAwLCAxNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3Qoc3VyZmFjZUNoaWxkLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgICAg
ICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgxMDAsIDAsIDEwMCwgMzAwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ2hpbGQsIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlTGF5ZXIoc3VyZmFjZUNoaWxkLCBvY2NsdXNpb24p
OwogICAgICAgICB0aGlzLT5lbnRlckxheWVyKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAgICAgICAg
IEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KDIwMCwgMCwgNTAsIDMwMCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5j
cHAKaW5kZXggMDA0MDIyYjY2YzE5OGVjNDkwNTM0ZDE3NWI0ZjUwZDQ3Njk0MGQwYi4uYTkzMmFi
NjFjMmE4MGQ2Mzg4Y2ZhMjVmMzk5ZDQzOGNiMTZkY2M5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTQ5NSwxMCArNDk1
LDggQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2Vz
Q29ycmVjdEJlaGF2aW9yKQogCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5v
dCBjYWxsIG5lZWRzRGlzcGxheSBhbmQgbmVlZHNDb21taXQgd2hlbiBjaGFuZ2VkLgogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNDAsIDUwKSkpOwotICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0
VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVF
RFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVu
dCh0cnVlKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJ
T1IoMCwgdGVzdExheWVyLT5zZXREcmF3T3BhY2l0eSgwLjUpKTsKLSAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldENsaXBSZWN0
KEludFJlY3QoMywgMywgOCwgOCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldFJlbmRlclRhcmdldCgwKSk7CiAgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVy
LT5zZXREcmF3VHJhbnNmb3JtKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVD
VVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNl
dFNjcmVlblNwYWNlVHJhbnNmb3JtKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>153842</attachid>
            <date>2012-07-23 12:45:53 -0700</date>
            <delta_ts>2012-07-23 12:45:53 -0700</delta_ts>
            <desc>diff between previous patch and upcoming next one</desc>
            <filename>diff-between-patches.patch</filename>
            <type>application/octet-stream</type>
            <size>7086</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGUwMTA0YTYu
LjM0Mzc2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApA
QCAtNDA0LDEwICs0MDQsOSBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xs
Q29tcGVuc2F0aW9uTWF0cml4Rm9yQ2hpbGRyZW4oQ0NMYXllckltcGwqCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgogc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwKICAgICBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCi0gICAg
LyogTk9UIGNvbnN0LCB2YWxpZCBvbmx5IGFmdGVyIHJlY3Vyc2lvbiByZXR1cm5zICovIEludFJl
Y3QmIGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUsCi0gICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3RGcm9tQW5jZXN0b3IsIGNvbnN0IGJvb2wgYW5jZXN0b3JDbGlwc1N1YnRyZWUsCisgICAg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3RGcm9tQW5jZXN0b3IsIGJvb2wgYW5jZXN0b3JDbGlwc1N1
YnRyZWUsCiAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1Bp
eGVscywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVy
TGlzdCwKLSAgICBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkK
KyAgICBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSwgSW50UmVj
dCYgZHJhd2FibGVDb250ZW50UmVjdE9mU3VidHJlZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGNvbXB1dGVzIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9ucyByZWN1cnNpdmVseSBmb3Ig
dGhpcwogICAgIC8vIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJdCBhbHNvIGNvbXB1
dGVzIHRoZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMuCkBAIC02MDgsMTIgKzYwNyw2IEBA
IHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgYWdncmVnYXRl
IGhpZXJhcmNoeSBtYXRyaXggdG8gaW5jbHVkZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBuZXdseSBj
cmVhdGVkIFJlbmRlclN1cmZhY2UuCiAgICAgICAgIG5leHRIaWVyYXJjaHlNYXRyaXgubXVsdGlw
bHkoc3VyZmFjZU9yaWdpblRyYW5zZm9ybSk7CiAKLSAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJm
YWNlIGNsaXBSZWN0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0
bwotICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFj
ZSBvbnRvIGl0cyBjb250YWluaW5nCi0gICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9y
ZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICBp
ZiAoYW5jZXN0b3JDbGlwc1N1YnRyZWUpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRD
bGlwUmVjdChjbGlwUmVjdEZyb21BbmNlc3Rvcik7Ci0KICAgICAgICAgLy8gVGhlIG5ldyByZW5k
ZXJTdXJmYWNlIGhlcmUgd2lsbCBjb3JyZWN0bHkgY2xpcCB0aGUgZW50aXJlIHN1YnRyZWUuIFNv
LCB3ZSBkbwogICAgICAgICAvLyBub3QgbmVlZCB0byBjb250aW51ZSBwcm9wYWdhdGluZyB0aGUg
Y2xpcHBpbmcgc3RhdGUgZnVydGhlciBkb3duIHRoZSB0cmVlLiBUaGlzCiAgICAgICAgIC8vIHdh
eSwgd2UgY2FuIGF2b2lkIHRyYW5zZm9ybWluZyBjbGlwUmVjdHMgZnJvbSBhbmNlc3RvciB0YXJn
ZXQgc3VyZmFjZSBzcGFjZSB0bwpAQCAtNzE1LDggKzcwOCw4IEBAIHN0YXRpYyB2b2lkIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiBy
b290TGF5CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5n
ZXQoKTsKICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRyZWU7
CiAgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXll
ckxpc3QsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwg
c3VibGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIG5leHRTY3JvbGxDb21wZW5zYXRp
b25NYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVD
b250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlLCBjbGlwUmVjdEZvclN1YnRyZWUsIHN1YnRyZWVTaG91
bGRCZUNsaXBwZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVz
dEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5k
YW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUsIHN1YnRyZWVTaG91bGRCZUNsaXBw
ZWQsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5
ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplLCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRy
ZWUpOwogICAgICAgICBpZiAoIWRyYXdhYmxlQ29udGVudFJlY3RPZkNoaWxkU3VidHJlZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGFjY3VtdWxhdGVkRHJhd2FibGVDb250ZW50UmVjdE9mQ2hp
bGRyZW4udW5pdGUoZHJhd2FibGVDb250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlKTsKICAgICAgICAg
ICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtNzQzLDYgKzczNiwxMiBAQCBzdGF0
aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyVHlwZSogcm9vdExheQogICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250ZW50UmVjdCA9
IGxvY2FsRHJhd2FibGVDb250ZW50UmVjdE9mU3VidHJlZTsKICAgICAgICAgRmxvYXRQb2ludCBz
dXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2VudGVyKCk7CiAK
KyAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIGNsaXBSZWN0IGlzIGV4cHJlc3NlZCBpbiB0
aGUgc3BhY2Ugd2hlcmUgdGhpcyBzdXJmYWNlIGRyYXdzLCBpLmUuIHRoZSBzYW1lIHNwYWNlIGFz
IGNsaXBSZWN0RnJvbUFuY2VzdG9yLgorICAgICAgICBpZiAoYW5jZXN0b3JDbGlwc1N1YnRyZWUp
CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdEZyb21BbmNl
c3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBS
ZWN0KEludFJlY3QoKSk7CisKICAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ug
c2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KICAgICAgICAgRmxvYXRTaXplIGNl
bnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7CiAKQEAgLTg4Niw4ICs4ODUsOCBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIExheWVyQwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNh
dGlvbk1hdHJpeDsKICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAgV2ViQ29y
ZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5
ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxD
b21wZW5zYXRpb25NYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdCwgcm9vdExheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCksIHRydWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCksIHRydWUsIDAsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSwg
ZHJhd2FibGVDb250ZW50UmVjdCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiBy
b290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJl
U2l6ZSkKQEAgLTg5NSw4ICs4OTQsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySQogICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeDsKICAgICBJbnRS
ZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAgV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVy
U3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBm
dWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVDb250
ZW50UmVjdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCksIHRydWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4
dHVyZVNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCB0cnVl
LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRl
eHR1cmVTaXplLCBkcmF3YWJsZUNvbnRlbnRSZWN0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3Qm
IHJvb3RTY2lzc29yUmVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153843</attachid>
            <date>2012-07-23 12:54:13 -0700</date>
            <delta_ts>2012-07-23 13:46:32 -0700</delta_ts>
            <desc>addressed reviewer comments</desc>
            <filename>bug-80622-20120723125405.patch</filename>
            <type>text/plain</type>
            <size>98060</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQyMDBmOTU5MWM1NGVm
NWJlNTdkZmQ3YzUxM2FjNjE2YmMwMmY0Yi4uYzQ1NDRhZTU0MmMxYmQ0ODZhODY5ODE5MzhhMmFh
OGEwMDVhYWViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA3LTIwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBjbGVhbiB1cCBjbGlwUmVjdCBhbmQgZHJh
d2FibGVDb250ZW50UmVjdCBkZXNpZ24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgY2xpcFJlY3QoKSwgdXNlc0xheWVyQ2xpcHBpbmcoKSwgYW5kIGRyYXdh
YmxlQ29udGVudFJlY3QoKSBoYXZlIGJlZW4KKyAgICAgICAgdmVyeSBjb25mdXNpbmcgaW4gQ0NM
YXllclRyZWVIb3N0Q29tbW9uIGZvciBhIHdoaWxlLiBUaGlzIHBhdGNoCisgICAgICAgIHJlZmFj
dG9ycyBpdCBzbyB0aGF0ICgxKSBjbGlwcGluZyBpcyBvbmx5IGRvbmUgbG9jYWxseSBpbgorICAg
ICAgICBjYWxjRHJhd1RyYW5zZm9ybXMsIGFuZCAoMikgdGhlIGxheWVyJ3MgZHJhd2FibGVDb250
ZW50UmVjdCB2YWx1ZQorICAgICAgICBpcyBub3cgbWVhbmluZ2Z1bCB2YWx1ZSBvdXRzaWRlIG9m
IGNhbGNEcmF3VHJhbnNmb3Jtcy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgbGF5ZXIgaXMg
bm93IGFsd2F5cyBjbGlwcGVkIHRvIHRoZSByb290CisgICAgICAgIHN1cmZhY2UncyBjb250ZW50
Qm91bmRzICh3aGljaCBhcmUgc2V0IHRvIHRoZSB2aWV3cG9ydCBib3VuZHMpLgorICAgICAgICBU
aGlzIHJlZmFjdG9yIG5vdCBvbmx5IG1ha2VzIGNhbGNEcmF3VHJhbnNmb3JtcyBmYXIgbW9yZSBy
ZWFkYWJsZSBhbmQgaW50dWl0aXZlLCBidXQKKyAgICAgICAgdGhpcyBwYXRjaCBlbmFibGVzIG1v
cmUgdXBjb21pbmcgYmVuZWZpY2lhbCByZWZhY3RvcnMsIGluY2x1ZGluZworICAgICAgICB0aGUg
cGVuZGluZyByZWZhY3RvciBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODg5NTMuCisKKyAgICAgICAgVGVzdHMgYXJlIGFsc28gc2lnbmlmaWNhbnRseSB1cGRhdGVk
IHRvIGtlZXAgdXAgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIGNoYW5nZS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIFJlbW92ZWQgbV91c2VzTGF5ZXJDbGlwcGluZyBhbmQgbV9jbGlwUmVjdCBh
bmQgYXNzb2NpYXRlZCBhY2Nlc3NvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VD
aHJvbWl1bSk6CisgICAgICAgIFVwZGF0ZWQgY29tbWVudAorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAg
ICBSZW1vdmVkIG1fdXNlc0xheWVyQ2xpcHBpbmcgYW5kIG1fY2xpcFJlY3QgYW5kIGFzc29jaWF0
ZWQgYWNjZXNzb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgcmVtb3ZlZCBzZXRDbGlwUmVjdCBjb2RlIHRoYXQgbm8g
bG9uZ2VyIGFwcGxpZXMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVM
YXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgc2Npc3NvciByZWN0IGlzIG5vdyBhIGxpdHRsZSBi
aXQgdGlnaHRlciwgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIGRhbWFnZSBhbmQgbGF5ZXIncyBu
ZXcgZHJhd2FibGVDb250ZW50UmVjdC4KKworICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3Vy
ZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgc2Npc3NvciByZWN0IGlzIG5vdyBhIGxpdHRsZSBi
aXQgdGlnaHRlciwgZXhjZXB0IHdoZW4gZmlsdGVycyBhcmUgaW52b2x2ZWQuCisKKyAgICAgICAg
KFdlYkNvcmU6OmxheWVyQ2xpcHNTdWJ0cmVlKToKKyAgICAgICAgbmV3IGhlbHBlciBmdW5jdGlv
bgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVZpc2li
bGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmVlU2hvdWxkUmVuZGVyVG9T
ZXBhcmF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNJbnRlcm5hbCk6CisgICAgICAgICAgIC0gYWRkZWQgZHJhd2FibGVDb250ZW50UmVjdE9mU3Vi
dHJlZSB0byB0aGUgZnVuY3Rpb24gYXJncywgaXQgaXMgdmFsaWQgb25seSBhZnRlciByZWN1cnNp
b24gcmV0dXJucywKKyAgICAgICAgICAgLSBhZGRlZCBjbGlwUmVjdEZyb21BbmNlc3RvciBhbmQg
Ym9vbCBhbmNlc3RvckNsaXBzU3VidHJlZSB0byBmdW5jdGlvbiBhcmdzLCB0aGlzIHJlcGxhY2Vz
IHRoZSBsYXllcidzIGNsaXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZy4KKyAgICAgICAgICAg
LSByZW1vdmVkIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSwgd2hpY2ggd2FzIHJlZHVuZGFudCB3
aXRoIGRyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUuCisgICAgICAgICAgIC0gcmVwbGFjZWQg
YWxsIHRoZSAic2V0RHJhd2FibGVDb250ZW50UmVjdCIgbG9naWMgd2l0aCBtb3JlIGludHVpdGl2
ZSwgY2xlYXIgbG9naWMuCisgICAgICAgICAgIC0gbm93LCBsYXllcidzIGRyYXdhYmxlQ29udGVu
dFJlY3QgcmVwcmVzZW50cyB0aGUgY2xpcHBlZCBib3VuZHMgb2YgdGhlIGxheWVyIGV4cHJlc3Nl
ZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAgICAgICAoV2Vi
Q29yZTo6cG9pbnRJc0NsaXBwZWRCeVN1cmZhY2VPckNsaXBSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VM
YXllckxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2Nj
bHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmxheWVyU2Npc3NvclJlY3RJ
blRhcmdldFN1cmZhY2UpOgorICAgICAgICBVcGRhdGVkIHRoaXMgYWNjZXNzb3IuICBJdCBjb3Vs
ZCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUsIGJ1dCBub3QgYXBwcm9wcmlhdGUgZm9yIHRoaXMg
cGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaDoKKwogMjAxMi0wNy0yMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzMzOS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGEwNThmZTViMmM2Y2VmOWRkMjU4MWIyODRi
Zjg0MmQ0N2Y5NzkwMy4uZjI4OTk0MGVlYTNhYjI4NDEzNmEwMzEwOWFiNWQ1YzRhMTJlN2YyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0wNy0yMCAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFJlZmFjdG9yIENDTGF5ZXJUcmVlSG9zdENvbW1vbjogY2xlYW4gdXAgY2xpcFJlY3QgYW5k
IGRyYXdhYmxlQ29udGVudFJlY3QgZGVzaWduCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MDYyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1hbnkgdGVzdHMgbmVlZGVkIHRvIGJlIHVwZGF0ZWQgYmVjYXVz
ZSB0aGUgc2VtYW50aWNzIG9mIHRoZSBsYXllciB0cmVlIGhhdmUgY2hhbmdlZDoKKyAgICAgICAg
ICAtIGEgZmV3IHRlc3RzIHRoYXQgd2VyZSBubyBsb25nZXIgYXBwbGljYWJsZSB3ZXJlIHJlbW92
ZWQuCisgICAgICAgICAgLSBtYW55IHRlc3RzIG5lZWRlZCB0byBoYXZlIGZpeGVkIGluaXRpYWxp
emF0aW9uLCBwcm9wZXJseQorICAgICAgICAgICAgc2V0dGluZyBzdXJmYWNlIGNvbnRlbnRSZWN0
IGFuZCByb290TGF5ZXIgYm91bmRzLgorICAgICAgICAgIC0gYmVjYXVzZSBjbGlwUmVjdCBhbmQg
dXNlc0xheWVyQ2xpcHBpbmcgbm8gbG9uZ2VyIGV4aXN0cywgdGhvc2UgcGxhY2VzIGluIGNvZGUg
aGFkIHRvIGJlIHJlbW92ZWQvY2hhbmdlZAorICAgICAgICAgIC0gdGhlIHNjaXNzb3JSZWN0IHRl
c3RzIG5lZWRlZCB0byBoYXZlIHVwZGF0ZWQgZXhwZWN0YXRpb25zCisgICAgICAgICAgICBiZWNh
dXNlIGFmdGVyIHRoaXMgcGF0Y2gsIHRoZSByb290TGF5ZXIgU3VyZmFjZSBub3cgY2xpcHMKKyAg
ICAgICAgICAgIHRvIGl0cyBjb250ZW50Qm91bmRzLgorICAgICAgICAgIC0gdGhlIGNsaXBSZWN0
IHRlc3RzIHdlcmUgY2hhbmdlZCB0byB0ZXN0IHRoZSBsYXllcidzIG5ldyBzZW1hbnRpY3MgZm9y
IHRoZSBkcmF3YWJsZUNvbnRlbnRSZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVySW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVz
dHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3Q6OmNhbGNEcmF3RXRjKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0QW5pbWF0aW9uT3BhY2l0eTFPbk1haW5UaHJl
YWQ6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2Vy
VGVzdEFuaW1hdGlvbk9wYWNpdHkwT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgorICAgICAgICAq
IHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wNy0yMyAgUGV0ZXIgQmV2ZXJs
b28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBCdWlsZGZpeCBm
b3IgZml4aW5nIGdjbGllbnQgb24gdGhlIENocm9taXVtIFdpbmRvd3MgYm90CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDAzMjAzYmYxY2NkNjAzMjQ2ODM5YWIyYzdjMmJhOGUwNzViYjZkYzcu
LjI0ODI3ZTk0NjgxNzdmNDAyNjBlMjIwN2JlOWRlOWJhNWU1NDcwMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCkBAIC03Nyw3ICs3Nyw2IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0o
KQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2UpCiAg
ICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCi0gICAgLCBtX3VzZXNMYXllckNsaXBwaW5nKGZhbHNl
KQogICAgICwgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KGZhbHNlKQogICAgICwgbV9wcmVzZXJ2
ZXMzRChmYWxzZSkKICAgICAsIG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDgzMDU4ZTYzM2E2NDc2ZDI0Yjc3MjRlNjU3MTYyYWI4ZDMy
ZTliZDUuLmFiZDllMzZmODA0NWEwNzUzZjc0OTdkNjA0Y2E5ZTAzYmZjZDRlMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKQEAgLTE5NSw5ICsxOTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VQ
YXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB1c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkp
IHsgbV91c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkgPSB1c2VQYXJlbnRCYWNrZmFjZVZpc2li
aWxpdHk7IH0KICAgICBib29sIHVzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5OyB9CiAKLSAgICB2b2lkIHNldFVz
ZXNMYXllckNsaXBwaW5nKGJvb2wgdXNlc0xheWVyQ2xpcHBpbmcpIHsgbV91c2VzTGF5ZXJDbGlw
cGluZyA9IHVzZXNMYXllckNsaXBwaW5nOyB9Ci0gICAgYm9vbCB1c2VzTGF5ZXJDbGlwcGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlc0xheWVyQ2xpcHBpbmc7IH0KLQogICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wpOwogICAgIGJvb2wgaXNOb25Db21wb3Np
dGVkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsgfQog
CkBAIC0yMzYsOCArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1h
dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogICAgIHZv
aWQgc2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcp
IHsgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQog
Ci0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0
OyB9Ci0gICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgeyBtX2Ns
aXBSZWN0ID0gY2xpcFJlY3Q7IH0KICAgICBMYXllckNocm9taXVtKiByZW5kZXJUYXJnZXQoKSBj
b25zdCB7IEFTU0VSVCghbV9yZW5kZXJUYXJnZXQgfHwgbV9yZW5kZXJUYXJnZXQtPnJlbmRlclN1
cmZhY2UoKSk7IHJldHVybiBtX3JlbmRlclRhcmdldDsgfQogICAgIHZvaWQgc2V0UmVuZGVyVGFy
Z2V0KExheWVyQ2hyb21pdW0qIHRhcmdldCkgeyBtX3JlbmRlclRhcmdldCA9IHRhcmdldDsgfQog
CkBAIC0zNTEsOCArMzQ2LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRl
bnRSZWN0OwogCiAgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBv
dXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgotICAgIC8vIEN1cnJlbnRs
eSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNsaXBwaW5nIGlz
IHRydWUsIG90aGVyd2lzZQotICAgIC8vIGl0J3MgcmVuZGVyVGFyZ2V0J3MgUmVuZGVyU3VyZmFj
ZSBjb250ZW50UmVjdC4KKyAgICAvLyBUaGlzIGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxh
eWVyJ3MgZHJhd2FibGVDb250ZW50UmVjdCBhbmQgZGFtYWdlIChpZiBkYW1hZ2UgdHJhY2tpbmcg
aXMgZW5hYmxlZCkuCiAgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIElu
dFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwpAQCAt
Mzc4LDcgKzM3Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAg
Ym9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7Ci0gICAgYm9vbCBtX3VzZXNM
YXllckNsaXBwaW5nOwogICAgIGJvb2wgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50OwogICAgIGJv
b2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBib29sIG1fdXNlUGFyZW50QmFja2ZhY2VWaXNpYmlsaXR5
OwpAQCAtMzk3LDkgKzM5MCw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsK
ICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKIAotICAgIC8vIFVzZXMgdGFyZ2V0
IHN1cmZhY2Ugc3BhY2UuCi0gICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIExheWVyQ2hyb21p
dW0qIG1fcmVuZGVyVGFyZ2V0OworCiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX2RyYXdUcmFuc2Zvcm07CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3NjcmVlblNwYWNlVHJhbnNmb3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRp
bmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDE2ODFjNWJhM2E0Nzc2
Yzc4NzU0YjYxMmRlYTExYWQxODEzMDkyNmQuLjQ3NDljMTMwZTA0MjRlM2VmYjE1ZWZhODE3ZWEz
NzM5YTY2MzAzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0xMTYs
OCArMTE2LDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAKICAgICAvLyBE
dXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90
aGluZyBzaG91bGQgYmUgZHJhd24uCi0gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgc2V0IHRvIGxh
eWVyJ3MgY2xpcFJlY3QgaWYgdXNlc0xheWVyQ2xpcHBpbmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCi0g
ICAgLy8gaXQncyB0YXJnZXRSZW5kZXJTdXJmYWNlJ3MgY29udGVudFJlY3QuCiAgICAgLy8gVXNl
cyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KICAgICBJbnRSZWN0
IG1fc2Npc3NvclJlY3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA3MTdkOTZkMTAx
NmY1ZjY3MzY5NzIxNzYyNjM3NDlmMjkwZDNiMTMwLi44YTA1YTg4MDcwZjJmNWFlMjE1NDgzODdk
ODJkYTdiMDMzMDMzYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02NCw3ICs2NCw2
IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3ByZXNlcnZlczNE
KGZhbHNlKQogICAgICwgbV91c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpCiAgICAg
LCBtX2RyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoZmFsc2UpCi0gICAgLCBtX3VzZXNM
YXllckNsaXBwaW5nKGZhbHNlKQogICAgICwgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KGZhbHNl
KQogICAgICwgbV9kcmF3c0NvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2ZvcmNlUmVuZGVyU3VyZmFj
ZShmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDYxOTZjMmM0ZDUwOWY4Y2ExNjc0ZDMy
NmMxYjJjOWU1ZGE2NTUzMGYuLjI1YmVkYzIyMDdlNzI5MGNlYjdhZjliODU1ZmRiMmM1NzU3N2Y2
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTQ4LDkgKzE0OCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFVzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHVzZVBhcmVudEJhY2tm
YWNlVmlzaWJpbGl0eSkgeyBtX3VzZVBhcmVudEJhY2tmYWNlVmlzaWJpbGl0eSA9IHVzZVBhcmVu
dEJhY2tmYWNlVmlzaWJpbGl0eTsgfQogICAgIGJvb2wgdXNlUGFyZW50QmFja2ZhY2VWaXNpYmls
aXR5KCkgY29uc3QgeyByZXR1cm4gbV91c2VQYXJlbnRCYWNrZmFjZVZpc2liaWxpdHk7IH0KIAot
ICAgIHZvaWQgc2V0VXNlc0xheWVyQ2xpcHBpbmcoYm9vbCB1c2VzTGF5ZXJDbGlwcGluZykgeyBt
X3VzZXNMYXllckNsaXBwaW5nID0gdXNlc0xheWVyQ2xpcHBpbmc7IH0KLSAgICBib29sIHVzZXNM
YXllckNsaXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2VzTGF5ZXJDbGlwcGluZzsgfQotCiAg
ICAgdm9pZCBzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVkQ29u
dGVudCkgeyBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50
OyB9CiAgICAgYm9vbCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9p
c05vbkNvbXBvc2l0ZWRDb250ZW50OyB9CiAKQEAgLTE3OCwxMCArMTc1LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09w
YWNpdHlJc0FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhi
b29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0g
ZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQogCi0gICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNM
YXllckNsaXBwaW5nKCkgaXMgZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJl
IHVzZWQuCi0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBSZWN0OyB9Ci0gICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1f
Y2xpcFJlY3QgPSByZWN0OyB9Ci0KICAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KICAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KIApAQCAtMzQzLDcg
KzMzNiw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5n
VGlsZXM7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJh
bnNmb3JtOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07
Ci0gICAgYm9vbCBtX3VzZXNMYXllckNsaXBwaW5nOwogICAgIGJvb2wgbV9pc05vbkNvbXBvc2l0
ZWRDb250ZW50OwogCiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKQEAgLTM4OSwxMiArMzgxLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fYmV0d2VlbldpbGxEcmF3QW5kRGlkRHJhdzsKICNlbmRp
ZgogCi0gICAgLy8gVGhlIHJlY3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciB3aGVu
IHRoaXMgbGF5ZXIgaXMgZHJhd24uCi0gICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5
ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCi0gICAgLy8gdG8g
Ym91bmRzLgotICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KLSAgICBJbnRSZWN0
IG1fY2xpcFJlY3Q7Ci0KICAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVn
aW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCiAgICAgLy8gVXNl
cyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDM3N2Y3NGQ1NDQ4MTllY2QyNDQyOWVk
NGI1OWM2NzAxMThiNTc5YTIuLmQyYTc5ZWIxYmZiZTVmNjZkZTFmMjkwYmU1NzEyYmYxMGE2ZmEx
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNDY3LDkgKzQ2Nyw2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyLCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAgICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwogICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50KDAsIDApLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwogCi0gICAg
SW50UmVjdCByb290Q2xpcFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpOwot
ICAgIHJvb3RMYXllci0+c2V0Q2xpcFJlY3Qocm9vdENsaXBSZWN0KTsKLQogICAgIExheWVyTGlz
dCB1cGRhdGVMaXN0OwogICAgIHVwZGF0ZUxpc3QuYXBwZW5kKHJvb3RMYXllcik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IDM5NDZjMjNkYzVkNjQ1
NjZjM2FlZThjOGI5MjIwMTc3Njk0NWU0NTIuLjM0Mzc2NmE2YWRmZGNjMmNmZmExYjMwYzhhZWY2
ZThkNzFkZjhkZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cApAQCAtNzIsMTEgKzcyLDcgQEAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29y
UmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3QKICAgICBSZW5kZXJT
dXJmYWNlVHlwZSogdGFyZ2V0U3VyZmFjZSA9IHJlbmRlclRhcmdldC0+cmVuZGVyU3VyZmFjZSgp
OwogCiAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9IHRhcmdl
dFN1cmZhY2UtPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJvb3RTY2lz
c29yUmVjdCk7Ci0gICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2U7Ci0gICAgaWYgKGxheWVyLT51
c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9u
KHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSwgbGF5ZXItPmNsaXBSZWN0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJl
Y3RJblRhcmdldFN1cmZhY2UsIHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpOworICAgIEZs
b2F0UmVjdCBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lzc29yUmVjdEluVGFy
Z2V0U3VyZmFjZSwgbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CiAKICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKIH0KQEAgLTk1LDEzICs5MSwyMSBAQCBz
dGF0aWMgSW50UmVjdCBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBybwogCiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY3VycmVu
dFN1cmZhY2UtPmNsaXBSZWN0KCk7CiAKLSAgICAvLyBGb3Igc3VyZmFjZXMsIGVtcHR5IGNsaXBS
ZWN0IG1lYW5zIHRoZSBzYW1lIGFzIENDTGF5ZXJJbXBsOjp1c2VzTGF5ZXJDbGlwcGluZyBiZWlu
ZyBmYWxzZQorICAgIC8vIEZvciBzdXJmYWNlcywgZW1wdHkgY2xpcFJlY3QgbWVhbnMgdGhhdCB0
aGUgc3VyZmFjZSBkb2VzIG5vdCBjbGlwIGFueXRoaW5nLgogICAgIGlmIChjbGlwUmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2UtPmNv
bnRlbnRSZWN0KCksIGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAg
IGVsc2UKKyAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0
U3VyZmFjZSA9IHRhcmdldFN1cmZhY2UtPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRT
dXJmYWNlKHJvb3RTY2lzc29yUmVjdCk7CiAKICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9
IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGNsaXBSZWN0KTsK
KworICAgIC8vIElmIHRoZSBsYXllciBoYXMgYmFja2dyb3VuZCBmaWx0ZXJzIHRoYXQgbW92ZSBw
aXhlbHMsIHdlIGNhbm5vdCBzY2lzc29yIGFzIHRpZ2h0bHkuCisgICAgLy8gRklYTUU6IHRoaXMg
c2hvdWxkIGJlIGFibGUgdG8gYmUgYSB0aWdodGVyIHNjaXNzb3IsIHBlcmhhcHMgZXhwYW5kZWQg
YnkgdGhlIGZpbHRlciBvdXRzZXRzPworICAgIGlmIChsYXllci0+YmFja2dyb3VuZEZpbHRlcnMo
KS5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZSA9IHJv
b3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZTsKKwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBBbmREYW1hZ2UpOwogfQogCkBAIC0xNTYsMTQgKzE2MCwxOSBAQCBzdGF0aWMgYm9v
bCBpc1N1cmZhY2VCYWNrRmFjZVZpc2libGUoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitzdGF0aWMg
aW5saW5lIGJvb2wgbGF5ZXJDbGlwc1N1YnRyZWUoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAgICBy
ZXR1cm4gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCBsYXllci0+bWFza0xheWVyKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZp
c2libGVDb250ZW50UmVjdChMYXllclR5cGUqIGxheWVyKQogewogICAgIEFTU0VSVChsYXllci0+
cmVuZGVyVGFyZ2V0KCkpOwogCiAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVy
LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpOwogCi0gICAg
aWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICB0YXJnZXRTdXJmYWNlUmVj
dC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOworICAgIHRhcmdldFN1cmZhY2VSZWN0Lmlu
dGVyc2VjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgIGlmICh0YXJnZXRT
dXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC0yOTgsNyArMzA3LDcgQEAgc3RhdGljIGJv
b2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIs
IGJvb2wgYXhpc0FsaWcKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiB0aGUgbGF5
ZXIgY2xpcHMgaXRzIGRlc2NlbmRhbnRzIGJ1dCBpdCBpcyBub3QgYXhpcy1hbGlnbmVkIHdpdGgg
cmVzcGVjdCB0byBpdHMgcGFyZW50LgotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpICYm
ICFheGlzQWxpZ25lZFdpdGhSZXNwZWN0VG9QYXJlbnQgJiYgZGVzY2VuZGFudERyYXdzQ29udGVu
dCkKKyAgICBpZiAobGF5ZXJDbGlwc1N1YnRyZWUobGF5ZXIpICYmICFheGlzQWxpZ25lZFdpdGhS
ZXNwZWN0VG9QYXJlbnQgJiYgZGVzY2VuZGFudERyYXdzQ29udGVudCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBu
b3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5bGUuCkBAIC0zOTMsMTAgKzQwMiwx
MSBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uTWF0
cml4Rm9yQ2hpbGRyZW4oQ0NMYXllckltcGwqCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5
ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQog
Ly8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMs
IGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMg
Ym9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExh
eWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN1cmZhY2VU
eXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1h
eFRleHR1cmVTaXplKQorc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5h
bChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwKKyAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCisgICAgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3RGcm9tQW5jZXN0b3IsIGJvb2wgYW5jZXN0b3JDbGlwc1N1YnRyZWUsCisgICAgUmVu
ZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwKKyAgICBMYXll
clNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSwgSW50UmVjdCYgZHJhd2Fi
bGVDb250ZW50UmVjdE9mU3VidHJlZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVz
IHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9ucyByZWN1cnNpdmVseSBmb3IgdGhpcwogICAg
IC8vIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJdCBhbHNvIGNvbXB1dGVzIHRoZSBh
cHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMuCkBAIC00ODgsOSArNDk4LDE1IEBAIHN0YXRpYyBi
b29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5
ZXJUeXBlKiByb290TGF5CiAgICAgLy8gICAgICAgIE1bcmVwbGljYTJyb290XSA9IE1bc3VyZmFj
ZTJyb290XSAqIFRyW3JlcGxpY2EtPnBvc2l0aW9uKCldICogVHJbcmVwbGljYV0gKiBUcltvcmln
aW4yYW5jaG9yXS5pbnZlcnNlKCkKICAgICAvLwogCisgICAgLy8gSWYgd2UgZWFybHktZXhpdCBh
bnl3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCB0aGUgZHJhd2FibGVDb250ZW50UmVjdCBvZiB0aGlz
IHN1YnRyZWUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZW1wdHkuCisgICAgZHJhd2FibGVDb250ZW50
UmVjdE9mU3VidHJlZSA9IEludFJlY3QoKTsKKwogICAgIGlmIChzdWJ0cmVlU2hvdWxkQmVTa2lw
cGVkKGxheWVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAKKyAg
ICBJbnRSZWN0IGNsaXBSZWN0Rm9yU3VidHJlZTsKKyAgICBib29sIHN1YnRyZWVTaG91bGRCZUNs
aXBwZWQgPSBmYWxzZTsKKyAgICAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFj
aXR5KCk7CiAgICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gbGF5ZXItPm9wYWNpdHlJ
c0FuaW1hdGluZygpOwogICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgp
LT5wcmVzZXJ2ZXMzRCgpKSB7CkBAIC01NDQsMTMgKzU2MCwxMCBAQCBzdGF0aWMgYm9vbCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSog
cm9vdExheQogICAgIC8vIG5leHRIaWVyYXJjaHlNYXRyaXggd2lsbCBvbmx5IGNoYW5nZSBpZiB0
aGlzIGxheWVyIHVzZXMgYSBuZXcgUmVuZGVyU3VyZmFjZSwgb3RoZXJ3aXNlIHJlbWFpbnMgdGhl
IHNhbWUuCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dEhpZXJhcmNoeU1hdHJpeCA9
IGZ1bGxIaWVyYXJjaHlNYXRyaXg7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRo
ZSB3cm9uZyBwbGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGlu
ZyhmYWxzZSk7Ci0KICAgICBpZiAoc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNl
KGxheWVyLCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSkpKSB7CiAgICAg
ICAgIC8vIENoZWNrIGJhY2stZmFjZSB2aXNpYmlsaXR5IGJlZm9yZSBjb250aW51aW5nIHdpdGgg
dGhpcyBzdXJmYWNlIGFuZCBpdHMgc3VidHJlZQogICAgICAgICBpZiAoIWxheWVyLT5kb3VibGVT
aWRlZCgpICYmIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihsYXllcikgJiYgaXNTdXJmYWNlQmFj
a0ZhY2VWaXNpYmxlKGxheWVyLCBjb21iaW5lZFRyYW5zZm9ybSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKQogICAgICAgICAgICAgbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
QEAgLTU5NCwxNCArNjA3LDExIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgIC8v
IFVwZGF0ZSB0aGUgYWdncmVnYXRlIGhpZXJhcmNoeSBtYXRyaXggdG8gaW5jbHVkZSB0aGUgdHJh
bnNmb3JtIG9mIHRoZSBuZXdseSBjcmVhdGVkIFJlbmRlclN1cmZhY2UuCiAgICAgICAgIG5leHRI
aWVyYXJjaHlNYXRyaXgubXVsdGlwbHkoc3VyZmFjZU9yaWdpblRyYW5zZm9ybSk7CiAKLSAgICAg
ICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIGNsaXBSZWN0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lz
c29yIHJlY3QgdGhhdCBuZWVkcyB0bwotICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3
aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCi0gICAgICAgIC8vIHN1
cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5h
dGUgc3lzdGVtLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChsYXllci0+cGFy
ZW50KCkgPyBsYXllci0+cGFyZW50KCktPmNsaXBSZWN0KCkgOiBsYXllci0+Y2xpcFJlY3QoKSk7
Ci0KLSAgICAgICAgLy8gVGhlIGxheWVyJ3MgY2xpcFJlY3QgY2FuIGJlIHJlc2V0IGhlcmUuIFRo
ZSByZW5kZXJTdXJmYWNlIHdpbGwgY29ycmVjdGx5IGNsaXAgdGhlIHN1YnRyZWUuCi0gICAgICAg
IGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7Ci0gICAgICAgIGxheWVyLT5zZXRD
bGlwUmVjdChJbnRSZWN0KCkpOworICAgICAgICAvLyBUaGUgbmV3IHJlbmRlclN1cmZhY2UgaGVy
ZSB3aWxsIGNvcnJlY3RseSBjbGlwIHRoZSBlbnRpcmUgc3VidHJlZS4gU28sIHdlIGRvCisgICAg
ICAgIC8vIG5vdCBuZWVkIHRvIGNvbnRpbnVlIHByb3BhZ2F0aW5nIHRoZSBjbGlwcGluZyBzdGF0
ZSBmdXJ0aGVyIGRvd24gdGhlIHRyZWUuIFRoaXMKKyAgICAgICAgLy8gd2F5LCB3ZSBjYW4gYXZv
aWQgdHJhbnNmb3JtaW5nIGNsaXBSZWN0cyBmcm9tIGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHNw
YWNlIHRvCisgICAgICAgIC8vIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UgdGhhdCBjb3Vs
ZCBjYXVzZSBtb3JlIHcgPCAwIGhlYWRhY2hlcy4KKyAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xp
cHBlZCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCiAgICAgICAg
ICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFJlbmRlclRhcmdldChsYXllcik7CkBAIC02MTEs
NiArNjIxLDcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKIAogICAgICAgICBpZiAobGF5ZXIt
PmZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgICAgIG5lYXJl
c3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyA9IHJlbmRlclN1cmZhY2U7CisKICAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+c2V0TmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzKG5lYXJlc3RBbmNl
c3RvclRoYXRNb3Zlc1BpeGVscyk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQobGF5ZXIpOwpAQCAtNjI3LDI2ICs2MzgsMzMgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RM
YXkKICAgICAgICAgICAgIEFTU0VSVChsYXllci0+cGFyZW50KCkpOwogICAgICAgICAgICAgbGF5
ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJp
dCB0aGUgY2xpcCByZWN0IGZyb20gdGhlaXIgcGFyZW50LgotICAgICAgICAgICAgbGF5ZXItPnNl
dENsaXBSZWN0KGxheWVyLT5wYXJlbnQoKS0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgICAgICBpZiAo
bGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICAgICAgICAgIGxh
eWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKLQorICAgICAgICAgICAgLy8gTGF5ZXJz
IHdpdGhvdXQgcmVuZGVyU3VyZmFjZXMgZGlyZWN0bHkgaW5oZXJpdCB0aGUgYW5jZXN0b3IncyBj
bGlwIHN0YXR1cy4KKyAgICAgICAgICAgIHN1YnRyZWVTaG91bGRCZUNsaXBwZWQgPSBhbmNlc3Rv
ckNsaXBzU3VidHJlZTsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvckNsaXBzU3VidHJlZSkKKyAg
ICAgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQgYXJlIG5vdCB0aGVpciBv
d24gcmVuZGVyVGFyZ2V0IHdpbGwgcmVuZGVyIGludG8gdGhlIHRhcmdldCBvZiB0aGVpciBuZWFy
ZXN0IGFuY2VzdG9yLgogICAgICAgICAgICAgbGF5ZXItPnNldFJlbmRlclRhcmdldChsYXllci0+
cGFyZW50KCktPnJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGNvZGUgc2hvdWxkIGV2ZW50
dWFsbHkgZ28gYXdheS4gQnV0IGJlZm9yZSB0aGF0IGlzIHRydWx5IHBvc3NpYmxlLAorICAgICAg
ICAgICAgLy8gICAgICAgIHRlc3RzIChvciBjb2RlKSByZWxhdGVkIHRvIENDT2NjbHVzaW9uVHJh
Y2tlciBuZWVkIHRvIGJlIGFkanVzdGVkIHNvIHRoYXQgdGhleSBkbyBub3QgcmVxdWlyZQorICAg
ICAgICAgICAgLy8gICAgICAgIHRoZSByb290TGF5ZXIgdG8gY2xpcDsgdGhlIHJvb3QgbGF5ZXIn
cyBSZW5kZXJTdXJmYWNlIHdvdWxkIGFscmVhZHkgY2xpcCBhbmQgc2hvdWxkIGJlIGVub3VnaC4K
KyAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3RvckNs
aXBzU3VidHJlZSk7CisgICAgICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDbGlw
UmVjdChjbGlwUmVjdEZyb21BbmNlc3Rvcik7CisgICAgICAgICAgICBzdWJ0cmVlU2hvdWxkQmVD
bGlwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNsaXBSZWN0Rm9yU3VidHJlZSA9IGNsaXBSZWN0
RnJvbUFuY2VzdG9yOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tYXNrc1Rv
Qm91bmRzKCkpIHsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJS
ZWN0OwotCi0gICAgICAgIC8vIElmIHRoZSBsYXllciBhbHJlYWR5IGluaGVyaXRlZCBhIGNsaXBS
ZWN0LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRoIGl0IGJlZm9yZQotICAgICAgICAvLyBvdmVy
cmlkaW5nIHRoZSBsYXllcidzIGNsaXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZy4KLSAgICAg
ICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICAgICAgY2xpcFJlY3Qu
aW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKLQotICAgICAgICBsYXllci0+c2V0Q2xpcFJl
Y3QoY2xpcFJlY3QpOwotICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSk7
CisgICAgaWYgKGxheWVyQ2xpcHNTdWJ0cmVlKGxheWVyKSkgeworICAgICAgICBzdWJ0cmVlU2hv
dWxkQmVDbGlwcGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlICYm
ICFsYXllci0+cmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRy
ZWUgPSBjbGlwUmVjdEZyb21BbmNlc3RvcjsKKyAgICAgICAgICAgIGNsaXBSZWN0Rm9yU3VidHJl
ZS5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGNsaXBSZWN0Rm9yU3VidHJlZSA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwogICAgIH0K
IAogICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNm
b3JtLgpAQCAtNjU2LDE2ICs2NzQsNiBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgIGxh
eWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgp
LCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VU
cmFuc2Zvcm0obGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBkcmF3YWJsZUNv
bnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2Yg
dGhlCi0gICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAo
bGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50
UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXll
ckNsaXBwaW5nKCkpCi0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChs
YXllci0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0
KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgIH0gZWxzZQotICAgICAgICBsYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwotCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxh
dHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KQEAgLTY5NSwzNiAr
NzAzLDQ1IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4ID0gY29tcHV0ZVNjcm9sbENvbXBl
bnNhdGlvbk1hdHJpeEZvckNoaWxkcmVuKGxheWVyLCBwYXJlbnRNYXRyaXgsIGN1cnJlbnRTY3Jv
bGxDb21wZW5zYXRpb25NYXRyaXgpOzsKIAorICAgIEludFJlY3QgYWNjdW11bGF0ZWREcmF3YWJs
ZUNvbnRlbnRSZWN0T2ZDaGlsZHJlbjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVy
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBs
YXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgPSBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5k
ZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0
cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LCBu
ZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRl
c2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotCi0gICAgICAgIGlmIChk
cmF3c0NvbnRlbnQpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7
Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9
IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJs
ZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgICAg
ICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoY2hpbGRSZW5k
ZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAgICAgICAgICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRyZWU7CisgICAgICAgIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1
cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgs
IG5leHRIaWVyYXJjaHlNYXRyaXgsIG5leHRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFJlY3RGb3JTdWJ0cmVlLCBzdWJ0
cmVlU2hvdWxkQmVDbGlwcGVkLCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSwgZHJhd2FibGVDb250ZW50
UmVjdE9mQ2hpbGRTdWJ0cmVlKTsKKyAgICAgICAgaWYgKCFkcmF3YWJsZUNvbnRlbnRSZWN0T2ZD
aGlsZFN1YnRyZWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhY2N1bXVsYXRlZERyYXdhYmxl
Q29udGVudFJlY3RPZkNoaWxkcmVuLnVuaXRlKGRyYXdhYmxlQ29udGVudFJlY3RPZkNoaWxkU3Vi
dHJlZSk7CisgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAg
ICAgICAgICBkZXNjZW5kYW50cy5hcHBlbmQoY2hpbGQpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3Qu
dW5pdGUoY2hpbGQtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0gICAgICAgICAgICAgICAgbGF5
ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMo
KSB8fCBsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRl
bnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgZHJhd2FibGVD
b250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwotICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKLSAgICB9Cisg
ICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHJhd2FibGVDb250ZW50UmVjdCBmb3IgdGhpcyBzdWJ0
cmVlICh0aGUgcmVjdCBpcyBpbiB0YXJnZXRTdXJmYWNlIHNwYWNlKQorICAgIEludFJlY3QgbG9j
YWxEcmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlID0gYWNjdW11bGF0ZWREcmF3YWJsZUNvbnRl
bnRSZWN0T2ZDaGlsZHJlbjsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAg
ICBsb2NhbERyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUudW5pdGUodHJhbnNmb3JtZWRMYXll
clJlY3QpOworICAgIGlmIChzdWJ0cmVlU2hvdWxkQmVDbGlwcGVkKQorICAgICAgICBsb2NhbERy
YXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUuaW50ZXJzZWN0KGNsaXBSZWN0Rm9yU3VidHJlZSk7
CisKKyAgICAvLyBDb21wdXRlIHRoZSBsYXllcidzIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCAodGhl
IHJlY3QgaXMgaW4gdGFyZ2V0U3VyZmFjZSBzcGFjZSkKKyAgICBJbnRSZWN0IGRyYXdhYmxlQ29u
dGVudFJlY3RPZkxheWVyID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgaWYgKHN1YnRyZWVT
aG91bGRCZUNsaXBwZWQpCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyLmludGVy
c2VjdChjbGlwUmVjdEZvclN1YnRyZWUpOworICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyKTsKIAorICAgIC8vIENvbXB1dGUgdGhlIHJl
bWFpbmluZyBwcm9wZXJ0aWVzIGZvciB0aGUgcmVuZGVyIHN1cmZhY2UsIGlmIHRoZSBsYXllciBo
YXMgb25lLgogICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IHJvb3RM
YXllcikgewogICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVy
LT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRSZWN0ID0g
bGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBjbGlwcGVkQ29u
dGVudFJlY3QgPSBsb2NhbERyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWU7CiAgICAgICAgIEZs
b2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNl
bnRlcigpOwogCisgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBjbGlwUmVjdCBpcyBleHBy
ZXNzZWQgaW4gdGhlIHNwYWNlIHdoZXJlIHRoaXMgc3VyZmFjZSBkcmF3cywgaS5lLiB0aGUgc2Ft
ZSBzcGFjZSBhcyBjbGlwUmVjdEZyb21BbmNlc3Rvci4KKyAgICAgICAgaWYgKGFuY2VzdG9yQ2xp
cHNTdWJ0cmVlKQorICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QoY2xpcFJl
Y3RGcm9tQW5jZXN0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZW5kZXJTdXJmYWNl
LT5zZXRDbGlwUmVjdChJbnRSZWN0KCkpOworCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5k
ZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCiAgICAgICAgIEZs
b2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOwogCkBAIC03MzMsNyArNzUwLDggQEAg
c3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAgICAgLy8gaXRzIHRhcmdldCBpcyBub3Qga25v
d24gb24gdGhlIG1haW4gdGhyZWFkLCBhbmQgd2Ugc2hvdWxkIG5vdCB1c2UgaXQKICAgICAgICAg
Ly8gdG8gY2xpcC4KICAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkgJiYgdHJhbnNm
b3JtVG9QYXJlbnRJc0tub3duKGxheWVyKSkgewotICAgICAgICAgICAgaWYgKCFyZW5kZXJTdXJm
YWNlLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSAmJiAhY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgLy8gTm90ZSwgaXQgaXMgY29ycmVjdCB0byB1c2UgYW5jZXN0b3JD
bGlwc1N1YnRyZWUgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgbG9va2luZyBhdCB0aGlzIGxheWVyJ3Mg
cmVuZGVyU3VyZmFjZSwgbm90IHRoZSBsYXllciBpdHNlbGYuCisgICAgICAgICAgICBpZiAoYW5j
ZXN0b3JDbGlwc1N1YnRyZWUgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VDbGlwUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QocmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKSwgY2xp
cHBlZENvbnRlbnRSZWN0LCByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAgICAg
ICAgICAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LmludGVyc2VjdChzdXJmYWNlQ2xpcFJlY3Qp
OwogICAgICAgICAgICAgfQpAQCAtNzUxLDEwICs3NjksNiBAQCBzdGF0aWMgYm9vbCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9v
dExheQogCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNsaXBwZWRDb250
ZW50UmVjdCk7CiAKLSAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5k
ZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKLSAgICAgICAgLy8gY2xpcFJlY3QgdG8g
YmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAg
ICAgICBsYXllci0+c2V0Q2xpcFJlY3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0K
ICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBiZSB0aGUg
Y2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZHJhd1RyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwog
ICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpICsgY2Vu
dGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSArIGNlbnRl
ck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVpZ2h0KCksIDApOwpAQCAtODEzLDEzICs4MjcsMTMgQEAg
c3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0Lmxhc3QoKSA9PSBsYXllcik7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZh
Y2UoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIElmIG5laXRoZXIgdGhpcyBsYXllciBub3IgYW55IG9m
IGl0cyBjaGlsZHJlbiB3ZXJlIGFkZGVkLCBlYXJseSBvdXQuCiAgICAgaWYgKHNvcnRpbmdTdGFy
dEluZGV4ID09IGRlc2NlbmRhbnRzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUg
ZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZQogICAgIC8vIGRyYXduIGZyb20g
YmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBv
biB0aGUgcGFyZW50IHRoZW4KQEAgLTgyNyw3ICs4NDEsMTIgQEAgc3RhdGljIGJvb2wgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJv
b3RMYXkKICAgICBpZiAoZGVzY2VuZGFudHMuc2l6ZSgpICYmIGxheWVyLT5wcmVzZXJ2ZXMzRCgp
ICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkp
KQogICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdChzb3J0aW5nU3RhcnRJbmRleCks
IGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgZHJhd2FibGVDb250ZW50UmVj
dE9mU3VidHJlZSA9IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJl
Y3RPZlN1YnRyZWUgPSBsb2NhbERyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWU7CisKKyAgICBy
ZXR1cm47CiB9CiAKIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVu
Y3Rpb24gdG8gc2V0IHZpc2liaWxpdHkgcmVjdHMgb24gYSBzZWNvbmQKQEAgLTg2NCwxMyArODgz
LDE5IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5h
bChjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hy
b21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgs
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJl
U2l6ZSkKIHsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxDb21wZW5zYXRpb25N
YXRyaXg7Ci0gICAgV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXll
ckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSwgdm9pZD4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFy
Y2h5TWF0cml4LCBzY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUpOworICAgIEludFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdDsKKyAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVy
bmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1
bGxIaWVyYXJjaHlNYXRyaXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290
TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSwgdHJ1ZSwgMCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplLCBkcmF3
YWJsZUNvbnRlbnRSZWN0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RM
YXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYg
bGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXpl
KQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlvbk1hdHJp
eDsKLSAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPENDTGF5ZXJJ
bXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVy
PihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHNj
cm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgIEludFJlY3QgZHJhd2FibGVD
b250ZW50UmVjdDsKKyAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFs
PENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xh
eWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlN
YXRyaXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSwgdHJ1ZSwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckxp
c3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSwgZHJhd2FibGVDb250ZW50UmVjdCk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCkBAIC05MDksMTAgKzkzNCwx
MCBAQCBzdGF0aWMgYm9vbCBwb2ludElzQ2xpcHBlZEJ5U3VyZmFjZU9yQ2xpcFJlY3QoY29uc3Qg
SW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDTAogICAgICAgICBpZiAoY3VycmVudExheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgJiYgIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwgY3VycmVudExh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIGN1cnJlbnRMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgICAgIC8vIE5vdGUgdGhhdCBjbGlwUmVjdHMgYXJlIGFjdHVhbGx5IGluIHRh
cmdldFN1cmZhY2Ugc3BhY2UsIHNvIHRoZSB0cmFuc2Zvcm0gd2UKKyAgICAgICAgLy8gTm90ZSB0
aGF0IGRyYXdhYmxlQ29udGVudFJlY3RzIGFyZSBhY3R1YWxseSBpbiB0YXJnZXRTdXJmYWNlIHNw
YWNlLCBzbyB0aGUgdHJhbnNmb3JtIHdlCiAgICAgICAgIC8vIGhhdmUgdG8gcHJvdmlkZSBpcyB0
aGUgdGFyZ2V0IHN1cmZhY2UncyBzY3JlZW5TcGFjZVRyYW5zZm9ybS4KICAgICAgICAgQ0NMYXll
ckltcGwqIHJlbmRlclRhcmdldCA9IGN1cnJlbnRMYXllci0+cmVuZGVyVGFyZ2V0KCk7Ci0gICAg
ICAgIGlmIChjdXJyZW50TGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkgJiYgIXBvaW50SGl0c1Jl
Y3Qodmlld3BvcnRQb2ludCwgcmVuZGVyVGFyZ2V0LT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCksIGN1cnJlbnRMYXllci0+Y2xpcFJlY3QoKSkpCisgICAgICAgIGlmICgh
cG9pbnRIaXRzUmVjdCh2aWV3cG9ydFBvaW50LCByZW5kZXJUYXJnZXQtPnJlbmRlclN1cmZhY2Uo
KS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgY3VycmVudExheWVyLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgY3VycmVudExheWVy
ID0gY3VycmVudExheWVyLT5wYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggN2YxMjQwNDMyYjk3ODYyM2YyM2E0YjIwYjAxMTk1YzA4YzUyOWNiZi4u
MGQ5ZDdmZjQxZTVlYjUxZmQ0OGYwMmZmZmQyZDU5YWY5Y2M0MTA3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTI1OSw4ICsyNTksNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxp
c3QmIHJlbmRlclN1cgogICAgIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVh
ckxheWVyTGlzdCgpOwogICAgIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7CiAK
LSAgICBtX3Jvb3RMYXllckltcGwtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgZGV2
aWNlVmlld3BvcnRTaXplKCkpKTsKLQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIpOwogICAgICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRy
YWNrZXIuY3BwCmluZGV4IDAwODNhZDFkZDQyYjk0ODcyODU4N2ZmYzIxZWY5ZjhmOTg2NmI2ZWMu
LjM5NDYxNTc4Zjg3MTM1YTZlN2Q0OWEyN2RkMjQ4MzkyYjk0N2Q2NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcApAQCAtNTEwLDExICs1MTAsOSBAQCBJbnRSZWN0IEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2Nj
bHVkZWRDb250cmlidQogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPjo6bGF5ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShjb25z
dCBMYXllclR5cGUqIGxheWVyKSBjb25zdAogewotICAgIGNvbnN0IExheWVyVHlwZSogcmVuZGVy
VGFyZ2V0ID0gbV9zdGFjay5sYXN0KCkudGFyZ2V0OwotICAgIEZsb2F0UmVjdCB0b3RhbFNjaXNz
b3IgPSByZW5kZXJUYXJnZXQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKLSAgICBp
ZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIHRvdGFsU2Npc3Nvci5pbnRl
cnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRv
dGFsU2Npc3Nvcik7CisgICAgLy8gRklYTUU6IHdlIGNvdWxkIHJlbW92ZSB0aGlzIGhlbHBlciBm
dW5jdGlvbiwgYnV0IHVuaXQgdGVzdHMgY3VycmVudGx5IG92ZXJyaWRlIHRoaXMKKyAgICAvLyAg
ICAgICAgZnVuY3Rpb24sIGFuZCB0aGV5IG5lZWQgdG8gYmUgdmVyaWZpZWQvYWRqdXN0ZWQgYmVm
b3JlIHRoaXMgY2FuIGJlIHJlbW92ZWQuCisgICAgcmV0dXJuIGxheWVyLT5zY2lzc29yUmVjdCgp
OwogfQogCiAvLyBEZWNsYXJlIHRoZSBwb3NzaWJsZSBmdW5jdGlvbnMgaGVyZSBmb3IgdGhlIGxp
bmtlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggNzlmZGFjNGVjYzkwNWYxM2Fl
ODc4NzM0YjA1MTY0MDBhZmJmNWI3Ni4uMTZkOGZhMTk0OTUyMmUxYTU0NmIyOTQ5MDUxNjdhNmUy
YTdhYmFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTkxLDcgKzkxLDYgQEAg
cHVibGljOgogICAgIGJvb2wgc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7IH0KICAgICB2
b2lkIHNldFNjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhib29sIGFuaW1hdGluZykg
eyBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQogCi0g
ICAgLy8gVXNhZ2U6IHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG9uZSBvZiB0
aGUgdHdvIGNvbmRpdGlvbnMgaXMgdHJ1ZTogKGEpIGNsaXBSZWN0KCkgaXMgZW1wdHksIG9yIChi
KSBvd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkgaXMgZmFsc2UuCiAg
ICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAppbmRleCAyMmNmODk3Y2I4
NWMwMTMxMDY5OGQ4Y2VjODMzYjE2YzMwYWZhZTU2Li40N2VkZWVjOWRjYzA3OGRlMTYyYTQ0YjZm
OGFkNjZkZTg1YjY0ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySW1wbFRlc3QuY3BwCkBAIC0xNjcsOCArMTY3LDYgQEAgVEVTVChDQ0xheWVySW1wbFRl
c3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKIAogICAgIC8vIFRoZXNl
IHByb3BlcnRpZXMgYXJlIGludGVybmFsLCBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJj
aGFuZ2UiIHdoZW4gdGhleSBhcmUgdXNlZC4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJF
RV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpKTsK
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRD
bGlwUmVjdChhcmJpdHJhcnlJbnRSZWN0KSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRS
RUVfRElEX05PVF9DSEFOR0Uocm9vdC0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSkpOwogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNldERyYXdP
cGFjaXR5KGFyYml0cmFyeU51bWJlcikpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVF
X0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNldFJlbmRlclRhcmdldCgwKSk7CiAgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFOR0Uocm9vdC0+c2V0RHJhd1RyYW5zZm9ybShh
cmJpdHJhcnlUcmFuc2Zvcm0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCmluZGV4IDg2YTM3NDMyNTVlYjJhODZjMTY3ZDUw
NDY0ZGVkYmZlNGY3MWU0NDEuLjc2ZGM0MjVhYTlmNmIxZTI5NDQwZTFjYWY1YWM4MDllMjQ3Njlm
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJh
dG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRl
cmF0b3JUZXN0LmNwcApAQCAtNTgsNyArNTgsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fZHJh
d3NDb250ZW50KHRydWUpCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEw
MCkpOwotICAgICAgICBzZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKKyAgICAgICAgc2V0UG9zaXRpb24oSW50UG9pbnQ6Onplcm8oKSk7CisgICAgICAgIHNl
dEFuY2hvclBvaW50KEludFBvaW50Ojp6ZXJvKCkpOwogICAgIH0KIAogICAgIGJvb2wgbV9kcmF3
c0NvbnRlbnQ7CkBAIC0yMzksNiArMjQwLDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBj
b21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKICAgICByb290TGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByb290TGF5ZXItPmJvdW5kcygpKSk7CiAK
ICAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QxKTsKICAgICByb290TGF5ZXItPmFkZENoaWxk
KHJvb3QyKTsKQEAgLTI1Niw2ICsyNTgsNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNv
bXBsZXhUcmVlTXVsdGlTdXJmYWNlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExh
eWVyLmdldCgpKTsKKyAgICAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGxheWVyTGlzdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDI2YWU2Y2E0NzMyMWQwYmRhNjA2
NzNjYzcyMDM3ZDcxNmI3NzNmYzguLjBlM2UzZWNlNGRhOTdiMGI0ZGNkZWY4MmJjMjk2ZTBmNDM1
NTczZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtNzcsNiArNzcsMTEgQEAgdm9pZCBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJv
b3RMYXllcikKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIEFT
U0VSVChyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUKCFyb290TGF5ZXIt
PmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNl
dENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcm9vdExheWVyLT5ib3VuZHMoKSkpOwor
ICAgIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMo
cm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVt
bXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQpAQCAtMTI1LDYgKzEzMCw3IEBAIFBhc3NPd25Q
dHI8Q0NMYXllckltcGw+IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKQogICAgIGNo
aWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CiAgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQucmVsZWFzZSgpKTsKICAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAKICAgICByZXR1cm4gcm9vdC5yZWxlYXNlKCk7CiB9
CkBAIC0yMDAsNyArMjA2LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgLy8gQ2FzZSA0OiBBIGNoYW5nZSBpbiBh
Y3R1YWwgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQgc2NyZWVu
IHNwYWNlIHRyYW5zZm9ybS4KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRy
YW5zZm9ybTsKICAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMCwgMS4yKTsKLSAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNSwgMC4yNSksIEZsb2F0UG9pbnQoMCwgMS4y
ZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjI1LCAwLjI1KSwgRmxvYXRQb2ludCgwLCAxLjIpLCBJbnRTaXplKDEwLCAxMiksIGZh
bHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxh
eWVyLmdldCgpKTsKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBvc2l0aW9u
VHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7
CiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwb3NpdGlvblRyYW5zZm9ybSwg
bGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwpAQCAtMjI3LDcgKzIzMyw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVy
KQogICAgIC8vICAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwogICAgIC8vICAg
ICAgICAgc3RpbGwgd29ydGggdGVzdGluZyB0byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9u
cy4KICAgICBleHBlY3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25U
b0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7
Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNSwgMCksIEZsb2F0UG9pbnQoMCwg
MS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjUsIDApLCBGbG9hdFBvaW50KDAsIDEuMiksIEludFNpemUoMTAsIDEyKSwgZmFs
c2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5
ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRS
ZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKICAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CkBAIC0yNTksNyArMjY1LDcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQog
ICAgIC8vIENhc2UgMjogcGFyZW50J3MgcG9zaXRpb24gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRD
aGlsZC4KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRQb3NpdGlvblRyYW5zZm9y
bTsKICAgICBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMCwgMS4yKTsKLSAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjUsIDAuMjUpLCBGbG9hdFBvaW50KDAsIDEu
MmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuMjUsIDAuMjUpLCBGbG9hdFBvaW50KDAsIDEuMiksIEludFNpemUoMTAsIDEyKSwg
ZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNzYsIDc4KSwg
ZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpKTsKQEAgLTMzMCwyNCArMzM2LDI3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCiAKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKLSAgICBwYXJlbnRMYXllclRyYW5z
Zm9ybS5zY2FsZTNkKDIsIDIsIDEpOworICAgIHBhcmVudExheWVyVHJhbnNmb3JtLnNjYWxlM2Qo
MSwgMC45LCAxKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlv
blRvQW5jaG9yOwotICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIuNSwg
Myk7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoMjUsIDMwKTsKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKLSAgICBwYXJl
bnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLCAxMCwgMy4zKTsKKyAgICBwYXJlbnRTdWJsYXll
ck1hdHJpeC5zY2FsZTNkKDAuOSwgMSwgMy4zKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOwotICAgIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50
ZXIudHJhbnNsYXRlKDUsIDYpOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNs
YXRlKDUwLCA2MCk7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRl
VHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNm
b3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCkKICAgICAgICAgICAgICog
cGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlciAqIHBhcmVudFN1YmxheWVyTWF0cml4ICogcGFyZW50
VHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7CisKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CiAgICAgY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLnRyYW5zbGF0ZSg4LCA5KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBncmFuZENo
aWxkVHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRl
ci50cmFuc2xhdGUoNCwgNSk7CiAKICAgICAvLyBDaGlsZCdzIHJlbmRlciBzdXJmYWNlIHNob3Vs
ZCBub3QgZXhpc3QgeWV0LgogICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgp
KTsKIAotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJl
bnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNSwg
MC4yNSksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5z
Zm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNSwgMC4yNSksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMjApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDE2LCAxOCks
IGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgtMC41LCAtMC41KSwgSW50U2l6ZSgxLCAxKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDgsIDEwKSwgZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpKTsKIAogICAgIC8vIFJlbmRlciBzdXJmYWNlIHNob3VsZCBo
YXZlIGJlZW4gY3JlYXRlZCBub3cuCkBAIC0zNTksMTkzICszNjgsMTYgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFj
ZSkKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CiAgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKIAotICAgIC8vIFdpdGhvdXQgY2xpcHBpbmcsIHRoZSBvcmlnaW4gdHJh
bnNmb3JtIGFuZCBkcmF3IHRyYW5zZm9ybSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UpIHNob3Vs
ZCBiZSB0aGUgc2FtZS4KICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNl
KCktPm9yaWdpblRyYW5zZm9ybSgpKTsKLSAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclRhcmdldCgpLT5yZW5k
ZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBCZWNhdXNlIHRoZSBncmFu
ZENoaWxkIGlzIHRoZSBvbmx5IGRyYXdhYmxlIGNvbnRlbnQsIHRoZSBjaGlsZCdzIHJlbmRlclN1
cmZhY2Ugd2lsbCB0aWdodGVuIGl0cyBib3VuZHMgdG8gdGhlIGdyYW5kQ2hpbGQuCisgICAgLy8g
VGhlcmVmb3JlLCB0aGUgZHJhdyB0cmFuc2Zvcm0gd2lsbCBoYXZlIGEgdHJhbnNsYXRpb24gb2Yg
aGFsZi13aWR0aCwgaGFsZi1oZWlnaHQgb2YgdGhlIGdyYW5kQ2hpbGQncyBib3VuZHMuCisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPnJlbmRlclRhcmdldCgpLT5y
ZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBUaGUgc2NyZWVuIHNw
YWNlIGlzIHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQgc2luY2UgdGhlIGNoaWxkIHN1cmZhY2UgZHJh
d3MgaW50byB0aGUgcm9vdC4KICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJm
YWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCi1URVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHNjaXNzb3JSZWN0Tm9DbGlwKQotewotICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKLQotICAgIC8qCi0gICAgICBMYXllcnMg
YXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKLQotICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
KwotICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAotICAgICAgICAgfCAgKy0tLS0tLS0t
LS0tKyAgICAgfAotICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAotICAgICAgICAgfCAg
fCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAg
ICB8Ci0gICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgfCAgfCAg
ICAgICAgICAgfCAgICAgfAotICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAotICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
fAotICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICAgICAgICBMYXllcnMgMSwg
MiBoYXZlIHJlbmRlciBzdXJmYWNlcwotICAgICAqLwotICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBn
cmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKLQotICAgIEludFJlY3Qgcm9vdFJl
Y3QoMCwgMCwgMTAwLCAxMDApOwotICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUw
KTsKLSAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKLQotICAgIHJv
b3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKLSAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0
LngoKSwgcm9vdFJlY3QueSgpKSk7Ci0gICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJl
Y3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKLSAgICByb290LT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0
KCkpKSk7Ci0KLSAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Ci0g
ICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0
LnkoKSkpOwotICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7Ci0gICAgY2hpbGQtPnNldEJvdW5k
cyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKLSAgICBj
aGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotCi0gICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Ci0gICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50
UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKLSAgICBncmFu
ZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENo
aWxkUmVjdC5oZWlnaHQoKSkpOwotICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKLQotICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOwotICAgIENDTGF5
ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKLQotICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKLQotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7Ci0gICAgewotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKLSAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OwotICAgICAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICAgICAgQ0NMYXllclNvcnRlciBsYXll
clNvcnRlcjsKLQotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290Lmdl
dCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwotCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7
Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOwotICAgIH0K
LSAgICAKLSAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBB
U1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEFTU0VSVF9GQUxTRShncmFu
ZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIAotICAgIEVYUEVDVF9FUShyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMlUpOwotICAgIAotICAgIEFTU0VSVF9FUShyb290LT5j
bGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLQotICAgIC8vIExheWVyJ3MgY2xpcFJl
Y3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCi0gICAgQVNTRVJUX0VR
KGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSAr
IGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRS
ZWN0LmhlaWdodCgpKSk7Ci0gICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0gICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAgQVNTRVJUX0VRKGNo
aWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OwotICAgIAotICAgIEFTU0VSVF9GQUxTRShyb290LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAg
ICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAgIEFTU0VS
VF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKLSAgICAKLSAgICAv
LyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KLSAgICBJbnRSZWN0IHJvb3REYW1hZ2Uocm9vdFJl
Y3QpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKLSAgICAKLSAgICBF
WFBFQ1RfRVEocm9vdC0+cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KLSAgICAvLyBjaGlsZCBzdXJmYWNlIGRvZXNu
J3QgaGF2ZSBhIGNsaXAgcmVjdCwgdGhlcmVmb3JlIGl0IHdpbGwgYmUgY29tcHV0ZWQgYXMgaW50
ZXJzZWN0aW9uCi0gICAgLy8gYmV0d2VlbiByb290IHN1cmZhY2UncyBjb250ZW50cmVjdCBhbmQg
Y2hpbGQgc3VyZmFjZSdzIGRyYXdhYmxlIGNvbnRlbnQgcmVjdC4KLSAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOwotCi0gICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKLQotICAg
IC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0
YXJ0cyBhdCBhbiBvZmZzZXQuCi0gICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQg
aXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KLSAgICAvLyAod2hpY2gg
ZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAotICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53
aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgp
KSk7Ci0KLSAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3NvciByZWN0
IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKLSAgICAvLyBvZiBpdHMgb3duCi0gICAgRVhQ
RUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJl
Y3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0
LnkoKSkpOwotICAgIAotICAgIC8vIEVtcHR5IGRhbWFnZQotICAgIHJvb3REYW1hZ2UgPSBJbnRS
ZWN0KDAsIDAsIDAsIDApOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsK
LSAgICAKLSAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgotICAgIEVYUEVDVF9F
UShyb290LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRlclRhcmdl
dCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OwotICAgIAotICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICAKLSAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRo
aW4gY2hpbGQKLSAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7Ci0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOwotICAgIAotICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKLSAgICBFWFBFQ1RfRVEocm9vdC0+cmVuZGVyVGFy
Z2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7Ci0KLSAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZh
Y2UKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwotICAgIAotICAgIC8vIEVudGlyZSBkYW1h
Z2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCi0gICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JS
ZWN0KCksIHJvb3REYW1hZ2UpOwotCi0gICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKLSAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3Qu
eCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2
ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNo
aWxkJ3MKLSAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRS
ZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7Ci0KLSAg
ICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKLSAgICByb290RGFtYWdlID0gSW50UmVj
dCgxMCwgMTAsIDgwLCA4MCk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OwotICAgIAotICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKLSAgICBF
WFBFQ1RfRVEocm9vdC0+cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KLSAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3Qg
aXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRl
clRhcmdldCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwot
ICAgIAotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCi0gICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwotCi0gICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBv
ZmZzZXQKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwotCi0gICAgLy8g
R3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29y
IHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKLSAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAot
ICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKLSAgICAKLSAgICAvLyBTY2lzc29ycyBhcmUgbm90
IGNvbXB1dGVkIGZvciByb290Ci0gICAgRVhQRUNUX0VRKHJvb3QtPnJlbmRlclRhcmdldCgpLT5y
ZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0g
ICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRl
bnRSZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCi0gICAgLy8gUmVz
dWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91
bmRhcnkKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2Uu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKLSAgICAKLSAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXll
ciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0
IHdpdGggZGFtYWdlCi0gICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBj
bGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKLSAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0
LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdl
LnkoKSkpOwotCi0gICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdnZXIgdGhh
biB0aGUgcm9vdCdzIHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1dCBjaGFu
Z2UgaXRzIG9mZnNldC4KLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwot
ICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RE
YW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgp
LCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKLX0KLQogVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQogewogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKQEAgLTYyMywz
OSArNDU1LDI3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RX
aXRoQ2xpcCkKICAgICAKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCksIDJVKTsKICAgICAKLSAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRz
Ci0gICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKLQotICAgIC8vIExh
eWVyJ3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCi0g
ICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hp
bGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSAr
IGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7Ci0gICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHIt
PmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwotCi0gICAgQVNTRVJUX0VRKHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0KKyAg
ICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7
CiAgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290
J3MKICAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwg
cm9vdFJlY3QpOwogICAgIAotICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5n
KCkpOwotICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Ci0g
ICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwotICAg
IAogICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgogICAgIEludFJlY3Qgcm9vdERhbWFn
ZShyb290UmVjdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOwogICAg
IAogICAgIEVYUEVDVF9FUShyb290LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJl
Y3Qocm9vdFJlY3QpKTsKKyAgICAvLyBDaGlsZCdzIHJlbmRlclN1cmZhY2Ugd291bGQgaGF2ZSBl
eHBhbmRlZCB0byBpbmNsdWRlIHRoZSAxNTB4MTUwIGdyYW5kQ2hpbGQgbG9jYXRlZCBhdCAoNSwg
NSksIGFuZCB0aGVuIGhhdmUgYmVlbiBjbGlwcGVkIGJ5IHRoZSBwYXJlbnQuCisgICAgSW50UmVj
dCBleHBlY3RlZENoaWxkUmVuZGVyU3VyZmFjZVNjaXNzb3IgPSBpbnRlcnNlY3Rpb24ocm9vdFJl
Y3QsIEludFJlY3QoMTAsIDEwLCAxNTUsIDE1NSkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgZXhwZWN0ZWRD
aGlsZFJlbmRlclN1cmZhY2VTY2lzc29yKTsKICAgICAKICAgICBFWFBFQ1RfRVEocm9vdC0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOwogCi0gICAgLy8gVGhlIGRhbWFnZSBpcyB0
aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4K
LSAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8g
Ym91bmRzIHNvIGl0cyBjaGlsZHJlbgotICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBi
b3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3Qu
eCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKyAgICAvLyBUaGUgY2hp
bGQgbGF5ZXIgaXMgbm90IGNsaXBwZWQgYnkgYW55dGhpbmcgKHRoYXQgY2xpcCBpcyBhbHJlYWR5
IHJlcHJlc2VudGVkIGJ5IHRoZSByb290U3VyZmFjZSBjbGlwcGluZyB0aGUgY2hpbGQncyBzdXJm
YWNlKQorICAgIC8vIFNvIGhlcmUsIHRoZSBleHBlY3RlZCBzY2lzc29yIGlzIGp1c3QgdGhlIGNo
aWxkIGxheWVyJ3MgcmVjdCBleHByZXNzZWQgaW4gdGFyZ2V0U3VyZmFjZSAoY2hpbGQgc3VyZmFj
ZSkgc3BhY2UuCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIC8v
IEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24n
dCBoYXZlIGEgc3VyZmFjZQotICAgIC8vIG9mIGl0cyBvd24KLSAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAg
Ly8gR3JhbmQgY2hpbGQgaXMgKGluZGlyZWN0bHkpIGNsaXBwZWQgYnkgdGhlIHJvb3Qgc3VyZmFj
ZS4gQnV0IHRoZSBzY2lzc29yIGlzIGV4cHJlc3NlZCBpbiB0aGUgdGFyZ2V0U3VyZmFjZSAoY2hp
bGQgc3VyZmFjZSkgc3BhY2UuCisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGdyYW5kQ2hpbGRQdHIt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoNSwgNSwgODUsIDg1KSk7CiAgICAgCiAgICAgLy8gRW1w
dHkgZGFtYWdlCiAgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CkBAIC02ODUs
OCArNTA1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdp
dGhDbGlwKQogICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBi
dXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CiAgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVp
Z2h0KCkpKTsKIAotICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJm
YWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCi0gICAgRVhQ
RUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RE
YW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworICAgIC8vIEdyYW5kIGNoaWxk
IHNjaXNzb3IgaXMgdGhlIGRhbWFnZSBpbnRlcnNlY3RlZCB3aXRoIHRoZSBjbGlwcGVkIGdyYW5k
Q2hpbGQgbGF5ZXIgcmVjdCAoZXhwcmVzc2VkIGluIHRhcmdldFN1cmZhY2Ugc3BhY2UpLgorICAg
IEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDUsIDUsIDE1
LCAxNSkpOwogCiAgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCiAgICAgcm9vdERh
bWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOwpAQCAtNzAxLDExICs1MjEsMTIgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQogICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCiAgICAgRVhQRUNUX0VRKHJv
b3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwogCi0gICAgLy8gRW50aXJlIGRhbWFnZSBy
ZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKLSAgICBF
WFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1h
Z2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworICAgIC8vIENoaWxkIGxheWVyIG92
ZXJsYXBzIGEgcG9ydGlvbiBvZiB0aGUgZGFtYWdlIHJlY3QuCisgICAgRVhQRUNUX0lOVF9SRUNU
X0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBjaGlsZFJlY3Qud2lk
dGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5v
dCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwg
dG8gY2hpbGQncwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KyAgICAvLyBHcmFuZCBjaGlsZCBzY2lzc29yIGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgZGFtYWdl
IGFuZCBncmFuZENoaWxkIHJlY3QsIGV4cHJlc3NlZCBpbiBjaGlsZCBzdXJmYWNlLgorICAgIC8v
IFRoZSBkYW1hZ2UgZml0cyBlbnRpcmVseSB3aXRoaW4gdGhlIGdyYW5kQ2hpbGQuCisgICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoNSwg
NSwgNzUsIDc1KSk7CiAKICAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAogICAgIHJv
b3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOwpAQCAtNzE0LDE3ICs1MzUsMTMg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQog
ICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKICAgICBFWFBFQ1RfRVEo
cm9vdC0+cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CiAKLSAgICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBh
IGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3
aXRoIGRhbWFnZS4KLSAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNs
aXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIC8vIFJvb3QgZGFtYWdlIHJlY3QgaXMg
Y2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5LgogICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFt
YWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOwotICAgIAotICAg
IC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVudCByZWN0
IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKLSAgICAvLyBSZXN1bHQgaXMg
dGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQog
ICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
LCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290
UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CiAKICAgICAvLyBOb3cgdGhlIHNjaXNz
b3IgcmVjdHMgYXJlIGNsaXBwZWQgYnkgc3VyZmFjZXMgY29udGVudFJlY3QKLSAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRo
KCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkp
OwotICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoY2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290
RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCg1LCA1LCAxMDUsIDEwNSkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKQEAg
LTgxMywzOCArNjMwLDI2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3Nv
clJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJhbnNmb3JtKQogICAgIAogICAgIEVYUEVDVF9FUShyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgM1UpOwogICAgIAotICAgIC8vIE5vdyByb290IGlz
IGNsaXBwaW5nIHRvIGl0cyBib3VuZHMKLSAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwg
cm9vdFJlY3QpOwotCi0gICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIGNoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpICwgY2hpbGRSZWN0
LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAvLyBHcmFuZGNoaWxkIG5v
dyBjbGlwcwotICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5k
Q2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBBU1NFUlRf
RVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKLQorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBS
ZWN0KCksIHJvb3RSZWN0KTsKICAgICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBp
cyBub3cgc2V0IHRvIHJvb3QncwotICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFj
ZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7Ci0gICAgCi0gICAgQVNTRVJUX1RSVUUocm9vdC0+
dXNlc0xheWVyQ2xpcHBpbmcoKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5
ZXJDbGlwcGluZygpKTsKLSAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVy
Q2xpcHBpbmcoKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJm
YWNlKCktPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKICAgICAKICAgICAvLyBEYW1hZ2UgdGhlIGVu
dGlyZSBzY3JlZW4KICAgICBJbnRSZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOwogICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKICAgICAKLSAgICBFWFBFQ1RfRVEocm9vdC0+
cmVuZGVyVGFyZ2V0KCktPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7Ci0gICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5yZW5kZXJUYXJnZXQoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgQVNT
RVJUX0VRKHJvb3QtPnJlbmRlclRhcmdldCgpLT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIC8vIENoaWxkJ3MgcmVuZGVyU3VyZmFjZSB3
b3VsZCBoYXZlIGV4cGFuZGVkIHRvIGluY2x1ZGUgdGhlIGdyYW5kQ2hpbGQxIGFuZCBncmFuZENo
aWxkMiwgYW5kIHRoZW4gaGF2ZSBiZWVuIGNsaXBwZWQgYnkgdGhlIHBhcmVudC4KKyAgICBJbnRS
ZWN0IGV4cGVjdGVkQ2hpbGRSZW5kZXJTdXJmYWNlU2Npc3NvciA9IGludGVyc2VjdGlvbihyb290
UmVjdCwgSW50UmVjdCgxMCwgMTAsIDE2MCwgMTYwKSk7CisgICAgQVNTRVJUX0VRKGNoaWxkUHRy
LT5yZW5kZXJUYXJnZXQoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBleHBlY3Rl
ZENoaWxkUmVuZGVyU3VyZmFjZVNjaXNzb3IpOwogICAgIAogICAgIEVYUEVDVF9FUShyb290LT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CiAKLSAgICAvLyBUaGUgZGFtYWdlIGlz
IHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0
LgotICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0
byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCi0gICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhl
IGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QKLSAgICBFWFBFQ1RfRVEoY2hpbGRQdHIt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIC8vIFRoZSBj
aGlsZCBsYXllciBpcyBub3QgY2xpcHBlZCBieSBhbnl0aGluZyAodGhhdCBjbGlwIGlzIGFscmVh
ZHkgcmVwcmVzZW50ZWQgYnkgdGhlIHJvb3RTdXJmYWNlIGNsaXBwaW5nIHRoZSBjaGlsZCdzIHN1
cmZhY2UpCisgICAgLy8gU28gaGVyZSwgdGhlIGV4cGVjdGVkIHNjaXNzb3IgaXMganVzdCB0aGUg
Y2hpbGQgbGF5ZXIncyByZWN0IGV4cHJlc3NlZCBpbiB0YXJnZXRTdXJmYWNlIChjaGlsZCBzdXJm
YWNlKSBzcGFjZS4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOwogCi0gICAg
Ly8gR3JhbmQgY2hpbGQgaXMgbm93IHNjaXNzb3JlZCBieSB0aGUgcmVuZGVyIHN1cmZhY2UKKyAg
ICAvLyBHcmFuZCBjaGlsZCBub3cgZHJhd3MgdG8gaXRzIG93biByZW5kZXIgc3VyZmFjZSwgc28g
dGhlIHNjaXNzb3JSZWN0IGlzIGluIHRoYXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0Lndp
ZHRoKCkgLSBjaGlsZFJlY3QueCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIGNoaWxkUmVjdC55KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKICAgICAKICAgICAv
LyBFbXB0eSBkYW1hZ2UKQEAgLTg5MSw4ICs2OTYsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKICAgICAvLyBF
bnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgogICAgIEVYUEVDVF9FUShyb290
LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKIAotICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVj
dCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0Ci0gICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdl
LndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJl
Y3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IGl0IGlzIHN0aWxsIGNsaXBwZWQgd2l0aCByZXNw
ZWN0IHRvIHRoZSByb290LgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShjaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1h
Z2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWln
aHQoKSkpOwogCiAgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5IGl0cyB0
YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3Jh
bmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgp
KSk7CkBAIC05MTIsOCArNzE3LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBz
Y2lzc29yUmVjdFdpdGhDbGlwQW5kU3BhY2VUcmFuc2Zvcm0pCiAgICAgLy8gUmVzdWx0IGlzIHRo
YXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKICAg
ICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwg
cm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJl
Y3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOwogCi0gICAgLy8gTm93IHRoZSBzY2lzc29y
IHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRlbnRSZWN0Ci0gICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRS
ZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgp
IC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsK
KyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8v
IEdyYW5kY2hpbGQncyBzY2lzc29yIHJlY3QgaXMgY2xpcHBlZCBieSBpdHMgdGFyZ2V0IHN1cmZh
Y2UKICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0
LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdl
LmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CkBAIC0xMDAxLDcgKzgwNSw3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1
cmZhY2VIaWVyYXJjaHkpCiAKICAgICAvLyBJbiBjb21iaW5hdGlvbiB3aXRoIGRlc2NlbmRhbnRE
cmF3c0NvbnRlbnQsIG9wYWNpdHkgIT0gMSBmb3JjZXMgdGhlIGxheWVyIHRvIGhhdmUgYSBuZXcg
cmVuZGVyU3VyZmFjZS4KICAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwLjUpOwotICAg
IHJlbmRlclN1cmZhY2UyLT5zZXRPcGFjaXR5KDAuMzNmKTsKKyAgICByZW5kZXJTdXJmYWNlMi0+
c2V0T3BhY2l0eSgwLjMzKTsKIAogICAgIC8vIEFsbCBsYXllcnMgaW4gdGhlIHRyZWUgYXJlIGlu
aXRpYWxpemVkIHdpdGggYW4gYW5jaG9yIGF0IC4yNSBhbmQgYSBzaXplIG9mICgxMCwxMCkuCiAg
ICAgLy8gbWF0cml4ICJBIiBpcyB0aGUgY29tcG9zaXRlIGxheWVyIHRyYW5zZm9ybSB1c2VkIGlu
IGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBhbmNob3IgcG9pbnQKQEAgLTExMzEsMTQg
KzkzNSwxNSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1
cmZhY2VMaXN0Rm9yQ2xpcExheWVyKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVu
ZGVyU3VyZmFjZTEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkID0gYWRvcHRSZWYobmV3IExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHJlbmRlclN1cmZhY2UxLT5z
ZXRPcGFjaXR5KDAuOWYpOworICAgIHJlbmRlclN1cmZhY2UxLT5zZXRPcGFjaXR5KDAuOSk7CiAK
ICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhyZW5kZXJTdXJmYWNlMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBm
YWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9p
bnQoMzAsIDMwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAKICAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoMCwgMCwg
MTAsIDEwKSk7CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHBhcmVudC0+YWRkQ2hp
bGQocmVuZGVyU3VyZmFjZTEpOwogICAgIHJlbmRlclN1cmZhY2UxLT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxkKTsKQEAgLTExOTYsMTEg
KzEwMDEsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlGb3JjZVJl
bmRlclN1cmZhY2UpCiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0
cnVlKTsKIAogICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6
emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHJlbmRlclN1cmZhY2UxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwg
RmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKIAogICAgIHBhcmVu
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dCgwLCAwLCAxMCwgMTApKTsKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcGFyZW50
LT5hZGRDaGlsZChyZW5kZXJTdXJmYWNlMSk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxk
KGNoaWxkKTsKIApAQCAtMTU4OSwxNSArMTM5NSwxOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldp
dAogICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7
CiAgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2KSk7CiAgICAgZ3Jh
bmRDaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOwotICAgIGdyZWF0R3JhbmRDaGls
ZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxNDAsIDEyMCkpOworICAgIGdyZWF0R3JhbmRDaGls
ZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MCwgNjApKTsKICAgICBncmVhdEdyYW5kQ2hpbGQt
PnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKICAgICBmaXhlZFBvc2l0aW9uQ2hpbGQtPnNl
dEZpeGVkVG9Db250YWluZXJMYXllcih0cnVlKTsKICAgICBmaXhlZFBvc2l0aW9uQ2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKIAogICAgIC8vIFRoZSBhZGRpdGlvbmFsIHJvdGF0aW9ucywg
d2hpY2ggYXJlIG5vbi1jb21tdXRhdGl2ZSB3aXRoIHRyYW5zbGF0aW9ucywgaGVscCB0bwogICAg
IC8vIHZlcmlmeSB0aGF0IHdlIGhhdmUgY29ycmVjdCBvcmRlci1vZi1vcGVyYXRpb25zIGluIHRo
ZSBmaW5hbCBzY3JvbGwgY29tcGVuc2F0aW9uLgorICAgIC8vIE5vdGUgdGhhdCByb3RhdGluZyBh
Ym91dCB0aGUgY2VudGVyIG9mIHRoZSBsYXllciBlbnN1cmVzIHdlIGRvIG5vdCBhY2NpZGVudGFs
bHkKKyAgICAvLyBjbGlwIGF3YXkgbGF5ZXJzIHRoYXQgd2Ugd2FudCB0byB0ZXN0LgogICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uQWJvdXRaOworICAgIHJvdGF0aW9uQWJvdXRa
LnRyYW5zbGF0ZSg1MCwgNTApOwogICAgIHJvdGF0aW9uQWJvdXRaLnJvdGF0ZTNkKDAsIDAsIDkw
KTsKKyAgICByb3RhdGlvbkFib3V0Wi50cmFuc2xhdGUoLTUwLCAtNTApOwogICAgIGdyYW5kQ2hp
bGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbkFib3V0Wik7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5z
ZXRUcmFuc2Zvcm0ocm90YXRpb25BYm91dFopOwogCkBAIC0xNjE2LDcgKzE0MjYsNyBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZp
eGVkUG9zaXRpb25MYXllcldpdAogICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNTAsIDUwKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3Jl
YXRHcmFuZENoaWxkU3VyZmFjZU9yaWdpblRyYW5zZm9ybTsKLSAgICBleHBlY3RlZEdyZWF0R3Jh
bmRDaGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDE0MCwgMTIwKTsKKyAgICBl
eHBlY3RlZEdyZWF0R3JhbmRDaGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDQw
LCA2MCk7CiAgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3Jt
Lm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtOwpAQCAtMTY1Nyw3ICsxNDY3LDcgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25G
b3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXQKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21w
b3VuZE9yaWdpblRyYW5zZm9ybTsgLy8gdHJhbnNmb3JtIGZyb20gZ3JlYXRHcmFuZENoaWxkU3Vy
ZmFjZSdzIG9yaWdpbiB0byB0aGUgcm9vdCBzdXJmYWNlLgogICAgIGNvbXBvdW5kT3JpZ2luVHJh
bnNmb3JtLnRyYW5zbGF0ZSg4LCA2KTsgLy8gb3JpZ2luIHRyYW5zbGF0aW9uIG9mIGdyYW5kQ2hp
bGQKICAgICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7
IC8vIHJvdGF0aW9uIG9mIGdyYW5kQ2hpbGQKLSAgICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS50
cmFuc2xhdGUoMTQwLCAxMjApOyAvLyBvcmlnaW4gdHJhbnNsYXRpb24gb2YgZ3JlYXRHcmFuZENo
aWxkCisgICAgY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA2MCk7IC8vIG9y
aWdpbiB0cmFuc2xhdGlvbiBvZiBncmVhdEdyYW5kQ2hpbGQKICAgICBjb21wb3VuZE9yaWdpblRy
YW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIHJvdGF0aW9uIG9mIGdyZWF0R3Jh
bmRDaGlsZAogCiAgICAgZXhwZWN0ZWRGaXhlZFBvc2l0aW9uQ2hpbGRUcmFuc2Zvcm0ubWFrZUlk
ZW50aXR5KCk7CkBAIC0xODU0LDE2ICsxNjY0LDE2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MjAsIDIwKSwgZmFsc2UpOwogCiAgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0g
ICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsK
ICAgICBncmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNSk7Ci0gICAgZ3JlYXRHcmFuZENoaWxkLT5z
ZXRPcGFjaXR5KDAuNGYpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjQpOwog
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owog
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogCiAgICAgLy8gRklYTUU6IHdoZW4g
d2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVy
VHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKQEAgLTE4NzcsNjcgKzE2ODcsNiBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNl
cykKICAgICBFWFBFQ1RfRVEoY2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0t
PmlkKCkpOwogfQogCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVwcm8pCi17Ci0gICAgLy8gVGhpcyBpcyBhIHNp
bWlsYXIgc2l0dWF0aW9uIGFzIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcywgZXhj
ZXB0IHRoYXQKLSAgICAvLyBpdCByZXByb2R1Y2VzIGEgY3Jhc2ggYnVnIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjczNC4KLQotICAgIGNvbnN0
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwot
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmVhdEdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJl
bnQtPmFkZENoaWxkKGNoaWxkKTsKLSAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7Ci0g
ICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkKTsKLQotICAgIC8vIGxlYWZO
b2RlMSBlbnN1cmVzIHRoYXQgcGFyZW50IGFuZCBjaGlsZCBhcmUga2VwdCBvbiB0aGUgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwKLSAgICAvLyBldmVuIHRob3VnaCBncmFuZENoaWxkIGFuZCBncmVh
dEdyYW5kQ2hpbGQgc2hvdWxkIGJlIGNsaXBwZWQuCi0gICAgY2hpbGQtPmFkZENoaWxkKGxlYWZO
b2RlMSk7Ci0gICAgZ3JlYXRHcmFuZENoaWxkLT5hZGRDaGlsZChsZWFmTm9kZTIpOwotCi0gICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOwotICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDQ1LCA0NSks
IEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEwKSwgZmFs
c2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUxLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsZWFmTm9kZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjAp
LCBmYWxzZSk7Ci0KLSAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKLSAgICBjaGls
ZC0+c2V0T3BhY2l0eSgwLjRmKTsKLSAgICBncmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNSk7Ci0g
ICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNGYpOwotCi0gICAgLy8gQ29udGFtaW5h
dGUgdGhlIGdyYW5kQ2hpbGQgYW5kIGdyZWF0R3JhbmRDaGlsZCdzIGNsaXBSZWN0IHRvIHJlcHJv
ZHVjZSB0aGUgY3Jhc2gKLSAgICAvLyBidWcgZm91bmQgaW4gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA2NzM0LiBJbiB0aGlzCi0gICAgLy8gYnVn
LCB0aGUgY2xpcFJlY3Qgd2FzIG5vdCByZS1jb21wdXRlZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRl
IFJlbmRlclN1cmZhY2VzLCBhbmQKLSAgICAvLyB0aGVyZWZvcmUgbGVhZk5vZGUyIHRoaW5rcyBp
dCBzaG91bGQgZHJhdyBpdHNlbGYuIEFzIGEgcmVzdWx0LCBhbiBleHRyYQotICAgIC8vIHJlbmRl
clN1cmZhY2UgcmVtYWlucyBvbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgd2hpY2ggdmlv
bGF0ZXMgdGhlIGFzc3VtcHRpb24KLSAgICAvLyB0aGF0IGFuIGVtcHR5IHJlbmRlclN1cmZhY2Ug
d2lsbCBhbHdheXMgYmUgdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCwgd2hpY2gKLSAgICAvLyB1
bHRpbWF0ZWx5IGNhdXNlZCB0aGUgY3Jhc2guCi0gICAgY2hpbGQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjApKSk7Ci0gICAgZ3JlYXRHcmFuZENo
aWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTIzNCwg
MTIzNCkpKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxh
eWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLQotICAgIC8vIEZJ
WE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3Ig
aW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQo
KSk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1
cmVTaXplKTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudFJlY3QoKSk7Ci0KLSAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKLSAgICBFWFBFQ1RfRVEoY2hpbGQtPmlkKCksIHJlbmRl
clN1cmZhY2VMYXllckxpc3RbMV0tPmlkKCkpOwotfQotCiBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50
KQogewogICAgIC8vIFdoZW4gYSByZW5kZXJTdXJmYWNlIGhhcyBhIGNsaXBSZWN0LCBpdCBpcyB1
c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRSZWN0CkBAIC0xOTcxLDE1ICsxNzIwLDE1IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRo
b3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFm
Tm9kZS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKIAogICAgIHBh
cmVudC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKLSAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjRm
KTsKLSAgICBncmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNGYpOworICAgIGNoaWxkLT5zZXRPcGFj
aXR5KDAuNCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjQpOwogCiAgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOwogCi0gICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMTk5Nyw4ICsx
NzQ2LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1
bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmNsZWFyKCk7CiAgICAgZHVtbXlMYXllckxpc3QuY2xlYXIoKTsKIAotICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7
CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKQEAgLTIwMTAsMTQgKzE3NTksMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAg
ICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsyXS0+
aWQoKSk7CiB9CiAKLVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJl
Y3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5RHJhd2FibGVDb250ZW50UmVjdEZvckxheWVycykKIHsKLSAgICAvLyBW
ZXJpZnkgdGhhdCBsYXllcnMgZ2V0IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVp
ciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgorICAgIC8vIFZlcmlmeSB0aGF0IGxheWVy
cyBnZXQgdGhlIGFwcHJvcHJpYXRlIGRyYXdhYmxlQ29udGVudFJlY3Qgd2hlbiB0aGVpciBwYXJl
bnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgogICAgIC8vCi0gICAgLy8gICBncmFuZENoaWxkMSAt
IGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUgbWFz
ayByZWdpb24gKGxhcmdlciB0aGFuIHRoaXMgbGF5ZXIncyBib3VuZHMpLgotICAgIC8vICAgZ3Jh
bmRDaGlsZDIgLSBwYXJ0aWFsbHkgY2xpcHBlZCBidXQgTk9UIG1hc2tzVG9Cb3VuZHM7IHRoZSBj
bGlwUmVjdCBzaG91bGQgYmUgdGhlIHBhcmVudCdzIGNsaXBSZWN0IHJlZ2FyZGxlc3Mgb2YgdGhl
IGxheWVyJ3MgYm91bmRzLgotICAgIC8vICAgZ3JhbmRDaGlsZDMgLSBwYXJ0aWFsbHkgY2xpcHBl
ZCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlIGludGVyc2VjdGlv
biBvZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sgcmVnaW9uLgotICAgIC8vICAgZ3JhbmRDaGls
ZDQgLSBvdXRzaWRlIHBhcmVudCdzIGNsaXBSZWN0LCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNs
aXBSZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAvLyAgIGdyYW5kQ2hpbGQxIC0gY29tcGxldGVs
eSBpbnNpZGUgdGhlIHJlZ2lvbjsgZHJhd2FibGVDb250ZW50UmVjdCBzaG91bGQgYmUgdGhlIGxh
eWVyIHJlY3QgZXhwcmVzc2VkIGluIHRhcmdldCBzcGFjZS4KKyAgICAvLyAgIGdyYW5kQ2hpbGQy
IC0gcGFydGlhbGx5IGNsaXBwZWQgYnV0IE5PVCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qg
d2lsbCBiZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGxheWVyQm91bmRzIGFuZCB0aGUgbWFzayByZWdp
b24uCisgICAgLy8gICBncmFuZENoaWxkMyAtIHBhcnRpYWxseSBjbGlwcGVkIGFuZCBtYXNrc1Rv
Qm91bmRzOyB0aGUgZHJhd2FibGVDb250ZW50UmVjdCB3aWxsIHN0aWxsIGJlIHRoZSBpbnRlcnNl
Y3Rpb24gb2YgbGF5ZXJCb3VuZHMgYW5kIHRoZSBtYXNrIHJlZ2lvbi4KKyAgICAvLyAgIGdyYW5k
Q2hpbGQ0IC0gb3V0c2lkZSBwYXJlbnQncyBjbGlwUmVjdDsgdGhlIGRyYXdhYmxlQ29udGVudFJl
Y3Qgc2hvdWxkIGJlIGVtcHR5LgogICAgIC8vCiAKICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKQEAgLTIwNDQsMTAgKzE3OTMsOSBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5
VG9MYXllcnMpCiAKICAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKICAgICBncmFu
ZENoaWxkMy0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKLSAgICBncmFuZENoaWxkNC0+c2V0TWFz
a3NUb0JvdW5kcyh0cnVlKTsKIAogICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVuZGVy
IHN1cmZhY2UuCi0gICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7CisgICAgY2hpbGQtPnNldE9w
YWNpdHkoMC40KTsKICAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGdyYW5k
Q2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZ3JhbmRDaGlsZDMtPnNldE9wYWNpdHkoMC41
KTsKQEAgLTIwNTgsNyArMTgwNiw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKICAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlz
ICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3
ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnNldENsaXBSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQuZ2V0KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CkBAIC0yMDY2LDE3ICsxODE0LDE3IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVy
cykKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCkpOwogCiAKLSAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+Y2xpcFJlY3QoKSk7Ci0g
ICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgy
MCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOwotICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBncmFuZENoaWxkMy0+
Y2xpcFJlY3QoKSk7Ci0gICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPmNsaXBSZWN0KCkuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCg1LCA1KSwg
SW50U2l6ZSgxMCwgMTApKSwgZ3JhbmRDaGlsZDEtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Cisg
ICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSg1
LCA1KSksIGdyYW5kQ2hpbGQzLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAgIEVYUEVDVF9J
TlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBncmFu
ZENoaWxkMy0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRShncmFuZENo
aWxkNC0+ZHJhd2FibGVDb250ZW50UmVjdCgpLmlzRW1wdHkoKSk7CiB9CiAKIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlU
b1N1cmZhY2VzKQogewogICAgIC8vIFZlcmlmeSB0aGF0IHJlbmRlclN1cmZhY2VzIChhbmQgdGhl
aXIgbGF5ZXJzKSBnZXQgdGhlIGFwcHJvcHJpYXRlIGNsaXBSZWN0cyB3aGVuIHRoZWlyIHBhcmVu
dCBtYXNrc1RvQm91bmRzIGlzIHRydWUuCiAgICAgLy8KLSAgICAvLyBMYXllcnMgdGhhdCBvd24g
cmVuZGVyU3VyZmFjZXMgKGF0IGxlYXN0IGZvciBub3cpIGRvIG5vdCBpbmhlcml0IGFueSBjbGlw
UmVjdDsKKyAgICAvLyBMYXllcnMgdGhhdCBvd24gcmVuZGVyU3VyZmFjZXMgKGF0IGxlYXN0IGZv
ciBub3cpIGRvIG5vdCBpbmhlcml0IGFueSBjbGlwcGluZzsKICAgICAvLyBpbnN0ZWFkIHRoZSBz
dXJmYWNlIHdpbGwgZW5mb3JjZSB0aGUgY2xpcCBmb3IgdGhlIGVudGlyZSBzdWJ0cmVlLiBUaGV5
IG1heSBzdGlsbAogICAgIC8vIGhhdmUgYSBjbGlwUmVjdCBvZiB0aGVpciBvd24gbGF5ZXIgYm91
bmRzLCBob3dldmVyLCBpZiBtYXNrc1RvQm91bmRzIHdhcyB0cnVlLgogICAgIC8vCkBAIC0yMTIy
LDcgKzE4NzAsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBncmFuZENoaWxkNC0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKIAogICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVu
ZGVyIHN1cmZhY2UuCi0gICAgY2hpbGQtPnNldE9wYWNpdHkoMC40Zik7CisgICAgY2hpbGQtPnNl
dE9wYWNpdHkoMC40KTsKICAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGdy
YW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZ3JhbmRDaGlsZDMtPnNldE9wYWNpdHko
MC41KTsKQEAgLTIxMzMsNyArMTg4MSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQogICAgIGlu
dCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogCiAgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4
IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhv
c3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+c2V0Q2xp
cFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHBhcmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKQEAgLTIxNDksMTIgKzE4OTcsNiBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9T
dXJmYWNlcykKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwg
SW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3Qo
KSk7CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNp
emUoMjAsIDIwKSksIGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOwog
ICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIw
LCAyMCkpLCBncmFuZENoaWxkMy0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKLQotICAg
IC8vIExheWVycyBkbyBub3QgaW5oZXJpdCB0aGUgY2xpcFJlY3QgZnJvbSB0aGVpciBvd25lZCBz
dXJmYWNlcywgYnV0IGlmIG1hc2tzVG9Cb3VuZHMgaXMgdHJ1ZSwgdGhleSBkbyBjcmVhdGUgdGhl
aXIgb3duIGNsaXBSZWN0LgotICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMS0+dXNlc0xheWVy
Q2xpcHBpbmcoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQyLT51c2VzTGF5ZXJDbGlw
cGluZygpKTsKLSAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkMy0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7Ci0gICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPnVzZXNMYXllckNsaXBwaW5nKCkpOwog
fQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1hdGlvbnNGb3JS
ZW5kZXJTdXJmYWNlSGllcmFyY2h5KQpAQCAtMjYxOSw3ICsyMzYxLDYgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRob3V0UHJlc2VydmVz
M2QpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owog
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogICAgIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKQEAgLTI3MjQsNyArMjQ2NSw2IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkKQogICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0g
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0
KCkpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CkBAIC0yODExLDcgKzI1NTEsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zvcm1zKQogICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogCiAgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMo
KSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwpAQCAtMjg4NSw3ICsyNjI0LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2RGb3JGbGF0
dGVuaW4KICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50LmdldCgpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwpAQCAtMzcwMyw3ICszNDQxLDYgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlVHJhbmZvcm1zSW5IaWdoRFBJKQog
CiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50LmdldCgpKTsKIAogICAgIGNvbnN0IGRvdWJsZSBkZXZpY2VTY2FsZUZhY3RvciA9IDEu
NTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZGQ1MjVmY2JmNzc4OGYyNDBjMWIyYjQ2Y2IzZDE1YTMz
MDEyMTViOS4uMTQxOTE2NGI1Mjk5YjI1YTgyYzUwOWMzNWNjODM0MDhkZTNlY2JkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAKQEAgLTEzNywxMCArMTM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcm9vdC0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29udGVudFNpemUpOwogICAgICAgICByb290LT5zZXRCb3Vu
ZHMoY29udGVudFNpemUpOwogICAgICAgICByb290LT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRT
aXplKTsKKyAgICAgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
ICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworCiAgICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwogICAg
ICAgICBjb250ZW50cy0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICBjb250ZW50cy0+
c2V0Qm91bmRzKGNvbnRlbnRTaXplKTsKICAgICAgICAgY29udGVudHMtPnNldENvbnRlbnRCb3Vu
ZHMoY29udGVudFNpemUpOworICAgICAgICBjb250ZW50cy0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgICAgIGNvbnRlbnRzLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKICAgICAgICAgcm9vdC0+YWRkQ2hpbGQoY29udGVudHMucmVsZWFzZSgpKTsKICAgICAg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICB9CkBAIC04
MzgsMTMgKzg0MywxOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5v
bkNvbXBvc2l0ZWRSb290KQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBjb250ZW50TGF5ZXItPnNldElzTm9uQ29tcG9z
aXRlZENvbnRlbnQodHJ1ZSk7CiAgICAgY29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7Ci0gICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihJbnRQb2ludCg1LCA1KSk7CisgICAg
Y29udGVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjb250ZW50
TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIGNvbnRlbnRMYXll
ci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKICAgICBjb250ZW50TGF5ZXItPnNldENvbnRlbnRC
b3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53aWR0aCgpICogMiwgc3VyZmFjZVNpemUuaGVpZ2h0
KCkgKiAyKSk7CiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgyKTsKICAgICBzY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
ICAgICBzY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oc3VyZmFjZVNpemUpOworICAg
IHNjcm9sbExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5z
ZXRDb250ZW50Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgc2Nyb2xsTGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOwogICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIu
cmVsZWFzZSgpKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5y
ZWxlYXNlKCkpOwpAQCAtODYyLDYgKzg3Miw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKICAgICBJbnRTaXplIHN1
cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgxKTsKKyAgICByb290LT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAg
IHJvb3QtPnNldENvbnRlbnRCb3VuZHMoc3VyZmFjZVNpemUpOwogICAgIHJvb3QtPmFkZENoaWxk
KGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDAsIDApLCBzdXJmYWNlU2l6ZSkp
OwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKQEAgLTEwMzgsNiArMTA1MCw4
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQ
YWdlU2NhbGVPbk1haW5UaHJlYWQpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTAp
OwogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7
CisgICAgcm9vdC0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAgICByb290LT5zZXRDb250ZW50
Qm91bmRzKHN1cmZhY2VTaXplKTsKICAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xsYWJs
ZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KICAgICByb290LT5zZXRTY3Jv
bGxhYmxlKHRydWUpOwogICAgIGludCBzY3JvbGxMYXllcklkID0gMjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGIw
ZTllZThkNmM4YmNhOTMzNzM4ZGY0YmViMGY2ZjBmNmRlNGRlNDUuLmNhM2UyMWMzZDU1MTE1YmM2
MDcyNzM5MDMzYThiOTJmMTUzOThjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjE3Niw4ICsyMTc2LDE0IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgT1ZFUlJJREUKICAgICB7CiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOworICAgICAgICAKICAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CiAgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKworICAgICAgICBtX3Jvb3RT
Y3JvbGxMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKwogICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKICAgICAgICAgbV9yb290
U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CkBAIC0yMTg4LDYg
KzIxOTQsMTAgQEAgcHVibGljOgogICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUo
dHJ1ZSk7CiAgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7
CisKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsK
KyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsK
KwogICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKICAg
ICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHAKaW5kZXggODdiZGU1MTE3MjI4NTE3NjgzNjNiYzg4OTU0YzNiY2E3MGU5YmI2OC4uYjU1OWRi
MTJjYWU0NDJjNjExZTk1YTU5NmY1ODQzNTEwZWI2YzdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0y
NjMsNyArMjYzLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIXJvb3QtPnJlbmRlclN1
cmZhY2UoKSk7CiAgICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICAgICAg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7Ci0gICAgICAgIHJvb3QtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKICAgICAgICAgbV9yZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0SW1wbC5hcHBlbmQobV9yb290LmdldCgpKTsKIAogICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1w
bCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBA
IC0yODIsNyArMjgxLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIXJvb3QtPnJlbmRl
clN1cmZhY2UoKSk7CiAgICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICAg
ICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7Ci0gICAgICAgIHJvb3QtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKICAgICAgICAgbV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7CiAKICAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENo
cm9taXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CkBAIC0yMDY5LDcg
KzIwNjcsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgdGhpcy0+dmlzaXRMYXllcihzdXJmYWNl
Q2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT5lbnRlckxheWVyKHN1cmZhY2VDaGls
ZCwgb2NjbHVzaW9uKTsKLSAgICAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoMTAwLCAw
LCAxNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNoaWxk
LCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEo
SW50UmVjdCgxMDAsIDAsIDEwMCwgMzAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChzdXJmYWNlQ2hpbGQsIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7CiAgICAgICAgIHRoaXMt
PmxlYXZlTGF5ZXIoc3VyZmFjZUNoaWxkLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT5lbnRl
ckxheWVyKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAgICAgICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJ
bnRSZWN0KDIwMCwgMCwgNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
c3VyZmFjZSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKQEAgLTIxMjEsNyArMjExOSw3IEBA
IHByb3RlY3RlZDoKIAogICAgICAgICB0aGlzLT52aXNpdExheWVyKHN1cmZhY2VDaGlsZDIsIG9j
Y2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoc3VyZmFjZUNoaWxkLCBvY2NsdXNp
b24pOwotICAgICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgxMDAsIDAsIDE1MCwgMzAw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ2hpbGQsIEludFJlY3Qo
MCwgMCwgMzAwLCAzMDApKSk7CisgICAgICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KDEw
MCwgMCwgMTAwLCAzMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VD
aGlsZCwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKICAgICAgICAgdGhpcy0+bGVhdmVMYXll
cihzdXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoc3Vy
ZmFjZSwgb2NjbHVzaW9uKTsKICAgICAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoMjAw
LCAwLCA1MCwgMzAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlLCBJ
bnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAwMDQwMjJiNjZjMTk4ZWM0OTA1MzRk
MTc1YjRmNTBkNDc2OTQwZDBiLi5hOTMyYWI2MWMyYTgwZDYzODhjZmEyNWYzOTlkNDM4Y2IxNmRj
Yzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21p
dW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21p
dW1UZXN0LmNwcApAQCAtNDk1LDEwICs0OTUsOCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAKICAgICAvLyBUZXN0
IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0Nv
bW1pdCB3aGVuIGNoYW5nZWQuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01N
SVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgw
LCAwLCA0MCwgNTApKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRf
QkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKSk7CiAgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVy
LT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldERyYXdPcGFjaXR5
KDAuNSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDAsIHRlc3RMYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkpOwogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RMYXllci0+
c2V0UmVuZGVyVGFyZ2V0KDApKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NP
TU1JVF9CRUhBVklPUigwLCB0ZXN0TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlU
X0JFSEFWSU9SKDAsIHRlc3RMYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>