<?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>86269</bug_id>
          
          <creation_ts>2012-05-11 16:04:56 -0700</creation_ts>
          <short_desc>[chromium] Convert GraphicsLayerChromium to use WebLayer types</short_desc>
          <delta_ts>2012-05-17 11:40:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>piman</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622073</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 16:04:56 -0700</bug_when>
    <thetext>[chromium] Convert GraphicsLayerChromium to use WebLayer types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622078</commentid>
    <comment_count>1</comment_count>
      <attachid>141521</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 16:07:18 -0700</bug_when>
    <thetext>Created attachment 141521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622083</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-11 16:12:05 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622084</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-11 16:12:35 -0700</bug_when>
    <thetext>Attachment 141521 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/src/WebContentLayer.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622107</commentid>
    <comment_count>4</comment_count>
      <attachid>141521</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-11 16:35:48 -0700</bug_when>
    <thetext>Comment on attachment 141521
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        This converts GraphicsLayerChromium over to use WebLayer and WebContentLayer. The conversion is not completely

completely -&gt; complete

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:-353
&gt; -    bool m_pageScaleDirty;

Is this unrelated cleanup?  It doesn&apos;t seem to interact with the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622108</commentid>
    <comment_count>5</comment_count>
      <attachid>141521</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-11 16:36:31 -0700</bug_when>
    <thetext>Comment on attachment 141521
Patch

rs=me.  I looked through the patch and it looks reasonable.  Let me know if you&apos;d prefer a review from a Chromium Compositing expert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622110</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 16:38:28 -0700</bug_when>
    <thetext>Thanks Adam.  I&apos;d like Enne to take a look as well before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622119</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-11 16:53:06 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=141521&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:106
&gt; +        m_layer.clearClient();
&gt; +        m_layer.unwrap&lt;LayerChromium&gt;()-&gt;clearRenderSurface();
&gt;          // Primary layer may have at one point been m_layer. Be sure to reset
&gt;          // the delegate, just in case.
&gt; -        m_layer-&gt;setLayerAnimationDelegate(0);
&gt; +        m_layer.unwrap&lt;LayerChromium&gt;()-&gt;setLayerAnimationDelegate(0);

In terms of a smaller API, do we just need a LayerChromium::willBeDestroyed() that does all of these things? This is all just to clear out circular references, yeah?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622121</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 16:54:11 -0700</bug_when>
    <thetext>That&apos;s correct. Let me try willBeDestroyed() and see how it goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622144</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 17:35:09 -0700</bug_when>
    <thetext>I&apos;ve added a WebLayer::willBeDestroyed() and it works, but it feels a bit strange.  I think the issue here is that WebLayer is a value-type that wraps a WebPrivatePtr&lt;&gt; (aka RefPtr), so when a given WebLayer instance is destroyed it&apos;s not clear whether that is supposed to be the &quot;last&quot; WebLayer or not.  WebLayer::willBeDestroyed() is the caller saying basically &quot;I promise I&apos;m the last guy who cares about this layer, go ahead and shut down now&quot;.  We can&apos;t just rely on the d&apos;tor of the WebPrivatePtr&lt;&gt; object because the willBeDestroyed() call breaks reference cycles.

I&apos;m not entirely sure what to do here.  I&apos;ll put the patch with willBeDestroyed() up so you can see it, but something feels wrong.  I think my preference would be to make WebLayer have a WebPrivateOwnPtr&lt;&gt; and be non-copyable and make the users deal with how to copy/etc the WebLayer themselves.  That way ~WebLayer() would always mean that everyone who is interested in the WebLayer is gone and it would be free to break cycles on the impl.  That might make code using WebLayer a bit more awkward.

Another fix would be to get rid of the reference cycles in the impl (LayerChromium &lt;-&gt; RenderSurfaceChromium).  Last I looked that seemed non-trivial but I could take another crack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622146</commentid>
    <comment_count>10</comment_count>
      <attachid>141534</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 17:36:26 -0700</bug_when>
    <thetext>Created attachment 141534
with willBeDestroyed()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622148</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-11 17:39:44 -0700</bug_when>
    <thetext>Attachment 141534 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/src/WebContentLayer.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622155</commentid>
    <comment_count>12</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-11 17:48:19 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Another fix would be to get rid of the reference cycles in the impl (LayerChromium &lt;-&gt; RenderSurfaceChromium).  Last I looked that seemed non-trivial but I could take another crack.

I think one way to do it would be to make the renderSurfaceLayerList hold RenderSurfaces directly instead of owning layers. Then the list could own the surfaces and the layers could have raw pointers? Might be the layer iterator is about the only thing that would take effort to be changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622157</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-11 17:55:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve added a WebLayer::willBeDestroyed() and it works, but it feels a bit strange.  I think the issue here is that WebLayer is a value-type that wraps a WebPrivatePtr&lt;&gt; (aka RefPtr), so when a given WebLayer instance is destroyed it&apos;s not clear whether that is supposed to be the &quot;last&quot; WebLayer or not.  WebLayer::willBeDestroyed() is the caller saying basically &quot;I promise I&apos;m the last guy who cares about this layer, go ahead and shut down now&quot;.  We can&apos;t just rely on the d&apos;tor of the WebPrivatePtr&lt;&gt; object because the willBeDestroyed() call breaks reference cycles.

Ok, that&apos;s a great point--willBeDestroyed is an unfortunate name given that the GraphicsLayer is getting destroyed, but it&apos;s not guaranteed that the LayerChromiums are.  Thanks for putting it up; I&apos;m inclined to go with your patch #1 and solve this problem elsewhere.

&gt; I&apos;m not entirely sure what to do here.  I&apos;ll put the patch with willBeDestroyed() up so you can see it, but something feels wrong.  I think my preference would be to make WebLayer have a WebPrivateOwnPtr&lt;&gt; and be non-copyable and make the users deal with how to copy/etc the WebLayer themselves.  That way ~WebLayer() would always mean that everyone who is interested in the WebLayer is gone and it would be free to break cycles on the impl.  That might make code using WebLayer a bit more awkward.

I&apos;m intrigued by this idea, but am not convinced yet.  If WebLayer had a WebPrivateOwnPtr, then the entire LayerChromium tree would be owned by external classes rather than having some internal ownership over its children.  That sounds a little dodgy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622159</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 18:04:11 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; I&apos;m not entirely sure what to do here.  I&apos;ll put the patch with willBeDestroyed() up so you can see it, but something feels wrong.  I think my preference would be to make WebLayer have a WebPrivateOwnPtr&lt;&gt; and be non-copyable and make the users deal with how to copy/etc the WebLayer themselves.  That way ~WebLayer() would always mean that everyone who is interested in the WebLayer is gone and it would be free to break cycles on the impl.  That might make code using WebLayer a bit more awkward.
&gt; 
&gt; I&apos;m intrigued by this idea, but am not convinced yet.  If WebLayer had a WebPrivateOwnPtr, then the entire LayerChromium tree would be owned by external classes rather than having some internal ownership over its children.  That sounds a little dodgy.

Sorry, I was not clear here.  I intended that WebLayer would have a WebPrivateOwnPtr&lt;T&gt; where T is something like WebLayerImpl (sorry for the suffix collision) and WebLayerImpl would have a RefPtr&lt;LayerChromium&gt;.  Then the internals of the LayerChromium tree would all be refcounted and manage their own lifetimesl, but all of the outside world&apos;s links in would be via single-ownership pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622166</commentid>
    <comment_count>15</comment_count>
      <attachid>141534</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-05-11 18:13:41 -0700</bug_when>
    <thetext>Comment on attachment 141534
with willBeDestroyed()

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

&gt; Source/Platform/chromium/public/WebLayer.h:121
&gt; +    WEBKIT_EXPORT void setContentsScale(float);

Drive-by: I think we should make sure these are exposed at the right place. I agree that e.g. setPreserves3Dand setBackgroundColor belong here, but setBackgroundColor or setContentsScale look like they should belong in WebContentsLayer.
I have no idea what setIsDrawable means (and how it relates to WebContentLayer::setDrawsContent)

&gt; Source/WebKit/chromium/src/WebLayer.cpp:102
&gt; +    m_private-&gt;clearRenderSurface();

This doesn&apos;t outright bother me, since it&apos;s conservative anyway (we&apos;ll recreate the RS if we need to).

&gt; Source/WebKit/chromium/src/WebLayer.cpp:103
&gt; +    m_private-&gt;setLayerAnimationDelegate(0);

We could make that an explicit separate call, so that it&apos;s clear that whoever created the layer and set the delegate can also reset it. It /seems/ safe, but I&apos;m not very knowledgeable about the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622169</commentid>
    <comment_count>16</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-05-11 18:16:10 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve added a WebLayer::willBeDestroyed() and it works, but it feels a bit strange.  I think the issue here is that WebLayer is a value-type that wraps a WebPrivatePtr&lt;&gt; (aka RefPtr), so when a given WebLayer instance is destroyed it&apos;s not clear whether that is supposed to be the &quot;last&quot; WebLayer or not.  WebLayer::willBeDestroyed() is the caller saying basically &quot;I promise I&apos;m the last guy who cares about this layer, go ahead and shut down now&quot;.  We can&apos;t just rely on the d&apos;tor of the WebPrivatePtr&lt;&gt; object because the willBeDestroyed() call breaks reference cycles.
&gt; 
&gt; I&apos;m not entirely sure what to do here.  I&apos;ll put the patch with willBeDestroyed() up so you can see it, but something feels wrong.

I&apos;m not outraged by it. See my comments there, I think if we&apos;re clear about the semantics we&apos;re ok.
To break the cycles, we can also decide to do that when we remove it from the tree.

&gt;  I think my preference would be to make WebLayer have a WebPrivateOwnPtr&lt;&gt; and be non-copyable and make the users deal with how to copy/etc the WebLayer themselves.  That way ~WebLayer() would always mean that everyone who is interested in the WebLayer is gone and it would be free to break cycles on the impl.  That might make code using WebLayer a bit more awkward.

One of the problem is calls that return a WebLayer.

&gt; 
&gt; Another fix would be to get rid of the reference cycles in the impl (LayerChromium &lt;-&gt; RenderSurfaceChromium).  Last I looked that seemed non-trivial but I could take another crack.

That&apos;d be even better of course :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622186</commentid>
    <comment_count>17</comment_count>
      <attachid>141534</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-11 19:04:08 -0700</bug_when>
    <thetext>Comment on attachment 141534
with willBeDestroyed()

Attachment 141534 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12666687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623476</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-14 17:11:51 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 141534 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141534&amp;action=review
&gt; 
&gt; &gt; Source/Platform/chromium/public/WebLayer.h:121
&gt; &gt; +    WEBKIT_EXPORT void setContentsScale(float);
&gt; 
&gt; Drive-by: I think we should make sure these are exposed at the right place. I agree that e.g. setPreserves3Dand setBackgroundColor belong here, but setBackgroundColor or setContentsScale look like they should belong in WebContentsLayer.
&gt; I have no idea what setIsDrawable means (and how it relates to WebContentLayer::setDrawsContent)
&gt; 

I&apos;ve moved setDoubleSided() and setContentsScale() down to WebContentLayer and added a comment for each.  setIsDrawable() is the same thing as WebContentLayer::setDrawsContent(), so I&apos;ve moved that function up to WebLayer and updated callers to refer to setDrawsContent().

As for the shutdown issue for now I&apos;ve decided to punt and just unwrap to call clearRenderSurface()/setLayerAnimationDelegate().  We&apos;ll need to add WebLayer APIs for animation soon, when that happens it&apos;ll make sense to have an explicit call to clear the animation delegate.  I think we just need to fix the render surface RefPtr cycle anyway without an API change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623477</commentid>
    <comment_count>19</comment_count>
      <attachid>141819</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-14 17:14:21 -0700</bug_when>
    <thetext>Created attachment 141819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623479</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-14 17:16:49 -0700</bug_when>
    <thetext>Attachment 141819 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/src/WebContentLayer.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623480</commentid>
    <comment_count>21</comment_count>
      <attachid>141820</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-14 17:18:10 -0700</bug_when>
    <thetext>Created attachment 141820
diff to previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623508</commentid>
    <comment_count>22</comment_count>
      <attachid>141819</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-14 17:43:59 -0700</bug_when>
    <thetext>Comment on attachment 141819
Patch

R=me.  I&apos;m still good with punting the refcycle issue and landing this patch.  Thanks for the diff.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626296</commentid>
    <comment_count>23</comment_count>
      <attachid>141819</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-16 23:32:05 -0700</bug_when>
    <thetext>Comment on attachment 141819
Patch

Rejecting attachment 141819 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/12718463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626777</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-17 11:40:37 -0700</bug_when>
    <thetext>Committed r117469: &lt;http://trac.webkit.org/changeset/117469&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141521</attachid>
            <date>2012-05-11 16:07:18 -0700</date>
            <delta_ts>2012-05-11 17:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86269-20120511160717.patch</filename>
            <type>text/plain</type>
            <size>50322</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2ODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAzZTVjYWFkYTdjNWIy
ZWM2Mzg0MWY4OGM3YzYyYWY5MjRmMGY5MDEzLi4wY2RlYjE1Y2ZiOGVmMjBhNzc4MDU0MjEyM2Ji
NjM3ZjNmYzA2MjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNS0xMSAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBHcmFwaGljc0xheWVyQ2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc29tZSBu
ZXcgV2ViTGF5ZXIgLyBXZWJDb250ZW50TGF5ZXIgQVBJcyB0aGF0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSBuZWVkcy4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkNvbnRlbnRMYXllcik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkxheWVy
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6aXNOdWxs
KToKKyAgICAgICAgKFdlYkxheWVyKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6On5XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisgICAgICAgICAgICBGaXggYSBtZW1v
cnkgbGVhayAtIFdlYlByaXZhdGVPd25QdHI8PnMgaGF2ZSB0byBiZSBleHBsaWNpdGx5IGNsZWFy
ZWQuCisgICAgICAgIChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDUtMTEgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBDcmVhdGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBw
bGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUwYTIyZWFjN2RhOTk1MjU4OTYwYjFhNzE4N2FiMTRhYzkw
NjAxMjguLjAwM2E0MWRmZWUxY2Y0YWI2NDc5OTg4MDU2YTA2OTA3ZTA1NTZkMTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSw3NCBAQAogMjAxMi0wNS0xMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBHcmFwaGljc0xheWVy
Q2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQorCisgICAgICAgIFRoaXMgY29udmVydHMgR3Jh
cGhpY3NMYXllckNocm9taXVtIG92ZXIgdG8gdXNlIFdlYkxheWVyIGFuZCBXZWJDb250ZW50TGF5
ZXIuIFRoZSBjb252ZXJzaW9uIGlzIG5vdCBjb21wbGV0ZWx5CisgICAgICAgIGFzIHRoZSBXZWIq
TGF5ZXIgQVBJcyBhcmUgbm90IHlldCBxdWl0ZSBjb21wbGV0ZSBlbm91Z2ggdG8gdXNlIGV2ZXJ5
d2hlcmUsIGFuZCB0aGUgUGxhdGZvcm1MYXllciB0eXBlZGVmIGlzIG5vdAorICAgICAgICBjaGFu
Z2VkIGluIHRoaXMgcGF0Y2guIFRoZSBwbGFjZXMgd2hlcmUgd2UgaGF2ZSB0byBwdW5jaCBvdXQg
dGhyb3VnaCBBUEkgbGF5ZXIgYXJlIG1hcmtlZCBieQorICAgICAgICB1bndyYXA8KkxheWVyQ2hy
b21pdW0+KCkgY2FsbHMgYW5kIEZJWE1FJ3MgaW4gdGhlIFdlYipMYXllci5oIGZpbGVzLiAgVGhl
cmUgYXJlbid0IG1hbnkuCisKKyAgICAgICAgUmVmYWN0b3Igb25seSwgZXhpc3RpbmcgdGVzdHMg
YXBwbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9y
bWF0aW9uTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUZyb21QYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEZpbHRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1l
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06Omhvc3RMYXllckZvckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6bGF5ZXJGb3JQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVBbmNob3JQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNo
aWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlTWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklzRHJhd2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXR1cENvbnRlbnRzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpoYXNDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6Y29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnByaW1hcnlMYXllcik6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2hy
b21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorCisyMDEyLTA1LTExICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGlt
cGxlbWVudGF0aW9uIG9mIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEIGFuZCByZWxhdGVkIGZy
b20gV2ViS2l0L2Nocm9taXVtL3NyYyB0byBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MjU3
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGEwNGY3YzBiMDg4NDliMmJjYzBmZDk3
YjZhYmJlZGIzM2YyMTA2OC4uMTUyNGZlMmM3YWE3MmU0YTNiOGQzNWE4NjQ0YTk1OTQzNDgwZDYz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNiBAQAogMjAxMi0wNS0x
MSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJv
bWl1bV0gQ29udmVydCBHcmFwaGljc0xheWVyQ2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4pOgorICAgICAg
ICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVu
dExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgICog
c3JjL1dlYkxheWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldFN1YmxheWVy
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
OjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0SXNEcmF3YWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyOjpzZXREb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKworMjAxMi0wNS0xMSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBp
bXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCBhbmQgcmVsYXRlZCBm
cm9tIFdlYktpdC9jaHJvbWl1bS9zcmMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI1
NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRl
bnRMYXllci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5
ZXIuaAppbmRleCA2OTk0MThjMzQ5YmU5NjUzOWE4Y2E3Zjc2YTE1Y2MzNTM1YTQxZWNhLi4wMGNm
ZjJhZDNlNWFiYTQ0Zjc2NmNlZjNhNTIzMjMzZjNmOGNkNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTI5LDEwICsyOSwx
MyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYkxheWVyLmgiCiAKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRlbnRMYXllckNocm9taXVtOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNvbnRlbnRMYXllckNsaWVudDsKIGNsYXNzIFdlYkNv
bnRlbnRMYXllckltcGw7Ci1zdHJ1Y3QgV2ViRmxvYXRSZWN0OwogCiBjbGFzcyBXZWJDb250ZW50
TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgewogcHVibGljOgpAQCAtNTEsMTAgKzU0LDI0IEBAIHB1
YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwogICAg
IFdFQktJVF9FWFBPUlQgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKIAorICAgIC8vIENhbGxl
ZCB3aGVuIHRoZSBXZWJDb250ZW50TGF5ZXJDbGllbnQgaXMgZ29pbmcgYXdheSBhbmQgc2hvdWxk
IG5vdCBiZSB1c2VkLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBjbGVhckNsaWVudCgpOworCisg
ICAgLy8gU3R1ZmYgbmVlZGVkIGZvciBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLy8KKyAgICAv
LyBBbmltYXRpb25zIC0tLQorICAgIC8vIGFkZEFuaW1hdGlvbigpCisgICAgLy8gcGF1c2VBbmlt
YXRpb24oKQorICAgIC8vIHJlbW92ZUFuaW1hdGlvbigpCisgICAgLy8gc3VzcGVuZEFuaW1hdGlv
bnMoKQorICAgIC8vIHJlc3VtZUFuaW1hdGlvbnMoKQorICAgIC8vIHNldExheWVyQW5pbWF0aW9u
RGVsZWdhdGUoKQorICAgIC8vCisKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJD
b250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7
Ci0gICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvbnRlbnRMYXllckltcGw+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
bnRlbnRMYXllckltcGw+KCkgY29uc3Q7CisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJDb250
ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q29udGVu
dExheWVyQ2hyb21pdW0+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtPigpIGNvbnN0OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKaW5kZXggNDc0OTdkZTU3OTQ3ODBkNjJi
MjlhNDM3MjIxOWJkZjUxMThkYjdhMS4uZTJmNzljMmNhOWRlZDRlYmFlOWQ0NDNmMWIzYjhjYTYz
MzE4MzMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllci5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaApA
QCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIExheWVyQ2hyb21pdW07
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGaWx0ZXJPcGVyYXRpb25zOworY2xh
c3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBzdHJ1Y3QgV2ViRmxvYXRQb2ludDsKIHN0cnVj
dCBXZWJGbG9hdFJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTUxLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgICAgICBhc3NpZ24obGF5ZXIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQot
ICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9CisgICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KICAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNv
bnN0IFdlYkxheWVyJik7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJM
YXllciYpIGNvbnN0OwpAQCAtOTUsMTQgKzk2LDMzIEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQ
T1JUIFdlYkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKIAogICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBTa01hdHJpeDQ0IHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3Q7CiAKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFNr
TWF0cml4NDQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBTa01hdHJpeDQ0IHRy
YW5zZm9ybSgpIGNvbnN0OwogCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERlYnVnQm9yZGVy
Q29sb3IoY29uc3QgV2ViQ29sb3ImKTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RGVidWdC
b3JkZXJXaWR0aChmbG9hdCk7CiAKKyAgICAvLyBBUElzIHdlIG5lZWQ6CisgICAgLy8KKyAgICAv
LyBEZWJ1Z2dpbmcgLS0tCisgICAgLy8gc2V0RGVidWdOYW1lKCkKKyAgICAvLworICAgIC8vIExh
eWVyIHByb3BlcnRpZXMgLS0tCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldElzRHJhd2FibGUo
Ym9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXREb3VibGVTaWRlZChib29sKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvbG9yKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgLy8KKyAgICAvLworICAgIC8vIENs
ZWFudXAgLyB0cmVlIG1hbmlwdWxhdGlvbiAtLS0KKyAgICAvLyBjbGVhclJlbmRlclN1cmZhY2Uo
KQorICAgIC8vIHNldENoaWxkcmVuKCkKKwogICAgIC8vIENsZWFyIHRoZSBmaWx0ZXJzIGluIHVz
ZSBieSBwYXNzaW5nIGluIGEgbmV3bHkgaW5zdGFudGlhdGVkCiAgICAgLy8gV2ViRmlsdGVyT3Bl
cmF0aW9ucyBvYmplY3QuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEZpbHRlcnMoY29uc3Qg
V2ViRmlsdGVyT3BlcmF0aW9ucyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCmluZGV4IDkzM2I4NmExODNk
Yzk0YzYzMTM5NDAyOWFjMDk0ZjQ0MmQ4YTcxYTIuLmFlZWJlMWM0MTYxMzM5YTVlMjNiY2E0ZDU2
YjBhMWE2MWQwOWU3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTQ5LDYgKzQ5LDkgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB7CiBwdWJsaWM6
CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICB+V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSB7IHJlc2V0KCk7IH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKwog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMs
IGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5jcHAKaW5kZXggOGE0ZWEwMDhmOTFkYWIyMzU0NTY0ZjQ0Y2FjYzNk
MGVkOTM4MmNiYy4uYmM4NmE1ZTJlOWQ0ZWE1NjA4MTY2NjY2OTAwNDkwNGQ3ODA3MTNlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKQEAgLTUwLDEyICs1MCwxNSBA
QCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmCiB7CiB9CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKICAgICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3Jt
YXRpb25NYXRyaXgodCkpCiB7CiB9Ci0jZW5kaWYKKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KIAogV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj0oY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiB7CkBAIC00MTUsNyArNDE4LDYgQEAgdm9pZCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3VibGUgZikKICAgICBtX3ByaXZhdGUtPnNl
dEYoZik7CiB9CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KIFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG9XZWJDb3JlVHJhbnNmb3JtKCkgY29uc3QK
IHsKICAgICByZXR1cm4gKm1fcHJpdmF0ZS5nZXQoKTsKQEAgLTQ1NSw2ICs0NTcsNSBAQCBGbG9h
dFBvaW50IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCwgYm9vbCogY2xhbQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPnByb2plY3RQb2lu
dChwLCBjbGFtcGVkKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDk0MzE3MzUwNGJiNGQ1YTUyOWVh
M2M2ZmE1ZDU5ZTNiNGU2YmEyNzYuLjc3MzZiODUwZTJlOTRjMDQzOTk3NjY5M2YyMjM3OWJiZTAx
NDU3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTUsMTQg
KzU1LDIyIEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxpbmtIaWdo
bGlnaHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNrTWF0cml4
NDQuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxv
YXRQb2ludC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxw
dWJsaWMvV2ViU2l6ZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKK3VzaW5nIFdlYktpdDo6V2ViQ29udGVudExheWVyOwordXNpbmcgV2ViS2l0OjpX
ZWJMYXllcjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCkBA
IC03Nyw3ICs4NSw3IEBAIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5TZXRDaGlsZHJlbihm
YWxzZSkKICAgICAsIG1fcGFnZVNjYWxlQ2hhbmdlZChmYWxzZSkKIHsKLSAgICBtX2xheWVyID0g
Q29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2xheWVyID0gV2ViQ29u
dGVudExheWVyKENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUodGhpcykpOwogCiAgICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC05MCwyMiArOTgsMjEgQEAgR3JhcGhpY3NMYXll
ckNocm9taXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKIAogdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKG1fbGF5ZXIpIHsKLSAgICAg
ICAgbV9sYXllci0+Y2xlYXJEZWxlZ2F0ZSgpOwotICAgICAgICBtX2xheWVyLT5jbGVhclJlbmRl
clN1cmZhY2UoKTsKKyAgICBpZiAoIW1fbGF5ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9sYXll
ci5jbGVhckNsaWVudCgpOworICAgICAgICBtX2xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigp
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgLy8gUHJpbWFyeSBsYXllciBtYXkgaGF2
ZSBhdCBvbmUgcG9pbnQgYmVlbiBtX2xheWVyLiBCZSBzdXJlIHRvIHJlc2V0CiAgICAgICAgIC8v
IHRoZSBkZWxlZ2F0ZSwganVzdCBpbiBjYXNlLgotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFu
aW1hdGlvbkRlbGVnYXRlKDApOworICAgICAgICBtX2xheWVyLnVud3JhcDxMYXllckNocm9taXVt
PigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwogICAgIH0KKyAgICBpZiAoIW1fY29u
dGVudHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnVud3JhcDxMYXll
ckNocm9taXVtPigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIAotICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXIpCi0gICAgICAgIG1fY29udGVudHNMYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7Ci0K
LSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5j
bGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIuaXNOdWxsKCkp
IHsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+Y2xl
YXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIC8vIFByaW1hcnkgbGF5ZXIgbWF5IGhhdmUgc3dp
dGNoZWQgZnJvbSBtX2xheWVyIHRvIG1fdHJhbnNmb3JtTGF5ZXIuCiAgICAgICAgIC8vIEJlIHN1
cmUgdG8gcmVzZXQgdGhlIGRlbGVnYXRlLCBqdXN0IGluIGNhc2UuCi0gICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUoMCk7CisgICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdh
dGUoMCk7CiAgICAgfQogCiAgICAgaWYgKG1fbGlua0hpZ2hsaWdodCkKQEAgLTExNywxOSArMTI0
LDE5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQoKQogdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5hbWUpCiB7
CiAgICAgbV9uYW1lQmFzZSA9IGluTmFtZTsKLSAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9y
bWF0KCJHcmFwaGljc0xheWVyQ2hyb21pdW0oJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1fbGF5
ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpmb3Jt
YXQoIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9sYXll
ci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSwgdGhpcykgKyBpbk5hbWU7CiAgICAgR3JhcGhpY3NM
YXllcjo6c2V0TmFtZShuYW1lKTsKICAgICB1cGRhdGVOYW1lcygpOwogfQogCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMoKQogewotICAgIGlmIChtX2xheWVyKQotICAg
ICAgICBtX2xheWVyLT5zZXREZWJ1Z05hbWUoIkxheWVyIGZvciAiICsgbV9uYW1lQmFzZSk7Ci0g
ICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpCi0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldERl
YnVnTmFtZSgiVHJhbnNmb3JtTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsKLSAgICBpZiAobV9j
b250ZW50c0xheWVyKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldERlYnVnTmFtZSgiQ29u
dGVudHNMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAgIGlmICghbV9sYXllci5pc051bGwo
KSkKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0RGVidWdOYW1l
KCJMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5p
c051bGwoKSkKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+c2V0RGVidWdOYW1lKCJUcmFuc2Zvcm1MYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAg
IGlmICghbV9jb250ZW50c0xheWVyLmlzTnVsbCgpKQorICAgICAgICBtX2NvbnRlbnRzTGF5ZXIu
dW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldERlYnVnTmFtZSgiQ29udGVudHNMYXllciBmb3Ig
IiArIG1fbmFtZUJhc2UpOwogICAgIGlmIChtX2xpbmtIaWdobGlnaHQpCiAgICAgICAgIG1fbGlu
a0hpZ2hsaWdodC0+Y29udGVudExheWVyKCktPnNldERlYnVnTmFtZSgiTGlua0hpZ2hsaWdodCBm
b3IgIiArIG1fbmFtZUJhc2UpOwogfQpAQCAtMTgzLDcgKzE5MCw3IEBAIGJvb2wgR3JhcGhpY3NM
YXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBo
aWNzTGF5ZXIqCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlRnJvbVBhcmVudCgp
CiB7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIGxheWVyRm9y
UGFyZW50KCktPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBsYXllckZvclBhcmVudCgpLnJlbW92
ZUZyb21QYXJlbnQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQpAQCAtMjEzLDE0ICsyMjAsMTQgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY2xhbXBlZFNpemUpOwogICAgIHVwZGF0ZUxheWVyU2l6
ZSgpOwogCi0gICAgaWYgKG1fcGFnZVNjYWxlQ2hhbmdlZCAmJiBtX2xheWVyKQotICAgICAgICBt
X2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobV9wYWdlU2NhbGVDaGFuZ2VkICYm
ICFtX2xheWVyLmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyLmludmFsaWRhdGUoKTsKICAgICBt
X3BhZ2VTY2FsZUNoYW5nZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQog
ewotICAgIC8vIENhbGwgdGhpcyBtZXRob2QgZmlyc3QgdG8gYXNzaWduIGNvbnRlbnRzIHNjYWxl
IHRvIExheWVyQ2hyb21pdW0gc28gdGhlIHBhaW50ZXIgY2FuIGFwcGx5IHRoZSBzY2FsZSB0cmFu
c2Zvcm0uCisgICAgLy8gQ2FsbCB0aGlzIG1ldGhvZCBmaXJzdCB0byBhc3NpZ24gY29udGVudHMg
c2NhbGUgdG8gb3VyIGxheWVyIHNvIHRoZSBwYWludGVyIGNhbiBhcHBseSB0aGUgc2NhbGUgdHJh
bnNmb3JtLgogICAgIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsKIAogICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMjcyLDcgKzI3OSw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBjb250ZW50c1Zpc2libGUp
CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihj
b2xvcik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yLnJnYigp
KTsKIAogICAgIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvciA9IHRydWU7CiAgICAg
dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTI4MSwxOCArMjg4LDE4IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmNsZWFyQmFja2dyb3VuZENvbG9yKCkK
IHsKICAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOwotICAgIG1fY29u
dGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwor
ICAgIG1fY29udGVudHNMYXllci5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMy
PigwKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c09wYXF1
ZShib29sIG9wYXF1ZSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShv
cGFxdWUpOwotICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKKyAgICBt
X2xheWVyLnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAogYm9vbCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
IHsKLSAgICBtX2xheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIG1fbGF5ZXIudW53cmFw
PExheWVyQ2hyb21pdW0+KCktPnNldEZpbHRlcnMoZmlsdGVycyk7CiAgICAgcmV0dXJuIEdyYXBo
aWNzTGF5ZXI6OnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAKQEAgLTMwNCw0NyArMzExLDQ3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciog
bWFza0xheWVyKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihtYXNrTGF5ZXIpOwog
CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyQ2hyb21pdW0gPSBtX21hc2tMYXllciA/IG1f
bWFza0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotICAgIG1fbGF5ZXItPnNldE1hc2tMYXll
cihtYXNrTGF5ZXJDaHJvbWl1bSk7CisgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+c2V0TWFza0xheWVyKG1hc2tMYXllckNocm9taXVtKTsKIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZpc2libGUpCiB7CiAgICAg
R3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZpc2libGUpOwotICAgIG1fbGF5
ZXItPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICBtX2xheWVyLnNl
dERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBmbG9hdCBjbGFt
cGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAuMGYpOwogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAgIHByaW1hcnlMYXllcigpLT5z
ZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIHByaW1hcnlMYXllcigpLnNldE9wYWNpdHkob3BhY2l0
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRSZXBsaWNhdGVkQnlMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIGxh
eWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXllcik7
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwotICAgIExh
eWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyQ2hyb21pdW0gPyBsYXllckNocm9taXVt
LT5wcmltYXJ5TGF5ZXIoKSA6IDA7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFJlcGxpY2FMYXll
cihyZXBsaWNhTGF5ZXIpOworICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVy
Q2hyb21pdW0gPyBsYXllckNocm9taXVtLT5wcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJv
bWl1bT4oKSA6IDA7CisgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCkt
PnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYgKG1fY29udGVu
dHNMYXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9jb250ZW50c0xheWVy
LmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRz
RGlzcGxheSgpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICBtX2xheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbV9sYXll
ci0+c2V0TmVlZHNEaXNwbGF5UmVjdChyZWN0KTsKKyAgICAgICAgbV9sYXllci5pbnZhbGlkYXRl
UmVjdChyZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMzYwLDIyICszNjcsMjIgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAg
ICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAh
PSBDb250ZW50c0xheWVyRm9ySW1hZ2UpIHsKKyAgICAgICAgaWYgKG1fY29udGVudHNMYXllci5p
c051bGwoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JJbWFn
ZSkgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gaW1hZ2VMYXllciA9
IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRz
TGF5ZXIoaW1hZ2VMYXllci5nZXQoKSk7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJw
b3NlID0gQ29udGVudHNMYXllckZvckltYWdlOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5
ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIuZ2V0
KCkpOworICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5ZXIgPSBzdGF0aWNfY2Fz
dDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExheWVyQ2hyb21p
dW0+KCkpOwogICAgICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhpbWFnZSk7CiAgICAgICAg
IGltYWdlTGF5ZXItPnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmICFpbWFnZS0+
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgaWYg
KCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdl
ZCA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIFRoZSBvbGQgY29udGVudHMgbGF5ZXIgd2lsbCBi
ZSByZW1vdmVkIHZpYSB1cGRhdGVDaGlsZExpc3QuCi0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5
ZXIgPSAwOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLnJlc2V0KCk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTM4NywxOCArMzk0LDE4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCiB7CiAg
ICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAocGxhdGZvcm1MYXllcikg
ewotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyLmdldCgpICE9IHBsYXRmb3JtTGF5ZXIpIHsK
KyAgICAgICAgaWYgKG1fY29udGVudHNMYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSAhPSBw
bGF0Zm9ybUxheWVyKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIocGxhdGZvcm1M
YXllcik7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXll
ckZvckNhbnZhczsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051
bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAogICAgICAgICAg
ICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZUNo
aWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAgICAgICAgICBt
X2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDA4LDE4ICs0
MTUsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMo
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICByZXR1cm4gcHJpbWFyeUxh
eWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0
aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3Jv
dXBJZCgpLCB0aW1lT2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJv
bWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKyAgICByZXR1cm4gcHJp
bWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlvbih2YWx1ZXMs
IGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSks
IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgcHJpbWFyeUxheWVyKCkt
PnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1l
T2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cGF1
c2VBbmltYXRpb24obWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIHRpbWVPZmZz
ZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+cmVtb3Zl
QW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKKyAgICBwcmlt
YXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVtb3ZlQW5pbWF0aW9uKG1hcEFu
aW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQpAQCAtNDI3
LDEyICs0MzQsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQogICAgIC8vIHx3YWxsQ2xvY2tUaW1lfCBpcyBpbiB0
aGUgd3JvbmcgdGltZSBiYXNlLiBOZWVkIHRvIGNvbnZlcnQgaGVyZS4KICAgICAvLyBGSVhNRTog
ZmluZCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMuCiAgICAgZG91YmxlIG1vbm90b25p
Y1RpbWUgPSB3YWxsQ2xvY2tUaW1lICsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBj
dXJyZW50VGltZSgpOwotICAgIHByaW1hcnlMYXllcigpLT5zdXNwZW5kQW5pbWF0aW9ucyhtb25v
dG9uaWNUaW1lKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+
c3VzcGVuZEFuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+cmVz
dW1lQW5pbWF0aW9ucyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgcHJpbWFy
eUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnJlc3VtZUFuaW1hdGlvbnMobW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6YWRkTGlua0hpZ2hsaWdodChjb25zdCBQYXRoJiBwYXRoKQpAQCAtNDUzLDE4ICs0NjAsMTgg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9y
bUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwogICAg
IGlmIChsYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8fCBtX2Nv
bnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JWaWRlbykgeworICAgICAgICBp
ZiAobV9jb250ZW50c0xheWVyLmlzTnVsbCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0g
Q29udGVudHNMYXllckZvclZpZGVvKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIo
bGF5ZXIpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5
ZXJGb3JWaWRlbzsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051
bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAogICAgICAgICAg
ICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZUNo
aWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAgICAgICAgICBt
X2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDcyLDM3ICs0
NzksMzcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQ
bGF0Zm9ybUxheWVyKiBsYXllcikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKLVBs
YXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aG9zdExheWVyRm9yQ2hpbGRyZW4o
KSBjb25zdAorV2ViTGF5ZXIgR3JhcGhpY3NMYXllckNocm9taXVtOjpob3N0TGF5ZXJGb3JDaGls
ZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9y
bUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXll
ci5pc051bGwoKSA/IG1fbGF5ZXIgOiAgbV90cmFuc2Zvcm1MYXllcjsKIH0KIAotUGxhdGZvcm1M
YXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpsYXllckZvclBhcmVudCgpIGNvbnN0CitXZWJM
YXllciBHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyRm9yUGFyZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xh
eWVyLmdldCgpOworICAgIHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpID8gbV9sYXll
ciA6ICBtX3RyYW5zZm9ybUxheWVyOwogfQogCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBwcmltYXJ5TGF5
ZXIoKTsKKyAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgbV9sYXllci0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9sYXllci5z
ZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IucmdiKCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXll
ci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOworICAgICAgICBt
X2xheWVyLnNldEJhY2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgYm9yZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewot
ICAgICAgICBtX2xheWVyLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9yKTsKLSAgICAgICAgbV9s
YXllci0+c2V0RGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CisgICAgICAgIG1fbGF5ZXIu
c2V0RGVidWdCb3JkZXJDb2xvcihjb2xvci5yZ2IoKSk7CisgICAgICAgIG1fbGF5ZXIuc2V0RGVi
dWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9sYXll
ci0+c2V0RGVidWdCb3JkZXJDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKLSAgICAgICAg
bV9sYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aCgwKTsKKyAgICAgICAgbV9sYXllci5zZXREZWJ1
Z0JvcmRlckNvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOworICAgICAgICBtX2xheWVyLnNl
dERlYnVnQm9yZGVyV2lkdGgoMCk7CiAgICAgfQogfQogCkBAIC01MTAsMTQgKzUxNywxNCBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KCkKIHsKICAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbmV3Q2hpbGRyZW47CiAKLSAgICBpZiAobV90cmFu
c2Zvcm1MYXllcikgeworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5pc051bGwoKSkgewogICAg
ICAgICAvLyBBZGQgdGhlIHByaW1hcnkgbGF5ZXIgZmlyc3QuIEV2ZW4gaWYgd2UgaGF2ZSBuZWdh
dGl2ZSB6LW9yZGVyIGNoaWxkcmVuLCB0aGUgcHJpbWFyeSBsYXllciBhbHdheXMgY29tZXMgYmVo
aW5kLgotICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9sYXllci5nZXQoKSk7Ci0gICAgfSBl
bHNlIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKG1f
bGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpOworICAgIH0gZWxzZSBpZiAoIW1fY29udGVu
dHNMYXllci5pc051bGwoKSkgewogICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSBjb250ZW50cyBs
YXllciBpbiB0aGUgY29ycmVjdCBvcmRlciB3aXRoIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4u
CiAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgY2F1c2UgdmlzaWJsZSByZW5kZXJpbmcgaXNzdWVz
IGJlY2F1c2UgY3VycmVudGx5IGNvbnRlbnRzIGxheWVycyBhcmUgb25seSB1c2VkCiAgICAgICAg
IC8vIGZvciByZXBsYWNlZCBlbGVtZW50cyB0aGF0IGRvbid0IGhhdmUgY2hpbGRyZW4uCi0gICAg
ICAgIG5ld0NoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAgICAgICBu
ZXdDaGlsZHJlbi5hcHBlbmQobV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigp
KTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVy
cyA9IGNoaWxkcmVuKCk7CkBAIC01MjUsNyArNTMyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNoaWxkTGlzdCgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1D
aGlsZHJlbjsgKytpKSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogY3VyQ2hpbGQg
PSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGlsZExheWVyc1tpXSk7CiAK
LSAgICAgICAgTGF5ZXJDaHJvbWl1bSogY2hpbGRMYXllciA9IGN1ckNoaWxkLT5sYXllckZvclBh
cmVudCgpOworICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVyID0gY3VyQ2hpbGQtPmxh
eWVyRm9yUGFyZW50KCkudW53cmFwPExheWVyQ2hyb21pdW0+KCk7CiAgICAgICAgIG5ld0NoaWxk
cmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKQEAgLTUzNSwxNyArNTQyLDE3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDaGlsZExpc3QoKQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAgIG5ld0NoaWxk
cmVuW2ldLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikg
ewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbik7Cisg
ICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7CisgICAgICAgIG1fdHJhbnNmb3Jt
TGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldENoaWxkcmVuKG5ld0NoaWxkcmVuKTsK
IAotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgIGlmICghbV9jb250ZW50
c0xheWVyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3Jt
IGxheWVyLCB0aGVuIHRoZSBjb250ZW50cyBsYXllciBpcyBwYXJlbnRlZCBpbiB0aGUKICAgICAg
ICAgICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNoaWxkIG9mIHRoZSB0
cmFuc2Zvcm0gbGF5ZXIpLgotICAgICAgICAgICAgbV9sYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgIG1fbGF5ZXItPmFkZENoaWxkKG1fY29udGVudHNMYXllcik7CisgICAg
ICAgICAgICBtX2xheWVyLnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAgICAgICBtX2xheWVy
LmFkZENoaWxkKG1fY29udGVudHNMYXllcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgbV9sYXllci0+c2V0Q2hpbGRyZW4obmV3Q2hpbGRyZW4pOworICAgICAgICBtX2xheWVyLnVu
d3JhcDxMYXllckNocm9taXVtPigpLT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbik7CiB9CiAKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKQEAgLTU1NCwy
MCArNTYxLDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclBvc2l0
aW9uKCkKICAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkgKyBtX2Fu
Y2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgp
KTsKIAotICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKKyAg
ICBwcmltYXJ5TGF5ZXIoKS5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKIH0KIAogdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSgpCiB7CiAgICAgSW50U2l6ZSBs
YXllclNpemUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYgKG1fdHJh
bnNmb3JtTGF5ZXIpIHsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91bmRzKGxheWVy
U2l6ZSk7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7CisgICAgICAgIG1f
dHJhbnNmb3JtTGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgICAgIC8vIFRoZSBhbmNo
b3Igb2YgdGhlIGNvbnRlbnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUsIDAuNSwgc28gdGhlIHBv
c2l0aW9uIGlzIGNlbnRlci1yZWxhdGl2ZS4KICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2lu
dChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgICAgICBtX2xh
eWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CisgICAgICAgIG1fbGF5ZXIuc2V0UG9zaXRp
b24oY2VudGVyUG9pbnQpOwogICAgIH0KIAotICAgIG1fbGF5ZXItPnNldEJvdW5kcyhsYXllclNp
emUpOworICAgIG1fbGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAKICAgICAvLyBOb3RlIHRo
YXQgd2UgZG9uJ3QgcmVzaXplIG1fY29udGVudHNMYXllci4gSXQncyB1cCB0aGUgY2FsbGVyIHRv
IGRvIHRoYXQuCiAKQEAgLTU3OCwzNiArNTg1LDM2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVMYXllclNpemUoKQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQW5jaG9yUG9pbnQoKQogewotICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50LnkoKSkpOwotICAgIHBy
aW1hcnlMYXllcigpLT5zZXRBbmNob3JQb2ludFoobV9hbmNob3JQb2ludC56KCkpOworICAgIHBy
aW1hcnlMYXllcigpLnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2ludC54KCks
IG1fYW5jaG9yUG9pbnQueSgpKSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0QW5jaG9yUG9pbnRa
KG1fYW5jaG9yUG9pbnQueigpKTsKIAogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRyYW5zZm9ybSgpCiB7Ci0gICAgcHJp
bWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CisgICAgcHJpbWFyeUxheWVy
KCkuc2V0VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zv
cm0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkcmVuVHJh
bnNmb3JtKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9j
aGlsZHJlblRyYW5zZm9ybSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0U3VibGF5ZXJUcmFuc2Zv
cm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX2NoaWxkcmVuVHJhbnNmb3JtKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1RvQm91bmRzKCkK
IHsKLSAgICBtX2xheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CisgICAg
bV9sYXllci5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllclByZXNlcnZlczNEKCkKIHsKLSAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zv
cm1MYXllcikgeworICAgIGlmIChtX3ByZXNlcnZlczNEICYmIG1fdHJhbnNmb3JtTGF5ZXIuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCi0gICAgICAg
IG1fdHJhbnNmb3JtTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICAgICAgbV90
cmFuc2Zvcm1MYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7Ci0gICAgICAgIG1fdHJhbnNmb3Jt
TGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihtX2xheWVyLT5yZWxlYXNlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gV2Vi
TGF5ZXI6OmNyZWF0ZSgpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnNldFByZXNlcnZlczNE
KHRydWUpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVtPigp
LT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOworICAgICAgICBtX3RyYW5zZm9ybUxh
eWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
bV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVsZWFzZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcigpKTsKIAogICAgICAgICAvLyBDb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoaXMgbGF5
ZXIuCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKQEAgLTYxNiwzNSArNjIzLDM0IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNEKCkKICAg
ICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgICAgIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3Jt
KCk7CiAKLSAgICAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX3NpemUud2lk
dGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpKTsKKyAgICAgICAgbV9sYXllci5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdo
dCgpIC8gMi4wZikpOwogCi0gICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoMC41ZiwgMC41ZikpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsK
LSAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKKyAgICAgICAgbV9sYXll
ci5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKKyAgICAgICAgbV9sYXll
ci5zZXRUcmFuc2Zvcm0oU2tNYXRyaXg0NCgpKTsKIAogICAgICAgICAvLyBTZXQgdGhlIG9sZCBs
YXllciB0byBvcGFjaXR5IG9mIDEuIEZ1cnRoZXIgZG93biB3ZSB3aWxsIHNldCB0aGUgb3BhY2l0
eSBvbiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX2xheWVyLT5zZXRPcGFjaXR5KDEp
OworICAgICAgICBtX2xheWVyLnNldE9wYWNpdHkoMSk7CiAKLSAgICAgICAgbV9sYXllci0+c2V0
Q29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKCkpOworICAgICAgICBtX2xheWVyLnNldENvbnRl
bnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKIAogICAgICAgICAvLyBNb3ZlIHRoaXMgbGF5ZXIg
dG8gYmUgYSBjaGlsZCBvZiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBpZiAobV9sYXll
ci0+cGFyZW50KCkpCi0gICAgICAgICAgICBtX2xheWVyLT5wYXJlbnQoKS0+cmVwbGFjZUNoaWxk
KG1fbGF5ZXIuZ2V0KCksIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkpOwotICAgICAgICBtX3RyYW5z
Zm9ybUxheWVyLT5hZGRDaGlsZChtX2xheWVyLmdldCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVy
LnBhcmVudCgpLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9sYXllci5wYXJlbnQoKS5yZXBsYWNl
Q2hpbGQobV9sYXllciwgbV90cmFuc2Zvcm1MYXllcik7CisgICAgICAgIG1fdHJhbnNmb3JtTGF5
ZXIuYWRkQ2hpbGQobV9sYXllcik7CiAKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7Ci0gICAg
fSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiBtX3RyYW5zZm9ybUxheWVyKSB7CisgICAgfSBl
bHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zvcm1MYXllci5pc051bGwoKSkgewog
ICAgICAgICAvLyBSZWxhY2UgdGhlIHRyYW5zZm9ybUxheWVyIGluIHRoZSBwYXJlbnQgd2l0aCB0
aGlzIGxheWVyLgotICAgICAgICBtX2xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgICAg
IGlmIChtX3RyYW5zZm9ybUxheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1fdHJhbnNmb3Jt
TGF5ZXItPnBhcmVudCgpLT5yZXBsYWNlQ2hpbGQobV90cmFuc2Zvcm1MYXllci5nZXQoKSwgbV9s
YXllci5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXIucmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAg
ICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIucGFyZW50KCkuaXNOdWxsKCkpCisgICAgICAgICAgICBt
X3RyYW5zZm9ybUxheWVyLnBhcmVudCgpLnJlcGxhY2VDaGlsZChtX3RyYW5zZm9ybUxheWVyLCBt
X2xheWVyKTsKIAotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRo
aXMpOwotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIobV90cmFu
c2Zvcm1MYXllci0+cmVsZWFzZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsKKyAgICAgICAg
bV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZSh0aGlzKTsKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKG1fdHJhbnNmb3JtTGF5ZXIudW53cmFwPExheWVyQ2hyb21p
dW0+KCktPnJlbGVhc2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAKICAgICAgICAgLy8g
UmVsZWFzZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5z
ZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0g
MDsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0
TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci5yZXNl
dCgpOwogCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICAgICAgdXBkYXRlTGF5
ZXJTaXplKCk7CkBAIC02NTUsOCArNjYxLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKICAg
ICB9CiAKLSAgICBtX2xheWVyLT5zZXRQcmVzZXJ2ZXMzRChtX3ByZXNlcnZlczNEKTsKLSAgICBw
cmltYXJ5TGF5ZXIoKS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIG1fbGF5ZXIuc2V0UHJl
c2VydmVzM0QobV9wcmVzZXJ2ZXMzRCk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0T3BhY2l0eSht
X29wYWNpdHkpOwogICAgIHVwZGF0ZU5hbWVzKCk7CiB9CiAKQEAgLTY2NywyNyArNjczLDI3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklzRHJhd2FibGUoKQogICAg
IC8vIGZsYWdzIGFyZSBjb21iaW5lZCBoZXJlLiBtX2NvbnRlbnRzTGF5ZXIgc2hvdWxkbid0IHJl
Y2VpdmUgdGhlIGRyYXdzQ29udGVudCBmbGFnCiAgICAgLy8gc28gaXQgaXMgb25seSBnaXZlbiBj
b250ZW50c1Zpc2libGUuCiAKLSAgICBtX2xheWVyLT5zZXRJc0RyYXdhYmxlKG1fZHJhd3NDb250
ZW50ICYmIG1fY29udGVudHNWaXNpYmxlKTsKKyAgICBtX2xheWVyLnNldElzRHJhd2FibGUobV9k
cmF3c0NvbnRlbnQgJiYgbV9jb250ZW50c1Zpc2libGUpOwogCi0gICAgaWYgKG1fY29udGVudHNM
YXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRJc0RyYXdhYmxlKG1fY29udGVudHNW
aXNpYmxlKTsKKyAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9j
b250ZW50c0xheWVyLnNldElzRHJhd2FibGUobV9jb250ZW50c1Zpc2libGUpOwogCiAgICAgaWYg
KG1fZHJhd3NDb250ZW50KQotICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMo
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyQmFja2dyb3Vu
ZENvbG9yKCkKIHsKLSAgICBpZiAoIW1fY29udGVudHNMYXllcikKKyAgICBpZiAobV9jb250ZW50
c0xheWVyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBuZXZlciBjcmVh
dGUgdGhlIGNvbnRlbnRzIGxheWVyIGp1c3QgZm9yIGJhY2tncm91bmQgY29sb3IgeWV0LgogICAg
IGlmIChtX2JhY2tncm91bmRDb2xvclNldCkKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRC
YWNrZ3JvdW5kQ29sb3IobV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBtX2NvbnRlbnRzTGF5
ZXIuc2V0QmFja2dyb3VuZENvbG9yKG1fYmFja2dyb3VuZENvbG9yLnJnYigpKTsKICAgICBlbHNl
Ci0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0
PFJHQkEzMj4oMCkpOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0QmFja2dyb3VuZENvbG9y
KHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCkBAIC02OTcsNDggKzcwMyw0OCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCiAKIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1JlY3QoKQogewotICAgIGlmICghbV9jb250ZW50
c0xheWVyKQorICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX2NvbnRl
bnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSkpOwotICAgIG1fY29udGVudHNMYXllci0+
c2V0Qm91bmRzKEludFNpemUobV9jb250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0UG9zaXRpb24oRmxvYXRQb2ludCht
X2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSkpOworICAgIG1fY29udGVudHNM
YXllci5zZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRz
UmVjdC5oZWlnaHQoKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNTY2FsZSgpCiB7CiAgICAgLy8gSWYgcGFnZSBzY2FsZSBpcyBhbHJlYWR5IGFwcGxp
ZWQgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gYXBwbHkgaXQgYWdhaW4uCi0gICAgaWYgKGFwcGxp
ZXNQYWdlU2NhbGUoKSB8fCAhbV9sYXllcikKKyAgICBpZiAoYXBwbGllc1BhZ2VTY2FsZSgpIHx8
IG1fbGF5ZXIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXItPnNldENv
bnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKKyAgICBtX2xheWVyLnNldENvbnRlbnRzU2Nh
bGUoY29udGVudHNTY2FsZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKQogewotICAgIGlm
IChjb250ZW50c0xheWVyID09IG1fY29udGVudHNMYXllcikKKyAgICBpZiAoY29udGVudHNMYXll
ciA9PSBtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgbV9jb250ZW50c0xh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgICAgIG1fY29udGVudHNMYXllciA9IDA7Cisg
ICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xh
eWVyLnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnJlc2V0KCk7
CiAgICAgfQogCiAgICAgaWYgKGNvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgbV9jb250ZW50c0xh
eWVyID0gY29udGVudHNMYXllcjsKKyAgICAgICAgbV9jb250ZW50c0xheWVyID0gV2ViTGF5ZXIo
Y29udGVudHNMYXllcik7CiAKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQoMCwgMCkpOwogCiAgICAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byB1
cGRhdGUgc2V0SXNEcmF3YWJsZSBhcyBzb29uIGFzIHdlIHJlY2VpdmUgdGhlIG5ldyBjb250ZW50
c0xheWVyLCBmb3IKICAgICAgICAgLy8gdGhlIGNvcnJlY3RuZXNzIG9mIGVhcmx5IGV4aXQgY29u
ZGl0aW9ucyBpbiBzZXREcmF3c0NvbnRlbnQoKSBhbmQgc2V0Q29udGVudHNWaXNpYmxlKCkuCi0g
ICAgICAgIG1fY29udGVudHNMYXllci0+c2V0SXNEcmF3YWJsZShtX2NvbnRlbnRzVmlzaWJsZSk7
CisgICAgICAgIG1fY29udGVudHNMYXllci5zZXRJc0RyYXdhYmxlKG1fY29udGVudHNWaXNpYmxl
KTsKIAogICAgICAgICAvLyBJbnNlcnQgdGhlIGNvbnRlbnQgbGF5ZXIgZmlyc3QuIFZpZGVvIGVs
ZW1lbnRzIHJlcXVpcmUgdGhpcywgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAgLy8gc2hhZG93
IGNvbnRlbnQgdGhhdCBtdXN0IGRpc3BsYXkgaW4gZnJvbnQgb2YgdGhlIHZpZGVvLgotICAgICAg
ICBtX2xheWVyLT5pbnNlcnRDaGlsZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCksIDApOworICAgICAg
ICBtX2xheWVyLmluc2VydENoaWxkKG1fY29udGVudHNMYXllciwgMCk7CiAKICAgICAgICAgaWYg
KHNob3dEZWJ1Z0JvcmRlcnMoKSkgewotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRE
ZWJ1Z0JvcmRlckNvbG9yKENvbG9yKDAsIDAsIDEyOCwgMTgwKSk7Ci0gICAgICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXItPnNldERlYnVnQm9yZGVyV2lkdGgoMSk7CisgICAgICAgICAgICBtX2NvbnRl
bnRzTGF5ZXIuc2V0RGVidWdCb3JkZXJDb2xvcihDb2xvcigwLCAwLCAxMjgsIDE4MCkucmdiKCkp
OworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLnNldERlYnVnQm9yZGVyV2lkdGgoMSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDhjZTFmYzQ4ZTcxZGU2ZDkyMzRjNmY4MjgxZmM4
ZGNkMzA2ZTc4YjkuLjExZTY3YTE2MjJkZmViOWUxNGUwMDRhOTMzYWM0NDZhZWMwN2YzNjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNCwxMSArMzQsMTIgQEAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlLmgiCiAKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29udGVudExh
eWVyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTgsNyArOTksNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQorICAg
IHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gIW1fY29udGVu
dHNMYXllci5pc051bGwoKTsgfQogCiAgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1h
dGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCk7CkBAIC0xMjMsMTYgKzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSBmaW5pc2hUaW1lKTsKIAogICAgIC8vIEV4
cG9zZWQgZm9yIHRlc3RzLgotICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6OldlYkxheWVy
IGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CiAKLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBpbnQ+IEFuaW1hdGlvbklkTWFwOwotCi0gICAgTGF5ZXJDaHJvbWl1
bSogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
PyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQotICAgIExheWVyQ2hy
b21pdW0qIGhvc3RMYXllckZvckNoaWxkcmVuKCkgY29uc3Q7Ci0gICAgTGF5ZXJDaHJvbWl1bSog
bGF5ZXJGb3JQYXJlbnQoKSBjb25zdDsKKyAgICBXZWJLaXQ6OldlYkxheWVyIHByaW1hcnlMYXll
cigpIGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpID8gbV9sYXllciA6
IG1fdHJhbnNmb3JtTGF5ZXI7IH0KKyAgICBXZWJLaXQ6OldlYkxheWVyIGhvc3RMYXllckZvckNo
aWxkcmVuKCkgY29uc3Q7CisgICAgV2ViS2l0OjpXZWJMYXllciBsYXllckZvclBhcmVudCgpIGNv
bnN0OwogCiAgICAgdm9pZCB1cGRhdGVOYW1lcygpOwogICAgIHZvaWQgdXBkYXRlQ2hpbGRMaXN0
KCk7CkBAIC0xNTgsMTAgKzE1Nyw5IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9uYW1lQmFz
ZTsKIAotICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKLSAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gbV9jb250ZW50c0xheWVyOwotICAgIFJlZlB0cjxMaW5rSGlnaGxpZ2h0PiBtX2xpbmtI
aWdobGlnaHQ7CisgICAgV2ViS2l0OjpXZWJDb250ZW50TGF5ZXIgbV9sYXllcjsKKyAgICBXZWJL
aXQ6OldlYkxheWVyIG1fdHJhbnNmb3JtTGF5ZXI7CisgICAgV2ViS2l0OjpXZWJMYXllciBtX2Nv
bnRlbnRzTGF5ZXI7CiAKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAg
Tm9Db250ZW50c0xheWVyID0gMCwKQEAgLTE3NSw2ICsxNzMsOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pblNldENoaWxkcmVuOwogICAgIGJvb2wgbV9wYWdlU2NhbGVDaGFuZ2VkOwogCisgICAg
UmVmUHRyPExpbmtIaWdobGlnaHQ+IG1fbGlua0hpZ2hsaWdodDsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIGludD4gQW5pbWF0aW9uSWRNYXA7CiAgICAgQW5pbWF0aW9uSWRNYXAgbV9h
bmltYXRpb25JZE1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhNTkwYmQyYzMxYTA1
YjU0YjVlZjhiMTVjYmFkOTg1NzA1ZDIxN2U1Li43NTVhN2RhOTFlNjQ1YjJhZjA3ODkxZjg0MjQw
ZmEyYWEzZmJjMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNTAsOCArMzUwLDYgQEAgcHJp
dmF0ZToKICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKICAgICBmbG9hdCBtX2Nv
bnRlbnRzU2NhbGU7CiAKLSAgICBib29sIG1fcGFnZVNjYWxlRGlydHk7Ci0KICAgICBDQ0xheWVy
QW5pbWF0aW9uRGVsZWdhdGUqIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA4MDFhODg3NGZkOWYzMjJiZmY5NTc4NTNhZDE0MGUx
NTU1YzFiMTM2Li5kYWFkZTA2ZjI4OGY0YWU2ZTFlNjY0Y2UzOWJhMWU2Nzg5YWM2MDk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02MTAsOCArNjEwLDggQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJQYXNzd29yZEZvcm1VdGlscy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBlcmZv
cm1hbmNlLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlBsdWdpbkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlBsdWdpbkxpc3RCdWlsZGVySW1wbC5oJywKQEAgLTY1MSw2ICs2NTEsNyBAQAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1wbC5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVGV4dFJ1bi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTExvYWRUaW1pbmcuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCA1MjkwZTJmMzVhYjEyYjhh
NzU2MjIwMDBmYTE5MzMwYTg5MzZkOTQzLi4xNjViMmQyODk1MzQ3NzNiNDJiMzMzOThmMTZmNDNl
YTgzMzc4MDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllci5jcHAKQEAgLTI0LDExICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViQ29udGVudExheWVyLmg+CiAKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkNvbnRlbnRM
YXllckltcGwuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBXZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViQ29udGVu
dExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQpAQCAtMzYsMzAgKzM4LDM1IEBAIFdlYkNvbnRl
bnRMYXllciBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNv
bnRlbnRDbGllbnQpCiAgICAgcmV0dXJuIFdlYkNvbnRlbnRMYXllcihXZWJDb250ZW50TGF5ZXJJ
bXBsOjpjcmVhdGUoY29udGVudENsaWVudCkpOwogfQogCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6
Y2xlYXJDbGllbnQoKQoreworICAgIHVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+Y2xl
YXJEZWxlZ2F0ZSgpOworfQorCiB2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50
KGJvb2wgZHJhd3NDb250ZW50KQogewotICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigp
LT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKKyAgICB1bndyYXA8Q29udGVudExheWVy
Q2hyb21pdW0+KCktPnNldElzRHJhd2FibGUoZHJhd3NDb250ZW50KTsKIH0KIAogYm9vbCBXZWJD
b250ZW50TGF5ZXI6OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbnN0VW53
cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRyYXdzQ29udGVudCgpOworICAgIHJldHVybiBj
b25zdFVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+ZHJhd3NDb250ZW50KCk7CiB9CiAK
LVdlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29u
dGVudExheWVySW1wbD4mIG5vZGUpCitXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihj
b25zdCBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiYgbm9kZSkKICAgICA6IFdlYkxh
eWVyKG5vZGUpCiB7CiB9CiAKLVdlYkNvbnRlbnRMYXllciYgV2ViQ29udGVudExheWVyOjpvcGVy
YXRvcj0oY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYgbm9kZSkKK1dlYkNv
bnRlbnRMYXllciYgV2ViQ29udGVudExheWVyOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxD
b250ZW50TGF5ZXJDaHJvbWl1bT4mIG5vZGUpCiB7CiAgICAgbV9wcml2YXRlID0gbm9kZTsKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKLVdlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0
cjxXZWJDb250ZW50TGF5ZXJJbXBsPigpIGNvbnN0CitXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViQ29udGVudExheWVySW1wbCo+KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvbnRlbnRMYXllckNocm9taXVtKj4obV9wcml2YXRlLmdldCgp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDRkNDc2MDk1ZDA0NWMwNjJj
NzM2YWM1ZDQ2NWExZjk2YjA2MDNlYWYuLjIyMmZhMmZhNzY2NTIwMjI4MDhjMTRhY2U5MTE0MTQx
YmE0N2VkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwCkBAIC01MywxMSArNTMsNiBAQCBXZWJDb250ZW50TGF5ZXJJbXBsOjp+
V2ViQ29udGVudExheWVySW1wbCgpCiAgICAgY2xlYXJEZWxlZ2F0ZSgpOwogfQogCi12b2lkIFdl
YkNvbnRlbnRMYXllckltcGw6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKLXsK
LSAgICBzZXRJc0RyYXdhYmxlKGRyYXdzQ29udGVudCk7Ci19Ci0KIHZvaWQgV2ViQ29udGVudExh
eWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0
JiBjbGlwKQogewogICAgIGlmICghbV9jb250ZW50Q2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmluZGV4IDUxZjM0NGY3Y2FmMTI3
MTEyNmFjN2I0MjY4ZWQ1NDYxMjE0MjE5ZDguLmEwNmNmOTA4MjkxZmFmZWE2MjNjYmJlNzU3YWNl
MjY4YmY1MmRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmgKQEAgLTM2LDggKzM2LDYgQEAgY2xhc3MgV2ViQ29udGVudExheWVySW1w
bCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmUK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiBjcmVh
dGUoV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KTsKIAotICAgIHZvaWQgc2V0
RHJhd3NDb250ZW50KGJvb2wpOwotCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgV2ViQ29udGVu
dExheWVySW1wbChXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOwogICAgIHZp
cnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVyLmNwcAppbmRleCBlY2Y3NDUyZmM2NTRhMWY3NmU3ZWE2Mzk4OGY3NmU2M2VkZDE5MDY2
Li4xY2M0ODMzOGFiZWQxNTFjNTNlZTA0MzdhNjAwOWI0OTExMWFmMmIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8
cHVibGljL1dlYkZsb2F0UG9pbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRSZWN0Lmg+
CiAjaW5jbHVkZSA8cHVibGljL1dlYlNpemUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTIyOCw2
ICsyMjksMTEgQEAgdm9pZCBXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgU2tN
YXRyaXg0NCYgbWF0cml4KQogICAgIG1fcHJpdmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0odHJh
bnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRyaXg0NChtYXRyaXgpKTsKIH0KIAordm9pZCBXZWJM
YXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN1YmxheWVyVHJhbnNmb3JtKG1hdHJpeC50
b1dlYkNvcmVUcmFuc2Zvcm0oKSk7Cit9CisKIFNrTWF0cml4NDQgV2ViTGF5ZXI6OnN1YmxheWVy
VHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zvcm1h
dGlvbk1hdHJpeChtX3ByaXZhdGUtPnN1YmxheWVyVHJhbnNmb3JtKCkpOwpAQCAtMjM4LDYgKzI0
NCwxMSBAQCB2b2lkIFdlYkxheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgU2tNYXRyaXg0NCYgbWF0
cml4KQogICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uTWF0cml4RnJv
bVNrTWF0cml4NDQobWF0cml4KSk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXI6OnNldFRyYW5zZm9ybShj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIG1fcHJpdmF0ZS0+
c2V0VHJhbnNmb3JtKG1hdHJpeC50b1dlYkNvcmVUcmFuc2Zvcm0oKSk7Cit9CisKIFNrTWF0cml4
NDQgV2ViTGF5ZXI6OnRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNrTWF0cml4NDRG
cm9tVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcml2YXRlLT50cmFuc2Zvcm0oKSk7CkBAIC0yNTMs
NiArMjY0LDMxIEBAIHZvaWQgV2ViTGF5ZXI6OnNldERlYnVnQm9yZGVyV2lkdGgoZmxvYXQgd2lk
dGgpCiAgICAgbV9wcml2YXRlLT5zZXREZWJ1Z0JvcmRlcldpZHRoKHdpZHRoKTsKIH0KIAordm9p
ZCBXZWJMYXllcjo6c2V0SXNEcmF3YWJsZShib29sIGRyYXdhYmxlKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0SXNEcmF3YWJsZShkcmF3YWJsZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFByZXNl
cnZlczNEKGJvb2wgcHJlc2VydmUzRCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFByZXNlcnZlczNE
KHByZXNlcnZlM0QpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXREb3VibGVTaWRlZChib29sIGRv
dWJsZVNpZGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0RG91YmxlU2lkZWQoZG91YmxlU2lkZWQp
OworfQorCit2b2lkIFdlYkxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29sb3IgY29sb3Ip
Cit7CisgICAgbV9wcml2YXRlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOworfQorCit2b2lk
IFdlYkxheWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Cit9CisKIHZvaWQgV2ViTGF5ZXI6OnNldEZpbHRl
cnMoY29uc3QgV2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKICAgICBtX3ByaXZhdGUt
PnNldEZpbHRlcnMoZmlsdGVycy50b0ZpbHRlck9wZXJhdGlvbnMoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcApp
bmRleCBiZjg4OTU5NGM5YmVhNTFjYWNhZDBhMzUwMGY4ZjA5OWM1YjRlOTMyLi5jYTE3Nzg2YmNj
MDcxMGFmZjFhYTljMGMxZDcyY2ZmN2I4MTRmMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTEyMSwx
MyArMTIxLDEzIEBAIFRFU1QoSW1hZ2VMYXllckNocm9taXVtVGVzdCwgb3BhcXVlSW1hZ2VzKQog
ICAgIFJlZlB0cjxJbWFnZT4gbm9uT3BhcXVlSW1hZ2UgPSBUZXN0SW1hZ2U6OmNyZWF0ZShJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOwogICAgIEFTU0VSVF9UUlVFKG5vbk9wYXF1ZUltYWdlLmdl
dCgpKTsKIAotICAgIEFTU0VSVF9GQUxTRShncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCkp
OworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKS5pc051bGwo
KSk7CiAKICAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvSW1hZ2Uob3BhcXVlSW1hZ2Uu
Z2V0KCkpOwotICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKS0+
b3BhcXVlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIo
KS5vcGFxdWUoKSk7CiAKICAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvSW1hZ2Uobm9u
T3BhcXVlSW1hZ2UuZ2V0KCkpOwotICAgIEFTU0VSVF9GQUxTRShncmFwaGljc0xheWVyLT5jb250
ZW50c0xheWVyKCktPm9wYXF1ZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhcGhpY3NMYXllci0+
Y29udGVudHNMYXllcigpLm9wYXF1ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141534</attachid>
            <date>2012-05-11 17:36:26 -0700</date>
            <delta_ts>2012-05-14 17:14:18 -0700</delta_ts>
            <desc>with willBeDestroyed()</desc>
            <filename>bug-86269-20120511173625.patch</filename>
            <type>text/plain</type>
            <size>50633</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2ODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAzZTVjYWFkYTdjNWIy
ZWM2Mzg0MWY4OGM3YzYyYWY5MjRmMGY5MDEzLi4wY2RlYjE1Y2ZiOGVmMjBhNzc4MDU0MjEyM2Ji
NjM3ZjNmYzA2MjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNS0xMSAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBHcmFwaGljc0xheWVyQ2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc29tZSBu
ZXcgV2ViTGF5ZXIgLyBXZWJDb250ZW50TGF5ZXIgQVBJcyB0aGF0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSBuZWVkcy4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkNvbnRlbnRMYXllcik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkxheWVy
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6aXNOdWxs
KToKKyAgICAgICAgKFdlYkxheWVyKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6On5XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisgICAgICAgICAgICBGaXggYSBtZW1v
cnkgbGVhayAtIFdlYlByaXZhdGVPd25QdHI8PnMgaGF2ZSB0byBiZSBleHBsaWNpdGx5IGNsZWFy
ZWQuCisgICAgICAgIChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDUtMTEgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBDcmVhdGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBw
bGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUwYTIyZWFjN2RhOTk1MjU4OTYwYjFhNzE4N2FiMTRhYzkw
NjAxMjguLjAwM2E0MWRmZWUxY2Y0YWI2NDc5OTg4MDU2YTA2OTA3ZTA1NTZkMTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSw3NCBAQAogMjAxMi0wNS0xMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBHcmFwaGljc0xheWVy
Q2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQorCisgICAgICAgIFRoaXMgY29udmVydHMgR3Jh
cGhpY3NMYXllckNocm9taXVtIG92ZXIgdG8gdXNlIFdlYkxheWVyIGFuZCBXZWJDb250ZW50TGF5
ZXIuIFRoZSBjb252ZXJzaW9uIGlzIG5vdCBjb21wbGV0ZWx5CisgICAgICAgIGFzIHRoZSBXZWIq
TGF5ZXIgQVBJcyBhcmUgbm90IHlldCBxdWl0ZSBjb21wbGV0ZSBlbm91Z2ggdG8gdXNlIGV2ZXJ5
d2hlcmUsIGFuZCB0aGUgUGxhdGZvcm1MYXllciB0eXBlZGVmIGlzIG5vdAorICAgICAgICBjaGFu
Z2VkIGluIHRoaXMgcGF0Y2guIFRoZSBwbGFjZXMgd2hlcmUgd2UgaGF2ZSB0byBwdW5jaCBvdXQg
dGhyb3VnaCBBUEkgbGF5ZXIgYXJlIG1hcmtlZCBieQorICAgICAgICB1bndyYXA8KkxheWVyQ2hy
b21pdW0+KCkgY2FsbHMgYW5kIEZJWE1FJ3MgaW4gdGhlIFdlYipMYXllci5oIGZpbGVzLiAgVGhl
cmUgYXJlbid0IG1hbnkuCisKKyAgICAgICAgUmVmYWN0b3Igb25seSwgZXhpc3RpbmcgdGVzdHMg
YXBwbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9y
bWF0aW9uTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUZyb21QYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEZpbHRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1l
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06Omhvc3RMYXllckZvckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6bGF5ZXJGb3JQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVBbmNob3JQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNo
aWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlTWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklzRHJhd2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXR1cENvbnRlbnRzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpoYXNDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6Y29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnByaW1hcnlMYXllcik6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2hy
b21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorCisyMDEyLTA1LTExICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGlt
cGxlbWVudGF0aW9uIG9mIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEIGFuZCByZWxhdGVkIGZy
b20gV2ViS2l0L2Nocm9taXVtL3NyYyB0byBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MjU3
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGEwNGY3YzBiMDg4NDliMmJjYzBmZDk3
YjZhYmJlZGIzM2YyMTA2OC4uMTUyNGZlMmM3YWE3MmU0YTNiOGQzNWE4NjQ0YTk1OTQzNDgwZDYz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNiBAQAogMjAxMi0wNS0x
MSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJv
bWl1bV0gQ29udmVydCBHcmFwaGljc0xheWVyQ2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4pOgorICAgICAg
ICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVu
dExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgICog
c3JjL1dlYkxheWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldFN1YmxheWVy
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
OjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0SXNEcmF3YWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyOjpzZXREb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKworMjAxMi0wNS0xMSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBp
bXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCBhbmQgcmVsYXRlZCBm
cm9tIFdlYktpdC9jaHJvbWl1bS9zcmMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI1
NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRl
bnRMYXllci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5
ZXIuaAppbmRleCA2OTk0MThjMzQ5YmU5NjUzOWE4Y2E3Zjc2YTE1Y2MzNTM1YTQxZWNhLi4wMGNm
ZjJhZDNlNWFiYTQ0Zjc2NmNlZjNhNTIzMjMzZjNmOGNkNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTI5LDEwICsyOSwx
MyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYkxheWVyLmgiCiAKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRlbnRMYXllckNocm9taXVtOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNvbnRlbnRMYXllckNsaWVudDsKIGNsYXNzIFdlYkNv
bnRlbnRMYXllckltcGw7Ci1zdHJ1Y3QgV2ViRmxvYXRSZWN0OwogCiBjbGFzcyBXZWJDb250ZW50
TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgewogcHVibGljOgpAQCAtNTEsMTAgKzU0LDI0IEBAIHB1
YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwogICAg
IFdFQktJVF9FWFBPUlQgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKIAorICAgIC8vIENhbGxl
ZCB3aGVuIHRoZSBXZWJDb250ZW50TGF5ZXJDbGllbnQgaXMgZ29pbmcgYXdheSBhbmQgc2hvdWxk
IG5vdCBiZSB1c2VkLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBjbGVhckNsaWVudCgpOworCisg
ICAgLy8gU3R1ZmYgbmVlZGVkIGZvciBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLy8KKyAgICAv
LyBBbmltYXRpb25zIC0tLQorICAgIC8vIGFkZEFuaW1hdGlvbigpCisgICAgLy8gcGF1c2VBbmlt
YXRpb24oKQorICAgIC8vIHJlbW92ZUFuaW1hdGlvbigpCisgICAgLy8gc3VzcGVuZEFuaW1hdGlv
bnMoKQorICAgIC8vIHJlc3VtZUFuaW1hdGlvbnMoKQorICAgIC8vIHNldExheWVyQW5pbWF0aW9u
RGVsZWdhdGUoKQorICAgIC8vCisKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJD
b250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7
Ci0gICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvbnRlbnRMYXllckltcGw+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
bnRlbnRMYXllckltcGw+KCkgY29uc3Q7CisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJDb250
ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q29udGVu
dExheWVyQ2hyb21pdW0+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtPigpIGNvbnN0OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKaW5kZXggNDc0OTdkZTU3OTQ3ODBkNjJi
MjlhNDM3MjIxOWJkZjUxMThkYjdhMS4uMTU4N2U4N2M5MWEzNzNiNDc5MmRjZGM3MzRjODlmN2U5
NGUwZWE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllci5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaApA
QCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIExheWVyQ2hyb21pdW07
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGaWx0ZXJPcGVyYXRpb25zOworY2xh
c3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBzdHJ1Y3QgV2ViRmxvYXRQb2ludDsKIHN0cnVj
dCBXZWJGbG9hdFJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTUxLDExICs1MiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIGFzc2lnbihsYXllcik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
Ci0gICAgYm9vbCBpc051bGwoKSB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KKyAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQogICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViTGF5ZXImKTsKICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdl
YkxheWVyJikgY29uc3Q7CiAKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgd2lsbEJlRGVzdHJveWVk
KCk7CisKICAgICAvLyBTZXRzIGEgcmVnaW9uIG9mIHRoZSBsYXllciBhcyBpbnZhbGlkLCBpLmUu
IG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgV2ViRmxvYXRSZWN0Jik7CiAKQEAgLTk1LDE0ICs5OCwzMiBAQCBw
dWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7
CiAKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgU2tN
YXRyaXg0NCYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFdFQktJVF9FWFBPUlQgU2tNYXRy
aXg0NCBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFdFQktJ
VF9FWFBPUlQgU2tNYXRyaXg0NCB0cmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXREZWJ1Z0JvcmRlckNvbG9yKGNvbnN0IFdlYkNvbG9yJik7CiAgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldERlYnVnQm9yZGVyV2lkdGgoZmxvYXQpOwogCisgICAgLy8gQVBJcyB3
ZSBuZWVkOgorICAgIC8vCisgICAgLy8gRGVidWdnaW5nIC0tLQorICAgIC8vIHNldERlYnVnTmFt
ZSgpCisgICAgLy8KKyAgICAvLyBMYXllciBwcm9wZXJ0aWVzIC0tLQorICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRJc0RyYXdhYmxlKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQ
cmVzZXJ2ZXMzRChib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RG91YmxlU2lkZWQo
Ym9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihXZWJDb2xv
cik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAg
IC8vCisgICAgLy8KKyAgICAvLyBUcmVlIG1hbmlwdWxhdGlvbiAtLS0KKyAgICAvLyBzZXRDaGls
ZHJlbigpCisKICAgICAvLyBDbGVhciB0aGUgZmlsdGVycyBpbiB1c2UgYnkgcGFzc2luZyBpbiBh
IG5ld2x5IGluc3RhbnRpYXRlZAogICAgIC8vIFdlYkZpbHRlck9wZXJhdGlvbnMgb2JqZWN0Lgog
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYkZpbHRlck9wZXJhdGlv
bnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXguaAppbmRleCA5MzNiODZhMTgzZGM5NGM2MzEzOTQwMjlhYzA5
NGY0NDJkOGE3MWEyLi5hZWViZTFjNDE2MTMzOWE1ZTIzYmNhNGQ1NmIwYTFhNjFkMDllNzU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC00OSw2ICs0OSw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggewogcHVibGljOgogICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7CisgICAgfldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkgeyByZXNldCgp
OyB9CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisKICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91Ymxl
IGUsIGRvdWJsZSBmKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwCmluZGV4IDhhNGVhMDA4ZjkxZGFiMjM1NDU2NGY0NGNhY2MzZDBlZDkzODJjYmMuLmJjODZh
NWUyZTlkNGVhNTYwODE2NjY2NjkwMDQ5MDRkNzgwNzEzZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC01MCwxMiArNTAsMTUgQEAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JgogewogfQogCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHQpCiAgICAgOiBtX3ByaXZhdGUobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KHQpKQog
ewogfQotI2VuZGlmCisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlc2V0KCkKK3sK
KyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CiAKIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0KQogewpAQCAtNDE1LDcgKzQxOCw2IEBAIHZvaWQgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnNldEYoZG91YmxlIGYpCiAgICAgbV9wcml2YXRlLT5zZXRGKGYpOwogfQogCi0jaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnRvV2ViQ29yZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICpt
X3ByaXZhdGUuZ2V0KCk7CkBAIC00NTUsNiArNDU3LDUgQEAgRmxvYXRQb2ludCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6cHJvamVjdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGJvb2wqIGNs
YW0KIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5wcm9qZWN0UG9pbnQocCwgY2xhbXBlZCk7CiB9
Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcAppbmRleCA5NDMxNzM1MDRiYjRkNWE1MjllYTNjNmZhNWQ1OWUzYjRlNmJh
Mjc2Li5lYWU2MTI1ZTgyY2Y2MGRhYjUwNGZlMzY3NGU0NTEzOGIzZTNkN2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU1LDE0ICs1NSwyMiBAQAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTa01hdHJpeDQ0LmgiCiAjaW5jbHVkZSAi
U3lzdGVtVGltZS5oIgogCisjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0UG9pbnQuaD4KKyNpbmNs
dWRlIDxwdWJsaWMvV2ViRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlNpemUuaD4K
KyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCit1c2luZyBX
ZWJLaXQ6OldlYkNvbnRlbnRMYXllcjsKK3VzaW5nIFdlYktpdDo6V2ViTGF5ZXI7CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVy
OjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtNzcsNyArODUsNyBAQCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2luU2V0Q2hpbGRyZW4oZmFsc2UpCiAgICAgLCBtX3Bh
Z2VTY2FsZUNoYW5nZWQoZmFsc2UpCiB7Ci0gICAgbV9sYXllciA9IENvbnRlbnRMYXllckNocm9t
aXVtOjpjcmVhdGUodGhpcyk7CisgICAgbV9sYXllciA9IFdlYkNvbnRlbnRMYXllcihDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpKTsKIAogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9y
cygpOwogfQpAQCAtOTAsMjMgKzk4LDE1IEBAIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6fkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSgpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVE
ZXN0cm95ZWQoKQogewotICAgIGlmIChtX2xheWVyKSB7Ci0gICAgICAgIG1fbGF5ZXItPmNsZWFy
RGVsZWdhdGUoKTsKLSAgICAgICAgbV9sYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7Ci0gICAg
ICAgIC8vIFByaW1hcnkgbGF5ZXIgbWF5IGhhdmUgYXQgb25lIHBvaW50IGJlZW4gbV9sYXllci4g
QmUgc3VyZSB0byByZXNldAotICAgICAgICAvLyB0aGUgZGVsZWdhdGUsIGp1c3QgaW4gY2FzZS4K
LSAgICAgICAgbV9sYXllci0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKKyAgICBpZiAo
IW1fbGF5ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9sYXllci5jbGVhckNsaWVudCgpOworICAg
ICAgICBtX2xheWVyLndpbGxCZURlc3Ryb3llZCgpOwogICAgIH0KKyAgICBpZiAoIW1fY29udGVu
dHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9jb250ZW50c0xheWVyLndpbGxCZURlc3Ryb3ll
ZCgpOwogCi0gICAgaWYgKG1fY29udGVudHNMYXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVy
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLQotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKSB7Ci0g
ICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwotICAgICAgICAv
LyBQcmltYXJ5IGxheWVyIG1heSBoYXZlIHN3aXRjaGVkIGZyb20gbV9sYXllciB0byBtX3RyYW5z
Zm9ybUxheWVyLgotICAgICAgICAvLyBCZSBzdXJlIHRvIHJlc2V0IHRoZSBkZWxlZ2F0ZSwganVz
dCBpbiBjYXNlLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRMYXllckFuaW1hdGlvbkRl
bGVnYXRlKDApOwotICAgIH0KKyAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIuaXNOdWxsKCkpCisg
ICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIud2lsbEJlRGVzdHJveWVkKCk7CiAKICAgICBpZiAobV9s
aW5rSGlnaGxpZ2h0KQogICAgICAgICBtX2xpbmtIaWdobGlnaHQuY2xlYXIoKTsKQEAgLTExNywx
OSArMTE3LDE5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQo
KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5h
bWUpCiB7CiAgICAgbV9uYW1lQmFzZSA9IGluTmFtZTsKLSAgICBTdHJpbmcgbmFtZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJHcmFwaGljc0xheWVyQ2hyb21pdW0oJXApIEdyYXBoaWNzTGF5ZXIoJXApICIs
IG1fbGF5ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOworICAgIFN0cmluZyBuYW1lID0gU3RyaW5n
Ojpmb3JtYXQoIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwg
bV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSwgdGhpcykgKyBpbk5hbWU7CiAgICAgR3Jh
cGhpY3NMYXllcjo6c2V0TmFtZShuYW1lKTsKICAgICB1cGRhdGVOYW1lcygpOwogfQogCiB2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMoKQogewotICAgIGlmIChtX2xheWVy
KQotICAgICAgICBtX2xheWVyLT5zZXREZWJ1Z05hbWUoIkxheWVyIGZvciAiICsgbV9uYW1lQmFz
ZSk7Ci0gICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpCi0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIt
PnNldERlYnVnTmFtZSgiVHJhbnNmb3JtTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsKLSAgICBp
ZiAobV9jb250ZW50c0xheWVyKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldERlYnVnTmFt
ZSgiQ29udGVudHNMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAgIGlmICghbV9sYXllci5p
c051bGwoKSkKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0RGVi
dWdOYW1lKCJMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAgIGlmICghbV90cmFuc2Zvcm1M
YXllci5pc051bGwoKSkKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJv
bWl1bT4oKS0+c2V0RGVidWdOYW1lKCJUcmFuc2Zvcm1MYXllciBmb3IgIiArIG1fbmFtZUJhc2Up
OworICAgIGlmICghbV9jb250ZW50c0xheWVyLmlzTnVsbCgpKQorICAgICAgICBtX2NvbnRlbnRz
TGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldERlYnVnTmFtZSgiQ29udGVudHNMYXll
ciBmb3IgIiArIG1fbmFtZUJhc2UpOwogICAgIGlmIChtX2xpbmtIaWdobGlnaHQpCiAgICAgICAg
IG1fbGlua0hpZ2hsaWdodC0+Y29udGVudExheWVyKCktPnNldERlYnVnTmFtZSgiTGlua0hpZ2hs
aWdodCBmb3IgIiArIG1fbmFtZUJhc2UpOwogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQs
IEdyYXBoaWNzTGF5ZXIqCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlRnJvbVBh
cmVudCgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIGxh
eWVyRm9yUGFyZW50KCktPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBsYXllckZvclBhcmVudCgp
LnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQpAQCAtMjEzLDE0ICsyMTMsMTQgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY2xhbXBlZFNpemUpOwogICAgIHVwZGF0ZUxh
eWVyU2l6ZSgpOwogCi0gICAgaWYgKG1fcGFnZVNjYWxlQ2hhbmdlZCAmJiBtX2xheWVyKQotICAg
ICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobV9wYWdlU2NhbGVDaGFu
Z2VkICYmICFtX2xheWVyLmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyLmludmFsaWRhdGUoKTsK
ICAgICBtX3BhZ2VTY2FsZUNoYW5nZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKQogewotICAgIC8vIENhbGwgdGhpcyBtZXRob2QgZmlyc3QgdG8gYXNzaWduIGNvbnRlbnRz
IHNjYWxlIHRvIExheWVyQ2hyb21pdW0gc28gdGhlIHBhaW50ZXIgY2FuIGFwcGx5IHRoZSBzY2Fs
ZSB0cmFuc2Zvcm0uCisgICAgLy8gQ2FsbCB0aGlzIG1ldGhvZCBmaXJzdCB0byBhc3NpZ24gY29u
dGVudHMgc2NhbGUgdG8gb3VyIGxheWVyIHNvIHRoZSBwYWludGVyIGNhbiBhcHBseSB0aGUgc2Nh
bGUgdHJhbnNmb3JtLgogICAgIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsKIAogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBjb250ZW50c1Zp
c2libGUpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRD
b2xvcihjb2xvcik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbG9y
LnJnYigpKTsKIAogICAgIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvciA9IHRydWU7
CiAgICAgdXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTI4MSwxOCArMjgxLDE4IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmNsZWFyQmFja2dyb3VuZENv
bG9yKCkKIHsKICAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOwotICAg
IG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4o
MCkpOworICAgIG1fY29udGVudHNMYXllci5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8
UkdCQTMyPigwKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c09wYXF1ZShib29sIG9wYXF1ZSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09w
YXF1ZShvcGFxdWUpOwotICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsK
KyAgICBtX2xheWVyLnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAogYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKIHsKLSAgICBtX2xheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIG1fbGF5ZXIu
dW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldEZpbHRlcnMoZmlsdGVycyk7CiAgICAgcmV0dXJu
IEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAKQEAgLTMwNCw0NyArMzA0
LDQ3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NM
YXllciogbWFza0xheWVyKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihtYXNrTGF5
ZXIpOwogCiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyQ2hyb21pdW0gPSBtX21hc2tMYXll
ciA/IG1fbWFza0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotICAgIG1fbGF5ZXItPnNldE1h
c2tMYXllcihtYXNrTGF5ZXJDaHJvbWl1bSk7CisgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJv
bWl1bT4oKS0+c2V0TWFza0xheWVyKG1hc2tMYXllckNocm9taXVtKTsKIH0KIAogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZpc2libGUpCiB7
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZpc2libGUpOwotICAg
IG1fbGF5ZXItPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICBtX2xh
eWVyLnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBmbG9h
dCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAuMGYpOwogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAgIHByaW1hcnlMYXll
cigpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIHByaW1hcnlMYXllcigpLnNldE9wYWNpdHko
b3BhY2l0eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRSZXBsaWNhdGVk
QnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyQ2hyb21p
dW0qIGxheWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihs
YXllcik7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwot
ICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyQ2hyb21pdW0gPyBsYXllckNo
cm9taXVtLT5wcmltYXJ5TGF5ZXIoKSA6IDA7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFJlcGxp
Y2FMYXllcihyZXBsaWNhTGF5ZXIpOworICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9
IGxheWVyQ2hyb21pdW0gPyBsYXllckNocm9taXVtLT5wcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5
ZXJDaHJvbWl1bT4oKSA6IDA7CisgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21p
dW0+KCktPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOwogfQogCiAKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYgKG1f
Y29udGVudHNMYXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKKyAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICBtX2xh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAg
bV9sYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChyZWN0KTsKKyAgICAgICAgbV9sYXllci5pbnZh
bGlkYXRlUmVjdChyZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMzYwLDIyICszNjAsMjIgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2Up
CiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAoaW1hZ2UpIHsK
LSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVy
cG9zZSAhPSBDb250ZW50c0xheWVyRm9ySW1hZ2UpIHsKKyAgICAgICAgaWYgKG1fY29udGVudHNM
YXllci5pc051bGwoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJG
b3JJbWFnZSkgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gaW1hZ2VM
YXllciA9IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBzZXR1cENv
bnRlbnRzTGF5ZXIoaW1hZ2VMYXllci5nZXQoKSk7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5
ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckltYWdlOwogICAgICAgICAgICAgY2hpbGRyZW5D
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGlt
YWdlTGF5ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5
ZXIuZ2V0KCkpOworICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5ZXIgPSBzdGF0
aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExheWVy
Q2hyb21pdW0+KCkpOwogICAgICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhpbWFnZSk7CiAg
ICAgICAgIGltYWdlTGF5ZXItPnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmICFp
bWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVj
dCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGNoaWxkcmVu
Q2hhbmdlZCA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIFRoZSBvbGQgY29udGVudHMgbGF5ZXIg
d2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVDaGlsZExpc3QuCi0gICAgICAgICAgICBtX2NvbnRl
bnRzTGF5ZXIgPSAwOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLnJlc2V0KCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTM4NywxOCArMzg3LDE4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIp
CiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAocGxhdGZvcm1M
YXllcikgewotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyLmdldCgpICE9IHBsYXRmb3JtTGF5
ZXIpIHsKKyAgICAgICAgaWYgKG1fY29udGVudHNMYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KSAhPSBwbGF0Zm9ybUxheWVyKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIocGxh
dGZvcm1MYXllcik7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVu
dHNMYXllckZvckNhbnZhczsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNMYXll
ci5pc051bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAogICAg
ICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVw
ZGF0ZUNoaWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAgICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDA4
LDE4ICs0MDgsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9D
YW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBwcmltYXJ5
TGF5ZXIoKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICByZXR1cm4gcHJp
bWFyeUxheWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFw
QW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXRO
ZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5
ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKyAgICByZXR1
cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlvbih2
YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9u
TmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgcHJpbWFyeUxh
eWVyKCktPnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUp
LCB0aW1lT2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+cGF1c2VBbmltYXRpb24obWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIHRp
bWVPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+
cmVtb3ZlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKKyAg
ICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVtb3ZlQW5pbWF0aW9u
KG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQpA
QCAtNDI3LDEyICs0MjcsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRB
bmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQogICAgIC8vIHx3YWxsQ2xvY2tUaW1lfCBp
cyBpbiB0aGUgd3JvbmcgdGltZSBiYXNlLiBOZWVkIHRvIGNvbnZlcnQgaGVyZS4KICAgICAvLyBG
SVhNRTogZmluZCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMuCiAgICAgZG91YmxlIG1v
bm90b25pY1RpbWUgPSB3YWxsQ2xvY2tUaW1lICsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCkgLSBjdXJyZW50VGltZSgpOwotICAgIHByaW1hcnlMYXllcigpLT5zdXNwZW5kQW5pbWF0aW9u
cyhtb25vdG9uaWNUaW1lKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKS0+c3VzcGVuZEFuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+cmVzdW1lQW5pbWF0aW9ucyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAg
cHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnJlc3VtZUFuaW1hdGlvbnMo
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6YWRkTGlua0hpZ2hsaWdodChjb25zdCBQYXRoJiBwYXRoKQpAQCAtNDUzLDE4ICs0
NTMsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQ
bGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNl
OwogICAgIGlmIChsYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8
fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JWaWRlbykgeworICAg
ICAgICBpZiAobV9jb250ZW50c0xheWVyLmlzTnVsbCgpIHx8IG1fY29udGVudHNMYXllclB1cnBv
c2UgIT0gQ29udGVudHNMYXllckZvclZpZGVvKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRz
TGF5ZXIobGF5ZXIpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRl
bnRzTGF5ZXJGb3JWaWRlbzsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNMYXll
ci5pc051bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAogICAg
ICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVw
ZGF0ZUNoaWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAgICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDcy
LDM3ICs0NzIsMzcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9N
ZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9
CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aG9zdExheWVyRm9yQ2hp
bGRyZW4oKSBjb25zdAorV2ViTGF5ZXIgR3JhcGhpY3NMYXllckNocm9taXVtOjpob3N0TGF5ZXJG
b3JDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3Ry
YW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV90cmFuc2Zv
cm1MYXllci5pc051bGwoKSA/IG1fbGF5ZXIgOiAgbV90cmFuc2Zvcm1MYXllcjsKIH0KIAotUGxh
dGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpsYXllckZvclBhcmVudCgpIGNvbnN0
CitXZWJMYXllciBHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyRm9yUGFyZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
OiBtX2xheWVyLmdldCgpOworICAgIHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpID8g
bV9sYXllciA6ICBtX3RyYW5zZm9ybUxheWVyOwogfQogCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBwcmlt
YXJ5TGF5ZXIoKTsKKyAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21p
dW0+KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgbV9sYXllci0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9s
YXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IucmdiKCkpOwogICAgIGVsc2UKLSAgICAgICAg
bV9sYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOworICAg
ICAgICBtX2xheWVyLnNldEJhY2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0IENv
bG9yJiBjb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBtX2xheWVyLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9yKTsKLSAgICAg
ICAgbV9sYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CisgICAgICAgIG1f
bGF5ZXIuc2V0RGVidWdCb3JkZXJDb2xvcihjb2xvci5yZ2IoKSk7CisgICAgICAgIG1fbGF5ZXIu
c2V0RGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9sYXllci0+c2V0RGVidWdCb3JkZXJDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKLSAg
ICAgICAgbV9sYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aCgwKTsKKyAgICAgICAgbV9sYXllci5z
ZXREZWJ1Z0JvcmRlckNvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOworICAgICAgICBtX2xh
eWVyLnNldERlYnVnQm9yZGVyV2lkdGgoMCk7CiAgICAgfQogfQogCkBAIC01MTAsMTQgKzUxMCwx
NCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KCkKIHsKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbmV3Q2hpbGRyZW47CiAKLSAgICBpZiAo
bV90cmFuc2Zvcm1MYXllcikgeworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5pc051bGwoKSkg
ewogICAgICAgICAvLyBBZGQgdGhlIHByaW1hcnkgbGF5ZXIgZmlyc3QuIEV2ZW4gaWYgd2UgaGF2
ZSBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuLCB0aGUgcHJpbWFyeSBsYXllciBhbHdheXMgY29t
ZXMgYmVoaW5kLgotICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9sYXllci5nZXQoKSk7Ci0g
ICAgfSBlbHNlIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKG1fbGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpOworICAgIH0gZWxzZSBpZiAoIW1f
Y29udGVudHNMYXllci5pc051bGwoKSkgewogICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSBjb250
ZW50cyBsYXllciBpbiB0aGUgY29ycmVjdCBvcmRlciB3aXRoIG5lZ2F0aXZlIHotb3JkZXIgY2hp
bGRyZW4uCiAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgY2F1c2UgdmlzaWJsZSByZW5kZXJpbmcg
aXNzdWVzIGJlY2F1c2UgY3VycmVudGx5IGNvbnRlbnRzIGxheWVycyBhcmUgb25seSB1c2VkCiAg
ICAgICAgIC8vIGZvciByZXBsYWNlZCBlbGVtZW50cyB0aGF0IGRvbid0IGhhdmUgY2hpbGRyZW4u
Ci0gICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAg
ICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNocm9t
aXVtPigpKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGls
ZExheWVycyA9IGNoaWxkcmVuKCk7CkBAIC01MjUsNyArNTI1LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1DaGlsZHJlbjsgKytpKSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogY3Vy
Q2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGlsZExheWVyc1tp
XSk7CiAKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogY2hpbGRMYXllciA9IGN1ckNoaWxkLT5sYXll
ckZvclBhcmVudCgpOworICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVyID0gY3VyQ2hp
bGQtPmxheWVyRm9yUGFyZW50KCkudW53cmFwPExheWVyQ2hyb21pdW0+KCk7CiAgICAgICAgIG5l
d0NoaWxkcmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKQEAgLTUzNSwxNyArNTM1LDE3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDaGlsZExpc3QoKQogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAgIG5l
d0NoaWxkcmVuW2ldLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKLSAgICBpZiAobV90cmFuc2Zvcm1M
YXllcikgewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRDaGlsZHJlbihuZXdDaGlsZHJl
bik7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7CisgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldENoaWxkcmVuKG5ld0NoaWxk
cmVuKTsKIAotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgIGlmICghbV9j
b250ZW50c0xheWVyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJh
bnNmb3JtIGxheWVyLCB0aGVuIHRoZSBjb250ZW50cyBsYXllciBpcyBwYXJlbnRlZCBpbiB0aGUK
ICAgICAgICAgICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNoaWxkIG9m
IHRoZSB0cmFuc2Zvcm0gbGF5ZXIpLgotICAgICAgICAgICAgbV9sYXllci0+cmVtb3ZlQWxsQ2hp
bGRyZW4oKTsKLSAgICAgICAgICAgIG1fbGF5ZXItPmFkZENoaWxkKG1fY29udGVudHNMYXllcik7
CisgICAgICAgICAgICBtX2xheWVyLnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAgICAgICBt
X2xheWVyLmFkZENoaWxkKG1fY29udGVudHNMYXllcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UK
LSAgICAgICAgbV9sYXllci0+c2V0Q2hpbGRyZW4obmV3Q2hpbGRyZW4pOworICAgICAgICBtX2xh
eWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKQEAg
LTU1NCwyMCArNTU0LDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXll
clBvc2l0aW9uKCkKICAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkg
KyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhl
aWdodCgpKTsKIAotICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9u
KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSgpCiB7CiAgICAgSW50
U2l6ZSBsYXllclNpemUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYg
KG1fdHJhbnNmb3JtTGF5ZXIpIHsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91bmRz
KGxheWVyU2l6ZSk7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7CisgICAg
ICAgIG1fdHJhbnNmb3JtTGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgICAgIC8vIFRo
ZSBhbmNob3Igb2YgdGhlIGNvbnRlbnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUsIDAuNSwgc28g
dGhlIHBvc2l0aW9uIGlzIGNlbnRlci1yZWxhdGl2ZS4KICAgICAgICAgRmxvYXRQb2ludCBjZW50
ZXJQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgICAg
ICBtX2xheWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CisgICAgICAgIG1fbGF5ZXIuc2V0
UG9zaXRpb24oY2VudGVyUG9pbnQpOwogICAgIH0KIAotICAgIG1fbGF5ZXItPnNldEJvdW5kcyhs
YXllclNpemUpOworICAgIG1fbGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAKICAgICAvLyBO
b3RlIHRoYXQgd2UgZG9uJ3QgcmVzaXplIG1fY29udGVudHNMYXllci4gSXQncyB1cCB0aGUgY2Fs
bGVyIHRvIGRvIHRoYXQuCiAKQEAgLTU3OCwzNiArNTc4LDM2IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjp1cGRhdGVMYXllclNpemUoKQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQW5jaG9yUG9pbnQoKQogewotICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50LnkoKSkpOwot
ICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNob3JQb2ludFoobV9hbmNob3JQb2ludC56KCkpOwor
ICAgIHByaW1hcnlMYXllcigpLnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2lu
dC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0QW5jaG9y
UG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKIAogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRyYW5zZm9ybSgpCiB7Ci0g
ICAgcHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CisgICAgcHJpbWFy
eUxheWVyKCkuc2V0VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobV90
cmFuc2Zvcm0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxk
cmVuVHJhbnNmb3JtKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0U3VibGF5ZXJUcmFuc2Zv
cm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0U3VibGF5ZXJU
cmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX2NoaWxkcmVuVHJhbnNm
b3JtKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1RvQm91
bmRzKCkKIHsKLSAgICBtX2xheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7
CisgICAgbV9sYXllci5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclByZXNlcnZlczNEKCkKIHsKLSAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90
cmFuc2Zvcm1MYXllcikgeworICAgIGlmIChtX3ByZXNlcnZlczNEICYmIG1fdHJhbnNmb3JtTGF5
ZXIuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCi0g
ICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICAg
ICAgbV90cmFuc2Zvcm1MYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7Ci0gICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgICAgIG1f
dHJhbnNmb3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihtX2xheWVyLT5yZWxl
YXNlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVy
ID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnNldFByZXNl
cnZlczNEKHRydWUpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9t
aXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOworICAgICAgICBtX3RyYW5z
Zm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIobV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVsZWFzZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlcigpKTsKIAogICAgICAgICAvLyBDb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRo
aXMgbGF5ZXIuCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKQEAgLTYxNiwzNSArNjE2
LDM0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNE
KCkKICAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgICAgIHVwZGF0ZUNoaWxkcmVuVHJh
bnNmb3JtKCk7CiAKLSAgICAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX3Np
emUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpKTsKKyAgICAgICAgbV9s
YXllci5zZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXpl
LmhlaWdodCgpIC8gMi4wZikpOwogCi0gICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMC41ZiwgMC41ZikpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eTsKLSAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKKyAgICAgICAg
bV9sYXllci5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKKyAgICAgICAg
bV9sYXllci5zZXRUcmFuc2Zvcm0oU2tNYXRyaXg0NCgpKTsKIAogICAgICAgICAvLyBTZXQgdGhl
IG9sZCBsYXllciB0byBvcGFjaXR5IG9mIDEuIEZ1cnRoZXIgZG93biB3ZSB3aWxsIHNldCB0aGUg
b3BhY2l0eSBvbiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX2xheWVyLT5zZXRPcGFj
aXR5KDEpOworICAgICAgICBtX2xheWVyLnNldE9wYWNpdHkoMSk7CiAKLSAgICAgICAgbV9sYXll
ci0+c2V0Q29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKCkpOworICAgICAgICBtX2xheWVyLnNl
dENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKIAogICAgICAgICAvLyBNb3ZlIHRoaXMg
bGF5ZXIgdG8gYmUgYSBjaGlsZCBvZiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBpZiAo
bV9sYXllci0+cGFyZW50KCkpCi0gICAgICAgICAgICBtX2xheWVyLT5wYXJlbnQoKS0+cmVwbGFj
ZUNoaWxkKG1fbGF5ZXIuZ2V0KCksIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkpOwotICAgICAgICBt
X3RyYW5zZm9ybUxheWVyLT5hZGRDaGlsZChtX2xheWVyLmdldCgpKTsKKyAgICAgICAgaWYgKCFt
X2xheWVyLnBhcmVudCgpLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9sYXllci5wYXJlbnQoKS5y
ZXBsYWNlQ2hpbGQobV9sYXllciwgbV90cmFuc2Zvcm1MYXllcik7CisgICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXIuYWRkQ2hpbGQobV9sYXllcik7CiAKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7
Ci0gICAgfSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiBtX3RyYW5zZm9ybUxheWVyKSB7Cisg
ICAgfSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zvcm1MYXllci5pc051bGwo
KSkgewogICAgICAgICAvLyBSZWxhY2UgdGhlIHRyYW5zZm9ybUxheWVyIGluIHRoZSBwYXJlbnQg
d2l0aCB0aGlzIGxheWVyLgotICAgICAgICBtX2xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0g
ICAgICAgIGlmIChtX3RyYW5zZm9ybUxheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnBhcmVudCgpLT5yZXBsYWNlQ2hpbGQobV90cmFuc2Zvcm1MYXllci5nZXQo
KSwgbV9sYXllci5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXIucmVtb3ZlRnJvbVBhcmVudCgpOwor
ICAgICAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIucGFyZW50KCkuaXNOdWxsKCkpCisgICAgICAg
ICAgICBtX3RyYW5zZm9ybUxheWVyLnBhcmVudCgpLnJlcGxhY2VDaGlsZChtX3RyYW5zZm9ybUxh
eWVyLCBtX2xheWVyKTsKIAotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVn
YXRlKHRoaXMpOwotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
bV90cmFuc2Zvcm1MYXllci0+cmVsZWFzZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsKKyAg
ICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25E
ZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+
c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKG1fdHJhbnNmb3JtTGF5ZXIudW53cmFwPExheWVy
Q2hyb21pdW0+KCktPnJlbGVhc2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAKICAgICAg
ICAgLy8gUmVsZWFzZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9ybUxh
eWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwotICAgICAgICBtX3RyYW5zZm9ybUxh
eWVyID0gMDsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXll
ci5yZXNldCgpOwogCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICAgICAgdXBk
YXRlTGF5ZXJTaXplKCk7CkBAIC02NTUsOCArNjU0LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICB1cGRhdGVDaGlsZExpc3Qo
KTsKICAgICB9CiAKLSAgICBtX2xheWVyLT5zZXRQcmVzZXJ2ZXMzRChtX3ByZXNlcnZlczNEKTsK
LSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIG1fbGF5ZXIu
c2V0UHJlc2VydmVzM0QobV9wcmVzZXJ2ZXMzRCk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0T3Bh
Y2l0eShtX29wYWNpdHkpOwogICAgIHVwZGF0ZU5hbWVzKCk7CiB9CiAKQEAgLTY2NywyNyArNjY2
LDI3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklzRHJhd2FibGUo
KQogICAgIC8vIGZsYWdzIGFyZSBjb21iaW5lZCBoZXJlLiBtX2NvbnRlbnRzTGF5ZXIgc2hvdWxk
bid0IHJlY2VpdmUgdGhlIGRyYXdzQ29udGVudCBmbGFnCiAgICAgLy8gc28gaXQgaXMgb25seSBn
aXZlbiBjb250ZW50c1Zpc2libGUuCiAKLSAgICBtX2xheWVyLT5zZXRJc0RyYXdhYmxlKG1fZHJh
d3NDb250ZW50ICYmIG1fY29udGVudHNWaXNpYmxlKTsKKyAgICBtX2xheWVyLnNldElzRHJhd2Fi
bGUobV9kcmF3c0NvbnRlbnQgJiYgbV9jb250ZW50c1Zpc2libGUpOwogCi0gICAgaWYgKG1fY29u
dGVudHNMYXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRJc0RyYXdhYmxlKG1fY29u
dGVudHNWaXNpYmxlKTsKKyAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKKyAgICAg
ICAgbV9jb250ZW50c0xheWVyLnNldElzRHJhd2FibGUobV9jb250ZW50c1Zpc2libGUpOwogCiAg
ICAgaWYgKG1fZHJhd3NDb250ZW50KQotICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKKyAgICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7CiAKICAgICB1cGRhdGVEZWJ1Z0luZGlj
YXRvcnMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyQmFj
a2dyb3VuZENvbG9yKCkKIHsKLSAgICBpZiAoIW1fY29udGVudHNMYXllcikKKyAgICBpZiAobV9j
b250ZW50c0xheWVyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBuZXZl
ciBjcmVhdGUgdGhlIGNvbnRlbnRzIGxheWVyIGp1c3QgZm9yIGJhY2tncm91bmQgY29sb3IgeWV0
LgogICAgIGlmIChtX2JhY2tncm91bmRDb2xvclNldCkKLSAgICAgICAgbV9jb250ZW50c0xheWVy
LT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBtX2NvbnRl
bnRzTGF5ZXIuc2V0QmFja2dyb3VuZENvbG9yKG1fYmFja2dyb3VuZENvbG9yLnJnYigpKTsKICAg
ICBlbHNlCi0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRp
Y19jYXN0PFJHQkEzMj4oMCkpOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0QmFja2dyb3Vu
ZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCkBAIC02OTcsNDggKzY5Niw0OCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCiAKIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1JlY3QoKQogewotICAgIGlmICghbV9j
b250ZW50c0xheWVyKQorICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCht
X2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSkpOwotICAgIG1fY29udGVudHNM
YXllci0+c2V0Qm91bmRzKEludFNpemUobV9jb250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50
c1JlY3QuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0UG9zaXRpb24oRmxvYXRQ
b2ludChtX2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSkpOworICAgIG1fY29u
dGVudHNMYXllci5zZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2Nv
bnRlbnRzUmVjdC5oZWlnaHQoKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29udGVudHNTY2FsZSgpCiB7CiAgICAgLy8gSWYgcGFnZSBzY2FsZSBpcyBhbHJlYWR5
IGFwcGxpZWQgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gYXBwbHkgaXQgYWdhaW4uCi0gICAgaWYg
KGFwcGxpZXNQYWdlU2NhbGUoKSB8fCAhbV9sYXllcikKKyAgICBpZiAoYXBwbGllc1BhZ2VTY2Fs
ZSgpIHx8IG1fbGF5ZXIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXIt
PnNldENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKKyAgICBtX2xheWVyLnNldENvbnRl
bnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKQogewot
ICAgIGlmIChjb250ZW50c0xheWVyID09IG1fY29udGVudHNMYXllcikKKyAgICBpZiAoY29udGVu
dHNMYXllciA9PSBtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgbV9jb250
ZW50c0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgICAgIG1fY29udGVudHNMYXllciA9
IDA7CisgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jb250
ZW50c0xheWVyLnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnJl
c2V0KCk7CiAgICAgfQogCiAgICAgaWYgKGNvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgbV9jb250
ZW50c0xheWVyID0gY29udGVudHNMYXllcjsKKyAgICAgICAgbV9jb250ZW50c0xheWVyID0gV2Vi
TGF5ZXIoY29udGVudHNMYXllcik7CiAKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogCiAgICAgICAgIC8vIEl0IGlzIG5lY2Vzc2Fy
eSB0byB1cGRhdGUgc2V0SXNEcmF3YWJsZSBhcyBzb29uIGFzIHdlIHJlY2VpdmUgdGhlIG5ldyBj
b250ZW50c0xheWVyLCBmb3IKICAgICAgICAgLy8gdGhlIGNvcnJlY3RuZXNzIG9mIGVhcmx5IGV4
aXQgY29uZGl0aW9ucyBpbiBzZXREcmF3c0NvbnRlbnQoKSBhbmQgc2V0Q29udGVudHNWaXNpYmxl
KCkuCi0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0SXNEcmF3YWJsZShtX2NvbnRlbnRzVmlz
aWJsZSk7CisgICAgICAgIG1fY29udGVudHNMYXllci5zZXRJc0RyYXdhYmxlKG1fY29udGVudHNW
aXNpYmxlKTsKIAogICAgICAgICAvLyBJbnNlcnQgdGhlIGNvbnRlbnQgbGF5ZXIgZmlyc3QuIFZp
ZGVvIGVsZW1lbnRzIHJlcXVpcmUgdGhpcywgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAgLy8g
c2hhZG93IGNvbnRlbnQgdGhhdCBtdXN0IGRpc3BsYXkgaW4gZnJvbnQgb2YgdGhlIHZpZGVvLgot
ICAgICAgICBtX2xheWVyLT5pbnNlcnRDaGlsZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCksIDApOwor
ICAgICAgICBtX2xheWVyLmluc2VydENoaWxkKG1fY29udGVudHNMYXllciwgMCk7CiAKICAgICAg
ICAgaWYgKHNob3dEZWJ1Z0JvcmRlcnMoKSkgewotICAgICAgICAgICAgbV9jb250ZW50c0xheWVy
LT5zZXREZWJ1Z0JvcmRlckNvbG9yKENvbG9yKDAsIDAsIDEyOCwgMTgwKSk7Ci0gICAgICAgICAg
ICBtX2NvbnRlbnRzTGF5ZXItPnNldERlYnVnQm9yZGVyV2lkdGgoMSk7CisgICAgICAgICAgICBt
X2NvbnRlbnRzTGF5ZXIuc2V0RGVidWdCb3JkZXJDb2xvcihDb2xvcigwLCAwLCAxMjgsIDE4MCku
cmdiKCkpOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLnNldERlYnVnQm9yZGVyV2lkdGgo
MSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDhjZTFmYzQ4ZTcxZGU2ZDkyMzRjNmY4
MjgxZmM4ZGNkMzA2ZTc4YjkuLjExZTY3YTE2MjJkZmViOWUxNGUwMDRhOTMzYWM0NDZhZWMwN2Yz
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNCwxMSArMzQsMTIg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDb250ZW50
TGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmgiCiAKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29u
dGVudExheWVyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkxheWVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTgsNyArOTksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsg
fQorICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gIW1f
Y29udGVudHNMYXllci5pc051bGwoKTsgfQogCiAgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCk7CkBAIC0xMjMsMTYgKzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSBmaW5pc2hUaW1lKTsKIAogICAg
IC8vIEV4cG9zZWQgZm9yIHRlc3RzLgotICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6Oldl
YkxheWVyIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0K
IAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CiAKLSAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IEFuaW1hdGlvbklkTWFwOwotCi0gICAgTGF5ZXJD
aHJvbWl1bSogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIu
Z2V0KCkgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQotICAgIExh
eWVyQ2hyb21pdW0qIGhvc3RMYXllckZvckNoaWxkcmVuKCkgY29uc3Q7Ci0gICAgTGF5ZXJDaHJv
bWl1bSogbGF5ZXJGb3JQYXJlbnQoKSBjb25zdDsKKyAgICBXZWJLaXQ6OldlYkxheWVyIHByaW1h
cnlMYXllcigpIGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpID8gbV9s
YXllciA6IG1fdHJhbnNmb3JtTGF5ZXI7IH0KKyAgICBXZWJLaXQ6OldlYkxheWVyIGhvc3RMYXll
ckZvckNoaWxkcmVuKCkgY29uc3Q7CisgICAgV2ViS2l0OjpXZWJMYXllciBsYXllckZvclBhcmVu
dCgpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVOYW1lcygpOwogICAgIHZvaWQgdXBkYXRlQ2hp
bGRMaXN0KCk7CkBAIC0xNTgsMTAgKzE1Nyw5IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9u
YW1lQmFzZTsKIAotICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKLSAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwotICAgIFJlZlB0cjxMaW5rSGlnaGxpZ2h0PiBt
X2xpbmtIaWdobGlnaHQ7CisgICAgV2ViS2l0OjpXZWJDb250ZW50TGF5ZXIgbV9sYXllcjsKKyAg
ICBXZWJLaXQ6OldlYkxheWVyIG1fdHJhbnNmb3JtTGF5ZXI7CisgICAgV2ViS2l0OjpXZWJMYXll
ciBtX2NvbnRlbnRzTGF5ZXI7CiAKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAg
ICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKQEAgLTE3NSw2ICsxNzMsOSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pblNldENoaWxkcmVuOwogICAgIGJvb2wgbV9wYWdlU2NhbGVDaGFuZ2VkOwog
CisgICAgUmVmUHRyPExpbmtIaWdobGlnaHQ+IG1fbGlua0hpZ2hsaWdodDsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gQW5pbWF0aW9uSWRNYXA7CiAgICAgQW5pbWF0aW9uSWRN
YXAgbV9hbmltYXRpb25JZE1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhNTkwYmQy
YzMxYTA1YjU0YjVlZjhiMTVjYmFkOTg1NzA1ZDIxN2U1Li43NTVhN2RhOTFlNjQ1YjJhZjA3ODkx
Zjg0MjQwZmEyYWEzZmJjMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNTAsOCArMzUwLDYg
QEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKICAgICBmbG9h
dCBtX2NvbnRlbnRzU2NhbGU7CiAKLSAgICBib29sIG1fcGFnZVNjYWxlRGlydHk7Ci0KICAgICBD
Q0xheWVyQW5pbWF0aW9uRGVsZWdhdGUqIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA4MDFhODg3NGZkOWYzMjJiZmY5NTc4NTNh
ZDE0MGUxNTU1YzFiMTM2Li5kYWFkZTA2ZjI4OGY0YWU2ZTFlNjY0Y2UzOWJhMWU2Nzg5YWM2MDk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02MTAsOCArNjEwLDggQEAKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlBlcmZvcm1hbmNlLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdpbkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlBsdWdpbkxpc3RCdWlsZGVySW1wbC5oJywKQEAgLTY1MSw2ICs2NTEsNyBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1wbC5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTExvYWRUaW1pbmcu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCA1MjkwZTJmMzVh
YjEyYjhhNzU2MjIwMDBmYTE5MzMwYTg5MzZkOTQzLi4xNjViMmQyODk1MzQ3NzNiNDJiMzMzOThm
MTZmNDNlYTgzMzc4MDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllci5jcHAKQEAgLTI0LDExICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb250ZW50TGF5ZXIuaCIKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViQ29udGVudExheWVyLmg+CiAKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkNv
bnRlbnRMYXllckltcGwuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBXZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2Vi
Q29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQpAQCAtMzYsMzAgKzM4LDM1IEBAIFdl
YkNvbnRlbnRMYXllciBXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZShXZWJDb250ZW50TGF5ZXJDbGll
bnQqIGNvbnRlbnRDbGllbnQpCiAgICAgcmV0dXJuIFdlYkNvbnRlbnRMYXllcihXZWJDb250ZW50
TGF5ZXJJbXBsOjpjcmVhdGUoY29udGVudENsaWVudCkpOwogfQogCit2b2lkIFdlYkNvbnRlbnRM
YXllcjo6Y2xlYXJDbGllbnQoKQoreworICAgIHVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4o
KS0+Y2xlYXJEZWxlZ2F0ZSgpOworfQorCiB2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3ND
b250ZW50KGJvb2wgZHJhd3NDb250ZW50KQogewotICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJ
bXBsPigpLT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKKyAgICB1bndyYXA8Q29udGVu
dExheWVyQ2hyb21pdW0+KCktPnNldElzRHJhd2FibGUoZHJhd3NDb250ZW50KTsKIH0KIAogYm9v
bCBXZWJDb250ZW50TGF5ZXI6OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNv
bnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRyYXdzQ29udGVudCgpOworICAgIHJl
dHVybiBjb25zdFVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+ZHJhd3NDb250ZW50KCk7
CiB9CiAKLVdlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8
V2ViQ29udGVudExheWVySW1wbD4mIG5vZGUpCitXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRM
YXllcihjb25zdCBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiYgbm9kZSkKICAgICA6
IFdlYkxheWVyKG5vZGUpCiB7CiB9CiAKLVdlYkNvbnRlbnRMYXllciYgV2ViQ29udGVudExheWVy
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYgbm9kZSkK
K1dlYkNvbnRlbnRMYXllciYgV2ViQ29udGVudExheWVyOjpvcGVyYXRvcj0oY29uc3QgUGFzc1Jl
ZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4mIG5vZGUpCiB7CiAgICAgbV9wcml2YXRlID0gbm9k
ZTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVdlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFz
c1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPigpIGNvbnN0CitXZWJDb250ZW50TGF5ZXI6Om9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29udGVudExheWVySW1wbCo+KG1fcHJpdmF0ZS5nZXQoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRlbnRMYXllckNocm9taXVtKj4obV9wcml2YXRl
LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDRkNDc2MDk1ZDA0
NWMwNjJjNzM2YWM1ZDQ2NWExZjk2YjA2MDNlYWYuLjIyMmZhMmZhNzY2NTIwMjI4MDhjMTRhY2U5
MTE0MTQxYmE0N2VkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC01MywxMSArNTMsNiBAQCBXZWJDb250ZW50TGF5ZXJJ
bXBsOjp+V2ViQ29udGVudExheWVySW1wbCgpCiAgICAgY2xlYXJEZWxlZ2F0ZSgpOwogfQogCi12
b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVu
dCkKLXsKLSAgICBzZXRJc0RyYXdhYmxlKGRyYXdzQ29udGVudCk7Ci19Ci0KIHZvaWQgV2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJ
bnRSZWN0JiBjbGlwKQogewogICAgIGlmICghbV9jb250ZW50Q2xpZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmluZGV4IDUxZjM0NGY3
Y2FmMTI3MTEyNmFjN2I0MjY4ZWQ1NDYxMjE0MjE5ZDguLmEwNmNmOTA4MjkxZmFmZWE2MjNjYmJl
NzU3YWNlMjY4YmY1MmRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTM2LDggKzM2LDYgQEAgY2xhc3MgV2ViQ29udGVudExh
eWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdl
YkNvcmUKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBs
PiBjcmVhdGUoV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KTsKIAotICAgIHZv
aWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwotCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgV2Vi
Q29udGVudExheWVySW1wbChXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOwog
ICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyLmNwcAppbmRleCBlY2Y3NDUyZmM2NTRhMWY3NmU3ZWE2Mzk4OGY3NmU2M2Vk
ZDE5MDY2Li40NmVlMjczYjZjNDM4NmE1MDhhZTMwMDE1NTc1MDE4YWE1NWU5YTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSA8cHVibGljL1dlYkZsb2F0UG9pbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRS
ZWN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlNpemUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAg
LTk2LDYgKzk3LDEyIEBAIGJvb2wgV2ViTGF5ZXI6OmVxdWFscyhjb25zdCBXZWJMYXllciYgbikg
Y29uc3QKICAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7
CiB9CiAKK3ZvaWQgV2ViTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgbV9wcml2YXRl
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICBtX3ByaXZhdGUtPnNldExheWVyQW5pbWF0aW9u
RGVsZWdhdGUoMCk7Cit9CisKIHZvaWQgV2ViTGF5ZXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IFdl
YkZsb2F0UmVjdCYgZGlydHlSZWN0KQogewogICAgIG1fcHJpdmF0ZS0+c2V0TmVlZHNEaXNwbGF5
UmVjdChkaXJ0eVJlY3QpOwpAQCAtMjI4LDYgKzIzNSwxMSBAQCB2b2lkIFdlYkxheWVyOjpzZXRT
dWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0JiBtYXRyaXgpCiAgICAgbV9wcml2YXRl
LT5zZXRTdWJsYXllclRyYW5zZm9ybSh0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0
KG1hdHJpeCkpOwogfQogCit2b2lkIFdlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIG1fcHJpdmF0ZS0+c2V0
U3VibGF5ZXJUcmFuc2Zvcm0obWF0cml4LnRvV2ViQ29yZVRyYW5zZm9ybSgpKTsKK30KKwogU2tN
YXRyaXg0NCBXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVy
biBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJU
cmFuc2Zvcm0oKSk7CkBAIC0yMzgsNiArMjUwLDExIEBAIHZvaWQgV2ViTGF5ZXI6OnNldFRyYW5z
Zm9ybShjb25zdCBTa01hdHJpeDQ0JiBtYXRyaXgpCiAgICAgbV9wcml2YXRlLT5zZXRUcmFuc2Zv
cm0odHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRyaXg0NChtYXRyaXgpKTsKIH0KIAordm9p
ZCBXZWJMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpCit7CisgICAgbV9wcml2YXRlLT5zZXRUcmFuc2Zvcm0obWF0cml4LnRvV2ViQ29yZVRy
YW5zZm9ybSgpKTsKK30KKwogU2tNYXRyaXg0NCBXZWJMYXllcjo6dHJhbnNmb3JtKCkgY29uc3QK
IHsKICAgICByZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3ByaXZh
dGUtPnRyYW5zZm9ybSgpKTsKQEAgLTI1Myw2ICsyNzAsMzEgQEAgdm9pZCBXZWJMYXllcjo6c2V0
RGVidWdCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkKICAgICBtX3ByaXZhdGUtPnNldERlYnVnQm9y
ZGVyV2lkdGgod2lkdGgpOwogfQogCit2b2lkIFdlYkxheWVyOjpzZXRJc0RyYXdhYmxlKGJvb2wg
ZHJhd2FibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJc0RyYXdhYmxlKGRyYXdhYmxlKTsKK30K
Kwordm9pZCBXZWJMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZTNEKQoreworICAg
IG1fcHJpdmF0ZS0+c2V0UHJlc2VydmVzM0QocHJlc2VydmUzRCk7Cit9CisKK3ZvaWQgV2ViTGF5
ZXI6OnNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpCit7CisgICAgbV9wcml2YXRlLT5z
ZXREb3VibGVTaWRlZChkb3VibGVTaWRlZCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldEJhY2tn
cm91bmRDb2xvcihXZWJDb2xvciBjb2xvcikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJhY2tncm91
bmRDb2xvcihjb2xvcik7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxv
YXQgc2NhbGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKK30K
Kwogdm9pZCBXZWJMYXllcjo6c2V0RmlsdGVycyhjb25zdCBXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQogewogICAgIG1fcHJpdmF0ZS0+c2V0RmlsdGVycyhmaWx0ZXJzLnRvRmlsdGVyT3Bl
cmF0aW9ucygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1h
Z2VMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lt
YWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGJmODg5NTk0YzliZWE1MWNhY2FkMGEzNTAw
ZjhmMDk5YzViNGU5MzIuLmNhMTc3ODZiY2MwNzEwYWZmMWFhOWMwYzFkNzJjZmY3YjgxNGYzNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtMTIxLDEzICsxMjEsMTMgQEAgVEVTVChJbWFnZUxheWVyQ2hy
b21pdW1UZXN0LCBvcGFxdWVJbWFnZXMpCiAgICAgUmVmUHRyPEltYWdlPiBub25PcGFxdWVJbWFn
ZSA9IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CiAgICAgQVNT
RVJUX1RSVUUobm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOwogCi0gICAgQVNTRVJUX0ZBTFNFKGdyYXBo
aWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNMYXllcigpLmlzTnVsbCgpKTsKIAogICAgIGdyYXBoaWNzTGF5ZXItPnNldENv
bnRlbnRzVG9JbWFnZShvcGFxdWVJbWFnZS5nZXQoKSk7Ci0gICAgQVNTRVJUX1RSVUUoZ3JhcGhp
Y3NMYXllci0+Y29udGVudHNMYXllcigpLT5vcGFxdWUoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3Jh
cGhpY3NMYXllci0+Y29udGVudHNMYXllcigpLm9wYXF1ZSgpKTsKIAogICAgIGdyYXBoaWNzTGF5
ZXItPnNldENvbnRlbnRzVG9JbWFnZShub25PcGFxdWVJbWFnZS5nZXQoKSk7Ci0gICAgQVNTRVJU
X0ZBTFNFKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKS0+b3BhcXVlKCkpOworICAgIEFT
U0VSVF9GQUxTRShncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCkub3BhcXVlKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141819</attachid>
            <date>2012-05-14 17:14:21 -0700</date>
            <delta_ts>2012-05-16 23:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86269-20120514171420.patch</filename>
            <type>text/plain</type>
            <size>51613</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBjYmJiNmI2YWQwYzM3
NDRhYTRjNGM4NWQ5NTc1NjE2YTliMWQ5MGVlLi5lODA1MjNjMzRkNGU4NGMzMTY5MDQwYmQ1OGM5
MjAxMGY4OGNkOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNS0xMSAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBHcmFwaGljc0xheWVyQ2hyb21pdW0gdG8gdXNlIFdlYkxheWVyIHR5cGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI2OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc29tZSBu
ZXcgV2ViTGF5ZXIgLyBXZWJDb250ZW50TGF5ZXIgQVBJcyB0aGF0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSBuZWVkcy4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkNvbnRlbnRMYXllcik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkxheWVy
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6aXNOdWxs
KToKKyAgICAgICAgKFdlYkxheWVyKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6On5XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisgICAgICAgICAgICBGaXggYSBtZW1v
cnkgbGVhayAtIFdlYlByaXZhdGVPd25QdHI8PnMgaGF2ZSB0byBiZSBleHBsaWNpdGx5IGNsZWFy
ZWQuCisgICAgICAgIChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDUtMTIgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTY4MTIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU2MDkyNzI0Mjc1YTM3
ODNlNWZjZTJjNWRkZjE0ZDY0ODQ5YmUxZS4uZmY5MTFiZmI3M2IyZTcwNGVjNDQ3ZDI5MWZhZjg1
YzJjNjZjYmM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTA1LTExICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBD
b252ZXJ0IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB0byB1c2UgV2ViTGF5ZXIgdHlwZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MjY5CisKKyAgICAg
ICAgVGhpcyBjb252ZXJ0cyBHcmFwaGljc0xheWVyQ2hyb21pdW0gb3ZlciB0byB1c2UgV2ViTGF5
ZXIgYW5kIFdlYkNvbnRlbnRMYXllci4gVGhlIGNvbnZlcnNpb24gaXMgbm90IGNvbXBsZXRlbHkK
KyAgICAgICAgYXMgdGhlIFdlYipMYXllciBBUElzIGFyZSBub3QgeWV0IHF1aXRlIGNvbXBsZXRl
IGVub3VnaCB0byB1c2UgZXZlcnl3aGVyZSwgYW5kIHRoZSBQbGF0Zm9ybUxheWVyIHR5cGVkZWYg
aXMgbm90CisgICAgICAgIGNoYW5nZWQgaW4gdGhpcyBwYXRjaC4gVGhlIHBsYWNlcyB3aGVyZSB3
ZSBoYXZlIHRvIHB1bmNoIG91dCB0aHJvdWdoIEFQSSBsYXllciBhcmUgbWFya2VkIGJ5CisgICAg
ICAgIHVud3JhcDwqTGF5ZXJDaHJvbWl1bT4oKSBjYWxscyBhbmQgRklYTUUncyBpbiB0aGUgV2Vi
KkxheWVyLmggZmlsZXMuICBUaGVyZSBhcmVuJ3QgbWFueS4KKworICAgICAgICBSZWZhY3RvciBv
bmx5LCBleGlzdGluZyB0ZXN0cyBhcHBseS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2ludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6d2ls
bEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3Zl
RnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpj
bGVhckJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aG9zdExheWVyRm9yQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpsYXllckZvclBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9y
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hp
bGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06OnVwZGF0ZUFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVySXNEcmF3
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldHVwQ29udGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06Omhhc0NvbnRlbnRzTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpjb250ZW50c0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cHJpbWFyeUxheWVyKToKKyAgICAg
ICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisKIDIw
MTItMDUtMTQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5zaW9ucyBBUEldIGFsbG93IGV4dGVuc2lvbnMgdG8gZXZh
bHVhdGUgaW4gdGhlIGNvbnRleHQgb2YgdGhlaXIgY29udGVudCBzY3JpcHRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGY4YTUwYmM1MDMzNjlkY2IzODlmOWM4OTdmMWFiZmViM2M4MDgx
YmIuLjc2MzU2ZGJiMmZmYzM2ODkyOGNmZmM3NjliZTNlZTU0Mjk2OTgzMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDUtMTEgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQg
R3JhcGhpY3NMYXllckNocm9taXVtIHRvIHVzZSBXZWJMYXllciB0eXBlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyNjkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6Y2xlYXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyOjpzZXREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6V2ViQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+KToKKyAgICAgICAgKiBzcmMvV2ViQ29u
dGVudExheWVySW1wbC5jcHA6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoK
KyAgICAgICAgKFdlYkNvbnRlbnRMYXllckltcGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0VHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldElzRHJhd2FibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldENvbnRlbnRzU2Nh
bGUpOgorICAgICAgICAqIHRlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MTY4MTIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNv
bnRlbnRMYXllci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50
TGF5ZXIuaAppbmRleCA2OTk0MThjMzQ5YmU5NjUzOWE4Y2E3Zjc2YTE1Y2MzNTM1YTQxZWNhLi5h
ODZhNThlMWM0MTFiZDdmMjZjYjNjNjQ2NjViYTUxNjM2M2UwZjUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTI5LDEwICsy
OSwxMyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYkxheWVyLmgiCiAK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRlbnRMYXllckNocm9taXVtOworfQorCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNvbnRlbnRMYXllckNsaWVudDsKIGNsYXNzIFdl
YkNvbnRlbnRMYXllckltcGw7Ci1zdHJ1Y3QgV2ViRmxvYXRSZWN0OwogCiBjbGFzcyBXZWJDb250
ZW50TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgewogcHVibGljOgpAQCAtNDcsMTQgKzUwLDIwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIC8vIFNldHMgd2hl
dGhlciB0aGUgbGF5ZXIgZHJhd3MgaXRzIGNvbnRlbnQgd2hlbiBjb21wb3NpdGluZy4KLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwotICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgV2Vi
Q29udGVudExheWVyQ2xpZW50IGlzIGdvaW5nIGF3YXkgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4K
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgY2xlYXJDbGllbnQoKTsKKworICAgIC8vIFNldCB0byB0
cnVlIGlmIHRoZSBiYWNrc2lkZSBvZiB0aGlzIGxheWVyJ3MgY29udGVudHMgc2hvdWxkIGJlIHZp
c2libGUgd2hlbiBjb21wb3NpdGVkLgorICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXREb3VibGVTaWRlZChib29sKTsKKworICAgIC8vIFNldCB0byBh
cHBseSBhIHNjYWxlIGZhY3RvciB1c2VkIHdoZW4gcGFpbnRpbmcgYW5kIGRyYXdpbmcgdGhpcyBs
YXllcidzIGNvbnRlbnQuIERlZmF1bHRzIHRvIDEuMC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAg
ICBXZWJDb250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllcklt
cGw+Jik7Ci0gICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRy
PFdlYkNvbnRlbnRMYXllckltcGw+KCkgY29uc3Q7CisgICAgV2ViQ29udGVudExheWVyKGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBX
ZWJDb250ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
Q29udGVudExheWVyQ2hyb21pdW0+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtPigpIGNvbnN0OwogI2VuZGlmCiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKaW5kZXggNDc0OTdkZTU3OTQ3
ODBkNjJiMjlhNDM3MjIxOWJkZjUxMThkYjdhMS4uZGYwODk0OGY3MTJhMTAyMGIzMDhkYWM4NWQ0
ODM1M2FhNjY1MDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJMYXllci5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXIuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIExheWVyQ2hy
b21pdW07IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGaWx0ZXJPcGVyYXRpb25z
OworY2xhc3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBzdHJ1Y3QgV2ViRmxvYXRQb2ludDsK
IHN0cnVjdCBXZWJGbG9hdFJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTUxLDcgKzUyLDcgQEAg
cHVibGljOgogICAgICAgICBhc3NpZ24obGF5ZXIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQotICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Cisg
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KICAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNz
aWduKGNvbnN0IFdlYkxheWVyJik7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25z
dCBXZWJMYXllciYpIGNvbnN0OwpAQCAtOTUsMTMgKzk2LDE5IEBAIHB1YmxpYzoKICAgICBXRUJL
SVRfRVhQT1JUIFdlYkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKIAogICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7CisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBTa01hdHJpeDQ0IHN1YmxheWVyVHJh
bnNmb3JtKCkgY29uc3Q7CiAKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFNrTWF0cml4NDQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBTa01hdHJp
eDQ0IHRyYW5zZm9ybSgpIGNvbnN0OwogCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERlYnVn
Qm9yZGVyQ29sb3IoY29uc3QgV2ViQ29sb3ImKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7CisgICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBsYXllciBk
cmF3cyBpdHMgY29udGVudCB3aGVuIGNvbXBvc2l0aW5nLgorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFByZXNlcnZlczNEKGJv
b2wpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29sb3Ip
OwogCiAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlcnMgaW4gdXNlIGJ5IHBhc3NpbmcgaW4gYSBuZXds
eSBpbnN0YW50aWF0ZWQKICAgICAvLyBXZWJGaWx0ZXJPcGVyYXRpb25zIG9iamVjdC4KQEAgLTEx
NCw2ICsxMjEsOSBAQCBwdWJsaWM6CiAgICAgLy8gY29uZmxpY3QgYW5kIGhpZGUgdGhlIGJhY2tn
cm91bmQgZmlsdGVycy4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgV2ViRmlsdGVyT3BlcmF0aW9ucyYpOwogCisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldERlYnVnQm9yZGVyQ29sb3IoY29uc3QgV2ViQ29sb3ImKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgc2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIHRvKCkKICAgICB7CiAgICAgICAgIFQgcmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCmluZGV4
IDkzM2I4NmExODNkYzk0YzYzMTM5NDAyOWFjMDk0ZjQ0MmQ4YTcxYTIuLmFlZWJlMWM0MTYxMzM5
YTVlMjNiY2E0ZDU2YjBhMWE2MWQwOWU3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTQ5LDYg
KzQ5LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB7CiBwdWJsaWM6CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICB+V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSB7IHJlc2V0KCk7IH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
cmVzZXQoKTsKKwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUg
YiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOwogICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKaW5kZXggOGE0ZWEwMDhmOTFkYWIyMzU0
NTY0ZjQ0Y2FjYzNkMGVkOTM4MmNiYy4uYmM4NmE1ZTJlOWQ0ZWE1NjA4MTY2NjY2OTAwNDkwNGQ3
ODA3MTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKQEAgLTUw
LDEyICs1MCwxNSBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmCiB7CiB9CiAKLSNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKICAgICA6IG1fcHJpdmF0ZShu
ZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgodCkpCiB7CiB9Ci0jZW5kaWYKKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30K
IAogV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvcj0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiB7CkBAIC00MTUsNyArNDE4
LDYgQEAgdm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3VibGUgZikKICAgICBt
X3ByaXZhdGUtPnNldEYoZik7CiB9CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KIFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG9XZWJDb3JlVHJhbnNm
b3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4gKm1fcHJpdmF0ZS5nZXQoKTsKQEAgLTQ1NSw2ICs0
NTcsNSBAQCBGbG9hdFBvaW50IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCwgYm9vbCogY2xhbQogewogICAgIHJldHVybiBtX3ByaXZhdGUt
PnByb2plY3RQb2ludChwLCBjbGFtcGVkKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDk0MzE3MzUw
NGJiNGQ1YTUyOWVhM2M2ZmE1ZDU5ZTNiNGU2YmEyNzYuLjlhYTI3Y2MzM2I2NGZiZjJiNmQyMmQw
MjRhOTI3OTczOWNhYTI2NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNTUsMTQgKzU1LDIyIEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxpbmtIaWdobGlnaHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNrTWF0cml4NDQuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdFJlY3QuaD4K
KyNpbmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3VzaW5nIFdlYktpdDo6V2ViQ29udGVudExheWVyOwordXNp
bmcgV2ViS2l0OjpXZWJMYXllcjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50
KiBjbGllbnQpCkBAIC03Nyw3ICs4NSw3IEBAIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhp
Y3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5T
ZXRDaGlsZHJlbihmYWxzZSkKICAgICAsIG1fcGFnZVNjYWxlQ2hhbmdlZChmYWxzZSkKIHsKLSAg
ICBtX2xheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2xh
eWVyID0gV2ViQ29udGVudExheWVyKENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUodGhpcykp
OwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC05MCwyMiArOTgsMjAgQEAg
R3JhcGhpY3NMYXllckNocm9taXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKIAogdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKG1fbGF5
ZXIpIHsKLSAgICAgICAgbV9sYXllci0+Y2xlYXJEZWxlZ2F0ZSgpOwotICAgICAgICBtX2xheWVy
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgLy8gUHJpbWFyeSBsYXllciBtYXkgaGF2
ZSBhdCBvbmUgcG9pbnQgYmVlbiBtX2xheWVyLiBCZSBzdXJlIHRvIHJlc2V0Ci0gICAgICAgIC8v
IHRoZSBkZWxlZ2F0ZSwganVzdCBpbiBjYXNlLgotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFu
aW1hdGlvbkRlbGVnYXRlKDApOworICAgIGlmICghbV9sYXllci5pc051bGwoKSkgeworICAgICAg
ICBtX2xheWVyLmNsZWFyQ2xpZW50KCk7CisgICAgICAgIG1fbGF5ZXIudW53cmFwPExheWVyQ2hy
b21pdW0+KCktPmNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAgICAgICBtX2xheWVyLnVud3JhcDxM
YXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwogICAgIH0KIAot
ICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgIG1fY29udGVudHNMYXllci0+Y2xlYXJS
ZW5kZXJTdXJmYWNlKCk7CisgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKKyAg
ICAgICAgbV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5jbGVhclJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNocm9taXVt
PigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOworICAgIH0KIAotICAgIGlmIChtX3Ry
YW5zZm9ybUxheWVyKSB7Ci0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPmNsZWFyUmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICAvLyBQcmltYXJ5IGxheWVyIG1heSBoYXZlIHN3aXRjaGVkIGZyb20g
bV9sYXllciB0byBtX3RyYW5zZm9ybUxheWVyLgotICAgICAgICAvLyBCZSBzdXJlIHRvIHJlc2V0
IHRoZSBkZWxlZ2F0ZSwganVzdCBpbiBjYXNlLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5z
ZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5p
c051bGwoKSkgeworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVt
PigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndy
YXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKICAgICB9
CiAKICAgICBpZiAobV9saW5rSGlnaGxpZ2h0KQpAQCAtMTE3LDE5ICsxMjMsMTkgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3llZCgpCiB2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIGluTmFtZSkKIHsKICAgICBtX25hbWVC
YXNlID0gaW5OYW1lOwotICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpmb3JtYXQoIkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9sYXllci5nZXQoKSwgdGhp
cykgKyBpbk5hbWU7CisgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiR3JhcGhpY3NM
YXllckNocm9taXVtKCVwKSBHcmFwaGljc0xheWVyKCVwKSAiLCBtX2xheWVyLnVud3JhcDxMYXll
ckNocm9taXVtPigpLCB0aGlzKSArIGluTmFtZTsKICAgICBHcmFwaGljc0xheWVyOjpzZXROYW1l
KG5hbWUpOwogICAgIHVwZGF0ZU5hbWVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVOYW1lcygpCiB7Ci0gICAgaWYgKG1fbGF5ZXIpCi0gICAgICAgIG1fbGF5ZXIt
PnNldERlYnVnTmFtZSgiTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsKLSAgICBpZiAobV90cmFu
c2Zvcm1MYXllcikKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0RGVidWdOYW1lKCJUcmFu
c2Zvcm1MYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOwotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIp
Ci0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0RGVidWdOYW1lKCJDb250ZW50c0xheWVyIGZv
ciAiICsgbV9uYW1lQmFzZSk7CisgICAgaWYgKCFtX2xheWVyLmlzTnVsbCgpKQorICAgICAgICBt
X2xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXREZWJ1Z05hbWUoIkxheWVyIGZvciAi
ICsgbV9uYW1lQmFzZSk7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKQorICAg
ICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXREZWJ1Z05h
bWUoIlRyYW5zZm9ybUxheWVyIGZvciAiICsgbV9uYW1lQmFzZSk7CisgICAgaWYgKCFtX2NvbnRl
bnRzTGF5ZXIuaXNOdWxsKCkpCisgICAgICAgIG1fY29udGVudHNMYXllci51bndyYXA8TGF5ZXJD
aHJvbWl1bT4oKS0+c2V0RGVidWdOYW1lKCJDb250ZW50c0xheWVyIGZvciAiICsgbV9uYW1lQmFz
ZSk7CiAgICAgaWYgKG1fbGlua0hpZ2hsaWdodCkKICAgICAgICAgbV9saW5rSGlnaGxpZ2h0LT5j
b250ZW50TGF5ZXIoKS0+c2V0RGVidWdOYW1lKCJMaW5rSGlnaGxpZ2h0IGZvciAiICsgbV9uYW1l
QmFzZSk7CiB9CkBAIC0xODMsNyArMTg5LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllcioKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKICAgICBHcmFw
aGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbGF5ZXJGb3JQYXJlbnQoKS0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIGxheWVyRm9yUGFyZW50KCkucmVtb3ZlRnJvbVBhcmVudCgp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCkBAIC0yMTMsMTQgKzIxOSwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0U2l6ZShjbGFtcGVkU2l6ZSk7CiAgICAgdXBkYXRlTGF5ZXJTaXplKCk7CiAKLSAgICBp
ZiAobV9wYWdlU2NhbGVDaGFuZ2VkICYmIG1fbGF5ZXIpCi0gICAgICAgIG1fbGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOworICAgIGlmIChtX3BhZ2VTY2FsZUNoYW5nZWQgJiYgIW1fbGF5ZXIuaXNO
dWxsKCkpCisgICAgICAgIG1fbGF5ZXIuaW52YWxpZGF0ZSgpOwogICAgIG1fcGFnZVNjYWxlQ2hh
bmdlZCA9IGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAgLy8gQ2Fs
bCB0aGlzIG1ldGhvZCBmaXJzdCB0byBhc3NpZ24gY29udGVudHMgc2NhbGUgdG8gTGF5ZXJDaHJv
bWl1bSBzbyB0aGUgcGFpbnRlciBjYW4gYXBwbHkgdGhlIHNjYWxlIHRyYW5zZm9ybS4KKyAgICAv
LyBDYWxsIHRoaXMgbWV0aG9kIGZpcnN0IHRvIGFzc2lnbiBjb250ZW50cyBzY2FsZSB0byBvdXIg
bGF5ZXIgc28gdGhlIHBhaW50ZXIgY2FuIGFwcGx5IHRoZSBzY2FsZSB0cmFuc2Zvcm0uCiAgICAg
dXBkYXRlQ29udGVudHNTY2FsZSgpOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3Jt
KHRyYW5zZm9ybSk7CkBAIC0yNTEsNyArMjU3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKQogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKIHsKICAgICAv
LyBOb3RlIGNhcmVmdWxseSB0aGlzIGVhcmx5LWV4aXQgaXMgb25seSBjb3JyZWN0IGJlY2F1c2Ug
d2UgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplCi0gICAgLy8gTGF5ZXJDaHJvbWl1bTo6aXNEcmF3
YWJsZSgpIHdoZW5ldmVyIG1fY29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIgaW4g
c2V0dXBDb250ZW50c0xheWVyKCkuCisgICAgLy8gTGF5ZXJDaHJvbWl1bTo6bV9pc0RyYXdhYmxl
IHdoZW5ldmVyIG1fY29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIgaW4gc2V0dXBD
b250ZW50c0xheWVyKCkuCiAgICAgaWYgKGRyYXdzQ29udGVudCA9PSBtX2RyYXdzQ29udGVudCkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjIsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBjb250ZW50c1Zpc2libGUp
CiB7CiAgICAgLy8gTm90ZSBjYXJlZnVsbHkgdGhpcyBlYXJseS1leGl0IGlzIG9ubHkgY29ycmVj
dCBiZWNhdXNlIHdlIGFsc28gcHJvcGVybHkgaW5pdGlhbGl6ZQotICAgIC8vIExheWVyQ2hyb21p
dW06OmlzRHJhd2FibGUoKSB3aGVuZXZlciBtX2NvbnRlbnRzTGF5ZXIgaXMgc2V0IHRvIGEgbmV3
IGxheWVyIGluIHNldHVwQ29udGVudHNMYXllcigpLgorICAgIC8vIExheWVyQ2hyb21pdW06Om1f
aXNEcmF3YWJsZSB3aGVuZXZlciBtX2NvbnRlbnRzTGF5ZXIgaXMgc2V0IHRvIGEgbmV3IGxheWVy
IGluIHNldHVwQ29udGVudHNMYXllcigpLgogICAgIGlmIChjb250ZW50c1Zpc2libGUgPT0gbV9j
b250ZW50c1Zpc2libGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjcyLDcgKzI3OCw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBjb250ZW50
c1Zpc2libGUpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91
bmRDb2xvcihjb2xvcik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNv
bG9yLnJnYigpKTsKIAogICAgIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvciA9IHRy
dWU7CiAgICAgdXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTI4MSwxOCArMjg3LDE4
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmNsZWFyQmFja2dyb3Vu
ZENvbG9yKCkKIHsKICAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOwot
ICAgIG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEz
Mj4oMCkpOworICAgIG1fY29udGVudHNMYXllci5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nh
c3Q8UkdCQTMyPigwKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250
ZW50c09wYXF1ZShib29sIG9wYXF1ZSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c09wYXF1ZShvcGFxdWUpOwotICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVl
KTsKKyAgICBtX2xheWVyLnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAogYm9vbCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKIHsKLSAgICBtX2xheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIG1fbGF5
ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldEZpbHRlcnMoZmlsdGVycyk7CiAgICAgcmV0
dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAKQEAgLTMwNCw0NyAr
MzEwLDQ3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIoR3JhcGhp
Y3NMYXllciogbWFza0xheWVyKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihtYXNr
TGF5ZXIpOwogCiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyQ2hyb21pdW0gPSBtX21hc2tM
YXllciA/IG1fbWFza0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotICAgIG1fbGF5ZXItPnNl
dE1hc2tMYXllcihtYXNrTGF5ZXJDaHJvbWl1bSk7CisgICAgbV9sYXllci51bndyYXA8TGF5ZXJD
aHJvbWl1bT4oKS0+c2V0TWFza0xheWVyKG1hc2tMYXllckNocm9taXVtKTsKIH0KIAogdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZpc2libGUp
CiB7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZpc2libGUpOwot
ICAgIG1fbGF5ZXItPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICBt
X2xheWVyLnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBm
bG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAuMGYpOwogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAgIHByaW1hcnlM
YXllcigpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIHByaW1hcnlMYXllcigpLnNldE9wYWNp
dHkob3BhY2l0eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyQ2hy
b21pdW0qIGxheWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0q
PihsYXllcik7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIp
OwotICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyQ2hyb21pdW0gPyBsYXll
ckNocm9taXVtLT5wcmltYXJ5TGF5ZXIoKSA6IDA7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFJl
cGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOworICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXll
ciA9IGxheWVyQ2hyb21pdW0gPyBsYXllckNocm9taXVtLT5wcmltYXJ5TGF5ZXIoKS51bndyYXA8
TGF5ZXJDaHJvbWl1bT4oKSA6IDA7CisgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hy
b21pdW0+KCktPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOwogfQogCiAKIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYg
KG1fY29udGVudHNMYXllcikKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKTsKKyAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKKyAgICAgICAgbV9jb250
ZW50c0xheWVyLmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICBt
X2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChyZWN0KTsKKyAgICAgICAgbV9sYXllci5p
bnZhbGlkYXRlUmVjdChyZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMzYwLDIyICszNjYsMjIgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAoaW1hZ2Up
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVy
UHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9ySW1hZ2UpIHsKKyAgICAgICAgaWYgKG1fY29udGVu
dHNMYXllci5pc051bGwoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5
ZXJGb3JJbWFnZSkgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gaW1h
Z2VMYXllciA9IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBzZXR1
cENvbnRlbnRzTGF5ZXIoaW1hZ2VMYXllci5nZXQoKSk7CiAgICAgICAgICAgICBtX2NvbnRlbnRz
TGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckltYWdlOwogICAgICAgICAgICAgY2hpbGRy
ZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0q
IGltYWdlTGF5ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRz
TGF5ZXIuZ2V0KCkpOworICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5ZXIgPSBz
dGF0aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExh
eWVyQ2hyb21pdW0+KCkpOwogICAgICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhpbWFnZSk7
CiAgICAgICAgIGltYWdlTGF5ZXItPnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYm
ICFpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRz
UmVjdCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGNoaWxk
cmVuQ2hhbmdlZCA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIFRoZSBvbGQgY29udGVudHMgbGF5
ZXIgd2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVDaGlsZExpc3QuCi0gICAgICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSAwOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLnJlc2V0KCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTM4NywxOCArMzkzLDE4IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAocGxhdGZv
cm1MYXllcikgewotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyLmdldCgpICE9IHBsYXRmb3Jt
TGF5ZXIpIHsKKyAgICAgICAgaWYgKG1fY29udGVudHNMYXllci51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKSAhPSBwbGF0Zm9ybUxheWVyKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIo
cGxhdGZvcm1MYXllcik7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29u
dGVudHNMYXllckZvckNhbnZhczsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNM
YXllci5pc051bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAog
ICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlh
IHVwZGF0ZUNoaWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NDA4LDE4ICs0MTQsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVz
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBwcmlt
YXJ5TGF5ZXIoKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICByZXR1cm4g
cHJpbWFyeUxheWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwg
bWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpn
ZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8
TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKyAgICBy
ZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlv
bih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0
aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgcHJpbWFy
eUxheWVyKCktPnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5h
bWUpLCB0aW1lT2Zmc2V0KTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKS0+cGF1c2VBbmltYXRpb24obWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSks
IHRpbWVPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+cmVtb3ZlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsK
KyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVtb3ZlQW5pbWF0
aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1l
KQpAQCAtNDI3LDEyICs0MzMsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3Bl
bmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQogICAgIC8vIHx3YWxsQ2xvY2tUaW1l
fCBpcyBpbiB0aGUgd3JvbmcgdGltZSBiYXNlLiBOZWVkIHRvIGNvbnZlcnQgaGVyZS4KICAgICAv
LyBGSVhNRTogZmluZCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMuCiAgICAgZG91Ymxl
IG1vbm90b25pY1RpbWUgPSB3YWxsQ2xvY2tUaW1lICsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkgLSBjdXJyZW50VGltZSgpOwotICAgIHByaW1hcnlMYXllcigpLT5zdXNwZW5kQW5pbWF0
aW9ucyhtb25vdG9uaWNUaW1lKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJv
bWl1bT4oKS0+c3VzcGVuZEFuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKIHsKLSAgICBwcmltYXJ5TGF5
ZXIoKS0+cmVzdW1lQW5pbWF0aW9ucyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Cisg
ICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnJlc3VtZUFuaW1hdGlv
bnMobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6YWRkTGlua0hpZ2hsaWdodChjb25zdCBQYXRoJiBwYXRoKQpAQCAtNDUzLDE4
ICs0NTksMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRp
YShQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZh
bHNlOwogICAgIGlmIChsYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQo
KSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JWaWRlbykgewor
ICAgICAgICBpZiAobV9jb250ZW50c0xheWVyLmlzTnVsbCgpIHx8IG1fY29udGVudHNMYXllclB1
cnBvc2UgIT0gQ29udGVudHNMYXllckZvclZpZGVvKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRl
bnRzTGF5ZXIobGF5ZXIpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENv
bnRlbnRzTGF5ZXJGb3JWaWRlbzsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG1fY29udGVudHNMYXllcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNM
YXllci5pc051bGwoKSkgewogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKIAog
ICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlh
IHVwZGF0ZUNoaWxkTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXIucmVzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NDcyLDM3ICs0NzgsMzcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7
CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aG9zdExheWVyRm9y
Q2hpbGRyZW4oKSBjb25zdAorV2ViTGF5ZXIgR3JhcGhpY3NMYXllckNocm9taXVtOjpob3N0TGF5
ZXJGb3JDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBt
X3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV90cmFu
c2Zvcm1MYXllci5pc051bGwoKSA/IG1fbGF5ZXIgOiAgbV90cmFuc2Zvcm1MYXllcjsKIH0KIAot
UGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpsYXllckZvclBhcmVudCgpIGNv
bnN0CitXZWJMYXllciBHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyRm9yUGFyZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0
KCkgOiBtX2xheWVyLmdldCgpOworICAgIHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgp
ID8gbV9sYXllciA6ICBtX3RyYW5zZm9ybUxheWVyOwogfQogCiBQbGF0Zm9ybUxheWVyKiBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBw
cmltYXJ5TGF5ZXIoKTsKKyAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hy
b21pdW0+KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgbV9sYXllci0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKyAgICAgICAg
bV9sYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IucmdiKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9sYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwor
ICAgICAgICBtX2xheWVyLnNldEJhY2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDAp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0
IENvbG9yJiBjb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBtX2xheWVyLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9yKTsKLSAg
ICAgICAgbV9sYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CisgICAgICAg
IG1fbGF5ZXIuc2V0RGVidWdCb3JkZXJDb2xvcihjb2xvci5yZ2IoKSk7CisgICAgICAgIG1fbGF5
ZXIuc2V0RGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9sYXllci0+c2V0RGVidWdCb3JkZXJDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsK
LSAgICAgICAgbV9sYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aCgwKTsKKyAgICAgICAgbV9sYXll
ci5zZXREZWJ1Z0JvcmRlckNvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOworICAgICAgICBt
X2xheWVyLnNldERlYnVnQm9yZGVyV2lkdGgoMCk7CiAgICAgfQogfQogCkBAIC01MTAsMTQgKzUx
NiwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KCkKIHsK
ICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbmV3Q2hpbGRyZW47CiAKLSAgICBp
ZiAobV90cmFuc2Zvcm1MYXllcikgeworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5pc051bGwo
KSkgewogICAgICAgICAvLyBBZGQgdGhlIHByaW1hcnkgbGF5ZXIgZmlyc3QuIEV2ZW4gaWYgd2Ug
aGF2ZSBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuLCB0aGUgcHJpbWFyeSBsYXllciBhbHdheXMg
Y29tZXMgYmVoaW5kLgotICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9sYXllci5nZXQoKSk7
Ci0gICAgfSBlbHNlIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKG1fbGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpOworICAgIH0gZWxzZSBpZiAo
IW1fY29udGVudHNMYXllci5pc051bGwoKSkgewogICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSBj
b250ZW50cyBsYXllciBpbiB0aGUgY29ycmVjdCBvcmRlciB3aXRoIG5lZ2F0aXZlIHotb3JkZXIg
Y2hpbGRyZW4uCiAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgY2F1c2UgdmlzaWJsZSByZW5kZXJp
bmcgaXNzdWVzIGJlY2F1c2UgY3VycmVudGx5IGNvbnRlbnRzIGxheWVycyBhcmUgb25seSB1c2Vk
CiAgICAgICAgIC8vIGZvciByZXBsYWNlZCBlbGVtZW50cyB0aGF0IGRvbid0IGhhdmUgY2hpbGRy
ZW4uCi0gICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOwor
ICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNo
cm9taXVtPigpKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBj
aGlsZExheWVycyA9IGNoaWxkcmVuKCk7CkBAIC01MjUsNyArNTMxLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
Y3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGlsZExheWVy
c1tpXSk7CiAKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogY2hpbGRMYXllciA9IGN1ckNoaWxkLT5s
YXllckZvclBhcmVudCgpOworICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVyID0gY3Vy
Q2hpbGQtPmxheWVyRm9yUGFyZW50KCkudW53cmFwPExheWVyQ2hyb21pdW0+KCk7CiAgICAgICAg
IG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKQEAgLTUzNSwxNyArNTQx
LDE3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDaGlsZExpc3QoKQogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAg
IG5ld0NoaWxkcmVuW2ldLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKLSAgICBpZiAobV90cmFuc2Zv
cm1MYXllcikgewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRDaGlsZHJlbihuZXdDaGls
ZHJlbik7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7CisgICAgICAgIG1f
dHJhbnNmb3JtTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldENoaWxkcmVuKG5ld0No
aWxkcmVuKTsKIAotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgIGlmICgh
bV9jb250ZW50c0xheWVyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dHJhbnNmb3JtIGxheWVyLCB0aGVuIHRoZSBjb250ZW50cyBsYXllciBpcyBwYXJlbnRlZCBpbiB0
aGUKICAgICAgICAgICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNoaWxk
IG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIpLgotICAgICAgICAgICAgbV9sYXllci0+cmVtb3ZlQWxs
Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgIG1fbGF5ZXItPmFkZENoaWxkKG1fY29udGVudHNMYXll
cik7CisgICAgICAgICAgICBtX2xheWVyLnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAgICAg
ICBtX2xheWVyLmFkZENoaWxkKG1fY29udGVudHNMYXllcik7CiAgICAgICAgIH0KICAgICB9IGVs
c2UKLSAgICAgICAgbV9sYXllci0+c2V0Q2hpbGRyZW4obmV3Q2hpbGRyZW4pOworICAgICAgICBt
X2xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclBvc2l0aW9uKCkK
QEAgLTU1NCwyMCArNTYwLDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllclBvc2l0aW9uKCkKICAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54
KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXpl
LmhlaWdodCgpKTsKIAotICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0
aW9uKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSgpCiB7CiAgICAg
SW50U2l6ZSBsYXllclNpemUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
aWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91
bmRzKGxheWVyU2l6ZSk7CisgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyLmlzTnVsbCgpKSB7Cisg
ICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgICAgIC8v
IFRoZSBhbmNob3Igb2YgdGhlIGNvbnRlbnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUsIDAuNSwg
c28gdGhlIHBvc2l0aW9uIGlzIGNlbnRlci1yZWxhdGl2ZS4KICAgICAgICAgRmxvYXRQb2ludCBj
ZW50ZXJQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAg
ICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CisgICAgICAgIG1fbGF5ZXIu
c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOwogICAgIH0KIAotICAgIG1fbGF5ZXItPnNldEJvdW5k
cyhsYXllclNpemUpOworICAgIG1fbGF5ZXIuc2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAKICAgICAv
LyBOb3RlIHRoYXQgd2UgZG9uJ3QgcmVzaXplIG1fY29udGVudHNMYXllci4gSXQncyB1cCB0aGUg
Y2FsbGVyIHRvIGRvIHRoYXQuCiAKQEAgLTU3OCwzNiArNTg0LDM2IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVMYXllclNpemUoKQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQW5jaG9yUG9pbnQoKQogewotICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50LnkoKSkp
OwotICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNob3JQb2ludFoobV9hbmNob3JQb2ludC56KCkp
OworICAgIHByaW1hcnlMYXllcigpLnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQ
b2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0QW5j
aG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKIAogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24o
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRyYW5zZm9ybSgpCiB7
Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CisgICAgcHJp
bWFyeUxheWVyKCkuc2V0VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
bV90cmFuc2Zvcm0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNo
aWxkcmVuVHJhbnNmb3JtKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0U3VibGF5ZXJUcmFu
c2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0U3VibGF5
ZXJUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX2NoaWxkcmVuVHJh
bnNmb3JtKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1Rv
Qm91bmRzKCkKIHsKLSAgICBtX2xheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5k
cyk7CisgICAgbV9sYXllci5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAg
dXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKCkKIHsKLSAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAh
bV90cmFuc2Zvcm1MYXllcikgeworICAgIGlmIChtX3ByZXNlcnZlczNEICYmIG1fdHJhbnNmb3Jt
TGF5ZXIuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0cmFuc2Zvcm0gbGF5ZXIu
Ci0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAg
ICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7Ci0gICAgICAgIG1f
dHJhbnNmb3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgICAg
IG1fdHJhbnNmb3JtTGF5ZXItPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihtX2xheWVyLT5y
ZWxlYXNlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgICAgICBtX3RyYW5zZm9ybUxh
eWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnNldFBy
ZXNlcnZlczNEKHRydWUpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNo
cm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOworICAgICAgICBtX3Ry
YW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIobV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+cmVsZWFzZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpKTsKIAogICAgICAgICAvLyBDb3B5IHRoZSBwb3NpdGlvbiBmcm9t
IHRoaXMgbGF5ZXIuCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKQEAgLTYxNiwzNSAr
NjIyLDM0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZl
czNEKCkKICAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgICAgIHVwZGF0ZUNoaWxkcmVu
VHJhbnNmb3JtKCk7CiAKLSAgICAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCht
X3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpKTsKKyAgICAgICAg
bV9sYXllci5zZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9z
aXplLmhlaWdodCgpIC8gMi4wZikpOwogCi0gICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eTsKLSAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKKyAgICAg
ICAgbV9sYXllci5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKKyAgICAg
ICAgbV9sYXllci5zZXRUcmFuc2Zvcm0oU2tNYXRyaXg0NCgpKTsKIAogICAgICAgICAvLyBTZXQg
dGhlIG9sZCBsYXllciB0byBvcGFjaXR5IG9mIDEuIEZ1cnRoZXIgZG93biB3ZSB3aWxsIHNldCB0
aGUgb3BhY2l0eSBvbiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX2xheWVyLT5zZXRP
cGFjaXR5KDEpOworICAgICAgICBtX2xheWVyLnNldE9wYWNpdHkoMSk7CiAKLSAgICAgICAgbV9s
YXllci0+c2V0Q29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKCkpOworICAgICAgICBtX2xheWVy
LnNldENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKIAogICAgICAgICAvLyBNb3ZlIHRo
aXMgbGF5ZXIgdG8gYmUgYSBjaGlsZCBvZiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBp
ZiAobV9sYXllci0+cGFyZW50KCkpCi0gICAgICAgICAgICBtX2xheWVyLT5wYXJlbnQoKS0+cmVw
bGFjZUNoaWxkKG1fbGF5ZXIuZ2V0KCksIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkpOwotICAgICAg
ICBtX3RyYW5zZm9ybUxheWVyLT5hZGRDaGlsZChtX2xheWVyLmdldCgpKTsKKyAgICAgICAgaWYg
KCFtX2xheWVyLnBhcmVudCgpLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9sYXllci5wYXJlbnQo
KS5yZXBsYWNlQ2hpbGQobV9sYXllciwgbV90cmFuc2Zvcm1MYXllcik7CisgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXIuYWRkQ2hpbGQobV9sYXllcik7CiAKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0
KCk7Ci0gICAgfSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiBtX3RyYW5zZm9ybUxheWVyKSB7
CisgICAgfSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zvcm1MYXllci5pc051
bGwoKSkgewogICAgICAgICAvLyBSZWxhY2UgdGhlIHRyYW5zZm9ybUxheWVyIGluIHRoZSBwYXJl
bnQgd2l0aCB0aGlzIGxheWVyLgotICAgICAgICBtX2xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7
Ci0gICAgICAgIGlmIChtX3RyYW5zZm9ybUxheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1f
dHJhbnNmb3JtTGF5ZXItPnBhcmVudCgpLT5yZXBsYWNlQ2hpbGQobV90cmFuc2Zvcm1MYXllci5n
ZXQoKSwgbV9sYXllci5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXIucmVtb3ZlRnJvbVBhcmVudCgp
OworICAgICAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIucGFyZW50KCkuaXNOdWxsKCkpCisgICAg
ICAgICAgICBtX3RyYW5zZm9ybUxheWVyLnBhcmVudCgpLnJlcGxhY2VDaGlsZChtX3RyYW5zZm9y
bUxheWVyLCBtX2xheWVyKTsKIAotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkRl
bGVnYXRlKHRoaXMpOwotICAgICAgICBtX2xheWVyLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIobV90cmFuc2Zvcm1MYXllci0+cmVsZWFzZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsK
KyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKG1fdHJhbnNmb3JtTGF5ZXIudW53cmFwPExh
eWVyQ2hyb21pdW0+KCktPnJlbGVhc2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAKICAg
ICAgICAgLy8gUmVsZWFzZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9y
bUxheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwotICAgICAgICBtX3RyYW5zZm9y
bUxheWVyID0gMDsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKKyAgICAgICAgbV90cmFuc2Zvcm1M
YXllci5yZXNldCgpOwogCiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICAgICAg
dXBkYXRlTGF5ZXJTaXplKCk7CkBAIC02NTUsOCArNjYwLDggQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICB1cGRhdGVDaGlsZExp
c3QoKTsKICAgICB9CiAKLSAgICBtX2xheWVyLT5zZXRQcmVzZXJ2ZXMzRChtX3ByZXNlcnZlczNE
KTsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIG1fbGF5
ZXIuc2V0UHJlc2VydmVzM0QobV9wcmVzZXJ2ZXMzRCk7CisgICAgcHJpbWFyeUxheWVyKCkuc2V0
T3BhY2l0eShtX29wYWNpdHkpOwogICAgIHVwZGF0ZU5hbWVzKCk7CiB9CiAKQEAgLTY2NywyNyAr
NjcyLDI3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklzRHJhd2Fi
bGUoKQogICAgIC8vIGZsYWdzIGFyZSBjb21iaW5lZCBoZXJlLiBtX2NvbnRlbnRzTGF5ZXIgc2hv
dWxkbid0IHJlY2VpdmUgdGhlIGRyYXdzQ29udGVudCBmbGFnCiAgICAgLy8gc28gaXQgaXMgb25s
eSBnaXZlbiBjb250ZW50c1Zpc2libGUuCiAKLSAgICBtX2xheWVyLT5zZXRJc0RyYXdhYmxlKG1f
ZHJhd3NDb250ZW50ICYmIG1fY29udGVudHNWaXNpYmxlKTsKKyAgICBtX2xheWVyLnNldERyYXdz
Q29udGVudChtX2RyYXdzQ29udGVudCAmJiBtX2NvbnRlbnRzVmlzaWJsZSk7CiAKLSAgICBpZiAo
bV9jb250ZW50c0xheWVyKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldElzRHJhd2FibGUo
bV9jb250ZW50c1Zpc2libGUpOworICAgIGlmICghbV9jb250ZW50c0xheWVyLmlzTnVsbCgpKQor
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0RHJhd3NDb250ZW50KG1fY29udGVudHNWaXNpYmxl
KTsKIAogICAgIGlmIChtX2RyYXdzQ29udGVudCkKLSAgICAgICAgbV9sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgICAgIG1fbGF5ZXIuaW52YWxpZGF0ZSgpOwogCiAgICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllckJhY2tncm91bmRDb2xvcigpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCisgICAg
aWYgKG1fY29udGVudHNMYXllci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
V2UgbmV2ZXIgY3JlYXRlIHRoZSBjb250ZW50cyBsYXllciBqdXN0IGZvciBiYWNrZ3JvdW5kIGNv
bG9yIHlldC4KICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3JTZXQpCi0gICAgICAgIG1fY29udGVu
dHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG1fYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAg
bV9jb250ZW50c0xheWVyLnNldEJhY2tncm91bmRDb2xvcihtX2JhY2tncm91bmRDb2xvci5yZ2Io
KSk7CiAgICAgZWxzZQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEJhY2tncm91bmRDb2xv
cihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnNldEJh
Y2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQpAQCAtNjk3LDQ4ICs3MDIsNDgg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQogCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN0KCkKIHsKLSAgICBp
ZiAoIW1fY29udGVudHNMYXllcikKKyAgICBpZiAobV9jb250ZW50c0xheWVyLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQobV9jb250ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpKTsKLSAgICBtX2Nv
bnRlbnRzTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKG1fY29udGVudHNSZWN0LndpZHRoKCksIG1f
Y29udGVudHNSZWN0LmhlaWdodCgpKSk7CisgICAgbV9jb250ZW50c0xheWVyLnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQobV9jb250ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpKTsKKyAg
ICBtX2NvbnRlbnRzTGF5ZXIuc2V0Qm91bmRzKEludFNpemUobV9jb250ZW50c1JlY3Qud2lkdGgo
KSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzU2NhbGUoKQogewogICAgIC8vIElmIHBhZ2Ugc2NhbGUgaXMg
YWxyZWFkeSBhcHBsaWVkIHRoZW4gdGhlcmUncyBubyBuZWVkIHRvIGFwcGx5IGl0IGFnYWluLgot
ICAgIGlmIChhcHBsaWVzUGFnZVNjYWxlKCkgfHwgIW1fbGF5ZXIpCisgICAgaWYgKGFwcGxpZXNQ
YWdlU2NhbGUoKSB8fCBtX2xheWVyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2xheWVyLT5zZXRDb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUoKSk7CisgICAgbV9sYXllci5z
ZXRDb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXll
cikKIHsKLSAgICBpZiAoY29udGVudHNMYXllciA9PSBtX2NvbnRlbnRzTGF5ZXIpCisgICAgaWYg
KGNvbnRlbnRzTGF5ZXIgPT0gbV9jb250ZW50c0xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAgICAg
IG1fY29udGVudHNMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAgICBtX2NvbnRlbnRz
TGF5ZXIgPSAwOworICAgIGlmICghbV9jb250ZW50c0xheWVyLmlzTnVsbCgpKSB7CisgICAgICAg
IG1fY29udGVudHNMYXllci5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIG1fY29udGVudHNM
YXllci5yZXNldCgpOwogICAgIH0KIAogICAgIGlmIChjb250ZW50c0xheWVyKSB7Ci0gICAgICAg
IG1fY29udGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXI7CisgICAgICAgIG1fY29udGVudHNMYXll
ciA9IFdlYkxheWVyKGNvbnRlbnRzTGF5ZXIpOwogCi0gICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIG1fY29udGVudHNMYXll
ci5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKIAotICAgICAgICAvLyBJdCBpcyBu
ZWNlc3NhcnkgdG8gdXBkYXRlIHNldElzRHJhd2FibGUgYXMgc29vbiBhcyB3ZSByZWNlaXZlIHRo
ZSBuZXcgY29udGVudHNMYXllciwgZm9yCisgICAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBj
YWxsIHNldERyYXdzQ29udGVudCBhcyBzb29uIGFzIHdlIHJlY2VpdmUgdGhlIG5ldyBjb250ZW50
c0xheWVyLCBmb3IKICAgICAgICAgLy8gdGhlIGNvcnJlY3RuZXNzIG9mIGVhcmx5IGV4aXQgY29u
ZGl0aW9ucyBpbiBzZXREcmF3c0NvbnRlbnQoKSBhbmQgc2V0Q29udGVudHNWaXNpYmxlKCkuCi0g
ICAgICAgIG1fY29udGVudHNMYXllci0+c2V0SXNEcmF3YWJsZShtX2NvbnRlbnRzVmlzaWJsZSk7
CisgICAgICAgIG1fY29udGVudHNMYXllci5zZXREcmF3c0NvbnRlbnQobV9jb250ZW50c1Zpc2li
bGUpOwogCiAgICAgICAgIC8vIEluc2VydCB0aGUgY29udGVudCBsYXllciBmaXJzdC4gVmlkZW8g
ZWxlbWVudHMgcmVxdWlyZSB0aGlzLCBiZWNhdXNlIHRoZXkgaGF2ZQogICAgICAgICAvLyBzaGFk
b3cgY29udGVudCB0aGF0IG11c3QgZGlzcGxheSBpbiBmcm9udCBvZiB0aGUgdmlkZW8uCi0gICAg
ICAgIG1fbGF5ZXItPmluc2VydENoaWxkKG1fY29udGVudHNMYXllci5nZXQoKSwgMCk7CisgICAg
ICAgIG1fbGF5ZXIuaW5zZXJ0Q2hpbGQobV9jb250ZW50c0xheWVyLCAwKTsKIAogICAgICAgICBp
ZiAoc2hvd0RlYnVnQm9yZGVycygpKSB7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNl
dERlYnVnQm9yZGVyQ29sb3IoQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKLSAgICAgICAgICAgIG1f
Y29udGVudHNMYXllci0+c2V0RGVidWdCb3JkZXJXaWR0aCgxKTsKKyAgICAgICAgICAgIG1fY29u
dGVudHNMYXllci5zZXREZWJ1Z0JvcmRlckNvbG9yKENvbG9yKDAsIDAsIDEyOCwgMTgwKS5yZ2Io
KSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0RGVidWdCb3JkZXJXaWR0aCgxKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggOGNlMWZjNDhlNzFkZTZkOTIzNGM2ZjgyODFm
YzhkY2QzMDZlNzhiOS4uMTFlNjdhMTYyMmRmZWI5ZTE0ZTAwNGE5MzNhYzQ0NmFlYzA3ZjM2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTM0LDExICszNCwxMiBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXll
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb250ZW50
TGF5ZXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViTGF5ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OCw3ICs5OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgYm9v
bCBoYXNDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiAhbV9jb250
ZW50c0xheWVyLmlzTnVsbCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwg
dm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KTsKQEAgLTEyMywxNiArMTI0LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIGZpbmlzaFRpbWUpOwogCiAgICAgLy8g
RXhwb3NlZCBmb3IgdGVzdHMuCi0gICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsgfQorICAgIFdlYktpdDo6V2ViTGF5
ZXIgY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIAotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gQW5pbWF0aW9uSWRNYXA7Ci0KLSAgICBMYXllckNocm9t
aXVtKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCAgeyByZXR1cm4gbV90cmFuc2Zvcm1MYXllci5nZXQo
KSA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOyB9Ci0gICAgTGF5ZXJD
aHJvbWl1bSogaG9zdExheWVyRm9yQ2hpbGRyZW4oKSBjb25zdDsKLSAgICBMYXllckNocm9taXVt
KiBsYXllckZvclBhcmVudCgpIGNvbnN0OworICAgIFdlYktpdDo6V2ViTGF5ZXIgcHJpbWFyeUxh
eWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIuaXNOdWxsKCkgPyBtX2xheWVy
IDogbV90cmFuc2Zvcm1MYXllcjsgfQorICAgIFdlYktpdDo6V2ViTGF5ZXIgaG9zdExheWVyRm9y
Q2hpbGRyZW4oKSBjb25zdDsKKyAgICBXZWJLaXQ6OldlYkxheWVyIGxheWVyRm9yUGFyZW50KCkg
Y29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZU5hbWVzKCk7CiAgICAgdm9pZCB1cGRhdGVDaGlsZExp
c3QoKTsKQEAgLTE1OCwxMCArMTU3LDkgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX25hbWVC
YXNlOwogCi0gICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwotICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7Ci0gICAgUmVmUHRyPExpbmtIaWdobGlnaHQ+IG1fbGlu
a0hpZ2hsaWdodDsKKyAgICBXZWJLaXQ6OldlYkNvbnRlbnRMYXllciBtX2xheWVyOworICAgIFdl
YktpdDo6V2ViTGF5ZXIgbV90cmFuc2Zvcm1MYXllcjsKKyAgICBXZWJLaXQ6OldlYkxheWVyIG1f
Y29udGVudHNMYXllcjsKIAogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAg
ICBOb0NvbnRlbnRzTGF5ZXIgPSAwLApAQCAtMTc1LDYgKzE3Myw5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2luU2V0Q2hpbGRyZW47CiAgICAgYm9vbCBtX3BhZ2VTY2FsZUNoYW5nZWQ7CiAKKyAg
ICBSZWZQdHI8TGlua0hpZ2hsaWdodD4gbV9saW5rSGlnaGxpZ2h0OworCisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgaW50PiBBbmltYXRpb25JZE1hcDsKICAgICBBbmltYXRpb25JZE1hcCBt
X2FuaW1hdGlvbklkTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGE1OTBiZDJjMzFh
MDViNTRiNWVmOGIxNWNiYWQ5ODU3MDVkMjE3ZTUuLjc1NWE3ZGE5MWU2NDViMmFmMDc4OTFmODQy
NDBmYTJhYTNmYmMzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTM1MCw4ICszNTAsNiBAQCBw
cml2YXRlOgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogICAgIGZsb2F0IG1f
Y29udGVudHNTY2FsZTsKIAotICAgIGJvb2wgbV9wYWdlU2NhbGVEaXJ0eTsKLQogICAgIENDTGF5
ZXJBbmltYXRpb25EZWxlZ2F0ZSogbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDgwMWE4ODc0ZmQ5ZjMyMmJmZjk1Nzg1M2FkMTQw
ZTE1NTVjMWIxMzYuLjZkNDMzYzA4ZGZhNTA1MDc4NWJiYTYxM2JhNTYwYzE4NWY4ZTVlYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTYxMCw4ICs2MTAsOCBAQAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGVy
Zm9ybWFuY2UuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViUGx1Z2luRG9jdW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlBsdWdpbkxpc3RCdWlsZGVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllci5jcHAKaW5kZXggNTI5MGUyZjM1YWIxMmI4YTc1NjIyMDAwZmEx
OTMzMGE4OTM2ZDk0My4uMmMwNDFjMmNiMDlhNDE0NjAzZmZkZWRmZjk1YzBiOGZmNGQxYzUwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBA
IC0yNCwxMSArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViQ29udGVudExheWVyLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNvbnRlbnRM
YXllci5oPgogCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJDb250ZW50TGF5ZXJJbXBsLmgi
CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2Vi
Q29udGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkNvbnRlbnRMYXllckNsaWVu
dCogY29udGVudENsaWVudCkKQEAgLTM2LDMwICszOCwzNSBAQCBXZWJDb250ZW50TGF5ZXIgV2Vi
Q29udGVudExheWVyOjpjcmVhdGUoV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50
KQogICAgIHJldHVybiBXZWJDb250ZW50TGF5ZXIoV2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRl
KGNvbnRlbnRDbGllbnQpKTsKIH0KIAotdm9pZCBXZWJDb250ZW50TGF5ZXI6OnNldERyYXdzQ29u
dGVudChib29sIGRyYXdzQ29udGVudCkKK3ZvaWQgV2ViQ29udGVudExheWVyOjpjbGVhckNsaWVu
dCgpCit7CisgICAgdW53cmFwPENvbnRlbnRMYXllckNocm9taXVtPigpLT5jbGVhckRlbGVnYXRl
KCk7Cit9CisKK3ZvaWQgV2ViQ29udGVudExheWVyOjpzZXREb3VibGVTaWRlZChib29sIGRvdWJs
ZVNpZGVkKQogewotICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXREcmF3c0Nv
bnRlbnQoZHJhd3NDb250ZW50KTsKKyAgICBtX3ByaXZhdGUtPnNldERvdWJsZVNpZGVkKGRvdWJs
ZVNpZGVkKTsKIH0KIAotYm9vbCBXZWJDb250ZW50TGF5ZXI6OmRyYXdzQ29udGVudCgpIGNvbnN0
Cit2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKIHsK
LSAgICByZXR1cm4gY29uc3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+ZHJhd3NDb250
ZW50KCk7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAotV2Vi
Q29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50
TGF5ZXJJbXBsPiYgbm9kZSkKK1dlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0
IFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+JiBub2RlKQogICAgIDogV2ViTGF5ZXIo
bm9kZSkKIHsKIH0KIAotV2ViQ29udGVudExheWVyJiBXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9y
PShjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQorV2ViQ29udGVu
dExheWVyJiBXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPENvbnRl
bnRMYXllckNocm9taXVtPiYgbm9kZSkKIHsKICAgICBtX3ByaXZhdGUgPSBub2RlOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotV2ViQ29udGVudExheWVyOjpvcGVyYXRvciBQYXNzUmVmUHRyPFdl
YkNvbnRlbnRMYXllckltcGw+KCkgY29uc3QKK1dlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFz
c1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKSBjb25zdAogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJDb250ZW50TGF5ZXJJbXBsKj4obV9wcml2YXRlLmdldCgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29udGVudExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUuZ2V0KCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXggNGQ0NzYwOTVkMDQ1YzA2MmM3MzZh
YzVkNDY1YTFmOTZiMDYwM2VhZi4uMjIyZmEyZmE3NjY1MjAyMjgwOGMxNGFjZTkxMTQxNDFiYTQ3
ZWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAKQEAgLTUzLDExICs1Myw2IEBAIFdlYkNvbnRlbnRMYXllckltcGw6On5XZWJD
b250ZW50TGF5ZXJJbXBsKCkKICAgICBjbGVhckRlbGVnYXRlKCk7CiB9CiAKLXZvaWQgV2ViQ29u
dGVudExheWVySW1wbDo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQotewotICAg
IHNldElzRHJhd2FibGUoZHJhd3NDb250ZW50KTsKLX0KLQogdm9pZCBXZWJDb250ZW50TGF5ZXJJ
bXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNs
aXApCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRDbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKaW5kZXggNTFmMzQ0ZjdjYWYxMjcxMTI2
YWM3YjQyNjhlZDU0NjEyMTQyMTlkOC4uYTA2Y2Y5MDgyOTFmYWZlYTYyM2NiYmU3NTdhY2UyNjhi
ZjUyZGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuaApAQCAtMzYsOCArMzYsNiBAQCBjbGFzcyBXZWJDb250ZW50TGF5ZXJJbXBsIDog
cHVibGljIFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtLCBwdWJsaWMgV2ViQ29yZQogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0ZShX
ZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOwogCi0gICAgdm9pZCBzZXREcmF3
c0NvbnRlbnQoYm9vbCk7Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBXZWJDb250ZW50TGF5
ZXJJbXBsKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmlydHVh
bCB+V2ViQ29udGVudExheWVySW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5
ZXIuY3BwCmluZGV4IGVjZjc0NTJmYzY1NGExZjc2ZTdlYTYzOTg4Zjc2ZTYzZWRkMTkwNjYuLjNl
NmRiNDdmNTQwODg0Y2RkOWM5YzczNjIxOTRjMGRjZDIxNmZjZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxwdWJs
aWMvV2ViRmxvYXRQb2ludC5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdFJlY3QuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjI4LDYgKzIy
OSwxMSBAQCB2b2lkIFdlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJp
eDQ0JiBtYXRyaXgpCiAgICAgbV9wcml2YXRlLT5zZXRTdWJsYXllclRyYW5zZm9ybSh0cmFuc2Zv
cm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0KG1hdHJpeCkpOwogfQogCit2b2lkIFdlYkxheWVy
OjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4KQoreworICAgIG1fcHJpdmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obWF0cml4LnRvV2Vi
Q29yZVRyYW5zZm9ybSgpKTsKK30KKwogU2tNYXRyaXg0NCBXZWJMYXllcjo6c3VibGF5ZXJUcmFu
c2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9u
TWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CkBAIC0yMzgsMTkgKzI0NCwz
NCBAQCB2b2lkIFdlYkxheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgU2tNYXRyaXg0NCYgbWF0cml4
KQogICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbVNr
TWF0cml4NDQobWF0cml4KSk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXI6OnNldFRyYW5zZm9ybShjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIG1fcHJpdmF0ZS0+c2V0
VHJhbnNmb3JtKG1hdHJpeC50b1dlYkNvcmVUcmFuc2Zvcm0oKSk7Cit9CisKIFNrTWF0cml4NDQg
V2ViTGF5ZXI6OnRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNrTWF0cml4NDRGcm9t
VHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcml2YXRlLT50cmFuc2Zvcm0oKSk7CiB9CiAKLXZvaWQg
V2ViTGF5ZXI6OnNldERlYnVnQm9yZGVyQ29sb3IoY29uc3QgV2ViQ29sb3ImIGNvbG9yKQordm9p
ZCBXZWJMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQogewotICAgIG1f
cHJpdmF0ZS0+c2V0RGVidWdCb3JkZXJDb2xvcihjb2xvcik7CisgICAgbV9wcml2YXRlLT5zZXRJ
c0RyYXdhYmxlKGRyYXdzQ29udGVudCk7CiB9CiAKLXZvaWQgV2ViTGF5ZXI6OnNldERlYnVnQm9y
ZGVyV2lkdGgoZmxvYXQgd2lkdGgpCitib29sIFdlYkxheWVyOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAogewotICAgIG1fcHJpdmF0ZS0+c2V0RGVidWdCb3JkZXJXaWR0aCh3aWR0aCk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZHJhd3NDb250ZW50KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFBy
ZXNlcnZlczNEKGJvb2wgcHJlc2VydmUzRCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFByZXNlcnZl
czNEKHByZXNlcnZlM0QpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3Io
V2ViQ29sb3IgY29sb3IpCit7CisgICAgbV9wcml2YXRlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29s
b3IpOwogfQogCiB2b2lkIFdlYkxheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IFdlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCkBAIC0yNjMsNiArMjg0LDE2IEBAIHZvaWQgV2ViTGF5ZXI6OnNldEJh
Y2tncm91bmRGaWx0ZXJzKGNvbnN0IFdlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiAgICAg
bV9wcml2YXRlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzLnRvRmlsdGVyT3BlcmF0aW9u
cygpKTsKIH0KIAordm9pZCBXZWJMYXllcjo6c2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBXZWJD
b2xvciYgY29sb3IpCit7CisgICAgbV9wcml2YXRlLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9y
KTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkK
K3sKKyAgICBtX3ByaXZhdGUtPnNldERlYnVnQm9yZGVyV2lkdGgod2lkdGgpOworfQorCiBXZWJM
YXllcjo6V2ViTGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkKICAg
ICA6IG1fcHJpdmF0ZShub2RlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYmY4ODk1OTRjOWJlYTUx
Y2FjYWQwYTM1MDBmOGYwOTljNWI0ZTkzMi4uY2ExNzc4NmJjYzA3MTBhZmYxYWE5YzBjMWQ3MmNm
ZjdiODE0ZjM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFn
ZUxheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCBURVNUKElt
YWdlTGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKICAgICBSZWZQdHI8SW1hZ2U+IG5v
bk9wYXF1ZUltYWdlID0gVGVzdEltYWdlOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNl
KTsKICAgICBBU1NFUlRfVFJVRShub25PcGFxdWVJbWFnZS5nZXQoKSk7CiAKLSAgICBBU1NFUlRf
RkFMU0UoZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllcigpKTsKKyAgICBBU1NFUlRfVFJVRShn
cmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCkuaXNOdWxsKCkpOwogCiAgICAgZ3JhcGhpY3NM
YXllci0+c2V0Q29udGVudHNUb0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpKTsKLSAgICBBU1NFUlRf
VFJVRShncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCktPm9wYXF1ZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCkub3BhcXVlKCkpOwogCiAgICAg
Z3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0ltYWdlKG5vbk9wYXF1ZUltYWdlLmdldCgpKTsK
LSAgICBBU1NFUlRfRkFMU0UoZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllcigpLT5vcGFxdWUo
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKS5vcGFx
dWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>
<flag name="review"
          id="148015"
          type_id="1"
          status="+"
          setter="enne"
    />
    <flag name="commit-queue"
          id="148749"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141820</attachid>
            <date>2012-05-14 17:18:10 -0700</date>
            <delta_ts>2012-05-14 17:18:10 -0700</delta_ts>
            <desc>diff to previous patch</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>10409</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExh
eWVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5o
CmluZGV4IDAwY2ZmMmEuLmE4NmE1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtNTAsMjMgKzUwLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIC8vIFNldHMgd2hldGhlciB0aGUg
bGF5ZXIgZHJhd3MgaXRzIGNvbnRlbnQgd2hlbiBjb21wb3NpdGluZy4KLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdDsKLQogICAgIC8vIENhbGxlZCB3aGVuIHRoZSBXZWJDb250ZW50
TGF5ZXJDbGllbnQgaXMgZ29pbmcgYXdheSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgogICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBjbGVhckNsaWVudCgpOwogCi0gICAgLy8gU3R1ZmYgbmVlZGVkIGZv
ciBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLy8KLSAgICAvLyBBbmltYXRpb25zIC0tLQotICAg
IC8vIGFkZEFuaW1hdGlvbigpCi0gICAgLy8gcGF1c2VBbmltYXRpb24oKQotICAgIC8vIHJlbW92
ZUFuaW1hdGlvbigpCi0gICAgLy8gc3VzcGVuZEFuaW1hdGlvbnMoKQotICAgIC8vIHJlc3VtZUFu
aW1hdGlvbnMoKQotICAgIC8vIHNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUoKQotICAgIC8vCisg
ICAgLy8gU2V0IHRvIHRydWUgaWYgdGhlIGJhY2tzaWRlIG9mIHRoaXMgbGF5ZXIncyBjb250ZW50
cyBzaG91bGQgYmUgdmlzaWJsZSB3aGVuIGNvbXBvc2l0ZWQuCisgICAgLy8gRGVmYXVsdHMgdG8g
ZmFsc2UuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpOworCisg
ICAgLy8gU2V0IHRvIGFwcGx5IGEgc2NhbGUgZmFjdG9yIHVzZWQgd2hlbiBwYWludGluZyBhbmQg
ZHJhd2luZyB0aGlzIGxheWVyJ3MgY29udGVudC4gRGVmYXVsdHMgdG8gMS4wLgorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKIAogI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW0+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
cHVibGljL1dlYkxheWVyLmgKaW5kZXggMTU4N2U4Ny4uZGYwODk0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllci5oCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaApAQCAtNTcsOCArNTcsNiBAQCBwdWJsaWM6
CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJMYXllciYpOwogICAgIFdF
QktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXImKSBjb25zdDsKIAotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKLQogICAgIC8vIFNldHMgYSByZWdp
b24gb2YgdGhlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0cyBjb250
ZW50LgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJGbG9h
dFJlY3QmKTsKIApAQCAtMTA1LDI0ICsxMDMsMTIgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAg
ICBXRUJLSVRfRVhQT1JUIFNrTWF0cml4NDQgdHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBXZWJDb2xvciYpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKKyAgICAvLyBT
ZXRzIHdoZXRoZXIgdGhlIGxheWVyIGRyYXdzIGl0cyBjb250ZW50IHdoZW4gY29tcG9zaXRpbmcu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKLSAgICAvLyBBUElzIHdlIG5l
ZWQ6Ci0gICAgLy8KLSAgICAvLyBEZWJ1Z2dpbmcgLS0tCi0gICAgLy8gc2V0RGVidWdOYW1lKCkK
LSAgICAvLwotICAgIC8vIExheWVyIHByb3BlcnRpZXMgLS0tCi0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldElzRHJhd2FibGUoYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFByZXNl
cnZlczNEKGJvb2wpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXREb3VibGVTaWRlZChib29s
KTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvbG9yKTsK
LSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7Ci0gICAgLy8K
LSAgICAvLwotICAgIC8vIFRyZWUgbWFuaXB1bGF0aW9uIC0tLQotICAgIC8vIHNldENoaWxkcmVu
KCkKIAogICAgIC8vIENsZWFyIHRoZSBmaWx0ZXJzIGluIHVzZSBieSBwYXNzaW5nIGluIGEgbmV3
bHkgaW5zdGFudGlhdGVkCiAgICAgLy8gV2ViRmlsdGVyT3BlcmF0aW9ucyBvYmplY3QuCkBAIC0x
MzUsNiArMTIxLDkgQEAgcHVibGljOgogICAgIC8vIGNvbmZsaWN0IGFuZCBoaWRlIHRoZSBiYWNr
Z3JvdW5kIGZpbHRlcnMuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEJhY2tncm91bmRGaWx0
ZXJzKGNvbnN0IFdlYkZpbHRlck9wZXJhdGlvbnMmKTsKIAorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXREZWJ1Z0JvcmRlckNvbG9yKGNvbnN0IFdlYkNvbG9yJik7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldERlYnVnQm9yZGVyV2lkdGgoZmxvYXQpOworCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCB0bygpCiAgICAgewogICAgICAgICBUIHJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGVhZTYxMjUuLjlhYTI3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtMTAwLDEzICsxMDAsMTkgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgaWYgKCFtX2xheWVyLmlz
TnVsbCgpKSB7CiAgICAgICAgIG1fbGF5ZXIuY2xlYXJDbGllbnQoKTsKLSAgICAgICAgbV9sYXll
ci53aWxsQmVEZXN0cm95ZWQoKTsKKyAgICAgICAgbV9sYXllci51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIG1fbGF5ZXIudW53cmFwPExheWVy
Q2hyb21pdW0+KCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUoMCk7CiAgICAgfQotICAgIGlm
ICghbV9jb250ZW50c0xheWVyLmlzTnVsbCgpKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIud2ls
bEJlRGVzdHJveWVkKCk7CiAKLSAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIuaXNOdWxsKCkpCi0g
ICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIud2lsbEJlRGVzdHJveWVkKCk7CisgICAgaWYgKCFtX2Nv
bnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnVud3JhcDxM
YXllckNocm9taXVtPigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRl
KDApOworICAgIH0KKworICAgIGlmICghbV90cmFuc2Zvcm1MYXllci5pc051bGwoKSkgeworICAg
ICAgICBtX3RyYW5zZm9ybUxheWVyLnVud3JhcDxMYXllckNocm9taXVtPigpLT5jbGVhclJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgbV90cmFuc2Zvcm1MYXllci51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKTsKKyAgICB9CiAKICAgICBpZiAobV9s
aW5rSGlnaGxpZ2h0KQogICAgICAgICBtX2xpbmtIaWdobGlnaHQuY2xlYXIoKTsKQEAgLTI1MSw3
ICsyNTcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TWFza3NUb0JvdW5kcyhi
b29sIG1hc2tzVG9Cb3VuZHMpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd3ND
b250ZW50KGJvb2wgZHJhd3NDb250ZW50KQogewogICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoaXMg
ZWFybHktZXhpdCBpcyBvbmx5IGNvcnJlY3QgYmVjYXVzZSB3ZSBhbHNvIHByb3Blcmx5IGluaXRp
YWxpemUKLSAgICAvLyBMYXllckNocm9taXVtOjppc0RyYXdhYmxlKCkgd2hlbmV2ZXIgbV9jb250
ZW50c0xheWVyIGlzIHNldCB0byBhIG5ldyBsYXllciBpbiBzZXR1cENvbnRlbnRzTGF5ZXIoKS4K
KyAgICAvLyBMYXllckNocm9taXVtOjptX2lzRHJhd2FibGUgd2hlbmV2ZXIgbV9jb250ZW50c0xh
eWVyIGlzIHNldCB0byBhIG5ldyBsYXllciBpbiBzZXR1cENvbnRlbnRzTGF5ZXIoKS4KICAgICBp
ZiAoZHJhd3NDb250ZW50ID09IG1fZHJhd3NDb250ZW50KQogICAgICAgICByZXR1cm47CiAKQEAg
LTI2Miw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd3NDb250
ZW50KGJvb2wgZHJhd3NDb250ZW50KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVmlzaWJsZShib29sIGNvbnRlbnRzVmlzaWJsZSkKIHsKICAgICAvLyBOb3RlIGNhcmVm
dWxseSB0aGlzIGVhcmx5LWV4aXQgaXMgb25seSBjb3JyZWN0IGJlY2F1c2Ugd2UgYWxzbyBwcm9w
ZXJseSBpbml0aWFsaXplCi0gICAgLy8gTGF5ZXJDaHJvbWl1bTo6aXNEcmF3YWJsZSgpIHdoZW5l
dmVyIG1fY29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIgaW4gc2V0dXBDb250ZW50
c0xheWVyKCkuCisgICAgLy8gTGF5ZXJDaHJvbWl1bTo6bV9pc0RyYXdhYmxlIHdoZW5ldmVyIG1f
Y29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIgaW4gc2V0dXBDb250ZW50c0xheWVy
KCkuCiAgICAgaWYgKGNvbnRlbnRzVmlzaWJsZSA9PSBtX2NvbnRlbnRzVmlzaWJsZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02NjYsMTAgKzY3MiwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJJc0RyYXdhYmxlKCkKICAgICAvLyBmbGFncyBhcmUgY29tYmluZWQg
aGVyZS4gbV9jb250ZW50c0xheWVyIHNob3VsZG4ndCByZWNlaXZlIHRoZSBkcmF3c0NvbnRlbnQg
ZmxhZwogICAgIC8vIHNvIGl0IGlzIG9ubHkgZ2l2ZW4gY29udGVudHNWaXNpYmxlLgogCi0gICAg
bV9sYXllci5zZXRJc0RyYXdhYmxlKG1fZHJhd3NDb250ZW50ICYmIG1fY29udGVudHNWaXNpYmxl
KTsKKyAgICBtX2xheWVyLnNldERyYXdzQ29udGVudChtX2RyYXdzQ29udGVudCAmJiBtX2NvbnRl
bnRzVmlzaWJsZSk7CiAKICAgICBpZiAoIW1fY29udGVudHNMYXllci5pc051bGwoKSkKLSAgICAg
ICAgbV9jb250ZW50c0xheWVyLnNldElzRHJhd2FibGUobV9jb250ZW50c1Zpc2libGUpOworICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIuc2V0RHJhd3NDb250ZW50KG1fY29udGVudHNWaXNpYmxlKTsK
IAogICAgIGlmIChtX2RyYXdzQ29udGVudCkKICAgICAgICAgbV9sYXllci5pbnZhbGlkYXRlKCk7
CkBAIC03MjcsOSArNzMzLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldHVwQ29u
dGVudHNMYXllcihMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKQogCiAgICAgICAgIG1fY29u
dGVudHNMYXllci5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKIAotICAgICAgICAv
LyBJdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHNldElzRHJhd2FibGUgYXMgc29vbiBhcyB3ZSBy
ZWNlaXZlIHRoZSBuZXcgY29udGVudHNMYXllciwgZm9yCisgICAgICAgIC8vIEl0IGlzIG5lY2Vz
c2FyeSB0byBjYWxsIHNldERyYXdzQ29udGVudCBhcyBzb29uIGFzIHdlIHJlY2VpdmUgdGhlIG5l
dyBjb250ZW50c0xheWVyLCBmb3IKICAgICAgICAgLy8gdGhlIGNvcnJlY3RuZXNzIG9mIGVhcmx5
IGV4aXQgY29uZGl0aW9ucyBpbiBzZXREcmF3c0NvbnRlbnQoKSBhbmQgc2V0Q29udGVudHNWaXNp
YmxlKCkuCi0gICAgICAgIG1fY29udGVudHNMYXllci5zZXRJc0RyYXdhYmxlKG1fY29udGVudHNW
aXNpYmxlKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLnNldERyYXdzQ29udGVudChtX2NvbnRl
bnRzVmlzaWJsZSk7CiAKICAgICAgICAgLy8gSW5zZXJ0IHRoZSBjb250ZW50IGxheWVyIGZpcnN0
LiBWaWRlbyBlbGVtZW50cyByZXF1aXJlIHRoaXMsIGJlY2F1c2UgdGhleSBoYXZlCiAgICAgICAg
IC8vIHNoYWRvdyBjb250ZW50IHRoYXQgbXVzdCBkaXNwbGF5IGluIGZyb250IG9mIHRoZSB2aWRl
by4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBkYWFkZTA2Li42ZDQzM2MwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02NTEsNyArNjUxLDYgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlRleHRSdW4uY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKaW5kZXggMTY1YjJkMi4uMmMwNDFjMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBA
IC00MywxNCArNDMsMTQgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXI6OmNsZWFyQ2xpZW50KCkKICAg
ICB1bndyYXA8Q29udGVudExheWVyQ2hyb21pdW0+KCktPmNsZWFyRGVsZWdhdGUoKTsKIH0KIAot
dm9pZCBXZWJDb250ZW50TGF5ZXI6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkK
K3ZvaWQgV2ViQ29udGVudExheWVyOjpzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKQog
ewotICAgIHVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+c2V0SXNEcmF3YWJsZShkcmF3
c0NvbnRlbnQpOworICAgIG1fcHJpdmF0ZS0+c2V0RG91YmxlU2lkZWQoZG91YmxlU2lkZWQpOwog
fQogCi1ib29sIFdlYkNvbnRlbnRMYXllcjo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3ZvaWQgV2Vi
Q29udGVudExheWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQogewotICAgIHJldHVy
biBjb25zdFVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+ZHJhd3NDb250ZW50KCk7Cisg
ICAgbV9wcml2YXRlLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAogV2ViQ29udGVudExh
eWVyOjpXZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bT4mIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKaW5kZXggNDZl
ZTI3My4uM2U2ZGI0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAK
QEAgLTk3LDEyICs5Nyw2IEBAIGJvb2wgV2ViTGF5ZXI6OmVxdWFscyhjb25zdCBXZWJMYXllciYg
bikgY29uc3QKICAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQo
KSk7CiB9CiAKLXZvaWQgV2ViTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAgbV9wcml2
YXRlLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLSAgICBtX3ByaXZhdGUtPnNldExheWVyQW5pbWF0
aW9uRGVsZWdhdGUoMCk7Ci19Ci0KIHZvaWQgV2ViTGF5ZXI6OmludmFsaWRhdGVSZWN0KGNvbnN0
IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0KQogewogICAgIG1fcHJpdmF0ZS0+c2V0TmVlZHNEaXNw
bGF5UmVjdChkaXJ0eVJlY3QpOwpAQCAtMjYwLDE5ICsyNTQsMTQgQEAgU2tNYXRyaXg0NCBXZWJM
YXllcjo6dHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zv
cm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnRyYW5zZm9ybSgpKTsKIH0KIAotdm9pZCBXZWJMYXll
cjo6c2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBXZWJDb2xvciYgY29sb3IpCit2b2lkIFdlYkxh
eWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCiB7Ci0gICAgbV9wcml2YXRl
LT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9yKTsKKyAgICBtX3ByaXZhdGUtPnNldElzRHJhd2Fi
bGUoZHJhd3NDb250ZW50KTsKIH0KIAotdm9pZCBXZWJMYXllcjo6c2V0RGVidWdCb3JkZXJXaWR0
aChmbG9hdCB3aWR0aCkKK2Jvb2wgV2ViTGF5ZXI6OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0g
ICAgbV9wcml2YXRlLT5zZXREZWJ1Z0JvcmRlcldpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJM
YXllcjo6c2V0SXNEcmF3YWJsZShib29sIGRyYXdhYmxlKQotewotICAgIG1fcHJpdmF0ZS0+c2V0
SXNEcmF3YWJsZShkcmF3YWJsZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZHJhd3NDb250ZW50
KCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmUzRCkK
QEAgLTI4MCwyMSArMjY5LDExIEBAIHZvaWQgV2ViTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wg
cHJlc2VydmUzRCkKICAgICBtX3ByaXZhdGUtPnNldFByZXNlcnZlczNEKHByZXNlcnZlM0QpOwog
fQogCi12b2lkIFdlYkxheWVyOjpzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKQotewot
ICAgIG1fcHJpdmF0ZS0+c2V0RG91YmxlU2lkZWQoZG91YmxlU2lkZWQpOwotfQotCiB2b2lkIFdl
YkxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29sb3IgY29sb3IpCiB7CiAgICAgbV9wcml2
YXRlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogfQogCi12b2lkIFdlYkxheWVyOjpzZXRD
b250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQotewotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudHNT
Y2FsZShzY2FsZSk7Ci19Ci0KIHZvaWQgV2ViTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgV2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKICAgICBtX3ByaXZhdGUtPnNldEZpbHRlcnMoZmls
dGVycy50b0ZpbHRlck9wZXJhdGlvbnMoKSk7CkBAIC0zMDUsNiArMjg0LDE2IEBAIHZvaWQgV2Vi
TGF5ZXI6OnNldEJhY2tncm91bmRGaWx0ZXJzKGNvbnN0IFdlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCiAgICAgbV9wcml2YXRlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzLnRvRmls
dGVyT3BlcmF0aW9ucygpKTsKIH0KIAordm9pZCBXZWJMYXllcjo6c2V0RGVidWdCb3JkZXJDb2xv
cihjb25zdCBXZWJDb2xvciYgY29sb3IpCit7CisgICAgbV9wcml2YXRlLT5zZXREZWJ1Z0JvcmRl
ckNvbG9yKGNvbG9yKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0RGVidWdCb3JkZXJXaWR0aChm
bG9hdCB3aWR0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldERlYnVnQm9yZGVyV2lkdGgod2lkdGgp
OworfQorCiBXZWJMYXllcjo6V2ViTGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVt
PiYgbm9kZSkKICAgICA6IG1fcHJpdmF0ZShub2RlKQogewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>