<?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>91023</bug_id>
          
          <creation_ts>2012-07-11 15:04:45 -0700</creation_ts>
          <short_desc>[chromium] Remove the RenderPass pointer from RenderPassDrawQuad</short_desc>
          <delta_ts>2012-07-12 16:26:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91124</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>667103</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 15:04:45 -0700</bug_when>
    <thetext>[chromium] Remove the RenderPass pointer from RenderPassDrawQuad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667110</commentid>
    <comment_count>1</comment_count>
      <attachid>151795</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 15:10:50 -0700</bug_when>
    <thetext>Created attachment 151795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667126</commentid>
    <comment_count>2</comment_count>
      <attachid>151800</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 15:23:40 -0700</bug_when>
    <thetext>Created attachment 151800
Patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667140</commentid>
    <comment_count>3</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-11 15:34:01 -0700</bug_when>
    <thetext>Thanks for tackling this.

Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667157</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 15:43:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Thanks for tackling this.
&gt; 
&gt; Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?

My thinking was that the renderPassId is going to be globally unique across all compositors. This way when we give the RenderPass and quads to another compositor, it doesn&apos;t need to rewrite the ids to new array indexes (potential bugs).

Also, I don&apos;t think we are going to serialize the FrameData as it is (it also includes the RenderSurfaceLayerList). I think we&apos;ll just be passing out the CCRenderPassList from FrameData alone right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667172</commentid>
    <comment_count>5</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-11 15:56:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Thanks for tackling this.
&gt; &gt; 
&gt; &gt; Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?
&gt; 
&gt; My thinking was that the renderPassId is going to be globally unique across all compositors. This way when we give the RenderPass and quads to another compositor, it doesn&apos;t need to rewrite the ids to new array indexes (potential bugs).

Hmm, but how do you plan to enforce globally unique IDs across processes?  I see a TODO for that in CCLayerTreeHostImpl::calculateRenderPasses.

I don&apos;t think we&apos;ll want the parent compositor to just mix in the new render passes with its own top-level list anyway.  There are also dependency (order-of-execution) problems, and the question of how the CCQuadListLayer will apply its transformations, etc.  I think we can expect a kind of tree structure in the receiver, which will allow index-based IDs to work within individual nodes.

&gt; 
&gt; Also, I don&apos;t think we are going to serialize the FrameData as it is (it also includes the RenderSurfaceLayerList). I think we&apos;ll just be passing out the CCRenderPassList from FrameData alone right?

I haven&apos;t figured yet what is going to be directly serialized and what&apos;s going to be reconstructed at the top level.  Generally speaking though, it&apos;ll be less overhead to work with anything that&apos;s closer to its serialized state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667192</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 16:17:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; Thanks for tackling this.
&gt; &gt; &gt; 
&gt; &gt; &gt; Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?
&gt; &gt; 
&gt; &gt; My thinking was that the renderPassId is going to be globally unique across all compositors. This way when we give the RenderPass and quads to another compositor, it doesn&apos;t need to rewrite the ids to new array indexes (potential bugs).
&gt; 
&gt; Hmm, but how do you plan to enforce globally unique IDs across processes?  I see a TODO for that in CCLayerTreeHostImpl::calculateRenderPasses.

Each compositor has an ID. RenderPass id high bits are compositor id.

&gt; I don&apos;t think we&apos;ll want the parent compositor to just mix in the new render passes with its own top-level list anyway.  There are also dependency (order-of-execution) problems, and the question of how the CCQuadListLayer will apply its transformations, etc.  I think we can expect a kind of tree structure in the receiver, which will allow index-based IDs to work within individual nodes.

The ordering should be okay. If you have a layer reprensenting a compositor, when it would insert its quad, you instead insert all the quads from the root render pass of the nested compositor. These quads need their opacity/transforms adjusted as they are inserted.

If the layer is rotated or non-opaque or something and needs a surface, you insert a renderpass drawquad instead pointing to the root of the nested compositor. Either way, then you insert all the passes from the nested compositor right before the current render pass.

I think we benefit from just inserting them into the hosting compositors list of render passes directly. We don&apos;t need anything more complex.

&gt; &gt; Also, I don&apos;t think we are going to serialize the FrameData as it is (it also includes the RenderSurfaceLayerList). I think we&apos;ll just be passing out the CCRenderPassList from FrameData alone right?
&gt; 
&gt; I haven&apos;t figured yet what is going to be directly serialized and what&apos;s going to be reconstructed at the top level.  Generally speaking though, it&apos;ll be less overhead to work with anything that&apos;s closer to its serialized state.

Seems like just a list of RenderPasses (each holding a list of quads) and the list of SharedQuadState is all we need. FrameData has a lot of other things in it that we just don&apos;t need for drawing. The only things given to LRC are the RenderPasses in the FrameData::renderPasses list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667197</commentid>
    <comment_count>7</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-11 16:22:15 -0700</bug_when>
    <thetext>OK, sounds reasonable.  We can go with the HashSet.

(In reply to comment #6)
&gt; &gt; Hmm, but how do you plan to enforce globally unique IDs across processes?  I see a TODO for that in CCLayerTreeHostImpl::calculateRenderPasses.
&gt; 
&gt; Each compositor has an ID. RenderPass id high bits are compositor id.

Let&apos;s remove the FIXME in CCLayerTreeHostImpl::calculateRenderPasses if that&apos;s already the case then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667198</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-07-11 16:24:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; Thanks for tackling this.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?
&gt; &gt; &gt; 
&gt; &gt; &gt; My thinking was that the renderPassId is going to be globally unique across all compositors. This way when we give the RenderPass and quads to another compositor, it doesn&apos;t need to rewrite the ids to new array indexes (potential bugs).
&gt; &gt; 
&gt; &gt; Hmm, but how do you plan to enforce globally unique IDs across processes?  I see a TODO for that in CCLayerTreeHostImpl::calculateRenderPasses.
&gt; 
&gt; Each compositor has an ID. RenderPass id high bits are compositor id.

But that means compositors themselves need to enforce a globally-unique id, which means a round-trip at compositor creation time... meh. In particular, if a child renderer becomes malicious it could start mucking around with other render passes and do bad things. So we&apos;d need to add a verification step in the parent compositor anyway.
I think it&apos;s easier to do a remapping in the parent.


&gt; 
&gt; &gt; I don&apos;t think we&apos;ll want the parent compositor to just mix in the new render passes with its own top-level list anyway.  There are also dependency (order-of-execution) problems, and the question of how the CCQuadListLayer will apply its transformations, etc.  I think we can expect a kind of tree structure in the receiver, which will allow index-based IDs to work within individual nodes.
&gt; 
&gt; The ordering should be okay. If you have a layer reprensenting a compositor, when it would insert its quad, you instead insert all the quads from the root render pass of the nested compositor. These quads need their opacity/transforms adjusted as they are inserted.
&gt; 
&gt; If the layer is rotated or non-opaque or something and needs a surface, you insert a renderpass drawquad instead pointing to the root of the nested compositor. Either way, then you insert all the passes from the nested compositor right before the current render pass.
&gt; 
&gt; I think we benefit from just inserting them into the hosting compositors list of render passes directly. We don&apos;t need anything more complex.
&gt; 
&gt; &gt; &gt; Also, I don&apos;t think we are going to serialize the FrameData as it is (it also includes the RenderSurfaceLayerList). I think we&apos;ll just be passing out the CCRenderPassList from FrameData alone right?
&gt; &gt; 
&gt; &gt; I haven&apos;t figured yet what is going to be directly serialized and what&apos;s going to be reconstructed at the top level.  Generally speaking though, it&apos;ll be less overhead to work with anything that&apos;s closer to its serialized state.
&gt; 
&gt; Seems like just a list of RenderPasses (each holding a list of quads) and the list of SharedQuadState is all we need. FrameData has a lot of other things in it that we just don&apos;t need for drawing. The only things given to LRC are the RenderPasses in the FrameData::renderPasses list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667233</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-11 17:19:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; &gt; Thanks for tackling this.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Hmm, this is a good step, but ultimately we&apos;ll want to serialize FrameData or a structure derived from it, and the HashMap will be unserializable and we&apos;d have to reconstruct it on the other end.  Given that render-passes all live inside CCRenderPassList objects, could we use an array index instead?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; My thinking was that the renderPassId is going to be globally unique across all compositors. This way when we give the RenderPass and quads to another compositor, it doesn&apos;t need to rewrite the ids to new array indexes (potential bugs).
&gt; &gt; &gt; 
&gt; &gt; &gt; Hmm, but how do you plan to enforce globally unique IDs across processes?  I see a TODO for that in CCLayerTreeHostImpl::calculateRenderPasses.
&gt; &gt; 
&gt; &gt; Each compositor has an ID. RenderPass id high bits are compositor id.
&gt; 
&gt; But that means compositors themselves need to enforce a globally-unique id, which means a round-trip at compositor creation time... meh. In particular, if a child renderer becomes malicious it could start mucking around with other render passes and do bad things. So we&apos;d need to add a verification step in the parent compositor anyway.
&gt; I think it&apos;s easier to do a remapping in the parent.

True, fair enough. I can remove that FIXME in a followup or here if this needs to go another review round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667904</commentid>
    <comment_count>10</comment_count>
      <attachid>151800</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-12 09:59:17 -0700</bug_when>
    <thetext>Comment on attachment 151800
Patch

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

I think I agree with Dana that the serialized bit of FrameData is renderPasses and maybe occludingScreenSpaceRects.  Everything else is there as a cached calculated value (skippedPasses, renderPassesById), or as a hook to get debug rect information that needs to be refactored (renderSurfaceLayerList), or as a callback mechanism that only the embedder needs (willDrawLayers).  All of these seem like things that need to either stay in the embedded compositor or be recalculated as needed in the host compositor.

FrameData seems a bit of a tangle and likely should be split up better around its various concerns.  I don&apos;t think this patch makes it any worse.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:2968
&gt; +    std::map&lt;char, RenderPassCacheEntry&gt; renderPassCache;

Unused?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:2969
&gt; +    OwnPtr&lt;CCSharedQuadState&gt; sharedQuadState;

No.  This will then go out of scope after this function returns and the pointer will be stale on the test quads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667911</commentid>
    <comment_count>11</comment_count>
      <attachid>151800</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 10:02:28 -0700</bug_when>
    <thetext>Comment on attachment 151800
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:2969
&gt;&gt; +    OwnPtr&lt;CCSharedQuadState&gt; sharedQuadState;
&gt; 
&gt; No.  This will then go out of scope after this function returns and the pointer will be stale on the test quads.

Ohh. Ok. Let me just leave these 2 in the testData struct. I thot they were only used here so just keep them local but there&apos;s other concerns to consider clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668028</commentid>
    <comment_count>12</comment_count>
      <attachid>152010</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 11:31:38 -0700</bug_when>
    <thetext>Created attachment 152010
Patch

- removed fixme for global renderpass id since we&apos;ll map it in the host compositor
- changed ownership around for RenderPasses so I can remove skippedPasses from FrameData. now the HashMap owns all passes. The renderPasses list is just pointers that will actually be drawn. This will be more friendly in ubercomp land, where we want to hold onto passes we didn&apos;t generate across frames and possibly use them/not use them depending on cached textures.

The ownership change exposed a bug that a unit test causes - a root layer with opacity &lt; 1 tries to make another RenderSurface, causing it to appear in the RSLL twice. Fixing this separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668191</commentid>
    <comment_count>13</comment_count>
      <attachid>152054</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 14:08:47 -0700</bug_when>
    <thetext>Created attachment 152054
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668286</commentid>
    <comment_count>14</comment_count>
      <attachid>152054</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-12 15:14:19 -0700</bug_when>
    <thetext>Comment on attachment 152054
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:321
&gt;      HashMap&lt;int, const CCRenderPass*&gt; passesInFrame;
&gt;      for (size_t i = 0; i &lt; renderPassesInDrawOrder.size(); ++i)
&gt; -        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i].get());
&gt; +        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);

Is this passesInFrame hash redundant? Should decideRenderPassAllocationsForFrame just take FrameData?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:412
&gt; +    CCRenderPassIdHashMap::const_iterator itToRemove = frame.renderPassesById.find(renderPassId);
&gt; +    ASSERT(itToRemove != frame.renderPassesById.end());
&gt; +    return itToRemove-&gt;second.get();

bikeshed: itToRemove is not really the right name, since you&apos;re finding not removing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668290</commentid>
    <comment_count>15</comment_count>
      <attachid>152054</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 15:15:56 -0700</bug_when>
    <thetext>Comment on attachment 152054
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:321
&gt;&gt; +        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt; 
&gt; Is this passesInFrame hash redundant? Should decideRenderPassAllocationsForFrame just take FrameData?

Hm! LRC should not take a FrameData. But we could pass in the HashMap that we have now.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:412
&gt;&gt; +    return itToRemove-&gt;second.get();
&gt; 
&gt; bikeshed: itToRemove is not really the right name, since you&apos;re finding not removing?

Ohyarite, thanks. #refactorfail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668316</commentid>
    <comment_count>16</comment_count>
      <attachid>152081</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 15:31:30 -0700</bug_when>
    <thetext>Created attachment 152081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668317</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-12 15:32:47 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 152054 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152054&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:321
&gt; &gt;      HashMap&lt;int, const CCRenderPass*&gt; passesInFrame;
&gt; &gt;      for (size_t i = 0; i &lt; renderPassesInDrawOrder.size(); ++i)
&gt; &gt; -        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i].get());
&gt; &gt; +        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt; 
&gt; Is this passesInFrame hash redundant? Should decideRenderPassAllocationsForFrame just take FrameData?

It is actually not redundant. This map includes only the passes that are in the draw order. It does not include empty render passes (passes that dont fit in memory). The hashmap in FrameData has all RenderPasses in it as its the owner of them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668342</commentid>
    <comment_count>18</comment_count>
      <attachid>152081</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-12 15:58:23 -0700</bug_when>
    <thetext>Comment on attachment 152081
Patch

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668373</commentid>
    <comment_count>19</comment_count>
      <attachid>152081</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 16:26:22 -0700</bug_when>
    <thetext>Comment on attachment 152081
Patch

Clearing flags on attachment: 152081

Committed r122525: &lt;http://trac.webkit.org/changeset/122525&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668374</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 16:26:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151795</attachid>
            <date>2012-07-11 15:10:50 -0700</date>
            <delta_ts>2012-07-11 15:23:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91023-20120711181048.patch</filename>
            <type>text/plain</type>
            <size>36004</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDEzYWRlNTk0OTg1MmVl
NDk5YTFjMDdjOThiZTZjNTZjODJhNGU1Yy4uMGYzNGZiYjk1ZmEyMzU3ZjY5MDZiMGU2MjljNzYz
NThiYmE1N2Y4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVt
b3ZlIHRoZSBSZW5kZXJQYXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlcyB0aGUgUmVu
ZGVyUGFzcyBwb2ludGVyIGFuZCBrZWVwcyBvbmx5IGFuIGludGVnZXIgaWQgaW4gdGhlCisgICAg
ICAgIHF1YWQgdG8gcmVmZXIgYmFjayB0byB0aGUgUmVuZGVyUGFzcyB0aGUgcXVhZCByZWFkcyBm
cm9tLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEZyYW1lRGF0YSk6Cisg
ICAgICAgIChDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKEN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorCiAyMDEyLTA3LTExICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNv
bT4KIAogICAgICAgICBbUXRdIFJFR1JFU1NJT04ocjEyMjI1MCk6IEl0IGJyb2tlIFVTRSgzRF9H
UkFQSElDUyk9MSBhbmQgRU5BQkxFKFdFQkdMKT0wIGJ1aWxkcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCAyYTI1M2Q1ZWM1ZWFlMDgxODI2OTY4ZGFmOWU3OGQzYTM1N2VlNWE4Li44OWEw
YjRkNWFhMDYwNDIwYWFmZmFmZTdjM2Y5MTJkZTI2NTE1ODdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5h
a2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRoZSBSZW5kZXJQ
YXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHA6CisKIDIwMTItMDctMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbWlncmF0ZSBmcm9tIGJhY2tncm91bmQgaW1h
Z2VzIHRvIENTUyBmb3Igc3RhdHVzYmFyIHJlbmRlcmluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMjZhMDllNzBmZTIwZDk3OWViZmEwODU0ODAxYzkzYTNk
NzU4NTFkNS4uZTkxZDMzNzgwZGE4ZGUxNmFmZmFhNGQ2OTlhOGRkZjE5YWI4YmUxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwMCw2ICszMDAsNyBAQCBi
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhGcmFtZURhdGEm
IGZyYW1lKQogCiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBh
c3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlLCBnbG9iYWxSZW5kZXJQYXNzSWQpOwogICAgICAgICBz
dXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CisgICAgICAgIGZy
YW1lLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHBhc3MtPmlkKCksIHBhc3MuZ2V0KCkpOwogICAgICAg
ICBmcmFtZS5yZW5kZXJQYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CiAKQEAg
LTQwNiwxOSArNDA3LDI2IEBAIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNp
emUoKSBjb25zdAogICAgIHJldHVybiBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClb
MF0tPmNvbnRlbnRCb3VuZHMoKTsKIH0KIAotLy8gc3RhdGljCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShDQ1JlbmRlclBhc3NMaXN0JiBwYXNz
ZXMsIHNpemVfdCBib3R0b21QYXNzLCBjb25zdCBDQ1JlbmRlclBhc3MqIGZpcnN0VG9SZW1vdmUs
IENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMpCitzdGF0aWMgaW5saW5lIENDUmVuZGVy
UGFzcyogZmluZFJlbmRlclBhc3NCeUlkKGludCByZW5kZXJQYXNzSWQsIGNvbnN0IENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YSYgZnJhbWUpCit7CisgICAgQ0NSZW5kZXJQYXNzSWRIYXNo
TWFwOjpjb25zdF9pdGVyYXRvciBpdFRvUmVtb3ZlID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5m
aW5kKHJlbmRlclBhc3NJZCk7CisgICAgQVNTRVJUKGl0VG9SZW1vdmUgIT0gZnJhbWUucmVuZGVy
UGFzc2VzQnlJZC5lbmQoKSk7CisgICAgcmV0dXJuIGl0VG9SZW1vdmUtPnNlY29uZDsKK30KKwor
c3RhdGljIHZvaWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKGludCByZW1vdmVSZW5kZXJQ
YXNzSWQsIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSYgZnJhbWUpCiB7Ci0gICAgc2l6
ZV90IHJlbW92ZUluZGV4ID0gcGFzc2VzLmZpbmQoZmlyc3RUb1JlbW92ZSk7CisgICAgQ0NSZW5k
ZXJQYXNzKiByZW1vdmVSZW5kZXJQYXNzID0gZmluZFJlbmRlclBhc3NCeUlkKHJlbW92ZVJlbmRl
clBhc3NJZCwgZnJhbWUpOworICAgIHNpemVfdCByZW1vdmVJbmRleCA9IGZyYW1lLnJlbmRlclBh
c3Nlcy5maW5kKHJlbW92ZVJlbmRlclBhc3MpOwogCiAgICAgLy8gVGhlIHBhc3Mgd2FzIGFscmVh
ZHkgcmVtb3ZlZCBieSBhbm90aGVyIHF1YWQgLSBwcm9iYWJseSB0aGUgb3JpZ2luYWwsIGFuZCB3
ZSBhcmUgdGhlIHJlcGxpY2EuCiAgICAgaWYgKHJlbW92ZUluZGV4ID09IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW1vdmVkUGFzcyA9IHBh
c3Nlc1tyZW1vdmVJbmRleF0ucmVsZWFzZSgpOwotICAgIHBhc3Nlcy5yZW1vdmUocmVtb3ZlSW5k
ZXgpOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbW92ZWRQYXNzID0gZnJhbWUucmVuZGVy
UGFzc2VzW3JlbW92ZUluZGV4XS5yZWxlYXNlKCk7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzLnJl
bW92ZShyZW1vdmVJbmRleCk7CiAKLSAgICAvLyBOb3cgZm9sbG93IHVwIGZvciBhbGwgUmVuZGVy
UGFzcyBxdWFkcyBhbmQgcmVtb3ZlIHRoZWlyIHJlbmRlciBwYXNzZXMgcmVjdXJzaXZlbHkuCisg
ICAgLy8gTm93IGZvbGxvdyB1cCBmb3IgYWxsIFJlbmRlclBhc3MgcXVhZHMgYW5kIHJlbW92ZSB0
aGVpciBSZW5kZXJQYXNzZXMgcmVjdXJzaXZlbHkuCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVh
ZExpc3QgPSByZW1vdmVkUGFzcy0+cXVhZExpc3QoKTsKICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJh
Y2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250
QmVnaW4oKTsKICAgICBmb3IgKDsgcXVhZExpc3RJdGVyYXRvciAhPSBxdWFkTGlzdC5iYWNrVG9G
cm9udEVuZCgpOyArK3F1YWRMaXN0SXRlcmF0b3IpIHsKQEAgLTQyNiwzNiArNDM0LDM0IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICAgICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgp
ICE9IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxD
Q1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiBuZXh0UmVuZGVyUGFzcyA9IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCk7Ci0K
LSAgICAgICAgLy8gT3VyIHNlYXJjaCBpcyBub3cgbGltaXRlZCB1cCB0byB0aGUgcGFzcyB0aGF0
IHdlIGp1c3QgcmVtb3ZlZC4KLSAgICAgICAgLy8gU3Vic3RpdHV0ZSByZW1vdmVJbmRleCBmb3Ig
Ym90dG9tUGFzcyBub3cuCi0gICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNz
ZXMsIHJlbW92ZUluZGV4LCBuZXh0UmVuZGVyUGFzcywgc2tpcHBlZFBhc3Nlcyk7CisgICAgICAg
IGludCBuZXh0UmVtb3ZlUmVuZGVyUGFzc0lkID0gY3VycmVudFF1YWQtPnRvUmVuZGVyUGFzc0Ry
YXdRdWFkKCktPnJlbmRlclBhc3NJZCgpOworICAgICAgICByZW1vdmVSZW5kZXJQYXNzZXNSZWN1
cnNpdmUobmV4dFJlbW92ZVJlbmRlclBhc3NJZCwgZnJhbWUpOwogICAgIH0KLSAgICBza2lwcGVk
UGFzc2VzLmFwcGVuZChyZW1vdmVkUGFzcy5yZWxlYXNlKCkpOworCisgICAgZnJhbWUuc2tpcHBl
ZFBhc3Nlcy5hcHBlbmQocmVtb3ZlZFBhc3MucmVsZWFzZSgpKTsKIH0KIAotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpzaG91bGRS
ZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBh
c3NEcmF3UXVhZCYgcXVhZCkgY29uc3QKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJl
bmRlclBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCwgY29uc3QgRnJhbWVEYXRhJikgY29uc3QKIHsK
ICAgICByZXR1cm4gcXVhZC5jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSgpLmlzRW1wdHko
KSAmJiBtX3JlbmRlcmVyLmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocXVhZC5y
ZW5kZXJQYXNzSWQoKSk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRl
clBhc3Nlc1dpdGhOb1F1YWRzOjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVy
UGFzc0xpc3QmIHBhc3NMaXN0LCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCkgY29u
c3QKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRz
OjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFk
LCBjb25zdCBGcmFtZURhdGEmIGZyYW1lKSBjb25zdAogewotICAgIHNpemVfdCBwYXNzSW5kZXgg
PSBwYXNzTGlzdC5maW5kKHF1YWQucmVuZGVyUGFzcygpKTsKKyAgICBjb25zdCBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3MgPSBmaW5kUmVuZGVyUGFzc0J5SWQocXVhZC5yZW5kZXJQYXNzSWQoKSwg
ZnJhbWUpOworICAgIHNpemVfdCBwYXNzSW5kZXggPSBmcmFtZS5yZW5kZXJQYXNzZXMuZmluZChy
ZW5kZXJQYXNzKTsKICAgICBBU1NFUlQocGFzc0luZGV4ICE9IG5vdEZvdW5kKTsKIAogICAgIC8v
IElmIGFueSBxdWFkIG9yIFJlbmRlclBhc3MgZHJhd3MgaW50byB0aGlzIFJlbmRlclBhc3MsIHRo
ZW4ga2VlcCBpdC4KLSAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IHBhc3NMaXN0W3Bh
c3NJbmRleF0tPnF1YWRMaXN0KCk7CisgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSBm
cmFtZS5yZW5kZXJQYXNzZXNbcGFzc0luZGV4XS0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVh
ZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBxdWFkTGlzdEl0ZXJhdG9yID0gcXVhZExp
c3QuYmFja1RvRnJvbnRCZWdpbigpOyBxdWFkTGlzdEl0ZXJhdG9yICE9IHF1YWRMaXN0LmJhY2tU
b0Zyb250RW5kKCk7ICsrcXVhZExpc3RJdGVyYXRvcikgewogICAgICAgICBDQ0RyYXdRdWFkKiBj
dXJyZW50UXVhZCA9IHF1YWRMaXN0SXRlcmF0b3ItPmdldCgpOwogCiAgICAgICAgIGlmIChjdXJy
ZW50UXVhZC0+bWF0ZXJpYWwoKSAhPSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBx
dWFkSW5QYXNzID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVh
ZCk7Ci0gICAgICAgIGlmIChwYXNzTGlzdC5jb250YWlucyhxdWFkSW5QYXNzLT5yZW5kZXJQYXNz
KCkpKQorICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGNvbnRyaWJ1dGluZ1Bhc3MgPSBmaW5k
UmVuZGVyUGFzc0J5SWQoY3VycmVudFF1YWQtPnRvUmVuZGVyUGFzc0RyYXdRdWFkKCktPnJlbmRl
clBhc3NJZCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChmcmFtZS5yZW5kZXJQYXNzZXMuY29udGFp
bnMoY29udHJpYnV0aW5nUGFzcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiB0cnVlOwpAQCAtNDgxLDcgKzQ4Nyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURh
dGEmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIENDUmVuZGVyUGFz
c0RyYXdRdWFkKiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdR
dWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgaWYgKCFjdWxsZXIuc2hvdWxkUmVtb3Zl
UmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXMsICpyZW5kZXJQYXNzUXVhZCkpCisgICAgICAg
ICAgICBpZiAoIWN1bGxlci5zaG91bGRSZW1vdmVSZW5kZXJQYXNzKCpyZW5kZXJQYXNzUXVhZCwg
ZnJhbWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBXZSBh
cmUgY2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGl0ZXJhdGlvbi4gQmVjYXVz
ZSB3ZQpAQCAtNDkwLDcgKzQ5Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3Zl
UmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmCiAgICAgICAg
ICAgICAvLyBjaGFuZ2UuIFNvLCBjYXB0dXJlIHRoZSBpdGVyYXRvciBwb3NpdGlvbiBmcm9tIHRo
ZSBlbmQgb2YgdGhlCiAgICAgICAgICAgICAvLyBsaXN0LCBhbmQgcmVzdG9yZSBpdCBhZnRlciB0
aGUgY2hhbmdlLgogICAgICAgICAgICAgaW50IHBvc2l0aW9uRnJvbUVuZCA9IGZyYW1lLnJlbmRl
clBhc3Nlcy5zaXplKCkgLSBpdDsKLSAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vy
c2l2ZShmcmFtZS5yZW5kZXJQYXNzZXMsIGl0LCByZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzcygp
LCBmcmFtZS5za2lwcGVkUGFzc2VzKTsKKyAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1Jl
Y3Vyc2l2ZShyZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzc0lkKCksIGZyYW1lKTsKICAgICAgICAg
ICAgIGl0ID0gZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSAtIHBvc2l0aW9uRnJvbUVuZDsKICAg
ICAgICAgICAgIEFTU0VSVChpdCA+PSAwKTsKICAgICAgICAgfQpAQCAtNTA0LDYgKzUxMCw3IEBA
IGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1l
KQogCiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9ICZtX3JlbmRlclN1cmZhY2VM
YXllckxpc3Q7CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7CisgICAgZnJhbWUucmVu
ZGVyUGFzc2VzQnlJZC5jbGVhcigpOwogICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3Qt
PmNsZWFyKCk7CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDQ5ZjJmYzYyYjk3MGQwNGNlYTQ4NmQzMjYx
OWZhN2Q2OGU5ZDg4OWQuLjU1YzA0M2Q4MmM0ZTI4NmNhMjM5MGFlMWMwYjIxZmNhZTcxMTI1MTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTg2LDYgKzg2LDcgQEAg
cHVibGljOgogICAgICAgICBWZWN0b3I8SW50UmVjdD4gb2NjbHVkaW5nU2NyZWVuU3BhY2VSZWN0
czsKICAgICAgICAgQ0NSZW5kZXJQYXNzTGlzdCByZW5kZXJQYXNzZXM7CiAgICAgICAgIENDUmVu
ZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKKyAgICAgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFw
IHJlbmRlclBhc3Nlc0J5SWQ7CiAgICAgICAgIENDTGF5ZXJMaXN0KiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OwogICAgICAgICBDQ0xheWVyTGlzdCB3aWxsRHJhd0xheWVyczsKICAgICB9OwpAQCAt
MTgwLDcgKzE4MSw3IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEN1bGxSZW5kZXJQYXNzZXNXaXRo
Q2FjaGVkVGV4dHVyZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVS
ZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3
UXVhZCYpIGNvbnN0OworICAgICAgICBib29sIHNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQmLCBjb25zdCBGcmFtZURhdGEmKSBjb25zdDsKIAogICAgICAg
ICAvLyBJdGVyYXRlcyBmcm9tIHRoZSByb290IGZpcnN0LCBpbiBvcmRlciB0byByZW1vdmUgdGhl
IHN1cmZhY2VzIGNsb3Nlc3QKICAgICAgICAgLy8gdG8gdGhlIHJvb3Qgd2l0aCBjYWNoZWQgdGV4
dHVyZXMsIGFuZCBhbGwgc3VyZmFjZXMgdGhhdCBkcmF3IGludG8KQEAgLTE5Niw3ICsxOTcsNyBA
QCBwdWJsaWM6CiAKICAgICBjbGFzcyBDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHMgewogICAg
IHB1YmxpYzoKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVu
ZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYpIGNvbnN0OworICAgICAg
ICBib29sIHNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQm
LCBjb25zdCBGcmFtZURhdGEmKSBjb25zdDsKIAogICAgICAgICAvLyBJdGVyYXRlcyBpbiBkcmF3
IG9yZGVyLCBzbyB0aGF0IHdoZW4gYSBzdXJmYWNlIGlzIHJlbW92ZWQsIGFuZCBpdHMKICAgICAg
ICAgLy8gdGFyZ2V0IGJlY29tZXMgZW1wdHksIHRoZW4gaXRzIHRhcmdldCBjYW4gYmUgcmVtb3Zl
ZCBhbHNvLgpAQCAtMjQ0LDggKzI0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRCYWNrZ3Jv
dW5kVGlja2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0
OwogCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVy
UGFzc0xpc3QmIHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0IENDUmVuZGVyUGFzcyog
Zmlyc3RUb1JlbW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nlcyk7Ci0KICAgICB2
b2lkIHNlbmREaWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwogICAgIHZvaWQg
Y2xlYXJSZW5kZXJTdXJmYWNlcygpOwogICAgIGJvb2wgZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVy
TGlzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggOTBhNmVlNjBhZDc1ZjY1YTdj
NTFmMDE5NzgzMDU1NGQ2ZTM1ZWFmNi4uYjExMTAwYWYzNmNkNGNiMGIwNzNjMGRjOTQ1ZmQ1Yzc2
ZjFjZTBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZv
aWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIGNvbnN0IENDCiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNo
YXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGJv
b2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0gICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxl
ciwgc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIGNvbnRyaWJ1dGluZ1JlbmRlclBh
c3MpOworICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNoYXJlZFF1YWRTdGF0
ZS5nZXQoKSwgaXNSZXBsaWNhLCBjb250cmlidXRpbmdSZW5kZXJQYXNzLT5pZCgpKTsKICAgICBt
X3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwog
CiAgICAgaWYgKCFzdXJmYWNlLT5oYXNSZXBsaWNhKCkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQg
Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1w
bCogbGF5ZXIsIGNvbnN0IENDCiAgICAgLy8gQWRkIHJlcGxpY2EgYWZ0ZXIgdGhlIHN1cmZhY2Ug
c28gdGhhdCBpdCBhcHBlYXJzIGJlbG93IHRoZSBzdXJmYWNlLgogICAgIE93blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gcmVwbGljYVNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVJlcGxp
Y2FTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpc1JlcGxpY2EgPSB0cnVlOwotICAgIHN1cmZhY2Ut
PmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUuZ2V0KCksIGlz
UmVwbGljYSwgY29udHJpYnV0aW5nUmVuZGVyUGFzcyk7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVh
ZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBj
b250cmlidXRpbmdSZW5kZXJQYXNzLT5pZCgpKTsKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Qu
YXBwZW5kKHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaAppbmRleCA0N2FlMmY3NDdlOGRkMDdhNTRlYjBiMmM4ZTQ2MmFlYjBhNTc4YWVl
Li41ZjdjOWU5YTExMWM4MTUwZjAxYjkxMjE5YTcxZWM1YzhmNDk0MjE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2tDb2xvci5oIgogI2lu
Y2x1ZGUgImNjL0NDT2NjbHVzaW9uVHJhY2tlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTgyLDYgKzgzLDcgQEAgcHJvdGVjdGVkOgogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRy
PENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0OwordHlwZWRlZiBIYXNoTWFwPGludCwg
Q0NSZW5kZXJQYXNzKj4gQ0NSZW5kZXJQYXNzSWRIYXNoTWFwOwogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
c0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCA3NWJkNzYxZDE1NTM1ODY5MWMyYjA0
Y2QxZTc2YmM3YTkzODM4MjllLi5hNzE5NmUwN2RhMjNkZDEzMzE5YzNmNGIzMDE5ODRkMWZjYTcw
ZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCkBAIC0yNywy
NiArMjcsMjMgQEAKIAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAKLSNp
bmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNz
T3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRl
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNh
LCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tU
ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQor
UGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNy
ZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRS
ZWN0JiBxdWFkUmVjdCwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0
ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwg
Y29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1
YWRSZWN0LCByZW5kZXJQYXNzLCBpc1JlcGxpY2EsIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJz
LCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBx
dWFkUmVjdCwgcmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0
ZXJzLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOwogfQog
Ci1DQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCitDQ1JlbmRlclBhc3NE
cmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGludCByZW5kZXJQYXNzSWQs
IGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMs
IHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1
YWQ6OlJlbmRlclBhc3MsIHF1YWRSZWN0KQotICAgICwgbV9yZW5kZXJQYXNzKHJlbmRlclBhc3Mp
Ci0gICAgLCBtX3JlbmRlclBhc3NJZChyZW5kZXJQYXNzLT5pZCgpKQorICAgICwgbV9yZW5kZXJQ
YXNzSWQocmVuZGVyUGFzc0lkKQogICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogICAgICwg
bV9maWx0ZXJzKGZpbHRlcnMpCiAgICAgLCBtX2JhY2tncm91bmRGaWx0ZXJzKGJhY2tncm91bmRG
aWx0ZXJzKQogICAgICwgbV9tYXNrVGV4dHVyZUlkKG1hc2tUZXh0dXJlSWQpCiAgICAgLCBtX2Nv
bnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1l
KQogewotICAgIEFTU0VSVChtX3JlbmRlclBhc3MpOworICAgIEFTU0VSVChtX3JlbmRlclBhc3NJ
ZCA+IDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaAppbmRl
eCBiNjNhNzY0NDY4Mzk2OTgyMGE1YmQzMDFkMTA2NmEyNmM0ZTQ3NjI1Li5iNWE1MGVjNmYxNTEy
MzZkOWM0YTcwYjUwOGQzYmIxZjA0NTI4MjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
c0RyYXdRdWFkLmgKQEAgLTM3LDkgKzM3LDggQEAgY2xhc3MgQ0NSZW5kZXJQYXNzOwogY2xhc3Mg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxp
Y2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFz
a1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUp
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBjcmVhdGUoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgaW50IHJlbmRlclBhc3NJZCwg
Ym9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywg
dW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2lu
Y2VMYXN0RnJhbWUpOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJQYXNzOyB9CiAgICAgaW50IHJlbmRlclBhc3NJZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7
IHJldHVybiBtX2lzUmVwbGljYTsgfQogICAgIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUZXh0dXJlSWQ7IH0KQEAgLTQ5LDkgKzQ4LDggQEAgcHVibGljOgog
ICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRGaWx0ZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3Qg
SW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOworICAgIENDUmVuZGVyUGFz
c0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGludCBy
ZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9y
ZW5kZXJQYXNzOwogICAgIGludCBtX3JlbmRlclBhc3NJZDsKICAgICBib29sIG1faXNSZXBsaWNh
OwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBkM2E4NWQyZGE4NDExOWE2ZjJjNzNhZDNmMWQzMDIz
ZWQ2NzQxODI4Li5hMDE2ZDdlYWVlOWIyNGFhZGI2NGY3MDY5MWMzMjQ1NTRjMDY4YzkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCBGbG9hdFJl
Y3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFj
ZShjb25zdCBGbG9hdFJlYwogICAgIHJldHVybiBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJl
Y3QoaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCByb290U2Npc3NvclJlY3QpOwogfQogCi12
b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhLCBjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5k
UXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1
YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhLCBpbnQgcmVuZGVyUGFzc0lkKQogewogICAgIEFTU0VS
VCghZm9yUmVwbGljYSB8fCBoYXNSZXBsaWNhKCkpOwogCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9p
ZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIEND
U2hhcmVkUXVhZFN0YXRlKiBzaGEKICAgICBpbnQgbWFza1RleHR1cmVJZCA9IG1hc2tMYXllciA/
IG1hc2tMYXllci0+Y29udGVudHNUZXh0dXJlSWQoKSA6IDA7CiAgICAgSW50UmVjdCBjb250ZW50
c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSA9IGNvbnRlbnRzQ2hhbmdlZCgpID8gbV9jb250ZW50UmVj
dCA6IEludFJlY3QoKTsKIAotICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJQYXNz
RHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRlclBh
c3MsIGZvclJlcGxpY2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1
cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKKyAgICBxdWFkTGlzdC5hcHBl
bmRTdXJmYWNlKENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBj
b250ZW50UmVjdCgpLCByZW5kZXJQYXNzSWQsIGZvclJlcGxpY2EsIGZpbHRlcnMoKSwgYmFja2dy
b3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJh
bWUpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCA4OTRlYTVhZWEy
ZWZhZWU2YmNmMDE1YjM4MGUwMzEyMjMzNGE5ZDcyLi5iMWU2NWE4ZmUyZWNjNGQ2YmI3YjlhOTUy
Y2U3ODlkZmY4YzA3NGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMTMwLDcg
KzEzMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVh
dGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0
YXRlPiBjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBs
aWNhLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1
bGxlciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBpbnQgcmVuZGVyUGFz
c0lkKTsKIAogICAgIEZsb2F0UmVjdCBjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3Vy
ZmFjZShjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKaW5kZXggZmJlZGU2Y2VkMTg1Y2M1ZThjZDUxYWU1OWRiYmEzNGYwMzZmZjM5NS4uNTE2
ZjgwYWZhZTJlNGJmODU0ZDEyYjYyNDc4OWY0YjUxNDNkNDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
QEAgLTI0OTYsNyArMjQ5Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3Vy
ZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5k
ZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkp
OwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVu
ZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdl
dCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJm
YWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQ
YXNzID0gZnJhbWUucmVuZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEodGFy
Z2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJV
RSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAg
ICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+
ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNTI4LDcgKzI1MzAsOSBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKICAgICAgICAgRVhQ
RUNUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKICAg
ICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nl
c1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5y
ZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgp
KTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUuc2tpcHBlZFBhc3Nl
c1swXS5nZXQoKTsKKyAgICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJl
bmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1
cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdM
YXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1l
KTsKQEAgLTI1NDgsNyArMjU1Miw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c3VyZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpS
ZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFs
KCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PEND
UmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBd
LmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRT
dXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJn
ZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEo
dGFyZ2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAog
ICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1w
bC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNTc0LDEwICsyNTgwLDEyIEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAg
ICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3
UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVu
ZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7
CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1sw
XS5nZXQoKTsKKyAgICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRl
clBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZh
Y2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBl
dmljdGVkPwotICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigp
LT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3MoKS0+
aWQoKSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigp
LT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsK
IAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjExLDcgKzI2MTksOSBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAg
ICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2Vz
WzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJh
d1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJl
bmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkp
OworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5za2lwcGVkUGFzc2Vz
WzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEodGFyZ2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVu
ZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGFyZ2V0UGFzcy0+dGFyZ2V0U3Vy
ZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xh
eWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUp
OwpAQCAtMjY0Myw3ICsyNjUzLDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
dXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9FUShD
Q0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClb
MF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0
YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5x
dWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFz
cygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5k
ZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAg
ICBFWFBFQ1RfRVEodGFyZ2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hh
bmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAg
ICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjc2LDcgKzI2ODgs
OSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGlu
Z05vUGFydGlhbFN3YXApCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2Vz
WzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpS
ZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFs
KCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PEND
UmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBd
LmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0
U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFy
Z2V0UGFzcyA9IGZyYW1lLnNraXBwZWRQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVYUEVDVF9F
USh0YXJnZXRQYXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsK
IAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjk2LDcgKzI3MTAsOSBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlh
bFN3YXApCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1l
LnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIEND
UmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1
YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVu
dHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5y
ZW5kZXJQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVYUEVDVF9FUSh0YXJnZXRQYXNzLT5pZCgp
LCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRhcmdldFBhc3Mt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKQEAgLTI3MjIsMTAgKzI3MzgsMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAg
IEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0t
PnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVy
UGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1
YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7Cisg
ICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1swXS5n
ZXQoKTsKKyAgICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRlclBh
c3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2Uo
KS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmlj
dGVkPwotICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5o
YXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3MoKS0+aWQo
KSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5o
YXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsKIAog
ICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1w
bC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNzYwLDcgKzI3NzgsOSBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3
YXApCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJl
bmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVu
ZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQq
PihmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRz
Q2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUuc2tp
cHBlZFBhc3Nlc1swXS5nZXQoKTsKKyAgICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCks
IHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3Mt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKQEAgLTI4MDEsNyArMjgyMSw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTWVtb3J5TGltaXQpCiAKICAgICAgICAgRVhQ
RUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVh
ZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBx
dWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNz
ZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShxdWFkLT5y
ZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAg
ICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbMF0uZ2V0KCk7
CisgICAgICAgIEVYUEVDVF9FUSh0YXJnZXRQYXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQo
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29u
dGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI4MzQs
NyArMjg1Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1
cmVDYWNoaW5nTWVtb3J5TGltaXQpCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVy
UGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdR
dWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1h
dGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19j
YXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlz
dCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+
dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFz
cyogdGFyZ2V0UGFzcyA9IGZyYW1lLnNraXBwZWRQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVY
UEVDVF9FUSh0YXJnZXRQYXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdl
ZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAg
bXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yODc3LDEwICsyOTAxLDgg
QEAgc3RydWN0IFJlbmRlclBhc3NDYWNoZUVudHJ5IHsKIAogc3RydWN0IFJlbmRlclBhc3NSZW1v
dmFsVGVzdERhdGEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIHsKICAg
ICBzdGQ6Om1hcDxjaGFyLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4gcmVuZGVyUGFzc0NhY2hlOwot
ICAgIHN0ZDo6bWFwPGNvbnN0IENDUmVuZGVyUGFzcyosIGNoYXI+IHJlbmRlclBhc3NJZDsKICAg
ICBWZWN0b3I8T3duUHRyPENDUmVuZGVyU3VyZmFjZT4gPiByZW5kZXJTdXJmYWNlU3RvcmU7CiAg
ICAgVmVjdG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiBsYXllclN0b3JlOwotICAgIE93blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlOwogfTsKIAogY2xhc3MgQ0NUZXN0UmVu
ZGVyUGFzczogcHVibGljIENDUmVuZGVyUGFzcyB7CkBAIC0yOTQwLDE3ICsyOTYyLDE5IEBAIHN0
YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKFJlbmRl
clBhc3NSZW1vdmFsVGVzdERhdGEmCiAKIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NU
ZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRh
JiB0ZXN0RGF0YSwgQ0NUZXN0UmVuZGVyZXIqIHJlbmRlcmVyKQogeworICAgIHN0ZDo6bWFwPGNo
YXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5PiByZW5kZXJQYXNzQ2FjaGU7CisgICAgT3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGU7CisKICAgICByZW5kZXJlci0+Y2xlYXJD
YWNoZWRUZXh0dXJlcygpOwogCiAgICAgLy8gT25lIHNoYXJlZCBzdGF0ZSBmb3IgYWxsIHF1YWRz
IC0gd2UgZG9uJ3QgbmVlZCB0aGUgY29ycmVjdCBkZXRhaWxzCi0gICAgdGVzdERhdGEuc2hhcmVk
UXVhZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBJbnRSZWN0KCksIEludFJlY3QoKSwg
MS4wLCB0cnVlKTsKKyAgICBzaGFyZWRRdWFkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IEludFJlY3QoKSwgSW50UmVjdCgpLCAxLjAsIHRydWUpOwogCiAgICAgY29uc3QgY2hhciogY3Vy
cmVudENoYXIgPSB0ZXN0U2NyaXB0OwogCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MKICAg
ICBjaGFyIHJvb3RSZW5kZXJQYXNzSWQgPSB0ZXN0U2NyaXB0WzBdOwogICAgIE93blB0cjxDQ1Jl
bmRlclBhc3M+IHJvb3RSZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRh
LCByb290UmVuZGVyUGFzc0lkKTsKLSAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0
ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJl
bmRlclBhc3NJZCkpOwogICAgIHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpw
YWlyPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5kZXJQ
YXNzQ2FjaGVFbnRyeShyb290UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CiAgICAgd2hpbGUgKCpj
dXJyZW50Q2hhcikgewogICAgICAgICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFyWzBd
OwpAQCAtMjk2OCw3ICsyOTkyLDcgQEAgc3RhdGljIHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rl
c3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3JpcHQsIFJlbmRlclBhc3NSZW1vdmEKICAgICAgICAg
d2hpbGUgKCpjdXJyZW50Q2hhciAmJiAqY3VycmVudENoYXIgIT0gJ1xuJykgewogICAgICAgICAg
ICAgaWYgKCpjdXJyZW50Q2hhciA9PSAncycpIHsKICAgICAgICAgICAgICAgICAvLyBTb2xpZCBj
b2xvciBkcmF3IHF1YWQKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCA9
IENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdl
dCgpLCBJbnRSZWN0KDAsIDAsIDEwLCAxMCksIFNLX0NvbG9yV0hJVEUpOworICAgICAgICAgICAg
ICAgIE93blB0cjxDQ0RyYXdRdWFkPiBxdWFkID0gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0
ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAsIDEwKSwgU0tfQ29sb3JX
SElURSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NU
ZXN0UmVuZGVyUGFzcyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFz
ZSgpKTsKICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwpAQCAtMjk5NywyNSArMzAyMSwy
MiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciog
dGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudENoYXIrKzsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBDQ1JlbmRl
clBhc3MqIHJlZlJlbmRlclBhc3NQdHI7Ci0KICAgICAgICAgICAgICAgICBpZiAodGVzdERhdGEu
cmVuZGVyUGFzc0NhY2hlLmZpbmQobmV3UmVuZGVyUGFzc0lkKSA9PSB0ZXN0RGF0YS5yZW5kZXJQ
YXNzQ2FjaGUuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1RleHR1cmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hlZFJlc291cmNlc0Zv
clJlbmRlclBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOwogCi0gICAgICAgICAgICAgICAgICAgIE93
blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3Mo
dGVzdERhdGEsIG5ld1JlbmRlclBhc3NJZCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZlJlbmRl
clBhc3NQdHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0
RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihy
ZWZSZW5kZXJQYXNzLmdldCgpLCBuZXdSZW5kZXJQYXNzSWQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVy
UGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0NhY2hlRW50cnkocmVm
UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQdHIgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGVb
bmV3UmVuZGVyUGFzc0lkXS5yZW5kZXJQYXNzOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8
Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRh
LCBuZXdSZW5kZXJQYXNzSWQpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQ
YXNzZXNCeUlkLmFkZChyZW5kZXJQYXNzLT5pZCgpLCByZW5kZXJQYXNzLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBhaXI8
Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0Nh
Y2hlRW50cnkocmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CisgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgSW50UmVjdCBxdWFkUmVjdCA9IEludFJlY3QoMCwgMCwgMSwgMSk7CiAg
ICAgICAgICAgICAgICAgSW50UmVjdCBjb250ZW50c0NoYW5nZWRSZWN0ID0gY29udGVudHNDaGFu
Z2VkID8gcXVhZFJlY3QgOiBJbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgT3duUHRyPENDUmVu
ZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0
RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHF1YWRSZWN0LCByZWZSZW5kZXJQYXNzUHRyLCBp
c1JlcGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMoKSwgMSwgY29udGVudHNDaGFuZ2VkUmVjdCk7CisgICAgICAgICAgICAgICAg
T3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6
OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHF1YWRSZWN0LCBuZXdSZW5kZXJQYXNzSWQs
IGlzUmVwbGljYSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsKICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDQ1Rlc3RSZW5kZXJQYXNzKj4ocmVuZGVyUGFzcy5nZXQoKSktPmFwcGVu
ZFF1YWQocXVhZC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAg
IHRlc3REYXRhLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHJlbmRlclBhc3MtPmlkKCksIHJlbmRlclBh
c3MuZ2V0KCkpOwogICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMuaW5zZXJ0KDAsIHJlbmRl
clBhc3MucmVsZWFzZSgpKTsKICAgICAgICAgaWYgKCpjdXJyZW50Q2hhcikKICAgICAgICAgICAg
IGN1cnJlbnRDaGFyKys7CkBAIC0zMDI3LDggKzMwNDgsNyBAQCB2b2lkIGR1bXBSZW5kZXJQYXNz
VGVzdERhdGEoY29uc3QgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIq
IGJ1ZgogICAgIGNoYXIqIHBvcyA9IGJ1ZmZlcjsKICAgICBmb3IgKENDUmVuZGVyUGFzc0xpc3Q6
OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMucmJlZ2lu
KCk7IGl0ICE9IHRlc3REYXRhLnJlbmRlclBhc3Nlcy5yZW5kKCk7ICsraXQpIHsKICAgICAgICAg
Q0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IGl0LT5nZXQoKTsKLSAgICAgICAgY2hhciBwYXNz
SWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChjdXJyZW50UGFzcyktPnNlY29uZDsKLSAg
ICAgICAgKnBvcyA9IHBhc3NJZDsKKyAgICAgICAgKnBvcyA9IGN1cnJlbnRQYXNzLT5pZCgpOwog
ICAgICAgICBwb3MrKzsKIAogICAgICAgICBDQ1F1YWRMaXN0Ojpjb25zdF9pdGVyYXRvciBxdWFk
TGlzdEl0ZXJhdG9yID0gY3VycmVudFBhc3MtPnF1YWRMaXN0KCkuYmVnaW4oKTsKQEAgLTMwMzks
MTQgKzMwNTksMTAgQEAgdm9pZCBkdW1wUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IFJlbmRlclBh
c3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFyKiBidWYKICAgICAgICAgICAgICAgICAq
cG9zID0gJ3MnOwogICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOiB7Ci0gICAgICAgICAg
ICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHJlbmRlclBhc3NEcmF3UXVhZCA9IHN0YXRpY19j
YXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgICAg
IGNvbnN0IENDUmVuZGVyUGFzcyogcmVmUGFzcyA9IHJlbmRlclBhc3NEcmF3UXVhZC0+cmVuZGVy
UGFzcygpOwotICAgICAgICAgICAgICAgIGNoYXIgcmVmUGFzc0lkID0gdGVzdERhdGEucmVuZGVy
UGFzc0lkLmZpbmQocmVmUGFzcyktPnNlY29uZDsKLSAgICAgICAgICAgICAgICAqcG9zID0gcmVm
UGFzc0lkOworICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOgorICAgICAg
ICAgICAgICAgICpwb3MgPSBjdXJyZW50UXVhZC0+dG9SZW5kZXJQYXNzRHJhd1F1YWQoKS0+cmVu
ZGVyUGFzc0lkKCk7CiAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
ICpwb3MgPSAneCc7CiAgICAgICAgICAgICAgICAgcG9zKys7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151800</attachid>
            <date>2012-07-11 15:23:40 -0700</date>
            <delta_ts>2012-07-12 11:31:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91023-20120711182339.patch</filename>
            <type>text/plain</type>
            <size>36689</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg3MjE1N2FlMmNiMTI2
MGVjMDNmNGVmYzE2MTkxYzk0ZjM4YzRlYy4uZjlhYzFkMzRkMzYwNmYxMzQ5ZDU0MzhhYmM4YTI0
MzVlMWYwNTAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDEyLTA3LTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUmVt
b3ZlIHRoZSBSZW5kZXJQYXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlcyB0aGUgUmVu
ZGVyUGFzcyBwb2ludGVyIGFuZCBrZWVwcyBvbmx5IGFuIGludGVnZXIgaWQgaW4gdGhlCisgICAg
ICAgIHF1YWQgdG8gcmVmZXIgYmFjayB0byB0aGUgUmVuZGVyUGFzcyB0aGUgcXVhZCByZWFkcyBm
cm9tLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEZyYW1lRGF0YSk6Cisg
ICAgICAgIChDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKEN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorCisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxheWVyUmVjdCB0byBjb250ZW50UmVjdCBmb3IgcmVj
dHMgdGhhdCBsaXZlIGluIGNvbnRlbnQgc3BhY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODQzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZDQ3NzJlZGRiZDIzZGE1ZGY0MDdlMGNhODhhZmZhMDU2NzNkNjU5ZC4uMzUxNGMxMDhiZjc4
NzM3OGY1ZGI0YTczZjJhNTRmYmE0OTJhMWU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsNSArMSwxNCBAQAogMjAxMi0wNy0xMSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9t
aXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIFJlbW92ZSB0aGUgUmVuZGVyUGFzcyBwb2lu
dGVyIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgor
CisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAgICAg
ICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxheWVyUmVjdCB0byBjb250ZW50UmVjdCBmb3IgcmVjdHMg
dGhhdCBsaXZlIGluIGNvbnRlbnQgc3BhY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkwODQzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggNzhlNzA5MTRkYTEyOGE3ZDgyNjBlNTBkM2U5YjMwYjU4OTJjOGY0My4u
NmUzZTI1YTJhMjI5Yzg4OWNiMGM4ZGJhZTdiOWE0NzRiMTdjMWFlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwMCw2ICszMDAsNyBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhGcmFtZURhdGEmIGZyYW1lKQog
CiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0
ZShyZW5kZXJTdXJmYWNlLCBnbG9iYWxSZW5kZXJQYXNzSWQpOwogICAgICAgICBzdXJmYWNlUGFz
c01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CisgICAgICAgIGZyYW1lLnJlbmRl
clBhc3Nlc0J5SWQuYWRkKHBhc3MtPmlkKCksIHBhc3MuZ2V0KCkpOwogICAgICAgICBmcmFtZS5y
ZW5kZXJQYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTQwNiwxOSAr
NDA3LDI2IEBAIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25z
dAogICAgIHJldHVybiBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRl
bnRCb3VuZHMoKTsKIH0KIAotLy8gc3RhdGljCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJl
bW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIHNpemVf
dCBib3R0b21QYXNzLCBjb25zdCBDQ1JlbmRlclBhc3MqIGZpcnN0VG9SZW1vdmUsIENDUmVuZGVy
UGFzc0xpc3QmIHNraXBwZWRQYXNzZXMpCitzdGF0aWMgaW5saW5lIENDUmVuZGVyUGFzcyogZmlu
ZFJlbmRlclBhc3NCeUlkKGludCByZW5kZXJQYXNzSWQsIGNvbnN0IENDTGF5ZXJUcmVlSG9zdElt
cGw6OkZyYW1lRGF0YSYgZnJhbWUpCit7CisgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwOjpjb25z
dF9pdGVyYXRvciBpdFRvUmVtb3ZlID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5maW5kKHJlbmRl
clBhc3NJZCk7CisgICAgQVNTRVJUKGl0VG9SZW1vdmUgIT0gZnJhbWUucmVuZGVyUGFzc2VzQnlJ
ZC5lbmQoKSk7CisgICAgcmV0dXJuIGl0VG9SZW1vdmUtPnNlY29uZDsKK30KKworc3RhdGljIHZv
aWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKGludCByZW1vdmVSZW5kZXJQYXNzSWQsIEND
TGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSYgZnJhbWUpCiB7Ci0gICAgc2l6ZV90IHJlbW92
ZUluZGV4ID0gcGFzc2VzLmZpbmQoZmlyc3RUb1JlbW92ZSk7CisgICAgQ0NSZW5kZXJQYXNzKiBy
ZW1vdmVSZW5kZXJQYXNzID0gZmluZFJlbmRlclBhc3NCeUlkKHJlbW92ZVJlbmRlclBhc3NJZCwg
ZnJhbWUpOworICAgIHNpemVfdCByZW1vdmVJbmRleCA9IGZyYW1lLnJlbmRlclBhc3Nlcy5maW5k
KHJlbW92ZVJlbmRlclBhc3MpOwogCiAgICAgLy8gVGhlIHBhc3Mgd2FzIGFscmVhZHkgcmVtb3Zl
ZCBieSBhbm90aGVyIHF1YWQgLSBwcm9iYWJseSB0aGUgb3JpZ2luYWwsIGFuZCB3ZSBhcmUgdGhl
IHJlcGxpY2EuCiAgICAgaWYgKHJlbW92ZUluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1
cm47CiAKLSAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW1vdmVkUGFzcyA9IHBhc3Nlc1tyZW1v
dmVJbmRleF0ucmVsZWFzZSgpOwotICAgIHBhc3Nlcy5yZW1vdmUocmVtb3ZlSW5kZXgpOworICAg
IE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbW92ZWRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzW3Jl
bW92ZUluZGV4XS5yZWxlYXNlKCk7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzLnJlbW92ZShyZW1v
dmVJbmRleCk7CiAKLSAgICAvLyBOb3cgZm9sbG93IHVwIGZvciBhbGwgUmVuZGVyUGFzcyBxdWFk
cyBhbmQgcmVtb3ZlIHRoZWlyIHJlbmRlciBwYXNzZXMgcmVjdXJzaXZlbHkuCisgICAgLy8gTm93
IGZvbGxvdyB1cCBmb3IgYWxsIFJlbmRlclBhc3MgcXVhZHMgYW5kIHJlbW92ZSB0aGVpciBSZW5k
ZXJQYXNzZXMgcmVjdXJzaXZlbHkuCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSBy
ZW1vdmVkUGFzcy0+cXVhZExpc3QoKTsKICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250
SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsK
ICAgICBmb3IgKDsgcXVhZExpc3RJdGVyYXRvciAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgp
OyArK3F1YWRMaXN0SXRlcmF0b3IpIHsKQEAgLTQyNiwzNiArNDM0LDM0IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xp
c3QmIHBhc3NlcywKICAgICAgICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9IENDRHJh
d1F1YWQ6OlJlbmRlclBhc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBh
c3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBu
ZXh0UmVuZGVyUGFzcyA9IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCk7Ci0KLSAgICAgICAg
Ly8gT3VyIHNlYXJjaCBpcyBub3cgbGltaXRlZCB1cCB0byB0aGUgcGFzcyB0aGF0IHdlIGp1c3Qg
cmVtb3ZlZC4KLSAgICAgICAgLy8gU3Vic3RpdHV0ZSByZW1vdmVJbmRleCBmb3IgYm90dG9tUGFz
cyBub3cuCi0gICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNzZXMsIHJlbW92
ZUluZGV4LCBuZXh0UmVuZGVyUGFzcywgc2tpcHBlZFBhc3Nlcyk7CisgICAgICAgIGludCBuZXh0
UmVtb3ZlUmVuZGVyUGFzc0lkID0gY3VycmVudFF1YWQtPnRvUmVuZGVyUGFzc0RyYXdRdWFkKCkt
PnJlbmRlclBhc3NJZCgpOworICAgICAgICByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUobmV4
dFJlbW92ZVJlbmRlclBhc3NJZCwgZnJhbWUpOwogICAgIH0KLSAgICBza2lwcGVkUGFzc2VzLmFw
cGVuZChyZW1vdmVkUGFzcy5yZWxlYXNlKCkpOworCisgICAgZnJhbWUuc2tpcHBlZFBhc3Nlcy5h
cHBlbmQocmVtb3ZlZFBhc3MucmVsZWFzZSgpKTsKIH0KIAotYm9vbCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpzaG91bGRSZW1vdmVSZW5k
ZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCYgcXVhZCkgY29uc3QKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nl
c1dpdGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCYgcXVhZCwgY29uc3QgRnJhbWVEYXRhJikgY29uc3QKIHsKICAgICByZXR1
cm4gcXVhZC5jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSgpLmlzRW1wdHkoKSAmJiBtX3Jl
bmRlcmVyLmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocXVhZC5yZW5kZXJQYXNz
SWQoKSk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhOb1F1YWRzOjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3Qm
IHBhc3NMaXN0LCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCkgY29uc3QKK2Jvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRzOjpzaG91bGRS
ZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFkLCBjb25zdCBG
cmFtZURhdGEmIGZyYW1lKSBjb25zdAogewotICAgIHNpemVfdCBwYXNzSW5kZXggPSBwYXNzTGlz
dC5maW5kKHF1YWQucmVuZGVyUGFzcygpKTsKKyAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MgPSBmaW5kUmVuZGVyUGFzc0J5SWQocXVhZC5yZW5kZXJQYXNzSWQoKSwgZnJhbWUpOwor
ICAgIHNpemVfdCBwYXNzSW5kZXggPSBmcmFtZS5yZW5kZXJQYXNzZXMuZmluZChyZW5kZXJQYXNz
KTsKICAgICBBU1NFUlQocGFzc0luZGV4ICE9IG5vdEZvdW5kKTsKIAogICAgIC8vIElmIGFueSBx
dWFkIG9yIFJlbmRlclBhc3MgZHJhd3MgaW50byB0aGlzIFJlbmRlclBhc3MsIHRoZW4ga2VlcCBp
dC4KLSAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IHBhc3NMaXN0W3Bhc3NJbmRleF0t
PnF1YWRMaXN0KCk7CisgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSBmcmFtZS5yZW5k
ZXJQYXNzZXNbcGFzc0luZGV4XS0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNv
bnN0QmFja1RvRnJvbnRJdGVyYXRvciBxdWFkTGlzdEl0ZXJhdG9yID0gcXVhZExpc3QuYmFja1Rv
RnJvbnRCZWdpbigpOyBxdWFkTGlzdEl0ZXJhdG9yICE9IHF1YWRMaXN0LmJhY2tUb0Zyb250RW5k
KCk7ICsrcXVhZExpc3RJdGVyYXRvcikgewogICAgICAgICBDQ0RyYXdRdWFkKiBjdXJyZW50UXVh
ZCA9IHF1YWRMaXN0SXRlcmF0b3ItPmdldCgpOwogCiAgICAgICAgIGlmIChjdXJyZW50UXVhZC0+
bWF0ZXJpYWwoKSAhPSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkSW5QYXNz
ID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVhZCk7Ci0gICAg
ICAgIGlmIChwYXNzTGlzdC5jb250YWlucyhxdWFkSW5QYXNzLT5yZW5kZXJQYXNzKCkpKQorICAg
ICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGNvbnRyaWJ1dGluZ1Bhc3MgPSBmaW5kUmVuZGVyUGFz
c0J5SWQoY3VycmVudFF1YWQtPnRvUmVuZGVyUGFzc0RyYXdRdWFkKCktPnJlbmRlclBhc3NJZCgp
LCBmcmFtZSk7CisgICAgICAgIGlmIChmcmFtZS5yZW5kZXJQYXNzZXMuY29udGFpbnMoY29udHJp
YnV0aW5nUGFzcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwpAQCAtNDgxLDcgKzQ4Nyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVt
b3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFk
KiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oY3Vy
cmVudFF1YWQpOwotICAgICAgICAgICAgaWYgKCFjdWxsZXIuc2hvdWxkUmVtb3ZlUmVuZGVyUGFz
cyhmcmFtZS5yZW5kZXJQYXNzZXMsICpyZW5kZXJQYXNzUXVhZCkpCisgICAgICAgICAgICBpZiAo
IWN1bGxlci5zaG91bGRSZW1vdmVSZW5kZXJQYXNzKCpyZW5kZXJQYXNzUXVhZCwgZnJhbWUpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBXZSBhcmUgY2hhbmdp
bmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGl0ZXJhdGlvbi4gQmVjYXVzZSB3ZQpAQCAt
NDkwLDcgKzQ5Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFz
c2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmCiAgICAgICAgICAgICAvLyBj
aGFuZ2UuIFNvLCBjYXB0dXJlIHRoZSBpdGVyYXRvciBwb3NpdGlvbiBmcm9tIHRoZSBlbmQgb2Yg
dGhlCiAgICAgICAgICAgICAvLyBsaXN0LCBhbmQgcmVzdG9yZSBpdCBhZnRlciB0aGUgY2hhbmdl
LgogICAgICAgICAgICAgaW50IHBvc2l0aW9uRnJvbUVuZCA9IGZyYW1lLnJlbmRlclBhc3Nlcy5z
aXplKCkgLSBpdDsKLSAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShmcmFt
ZS5yZW5kZXJQYXNzZXMsIGl0LCByZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzcygpLCBmcmFtZS5z
a2lwcGVkUGFzc2VzKTsKKyAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShy
ZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzc0lkKCksIGZyYW1lKTsKICAgICAgICAgICAgIGl0ID0g
ZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSAtIHBvc2l0aW9uRnJvbUVuZDsKICAgICAgICAgICAg
IEFTU0VSVChpdCA+PSAwKTsKICAgICAgICAgfQpAQCAtNTA0LDYgKzUxMCw3IEBAIGJvb2wgQ0NM
YXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiAgICAg
ZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9ICZtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7
CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7CisgICAgZnJhbWUucmVuZGVyUGFzc2Vz
QnlJZC5jbGVhcigpOwogICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QtPmNsZWFyKCk7
CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCmluZGV4IDQ5ZjJmYzYyYjk3MGQwNGNlYTQ4NmQzMjYxOWZhN2Q2OGU5
ZDg4OWQuLjU1YzA0M2Q4MmM0ZTI4NmNhMjM5MGFlMWMwYjIxZmNhZTcxMTI1MTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgog
ICAgICAgICBWZWN0b3I8SW50UmVjdD4gb2NjbHVkaW5nU2NyZWVuU3BhY2VSZWN0czsKICAgICAg
ICAgQ0NSZW5kZXJQYXNzTGlzdCByZW5kZXJQYXNzZXM7CiAgICAgICAgIENDUmVuZGVyUGFzc0xp
c3Qgc2tpcHBlZFBhc3NlczsKKyAgICAgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwIHJlbmRlclBh
c3Nlc0J5SWQ7CiAgICAgICAgIENDTGF5ZXJMaXN0KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owog
ICAgICAgICBDQ0xheWVyTGlzdCB3aWxsRHJhd0xheWVyczsKICAgICB9OwpAQCAtMTgwLDcgKzE4
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEN1bGxSZW5kZXJQYXNzZXNXaXRoQ2FjaGVkVGV4
dHVyZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYpIGNv
bnN0OworICAgICAgICBib29sIHNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQmLCBjb25zdCBGcmFtZURhdGEmKSBjb25zdDsKIAogICAgICAgICAvLyBJdGVy
YXRlcyBmcm9tIHRoZSByb290IGZpcnN0LCBpbiBvcmRlciB0byByZW1vdmUgdGhlIHN1cmZhY2Vz
IGNsb3Nlc3QKICAgICAgICAgLy8gdG8gdGhlIHJvb3Qgd2l0aCBjYWNoZWQgdGV4dHVyZXMsIGFu
ZCBhbGwgc3VyZmFjZXMgdGhhdCBkcmF3IGludG8KQEAgLTE5Niw3ICsxOTcsNyBAQCBwdWJsaWM6
CiAKICAgICBjbGFzcyBDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHMgewogICAgIHB1YmxpYzoK
LSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xp
c3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYpIGNvbnN0OworICAgICAgICBib29sIHNo
b3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmLCBjb25zdCBG
cmFtZURhdGEmKSBjb25zdDsKIAogICAgICAgICAvLyBJdGVyYXRlcyBpbiBkcmF3IG9yZGVyLCBz
byB0aGF0IHdoZW4gYSBzdXJmYWNlIGlzIHJlbW92ZWQsIGFuZCBpdHMKICAgICAgICAgLy8gdGFy
Z2V0IGJlY29tZXMgZW1wdHksIHRoZW4gaXRzIHRhcmdldCBjYW4gYmUgcmVtb3ZlZCBhbHNvLgpA
QCAtMjQ0LDggKzI0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kVGlja2lu
Z0VuYWJsZWQoYm9vbCk7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCi0gICAg
c3RhdGljIHZvaWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3Qm
IHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0IENDUmVuZGVyUGFzcyogZmlyc3RUb1Jl
bW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nlcyk7Ci0KICAgICB2b2lkIHNlbmRE
aWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwogICAgIHZvaWQgY2xlYXJSZW5k
ZXJTdXJmYWNlcygpOwogICAgIGJvb2wgZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggOTBhNmVlNjBhZDc1ZjY1YTdjNTFmMDE5Nzgz
MDU1NGQ2ZTM1ZWFmNi4uYjExMTAwYWYzNmNkNGNiMGIwNzNjMGRjOTQ1ZmQ1Yzc2ZjFjZTBjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQ0NSZW5k
ZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5
ZXIsIGNvbnN0IENDCiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRT
dGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGJvb2wgaXNSZXBs
aWNhID0gZmFsc2U7Ci0gICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgc2hhcmVk
UXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIGNvbnRyaWJ1dGluZ1JlbmRlclBhc3MpOworICAg
IHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwg
aXNSZXBsaWNhLCBjb250cmlidXRpbmdSZW5kZXJQYXNzLT5pZCgpKTsKICAgICBtX3NoYXJlZFF1
YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogCiAgICAgaWYg
KCFzdXJmYWNlLT5oYXNSZXBsaWNhKCkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgQ0NSZW5kZXJQ
YXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIs
IGNvbnN0IENDCiAgICAgLy8gQWRkIHJlcGxpY2EgYWZ0ZXIgdGhlIHN1cmZhY2Ugc28gdGhhdCBp
dCBhcHBlYXJzIGJlbG93IHRoZSBzdXJmYWNlLgogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gcmVwbGljYVNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVJlcGxpY2FTaGFyZWRR
dWFkU3RhdGUoKTsKICAgICBpc1JlcGxpY2EgPSB0cnVlOwotICAgIHN1cmZhY2UtPmFwcGVuZFF1
YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwg
Y29udHJpYnV0aW5nUmVuZGVyUGFzcyk7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1
bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBjb250cmlidXRp
bmdSZW5kZXJQYXNzLT5pZCgpKTsKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHJl
cGxpY2FTaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aAppbmRleCA0N2FlMmY3NDdlOGRkMDdhNTRlYjBiMmM4ZTQ2MmFlYjBhNTc4YWVlLi41ZjdjOWU5
YTExMWM4MTUwZjAxYjkxMjE5YTcxZWM1YzhmNDk0MjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2tDb2xvci5oIgogI2luY2x1ZGUgImNj
L0NDT2NjbHVzaW9uVHJhY2tlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgyLDYg
KzgzLDcgQEAgcHJvdGVjdGVkOgogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVy
UGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0OwordHlwZWRlZiBIYXNoTWFwPGludCwgQ0NSZW5kZXJQ
YXNzKj4gQ0NSZW5kZXJQYXNzSWRIYXNoTWFwOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCAwNTc1NWE2Mjk0MGNlOTRlNjk1MTk2OGU5NTg0Y2E2
MDE2YjNkNjA3Li5lZmU2NWM4NGJhZTBkYjM2ODFkMzFhMGM5OGEzOWM1OTM2ZDJlNTI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCkBAIC0yNywxOSArMjcsMTYg
QEAKIAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAKLSNpbmNsdWRlICJj
Yy9DQ1JlbmRlclBhc3MuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPEND
UmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQorUGFzc093blB0cjxD
Q1JlbmRlclBhc3NEcmF3UXVhZD4gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVj
dCwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBi
YWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYg
Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCByZW5kZXJQ
YXNzLCBpc1JlcGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJz
LCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBx
dWFkUmVjdCwgcmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMs
IGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxh
c3RGcmFtZSkpOwogfQogCi1DQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1
YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxp
Y2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0s
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1Rl
eHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCitD
Q1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGludCBy
ZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3Vu
ZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRz
Q2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUs
IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIHF1YWRSZWN0KQotICAgICwgbV9yZW5kZXJQYXNzKHJl
bmRlclBhc3MpCi0gICAgLCBtX3JlbmRlclBhc3NJZChyZW5kZXJQYXNzLT5pZCgpKQorICAgICwg
bV9yZW5kZXJQYXNzSWQocmVuZGVyUGFzc0lkKQogICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNh
KQogICAgICwgbV9kcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pCiAgICAgLCBtX2ZpbHRlcnMo
ZmlsdGVycykKQEAgLTQ3LDcgKzQ0LDcgQEAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVy
UGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3QKICAgICAs
IG1fbWFza1RleHR1cmVJZChtYXNrVGV4dHVyZUlkKQogICAgICwgbV9jb250ZW50c0NoYW5nZWRT
aW5jZUxhc3RGcmFtZShjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAgICBBU1NF
UlQobV9yZW5kZXJQYXNzKTsKKyAgICBBU1NFUlQobV9yZW5kZXJQYXNzSWQgPiAwKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKaW5kZXggNmE5MDA5MGI3MTJk
MTYzMzMxMTRhNGU4YjBiNjBiYmYyZTcyYzU3Yi4uZTcyNzUzOGMwZjAzMTg1YTQ2OTEzNTg2M2I1
ZTUwYjhhYzg2YmRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCkBA
IC0zOCw5ICszOCw4IEBAIGNsYXNzIENDUmVuZGVyUGFzczsKIGNsYXNzIENDUmVuZGVyUGFzc0Ry
YXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
UmVuZGVyUGFzc0RyYXdRdWFkKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Jl
bmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tn
cm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IElu
dFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5k
RmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWUpOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQ
YXNzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJQYXNzOyB9CiAgICAgaW50IHJlbmRlclBhc3NJ
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAgYm9vbCBpc1JlcGxpY2Eo
KSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQogICAgIHVuc2lnbmVkIG1hc2tUZXh0dXJl
SWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlSWQ7IH0KQEAgLTUzLDkgKzUyLDggQEAg
cHVibGljOgogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3Vu
ZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRGaWx0ZXJzOyB9CiAKIHByaXZh
dGU6Ci0gICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
YmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBDQ1JlbmRlclBhc3NEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBpbnQgcmVuZGVyUGFz
c0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFz
a1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUp
OwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX3JlbmRlclBhc3M7CiAgICAgaW50IG1fcmVu
ZGVyUGFzc0lkOwogICAgIGJvb2wgbV9pc1JlcGxpY2E7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmNwcAppbmRleCA3YmUzNjhjY2U4NWZkZTc1MDQ1MTViMGJjYjAzOTRmODI5NzA4NjQxLi44YmQ0
NmJmMDBiY2I0YTUyMGFmNmVjM2UzZTFiYzI1NmNjODkzMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCBGbG9hdFJlY3QgQ0NSZW5kZXJTdXJm
YWNlOjpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJl
YwogICAgIHJldHVybiBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QoaW52ZXJzZVNjcmVl
blNwYWNlVHJhbnNmb3JtLCByb290U2Npc3NvclJlY3QpOwogfQogCi12b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MpCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3Vs
bGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBm
b3JSZXBsaWNhLCBpbnQgcmVuZGVyUGFzc0lkKQogewogICAgIEFTU0VSVCghZm9yUmVwbGljYSB8
fCBoYXNSZXBsaWNhKCkpOwogCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBDQ1JlbmRlclN1cmZh
Y2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRl
KiBzaGEKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtID0gZm9yUmVw
bGljYSA/IG1fcmVwbGljYURyYXdUcmFuc2Zvcm0gOiBtX2RyYXdUcmFuc2Zvcm07CiAgICAgSW50
UmVjdCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSA9IGNvbnRlbnRzQ2hhbmdlZCgpID8g
bV9jb250ZW50UmVjdCA6IEludFJlY3QoKTsKIAotICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2Uo
Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0
KCksIHJlbmRlclBhc3MsIGZvclJlcGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMoKSwgYmFj
a2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0
RnJhbWUpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmRTdXJmYWNlKENDUmVuZGVyUGFzc0RyYXdRdWFk
OjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50UmVjdCgpLCByZW5kZXJQYXNzSWQsIGZv
clJlcGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwg
bWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCA4OTRlYTVhZWEyZWZhZWU2YmNmMDE1YjM4
MGUwMzEyMjMzNGE5ZDcyLi5iMWU2NWE4ZmUyZWNjNGQ2YmI3YjlhOTUyY2U3ODlkZmY4YzA3NGMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMTMwLDcgKzEzMCw3IEBAIHB1Ymxp
YzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVTaGFyZWRRdWFkU3Rh
dGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVSZXBs
aWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVh
ZEN1bGxlciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBDQ1Jl
bmRlclBhc3MqKTsKKyAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIENDU2hhcmVk
UXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBpbnQgcmVuZGVyUGFzc0lkKTsKIAogICAgIEZs
b2F0UmVjdCBjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9h
dFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggYWJm
MWVmZjhlMTExMzRhMDMyNzJkNjVmNTkwNzIwNzBkNDQ1ZDA5OC4uMzFlNTg0YzE2ZTkyM2NjZTk3
NjYzOWY5YzgzZTJiMWQ0YzU0YzcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTI0OTksNyArMjQ5
OSw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNo
aW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5y
ZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFk
Kj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRz
Q2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVu
ZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEodGFyZ2V0UGFzcy0+aWQoKSwg
cXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50
YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVy
cyhmcmFtZSk7CkBAIC0yNTMxLDcgKzI1MzMsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKICAgICAgICAgRVhQRUNUX0VRKDFVLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKICAgICAgICAgRVhQRUNUX0VR
KENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3Qo
KVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0g
c3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMF0t
PnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UocXVhZC0+cmVuZGVy
UGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NS
ZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUuc2tpcHBlZFBhc3Nlc1swXS5nZXQoKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRlclBhc3NJZCgpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVu
dHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwog
ICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI1NTEsNyAr
MjU1NSw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVD
YWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBD
Q1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdR
dWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRl
bnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUu
cmVuZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEodGFyZ2V0UGFzcy0+aWQo
KSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNz
LT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CkBAIC0yNTc3LDEwICsyNTgzLDEyIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShD
Q0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClb
MF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0
YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5x
dWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBh
c3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVu
ZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1swXS5nZXQoKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHND
aGFuZ2VkKCkpOwogCiAgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgICAg
ICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3MoKS0+aWQoKSkpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsKIAogICAgICAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycyhmcmFtZSk7CkBAIC0yNjE0LDcgKzI2MjIsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBFQ1RfRVEo
Q0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
WzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBz
dGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+
cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQ
YXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1Jl
bmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5za2lwcGVkUGFzc2VzWzBdLmdldCgpOworICAg
ICAgICBFWFBFQ1RfRVEodGFyZ2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UodGFyZ2V0UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50
c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAg
ICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjY0Niw3ICsy
NjU2LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNh
Y2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5k
ZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkp
OwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVu
ZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdl
dCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJm
YWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQ
YXNzID0gZnJhbWUucmVuZGVyUGFzc2VzWzBdLmdldCgpOworICAgICAgICBFWFBFQ1RfRVEodGFy
Z2V0UGFzcy0+aWQoKSwgcXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJV
RSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAg
ICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+
ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjc5LDcgKzI2OTEsOSBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXAp
CiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
LnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBD
Q1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdR
dWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250
ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1l
LnNraXBwZWRQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVYUEVDVF9FUSh0YXJnZXRQYXNzLT5p
ZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQ
YXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycyhmcmFtZSk7CkBAIC0yNjk5LDcgKzI3MTMsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAKICAgICAg
ICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sx
XS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5k
ZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShx
dWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwor
ICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbMF0u
Z2V0KCk7CisgICAgICAgIEVYUEVDVF9FUSh0YXJnZXRQYXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQ
YXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2Uo
KS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMo
ZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAg
LTI3MjUsMTAgKzI3NDEsMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJm
YWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0Ry
YXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0t
Pm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRp
Y19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFk
TGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3Mo
KS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVy
UGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1swXS5nZXQoKTsKKyAgICAgICAg
RVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFu
Z2VkKCkpOwogCiAgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgICAgICBF
WFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3MoKS0+aWQoKSkpOworICAgICAgICBF
WFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsKIAogICAgICAgICBteUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CkBAIC0yNzYzLDcgKzI3ODEsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAKICAgICAgICAg
RVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+
cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFk
KiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQ
YXNzZXNbMF0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UocXVh
ZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAg
ICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUuc2tpcHBlZFBhc3Nlc1swXS5n
ZXQoKTsKKyAgICAgICAgRVhQRUNUX0VRKHRhcmdldFBhc3MtPmlkKCksIHF1YWQtPnJlbmRlclBh
c3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2Uo
KS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMo
ZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAg
LTI4MDQsNyArMjgyNCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFj
ZVRleHR1cmVDYWNoaW5nTWVtb3J5TGltaXQpCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1
YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0
ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nh
c3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0
KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCktPnRh
cmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3Mq
IHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVYUEVD
VF9FUSh0YXJnZXRQYXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkp
OwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI4MzcsNyArMjg1OSw5IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTWVtb3J5
TGltaXQpCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFk
TGlzdCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNz
LCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFz
c0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgp
LT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9
IGZyYW1lLnNraXBwZWRQYXNzZXNbMF0uZ2V0KCk7CisgICAgICAgIEVYUEVDVF9FUSh0YXJnZXRQ
YXNzLT5pZCgpLCBxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0
YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAg
ICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlk
RHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yODgwLDEwICsyOTA0LDggQEAgc3RydWN0IFJlbmRl
clBhc3NDYWNoZUVudHJ5IHsKIAogc3RydWN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIHsKICAgICBzdGQ6Om1hcDxjaGFy
LCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4gcmVuZGVyUGFzc0NhY2hlOwotICAgIHN0ZDo6bWFwPGNv
bnN0IENDUmVuZGVyUGFzcyosIGNoYXI+IHJlbmRlclBhc3NJZDsKICAgICBWZWN0b3I8T3duUHRy
PENDUmVuZGVyU3VyZmFjZT4gPiByZW5kZXJTdXJmYWNlU3RvcmU7CiAgICAgVmVjdG9yPE93blB0
cjxDQ0xheWVySW1wbD4gPiBsYXllclN0b3JlOwotICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gc2hhcmVkUXVhZFN0YXRlOwogfTsKIAogY2xhc3MgQ0NUZXN0UmVuZGVyUGFzczogcHVibGlj
IENDUmVuZGVyUGFzcyB7CkBAIC0yOTQzLDE3ICsyOTY1LDE5IEBAIHN0YXRpYyBQYXNzT3duUHRy
PENDUmVuZGVyUGFzcz4gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKFJlbmRlclBhc3NSZW1vdmFsVGVz
dERhdGEmCiAKIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBj
aGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgQ0NU
ZXN0UmVuZGVyZXIqIHJlbmRlcmVyKQogeworICAgIHN0ZDo6bWFwPGNoYXIsIFJlbmRlclBhc3ND
YWNoZUVudHJ5PiByZW5kZXJQYXNzQ2FjaGU7CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiBzaGFyZWRRdWFkU3RhdGU7CisKICAgICByZW5kZXJlci0+Y2xlYXJDYWNoZWRUZXh0dXJlcygp
OwogCiAgICAgLy8gT25lIHNoYXJlZCBzdGF0ZSBmb3IgYWxsIHF1YWRzIC0gd2UgZG9uJ3QgbmVl
ZCB0aGUgY29ycmVjdCBkZXRhaWxzCi0gICAgdGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlID0gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBJbnRSZWN0
KCksIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBzaGFyZWRRdWFkU3RhdGUgPSBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEludFJlY3QoKSwg
SW50UmVjdCgpLCAxLjAsIHRydWUpOwogCiAgICAgY29uc3QgY2hhciogY3VycmVudENoYXIgPSB0
ZXN0U2NyaXB0OwogCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MKICAgICBjaGFyIHJvb3RS
ZW5kZXJQYXNzSWQgPSB0ZXN0U2NyaXB0WzBdOwogICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJv
b3RSZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCByb290UmVuZGVy
UGFzc0lkKTsKLSAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1Jl
bmRlclBhc3MqLCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJlbmRlclBhc3NJZCkp
OwogICAgIHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJl
bmRlclBhc3NDYWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRy
eShyb290UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CiAgICAgd2hpbGUgKCpjdXJyZW50Q2hhcikg
ewogICAgICAgICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFyWzBdOwpAQCAtMjk3MSw3
ICsyOTk1LDcgQEAgc3RhdGljIHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0
IGNoYXIqIHRlc3RTY3JpcHQsIFJlbmRlclBhc3NSZW1vdmEKICAgICAgICAgd2hpbGUgKCpjdXJy
ZW50Q2hhciAmJiAqY3VycmVudENoYXIgIT0gJ1xuJykgewogICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhciA9PSAncycpIHsKICAgICAgICAgICAgICAgICAvLyBTb2xpZCBjb2xvciBkcmF3IHF1
YWQKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCA9IENDU29saWRDb2xv
ckRyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBJbnRSZWN0
KDAsIDAsIDEwLCAxMCksIFNLX0NvbG9yV0hJVEUpOworICAgICAgICAgICAgICAgIE93blB0cjxD
Q0RyYXdRdWFkPiBxdWFkID0gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFk
U3RhdGUuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAsIDEwKSwgU0tfQ29sb3JXSElURSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFz
cyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgICAgICBjdXJyZW50Q2hhcisrOwpAQCAtMzAwMCwyNSArMzAyNCwyMiBAQCBzdGF0aWMg
dm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwg
UmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXIrKzsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBDQ1JlbmRlclBhc3MqIHJlZlJl
bmRlclBhc3NQdHI7Ci0KICAgICAgICAgICAgICAgICBpZiAodGVzdERhdGEucmVuZGVyUGFzc0Nh
Y2hlLmZpbmQobmV3UmVuZGVyUGFzc0lkKSA9PSB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuZW5k
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1RleHR1cmUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJ
ZChuZXdSZW5kZXJQYXNzSWQpOwogCi0gICAgICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRl
clBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEsIG5l
d1JlbmRlclBhc3NJZCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQdHIgPSBy
ZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQ
YXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihyZWZSZW5kZXJQYXNz
LmdldCgpLCBuZXdSZW5kZXJQYXNzSWQpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdERhdGEu
cmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50
cnk+KG5ld1JlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0NhY2hlRW50cnkocmVmUmVuZGVyUGFzcy5y
ZWxlYXNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJlZlJlbmRlclBhc3NQdHIgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGVbbmV3UmVuZGVyUGFz
c0lkXS5yZW5kZXJQYXNzOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNz
PiByZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCBuZXdSZW5kZXJQ
YXNzSWQpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXNCeUlkLmFk
ZChyZW5kZXJQYXNzLT5pZCgpLCByZW5kZXJQYXNzLmdldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVy
UGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0NhY2hlRW50cnkocmVu
ZGVyUGFzcy5yZWxlYXNlKCkpKSk7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBxdWFkUmVjdCA9IEludFJlY3QoMCwgMCwgMSwgMSk7CiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBjb250ZW50c0NoYW5nZWRSZWN0ID0gY29udGVudHNDaGFuZ2VkID8gcXVhZFJl
Y3QgOiBJbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdR
dWFkPiBxdWFkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRR
dWFkU3RhdGUuZ2V0KCksIHF1YWRSZWN0LCByZWZSZW5kZXJQYXNzUHRyLCBpc1JlcGxpY2EsIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zKCksIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRS
ZWN0KTsKKyAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQg
PSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVh
ZFJlY3QsIG5ld1JlbmRlclBhc3NJZCwgaXNSZXBsaWNhLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMoKSwgMSwgY29udGVudHNDaGFuZ2VkUmVjdCk7CiAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFzcyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBl
bmRRdWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAg
ICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXNCeUlkLmFkZChyZW5kZXJQYXNzLT5pZCgpLCByZW5kZXJQ
YXNzLmdldCgpKTsKICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc2VzLmluc2VydCgwLCByZW5k
ZXJQYXNzLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAg
ICBjdXJyZW50Q2hhcisrOwpAQCAtMzAzMCw4ICszMDUxLDcgQEAgdm9pZCBkdW1wUmVuZGVyUGFz
c1Rlc3REYXRhKGNvbnN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFy
KiBidWYKICAgICBjaGFyKiBwb3MgPSBidWZmZXI7CiAgICAgZm9yIChDQ1JlbmRlclBhc3NMaXN0
Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0ID0gdGVzdERhdGEucmVuZGVyUGFzc2VzLnJiZWdp
bigpOyBpdCAhPSB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMucmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IENDUmVuZGVyUGFzcyogY3VycmVudFBhc3MgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIGNoYXIgcGFz
c0lkID0gdGVzdERhdGEucmVuZGVyUGFzc0lkLmZpbmQoY3VycmVudFBhc3MpLT5zZWNvbmQ7Ci0g
ICAgICAgICpwb3MgPSBwYXNzSWQ7CisgICAgICAgICpwb3MgPSBjdXJyZW50UGFzcy0+aWQoKTsK
ICAgICAgICAgcG9zKys7CiAKICAgICAgICAgQ0NRdWFkTGlzdDo6Y29uc3RfaXRlcmF0b3IgcXVh
ZExpc3RJdGVyYXRvciA9IGN1cnJlbnRQYXNzLT5xdWFkTGlzdCgpLmJlZ2luKCk7CkBAIC0zMDQy
LDE0ICszMDYyLDEwIEBAIHZvaWQgZHVtcFJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBSZW5kZXJQ
YXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgY2hhciogYnVmCiAgICAgICAgICAgICAgICAg
KnBvcyA9ICdzJzsKICAgICAgICAgICAgICAgICBwb3MrKzsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzczogewotICAgICAgICAg
ICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiByZW5kZXJQYXNzRHJhd1F1YWQgPSBzdGF0aWNf
Y2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgICAgICAg
ICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlZlBhc3MgPSByZW5kZXJQYXNzRHJhd1F1YWQtPnJlbmRl
clBhc3MoKTsKLSAgICAgICAgICAgICAgICBjaGFyIHJlZlBhc3NJZCA9IHRlc3REYXRhLnJlbmRl
clBhc3NJZC5maW5kKHJlZlBhc3MpLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgKnBvcyA9IHJl
ZlBhc3NJZDsKKyAgICAgICAgICAgIGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzczoKKyAgICAg
ICAgICAgICAgICAqcG9zID0gY3VycmVudFF1YWQtPnRvUmVuZGVyUGFzc0RyYXdRdWFkKCktPnJl
bmRlclBhc3NJZCgpOwogICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAqcG9zID0gJ3gnOwogICAgICAgICAgICAgICAgIHBvcysrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152010</attachid>
            <date>2012-07-12 11:31:38 -0700</date>
            <delta_ts>2012-07-12 14:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91023-20120712143137.patch</filename>
            <type>text/plain</type>
            <size>37813</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhNzQwMDIwMzhjMzM0
MmZiMzZhYjU3YWNhMTlmOWJjNDQ3ZmNkNC4uYjU5ZTViYjM1OWNkZGM1ZDA2NjVhNjQ3NWVlODdh
ZDJlOTQ3MTkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVt
b3ZlIHRoZSBSZW5kZXJQYXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlcyB0aGUgUmVu
ZGVyUGFzcyBwb2ludGVyIGFuZCBrZWVwcyBvbmx5IGFuIGludGVnZXIgaWQgaW4gdGhlCisgICAg
ICAgIHF1YWQgdG8gcmVmZXIgYmFjayB0byB0aGUgUmVuZGVyUGFzcyB0aGUgcXVhZCByZWFkcyBm
cm9tLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEZyYW1lRGF0YSk6Cisg
ICAgICAgIChDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKEN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorCiAyMDEyLTA3LTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCB0cnkgY3JlYXRlIGEg
c2Vjb25kIFJlbmRlclN1cmZhY2UgZm9yIGl0c2VsZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBjMGViM2JlMjE1ZTIxNGRmNjU2NTdkZjE1MDk2OTkwZjg0YTgyYmJiLi5hODFlYzFjNGNi
OTliMzg0NzA4YjI2OGY3NTZkMjY2OTFhYTVhNWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRoZSBSZW5kZXJQYXNzIHBv
aW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6
CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IHRyeSBjcmVhdGUgYSBz
ZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCBkY2FkOWYwMGYyZGM0ZWUzZDgwZmI3MzQ3MWFlNzljMzFiZTYzYTUw
Li5mN2U3M2M5ZTc4YWFmNjgyNWM5ZTQ5YTAxZTY0NWQ2NzFhZjFjNDAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29u
c3QgQ0NSZW5kZXJQYQogewogICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBw
YXNzZXNJbkZyYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQo
KSk7CisgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ld
LT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CiAKICAgICBWZWN0b3I8aW50PiBw
YXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAppbmRleCA3OGU3MDkxNGRhMTI4YTdkODI2MGU1MGQzZTliMzBiNTg5MmM4
ZjQzLi5mYjlkMDc0MmU2MDI3ZDJjN2VhODk0ZjQ2ZTVhZjI3MTQyMzg4Y2Q5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjk1LDEyICsyOTUsMTEgQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBm
cmFtZSkKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9ICgqZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdClbc3VyZmFjZUluZGV4XTsKICAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB1bmlxdWUgYWNyb3NzIGFsbCBDQ0xh
eWVyVHJlZUhvc3RJbXBscy4KLSAgICAgICAgaW50IGdsb2JhbFJlbmRlclBhc3NJZCA9IHJlbmRl
clN1cmZhY2VMYXllci0+aWQoKTsKLQotICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNz
ID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSwgZ2xvYmFsUmVuZGVyUGFzc0lk
KTsKKyAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsK
KyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KHJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7CiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFk
ZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKLSAgICAgICAgZnJhbWUucmVuZGVyUGFzc2Vz
LmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlcy5hcHBl
bmQocGFzcy5nZXQoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHJlbmRl
clBhc3NJZCwgcGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIGJvb2wgcmVjb3JkTWV0cmlj
c0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3
aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgpAQCAtNDA2LDE5ICs0MDUsMjYgQEAgSW50U2l6ZSBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCi0v
LyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVj
dXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0
IENDUmVuZGVyUGFzcyogZmlyc3RUb1JlbW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBh
c3NlcykKK3N0YXRpYyBpbmxpbmUgQ0NSZW5kZXJQYXNzKiBmaW5kUmVuZGVyUGFzc0J5SWQoaW50
IHJlbmRlclBhc3NJZCwgY29uc3QgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFt
ZSkKIHsKLSAgICBzaXplX3QgcmVtb3ZlSW5kZXggPSBwYXNzZXMuZmluZChmaXJzdFRvUmVtb3Zl
KTsKKyAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0VG9SZW1vdmUg
PSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmZpbmQocmVuZGVyUGFzc0lkKTsKKyAgICBBU1NFUlQo
aXRUb1JlbW92ZSAhPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmVuZCgpKTsKKyAgICByZXR1cm4g
aXRUb1JlbW92ZS0+c2Vjb25kLmdldCgpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZW5kZXJQ
YXNzZXNSZWN1cnNpdmUoaW50IHJlbW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhJiBmcmFtZSkKK3sKKyAgICBDQ1JlbmRlclBhc3MqIHJlbW92ZVJlbmRlclBh
c3MgPSBmaW5kUmVuZGVyUGFzc0J5SWQocmVtb3ZlUmVuZGVyUGFzc0lkLCBmcmFtZSk7CisgICAg
c2l6ZV90IHJlbW92ZUluZGV4ID0gZnJhbWUucmVuZGVyUGFzc2VzLmZpbmQocmVtb3ZlUmVuZGVy
UGFzcyk7CiAKICAgICAvLyBUaGUgcGFzcyB3YXMgYWxyZWFkeSByZW1vdmVkIGJ5IGFub3RoZXIg
cXVhZCAtIHByb2JhYmx5IHRoZSBvcmlnaW5hbCwgYW5kIHdlIGFyZSB0aGUgcmVwbGljYS4KICAg
ICBpZiAocmVtb3ZlSW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93
blB0cjxDQ1JlbmRlclBhc3M+IHJlbW92ZWRQYXNzID0gcGFzc2VzW3JlbW92ZUluZGV4XS5yZWxl
YXNlKCk7Ci0gICAgcGFzc2VzLnJlbW92ZShyZW1vdmVJbmRleCk7CisgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiByZW1vdmVkUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tyZW1vdmVJbmRleF07Cisg
ICAgZnJhbWUucmVuZGVyUGFzc2VzLnJlbW92ZShyZW1vdmVJbmRleCk7CiAKLSAgICAvLyBOb3cg
Zm9sbG93IHVwIGZvciBhbGwgUmVuZGVyUGFzcyBxdWFkcyBhbmQgcmVtb3ZlIHRoZWlyIHJlbmRl
ciBwYXNzZXMgcmVjdXJzaXZlbHkuCisgICAgLy8gTm93IGZvbGxvdyB1cCBmb3IgYWxsIFJlbmRl
clBhc3MgcXVhZHMgYW5kIHJlbW92ZSB0aGVpciBSZW5kZXJQYXNzZXMgcmVjdXJzaXZlbHkuCiAg
ICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW1vdmVkUGFzcy0+cXVhZExpc3QoKTsK
ICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRv
ciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsKICAgICBmb3IgKDsgcXVhZExpc3RJdGVy
YXRvciAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK3F1YWRMaXN0SXRlcmF0b3IpIHsK
QEAgLTQyNiwzNiArNDMyLDMzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVu
ZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICAgICAgaWYg
KGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVy
UGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFk
KTsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBuZXh0UmVuZGVyUGFzcyA9IHJlbmRlclBh
c3NRdWFkLT5yZW5kZXJQYXNzKCk7Ci0KLSAgICAgICAgLy8gT3VyIHNlYXJjaCBpcyBub3cgbGlt
aXRlZCB1cCB0byB0aGUgcGFzcyB0aGF0IHdlIGp1c3QgcmVtb3ZlZC4KLSAgICAgICAgLy8gU3Vi
c3RpdHV0ZSByZW1vdmVJbmRleCBmb3IgYm90dG9tUGFzcyBub3cuCi0gICAgICAgIHJlbW92ZVJl
bmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNzZXMsIHJlbW92ZUluZGV4LCBuZXh0UmVuZGVyUGFzcywg
c2tpcHBlZFBhc3Nlcyk7CisgICAgICAgIGludCBuZXh0UmVtb3ZlUmVuZGVyUGFzc0lkID0gY3Vy
cmVudFF1YWQtPnRvUmVuZGVyUGFzc0RyYXdRdWFkKCktPnJlbmRlclBhc3NJZCgpOworICAgICAg
ICByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUobmV4dFJlbW92ZVJlbmRlclBhc3NJZCwgZnJh
bWUpOwogICAgIH0KLSAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVkUGFzcy5yZWxlYXNl
KCkpOworCiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBh
c3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmIHF1YWQpIGNvbnN0Citib29sIEND
TGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmIHF1YWQsIGNv
bnN0IEZyYW1lRGF0YSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHF1YWQuY29udGVudHNDaGFuZ2Vk
U2luY2VMYXN0RnJhbWUoKS5pc0VtcHR5KCkgJiYgbV9yZW5kZXJlci5oYXZlQ2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQucmVuZGVyUGFzc0lkKCkpOwogfQogCi1ib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkczo6c2hvdWxkUmVtb3Zl
UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiBwYXNzTGlzdCwgY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQmIHF1YWQpIGNvbnN0Citib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OkN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCwgY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkgY29uc3QK
IHsKLSAgICBzaXplX3QgcGFzc0luZGV4ID0gcGFzc0xpc3QuZmluZChxdWFkLnJlbmRlclBhc3Mo
KSk7CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzID0gZmluZFJlbmRlclBhc3NC
eUlkKHF1YWQucmVuZGVyUGFzc0lkKCksIGZyYW1lKTsKKyAgICBzaXplX3QgcGFzc0luZGV4ID0g
ZnJhbWUucmVuZGVyUGFzc2VzLmZpbmQocmVuZGVyUGFzcyk7CiAgICAgQVNTRVJUKHBhc3NJbmRl
eCAhPSBub3RGb3VuZCk7CiAKICAgICAvLyBJZiBhbnkgcXVhZCBvciBSZW5kZXJQYXNzIGRyYXdz
IGludG8gdGhpcyBSZW5kZXJQYXNzLCB0aGVuIGtlZXAgaXQuCi0gICAgY29uc3QgQ0NRdWFkTGlz
dCYgcXVhZExpc3QgPSBwYXNzTGlzdFtwYXNzSW5kZXhdLT5xdWFkTGlzdCgpOworICAgIGNvbnN0
IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gZnJhbWUucmVuZGVyUGFzc2VzW3Bhc3NJbmRleF0tPnF1
YWRMaXN0KCk7CiAgICAgZm9yIChDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3Ig
cXVhZExpc3RJdGVyYXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgcXVhZExpc3RJ
dGVyYXRvciAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK3F1YWRMaXN0SXRlcmF0b3Ip
IHsKICAgICAgICAgQ0NEcmF3UXVhZCogY3VycmVudFF1YWQgPSBxdWFkTGlzdEl0ZXJhdG9yLT5n
ZXQoKTsKIAogICAgICAgICBpZiAoY3VycmVudFF1YWQtPm1hdGVyaWFsKCkgIT0gQ0NEcmF3UXVh
ZDo6UmVuZGVyUGFzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBjb25z
dCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZEluUGFzcyA9IHN0YXRpY19jYXN0PENDUmVuZGVy
UGFzc0RyYXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICBpZiAocGFzc0xpc3QuY29udGFp
bnMocXVhZEluUGFzcy0+cmVuZGVyUGFzcygpKSkKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNz
KiBjb250cmlidXRpbmdQYXNzID0gZmluZFJlbmRlclBhc3NCeUlkKGN1cnJlbnRRdWFkLT50b1Jl
bmRlclBhc3NEcmF3UXVhZCgpLT5yZW5kZXJQYXNzSWQoKSwgZnJhbWUpOworICAgICAgICBpZiAo
ZnJhbWUucmVuZGVyUGFzc2VzLmNvbnRhaW5zKGNvbnRyaWJ1dGluZ1Bhc3MpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3MCw3ICs0NzMs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJQYXNzQ3VsbGVyPgogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpyZW1vdmVSZW5kZXJQYXNzZXMoUmVuZGVyUGFzc0N1bGxlciBjdWxsZXIsIEZy
YW1lRGF0YSYgZnJhbWUpCiB7CiAgICAgZm9yIChzaXplX3QgaXQgPSBjdWxsZXIucmVuZGVyUGFz
c0xpc3RCZWdpbihmcmFtZS5yZW5kZXJQYXNzZXMpOyBpdCAhPSBjdWxsZXIucmVuZGVyUGFzc0xp
c3RFbmQoZnJhbWUucmVuZGVyUGFzc2VzKTsgaXQgPSBjdWxsZXIucmVuZGVyUGFzc0xpc3ROZXh0
KGl0KSkgewotICAgICAgICBDQ1JlbmRlclBhc3MqIGN1cnJlbnRQYXNzID0gZnJhbWUucmVuZGVy
UGFzc2VzW2l0XS5nZXQoKTsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFz
cyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpdF07CiAgICAgICAgIGNvbnN0IENDUXVhZExpc3QmIHF1
YWRMaXN0ID0gY3VycmVudFBhc3MtPnF1YWRMaXN0KCk7CiAgICAgICAgIENDUXVhZExpc3Q6OmNv
bnN0QmFja1RvRnJvbnRJdGVyYXRvciBxdWFkTGlzdEl0ZXJhdG9yID0gcXVhZExpc3QuYmFja1Rv
RnJvbnRCZWdpbigpOwogCkBAIC00ODEsNyArNDg0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpyZW1vdmVSZW5kZXJQYXNzZXMoUmVuZGVyUGFzc0N1bGxlciBjdWxsZXIsIEZyYW1lRGF0
YSYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQqIHJlbmRlclBhc3NRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1
YWQqPihjdXJyZW50UXVhZCk7Ci0gICAgICAgICAgICBpZiAoIWN1bGxlci5zaG91bGRSZW1vdmVS
ZW5kZXJQYXNzKGZyYW1lLnJlbmRlclBhc3NlcywgKnJlbmRlclBhc3NRdWFkKSkKKyAgICAgICAg
ICAgIGlmICghY3VsbGVyLnNob3VsZFJlbW92ZVJlbmRlclBhc3MoKnJlbmRlclBhc3NRdWFkLCBm
cmFtZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8vIFdlIGFy
ZSBjaGFuZ2luZyB0aGUgdmVjdG9yIGluIHRoZSBtaWRkbGUgb2YgaXRlcmF0aW9uLiBCZWNhdXNl
IHdlCkBAIC00OTAsNyArNDkzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVS
ZW5kZXJQYXNzZXMoUmVuZGVyUGFzc0N1bGxlciBjdWxsZXIsIEZyYW1lRGF0YSYKICAgICAgICAg
ICAgIC8vIGNoYW5nZS4gU28sIGNhcHR1cmUgdGhlIGl0ZXJhdG9yIHBvc2l0aW9uIGZyb20gdGhl
IGVuZCBvZiB0aGUKICAgICAgICAgICAgIC8vIGxpc3QsIGFuZCByZXN0b3JlIGl0IGFmdGVyIHRo
ZSBjaGFuZ2UuCiAgICAgICAgICAgICBpbnQgcG9zaXRpb25Gcm9tRW5kID0gZnJhbWUucmVuZGVy
UGFzc2VzLnNpemUoKSAtIGl0OwotICAgICAgICAgICAgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJz
aXZlKGZyYW1lLnJlbmRlclBhc3NlcywgaXQsIHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCks
IGZyYW1lLnNraXBwZWRQYXNzZXMpOworICAgICAgICAgICAgcmVtb3ZlUmVuZGVyUGFzc2VzUmVj
dXJzaXZlKHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzSWQoKSwgZnJhbWUpOwogICAgICAgICAg
ICAgaXQgPSBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpIC0gcG9zaXRpb25Gcm9tRW5kOwogICAg
ICAgICAgICAgQVNTRVJUKGl0ID49IDApOwogICAgICAgICB9CkBAIC01MDQsNiArNTA3LDcgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUp
CiAKICAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gJm1fcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICBmcmFtZS5yZW5kZXJQYXNzZXMuY2xlYXIoKTsKKyAgICBmcmFtZS5yZW5k
ZXJQYXNzZXNCeUlkLmNsZWFyKCk7CiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdC0+
Y2xlYXIoKTsKICAgICBmcmFtZS53aWxsRHJhd0xheWVycy5jbGVhcigpOwogCkBAIC01NDIsMTMg
KzU0NiwxMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJh
bWVEYXRhJiBmcmFtZSkKICAgICAvLyBSZW5kZXJXaWRnZXQuCiAKICAgICAvLyBUaGUgcm9vdCBS
ZW5kZXJQYXNzIGlzIHRoZSBsYXN0IG9uZSB0byBiZSBkcmF3bi4KLSAgICBDQ1JlbmRlclBhc3Mq
IHJvb3RSZW5kZXJQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzLmxhc3QoKS5nZXQoKTsKKyAgICBj
b25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzLmxh
c3QoKTsKIAogICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVudFRp
bWUoKSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZShyb290UmVuZGVy
UGFzcyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSBmcmFtZS5y
ZW5kZXJQYXNzZXNbaV0uZ2V0KCk7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVy
UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpXTsKIAogICAgICAgICBGbG9hdFJlY3Qgcm9vdFNj
aXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+
Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UobV9yb290U2Npc3NvclJlY3Qp
OwogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHJlbmRlclBhc3MsIHJv
b3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCmluZGV4IDQ5ZjJmYzYyYjk3MGQwNGNlYTQ4NmQzMjYxOWZhN2Q2OGU5ZDg4OWQu
Ljc1M2FhMzg0YTNkMDA3NmVhMWYwYTk4YzE3NGE0YjU3NWE3MDc5MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0
cnVjdCBGcmFtZURhdGEgewogICAgICAgICBWZWN0b3I8SW50UmVjdD4gb2NjbHVkaW5nU2NyZWVu
U3BhY2VSZWN0czsKICAgICAgICAgQ0NSZW5kZXJQYXNzTGlzdCByZW5kZXJQYXNzZXM7Ci0gICAg
ICAgIENDUmVuZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKKyAgICAgICAgQ0NSZW5kZXJQYXNz
SWRIYXNoTWFwIHJlbmRlclBhc3Nlc0J5SWQ7CiAgICAgICAgIENDTGF5ZXJMaXN0KiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwogICAgICAgICBDQ0xheWVyTGlzdCB3aWxsRHJhd0xheWVyczsKICAg
ICB9OwpAQCAtMTgwLDcgKzE4MCw3IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEN1bGxSZW5kZXJQ
YXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBzaG91
bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCYpIGNvbnN0OworICAgICAgICBib29sIHNob3VsZFJlbW92ZVJlbmRlclBh
c3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmLCBjb25zdCBGcmFtZURhdGEmKSBjb25zdDsK
IAogICAgICAgICAvLyBJdGVyYXRlcyBmcm9tIHRoZSByb290IGZpcnN0LCBpbiBvcmRlciB0byBy
ZW1vdmUgdGhlIHN1cmZhY2VzIGNsb3Nlc3QKICAgICAgICAgLy8gdG8gdGhlIHJvb3Qgd2l0aCBj
YWNoZWQgdGV4dHVyZXMsIGFuZCBhbGwgc3VyZmFjZXMgdGhhdCBkcmF3IGludG8KQEAgLTE5Niw3
ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVh
ZHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYpIGNvbnN0
OworICAgICAgICBib29sIHNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQmLCBjb25zdCBGcmFtZURhdGEmKSBjb25zdDsKIAogICAgICAgICAvLyBJdGVyYXRl
cyBpbiBkcmF3IG9yZGVyLCBzbyB0aGF0IHdoZW4gYSBzdXJmYWNlIGlzIHJlbW92ZWQsIGFuZCBp
dHMKICAgICAgICAgLy8gdGFyZ2V0IGJlY29tZXMgZW1wdHksIHRoZW4gaXRzIHRhcmdldCBjYW4g
YmUgcmVtb3ZlZCBhbHNvLgpAQCAtMjQ0LDggKzI0NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRCYWNrZ3JvdW5kVGlja2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6
ZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZl
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0IENDUmVu
ZGVyUGFzcyogZmlyc3RUb1JlbW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nlcyk7
Ci0KICAgICB2b2lkIHNlbmREaWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwog
ICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlcygpOwogICAgIGJvb2wgZW5zdXJlUmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggOTBhNmVlNjBh
ZDc1ZjY1YTdjNTFmMDE5NzgzMDU1NGQ2ZTM1ZWFmNi4uYjExMTAwYWYzNmNkNGNiMGIwNzNjMGRj
OTQ1ZmQ1Yzc2ZjFjZTBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC03Miw3ICs3
Miw3IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IENDCiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgp
OwogICAgIGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0gICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMo
cXVhZEN1bGxlciwgc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIGNvbnRyaWJ1dGlu
Z1JlbmRlclBhc3MpOworICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNoYXJl
ZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBjb250cmlidXRpbmdSZW5kZXJQYXNzLT5pZCgp
KTsKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxl
YXNlKCkpOwogCiAgICAgaWYgKCFzdXJmYWNlLT5oYXNSZXBsaWNhKCkpCkBAIC04MSw3ICs4MSw3
IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IENDCiAgICAgLy8gQWRkIHJlcGxpY2EgYWZ0ZXIgdGhl
IHN1cmZhY2Ugc28gdGhhdCBpdCBhcHBlYXJzIGJlbG93IHRoZSBzdXJmYWNlLgogICAgIE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcmVwbGljYVNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNy
ZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpc1JlcGxpY2EgPSB0cnVlOwotICAg
IHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUu
Z2V0KCksIGlzUmVwbGljYSwgY29udHJpYnV0aW5nUmVuZGVyUGFzcyk7CisgICAgc3VyZmFjZS0+
YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNS
ZXBsaWNhLCBjb250cmlidXRpbmdSZW5kZXJQYXNzLT5pZCgpKTsKICAgICBtX3NoYXJlZFF1YWRT
dGF0ZUxpc3QuYXBwZW5kKHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCA0N2FlMmY3NDdlOGRkMDdhNTRlYjBiMmM4ZTQ2MmFl
YjBhNTc4YWVlLi4yYTJmZGMwZDcxYmE4YTFkNDBiODNmZjgzMDE5NGZmMDBlNjUzOGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2tDb2xv
ci5oIgogI2luY2x1ZGUgImNjL0NDT2NjbHVzaW9uVHJhY2tlci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTgxLDcgKzgyLDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9oYXNUcmFu
c3BhcmVudEJhY2tncm91bmQ7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQ
YXNzPiA+IENDUmVuZGVyUGFzc0xpc3Q7Cit0eXBlZGVmIFZlY3RvcjxDQ1JlbmRlclBhc3MqPiBD
Q1JlbmRlclBhc3NMaXN0OwordHlwZWRlZiBIYXNoTWFwPGludCwgT3duUHRyPENDUmVuZGVyUGFz
cz4gPiBDQ1JlbmRlclBhc3NJZEhhc2hNYXA7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQuY3BwCmluZGV4IDA1NzU1YTYyOTQwY2U5NGU2OTUxOTY4ZTk1ODRjYTYw
MTZiM2Q2MDcuLmVmZTY1Yzg0YmFlMGRiMzY4MWQzMWEwYzk4YTM5YzU5MzZkMmU1MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzc0RyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKQEAgLTI3LDE5ICsyNywxNiBA
QAogCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaCIKIAotI2luY2x1ZGUgImNj
L0NDUmVuZGVyUGFzcy5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NS
ZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3Qs
IGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCitQYXNzT3duUHRyPEND
UmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJlbmRlclBh
c3MsIGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMs
IG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1
YWRSZWN0LCByZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywg
YmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFz
dEZyYW1lKSk7CiB9CiAKLUNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0
JiBxdWFkUmVjdCwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBib29sIGlzUmVwbGlj
YSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4
dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKK0ND
UmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50IHJl
bmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5k
RmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWUpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwg
Q0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCi0gICAgLCBtX3JlbmRlclBhc3MocmVu
ZGVyUGFzcykKLSAgICAsIG1fcmVuZGVyUGFzc0lkKHJlbmRlclBhc3MtPmlkKCkpCisgICAgLCBt
X3JlbmRlclBhc3NJZChyZW5kZXJQYXNzSWQpCiAgICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2Ep
CiAgICAgLCBtX2RyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSkKICAgICAsIG1fZmlsdGVycyhm
aWx0ZXJzKQpAQCAtNDcsNyArNDQsNyBAQCBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQ
YXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdAogICAgICwg
bV9tYXNrVGV4dHVyZUlkKG1hc2tUZXh0dXJlSWQpCiAgICAgLCBtX2NvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewotICAgIEFTU0VS
VChtX3JlbmRlclBhc3MpOworICAgIEFTU0VSVChtX3JlbmRlclBhc3NJZCA+IDApOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaAppbmRleCA2YTkwMDkwYjcxMmQx
NjMzMzExNGE0ZThiMGI2MGJiZjJlNzJjNTdiLi5lNzI3NTM4YzBmMDMxODVhNDY5MTM1ODYzYjVl
NTBiOGFjODZiZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKQEAg
LTM4LDkgKzM4LDggQEAgY2xhc3MgQ0NSZW5kZXJQYXNzOwogY2xhc3MgQ0NSZW5kZXJQYXNzRHJh
d1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVu
ZGVyUGFzc0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRl
clBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50
UmVjdCYsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRG
aWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0No
YW5nZWRTaW5jZUxhc3RGcmFtZSk7CiAKLSAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3MoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3M7IH0KICAgICBpbnQgcmVuZGVyUGFzc0lk
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJQYXNzSWQ7IH0KICAgICBib29sIGlzUmVwbGljYSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CiAgICAgdW5zaWduZWQgbWFza1RleHR1cmVJ
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQpAQCAtNTMsOSArNTIsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5k
RmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRlcnM7IH0KIAogcHJpdmF0
ZToKLSAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBDQ1JlbmRlclBhc3MqLCBib29sIGlzUmVwbGljYSwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBi
YWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYg
Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOworICAgIENDUmVuZGVyUGFzc0RyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGludCByZW5kZXJQYXNz
SWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNr
VGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk7
CiAKLSAgICBjb25zdCBDQ1JlbmRlclBhc3MqIG1fcmVuZGVyUGFzczsKICAgICBpbnQgbV9yZW5k
ZXJQYXNzSWQ7CiAgICAgYm9vbCBtX2lzUmVwbGljYTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwCmluZGV4IDdiZTM2OGNjZTg1ZmRlNzUwNDUxNWIwYmNiMDM5NGY4Mjk3MDg2NDEuLjhiZDQ2
YmYwMGJjYjRhNTIwYWY2ZWMzZTNlMWJjMjU2Y2M4OTMxYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmNwcApAQCAtMjAzLDcgKzIwMyw3IEBAIEZsb2F0UmVjdCBDQ1JlbmRlclN1cmZh
Y2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZsb2F0UmVj
CiAgICAgcmV0dXJuIENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlU2NyZWVu
U3BhY2VUcmFuc2Zvcm0sIHJvb3RTY2lzc29yUmVjdCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJm
YWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IENDUmVuZGVyUGFzcyog
cmVuZGVyUGFzcykKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxs
ZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sIGZv
clJlcGxpY2EsIGludCByZW5kZXJQYXNzSWQpCiB7CiAgICAgQVNTRVJUKCFmb3JSZXBsaWNhIHx8
IGhhc1JlcGxpY2EoKSk7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFj
ZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUq
IHNoYQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSBmb3JSZXBs
aWNhID8gbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA6IG1fZHJhd1RyYW5zZm9ybTsKICAgICBJbnRS
ZWN0IGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lID0gY29udGVudHNDaGFuZ2VkKCkgPyBt
X2NvbnRlbnRSZWN0IDogSW50UmVjdCgpOwogCi0gICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShD
Q1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3Qo
KSwgcmVuZGVyUGFzcywgZm9yUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycygpLCBiYWNr
Z3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RG
cmFtZSkpOworICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6
OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRlclBhc3NJZCwgZm9y
UmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBt
YXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDg5NGVhNWFlYTJlZmFlZTZiY2YwMTViMzgw
ZTAzMTIyMzM0YTlkNzIuLmIxZTY1YThmZTJlY2M0ZDZiYjdiOWE5NTJjZTc4OWRmZjhjMDc0YzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGlj
OgogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0
ZSgpIGNvbnN0OwogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVJlcGxp
Y2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFk
Q3VsbGVyJiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IENDUmVu
ZGVyUGFzcyopOworICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiwgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EsIGludCByZW5kZXJQYXNzSWQpOwogCiAgICAgRmxv
YXRSZWN0IGNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZsb2F0
UmVjdCYgcm9vdFNjaXNzb3JSZWN0KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAwM2M3
YmQ5NjlhMjYzZWNhMDMxYzM5NjRjMTIwYjNkOTgxMmM0NTJjLi4zMmRjNDEzMGRiM2M5OTQwNTRj
OWY0ODIxYzI1NjQwODVmMTNhYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMjUyMSw3ICsyNTIx
LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hp
bmcpCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJl
bmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVu
ZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQq
PihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHND
aGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5k
ZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAg
ICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBs
LT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI1NTMsNyArMjU1NCw4IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQogICAgICAgICBF
WFBFQ1RfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOwog
ICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFz
c2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1l
LnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2Vk
KCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNz
ZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0
YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAg
ICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlk
RHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNTczLDcgKzI1NzUsOCBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBF
Q1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFk
TGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1
YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nl
c1sxXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHF1YWQtPnJl
bmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAg
IENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1
YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGFyZ2V0UGFzcy0+dGFy
Z2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+
ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOwpAQCAtMjU5OSwxMCArMjYwMiwxMSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3
UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5t
YXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNf
Y2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExp
c3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCkt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBh
c3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQ
YXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNl
KCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZp
Y3RlZD8KLSAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+
aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChxdWFkLT5yZW5kZXJQYXNzKCktPmlk
KCkpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+
aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCh0YXJnZXRQYXNzLT5pZCgpKSk7CiAK
ICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdElt
cGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjYzNiw3ICsyNjQwLDggQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAKICAgICAg
ICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sw
XS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5k
ZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
cXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsK
KyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJ
ZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGFyZ2V0
UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlI
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdB
bGxMYXllcnMoZnJhbWUpOwpAQCAtMjY2OCw3ICsyNjczLDggQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAg
ICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3
UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVu
ZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
cXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsK
KyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJ
ZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQ
YXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycyhmcmFtZSk7CkBAIC0yNzAxLDcgKzI3MDcsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgICAg
IEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7
CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQ
YXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBh
c3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJh
bWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5n
ZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBh
c3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAg
ICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5k
aWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI3MjEsNyArMjcyOCw4IEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkK
IAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVy
UGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZy
YW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5n
ZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBh
c3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGFyZ2V0UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAg
ICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRp
ZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjc0NywxMCArMjc1NSwxMSBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXAp
CiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRl
clBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVy
UGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihm
cmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBF
Q1RfRkFMU0UocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hh
bmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVy
UGFzc2VzQnlJZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfRkFM
U0UodGFyZ2V0UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAg
ICAgICAgLy8gV2FzIG91ciBzdXJmYWNlIGV2aWN0ZWQ/Ci0gICAgICAgIEVYUEVDVF9GQUxTRSht
eUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQ
YXNzSWQocXVhZC0+cmVuZGVyUGFzcygpLT5pZCgpKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSht
eUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQ
YXNzSWQodGFyZ2V0UGFzcy0+aWQoKSkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXll
cnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
QEAgLTI3ODUsNyArMjc5NCw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3Vy
ZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NE
cmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBd
LT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0
aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVh
ZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNz
KCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRl
clBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5k
ZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJm
YWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5
ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7
CkBAIC0yODI2LDcgKzI4MzYsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1
cmZhY2VUZXh0dXJlQ2FjaGluZ01lbW9yeUxpbWl0KQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0Ry
YXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0t
Pm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRp
Y19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFk
TGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygp
LT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQ
YXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+cmVuZGVy
UGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNl
KCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBA
IC0yODU5LDcgKzI4NzAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZh
Y2VUZXh0dXJlQ2FjaGluZ01lbW9yeUxpbWl0KQogICAgICAgICBFWFBFQ1RfRVEoMVUsIGZyYW1l
LnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOwogICAgICAgICBFWFBFQ1RfRVEo
Q0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
WzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBz
dGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+
cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQ
YXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1Jl
bmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5y
ZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRT
dXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFt
ZSk7CkBAIC0yOTAyLDcgKzI5MTQsNiBAQCBzdHJ1Y3QgUmVuZGVyUGFzc0NhY2hlRW50cnkgewog
CiBzdHJ1Y3QgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpGcmFtZURhdGEgewogICAgIHN0ZDo6bWFwPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVu
dHJ5PiByZW5kZXJQYXNzQ2FjaGU7Ci0gICAgc3RkOjptYXA8Y29uc3QgQ0NSZW5kZXJQYXNzKiwg
Y2hhcj4gcmVuZGVyUGFzc0lkOwogICAgIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJTdXJmYWNlPiA+
IHJlbmRlclN1cmZhY2VTdG9yZTsKICAgICBWZWN0b3I8T3duUHRyPENDTGF5ZXJJbXBsPiA+IGxh
eWVyU3RvcmU7CiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGU7
CkBAIC0yOTc1LDcgKzI5ODYsNiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVz
dERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgIC8vIFBy
ZS1jcmVhdGUgcm9vdCBwYXNzCiAgICAgY2hhciByb290UmVuZGVyUGFzc0lkID0gdGVzdFNjcmlw
dFswXTsKICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByb290UmVuZGVyUGFzcyA9IGNyZWF0ZUR1
bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSwgcm9vdFJlbmRlclBhc3NJZCk7Ci0gICAgdGVzdERhdGEu
cmVuZGVyUGFzc0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQYXNzKiwgY2hhcj4ocm9vdFJl
bmRlclBhc3MuZ2V0KCksIHJvb3RSZW5kZXJQYXNzSWQpKTsKICAgICB0ZXN0RGF0YS5yZW5kZXJQ
YXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4ocm9v
dFJlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0NhY2hlRW50cnkocm9vdFJlbmRlclBhc3MucmVsZWFz
ZSgpKSkpOwogICAgIHdoaWxlICgqY3VycmVudENoYXIpIHsKICAgICAgICAgY2hhciByZW5kZXJQ
YXNzSWQgPSBjdXJyZW50Q2hhclswXTsKQEAgLTMwMjIsMjYgKzMwMzIsMjIgQEAgc3RhdGljIHZv
aWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3JpcHQsIFJl
bmRlclBhc3NSZW1vdmEKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyKys7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNzKiByZWZSZW5k
ZXJQYXNzUHRyOwotCiAgICAgICAgICAgICAgICAgaWYgKHRlc3REYXRhLnJlbmRlclBhc3NDYWNo
ZS5maW5kKG5ld1JlbmRlclBhc3NJZCkgPT0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmVuZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNUZXh0dXJlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXItPnNldEhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQo
bmV3UmVuZGVyUGFzc0lkKTsKIAotICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQ
YXNzPiByZWZSZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCBuZXdS
ZW5kZXJQYXNzSWQpOwotICAgICAgICAgICAgICAgICAgICByZWZSZW5kZXJQYXNzUHRyID0gcmVm
UmVuZGVyUGFzcy5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFz
c0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQYXNzKiwgY2hhcj4ocmVmUmVuZGVyUGFzcy5n
ZXQoKSwgbmV3UmVuZGVyUGFzc0lkKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3REYXRhLnJl
bmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5
PihuZXdSZW5kZXJQYXNzSWQsIFJlbmRlclBhc3NDYWNoZUVudHJ5KHJlZlJlbmRlclBhc3MucmVs
ZWFzZSgpKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBy
ZWZSZW5kZXJQYXNzUHRyID0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlW25ld1JlbmRlclBhc3NJ
ZF0ucmVuZGVyUGFzczsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4g
cmVuZGVyUGFzcyA9IGNyZWF0ZUR1bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSwgbmV3UmVuZGVyUGFz
c0lkKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2Vy
dChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwg
UmVuZGVyUGFzc0NhY2hlRW50cnkocmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CisgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgSW50UmVjdCBxdWFkUmVjdCA9IEludFJlY3QoMCwg
MCwgMSwgMSk7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBjb250ZW50c0NoYW5nZWRSZWN0ID0g
Y29udGVudHNDaGFuZ2VkID8gcXVhZFJlY3QgOiBJbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAg
T3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6
OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHF1YWRSZWN0LCByZWZSZW5k
ZXJQYXNzUHRyLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBPd25QdHI8Q0NS
ZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRl
c3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVhZFJlY3QsIG5ld1JlbmRlclBhc3NJZCwg
aXNSZXBsaWNhLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgMSwgY29u
dGVudHNDaGFuZ2VkUmVjdCk7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVu
ZGVyUGFzcyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFzZSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMu
aW5zZXJ0KDAsIHJlbmRlclBhc3MucmVsZWFzZSgpKTsKKyAgICAgICAgdGVzdERhdGEucmVuZGVy
UGFzc2VzLmluc2VydCgwLCByZW5kZXJQYXNzLmdldCgpKTsKKyAgICAgICAgdGVzdERhdGEucmVu
ZGVyUGFzc2VzQnlJZC5hZGQocmVuZGVyUGFzcy0+aWQoKSwgcmVuZGVyUGFzcy5yZWxlYXNlKCkp
OwogICAgICAgICBpZiAoKmN1cnJlbnRDaGFyKQogICAgICAgICAgICAgY3VycmVudENoYXIrKzsK
ICAgICB9CkBAIC0zMDUxLDkgKzMwNTcsOCBAQCB2b2lkIGR1bXBSZW5kZXJQYXNzVGVzdERhdGEo
Y29uc3QgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIqIGJ1Zgogewog
ICAgIGNoYXIqIHBvcyA9IGJ1ZmZlcjsKICAgICBmb3IgKENDUmVuZGVyUGFzc0xpc3Q6OmNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgaXQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMucmJlZ2luKCk7IGl0
ICE9IHRlc3REYXRhLnJlbmRlclBhc3Nlcy5yZW5kKCk7ICsraXQpIHsKLSAgICAgICAgQ0NSZW5k
ZXJQYXNzKiBjdXJyZW50UGFzcyA9IGl0LT5nZXQoKTsKLSAgICAgICAgY2hhciBwYXNzSWQgPSB0
ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChjdXJyZW50UGFzcyktPnNlY29uZDsKLSAgICAgICAg
KnBvcyA9IHBhc3NJZDsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9
ICppdDsKKyAgICAgICAgKnBvcyA9IGN1cnJlbnRQYXNzLT5pZCgpOwogICAgICAgICBwb3MrKzsK
IAogICAgICAgICBDQ1F1YWRMaXN0Ojpjb25zdF9pdGVyYXRvciBxdWFkTGlzdEl0ZXJhdG9yID0g
Y3VycmVudFBhc3MtPnF1YWRMaXN0KCkuYmVnaW4oKTsKQEAgLTMwNjQsMTQgKzMwNjksMTAgQEAg
dm9pZCBkdW1wUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERh
dGEmIHRlc3REYXRhLCBjaGFyKiBidWYKICAgICAgICAgICAgICAgICAqcG9zID0gJ3MnOwogICAg
ICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOiB7Ci0gICAgICAgICAgICAgICAgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqIHJlbmRlclBhc3NEcmF3UXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFz
c0RyYXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgICAgIGNvbnN0IENDUmVuZGVy
UGFzcyogcmVmUGFzcyA9IHJlbmRlclBhc3NEcmF3UXVhZC0+cmVuZGVyUGFzcygpOwotICAgICAg
ICAgICAgICAgIGNoYXIgcmVmUGFzc0lkID0gdGVzdERhdGEucmVuZGVyUGFzc0lkLmZpbmQocmVm
UGFzcyktPnNlY29uZDsKLSAgICAgICAgICAgICAgICAqcG9zID0gcmVmUGFzc0lkOworICAgICAg
ICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOgorICAgICAgICAgICAgICAgICpwb3Mg
PSBjdXJyZW50UXVhZC0+dG9SZW5kZXJQYXNzRHJhd1F1YWQoKS0+cmVuZGVyUGFzc0lkKCk7CiAg
ICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICpwb3MgPSAneCc7CiAg
ICAgICAgICAgICAgICAgcG9zKys7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152054</attachid>
            <date>2012-07-12 14:08:47 -0700</date>
            <delta_ts>2012-07-12 15:31:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91023-20120712170846.patch</filename>
            <type>text/plain</type>
            <size>38262</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA1MzEwMTE2NGM4MTkx
MDU0YTc1Y2QzNDQwYjMwYzRlY2YwOWQxNy4uNjkzODAxZTBlYTZkM2Q2NzdmNTI1ZTUzOGU3MTI2
Mzg0Mjg3YWNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVt
b3ZlIHRoZSBSZW5kZXJQYXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlcyB0aGUgUmVu
ZGVyUGFzcyBwb2ludGVyIGFuZCBrZWVwcyBvbmx5IGFuIGludGVnZXIgaWQgaW4gdGhlCisgICAg
ICAgIHF1YWQgdG8gcmVmZXIgYmFjayB0byB0aGUgUmVuZGVyUGFzcyB0aGUgcXVhZCByZWFkcyBm
cm9tLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEZyYW1lRGF0YSk6Cisg
ICAgICAgIChDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKEN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorCiAyMDEyLTA3LTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCB0cnkgY3JlYXRlIGEg
c2Vjb25kIFJlbmRlclN1cmZhY2UgZm9yIGl0c2VsZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBmZWFmYjQ4MGRkZjEwYjdmNzY5OGEwMDE3OWI0MjA5ZTk4Y2FhOGZlLi41ODgwMzlhNWQ2
MzUxZWYxMWRiYmZjYzNlZDA3YzM4Y2ZkMmFmZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRoZSBSZW5kZXJQYXNzIHBv
aW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6
CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IHRyeSBjcmVhdGUgYSBz
ZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCBlNzU5ZjVjOGU3Mzk5NzA3ZjZkZWUxMjhmYzgxNmRlMjVhMGY5N2M3
Li41YmQzYTY2ZjFkYWZlOTU2MjJiZjZiN2VhY2RkYTFkOGVkNzQzY2ViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29u
c3QgQ0NSZW5kZXJQYQogewogICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBw
YXNzZXNJbkZyYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQo
KSk7CisgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ld
LT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CiAKICAgICBWZWN0b3I8aW50PiBw
YXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAppbmRleCA3OGU3MDkxNGRhMTI4YTdkODI2MGU1MGQzZTliMzBiNTg5MmM4
ZjQzLi5kMjc0ZjUwY2QwMjVjM2ZmODdhMTZiMDYyMmU4ODY1Yjc0YWY3OTJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjk1LDEyICsyOTUsMTEgQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBm
cmFtZSkKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9ICgqZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdClbc3VyZmFjZUluZGV4XTsKICAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB1bmlxdWUgYWNyb3NzIGFsbCBDQ0xh
eWVyVHJlZUhvc3RJbXBscy4KLSAgICAgICAgaW50IGdsb2JhbFJlbmRlclBhc3NJZCA9IHJlbmRl
clN1cmZhY2VMYXllci0+aWQoKTsKLQotICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNz
ID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSwgZ2xvYmFsUmVuZGVyUGFzc0lk
KTsKKyAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsK
KyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KHJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7CiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFk
ZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKLSAgICAgICAgZnJhbWUucmVuZGVyUGFzc2Vz
LmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlcy5hcHBl
bmQocGFzcy5nZXQoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHJlbmRl
clBhc3NJZCwgcGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIGJvb2wgcmVjb3JkTWV0cmlj
c0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3
aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgpAQCAtNDA2LDE5ICs0MDUsMjYgQEAgSW50U2l6ZSBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCi0v
LyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVj
dXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0
IENDUmVuZGVyUGFzcyogZmlyc3RUb1JlbW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBh
c3NlcykKK3N0YXRpYyBpbmxpbmUgQ0NSZW5kZXJQYXNzKiBmaW5kUmVuZGVyUGFzc0J5SWQoaW50
IHJlbmRlclBhc3NJZCwgY29uc3QgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFt
ZSkKK3sKKyAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0VG9SZW1v
dmUgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmZpbmQocmVuZGVyUGFzc0lkKTsKKyAgICBBU1NF
UlQoaXRUb1JlbW92ZSAhPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmVuZCgpKTsKKyAgICByZXR1
cm4gaXRUb1JlbW92ZS0+c2Vjb25kLmdldCgpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZW5k
ZXJQYXNzZXNSZWN1cnNpdmUoaW50IHJlbW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0
SW1wbDo6RnJhbWVEYXRhJiBmcmFtZSkKIHsKLSAgICBzaXplX3QgcmVtb3ZlSW5kZXggPSBwYXNz
ZXMuZmluZChmaXJzdFRvUmVtb3ZlKTsKKyAgICBDQ1JlbmRlclBhc3MqIHJlbW92ZVJlbmRlclBh
c3MgPSBmaW5kUmVuZGVyUGFzc0J5SWQocmVtb3ZlUmVuZGVyUGFzc0lkLCBmcmFtZSk7CisgICAg
c2l6ZV90IHJlbW92ZUluZGV4ID0gZnJhbWUucmVuZGVyUGFzc2VzLmZpbmQocmVtb3ZlUmVuZGVy
UGFzcyk7CiAKICAgICAvLyBUaGUgcGFzcyB3YXMgYWxyZWFkeSByZW1vdmVkIGJ5IGFub3RoZXIg
cXVhZCAtIHByb2JhYmx5IHRoZSBvcmlnaW5hbCwgYW5kIHdlIGFyZSB0aGUgcmVwbGljYS4KICAg
ICBpZiAocmVtb3ZlSW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93
blB0cjxDQ1JlbmRlclBhc3M+IHJlbW92ZWRQYXNzID0gcGFzc2VzW3JlbW92ZUluZGV4XS5yZWxl
YXNlKCk7Ci0gICAgcGFzc2VzLnJlbW92ZShyZW1vdmVJbmRleCk7CisgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiByZW1vdmVkUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tyZW1vdmVJbmRleF07Cisg
ICAgZnJhbWUucmVuZGVyUGFzc2VzLnJlbW92ZShyZW1vdmVJbmRleCk7CiAKLSAgICAvLyBOb3cg
Zm9sbG93IHVwIGZvciBhbGwgUmVuZGVyUGFzcyBxdWFkcyBhbmQgcmVtb3ZlIHRoZWlyIHJlbmRl
ciBwYXNzZXMgcmVjdXJzaXZlbHkuCisgICAgLy8gTm93IGZvbGxvdyB1cCBmb3IgYWxsIFJlbmRl
clBhc3MgcXVhZHMgYW5kIHJlbW92ZSB0aGVpciBSZW5kZXJQYXNzZXMgcmVjdXJzaXZlbHkuCiAg
ICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW1vdmVkUGFzcy0+cXVhZExpc3QoKTsK
ICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRv
ciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsKICAgICBmb3IgKDsgcXVhZExpc3RJdGVy
YXRvciAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK3F1YWRMaXN0SXRlcmF0b3IpIHsK
QEAgLTQyNiwzNiArNDMyLDMyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVu
ZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICAgICAgaWYg
KGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVy
UGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFk
KTsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBuZXh0UmVuZGVyUGFzcyA9IHJlbmRlclBh
c3NRdWFkLT5yZW5kZXJQYXNzKCk7Ci0KLSAgICAgICAgLy8gT3VyIHNlYXJjaCBpcyBub3cgbGlt
aXRlZCB1cCB0byB0aGUgcGFzcyB0aGF0IHdlIGp1c3QgcmVtb3ZlZC4KLSAgICAgICAgLy8gU3Vi
c3RpdHV0ZSByZW1vdmVJbmRleCBmb3IgYm90dG9tUGFzcyBub3cuCi0gICAgICAgIHJlbW92ZVJl
bmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNzZXMsIHJlbW92ZUluZGV4LCBuZXh0UmVuZGVyUGFzcywg
c2tpcHBlZFBhc3Nlcyk7CisgICAgICAgIGludCBuZXh0UmVtb3ZlUmVuZGVyUGFzc0lkID0gQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChjdXJyZW50UXVhZCktPnJlbmRlclBhc3NJ
ZCgpOworICAgICAgICByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUobmV4dFJlbW92ZVJlbmRl
clBhc3NJZCwgZnJhbWUpOwogICAgIH0KLSAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVk
UGFzcy5yZWxlYXNlKCkpOwogfQogCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5k
ZXJQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXM6OnNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzTGlzdCYsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFkKSBjb25z
dAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRl
eHR1cmVzOjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFk
JiBxdWFkLCBjb25zdCBGcmFtZURhdGEmKSBjb25zdAogewogICAgIHJldHVybiBxdWFkLmNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKCkuaXNFbXB0eSgpICYmIG1fcmVuZGVyZXIuaGF2ZUNh
Y2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChxdWFkLnJlbmRlclBhc3NJZCgpKTsKIH0KIAot
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc0xpc3QsIGNv
bnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFkKSBjb25zdAorYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNob3VsZFJlbW92ZVJlbmRlclBh
c3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmIHF1YWQsIGNvbnN0IEZyYW1lRGF0YSYgZnJh
bWUpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHBhc3NJbmRleCA9IHBhc3NMaXN0LmZpbmQocXVhZC5y
ZW5kZXJQYXNzKCkpOworICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZpbmRS
ZW5kZXJQYXNzQnlJZChxdWFkLnJlbmRlclBhc3NJZCgpLCBmcmFtZSk7CisgICAgc2l6ZV90IHBh
c3NJbmRleCA9IGZyYW1lLnJlbmRlclBhc3Nlcy5maW5kKHJlbmRlclBhc3MpOwogICAgIEFTU0VS
VChwYXNzSW5kZXggIT0gbm90Rm91bmQpOwogCiAgICAgLy8gSWYgYW55IHF1YWQgb3IgUmVuZGVy
UGFzcyBkcmF3cyBpbnRvIHRoaXMgUmVuZGVyUGFzcywgdGhlbiBrZWVwIGl0LgotICAgIGNvbnN0
IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcGFzc0xpc3RbcGFzc0luZGV4XS0+cXVhZExpc3QoKTsK
KyAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IGZyYW1lLnJlbmRlclBhc3Nlc1twYXNz
SW5kZXhdLT5xdWFkTGlzdCgpOwogICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9u
dEl0ZXJhdG9yIHF1YWRMaXN0SXRlcmF0b3IgPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7
IHF1YWRMaXN0SXRlcmF0b3IgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytxdWFkTGlz
dEl0ZXJhdG9yKSB7CiAgICAgICAgIENDRHJhd1F1YWQqIGN1cnJlbnRRdWFkID0gcXVhZExpc3RJ
dGVyYXRvci0+Z2V0KCk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9
IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWRJblBhc3MgPSBzdGF0aWNfY2Fz
dDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgaWYgKHBhc3NM
aXN0LmNvbnRhaW5zKHF1YWRJblBhc3MtPnJlbmRlclBhc3MoKSkpCisgICAgICAgIGNvbnN0IEND
UmVuZGVyUGFzcyogY29udHJpYnV0aW5nUGFzcyA9IGZpbmRSZW5kZXJQYXNzQnlJZChDQ1JlbmRl
clBhc3NEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KGN1cnJlbnRRdWFkKS0+cmVuZGVyUGFzc0lkKCks
IGZyYW1lKTsKKyAgICAgICAgaWYgKGZyYW1lLnJlbmRlclBhc3Nlcy5jb250YWlucyhjb250cmli
dXRpbmdQYXNzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CkBAIC00NzAsNyArNDcyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyUGFzc0N1
bGxlcj4KIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRl
clBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmIGZyYW1lKQogewogICAgIGZvciAoc2l6ZV90
IGl0ID0gY3VsbGVyLnJlbmRlclBhc3NMaXN0QmVnaW4oZnJhbWUucmVuZGVyUGFzc2VzKTsgaXQg
IT0gY3VsbGVyLnJlbmRlclBhc3NMaXN0RW5kKGZyYW1lLnJlbmRlclBhc3Nlcyk7IGl0ID0gY3Vs
bGVyLnJlbmRlclBhc3NMaXN0TmV4dChpdCkpIHsKLSAgICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJy
ZW50UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpdF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IEND
UmVuZGVyUGFzcyogY3VycmVudFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbaXRdOwogICAgICAg
ICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IGN1cnJlbnRQYXNzLT5xdWFkTGlzdCgpOwog
ICAgICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVy
YXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsKIApAQCAtNDgxLDcgKzQ4Myw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3ND
dWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19j
YXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgaWYg
KCFjdWxsZXIuc2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXMsICpyZW5k
ZXJQYXNzUXVhZCkpCisgICAgICAgICAgICBpZiAoIWN1bGxlci5zaG91bGRSZW1vdmVSZW5kZXJQ
YXNzKCpyZW5kZXJQYXNzUXVhZCwgZnJhbWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxl
IG9mIGl0ZXJhdGlvbi4gQmVjYXVzZSB3ZQpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVy
LCBGcmFtZURhdGEmCiAgICAgICAgICAgICAvLyBjaGFuZ2UuIFNvLCBjYXB0dXJlIHRoZSBpdGVy
YXRvciBwb3NpdGlvbiBmcm9tIHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICAgICAvLyBsaXN0LCBh
bmQgcmVzdG9yZSBpdCBhZnRlciB0aGUgY2hhbmdlLgogICAgICAgICAgICAgaW50IHBvc2l0aW9u
RnJvbUVuZCA9IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkgLSBpdDsKLSAgICAgICAgICAgIHJl
bW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShmcmFtZS5yZW5kZXJQYXNzZXMsIGl0LCByZW5kZXJQ
YXNzUXVhZC0+cmVuZGVyUGFzcygpLCBmcmFtZS5za2lwcGVkUGFzc2VzKTsKKyAgICAgICAgICAg
IHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShyZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzc0lk
KCksIGZyYW1lKTsKICAgICAgICAgICAgIGl0ID0gZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSAt
IHBvc2l0aW9uRnJvbUVuZDsKICAgICAgICAgICAgIEFTU0VSVChpdCA+PSAwKTsKICAgICAgICAg
fQpAQCAtNTA0LDYgKzUwNiw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlz
dCA9ICZtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNs
ZWFyKCk7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5jbGVhcigpOwogICAgIGZyYW1lLnJl
bmRlclN1cmZhY2VMYXllckxpc3QtPmNsZWFyKCk7CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMu
Y2xlYXIoKTsKIApAQCAtNTQyLDEzICs1NDUsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgLy8gUmVuZGVyV2lkZ2V0
LgogCiAgICAgLy8gVGhlIHJvb3QgUmVuZGVyUGFzcyBpcyB0aGUgbGFzdCBvbmUgdG8gYmUgZHJh
d24uCi0gICAgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nl
cy5sYXN0KCkuZ2V0KCk7CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyA9
IGZyYW1lLnJlbmRlclBhc3Nlcy5sYXN0KCk7CiAKICAgICBtX2Zwc0NvdW50ZXItPm1hcmtCZWdp
bm5pbmdPZkZyYW1lKGN1cnJlbnRUaW1lKCkpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5E
cmF3aW5nRnJhbWUocm9vdFJlbmRlclBhc3MpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpOworICAgICAgICBjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbaV07CiAKICAg
ICAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UgPSByZW5kZXJQ
YXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJm
YWNlKG1fcm9vdFNjaXNzb3JSZWN0KTsKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVu
ZGVyUGFzcyhyZW5kZXJQYXNzLCByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA0OWYyZmM2MmI5NzBkMDRjZWE0
ODZkMzI2MTlmYTdkNjhlOWQ4ODlkLi43NTNhYTM4NGEzZDAwNzZlYTFmMGE5OGMxNzRhNGI1NzVh
NzA3OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC04NSw3ICs4
NSw3IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgRnJhbWVEYXRhIHsKICAgICAgICAgVmVjdG9yPElu
dFJlY3Q+IG9jY2x1ZGluZ1NjcmVlblNwYWNlUmVjdHM7CiAgICAgICAgIENDUmVuZGVyUGFzc0xp
c3QgcmVuZGVyUGFzc2VzOwotICAgICAgICBDQ1JlbmRlclBhc3NMaXN0IHNraXBwZWRQYXNzZXM7
CisgICAgICAgIENDUmVuZGVyUGFzc0lkSGFzaE1hcCByZW5kZXJQYXNzZXNCeUlkOwogICAgICAg
ICBDQ0xheWVyTGlzdCogcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICAgICAgQ0NMYXllckxp
c3Qgd2lsbERyYXdMYXllcnM7CiAgICAgfTsKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJsaWM6CiAK
ICAgICBjbGFzcyBDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBh
c3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmKSBjb25zdDsKKyAgICAgICAgYm9v
bCBzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiwgY29u
c3QgRnJhbWVEYXRhJikgY29uc3Q7CiAKICAgICAgICAgLy8gSXRlcmF0ZXMgZnJvbSB0aGUgcm9v
dCBmaXJzdCwgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBzdXJmYWNlcyBjbG9zZXN0CiAgICAgICAg
IC8vIHRvIHRoZSByb290IHdpdGggY2FjaGVkIHRleHR1cmVzLCBhbmQgYWxsIHN1cmZhY2VzIHRo
YXQgZHJhdyBpbnRvCkBAIC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogCiAgICAgY2xhc3MgQ3Vs
bFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgc2hv
dWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQmKSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQ
YXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiwgY29uc3QgRnJhbWVEYXRhJikgY29uc3Q7
CiAKICAgICAgICAgLy8gSXRlcmF0ZXMgaW4gZHJhdyBvcmRlciwgc28gdGhhdCB3aGVuIGEgc3Vy
ZmFjZSBpcyByZW1vdmVkLCBhbmQgaXRzCiAgICAgICAgIC8vIHRhcmdldCBiZWNvbWVzIGVtcHR5
LCB0aGVuIGl0cyB0YXJnZXQgY2FuIGJlIHJlbW92ZWQgYWxzby4KQEAgLTI0NCw4ICsyNDQsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0QmFja2dyb3VuZFRpY2tpbmdFbmFibGVkKGJvb2wpOwog
ICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIHJlbW92
ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIHNpemVfdCBi
b3R0b21QYXNzLCBjb25zdCBDQ1JlbmRlclBhc3MqIGZpcnN0VG9SZW1vdmUsIENDUmVuZGVyUGFz
c0xpc3QmIHNraXBwZWRQYXNzZXMpOwotCiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1
cnNpdmUoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXMoKTsKICAg
ICBib29sIGVuc3VyZVJlbmRlclN1cmZhY2VMYXllckxpc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3MuY3BwCmluZGV4IDkwYTZlZTYwYWQ3NWY2NWE3YzUxZjAxOTc4MzA1NTRkNmUzNWVhZjYuLmIx
MTEwMGFmMzZjZDRjYjBiMDczYzBkYzk0NWZkNWM3NmYxY2UwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmNwcApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVh
ZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBDQwogCiAg
ICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5j
cmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBib29sIGlzUmVwbGljYSA9IGZhbHNlOwotICAg
IHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwg
aXNSZXBsaWNhLCBjb250cmlidXRpbmdSZW5kZXJQYXNzKTsKKyAgICBzdXJmYWNlLT5hcHBlbmRR
dWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgY29udHJp
YnV0aW5nUmVuZGVyUGFzcy0+aWQoKSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVu
ZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAogICAgIGlmICghc3VyZmFjZS0+aGFzUmVw
bGljYSgpKQpAQCAtODEsNyArODEsNyBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNG
b3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBDQwogICAgIC8v
IEFkZCByZXBsaWNhIGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0
aGUgc3VyZmFjZS4KICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJlcGxpY2FTaGFyZWRR
dWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCk7CiAgICAg
aXNSZXBsaWNhID0gdHJ1ZTsKLSAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBy
ZXBsaWNhU2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIGNvbnRyaWJ1dGluZ1JlbmRl
clBhc3MpOworICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFy
ZWRRdWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgY29udHJpYnV0aW5nUmVuZGVyUGFzcy0+aWQo
KSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChyZXBsaWNhU2hhcmVkUXVhZFN0
YXRlLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggNjEwMDE0NWI4
NzQxYTVkMTliMWFkNmE4MTllNWRkOWJkMTg3OWYyYi4uMDEwYTc2NzRiMGNlMmIyMmMwOTJhNjYw
NmQ0MWNkMzQxYTFjOTdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC04MSw3ICs4Miw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVu
ZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0OwordHlwZWRlZiBWZWN0b3I8Q0NSZW5kZXJQYXNz
Kj4gQ0NSZW5kZXJQYXNzTGlzdDsKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIE93blB0cjxDQ1JlbmRl
clBhc3M+ID4gQ0NSZW5kZXJQYXNzSWRIYXNoTWFwOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdR
dWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCA2NjA4ODliYzQzZjE1ZDIwZDA1NmY4OTczMDE5
ZTExM2MwM2NlOTQwLi41OWFiZmJiY2MwYTNlYmZmMGY4YWNhMDg5MzcyYTUxNWQ2YWMxOTc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCkBAIC0yNywyMSArMjcs
MTggQEAKIAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAKLSNpbmNsdWRl
ICJjYy9DQ1JlbmRlclBhc3MuaCIKLQogdXNpbmcgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFk
PiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRv
clNoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVj
dCwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBib29sIGlzUmVwbGljYSwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKK1Bhc3NPd25QdHI8
Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29uc3Qg
V2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVy
ZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0
ZSwgcXVhZFJlY3QsIHJlbmRlclBhc3MsIGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVy
cywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVh
ZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCByZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgZHJh
d1RyYW5zZm9ybSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQsIGNv
bnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9CiAKLUNDUmVuZGVyUGFzc0RyYXdRdWFk
OjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50
UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCi0gICAgOiBDQ0RyYXdRdWFkKHNo
YXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCi0gICAgLCBt
X3JlbmRlclBhc3MocmVuZGVyUGFzcykKLSAgICAsIG1fcmVuZGVyUGFzc0lkKHJlbmRlclBhc3Mt
PmlkKCkpCitDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3Qg
V2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVy
ZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKKyAgICA6
IFdlYkNvbXBvc2l0b3JRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgV2ViQ29tcG9zaXRvclF1YWQ6OlJl
bmRlclBhc3MsIHF1YWRSZWN0KQorICAgICwgbV9yZW5kZXJQYXNzSWQocmVuZGVyUGFzc0lkKQog
ICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogICAgICwgbV9kcmF3VHJhbnNmb3JtKGRyYXdU
cmFuc2Zvcm0pCiAgICAgLCBtX2ZpbHRlcnMoZmlsdGVycykKQEAgLTQ5LDcgKzQ2LDcgQEAgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2Vi
Q29tcG9zaXRvclNoYXJlZFF1YWQKICAgICAsIG1fbWFza1RleHR1cmVJZChtYXNrVGV4dHVyZUlk
KQogICAgICwgbV9jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZShjb250ZW50c0NoYW5nZWRT
aW5jZUxhc3RGcmFtZSkKIHsKLSAgICBBU1NFUlQobV9yZW5kZXJQYXNzKTsKKyAgICBBU1NFUlQo
bV9yZW5kZXJQYXNzSWQgPiAwKTsKIH0KIAogY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIEND
UmVuZGVyUGFzc0RyYXdRdWFkOjptYXRlcmlhbENhc3QoY29uc3QgV2ViS2l0OjpXZWJDb21wb3Np
dG9yUXVhZCogcXVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCmluZGV4
IDQxNmJkMzRlMzM5MzNkZDZiMTI1NzM1MDFlNzE4MmI1MWQwNTc0MTkuLmExMmYyMDRjYTVmNjI4
NjIxMzQ3MWRiMDQ1NDcyN2ZkODJhNGMzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
RHJhd1F1YWQuaApAQCAtMzgsOSArMzgsOCBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBD
Q1JlbmRlclBhc3NEcmF3UXVhZCA6IHB1YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclBhc3NEcmF3UXVhZCk7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRl
cnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdl
ZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3
UXVhZD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBi
YWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYg
Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJQYXNzOyB9CiAgICAgaW50IHJl
bmRlclBhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAgYm9vbCBp
c1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQogICAgIHVuc2lnbmVkIG1h
c2tUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlSWQ7IH0KQEAgLTU0LDkg
KzUzLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFk
KiBtYXRlcmlhbENhc3QoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZCopOwogcHJpdmF0
ZToKLSAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JT
aGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9v
bCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJl
SWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBD
Q1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2Es
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAotICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogbV9yZW5kZXJQYXNzOwogICAgIGludCBtX3JlbmRlclBhc3NJZDsKICAgICBib29s
IG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3
VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggN2JlMzY4Y2Nl
ODVmZGU3NTA0NTE1YjBiY2IwMzk0ZjgyOTcwODY0MS4uOGJkNDZiZjAwYmNiNGE1MjBhZjZlYzNl
M2UxYmMyNTZjYzg5MzFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0y
MDMsNyArMjAzLDcgQEAgRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6Y29tcHV0ZVJvb3RTY2lz
c29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWMKICAgICByZXR1cm4gQ0NNYXRo
VXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSwgcm9v
dFNjaXNzb3JSZWN0KTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKEND
UXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGJvb2wgZm9yUmVwbGljYSwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQordm9pZCBD
Q1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wgZm9yUmVwbGljYSwgaW50IHJlbmRl
clBhc3NJZCkKIHsKICAgICBBU1NFUlQoIWZvclJlcGxpY2EgfHwgaGFzUmVwbGljYSgpKTsKIApA
QCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1
YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhCiAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IGZvclJlcGxpY2EgPyBtX3JlcGxpY2FEcmF3
VHJhbnNmb3JtIDogbV9kcmF3VHJhbnNmb3JtOwogICAgIEludFJlY3QgY29udGVudHNDaGFuZ2Vk
U2luY2VMYXN0RnJhbWUgPSBjb250ZW50c0NoYW5nZWQoKSA/IG1fY29udGVudFJlY3QgOiBJbnRS
ZWN0KCk7CiAKLSAgICBxdWFkTGlzdC5hcHBlbmRTdXJmYWNlKENDUmVuZGVyUGFzc0RyYXdRdWFk
OjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50UmVjdCgpLCByZW5kZXJQYXNzLCBmb3JS
ZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBmaWx0ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1h
c2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzc0lkLCBmb3JSZXBsaWNhLCBkcmF3VHJhbnNm
b3JtLCBmaWx0ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQsIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmgKaW5kZXggMDY4YTQxMDZiYmYyMWNkYTVlOWM0NjZkYzQzZDc2YjA0ZjNmMGE3MC4uNTQx
MGJlZmVkMzhiNmJlYjFkYTcyMTJkZTc5MjJlNDc1ZDI0ZmY4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgUGFz
c093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgp
IGNvbnN0OwogCi0gICAgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBDQ1NoYXJlZFF1
YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgdm9p
ZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9y
UmVwbGljYSwgaW50IHJlbmRlclBhc3NJZCk7CiAKICAgICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RT
Y2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJl
Y3QpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDAzYzdiZDk2OWEyNjNlY2EwMzFjMzk2
NGMxMjBiM2Q5ODEyYzQ1MmMuLjM4NGMwN2QzYzlkNmNjMzczZjliN2E2NGU0NGQ4MDA1MzRmOGVm
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0yNTIxLDcgKzI1MjEsOCBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBF
Q1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFk
TGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1
YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nl
c1sxXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHF1YWQtPnJl
bmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAg
IENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1
YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGFyZ2V0UGFzcy0+dGFy
Z2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+
ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOwpAQCAtMjU1Myw3ICsyNTU0LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUu
cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShD
Q0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClb
MF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0
YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5x
dWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBh
c3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVu
ZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJl
bmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1
cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdM
YXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1l
KTsKQEAgLTI1NzMsNyArMjU3NSw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c3VyZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpS
ZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFs
KCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PEND
UmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBd
LmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRT
dXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJn
ZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRl
bnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
ICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNTk5LDEw
ICsyNjAyLDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1
cmVDYWNoaW5nKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0Ry
YXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5j
b250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZy
YW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2Vk
KCkpOwogCiAgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgICAgICBFWFBF
Q1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2Vz
Rm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3MoKS0+aWQoKSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2Vz
Rm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsKIAogICAgICAgICBteUhvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVy
cyhmcmFtZSk7CkBAIC0yNjM2LDcgKzI2NDAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3
UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5t
YXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNf
Y2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExp
c3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCkt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBh
c3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQ
YXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNl
KCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBA
IC0yNjY4LDcgKzI2NzMsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZh
Y2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJh
d1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+
bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGlj
X2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRM
aXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCkt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBh
c3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQ
YXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2Uo
KS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMo
ZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAg
LTI3MDEsNyArMjcwNyw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFj
ZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKICAgICAgICAgRVhQRUNUX0VRKDFVLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKICAgICAgICAgRVhQRUNUX0VR
KENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3Qo
KVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0g
c3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMF0t
PnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UocXVhZC0+cmVuZGVy
UGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NS
ZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+
cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGFyZ2V0UGFzcy0+dGFyZ2V0
U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJh
d0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOwpAQCAtMjcyMSw3ICsyNzI4LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9F
UShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0
KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9
IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFd
LT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVy
UGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NS
ZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+
cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50YXJnZXRT
dXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFt
ZSk7CkBAIC0yNzQ3LDEwICsyNzU1LDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKIAogICAgICAgICBFWFBFQ1Rf
RVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlz
dCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQg
PSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sx
XS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5k
ZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBD
Q1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFk
LT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJn
ZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAgICAvLyBXYXMgb3VyIHN1
cmZhY2UgZXZpY3RlZD8KLSAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVu
ZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChxdWFkLT5yZW5kZXJQ
YXNzKCktPmlkKCkpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVu
ZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCh0YXJnZXRQYXNzLT5p
ZCgpKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAg
IG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjc4NSw3ICsyNzk0LDgg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdO
b1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNz
LCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFz
c0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgp
LT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9
IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFu
Z2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAg
ICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI4MjYsNyArMjgzNiw4
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5n
TWVtb3J5TGltaXQpCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3Ms
IGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAg
ICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNz
RHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+
Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBm
cmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2Vk
KCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI4NTksNyArMjg3MCw4IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTWVt
b3J5TGltaXQpCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5x
dWFkTGlzdCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQ
YXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwog
ICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVy
UGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFj
ZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFz
cyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHND
aGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAg
ICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI5MDIsNyArMjkx
NCw2IEBAIHN0cnVjdCBSZW5kZXJQYXNzQ2FjaGVFbnRyeSB7CiAKIHN0cnVjdCBSZW5kZXJQYXNz
UmVtb3ZhbFRlc3REYXRhIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSB7
CiAgICAgc3RkOjptYXA8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+IHJlbmRlclBhc3NDYWNo
ZTsKLSAgICBzdGQ6Om1hcDxjb25zdCBDQ1JlbmRlclBhc3MqLCBjaGFyPiByZW5kZXJQYXNzSWQ7
CiAgICAgVmVjdG9yPE93blB0cjxDQ1JlbmRlclN1cmZhY2U+ID4gcmVuZGVyU3VyZmFjZVN0b3Jl
OwogICAgIFZlY3RvcjxPd25QdHI8Q0NMYXllckltcGw+ID4gbGF5ZXJTdG9yZTsKICAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZTsKQEAgLTI5NzUsNyArMjk4Niw2
IEBAIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0
ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MK
ICAgICBjaGFyIHJvb3RSZW5kZXJQYXNzSWQgPSB0ZXN0U2NyaXB0WzBdOwogICAgIE93blB0cjxD
Q1JlbmRlclBhc3M+IHJvb3RSZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3RE
YXRhLCByb290UmVuZGVyUGFzc0lkKTsKLSAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0
KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9v
dFJlbmRlclBhc3NJZCkpOwogICAgIHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3Rk
OjpwYWlyPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5k
ZXJQYXNzQ2FjaGVFbnRyeShyb290UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CiAgICAgd2hpbGUg
KCpjdXJyZW50Q2hhcikgewogICAgICAgICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFy
WzBdOwpAQCAtMzAyMiwyNiArMzAzMiwyMiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQ
YXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXIrKzsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBDQ1JlbmRlclBhc3MqIHJlZlJlbmRlclBhc3NQdHI7Ci0KICAgICAg
ICAgICAgICAgICBpZiAodGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmZpbmQobmV3UmVuZGVyUGFz
c0lkKSA9PSB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuZW5kKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1RleHR1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+
c2V0SGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOwog
Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3Mg
PSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEsIG5ld1JlbmRlclBhc3NJZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQdHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFp
cjxDQ1JlbmRlclBhc3MqLCBjaGFyPihyZWZSZW5kZXJQYXNzLmdldCgpLCBuZXdSZW5kZXJQYXNz
SWQpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2Vy
dChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwg
UmVuZGVyUGFzc0NhY2hlRW50cnkocmVmUmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQdHIgPSB0
ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGVbbmV3UmVuZGVyUGFzc0lkXS5yZW5kZXJQYXNzOworICAg
ICAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzID0gY3JlYXRl
RHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCBuZXdSZW5kZXJQYXNzSWQpOworICAgICAgICAgICAg
ICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBS
ZW5kZXJQYXNzQ2FjaGVFbnRyeT4obmV3UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRy
eShyZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICBJbnRSZWN0IHF1YWRSZWN0ID0gSW50UmVjdCgwLCAwLCAxLCAxKTsKICAgICAgICAg
ICAgICAgICBJbnRSZWN0IGNvbnRlbnRzQ2hhbmdlZFJlY3QgPSBjb250ZW50c0NoYW5nZWQgPyBx
dWFkUmVjdCA6IEludFJlY3QoKTsKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNz
RHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRhLnNo
YXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVhZFJlY3QsIHJlZlJlbmRlclBhc3NQdHIsIGlzUmVwbGlj
YSwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIDEsIGNvbnRlbnRzQ2hh
bmdlZFJlY3QpOworICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4g
cXVhZCA9IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0
YXRlLmdldCgpLCBxdWFkUmVjdCwgbmV3UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCks
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsK
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDQ1Rlc3RSZW5kZXJQYXNzKj4ocmVuZGVyUGFz
cy5nZXQoKSktPmFwcGVuZFF1YWQocXVhZC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIHRlc3REYXRhLnJlbmRlclBhc3Nlcy5pbnNlcnQoMCwgcmVuZGVyUGFz
cy5yZWxlYXNlKCkpOworICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMuaW5zZXJ0KDAsIHJl
bmRlclBhc3MuZ2V0KCkpOworICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXNCeUlkLmFkZChy
ZW5kZXJQYXNzLT5pZCgpLCByZW5kZXJQYXNzLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICgqY3Vy
cmVudENoYXIpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwogICAgIH0KQEAgLTMwNTEsOSAr
MzA1Nyw4IEBAIHZvaWQgZHVtcFJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBSZW5kZXJQYXNzUmVt
b3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgY2hhciogYnVmCiB7CiAgICAgY2hhciogcG9zID0gYnVm
ZmVyOwogICAgIGZvciAoQ0NSZW5kZXJQYXNzTGlzdDo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBp
dCA9IHRlc3REYXRhLnJlbmRlclBhc3Nlcy5yYmVnaW4oKTsgaXQgIT0gdGVzdERhdGEucmVuZGVy
UGFzc2VzLnJlbmQoKTsgKytpdCkgewotICAgICAgICBDQ1JlbmRlclBhc3MqIGN1cnJlbnRQYXNz
ID0gaXQtPmdldCgpOwotICAgICAgICBjaGFyIHBhc3NJZCA9IHRlc3REYXRhLnJlbmRlclBhc3NJ
ZC5maW5kKGN1cnJlbnRQYXNzKS0+c2Vjb25kOwotICAgICAgICAqcG9zID0gcGFzc0lkOworICAg
ICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGN1cnJlbnRQYXNzID0gKml0OworICAgICAgICAqcG9z
ID0gY3VycmVudFBhc3MtPmlkKCk7CiAgICAgICAgIHBvcysrOwogCiAgICAgICAgIENDUXVhZExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIHF1YWRMaXN0SXRlcmF0b3IgPSBjdXJyZW50UGFzcy0+cXVhZExp
c3QoKS5iZWdpbigpOwpAQCAtMzA2NCwxNCArMzA2OSwxMCBAQCB2b2lkIGR1bXBSZW5kZXJQYXNz
VGVzdERhdGEoY29uc3QgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIq
IGJ1ZgogICAgICAgICAgICAgICAgICpwb3MgPSAncyc7CiAgICAgICAgICAgICAgICAgcG9zKys7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6OlJl
bmRlclBhc3M6IHsKLSAgICAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVy
UGFzc0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50
UXVhZCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZWZQYXNzID0gcmVu
ZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQYXNzKCk7Ci0gICAgICAgICAgICAgICAgY2hhciByZWZQ
YXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOwotICAg
ICAgICAgICAgICAgICpwb3MgPSByZWZQYXNzSWQ7CisgICAgICAgICAgICBjYXNlIENDRHJhd1F1
YWQ6OlJlbmRlclBhc3M6CisgICAgICAgICAgICAgICAgKnBvcyA9IENDUmVuZGVyUGFzc0RyYXdR
dWFkOjptYXRlcmlhbENhc3QoY3VycmVudFF1YWQpLT5yZW5kZXJQYXNzSWQoKTsKICAgICAgICAg
ICAgICAgICBwb3MrKzsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgKnBvcyA9ICd4JzsKICAgICAgICAg
ICAgICAgICBwb3MrKzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152081</attachid>
            <date>2012-07-12 15:31:30 -0700</date>
            <delta_ts>2012-07-12 16:26:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91023-20120712183129.patch</filename>
            <type>text/plain</type>
            <size>38238</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uMWUxYzYzOWU2MDY0MTViNDhmZjU5ODM5ODgyNTc3
NDM2ZTU3NDQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVt
b3ZlIHRoZSBSZW5kZXJQYXNzIHBvaW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlcyB0aGUgUmVu
ZGVyUGFzcyBwb2ludGVyIGFuZCBrZWVwcyBvbmx5IGFuIGludGVnZXIgaWQgaW4gdGhlCisgICAg
ICAgIHF1YWQgdG8gcmVmZXIgYmFjayB0byB0aGUgUmVuZGVyUGFzcyB0aGUgcXVhZCByZWFkcyBm
cm9tLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNo
b3VsZFJlbW92ZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEZyYW1lRGF0YSk6Cisg
ICAgICAgIChDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKEN1
bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorCiAyMDEyLTA3LTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCB0cnkgY3JlYXRlIGEg
c2Vjb25kIFJlbmRlclN1cmZhY2UgZm9yIGl0c2VsZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBmYWYyNmE3N2FhNjU1NjhhMmQwNjdlNjc4ZTM1MjYwMWM5MmEzYWVkLi4yMWYyOWQ4Y2Nk
NTczODc1YTY2ZDY5MmJkZTEwODI2NjBjMjg3NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA3LTExICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRoZSBSZW5kZXJQYXNzIHBv
aW50ZXIgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6
CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IHRyeSBjcmVhdGUgYSBz
ZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA0YzgyY2ZhOTkwY2E3ZmJhMzcwYjM3ODQyYzdiZTU5MWM1NjhmMjdl
Li45M2Q5OGViZjU1YTUzN2VmNjllMmNmNzRkMDRmOWZjZDU4MTI0ZTQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29u
c3QgQ0NSZW5kZXJQYQogewogICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBw
YXNzZXNJbkZyYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQo
KSk7CisgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ld
LT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CiAKICAgICBWZWN0b3I8aW50PiBw
YXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAppbmRleCBhODY1MzBjNWYzNDEzM2I3NTNlZWRlYjcxZTNlNTg4NzI1MTMw
NTg1Li5hZGEzYzhlM2I4NjEwZTI3ZmQ0ZmE5YjRmMDI3ZDRhMDJhOTJlMmIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjk2LDEyICsyOTYsMTEgQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBm
cmFtZSkKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9ICgqZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdClbc3VyZmFjZUluZGV4XTsKICAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB1bmlxdWUgYWNyb3NzIGFsbCBDQ0xh
eWVyVHJlZUhvc3RJbXBscy4KLSAgICAgICAgaW50IGdsb2JhbFJlbmRlclBhc3NJZCA9IHJlbmRl
clN1cmZhY2VMYXllci0+aWQoKTsKLQotICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNz
ID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSwgZ2xvYmFsUmVuZGVyUGFzc0lk
KTsKKyAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsK
KyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KHJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7CiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFk
ZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKLSAgICAgICAgZnJhbWUucmVuZGVyUGFzc2Vz
LmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlcy5hcHBl
bmQocGFzcy5nZXQoKSk7CisgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHJlbmRl
clBhc3NJZCwgcGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIGJvb2wgcmVjb3JkTWV0cmlj
c0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3
aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgpAQCAtNDA3LDE5ICs0MDYsMjYgQEAgSW50U2l6ZSBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCi0v
LyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVj
dXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0
IENDUmVuZGVyUGFzcyogZmlyc3RUb1JlbW92ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBh
c3NlcykKK3N0YXRpYyBpbmxpbmUgQ0NSZW5kZXJQYXNzKiBmaW5kUmVuZGVyUGFzc0J5SWQoaW50
IHJlbmRlclBhc3NJZCwgY29uc3QgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFt
ZSkKK3sKKyAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnJh
bWUucmVuZGVyUGFzc2VzQnlJZC5maW5kKHJlbmRlclBhc3NJZCk7CisgICAgQVNTRVJUKGl0ICE9
IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZW5kKCkpOworICAgIHJldHVybiBpdC0+c2Vjb25kLmdl
dCgpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUoaW50IHJl
bW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFtZSkK
IHsKLSAgICBzaXplX3QgcmVtb3ZlSW5kZXggPSBwYXNzZXMuZmluZChmaXJzdFRvUmVtb3ZlKTsK
KyAgICBDQ1JlbmRlclBhc3MqIHJlbW92ZVJlbmRlclBhc3MgPSBmaW5kUmVuZGVyUGFzc0J5SWQo
cmVtb3ZlUmVuZGVyUGFzc0lkLCBmcmFtZSk7CisgICAgc2l6ZV90IHJlbW92ZUluZGV4ID0gZnJh
bWUucmVuZGVyUGFzc2VzLmZpbmQocmVtb3ZlUmVuZGVyUGFzcyk7CiAKICAgICAvLyBUaGUgcGFz
cyB3YXMgYWxyZWFkeSByZW1vdmVkIGJ5IGFub3RoZXIgcXVhZCAtIHByb2JhYmx5IHRoZSBvcmln
aW5hbCwgYW5kIHdlIGFyZSB0aGUgcmVwbGljYS4KICAgICBpZiAocmVtb3ZlSW5kZXggPT0gbm90
Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbW92
ZWRQYXNzID0gcGFzc2VzW3JlbW92ZUluZGV4XS5yZWxlYXNlKCk7Ci0gICAgcGFzc2VzLnJlbW92
ZShyZW1vdmVJbmRleCk7CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW1vdmVkUGFzcyA9IGZy
YW1lLnJlbmRlclBhc3Nlc1tyZW1vdmVJbmRleF07CisgICAgZnJhbWUucmVuZGVyUGFzc2VzLnJl
bW92ZShyZW1vdmVJbmRleCk7CiAKLSAgICAvLyBOb3cgZm9sbG93IHVwIGZvciBhbGwgUmVuZGVy
UGFzcyBxdWFkcyBhbmQgcmVtb3ZlIHRoZWlyIHJlbmRlciBwYXNzZXMgcmVjdXJzaXZlbHkuCisg
ICAgLy8gTm93IGZvbGxvdyB1cCBmb3IgYWxsIFJlbmRlclBhc3MgcXVhZHMgYW5kIHJlbW92ZSB0
aGVpciBSZW5kZXJQYXNzZXMgcmVjdXJzaXZlbHkuCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVh
ZExpc3QgPSByZW1vdmVkUGFzcy0+cXVhZExpc3QoKTsKICAgICBDQ1F1YWRMaXN0Ojpjb25zdEJh
Y2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zyb250
QmVnaW4oKTsKICAgICBmb3IgKDsgcXVhZExpc3RJdGVyYXRvciAhPSBxdWFkTGlzdC5iYWNrVG9G
cm9udEVuZCgpOyArK3F1YWRMaXN0SXRlcmF0b3IpIHsKQEAgLTQyNywzNiArNDMzLDMyIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICAgICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgp
ICE9IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxD
Q1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiBuZXh0UmVuZGVyUGFzcyA9IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCk7Ci0K
LSAgICAgICAgLy8gT3VyIHNlYXJjaCBpcyBub3cgbGltaXRlZCB1cCB0byB0aGUgcGFzcyB0aGF0
IHdlIGp1c3QgcmVtb3ZlZC4KLSAgICAgICAgLy8gU3Vic3RpdHV0ZSByZW1vdmVJbmRleCBmb3Ig
Ym90dG9tUGFzcyBub3cuCi0gICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNz
ZXMsIHJlbW92ZUluZGV4LCBuZXh0UmVuZGVyUGFzcywgc2tpcHBlZFBhc3Nlcyk7CisgICAgICAg
IGludCBuZXh0UmVtb3ZlUmVuZGVyUGFzc0lkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6Om1hdGVy
aWFsQ2FzdChjdXJyZW50UXVhZCktPnJlbmRlclBhc3NJZCgpOworICAgICAgICByZW1vdmVSZW5k
ZXJQYXNzZXNSZWN1cnNpdmUobmV4dFJlbW92ZVJlbmRlclBhc3NJZCwgZnJhbWUpOwogICAgIH0K
LSAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVkUGFzcy5yZWxlYXNlKCkpOwogfQogCi1i
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoQ2FjaGVkVGV4dHVy
ZXM6OnNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYsIGNvbnN0
IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFkKSBjb25zdAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpzaG91bGRSZW1vdmVSZW5k
ZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiBxdWFkLCBjb25zdCBGcmFtZURhdGEm
KSBjb25zdAogewogICAgIHJldHVybiBxdWFkLmNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1l
KCkuaXNFbXB0eSgpICYmIG1fcmVuZGVyZXIuaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBh
c3NJZChxdWFkLnJlbmRlclBhc3NJZCgpKTsKIH0KIAotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29u
c3QgQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc0xpc3QsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFk
JiBxdWFkKSBjb25zdAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2Vz
V2l0aE5vUXVhZHM6OnNob3VsZFJlbW92ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzRHJh
d1F1YWQmIHF1YWQsIGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpIGNvbnN0CiB7Ci0gICAgc2l6ZV90
IHBhc3NJbmRleCA9IHBhc3NMaXN0LmZpbmQocXVhZC5yZW5kZXJQYXNzKCkpOworICAgIGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZpbmRSZW5kZXJQYXNzQnlJZChxdWFkLnJlbmRl
clBhc3NJZCgpLCBmcmFtZSk7CisgICAgc2l6ZV90IHBhc3NJbmRleCA9IGZyYW1lLnJlbmRlclBh
c3Nlcy5maW5kKHJlbmRlclBhc3MpOwogICAgIEFTU0VSVChwYXNzSW5kZXggIT0gbm90Rm91bmQp
OwogCiAgICAgLy8gSWYgYW55IHF1YWQgb3IgUmVuZGVyUGFzcyBkcmF3cyBpbnRvIHRoaXMgUmVu
ZGVyUGFzcywgdGhlbiBrZWVwIGl0LgotICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0g
cGFzc0xpc3RbcGFzc0luZGV4XS0+cXVhZExpc3QoKTsKKyAgICBjb25zdCBDQ1F1YWRMaXN0JiBx
dWFkTGlzdCA9IGZyYW1lLnJlbmRlclBhc3Nlc1twYXNzSW5kZXhdLT5xdWFkTGlzdCgpOwogICAg
IGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIHF1YWRMaXN0SXRlcmF0
b3IgPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7IHF1YWRMaXN0SXRlcmF0b3IgIT0gcXVh
ZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytxdWFkTGlzdEl0ZXJhdG9yKSB7CiAgICAgICAgIEND
RHJhd1F1YWQqIGN1cnJlbnRRdWFkID0gcXVhZExpc3RJdGVyYXRvci0+Z2V0KCk7CiAKICAgICAg
ICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9IENDRHJhd1F1YWQ6OlJlbmRlclBhc3Mp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQqIHF1YWRJblBhc3MgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+
KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgaWYgKHBhc3NMaXN0LmNvbnRhaW5zKHF1YWRJblBhc3Mt
PnJlbmRlclBhc3MoKSkpCisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY29udHJpYnV0aW5n
UGFzcyA9IGZpbmRSZW5kZXJQYXNzQnlJZChDQ1JlbmRlclBhc3NEcmF3UXVhZDo6bWF0ZXJpYWxD
YXN0KGN1cnJlbnRRdWFkKS0+cmVuZGVyUGFzc0lkKCksIGZyYW1lKTsKKyAgICAgICAgaWYgKGZy
YW1lLnJlbmRlclBhc3Nlcy5jb250YWlucyhjb250cmlidXRpbmdQYXNzKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NzEsNyArNDczLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyUGFzc0N1bGxlcj4KIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFt
ZURhdGEmIGZyYW1lKQogewogICAgIGZvciAoc2l6ZV90IGl0ID0gY3VsbGVyLnJlbmRlclBhc3NM
aXN0QmVnaW4oZnJhbWUucmVuZGVyUGFzc2VzKTsgaXQgIT0gY3VsbGVyLnJlbmRlclBhc3NMaXN0
RW5kKGZyYW1lLnJlbmRlclBhc3Nlcyk7IGl0ID0gY3VsbGVyLnJlbmRlclBhc3NMaXN0TmV4dChp
dCkpIHsKLSAgICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IGZyYW1lLnJlbmRlclBh
c3Nlc1tpdF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3VycmVudFBhc3Mg
PSBmcmFtZS5yZW5kZXJQYXNzZXNbaXRdOwogICAgICAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFk
TGlzdCA9IGN1cnJlbnRQYXNzLT5xdWFkTGlzdCgpOwogICAgICAgICBDQ1F1YWRMaXN0Ojpjb25z
dEJhY2tUb0Zyb250SXRlcmF0b3IgcXVhZExpc3RJdGVyYXRvciA9IHF1YWRMaXN0LmJhY2tUb0Zy
b250QmVnaW4oKTsKIApAQCAtNDgyLDcgKzQ4NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEm
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFk
Kj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgaWYgKCFjdWxsZXIuc2hvdWxkUmVtb3ZlUmVu
ZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXMsICpyZW5kZXJQYXNzUXVhZCkpCisgICAgICAgICAg
ICBpZiAoIWN1bGxlci5zaG91bGRSZW1vdmVSZW5kZXJQYXNzKCpyZW5kZXJQYXNzUXVhZCwgZnJh
bWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBXZSBhcmUg
Y2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGl0ZXJhdGlvbi4gQmVjYXVzZSB3
ZQpAQCAtNDkxLDcgKzQ5Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVu
ZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmCiAgICAgICAgICAg
ICAvLyBjaGFuZ2UuIFNvLCBjYXB0dXJlIHRoZSBpdGVyYXRvciBwb3NpdGlvbiBmcm9tIHRoZSBl
bmQgb2YgdGhlCiAgICAgICAgICAgICAvLyBsaXN0LCBhbmQgcmVzdG9yZSBpdCBhZnRlciB0aGUg
Y2hhbmdlLgogICAgICAgICAgICAgaW50IHBvc2l0aW9uRnJvbUVuZCA9IGZyYW1lLnJlbmRlclBh
c3Nlcy5zaXplKCkgLSBpdDsKLSAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2
ZShmcmFtZS5yZW5kZXJQYXNzZXMsIGl0LCByZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzcygpLCBm
cmFtZS5za2lwcGVkUGFzc2VzKTsKKyAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vy
c2l2ZShyZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFzc0lkKCksIGZyYW1lKTsKICAgICAgICAgICAg
IGl0ID0gZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSAtIHBvc2l0aW9uRnJvbUVuZDsKICAgICAg
ICAgICAgIEFTU0VSVChpdCA+PSAwKTsKICAgICAgICAgfQpAQCAtNTA1LDYgKzUwNyw3IEBAIGJv
b2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQog
CiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9ICZtX3JlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7CisgICAgZnJhbWUucmVuZGVy
UGFzc2VzQnlJZC5jbGVhcigpOwogICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QtPmNs
ZWFyKCk7CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKIApAQCAtNTQzLDEzICs1
NDYsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1l
RGF0YSYgZnJhbWUpCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogCiAgICAgLy8gVGhlIHJvb3QgUmVu
ZGVyUGFzcyBpcyB0aGUgbGFzdCBvbmUgdG8gYmUgZHJhd24uCi0gICAgQ0NSZW5kZXJQYXNzKiBy
b290UmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlcy5sYXN0KCkuZ2V0KCk7CisgICAgY29u
c3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlcy5sYXN0
KCk7CiAKICAgICBtX2Zwc0NvdW50ZXItPm1hcmtCZWdpbm5pbmdPZkZyYW1lKGN1cnJlbnRUaW1l
KCkpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUocm9vdFJlbmRlclBh
c3MpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzID0gZnJhbWUucmVu
ZGVyUGFzc2VzW2ldLmdldCgpOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbaV07CiAKICAgICAgICAgRmxvYXRSZWN0IHJvb3RTY2lz
c29yUmVjdEluQ3VycmVudFN1cmZhY2UgPSByZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNv
bXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKG1fcm9vdFNjaXNzb3JSZWN0KTsK
ICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhyZW5kZXJQYXNzLCByb290
U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAppbmRleCA0OWYyZmM2MmI5NzBkMDRjZWE0ODZkMzI2MTlmYTdkNjhlOWQ4ODlkLi43
NTNhYTM4NGEzZDAwNzZlYTFmMGE5OGMxNzRhNGI1NzVhNzA3OTBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBzdHJ1
Y3QgRnJhbWVEYXRhIHsKICAgICAgICAgVmVjdG9yPEludFJlY3Q+IG9jY2x1ZGluZ1NjcmVlblNw
YWNlUmVjdHM7CiAgICAgICAgIENDUmVuZGVyUGFzc0xpc3QgcmVuZGVyUGFzc2VzOwotICAgICAg
ICBDQ1JlbmRlclBhc3NMaXN0IHNraXBwZWRQYXNzZXM7CisgICAgICAgIENDUmVuZGVyUGFzc0lk
SGFzaE1hcCByZW5kZXJQYXNzZXNCeUlkOwogICAgICAgICBDQ0xheWVyTGlzdCogcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKICAgICAgICAgQ0NMYXllckxpc3Qgd2lsbERyYXdMYXllcnM7CiAgICAg
fTsKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBDdWxsUmVuZGVyUGFz
c2VzV2l0aENhY2hlZFRleHR1cmVzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgc2hvdWxk
UmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQmKSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkJiwgY29uc3QgRnJhbWVEYXRhJikgY29uc3Q7CiAK
ICAgICAgICAgLy8gSXRlcmF0ZXMgZnJvbSB0aGUgcm9vdCBmaXJzdCwgaW4gb3JkZXIgdG8gcmVt
b3ZlIHRoZSBzdXJmYWNlcyBjbG9zZXN0CiAgICAgICAgIC8vIHRvIHRoZSByb290IHdpdGggY2Fj
aGVkIHRleHR1cmVzLCBhbmQgYWxsIHN1cmZhY2VzIHRoYXQgZHJhdyBpbnRvCkBAIC0xOTYsNyAr
MTk2LDcgQEAgcHVibGljOgogCiAgICAgY2xhc3MgQ3VsbFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRz
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmKSBjb25zdDsK
KyAgICAgICAgYm9vbCBzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkJiwgY29uc3QgRnJhbWVEYXRhJikgY29uc3Q7CiAKICAgICAgICAgLy8gSXRlcmF0ZXMg
aW4gZHJhdyBvcmRlciwgc28gdGhhdCB3aGVuIGEgc3VyZmFjZSBpcyByZW1vdmVkLCBhbmQgaXRz
CiAgICAgICAgIC8vIHRhcmdldCBiZWNvbWVzIGVtcHR5LCB0aGVuIGl0cyB0YXJnZXQgY2FuIGJl
IHJlbW92ZWQgYWxzby4KQEAgLTI0NCw4ICsyNDQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
QmFja2dyb3VuZFRpY2tpbmdFbmFibGVkKGJvb2wpOwogICAgIEludFNpemUgY29udGVudFNpemUo
KSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIHNpemVfdCBib3R0b21QYXNzLCBjb25zdCBDQ1JlbmRl
clBhc3MqIGZpcnN0VG9SZW1vdmUsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMpOwot
CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKICAg
ICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXMoKTsKICAgICBib29sIGVuc3VyZVJlbmRlclN1cmZh
Y2VMYXllckxpc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDkwYTZlZTYwYWQ3
NWY2NWE3YzUxZjAxOTc4MzA1NTRkNmUzNWVhZjYuLmIxMTEwMGFmMzZjZDRjYjBiMDczYzBkYzk0
NWZkNWM3NmYxY2UwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtNzIsNyArNzIs
NyBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyLCBjb25zdCBDQwogCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0
YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsK
ICAgICBib29sIGlzUmVwbGljYSA9IGZhbHNlOwotICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1
YWRDdWxsZXIsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBjb250cmlidXRpbmdS
ZW5kZXJQYXNzKTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRR
dWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgY29udHJpYnV0aW5nUmVuZGVyUGFzcy0+aWQoKSk7
CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFz
ZSgpKTsKIAogICAgIGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgpKQpAQCAtODEsNyArODEsNyBA
QCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyLCBjb25zdCBDQwogICAgIC8vIEFkZCByZXBsaWNhIGFmdGVyIHRoZSBz
dXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3VyZmFjZS4KICAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVh
dGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCk7CiAgICAgaXNSZXBsaWNhID0gdHJ1ZTsKLSAgICBz
dXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCByZXBsaWNhU2hhcmVkUXVhZFN0YXRlLmdl
dCgpLCBpc1JlcGxpY2EsIGNvbnRyaWJ1dGluZ1JlbmRlclBhc3MpOworICAgIHN1cmZhY2UtPmFw
cGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUuZ2V0KCksIGlzUmVw
bGljYSwgY29udHJpYnV0aW5nUmVuZGVyUGFzcy0+aWQoKSk7CiAgICAgbV9zaGFyZWRRdWFkU3Rh
dGVMaXN0LmFwcGVuZChyZXBsaWNhU2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggNjEwMDE0NWI4NzQxYTVkMTliMWFkNmE4MTllNWRkOWJk
MTg3OWYyYi4uMDEwYTc2NzRiMGNlMmIyMmMwOTJhNjYwNmQ0MWNkMzQxYTFjOTdmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ0RyYXdR
dWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04MSw3ICs4
Miw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwog
fTsKIAotdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NM
aXN0OwordHlwZWRlZiBWZWN0b3I8Q0NSZW5kZXJQYXNzKj4gQ0NSZW5kZXJQYXNzTGlzdDsKK3R5
cGVkZWYgSGFzaE1hcDxpbnQsIE93blB0cjxDQ1JlbmRlclBhc3M+ID4gQ0NSZW5kZXJQYXNzSWRI
YXNoTWFwOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcApp
bmRleCA2NjA4ODliYzQzZjE1ZDIwZDA1NmY4OTczMDE5ZTExM2MwM2NlOTQwLi41OWFiZmJiY2Mw
YTNlYmZmMGY4YWNhMDg5MzcyYTUxNWQ2YWMxOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQuY3BwCkBAIC0yNywyMSArMjcsMTggQEAKIAogI2luY2x1ZGUgImNjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAKLSNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKLQog
dXNpbmcgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6
Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSogc2hhcmVk
UXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ0NSZW5kZXJQYXNzKiBy
ZW5kZXJQYXNzLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRG
aWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0No
YW5nZWRTaW5jZUxhc3RGcmFtZSkKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IEND
UmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBp
bnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tn
cm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
UmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJlbmRlclBhc3Ms
IGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1h
c2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRS
ZWN0LCByZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywgYmFj
a2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZy
YW1lKSk7CiB9CiAKLUNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChj
b25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
cywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywg
dW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2lu
Y2VMYXN0RnJhbWUpCi0gICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVh
ZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCi0gICAgLCBtX3JlbmRlclBhc3MocmVuZGVyUGFzcykK
LSAgICAsIG1fcmVuZGVyUGFzc0lkKHJlbmRlclBhc3MtPmlkKCkpCitDQ1JlbmRlclBhc3NEcmF3
UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBp
bnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tn
cm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKKyAgICA6IFdlYkNvbXBvc2l0b3JRdWFkKHNoYXJl
ZFF1YWRTdGF0ZSwgV2ViQ29tcG9zaXRvclF1YWQ6OlJlbmRlclBhc3MsIHF1YWRSZWN0KQorICAg
ICwgbV9yZW5kZXJQYXNzSWQocmVuZGVyUGFzc0lkKQogICAgICwgbV9pc1JlcGxpY2EoaXNSZXBs
aWNhKQogICAgICwgbV9kcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pCiAgICAgLCBtX2ZpbHRl
cnMoZmlsdGVycykKQEAgLTQ5LDcgKzQ2LDcgQEAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVu
ZGVyUGFzc0RyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWQKICAg
ICAsIG1fbWFza1RleHR1cmVJZChtYXNrVGV4dHVyZUlkKQogICAgICwgbV9jb250ZW50c0NoYW5n
ZWRTaW5jZUxhc3RGcmFtZShjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAgICBB
U1NFUlQobV9yZW5kZXJQYXNzKTsKKyAgICBBU1NFUlQobV9yZW5kZXJQYXNzSWQgPiAwKTsKIH0K
IAogY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIENDUmVuZGVyUGFzc0RyYXdRdWFkOjptYXRl
cmlhbENhc3QoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZCogcXVhZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
UGFzc0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCmluZGV4IDQxNmJkMzRlMzM5MzNkZDZiMTI1NzM1
MDFlNzE4MmI1MWQwNTc0MTkuLmExMmYyMDRjYTVmNjI4NjIxMzQ3MWRiMDQ1NDcyN2ZkODJhNGMz
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaApAQCAtMzgsOSArMzgs
OCBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1JlbmRlclBhc3NEcmF3UXVhZCA6IHB1
YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDQ1JlbmRlclBhc3NEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JT
aGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9v
bCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJl
SWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IFdlYktp
dDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBpbnQgcmVu
ZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWdu
ZWQgbWFza1RleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0
RnJhbWUpOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJQYXNzOyB9CiAgICAgaW50IHJlbmRlclBhc3NJZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVy
biBtX2lzUmVwbGljYTsgfQogICAgIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tUZXh0dXJlSWQ7IH0KQEAgLTU0LDkgKzUzLDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBtYXRlcmlhbENhc3QoY29uc3QgV2Vi
S2l0OjpXZWJDb21wb3NpdG9yUXVhZCopOwogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclBhc3NEcmF3
UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25z
dCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0Jiwg
aW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMs
IHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKTsKIAotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9yZW5kZXJQYXNzOwog
ICAgIGludCBtX3JlbmRlclBhc3NJZDsKICAgICBib29sIG1faXNSZXBsaWNhOwogICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggN2JlMzY4Y2NlODVmZGU3NTA0NTE1YjBiY2IwMzk0Zjgy
OTcwODY0MS4uOGJkNDZiZjAwYmNiNGE1MjBhZjZlYzNlM2UxYmMyNTZjYzg5MzFjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgRmxvYXRSZWN0
IENDUmVuZGVyU3VyZmFjZTo6Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uo
Y29uc3QgRmxvYXRSZWMKICAgICByZXR1cm4gQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0
KGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSwgcm9vdFNjaXNzb3JSZWN0KTsKIH0KIAotdm9p
ZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wgZm9yUmVwbGljYSwgY29uc3Qg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQordm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1
YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFk
U3RhdGUsIGJvb2wgZm9yUmVwbGljYSwgaW50IHJlbmRlclBhc3NJZCkKIHsKICAgICBBU1NFUlQo
IWZvclJlcGxpY2EgfHwgaGFzUmVwbGljYSgpKTsKIApAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQg
Q0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5z
Zm9ybSA9IGZvclJlcGxpY2EgPyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtIDogbV9kcmF3VHJhbnNm
b3JtOwogICAgIEludFJlY3QgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUgPSBjb250ZW50
c0NoYW5nZWQoKSA/IG1fY29udGVudFJlY3QgOiBJbnRSZWN0KCk7CiAKLSAgICBxdWFkTGlzdC5h
cHBlbmRTdXJmYWNlKENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRl
LCBjb250ZW50UmVjdCgpLCByZW5kZXJQYXNzLCBmb3JSZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBm
aWx0ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hh
bmdlZFNpbmNlTGFzdEZyYW1lKSk7CisgICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRl
clBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVu
ZGVyUGFzc0lkLCBmb3JSZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBmaWx0ZXJzKCksIGJhY2tncm91
bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1l
KSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggMDY4YTQxMDZiYmYy
MWNkYTVlOWM0NjZkYzQzZDc2YjA0ZjNmMGE3MC4uNTQxMGJlZmVkMzhiNmJlYjFkYTcyMTJkZTc5
MjJlNDc1ZDI0ZmY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEzMCw3ICsx
MzAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRl
U2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gY3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBl
bmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGlj
YSwgY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxs
ZXImLCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGljYSwgaW50IHJlbmRlclBhc3NJ
ZCk7CiAKICAgICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZh
Y2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qu
Y3BwCmluZGV4IGE0MDE4MTEyMjkwMjBjMDNmZjA4YjUyZTI1ZTUwNGNjZjllZDcwOWYuLmJmNmJh
N2Q2Zjk5ZmE4NDAxNGZmOTU1OGVkN2NmMzI1MGQ4Y2Y0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBA
IC0yNTIwLDcgKzI1MjAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZh
Y2VUZXh0dXJlQ2FjaGluZykKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVy
UGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsK
ICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRl
clBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS5nZXQo
KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFj
ZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFz
cyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodGFyZ2V0UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0No
YW5nZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAg
ICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjU1Miw3ICsyNTUz
LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hp
bmcpCiAgICAgICAgIEVYUEVDVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlz
dCgpLnNpemUoKSk7CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0Ry
YXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5j
b250ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZy
YW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2Vk
KCkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI1NzIsNyArMjU3NCw4IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQog
CiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQ
YXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBh
c3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJh
bWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdl
ZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0gZnJhbWUucmVuZGVyUGFz
c2VzQnlJZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0
YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAogICAgICAg
ICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlk
RHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNTk4LDEwICsyNjAxLDExIEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQogCiAgICAgICAgIEVY
UEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1
YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCog
cXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFz
c2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQt
PnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7CisgICAg
ICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZ2V0
KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBhc3Mt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIC8vIFdhcyBv
dXIgc3VyZmFjZSBldmljdGVkPwotICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJl
bmRlclBhc3MoKS0+aWQoKSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBh
c3MtPmlkKCkpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAg
ICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjM1LDcgKzI2
MzksOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2Fj
aGluZykKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUu
cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICAgICAgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVh
ZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVu
dHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5y
ZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsK
IAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNjY3LDcgKzI2NzIsOCBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlh
bFN3YXApCiAKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1l
LnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIEND
UmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1
YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVu
dHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5y
ZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHRhcmdldFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwog
CiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJ
bXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI3MDAsNyArMjcwNiw4IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFs
U3dhcCkKICAgICAgICAgRVhQRUNUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRM
aXN0KCkuc2l6ZSgpKTsKICAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3Ms
IGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAg
ICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNz
RHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCkt
PmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0g
ZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UodGFyZ2V0UGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5n
ZWQoKSk7CiAKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAg
IG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwpAQCAtMjcyMCw3ICsyNzI3LDgg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdO
b1BhcnRpYWxTd2FwKQogCiAgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNz
LCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFz
c0RyYXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUocXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCkt
PmNvbnRlbnRzQ2hhbmdlZCgpKTsKKyAgICAgICAgQ0NSZW5kZXJQYXNzKiB0YXJnZXRQYXNzID0g
ZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdl
ZCgpKTsKIAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAg
bXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0yNzQ2LDEwICsyNzU0LDEx
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5n
Tm9QYXJ0aWFsU3dhcCkKIAogICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFz
cywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAg
ICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBh
c3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS5nZXQoKSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2Uo
KS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAgICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3Mg
PSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRSh0YXJnZXRQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hh
bmdlZCgpKTsKIAogICAgICAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KLSAgICAgICAg
RVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291
cmNlc0ZvclJlbmRlclBhc3NJZChxdWFkLT5yZW5kZXJQYXNzKCktPmlkKCkpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291
cmNlc0ZvclJlbmRlclBhc3NJZCh0YXJnZXRQYXNzLT5pZCgpKSk7CiAKICAgICAgICAgbXlIb3N0
SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxM
YXllcnMoZnJhbWUpOwpAQCAtMjc4NCw3ICsyNzkzLDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogCiAgICAgICAg
IEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0t
PnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVuZGVy
UGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHF1
YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7Cisg
ICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQu
Z2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdldFBh
c3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxs
TGF5ZXJzKGZyYW1lKTsKQEAgLTI4MjUsNyArMjgzNSw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTWVtb3J5TGltaXQpCiAKICAgICAgICAg
RVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclBhc3MsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+
cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFk
KiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQ
YXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShxdWFk
LT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOworICAg
ICAgICBDQ1JlbmRlclBhc3MqIHRhcmdldFBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmdl
dChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRhcmdldFBhc3Mt
PnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKQEAgLTI4NTgsNyArMjg2OSw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTWVtb3J5TGltaXQpCiAgICAgICAgIEVYUEVD
VF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CiAgICAg
ICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwogICAgICAgICBDQ1JlbmRlclBhc3NEcmF3
UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oZnJhbWUucmVu
ZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5jb250ZW50c0NoYW5nZWQoKSk7
CisgICAgICAgIENDUmVuZGVyUGFzcyogdGFyZ2V0UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5
SWQuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRhcmdl
dFBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCiAgICAgICAgIG15
SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTI5MDEsNyArMjkxMyw2IEBAIHN0cnVjdCBSZW5kZXJQYXNz
Q2FjaGVFbnRyeSB7CiAKIHN0cnVjdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhIDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSB7CiAgICAgc3RkOjptYXA8Y2hhciwgUmVu
ZGVyUGFzc0NhY2hlRW50cnk+IHJlbmRlclBhc3NDYWNoZTsKLSAgICBzdGQ6Om1hcDxjb25zdCBD
Q1JlbmRlclBhc3MqLCBjaGFyPiByZW5kZXJQYXNzSWQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ1Jl
bmRlclN1cmZhY2U+ID4gcmVuZGVyU3VyZmFjZVN0b3JlOwogICAgIFZlY3RvcjxPd25QdHI8Q0NM
YXllckltcGw+ID4gbGF5ZXJTdG9yZTsKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNo
YXJlZFF1YWRTdGF0ZTsKQEAgLTI5NzQsNyArMjk4NSw2IEBAIHN0YXRpYyB2b2lkIGNvbmZpZ3Vy
ZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVt
b3ZhCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MKICAgICBjaGFyIHJvb3RSZW5kZXJQYXNz
SWQgPSB0ZXN0U2NyaXB0WzBdOwogICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RSZW5kZXJQ
YXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCByb290UmVuZGVyUGFzc0lkKTsK
LSAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3Mq
LCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJlbmRlclBhc3NJZCkpOwogICAgIHRl
c3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRlclBhc3ND
YWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyb290UmVu
ZGVyUGFzcy5yZWxlYXNlKCkpKSk7CiAgICAgd2hpbGUgKCpjdXJyZW50Q2hhcikgewogICAgICAg
ICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFyWzBdOwpAQCAtMzAyMSwyNiArMzAzMSwy
MiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciog
dGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudENoYXIrKzsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBDQ1JlbmRl
clBhc3MqIHJlZlJlbmRlclBhc3NQdHI7Ci0KICAgICAgICAgICAgICAgICBpZiAodGVzdERhdGEu
cmVuZGVyUGFzc0NhY2hlLmZpbmQobmV3UmVuZGVyUGFzc0lkKSA9PSB0ZXN0RGF0YS5yZW5kZXJQ
YXNzQ2FjaGUuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1RleHR1cmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hlZFJlc291cmNlc0Zv
clJlbmRlclBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOwogCi0gICAgICAgICAgICAgICAgICAgIE93
blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3Mo
dGVzdERhdGEsIG5ld1JlbmRlclBhc3NJZCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZlJlbmRl
clBhc3NQdHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0
RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihy
ZWZSZW5kZXJQYXNzLmdldCgpLCBuZXdSZW5kZXJQYXNzSWQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVy
UGFzc0NhY2hlRW50cnk+KG5ld1JlbmRlclBhc3NJZCwgUmVuZGVyUGFzc0NhY2hlRW50cnkocmVm
UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQdHIgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGVb
bmV3UmVuZGVyUGFzc0lkXS5yZW5kZXJQYXNzOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8
Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRh
LCBuZXdSZW5kZXJQYXNzSWQpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQ
YXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4obmV3
UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyZW5kZXJQYXNzLnJlbGVhc2UoKSkp
KTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBJbnRSZWN0IHF1YWRSZWN0
ID0gSW50UmVjdCgwLCAwLCAxLCAxKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRz
Q2hhbmdlZFJlY3QgPSBjb250ZW50c0NoYW5nZWQgPyBxdWFkUmVjdCA6IEludFJlY3QoKTsKLSAg
ICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRl
clBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVh
ZFJlY3QsIHJlZlJlbmRlclBhc3NQdHIsIGlzUmVwbGljYSwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zKCksIDEsIGNvbnRlbnRzQ2hhbmdlZFJlY3QpOworICAgICAgICAgICAg
ICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVuZGVyUGFzc0RyYXdR
dWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBxdWFkUmVjdCwgbmV3
UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsKICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDQ1Rlc3RSZW5kZXJQYXNzKj4ocmVuZGVyUGFzcy5nZXQoKSktPmFwcGVuZFF1YWQocXVh
ZC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHRlc3REYXRh
LnJlbmRlclBhc3Nlcy5pbnNlcnQoMCwgcmVuZGVyUGFzcy5yZWxlYXNlKCkpOworICAgICAgICB0
ZXN0RGF0YS5yZW5kZXJQYXNzZXMuaW5zZXJ0KDAsIHJlbmRlclBhc3MuZ2V0KCkpOworICAgICAg
ICB0ZXN0RGF0YS5yZW5kZXJQYXNzZXNCeUlkLmFkZChyZW5kZXJQYXNzLT5pZCgpLCByZW5kZXJQ
YXNzLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAgICBj
dXJyZW50Q2hhcisrOwogICAgIH0KQEAgLTMwNTAsOSArMzA1Niw4IEBAIHZvaWQgZHVtcFJlbmRl
clBhc3NUZXN0RGF0YShjb25zdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwg
Y2hhciogYnVmCiB7CiAgICAgY2hhciogcG9zID0gYnVmZmVyOwogICAgIGZvciAoQ0NSZW5kZXJQ
YXNzTGlzdDo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBpdCA9IHRlc3REYXRhLnJlbmRlclBhc3Nl
cy5yYmVnaW4oKTsgaXQgIT0gdGVzdERhdGEucmVuZGVyUGFzc2VzLnJlbmQoKTsgKytpdCkgewot
ICAgICAgICBDQ1JlbmRlclBhc3MqIGN1cnJlbnRQYXNzID0gaXQtPmdldCgpOwotICAgICAgICBj
aGFyIHBhc3NJZCA9IHRlc3REYXRhLnJlbmRlclBhc3NJZC5maW5kKGN1cnJlbnRQYXNzKS0+c2Vj
b25kOwotICAgICAgICAqcG9zID0gcGFzc0lkOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IGN1cnJlbnRQYXNzID0gKml0OworICAgICAgICAqcG9zID0gY3VycmVudFBhc3MtPmlkKCk7CiAg
ICAgICAgIHBvcysrOwogCiAgICAgICAgIENDUXVhZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIHF1YWRM
aXN0SXRlcmF0b3IgPSBjdXJyZW50UGFzcy0+cXVhZExpc3QoKS5iZWdpbigpOwpAQCAtMzA2Mywx
NCArMzA2OCwxMCBAQCB2b2lkIGR1bXBSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgUmVuZGVyUGFz
c1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIqIGJ1ZgogICAgICAgICAgICAgICAgICpw
b3MgPSAncyc7CiAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6IHsKLSAgICAgICAgICAg
ICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc0RyYXdRdWFkID0gc3RhdGljX2Nh
c3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVhZCk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgQ0NSZW5kZXJQYXNzKiByZWZQYXNzID0gcmVuZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQ
YXNzKCk7Ci0gICAgICAgICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQ
YXNzSWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOwotICAgICAgICAgICAgICAgICpwb3MgPSByZWZQ
YXNzSWQ7CisgICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6CisgICAgICAg
ICAgICAgICAgKnBvcyA9IENDUmVuZGVyUGFzc0RyYXdRdWFkOjptYXRlcmlhbENhc3QoY3VycmVu
dFF1YWQpLT5yZW5kZXJQYXNzSWQoKTsKICAgICAgICAgICAgICAgICBwb3MrKzsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgKnBvcyA9ICd4JzsKICAgICAgICAgICAgICAgICBwb3MrKzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>