<?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>91885</bug_id>
          
          <creation_ts>2012-07-20 11:19:55 -0700</creation_ts>
          <short_desc>[chromium] Move WebFilterOperations from RenderPassDrawQuad to RenderPass</short_desc>
          <delta_ts>2012-07-25 15:08:17 -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>
          
          <blocked>92294</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>674774</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-20 11:19:55 -0700</bug_when>
    <thetext>[chromium] Move WebFilterOperations from RenderPassDrawQuad to RenderPass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674782</commentid>
    <comment_count>1</comment_count>
      <attachid>153549</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-20 11:24:27 -0700</bug_when>
    <thetext>Created attachment 153549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674797</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-20 11:38:33 -0700</bug_when>
    <thetext>LGTM.  This also means it&apos;s ready to be moved into WebKit::WebCompositorRenderPassQuad. 

This doesn&apos;t block this patch, but note the WebFilterOperations serialization at the RenderPass level still needs more work -- I was thinking the WebKit-side equivalent structure to CCRenderPass could contain a WebVector&lt;WebCompositorFilterOperation&gt;.  But it would be much easier to deal with if WebCompositorFilterOperation was a pure POD struct.  I already tried to write a custom pickler for it but ran into difficulties -- the C++ encapsulation niceties seem like more trouble than they&apos;re worth in this case.  (WebCompositorFilterOperations with an &apos;s&apos; on the other hand, won&apos;t be serialized and can remain as is.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674831</commentid>
    <comment_count>3</comment_count>
      <attachid>153549</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-20 12:19:22 -0700</bug_when>
    <thetext>Comment on attachment 153549
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:339
&gt;      for (size_t i = 0; i &lt; renderPassesInDrawOrder.size(); ++i)
&gt; -        passesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt; +        m_renderPassesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);

Hmm.  The problem with member variables is that they persist and so it becomes more complicated about who sets them, when they&apos;re valid, and when they need to be cleared.

I would feel better if m_defaultRenderPass and m_renderPassesInFrame were only valid during drawFrame or alternatively if you asked the CCRendererClient for these values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674837</commentid>
    <comment_count>4</comment_count>
      <attachid>153549</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-20 12:23:52 -0700</bug_when>
    <thetext>Comment on attachment 153549
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:339
&gt;&gt; +        m_renderPassesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt; 
&gt; Hmm.  The problem with member variables is that they persist and so it becomes more complicated about who sets them, when they&apos;re valid, and when they need to be cleared.
&gt; 
&gt; I would feel better if m_defaultRenderPass and m_renderPassesInFrame were only valid during drawFrame or alternatively if you asked the CCRendererClient for these values.

Me too! I was trying various things. They need to exist in decideRenderPassAllocations and drawFrame. One is called from prepareToDraw and one from drawLayers. And drawLayers isn&apos;t always called after prepare to draw so I was a little meh about how to do it.

Using the client might be very elegant..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674866</commentid>
    <comment_count>5</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-20 12:47:48 -0700</bug_when>
    <thetext>I&apos;d prefer if decideRenderPassAllocationsForFrame() was made private to LayerRendererChromium and called from drawFrame().  The only problem is the &quot;culling passes with cached textures&quot; in between the decide and the final draw.  I lack context on what this is and how we could refactor that away though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674909</commentid>
    <comment_count>6</comment_count>
      <attachid>153549</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-20 13:32:09 -0700</bug_when>
    <thetext>Comment on attachment 153549
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:339
&gt;&gt;&gt; +        m_renderPassesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt;&gt; 
&gt;&gt; Hmm.  The problem with member variables is that they persist and so it becomes more complicated about who sets them, when they&apos;re valid, and when they need to be cleared.
&gt;&gt; 
&gt;&gt; I would feel better if m_defaultRenderPass and m_renderPassesInFrame were only valid during drawFrame or alternatively if you asked the CCRendererClient for these values.
&gt; 
&gt; Me too! I was trying various things. They need to exist in decideRenderPassAllocations and drawFrame. One is called from prepareToDraw and one from drawLayers. And drawLayers isn&apos;t always called after prepare to draw so I was a little meh about how to do it.
&gt; 
&gt; Using the client might be very elegant..

Why does it need to exist in prepareToDraw? It didn&apos;t exist there before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674912</commentid>
    <comment_count>7</comment_count>
      <attachid>153549</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-20 13:33:29 -0700</bug_when>
    <thetext>Comment on attachment 153549
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:339
&gt;&gt;&gt;&gt; +        m_renderPassesInFrame.set(renderPassesInDrawOrder[i]-&gt;id(), renderPassesInDrawOrder[i]);
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm.  The problem with member variables is that they persist and so it becomes more complicated about who sets them, when they&apos;re valid, and when they need to be cleared.
&gt;&gt;&gt; 
&gt;&gt;&gt; I would feel better if m_defaultRenderPass and m_renderPassesInFrame were only valid during drawFrame or alternatively if you asked the CCRendererClient for these values.
&gt;&gt; 
&gt;&gt; Me too! I was trying various things. They need to exist in decideRenderPassAllocations and drawFrame. One is called from prepareToDraw and one from drawLayers. And drawLayers isn&apos;t always called after prepare to draw so I was a little meh about how to do it.
&gt;&gt; 
&gt;&gt; Using the client might be very elegant..
&gt; 
&gt; Why does it need to exist in prepareToDraw? It didn&apos;t exist there before.

Ya decideAllocations has been in prepareToDraw because its used to decide which renderpasses should be in the frame (based on what is in cache), and this is what prepareToDraw does atm, make a FrameData that can be drawn as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676997</commentid>
    <comment_count>8</comment_count>
      <attachid>154100</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-24 10:39:30 -0700</bug_when>
    <thetext>Created attachment 154100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677023</commentid>
    <comment_count>9</comment_count>
      <attachid>154100</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-24 10:50:18 -0700</bug_when>
    <thetext>Comment on attachment 154100
Patch

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

R=me.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:383
&gt; +    m_renderPassesById = &amp;renderPassesById;

Thanks, that&apos;s way better.  Theoretically, if you wanted I suppose you could get rid of both m_defaultRenderPass and m_renderPassesById by passing them through drawRenderPass/drawQuad like rootScissorRectInCurrentSurface is.  It&apos;s not necessary, but just a thought.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677026</commentid>
    <comment_count>10</comment_count>
      <attachid>154100</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-24 10:55:12 -0700</bug_when>
    <thetext>Comment on attachment 154100
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:383
&gt;&gt; +    m_renderPassesById = &amp;renderPassesById;
&gt; 
&gt; Thanks, that&apos;s way better.  Theoretically, if you wanted I suppose you could get rid of both m_defaultRenderPass and m_renderPassesById by passing them through drawRenderPass/drawQuad like rootScissorRectInCurrentSurface is.  It&apos;s not necessary, but just a thought.

Thanks. The renderPassesById would need to be passed additionally to the drawRenderPassQuad method. It was a lot of plumbing that I thot cluttered things up.. so I&apos;m not sure if it&apos;s a good plan.

Also, this is going to crash the HUD as it uses m_defaultRenderPass, and it draws after drawFrame is done. Lemme take another crack at this..

(We have no unit tests that exercise that apparently)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678400</commentid>
    <comment_count>11</comment_count>
      <attachid>154427</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-25 13:34:28 -0700</bug_when>
    <thetext>Created attachment 154427
remove-ephemeral-data-from-lrc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678408</commentid>
    <comment_count>12</comment_count>
      <attachid>154431</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-25 13:42:34 -0700</bug_when>
    <thetext>Created attachment 154431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678410</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-25 13:43:53 -0700</bug_when>
    <thetext>The 2nd last patch is just the changes since the R+.

The whole HUD crash problem went away by rebase, but this additional change cleans up the &quot;which variables are valid when&quot; issues tremendously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678418</commentid>
    <comment_count>14</comment_count>
      <attachid>154435</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-25 13:48:49 -0700</bug_when>
    <thetext>Created attachment 154435
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678515</commentid>
    <comment_count>15</comment_count>
      <attachid>154435</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-25 15:08:12 -0700</bug_when>
    <thetext>Comment on attachment 154435
Patch for landing

Clearing flags on attachment: 154435

Committed r123666: &lt;http://trac.webkit.org/changeset/123666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678516</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-25 15:08:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153549</attachid>
            <date>2012-07-20 11:24:27 -0700</date>
            <delta_ts>2012-07-24 10:39:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91885-20120720142422.patch</filename>
            <type>text/plain</type>
            <size>22049</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFiMGEyYWJiODBlOTFi
NGUwNWEwODA5NjhjOGRjYjBmMTljYWYyYi4uYTZjODU1M2QxYjA3OTI0OTEyNjBlMjA1Yjg5OTUw
YjU1MWI5ZTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBXZWJGaWx0ZXJPcGVyYXRpb25zIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkIHRvIFJlbmRlclBh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbW92
ZSB0aGUgZmlsdGVyIG9wZXJhdGlvbnMgdG8gQ0NSZW5kZXJQYXNzIHRvIGF2b2lkIGhhdmluZwor
ICAgICAgICB2YXJpYWJsZS1sZW5ndGggZGF0YSBpbiBhIFdlYkNvbXBvc2l0b3JRdWFkIGluIG9y
ZGVyIHRvIHNlcmlhbGl6ZSwKKyAgICAgICAgYW5kIGFsc28gdG8gYXZvaWQgcmVxdWlyaW5nIGEg
dmlydHVhbCBkZXN0cnVjdG9yIGZvciB0aGUgcXVhZAorICAgICAgICBjbGFzc2VzLgorCisgICAg
ICAgIFRoZSByZW5kZXJQYXNzZXNJbkZyYW1lIEhhc2hNYXAgaXMgc3RvcmVkIGZvciB0aGUgZHVy
YXRpb24gb2YgdGhlCisgICAgICAgIGZyYW1lIHNvIHRoYXQgdGhlIFJlbmRlclBhc3NEcmF3UXVh
ZCBjYW4gZmluZCBhbmQgdXNlIHRoZSBmaWx0ZXJzCisgICAgICAgIG9uIGl0cyBSZW5kZXJQYXNz
LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2Nh
dGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVy
Q2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFz
czo6ZmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnNldEZpbHRlcnMp
OgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFz
czo6YmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpz
ZXRCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NE
cmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRl
clBhc3NEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6
YXBwZW5kUXVhZHMpOgorCiAyMDEyLTA3LTIwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRpc2FibGUgZmFrZSB3b3JrZXJz
IGluc3BlY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGNhMTgzNWE1ZTcwNjdk
NWM0Nzk3NDhkODNiM2Q1MTI5ZTBhYzhhZWMuLjZkMTUxNjQ1OTgyMWM3ZGU1Mzg3MmMwOGY2YmRk
NDFlNmMwNzNjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDctMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBNb3ZlIFdlYkZpbHRlck9wZXJhdGlvbnMgZnJvbSBSZW5kZXJQYXNzRHJh
d1F1YWQgdG8gUmVuZGVyUGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKwogMjAxMi0w
Ny0xOSAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEVuYWJsZSBDU1MgdmFyaWFibGVzIGNvbXBpbGUgdGltZSBmbGFnIGluIENocm9tZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGU1NjM3YTBmY2E3MDVkYmQx
ZDFmMDczYWFkODAzYTI2Zjc2YmQxODcuLmFiMDg4YzMwYzk2Y2MyNzBlMzFlYjFmNjNiZWIzZTVj
MDI4MmQ2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzM0
LDE0ICszMzQsMTQgQEAgR0MzRGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNz
VGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIpCiB7Ci0gICAgSGFzaE1hcDxpbnQs
IGNvbnN0IENDUmVuZGVyUGFzcyo+IHBhc3Nlc0luRnJhbWU7CisgICAgbV9yZW5kZXJQYXNzZXNJ
bkZyYW1lLmNsZWFyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJ
bkRyYXdPcmRlci5zaXplKCk7ICsraSkKLSAgICAgICAgcGFzc2VzSW5GcmFtZS5zZXQocmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldKTsK
KyAgICAgICAgbV9yZW5kZXJQYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRl
cltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0pOwogCiAgICAgVmVjdG9yPGlu
dD4gcGFzc2VzVG9EZWxldGU7CiAgICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJl
PiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CiAgICAgZm9yIChwYXNzSXRlcmF0b3Ig
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQ
YXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSBwYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0
b3ItPmZpcnN0KTsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFt
ZSA9IG1fcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CiAgICAg
ICAgIGlmICghcmVuZGVyUGFzc0luRnJhbWUpIHsKICAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRl
LmFwcGVuZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
Mzc0LDE3ICszNzQsMjAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdAogICAgIHJldHVybiB0ZXh0dXJl
ICYmIHRleHR1cmUtPmlkKCkgJiYgdGV4dHVyZS0+aXNDb21wbGV0ZSgpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJl
bmRlclBhc3NlcywgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRl
clBhc3Nlc0luRHJhd09yZGVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKIHsK
LSAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzLmxh
c3QoKTsKKyAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIubGFzdCgpOwogICAgIGJlZ2luRHJhd2luZ0ZyYW1lKHJvb3RSZW5kZXJQ
YXNzKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IHJlbmRlclBh
c3Nlc1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
cyA9IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldOwogCiAgICAgICAgIEZsb2F0UmVjdCByb290
U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgp
LT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3NvclJlY3Qp
OwogICAgICAgICBkcmF3UmVuZGVyUGFzcyhyZW5kZXJQYXNzLCByb290U2Npc3NvclJlY3RJbkN1
cnJlbnRTdXJmYWNlKTsKICAgICB9CisKKyAgICBtX3JlbmRlclBhc3Nlc0luRnJhbWUuY2xlYXIo
KTsKKyAgICBtX2RlZmF1bHRSZW5kZXJQYXNzID0gMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRl
clBhc3MpCkBAIC01NTQsNyArNTU3LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogICAgIHJl
dHVybiBzb3VyY2U7CiB9CiAKLVBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3
UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNl
VHJhbnNmb3JtKQorUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBx
dWFkLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKIHsKICAgICAv
LyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBhcHBsaWVzIGEg
ZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRocm91Z2ggaXRz
IGJhY2tncm91bmQuCiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOgpAQCAt
NTcyLDcgKzU3NSw3IEBAIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDCiAKICAgICAvLyBGSVhNRTog
V2hlbiB0aGlzIGFsZ29yaXRobSBjaGFuZ2VzLCB1cGRhdGUgQ0NMYXllclRyZWVIb3N0Ojpwcmlv
cml0aXplVGV4dHVyZXMoKSBhY2NvcmRpbmdseS4KIAotICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5k
RmlsdGVycygpLmlzRW1wdHkoKSkKKyAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cgYmFja2dyb3Vu
ZCBmaWx0ZXJzIG9uIGFuIG9wYXF1ZSByZW5kZXIgc3VyZmFjZSBiZWNhdXNlIG90aGVyIHN1cmZh
Y2VzIG1heSBjb250YWluCkBAIC01ODUsNyArNTg4LDcgQEAgUGFzc093blB0cjxDQ1Njb3BlZFRl
eHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0
IEMKICAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6
Om1hcENsaXBwZWRSZWN0KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1
YWQoKS5ib3VuZGluZ0JveCgpKSk7CiAKICAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
OwotICAgIHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCkuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQpOworICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQpOwogICAgIGRldmljZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7CiAgICAgZGV2aWNlUmVj
dC5leHBhbmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOwogCkBAIC01OTUsNyArNTk4LDcg
QEAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEMKICAgICBpZiAoIWdldEZyYW1lYnVmZmVyVGV4dHVy
ZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgU2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0g
YXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCksIGRldmljZUJhY2tn
cm91bmRUZXh0dXJlLmdldCgpKTsKKyAgICBTa0JpdG1hcCBmaWx0ZXJlZERldmljZUJhY2tncm91
bmQgPSBhcHBseUZpbHRlcnModGhpcywgZmlsdGVycywgZGV2aWNlQmFja2dyb3VuZFRleHR1cmUu
Z2V0KCkpOwogICAgIGlmICghZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTYzNCw2ICs2MzcsMTEgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NE
cmF3UXVhZCogcXVhZCkKICAgICBpZiAoIWNvbnRlbnRzVGV4dHVyZSB8fCAhY29udGVudHNUZXh0
dXJlLT5pZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJl
bmRlclBhc3MgPSBtX3JlbmRlclBhc3Nlc0luRnJhbWUuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgp
KTsKKyAgICBBU1NFUlQocmVuZGVyUGFzcyk7CisgICAgaWYgKCFyZW5kZXJQYXNzKQorICAgICAg
ICByZXR1cm47CisKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0g
PSBxdWFkLT5kcmF3VHJhbnNmb3JtKCk7CiAgICAgLy8gQXBwbHkgYSBzY2FsaW5nIGZhY3RvciB0
byBzaXplIHRoZSBxdWFkIGZyb20gMXgxIHRvIGl0cyBpbnRlbmRlZCBzaXplLgogICAgIHJlbmRl
clRyYW5zZm9ybS5zY2FsZTNkKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJl
Y3QoKS5oZWlnaHQoKSwgMSk7CkBAIC02NDMsMTEgKzY1MSwxMSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFk
KiBxdWFkKQogICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91
bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtKTsKKyAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9
IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCByZW5kZXJQYXNzLT5iYWNrZ3JvdW5kRmlsdGVy
cygpLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CiAKICAgICAvLyBGSVhNRTogQ2FjaGUgdGhp
cyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZh
Y2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRz
IHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMs
IHF1YWQtPmZpbHRlcnMoKSwgY29udGVudHNUZXh0dXJlKTsKKyAgICBTa0JpdG1hcCBmaWx0ZXJC
aXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcmVuZGVyUGFzcy0+ZmlsdGVycygpLCBjb250ZW50
c1RleHR1cmUpOwogICAgIE93blB0cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQ+IGNvbnRl
bnRzUmVzb3VyY2VMb2NrOwogICAgIHVuc2lnbmVkIGNvbnRlbnRzVGV4dHVyZUlkID0gMDsKICAg
ICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCAxOThhZWY5YTM0MzkxNDIyY2Y0YjRmZTI2NDE4ZDc2ZGM0NTFhMDUz
Li44MGU4MDFmZDQ2YTQ3M2VjY2Y4ZjRkZGExMDU3YjUxOThjZmQ0NDIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hlY2tlcmJv
YXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3RGVi
dWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIFBhc3NPd25Q
dHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZp
Y2VUcmFuc2Zvcm0pOworICAgIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3QmFja2dy
b3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IEND
UmVuZGVyUGFzc0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3Qg
Q0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdTdHJlYW1WaWRlb1F1YWQoY29u
c3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7CkBAIC0yNzMsNiArMjczLDcgQEAgcHJpdmF0ZToK
ICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAKICAgICBjb25z
dCBDQ1JlbmRlclBhc3MqIG1fZGVmYXVsdFJlbmRlclBhc3M7CisgICAgSGFzaE1hcDxpbnQsIGNv
bnN0IENDUmVuZGVyUGFzcyo+IG1fcmVuZGVyUGFzc2VzSW5GcmFtZTsKIAogICAgIGJvb2wgbV9p
c1ZpZXdwb3J0Q2hhbmdlZDsKICAgICBib29sIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggN2YxMjQwNDMyYjk3ODYy
M2YyM2E0YjIwYjAxMTk1YzA4YzUyOWNiZi4uNGE1Y2FmNjY2Y2M1MDhjYWY2NmFkNzdhNGI0MzVj
ZGU2YWZhYWIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAg
LTI5Nyw2ICsyOTcsOSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgICAgIGludCByZW5kZXJQYXNzSWQgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCk7CiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBh
c3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlLCByZW5kZXJQYXNzSWQpOwor
ICAgICAgICBwYXNzLT5zZXRGaWx0ZXJzKHJlbmRlclN1cmZhY2VMYXllci0+ZmlsdGVycygpKTsK
KyAgICAgICAgcGFzcy0+c2V0QmFja2dyb3VuZEZpbHRlcnMocmVuZGVyU3VyZmFjZUxheWVyLT5i
YWNrZ3JvdW5kRmlsdGVycygpKTsKKwogICAgICAgICBzdXJmYWNlUGFzc01hcC5hZGQocmVuZGVy
U3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlcy5hcHBlbmQo
cGFzcy5nZXQoKSk7CiAgICAgICAgIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuYWRkKHJlbmRlclBh
c3NJZCwgcGFzcy5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCA4MTY0ODFj
OTczNjU5MmRiODI0M2Q3MDJiYzMxMjFiZjYzMmI1MzhlLi43MTU4MjEyOGM2YTY1M2M2NzQyMzAx
YTliZTI4YzQ0MDQ3YTcxOTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ09jY2x1c2lv
blRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTY4LDYgKzY5LDEyIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGRlbm90ZXMgdGhlIGJvdW5kcyBp
biBwaHlzaWNhbCBwaXhlbHMgb2YgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhpcyBSZW5kZXJQ
YXNzLgogICAgIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0OyB9CiAKKyAgICBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0K
KyAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KKworICAgIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmRGaWx0ZXJzOyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIHsgbV9iYWNrZ3JvdW5kRmlsdGVy
cyA9IGZpbHRlcnM7IH0KKwogICAgIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQ7IH0KICAgICB2b2lkIHNldEhh
c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50KSB7IG1faGFzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kID0gdHJhbnNwYXJlbnQ7IH0KIApAQCAtODMsNiArOTAsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRT
dGF0ZUxpc3Q7CiAgICAgYm9vbCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsKICAgICBib29s
IG1faGFzT2NjbHVzaW9uRnJvbU91dHNpZGVUYXJnZXRTdXJmYWNlOworICAgIFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxDQ1JlbmRlclBh
c3MqPiBDQ1JlbmRlclBhc3NMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1
YWQuY3BwCmluZGV4IDJkNzRhMjI3ODAzZmU0YWZhZTkxZmMzY2IxNTJmNzFmMzk3NjNhOGIuLjhm
NTFiOTQwNzA0OWY3ZDA5NzhkNzAwNWYwNjIzYTdkMTVkZGY4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdR
dWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKQEAgLTMxLDE4ICszMSwxNiBAQCB1c2luZyBXZWJL
aXQ6OldlYkNvbXBvc2l0b3JRdWFkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29u
c3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGlj
YSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hh
bmdlZFNpbmNlTGFzdEZyYW1lKQorUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGlu
dCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJh
d1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzc0lkLCBpc1JlcGxpY2Es
IGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrUmVzb3VyY2VJ
ZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJlbmRl
clBhc3NJZCwgaXNSZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBtYXNrUmVzb3VyY2VJZCwgY29udGVu
dHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKIH0KIAotQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkND
UmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRT
dGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50IHJlbmRl
clBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmls
dGVycywgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKK0NDUmVuZGVyUGFzc0Ry
YXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3Qs
IGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKQogICAgIDogV2ViQ29tcG9zaXRvclF1YWQoc2hhcmVkUXVhZFN0YXRlLCBXZWJD
b21wb3NpdG9yUXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCiAgICAgLCBtX3JlbmRlclBhc3NJ
ZChyZW5kZXJQYXNzSWQpCiAgICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCiAgICAgLCBtX2Ry
YXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSkKLSAgICAsIG1fZmlsdGVycyhmaWx0ZXJzKQotICAg
ICwgbV9iYWNrZ3JvdW5kRmlsdGVycyhiYWNrZ3JvdW5kRmlsdGVycykKICAgICAsIG1fbWFza1Jl
c291cmNlSWQobWFza1Jlc291cmNlSWQpCiAgICAgLCBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFz
dEZyYW1lKGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJh
d1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmgKaW5kZXggNmYzOTliZTY3Zjg2NTI5Nzg3NTZkNjViZjFiNzQ4
NmEyZmIyZTg3OS4uYWZmOGRiNmRlYjQ5MmJlNmZkMjRmMzBjODA1YmM5NmQ1ZjAzYTRjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCkBAIC0yOCw3ICsyOCw2IEBACiAK
ICNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2Vi
Q29tcG9zaXRvclF1YWQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5o
PgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTM5LDcgKzM4LDcgQEAgY2xhc3MgQ0NSZW5kZXJQYXNz
OwogY2xhc3MgQ0NSZW5kZXJQYXNzRHJhd1F1YWQgOiBwdWJsaWMgV2ViS2l0OjpXZWJDb21wb3Np
dG9yUXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzRHJhd1F1YWQp
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBj
cmVhdGUoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiwgY29uc3Qg
SW50UmVjdCYsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91
bmRGaWx0ZXJzLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6
V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBpbnQgcmVuZGVy
UGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXNrUmVzb3VyY2VJZCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOwogCiAgICAgaW50IHJl
bmRlclBhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAgYm9vbCBp
c1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQpAQCAtNDksMTggKzQ4LDEz
IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhbmQgd2Ug
c2hvdWxkIGRyYXcgdGhlIFJlbmRlclBhc3Mgd2l0aCB0aGUgcXVhZFRyYW5zZm9ybS4KICAgICBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKLSAgICBjb25zdCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KLSAg
ICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQotCiAgICAgc3RhdGljIGNvbnN0
IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBtYXRlcmlhbENhc3QoY29uc3QgV2ViS2l0OjpXZWJDb21w
b3NpdG9yUXVhZCopOwogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgaW50
IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIEND
UmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXNrUmVzb3VyY2VJZCwgY29uc3QgSW50UmVj
dCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOworICAgIENDUmVuZGVyUGFzc0RyYXdR
dWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IElu
dFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBt
YXNrUmVzb3VyY2VJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJh
bWUpOwogCiAgICAgaW50IG1fcmVuZGVyUGFzc0lkOwogICAgIGJvb2wgbV9pc1JlcGxpY2E7CiAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07Ci0gICAg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKLSAgICBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKICAgICBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgbV9tYXNrUmVzb3VyY2VJZDsKICAgICBJbnRSZWN0IG1fY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAK
aW5kZXggMjI0MzRjMjAzZGIwODNkODcwYjBiZjYwZWVmOTc0YWQ4YmMyNmYxNC4uMTkxMjdlMmJj
YmU1YzY2ODJkM2EwZTZiZTIxMDVkNjZjMDMwY2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwCkBAIC0yMTMsMTAgKzIxMyw3IEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBl
bmRRdWFkcyhDQ1F1YWRTaW5rJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlCiAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IGZvclJlcGxpY2EgPyBt
X3JlcGxpY2FEcmF3VHJhbnNmb3JtIDogbV9kcmF3VHJhbnNmb3JtOwogICAgIEludFJlY3QgY29u
dGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUgPSBjb250ZW50c0NoYW5nZWQoKSA/IG1fY29udGVu
dFJlY3QgOiBJbnRSZWN0KCk7CiAKLSAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMgPSBtX293bmluZ0xheWVyLT5maWx0ZXJzKCk7Ci0gICAgY29uc3QgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycyA9IG1fb3duaW5nTGF5ZXIt
PmJhY2tncm91bmRGaWx0ZXJzKCk7Ci0KLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NSZW5kZXJQYXNz
RHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRlclBh
c3NJZCwgZm9yUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRl
cnMsIG1hc2tSZXNvdXJjZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOworICAg
IHF1YWRMaXN0LmFwcGVuZChDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzc0lkLCBmb3JSZXBsaWNhLCBkcmF3VHJhbnNm
b3JtLCBtYXNrUmVzb3VyY2VJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBkZDUyNWZjYmY3Nzg4ZjI0MGMxYjJiNDZjYjNkMTVh
MzMwMTIxNWI5Li4yYjZlNjk1NzlmNTRmMDQ3MzAxMjJkNDFhYmE4Zjk5ODAyZDQyNGJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcApAQCAtMzU1OCwxMiArMzU1OCwxMiBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1Jl
bW92YWxUZXN0RGF0YSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgewog
CiBjbGFzcyBDQ1Rlc3RSZW5kZXJQYXNzOiBwdWJsaWMgQ0NSZW5kZXJQYXNzIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZh
Y2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENDVGVzdFJl
bmRlclBhc3ModGFyZ2V0U3VyZmFjZSwgaWQpKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
UmVuZGVyUGFzcz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgaW50IGlk
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ0NUZXN0UmVuZGVyUGFzcyhyZW5kZXJTdXJmYWNlLCBp
ZCkpOyB9CiAKICAgICB2b2lkIGFwcGVuZFF1YWQoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBxdWFk
KSB7IG1fcXVhZExpc3QuYXBwZW5kKHF1YWQpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBDQ1Rlc3RS
ZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgaW50IGlkKSA6IENDUmVu
ZGVyUGFzcyh0YXJnZXRTdXJmYWNlLCBpZCkgeyB9CisgICAgQ0NUZXN0UmVuZGVyUGFzcyhDQ1Jl
bmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3MocmVuZGVy
U3VyZmFjZSwgaWQpIHsgfQogfTsKIAogY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5
ZXJSZW5kZXJlckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CkBAIC0zNjc5LDcg
KzM2NzksNyBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3Qg
Y2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogCiAgICAgICAgICAgICAgICAgSW50
UmVjdCBxdWFkUmVjdCA9IEludFJlY3QoMCwgMCwgMSwgMSk7CiAgICAgICAgICAgICAgICAgSW50
UmVjdCBjb250ZW50c0NoYW5nZWRSZWN0ID0gY29udGVudHNDaGFuZ2VkID8gcXVhZFJlY3QgOiBJ
bnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBx
dWFkID0gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIHF1YWRSZWN0LCBuZXdSZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIDEsIGNvbnRlbnRzQ2hhbmdlZFJlY3QpOwor
ICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVu
ZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBx
dWFkUmVjdCwgbmV3UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwgMSwgY29udGVudHNDaGFuZ2VkUmVjdCk7CiAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFzcyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRR
dWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154100</attachid>
            <date>2012-07-24 10:39:30 -0700</date>
            <delta_ts>2012-07-25 13:34:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91885-20120724133921.patch</filename>
            <type>text/plain</type>
            <size>29165</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2OTIwM2M2OTE0OWY3
NmE0OTdlNjlhOTJiNGNlMmEyZjE4ZWFiNS4uOGU4ZDhjMTJmYzk1MzBkMzA5ZDMzOTEzZjkwZmMy
NzQyYWRmZTFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTI0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBXZWJGaWx0ZXJPcGVyYXRpb25zIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkIHRvIFJlbmRlclBh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbW92
ZSB0aGUgZmlsdGVyIG9wZXJhdGlvbnMgdG8gQ0NSZW5kZXJQYXNzIHRvIGF2b2lkIGhhdmluZwor
ICAgICAgICB2YXJpYWJsZS1sZW5ndGggZGF0YSBpbiBhIFdlYkNvbXBvc2l0b3JRdWFkIGluIG9y
ZGVyIHRvIHNlcmlhbGl6ZSwKKyAgICAgICAgYW5kIGFsc28gdG8gYXZvaWQgcmVxdWlyaW5nIGEg
dmlydHVhbCBkZXN0cnVjdG9yIGZvciB0aGUgcXVhZAorICAgICAgICBjbGFzc2VzLgorCisgICAg
ICAgIFRoZSBkcmF3RnJhbWUgbWV0aG9kIG5vdyB0YWtlcyBhIENDUmVuZGVyUGFzc0lkSGFzaE1h
cCBpbiBvcmRlcgorICAgICAgICB0byBjb25uZWN0IFJlbmRlclBhc3MgcXVhZHMgdG8gdGhlaXIg
c291cmNlIFJlbmRlclBhc3MuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lk
ZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgor
ICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyUGFzczo6ZmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clBhc3M6OnNldEZpbHRlcnMpOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyUGFzczo6YmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpzZXRCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmg6
CisgICAgICAgIChDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKENDUmVuZGVyZXIpOgorCiAy
MDEyLTA3LTIzICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
IEZvY3VzU2NvcGUgZm9yIGEgZGlzdHJpYnV0ZWQgbm9kZSBzaG91bGQgbm90IGJlIGl0cyBUcmVl
U2NvcGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDEyYmY4YTRkYTg1ZGZmOWNlOGRl
MTdhNWViNDQwMWJjMGFlNDU4OTcuLjE4M2MwZGQ2YTIyMGM2YjYxNTgzY2VlMDZjMDI5YzE3YmU0
Yzc0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTIt
MDctMjQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBNb3ZlIFdlYkZpbHRlck9wZXJhdGlvbnMgZnJvbSBSZW5kZXJQYXNzRHJhd1F1YWQg
dG8gUmVuZGVyUGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE4ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0
cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVy
Q2xpZW50OjpGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisgICAgICAgIChGYWtlQ0NSZW5kZXJlckNs
aWVudDo6cm9vdFJlbmRlclBhc3MpOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OnJl
bmRlclBhc3Nlc0luRHJhd09yZGVyKToKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50Ojpy
ZW5kZXJQYXNzZXMpOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQpOgorICAgICAgICAo
VEVTVF9GKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDEyLTA3LTIzICBTaGF3biBTaW5naCAgPHNo
YXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IHVuaXQgdGVz
dHMgaW4gZGVidWcgbW9kZSBhZnRlciByMTIzMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCBlNTYzN2EwZmNhNzA1ZGJkMWQxZjA3M2FhZDgwM2EyNmY3NmJkMTg3
Li5mNmRmMWVjM2Q1YzNmYTcyYzUyZGQ4Mzc4ZGVlMGMyZjFlNjQ3ZTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMzNCwxNCArMzM0LDE0IEBAIEdDM0RlbnVt
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NS
ZW5kZXJQYXNzKikKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKQogewotICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBw
YXNzZXNJbkZyYW1lOworICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiByZW5k
ZXJQYXNzZXNJbkZyYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRl
clBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7
CisgICAgICAgIHJlbmRlclBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVy
W2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CiAKICAgICBWZWN0b3I8aW50
PiBwYXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+
ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAgICBmb3IgKHBhc3NJdGVyYXRvciA9
IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRvciAhPSBtX3JlbmRlclBh
c3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRv
ci0+Zmlyc3QpOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1l
ID0gcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CiAgICAgICAg
IGlmICghcmVuZGVyUGFzc0luRnJhbWUpIHsKICAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRlLmFw
cGVuZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzc0
LDI3ICszNzQsMzIgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNv
dXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdAogICAgIHJldHVybiB0ZXh0dXJlICYm
IHRleHR1cmUtPmlkKCkgJiYgdGV4dHVyZS0+aXNDb21wbGV0ZSgpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRl
clBhc3NlcywgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyLCBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAmIHJlbmRlclBhc3Nl
c0J5SWQsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewotICAgIGNvbnN0IEND
UmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXMubGFzdCgpOwotICAgIGJl
Z2luRHJhd2luZ0ZyYW1lKHJvb3RSZW5kZXJQYXNzKTsKKyAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIubGFzdCgpOworICAgIEFT
U0VSVChyb290UmVuZGVyUGFzcyk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRl
clBhc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MgPSByZW5kZXJQYXNzZXNbaV07CisgICAgbV9kZWZhdWx0UmVuZGVyUGFzcyA9IHJvb3RS
ZW5kZXJQYXNzOworICAgIG1fcmVuZGVyUGFzc2VzQnlJZCA9ICZyZW5kZXJQYXNzZXNCeUlkOwor
CisgICAgYmVnaW5EcmF3aW5nRnJhbWUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV07CiAKICAg
ICAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UgPSByZW5kZXJQ
YXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJm
YWNlKHJvb3RTY2lzc29yUmVjdCk7CiAgICAgICAgIGRyYXdSZW5kZXJQYXNzKHJlbmRlclBhc3Ms
IHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpOwogICAgIH0KKworICAgIG1fZGVmYXVs
dFJlbmRlclBhc3MgPSAwOworICAgIG1fcmVuZGVyUGFzc2VzQnlJZCA9IDA7CiB9CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBh
c3MqIHJvb3RSZW5kZXJQYXNzKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJh
d2luZ0ZyYW1lKCkKIHsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZl
ciBpcyBhdXRvbWF0aWNhbGx5IHJlY3JlYXRlZCBvbiBmaXJzdCB1c2UKICAgICBlbnN1cmVGcmFt
ZWJ1ZmZlcigpOwogCi0gICAgbV9kZWZhdWx0UmVuZGVyUGFzcyA9IHJvb3RSZW5kZXJQYXNzOwot
ICAgIEFTU0VSVChtX2RlZmF1bHRSZW5kZXJQYXNzKTsKLQogICAgIGlmICh2aWV3cG9ydFNpemUo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTU0LDcgKzU1OSw3IEBAIHN0YXRp
YyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgY29uc3QKICAgICByZXR1cm4gc291cmNlOwogfQogCi1QYXNzT3duUHRyPEND
U2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bhc3NPd25QdHI8Q0NTY29wZWRU
ZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25z
dCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNE
ZXZpY2VUcmFuc2Zvcm0pCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgZHJhd3MgYSBiYWNrZ3JvdW5k
IGZpbHRlciwgd2hpY2ggYXBwbGllcyBhIGZpbHRlciB0byBhbnkgcGl4ZWxzIGJlaGluZCB0aGUg
cXVhZCBhbmQgc2VlbiB0aHJvdWdoIGl0cyBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSBhbGdvcml0
aG0gd29ya3MgYXMgZm9sbG93czoKQEAgLTU3Miw3ICs1NzcsNyBAQCBQYXNzT3duUHRyPENDU2Nv
cGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMo
Y29uc3QgQwogCiAgICAgLy8gRklYTUU6IFdoZW4gdGhpcyBhbGdvcml0aG0gY2hhbmdlcywgdXBk
YXRlIENDTGF5ZXJUcmVlSG9zdDo6cHJpb3JpdGl6ZVRleHR1cmVzKCkgYWNjb3JkaW5nbHkuCiAK
LSAgICBpZiAocXVhZC0+YmFja2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGZp
bHRlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1F
OiBXZSBvbmx5IGFsbG93IGJhY2tncm91bmQgZmlsdGVycyBvbiBhbiBvcGFxdWUgcmVuZGVyIHN1
cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNlcyBtYXkgY29udGFpbgpAQCAtNTg1LDcgKzU5MCw3
IEBAIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDCiAgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRy
YW5zZm9ybSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOwogCiAgICAgaW50
IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDsKLSAgICBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygp
LmdldE91dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICBmaWx0ZXJzLmdldE91
dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKICAgICBkZXZpY2VSZWN0Lm1vdmUoLWxl
ZnQsIC10b3ApOwogICAgIGRldmljZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90
dG9tKTsKIApAQCAtNTk1LDcgKzYwMCw3IEBAIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDCiAgICAg
aWYgKCFnZXRGcmFtZWJ1ZmZlclRleHR1cmUoZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCks
IGRldmljZVJlY3QpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFNrQml0bWFwIGZp
bHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5iYWNrZ3Jv
dW5kRmlsdGVycygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSk7CisgICAgU2tCaXRt
YXAgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIGZpbHRlcnMs
IGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKICAgICBpZiAoIWZpbHRlcmVkRGV2aWNl
QmFja2dyb3VuZC5nZXRUZXh0dXJlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC02
MzQsNiArNjM5LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFz
c1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAgICAgaWYgKCFjb250ZW50
c1RleHR1cmUgfHwgIWNvbnRlbnRzVGV4dHVyZS0+aWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzID0gbV9yZW5kZXJQYXNzZXNCeUlkLT5n
ZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIEFTU0VSVChyZW5kZXJQYXNzKTsKKyAgICBp
ZiAoIXJlbmRlclBhc3MpCisgICAgICAgIHJldHVybjsKKwogICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlbmRlclRyYW5zZm9ybSA9IHF1YWQtPmRyYXdUcmFuc2Zvcm0oKTsKICAgICAvLyBB
cHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGlu
dGVuZGVkIHNpemUuCiAgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+cXVhZFJlY3Qo
KS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKQEAgLTY0MywxMSArNjUz
LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29u
c3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAgICAgaWYgKCFjb250ZW50c0RldmljZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3duUHRyPEND
U2NvcGVkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3QmFja2dyb3VuZEZpbHRlcnMo
cXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE93blB0cjxDQ1Njb3BlZFRleHR1
cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIHJlbmRl
clBhc3MtPmJhY2tncm91bmRGaWx0ZXJzKCksIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAog
ICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBk
byBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkg
ZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRt
YXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUp
OworICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0aGlzLCByZW5kZXJQ
YXNzLT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7CiAgICAgT3duUHRyPENDU2NvcGVkTG9j
a1Jlc291cmNlRm9yUmVhZD4gY29udGVudHNSZXNvdXJjZUxvY2s7CiAgICAgdW5zaWduZWQgY29u
dGVudHNUZXh0dXJlSWQgPSAwOwogICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDE5OGFlZjlhMzQzOTE0MjJj
ZjRiNGZlMjY0MThkNzZkYzQ1MWEwNTMuLjE0NmY3Zjk3Y2VhMjYwN2ZlNDcyOGI4NTNmNjIzZGZk
MzE2ZTZiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRp
b25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3Qg
T1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFz
c0xpc3QmLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NS
ZW5kZXJQYXNzSWRIYXNoTWFwJiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKSBPVkVSUklERTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NTY29wZWRUZXh0
dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CkBAIC0xMjQsMTMgKzEyNCwx
MyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxv
YXQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICB2b2lk
IGJlZ2luRHJhd2luZ0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MpOwor
ICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoKTsKICAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0
KTsKIAogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJh
d0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKLSAg
ICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0
IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKICAgICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVh
ZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JR
dWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3U3RyZWFtVmlk
ZW9RdWFkKGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVhZCopOwpAQCAtMjczLDYgKzI3Myw3IEBA
IHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owog
CiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2RlZmF1bHRSZW5kZXJQYXNzOworICAgIGNvbnN0
IENDUmVuZGVyUGFzc0lkSGFzaE1hcCogbV9yZW5kZXJQYXNzZXNCeUlkOwogCiAgICAgYm9vbCBt
X2lzVmlld3BvcnRDaGFuZ2VkOwogICAgIGJvb2wgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwZDlkN2ZmNDFlNWVi
NTFmZDQ4ZjAyZmZmZDJkNTlhZjljYzQxMDcwLi5hYTg4ZDJlYTZiZjJlZDY2YTFhMGRjNGQ1MDU5
MWZmY2IyM2U4M2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMjk1LDYgKzI5NSw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAKICAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9
IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsKICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4g
cGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7
CisgICAgICAgIHBhc3MtPnNldEZpbHRlcnMocmVuZGVyU3VyZmFjZUxheWVyLT5maWx0ZXJzKCkp
OworICAgICAgICBwYXNzLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhyZW5kZXJTdXJmYWNlTGF5ZXIt
PmJhY2tncm91bmRGaWx0ZXJzKCkpOworCiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5k
ZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmFwcGVu
ZChwYXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5hZGQocmVuZGVy
UGFzc0lkLCBwYXNzLnJlbGVhc2UoKSk7CkBAIC01NTEsNyArNTU0LDcgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgLy8g
UmVuZGVyV2lkZ2V0LgogICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3Vy
cmVudFRpbWUoKSk7CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdGcmFtZShmcmFtZS5yZW5k
ZXJQYXNzZXMsIG1fcm9vdFNjaXNzb3JSZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdG
cmFtZShmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQsIG1fcm9vdFNj
aXNzb3JSZWN0KTsKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZChzZXR0aW5ncygp
KSkKICAgICAgICAgbV9oZWFkc1VwRGlzcGxheS0+ZHJhdyh0aGlzKTsKICAgICBtX2xheWVyUmVu
ZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCA4
MTY0ODFjOTczNjU5MmRiODI0M2Q3MDJiYzMxMjFiZjYzMmI1MzhlLi43MTU4MjEyOGM2YTY1M2M2
NzQyMzAxYTliZTI4YzQ0MDQ3YTcxOTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ09j
Y2x1c2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTY4LDYgKzY5LDEyIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGRlbm90ZXMgdGhlIGJv
dW5kcyBpbiBwaHlzaWNhbCBwaXhlbHMgb2YgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhpcyBS
ZW5kZXJQYXNzLgogICAgIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0OyB9CiAKKyAgICBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
cnM7IH0KKyAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KKworICAgIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmRGaWx0ZXJzOyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIHsgbV9iYWNrZ3JvdW5k
RmlsdGVycyA9IGZpbHRlcnM7IH0KKwogICAgIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQ7IH0KICAgICB2b2lk
IHNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50KSB7IG1faGFzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kID0gdHJhbnNwYXJlbnQ7IH0KIApAQCAtODMsNiArOTAsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJl
ZFF1YWRTdGF0ZUxpc3Q7CiAgICAgYm9vbCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsKICAg
ICBib29sIG1faGFzT2NjbHVzaW9uRnJvbU91dHNpZGVUYXJnZXRTdXJmYWNlOworICAgIFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisgICAgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxDQ1Jl
bmRlclBhc3MqPiBDQ1JlbmRlclBhc3NMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
RHJhd1F1YWQuY3BwCmluZGV4IDJkNzRhMjI3ODAzZmU0YWZhZTkxZmMzY2IxNTJmNzFmMzk3NjNh
OGIuLjhmNTFiOTQwNzA0OWY3ZDA5NzhkNzAwNWYwNjIzYTdkMTVkZGY4N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
c0RyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKQEAgLTMxLDE4ICszMSwxNiBAQCB1c2lu
ZyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVh
dGUoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFk
U3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlz
UmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCBDQ1Jlc291cmNl
UHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQorUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVh
ZD4gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0
b3JTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hh
bmdlZFNpbmNlTGFzdEZyYW1lKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzc0lkLCBpc1Jl
cGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrUmVz
b3VyY2VJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IHJlbmRlclBhc3NJZCwgaXNSZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBtYXNrUmVzb3VyY2VJZCwg
Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKIH0KIAotQ0NSZW5kZXJQYXNzRHJhd1F1
YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50
IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycywgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlk
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKK0NDUmVuZGVy
UGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBv
c2l0b3JTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVh
ZFJlY3QsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdl
ZFNpbmNlTGFzdEZyYW1lKQogICAgIDogV2ViQ29tcG9zaXRvclF1YWQoc2hhcmVkUXVhZFN0YXRl
LCBXZWJDb21wb3NpdG9yUXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCiAgICAgLCBtX3JlbmRl
clBhc3NJZChyZW5kZXJQYXNzSWQpCiAgICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCiAgICAg
LCBtX2RyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSkKLSAgICAsIG1fZmlsdGVycyhmaWx0ZXJz
KQotICAgICwgbV9iYWNrZ3JvdW5kRmlsdGVycyhiYWNrZ3JvdW5kRmlsdGVycykKICAgICAsIG1f
bWFza1Jlc291cmNlSWQobWFza1Jlc291cmNlSWQpCiAgICAgLCBtX2NvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKaW5kZXggNmYzOTliZTY3Zjg2NTI5Nzg3NTZkNjVi
ZjFiNzQ4NmEyZmIyZTg3OS4uYWZmOGRiNmRlYjQ5MmJlNmZkMjRmMzBjODA1YmM5NmQ1ZjAzYTRj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDxwdWJs
aWMvV2ViQ29tcG9zaXRvclF1YWQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0
aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTM5LDcgKzM4LDcgQEAgY2xhc3MgQ0NSZW5k
ZXJQYXNzOwogY2xhc3MgQ0NSZW5kZXJQYXNzRHJhd1F1YWQgOiBwdWJsaWMgV2ViS2l0OjpXZWJD
b21wb3NpdG9yUXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzRHJh
d1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdR
dWFkPiBjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291
cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IFdl
YktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBpbnQg
cmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXNrUmVzb3VyY2VJ
ZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOwogCiAgICAg
aW50IHJlbmRlclBhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzc0lkOyB9CiAgICAg
Ym9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQpAQCAtNDksMTgg
KzQ4LDEzIEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBh
bmQgd2Ugc2hvdWxkIGRyYXcgdGhlIFJlbmRlclBhc3Mgd2l0aCB0aGUgcXVhZFRyYW5zZm9ybS4K
ICAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKLSAgICBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7
IH0KLSAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQotCiAgICAgc3RhdGlj
IGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBtYXRlcmlhbENhc3QoY29uc3QgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yUXVhZCopOwogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChj
b25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0
JiwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRl
cnMsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXNrUmVzb3VyY2VJZCwgY29uc3Qg
SW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOworICAgIENDUmVuZGVyUGFz
c0RyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2VJZCBtYXNrUmVzb3VyY2VJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VM
YXN0RnJhbWUpOwogCiAgICAgaW50IG1fcmVuZGVyUGFzc0lkOwogICAgIGJvb2wgbV9pc1JlcGxp
Y2E7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07
Ci0gICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKLSAgICBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKICAgICBDQ1Jlc291cmNl
UHJvdmlkZXI6OlJlc291cmNlSWQgbV9tYXNrUmVzb3VyY2VJZDsKICAgICBJbnRSZWN0IG1fY29u
dGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5jcHAKaW5kZXggMjI0MzRjMjAzZGIwODNkODcwYjBiZjYwZWVmOTc0YWQ4YmMyNmYxNC4uMTkx
MjdlMmJjYmU1YzY2ODJkM2EwZTZiZTIxMDVkNjZjMDMwY2UyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCkBAIC0yMTMsMTAgKzIxMyw3IEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNl
OjphcHBlbmRRdWFkcyhDQ1F1YWRTaW5rJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IGZvclJlcGxp
Y2EgPyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtIDogbV9kcmF3VHJhbnNmb3JtOwogICAgIEludFJl
Y3QgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUgPSBjb250ZW50c0NoYW5nZWQoKSA/IG1f
Y29udGVudFJlY3QgOiBJbnRSZWN0KCk7CiAKLSAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMgPSBtX293bmluZ0xheWVyLT5maWx0ZXJzKCk7Ci0gICAgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycyA9IG1fb3duaW5n
TGF5ZXItPmJhY2tncm91bmRGaWx0ZXJzKCk7Ci0KLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJl
bmRlclBhc3NJZCwgZm9yUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgZmlsdGVycywgYmFja2dyb3Vu
ZEZpbHRlcnMsIG1hc2tSZXNvdXJjZUlkLCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzc0lkLCBmb3JSZXBsaWNhLCBkcmF3
VHJhbnNmb3JtLCBtYXNrUmVzb3VyY2VJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUp
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCmluZGV4IGQ5MzEwMjJkYzU1NTc1ZTFlOGVmNmY5
YjgzMzIzM2E2ZjcxNGJmMzEuLjZhZjVmMGRlY2UyNjU1MTI1YzZkOWJhZTc5NjgwYTc5NGQ0MzU2
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JikgeyB9CiAgICAgdmlydHVhbCBib29sIGhhdmVDYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJQYXNzSWQoaW50KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgRmxvYXRSZWN0
JiByb290U2Npc3NvclJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKGNvbnN0
IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAmLCBjb25zdCBG
bG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hE
cmF3aW5nRnJhbWUoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXko
Y29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCAxNDE5MTY0YjUyOTliMjVhODJjNTA5YzM1Y2M4MzQwOGRlM2VjYmQy
Li4zOTI4M2ZmMTViMjZiNjkxZDlhY2EyZWM1YTExMjAzZGIzNDRhOTM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMzU3MiwxMiArMzU3MiwxMiBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1JlbW92YWxUZXN0
RGF0YSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgewogCiBjbGFzcyBD
Q1Rlc3RSZW5kZXJQYXNzOiBwdWJsaWMgQ0NSZW5kZXJQYXNzIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdl
dFN1cmZhY2UsIGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENDVGVzdFJlbmRlclBhc3Mo
dGFyZ2V0U3VyZmFjZSwgaWQpKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFz
cz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgaW50IGlkKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgQ0NUZXN0UmVuZGVyUGFzcyhyZW5kZXJTdXJmYWNlLCBpZCkpOyB9CiAK
ICAgICB2b2lkIGFwcGVuZFF1YWQoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBxdWFkKSB7IG1fcXVh
ZExpc3QuYXBwZW5kKHF1YWQpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBDQ1Rlc3RSZW5kZXJQYXNz
KENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgaW50IGlkKSA6IENDUmVuZGVyUGFzcyh0
YXJnZXRTdXJmYWNlLCBpZCkgeyB9CisgICAgQ0NUZXN0UmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3MocmVuZGVyU3VyZmFjZSwg
aWQpIHsgfQogfTsKIAogY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5ZXJSZW5kZXJl
ckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CkBAIC0zNjkzLDcgKzM2OTMsNyBA
QCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVz
dFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogCiAgICAgICAgICAgICAgICAgSW50UmVjdCBxdWFk
UmVjdCA9IEludFJlY3QoMCwgMCwgMSwgMSk7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBjb250
ZW50c0NoYW5nZWRSZWN0ID0gY29udGVudHNDaGFuZ2VkID8gcXVhZFJlY3QgOiBJbnRSZWN0KCk7
Ci0gICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0KCks
IHF1YWRSZWN0LCBuZXdSZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zKCksIDEsIGNvbnRlbnRzQ2hhbmdlZFJlY3QpOworICAgICAgICAg
ICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVuZGVyUGFzc0Ry
YXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBxdWFkUmVjdCwg
bmV3UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgMSwgY29udGVudHNDaGFuZ2VkUmVjdCk7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q0NUZXN0UmVuZGVyUGFzcyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQu
cmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAK
aW5kZXggMWI2YjgwMjhiNGZmNTRkNTk2NDkyYThhN2EzZGFlM2ZiODA5MzFkZS4uMjRjNmM3NDE0
MzYzODFmYzcwOWQ5YzliNWY5MTY4MzQ0ODZmMzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC04MCw4ICs4MCw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX21lbW9yeUFsbG9jYXRpb25MaW1p
dEJ5dGVzKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVmYXVsdE1lbW9yeUFsbG9jYXRp
b25MaW1pdCgpKQogICAgIHsKICAgICAgICAgbV9yb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKLSAgICAgICAgbV9yb290UmVuZGVyUGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKG1f
cm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCksIG1fcm9vdExheWVyLT5pZCgpKTsKLSAgICAgICAg
bV9yZW5kZXJQYXNzZXMuYXBwZW5kKG1fcm9vdFJlbmRlclBhc3MuZ2V0KCkpOworICAgICAgICBP
d25QdHI8Q0NSZW5kZXJQYXNzPiByb290UmVuZGVyUGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KG1fcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCksIG1fcm9vdExheWVyLT5pZCgpKTsKKyAgICAg
ICAgbV9yZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5hcHBlbmQocm9vdFJlbmRlclBhc3MuZ2V0KCkp
OworICAgICAgICBtX3JlbmRlclBhc3Nlcy5zZXQobV9yb290TGF5ZXItPmlkKCksIHJvb3RSZW5k
ZXJQYXNzLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgLy8gQ0NSZW5kZXJlckNsaWVudCBtZXRo
b2RzLgpAQCAtOTYsOCArOTcsOSBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9kcyBhZGRlZCBmb3Ig
dGVzdC4KICAgICBpbnQgc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQ7IH0KIAotICAgIENDUmVuZGVyUGFzcyog
cm9vdFJlbmRlclBhc3MoKSB7IHJldHVybiBtX3Jvb3RSZW5kZXJQYXNzLmdldCgpOyB9Ci0gICAg
Y29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzKCkgeyByZXR1cm4gbV9yZW5kZXJQ
YXNzZXM7IH0KKyAgICBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzKCkgeyByZXR1cm4gbV9y
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7IH0KKyAgICBjb25zdCBDQ1JlbmRlclBhc3NM
aXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXI7IH0KKyAgICBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAmIHJlbmRl
clBhc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzc2VzOyB9CiAKICAgICBzaXplX3Qg
bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeUFsbG9j
YXRpb25MaW1pdEJ5dGVzOyB9CiAKQEAgLTEwNSw4ICsxMDcsOCBAQCBwcml2YXRlOgogICAgIGlu
dCBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudDsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgbV9pbXBsVGhyZWFkOwogICAgIE93blB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXI7
Ci0gICAgT3duUHRyPENDUmVuZGVyUGFzcz4gbV9yb290UmVuZGVyUGFzczsKLSAgICBDQ1JlbmRl
clBhc3NMaXN0IG1fcmVuZGVyUGFzc2VzOworICAgIENDUmVuZGVyUGFzc0xpc3QgbV9yZW5kZXJQ
YXNzZXNJbkRyYXdPcmRlcjsKKyAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXAgbV9yZW5kZXJQYXNz
ZXM7CiAgICAgc2l6ZV90IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiB9OwogCkBAIC0y
MjIsNyArMjI0LDcgQEAgVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIERpc2NhcmRl
ZEJhY2tidWZmZXJJc1JlY3JlYXRlZEZvclNjb3BlRHVyYXRpb24KICAgICBFWFBFQ1RfRVEoMSwg
bV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKIAogICAgIG1fbGF5
ZXJSZW5kZXJlckNocm9taXVtLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgbV9sYXllclJlbmRlcmVy
Q2hyb21pdW0uZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0
KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdGcmFtZShtX21vY2tDbGllbnQu
cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbV9tb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBG
bG9hdFJlY3QoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlz
RnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CiAKICAgICBzd2FwQnVmZmVycygpOwpAQCAtMjM3LDcg
KzIzOSw3IEBAIFRFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBGcmFtZWJ1ZmZlckRp
c2NhcmRlZEFmdGVyUmVhZGJhY2tXaGVuTm90VmlzaWJsCiAgICAgRVhQRUNUX0VRKDEsIG1fbW9j
a0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CiAKICAgICBjaGFyIHBpeGVs
c1s0XTsKLSAgICBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobV9tb2NrQ2xpZW50
LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyQ2hyb21p
dW0uZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBtX21v
Y2tDbGllbnQucmVuZGVyUGFzc2VzKCksIEZsb2F0UmVjdCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uo
bV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKIAogICAg
IG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgSW50
UmVjdCgwLCAwLCAxLCAxKSk7CkBAIC00MTgsNyArNDIwLDcgQEAgVEVTVChMYXllclJlbmRlcmVy
Q2hyb21pdW1UZXN0Miwgb3BhcXVlQmFja2dyb3VuZCkKIAogICAgIEVYUEVDVF9UUlVFKGxheWVy
UmVuZGVyZXJDaHJvbWl1bS5pbml0aWFsaXplKCkpOwogCi0gICAgbGF5ZXJSZW5kZXJlckNocm9t
aXVtLmRyYXdGcmFtZShtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7Cisg
ICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdGcmFtZShtb2NrQ2xpZW50LnJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKCksIG1vY2tDbGllbnQucmVuZGVyUGFzc2VzKCksIEZsb2F0UmVjdCgpKTsK
ICAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAgICAv
LyBPbiBERUJVRyBidWlsZHMsIHJlbmRlciBwYXNzZXMgd2l0aCBvcGFxdWUgYmFja2dyb3VuZCBj
bGVhciB0byBibHVlIHRvCkBAIC00NDIsNyArNDQ0LDcgQEAgVEVTVChMYXllclJlbmRlcmVyQ2hy
b21pdW1UZXN0MiwgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQogCiAgICAgRVhQRUNUX1RSVUUobGF5
ZXJSZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKSk7CiAKLSAgICBsYXllclJlbmRlcmVyQ2hy
b21pdW0uZHJhd0ZyYW1lKG1vY2tDbGllbnQucmVuZGVyUGFzc2VzKCksIEZsb2F0UmVjdCgpKTsK
KyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uZHJhd0ZyYW1lKG1vY2tDbGllbnQucmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIoKSwgbW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0KCkp
OwogICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5maW5pc2hEcmF3aW5nRnJhbWUoKTsKIAogICAg
IEVYUEVDVF9FUSgxLCBjb250ZXh0LT5jbGVhckNvdW50KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154427</attachid>
            <date>2012-07-25 13:34:28 -0700</date>
            <delta_ts>2012-07-25 13:42:31 -0700</delta_ts>
            <desc>remove-ephemeral-data-from-lrc</desc>
            <filename>bug-91885-20120725163418.patch</filename>
            <type>text/plain</type>
            <size>37172</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAppbmRleCA2ODBiMTBlZGFmZTU2OGE2ODRiNGE0ZGYzZDk5MDI3ZWE2OTdjZDI1Li5l
YmQ2MTAyMWQ0ZGYwNTA4ZWFiNDE3NzUyOWM4ZjFjMWRhNDc1NzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE2NiwxMyArMTY2LDEwIEBAIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGllbnQqIGNsaWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJT
ZXR0aW5nKQogICAgIDogQ0NSZW5kZXJlcihjbGllbnQpCi0gICAgLCBtX2N1cnJlbnRSZW5kZXJQ
YXNzKDApCi0gICAgLCBtX2N1cnJlbnRUZXh0dXJlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQoMCkKICAgICAsIG1fc2hhcmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41Ziwg
LTAuNWYsIDEuMGYsIDEuMGYpKQogICAgICwgbV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJv
dmlkZXIpCiAgICAgLCBtX2NvbnRleHQocmVzb3VyY2VQcm92aWRlci0+Z3JhcGhpY3NDb250ZXh0
M0QoKSkKLSAgICAsIG1fZGVmYXVsdFJlbmRlclBhc3MoMCkKICAgICAsIG1faXNWaWV3cG9ydENo
YW5nZWQoZmFsc2UpCiAgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2UpCiAgICAg
LCBtX2lzVXNpbmdCaW5kVW5pZm9ybShmYWxzZSkKQEAgLTI4OSwzMSArMjg2LDI3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCkKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogewogICAgIG1faXNWaWV3
cG9ydENoYW5nZWQgPSB0cnVlOwotCi0gICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgUmVuZGVyUGFz
cyB0byBmb3JjZSBhbiB1cGRhdGUgb2YgdGhlIHZpZXdwb3J0IGFuZAotICAgIC8vIHByb2plY3Rp
b24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJQYXNzIGlzIGNhbGxlZC4KLSAgICBtX2N1cnJl
bnRSZW5kZXJQYXNzID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFy
UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVj
dCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNs
ZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgRmxvYXRSZWN0JiBmcmFt
ZWJ1ZmZlckRhbWFnZVJlY3QpCiB7CiAgICAgLy8gT24gREVCVUcgYnVpbGRzLCBvcGFxdWUgcmVu
ZGVyIHBhc3NlcyBhcmUgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0
IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCiAgICAgLy8gYXJlIHVzaW5nIHBh
cnRpYWwgc3dhcCAvIHNjaXNzb3Igb3B0aW1pemF0aW9uLCB0aGVuIHRoZSBzdXJmYWNlIHNob3Vs
ZCBvbmx5CiAgICAgLy8gY2xlYXIgdGhlIGRhbWFnZWQgcmVnaW9uLCBzbyB0aGF0IHdlIGRvbid0
IGFjY2lkZW50YWxseSBjbGVhciB1bi1jaGFuZ2VkIHBvcnRpb25zCiAgICAgLy8gb2YgdGhlIHNj
cmVlbi4KIAotICAgIGlmIChyZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkK
KyAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFja2dyb3Vu
ZCgpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVh
ckNvbG9yKDAsIDAsIDEsIDEpKTsKIAogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRp
YWxTd2FwKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoZnJhbWVi
dWZmZXJEYW1hZ2VSZWN0KSk7CisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZnJhbWUsIGVuY2xv
c2luZ0ludFJlY3QoZnJhbWVidWZmZXJEYW1hZ2VSZWN0KSk7CiAgICAgZWxzZQogICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogCiAjaWYgZGVmaW5lZChOREVCVUcpCi0gICAgaWYgKHJlbmRlclBhc3MtPmhh
c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQorICAgIGlmIChmcmFtZS5jdXJyZW50UmVuZGVyUGFz
cy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCiAjZW5kaWYKICAgICAgICAgbV9jb250ZXh0
LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAKQEAgLTM3OSw4
ICszNzIsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IEND
UmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhdwogICAgIGNvbnN0IENDUmVuZGVyUGFz
cyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7CiAgICAg
QVNTRVJUKHJvb3RSZW5kZXJQYXNzKTsKIAotICAgIG1fZGVmYXVsdFJlbmRlclBhc3MgPSByb290
UmVuZGVyUGFzczsKLSAgICBtX3JlbmRlclBhc3Nlc0J5SWQgPSAmcmVuZGVyUGFzc2VzQnlJZDsK
KyAgICBEcmF3aW5nRnJhbWUgZnJhbWU7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZCA9ICZy
ZW5kZXJQYXNzZXNCeUlkOworICAgIGZyYW1lLnJvb3RSZW5kZXJQYXNzID0gcm9vdFJlbmRlclBh
c3M7CiAKICAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOwogCkBAIC0zODgsMTMgKzM4MiwxMCBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xp
c3QmIHJlbmRlclBhc3Nlc0luRHJhdwogICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXTsKIAogICAgICAgICBGbG9hdFJlY3Qg
cm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZh
Y2UoKS0+Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JS
ZWN0KTsKLSAgICAgICAgZHJhd1JlbmRlclBhc3MocmVuZGVyUGFzcywgcm9vdFNjaXNzb3JSZWN0
SW5DdXJyZW50U3VyZmFjZSk7CisgICAgICAgIGRyYXdSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQ
YXNzLCByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKICAgICB9CiAKICAgICBmaW5p
c2hEcmF3aW5nRnJhbWUoKTsKLQotICAgIG1fZGVmYXVsdFJlbmRlclBhc3MgPSAwOwotICAgIG1f
cmVuZGVyUGFzc2VzQnlJZCA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpi
ZWdpbkRyYXdpbmdGcmFtZSgpCkBAIC00MzEsMTkgKzQyMiwxOSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZG9Ob09wKCkKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNo
KCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29u
c3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVy
RGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhE
cmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0
IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KQogewotICAgIGlmICghdXNlUmVuZGVy
UGFzcyhyZW5kZXJQYXNzKSkKKyAgICBpZiAoIXVzZVJlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBh
c3MpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlbmRlclBhc3MocmVuZGVyUGFzcywg
ZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKKyAgICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lLCBmcmFt
ZWJ1ZmZlckRhbWFnZVJlY3QpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSBy
ZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwogICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9G
cm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFk
TGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KQotICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCkp
OworICAgICAgICBkcmF3UXVhZChmcmFtZSwgaXQtPmdldCgpKTsKIH0KIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQq
IHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZCogcXVhZCkKIHsKICAgICBJ
bnRSZWN0IHNjaXNzb3JSZWN0ID0gcXVhZC0+c2Npc3NvclJlY3QoKTsKIApAQCAtNDUxLDcgKzQ0
Miw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBXZWJLaXQ6
OldlYkNvbXBvc2l0b3JRdWFkKiBxdWFkKQogICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwor
ICAgIHNldFNjaXNzb3JUb1JlY3QoZnJhbWUsIHNjaXNzb3JSZWN0KTsKIAogICAgIGlmIChxdWFk
LT5uZWVkc0JsZW5kaW5nKCkpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwpAQCAtNDYzLDM2ICs0NTQsMzYgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9z
aXRvclF1YWQqIHF1YWQpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQ6OkNoZWNrZXJib2FyZDoK
LSAgICAgICAgZHJhd0NoZWNrZXJib2FyZFF1YWQoQ0NDaGVja2VyYm9hcmREcmF3UXVhZDo6bWF0
ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd0NoZWNrZXJib2FyZFF1YWQoZnJhbWUsIEND
Q2hlY2tlcmJvYXJkRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDo6RGVidWdCb3JkZXI6Ci0gICAg
ICAgIGRyYXdEZWJ1Z0JvcmRlclF1YWQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjptYXRlcmlhbENh
c3QocXVhZCkpOworICAgICAgICBkcmF3RGVidWdCb3JkZXJRdWFkKGZyYW1lLCBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDo6SU9TdXJmYWNlQ29udGVudDoKLSAgICAgICAg
ZHJhd0lPU3VyZmFjZVF1YWQoQ0NJT1N1cmZhY2VEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQp
KTsKKyAgICAgICAgZHJhd0lPU3VyZmFjZVF1YWQoZnJhbWUsIENDSU9TdXJmYWNlRHJhd1F1YWQ6
Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yUXVhZDo6UmVuZGVyUGFzczoKLSAgICAgICAgZHJhd1JlbmRlclBhc3NRdWFk
KENDUmVuZGVyUGFzc0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBkcmF3
UmVuZGVyUGFzc1F1YWQoZnJhbWUsIENDUmVuZGVyUGFzc0RyYXdRdWFkOjptYXRlcmlhbENhc3Qo
cXVhZCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYktpdDo6V2ViQ29tcG9zaXRvclF1
YWQ6OlNvbGlkQ29sb3I6Ci0gICAgICAgIGRyYXdTb2xpZENvbG9yUXVhZChXZWJLaXQ6OldlYkNv
bXBvc2l0b3JTb2xpZENvbG9yUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJh
d1NvbGlkQ29sb3JRdWFkKGZyYW1lLCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTb2xpZENvbG9yUXVh
ZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6
OldlYkNvbXBvc2l0b3JRdWFkOjpTdHJlYW1WaWRlb0NvbnRlbnQ6Ci0gICAgICAgIGRyYXdTdHJl
YW1WaWRlb1F1YWQoQ0NTdHJlYW1WaWRlb0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOwor
ICAgICAgICBkcmF3U3RyZWFtVmlkZW9RdWFkKGZyYW1lLCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQ6
Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yUXVhZDo6VGV4dHVyZUNvbnRlbnQ6Ci0gICAgICAgIGRyYXdUZXh0dXJlUXVh
ZChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUZXh0dXJlUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsK
KyAgICAgICAgZHJhd1RleHR1cmVRdWFkKGZyYW1lLCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JUZXh0
dXJlUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkOjpUaWxlZENvbnRlbnQ6Ci0gICAgICAgIGRyYXdUaWxl
UXVhZChDQ1RpbGVEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd1Rp
bGVRdWFkKGZyYW1lLCBDQ1RpbGVEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkOjpZVVZWaWRlb0Nv
bnRlbnQ6Ci0gICAgICAgIGRyYXdZVVZWaWRlb1F1YWQoQ0NZVVZWaWRlb0RyYXdRdWFkOjptYXRl
cmlhbENhc3QocXVhZCkpOworICAgICAgICBkcmF3WVVWVmlkZW9RdWFkKGZyYW1lLCBDQ1lVVlZp
ZGVvRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNv
bnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0ND
aGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBUaWxlQ2hlY2tlcmJvYXJk
UHJvZ3JhbSogcHJvZ3JhbSA9IHRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKCk7CiAgICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CkBAIC01MTQsMTMgKzUwNSwxMyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3Qg
Q0NDaGVja2VyYm9hcmREcmF3UXVhZCogcQogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTFmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJlcXVlbmN5TG9jYXRpb24oKSwg
ZnJlcXVlbmN5KSk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gcXVhZC0+b3BhY2l0eSgpOwotICAg
IGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5zZm9ybSwKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZy
YW1lLCB0aWxlVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgo
KSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIEZsb2F0UXVhZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKICAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigp
LCAtMSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJR
dWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0
IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhZCkKIHsKICAgICBzdGF0aWMgZmxvYXQgZ2xNYXRy
aXhbMTZdOwogICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xv
clByb2dyYW0oKTsKQEAgLTUzMSw3ICs1MjIsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YQog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPnF1YWRUcmFu
c2Zvcm0oKTsKICAgICByZW5kZXJNYXRyaXgudHJhbnNsYXRlKDAuNSAqIGxheWVyUmVjdC53aWR0
aCgpICsgbGF5ZXJSZWN0LngoKSwgMC41ICogbGF5ZXJSZWN0LmhlaWdodCgpICsgbGF5ZXJSZWN0
LnkoKSk7CiAgICAgcmVuZGVyTWF0cml4LnNjYWxlTm9uVW5pZm9ybShsYXllclJlY3Qud2lkdGgo
KSwgbGF5ZXJSZWN0LmhlaWdodCgpKTsKLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xN
YXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOwor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGZyYW1l
LnByb2plY3Rpb25NYXRyaXggKiByZW5kZXJNYXRyaXgpOwogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7CiAKICAgICBTa0NvbG9yIGNvbG9y
ID0gcXVhZC0+Y29sb3IoKTsKQEAgLTU2MSw3ICs1NTIsNyBAQCBzdGF0aWMgaW5saW5lIFNrQml0
bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNv
bnN0CiAgICAgcmV0dXJuIHNvdXJjZTsKIH0KIAotUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVu
ZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRy
YW5zZm9ybSkKK1Bhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0pCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgZHJhd3MgYSBiYWNrZ3JvdW5kIGZpbHRl
ciwgd2hpY2ggYXBwbGllcyBhIGZpbHRlciB0byBhbnkgcGl4ZWxzIGJlaGluZCB0aGUgcXVhZCBh
bmQgc2VlbiB0aHJvdWdoIGl0cyBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSBhbGdvcml0aG0gd29y
a3MgYXMgZm9sbG93czoKQEAgLTU4NCw5ICs1NzUsOSBAQCBQYXNzT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3Qg
QwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cgYmFja2dyb3VuZCBmaWx0ZXJzIG9uIGFu
IG9wYXF1ZSByZW5kZXIgc3VyZmFjZSBiZWNhdXNlIG90aGVyIHN1cmZhY2VzIG1heSBjb250YWlu
CiAgICAgLy8gdHJhbnNsdWNlbnQgcGl4ZWxzLCBhbmQgdGhlIGNvbnRlbnRzIGJlaGluZCB0aG9z
ZSB0cmFuc2x1Y2VudCBwaXhlbHMgd291bGRuJ3QgaGF2ZSB0aGUgZmlsdGVyIGFwcGxpZWQuCi0g
ICAgaWYgKG1fY3VycmVudFJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQor
ICAgIGlmIChmcmFtZS5jdXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dHVy
ZSk7CisgICAgQVNTRVJUKCFmcmFtZS5jdXJyZW50VGV4dHVyZSk7CiAKICAgICAvLyBGSVhNRTog
RG8gYSBzaW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJlcGxpY2EgYW5k
IGNhY2hlIHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJlcyBhcmUgbm90
IHJldXNlZCkuCiAgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01h
dGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2Vv
bWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOwpAQCAtNTk2LDcgKzU4Nyw3IEBAIFBhc3NPd25Q
dHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5k
RmlsdGVycyhjb25zdCBDCiAgICAgZGV2aWNlUmVjdC5tb3ZlKC1sZWZ0LCAtdG9wKTsKICAgICBk
ZXZpY2VSZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7CiAKLSAgICBkZXZp
Y2VSZWN0LmludGVyc2VjdChtX2N1cnJlbnRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJl
Y3QoKSk7CisgICAgZGV2aWNlUmVjdC5pbnRlcnNlY3QoZnJhbWUuY3VycmVudFJlbmRlclBhc3Mt
PmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKIAogICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+
IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNv
dXJjZVByb3ZpZGVyKTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVyVGV4dHVyZShkZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCkBAIC02MTMsOCArNjA0LDggQEAgUGFz
c093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tn
cm91bmRGaWx0ZXJzKGNvbnN0IEMKICAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5hbGxvY2F0
ZShDQ1JlbmRlcmVyOjpJbXBsUG9vbCwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUZyYW1lYnVm
ZmVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IHRhcmdldFJlbmRlclBhc3MgPSBtX2N1cnJlbnRSZW5kZXJQYXNzOwotICAgIGJvb2wgdXNpbmdC
YWNrZ3JvdW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0
KCksIHF1YWQtPnF1YWRSZWN0KCkpOworICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVu
ZGVyUGFzcyA9IGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzOworICAgIGJvb2wgdXNpbmdCYWNrZ3Jv
dW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRleHR1cmUoZnJhbWUsIGJhY2tncm91bmRUZXh0dXJlLmdl
dCgpLCBxdWFkLT5xdWFkUmVjdCgpKTsKIAogICAgIGlmICh1c2luZ0JhY2tncm91bmRUZXh0dXJl
KSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJlYWRiYWNrIHBpeGVscyBmcm9tIGRldmljZSB0byB0
aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGZvciB0aGUgc3VyZmFjZS4KQEAgLTYyNSwyMyArNjE2LDIz
IEBAIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDCiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJlY3Qud2lkdGgoKSAvIDIuMCwgZGV2aWNlUmVjdC5o
ZWlnaHQoKSAvIDIuMCk7CiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0udHJh
bnNsYXRlKGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0LnkoKSk7CiAKLSAgICAgICAgY29weVRl
eHR1cmVUb0ZyYW1lYnVmZmVyKGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2
aWNlUmVjdC5zaXplKCksIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0pOworICAgICAgICBj
b3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZnJhbWUsIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRl
eHR1cmVJZCwgZGV2aWNlUmVjdC5zaXplKCksIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0p
OwogICAgIH0KIAotICAgIHVzZVJlbmRlclBhc3ModGFyZ2V0UmVuZGVyUGFzcyk7CisgICAgdXNl
UmVuZGVyUGFzcyhmcmFtZSwgdGFyZ2V0UmVuZGVyUGFzcyk7CiAKICAgICBpZiAoIXVzaW5nQmFj
a2dyb3VuZFRleHR1cmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBiYWNr
Z3JvdW5kVGV4dHVyZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKERyYXdpbmdGcmFt
ZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogewogICAgIENhY2hl
ZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChxdWFk
LT5yZW5kZXJQYXNzSWQoKSk7CiAgICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNvbnRlbnRz
VGV4dHVyZS0+aWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzID0gbV9yZW5kZXJQYXNzZXNCeUlkLT5nZXQocXVhZC0+cmVuZGVyUGFzc0lk
KCkpOworICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBh
c3Nlc0J5SWQtPmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CiAgICAgQVNTRVJUKHJlbmRlclBh
c3MpOwogICAgIGlmICghcmVuZGVyUGFzcykKICAgICAgICAgcmV0dXJuOwpAQCAtNjUwLDEzICs2
NDEsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChj
b25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKICAgICByZW5kZXJNYXRyaXgudHJhbnNs
YXRlKDAuNSAqIHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSArIHF1YWQtPnF1YWRSZWN0KCkueCgp
LCAwLjUgKiBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpICsgcXVhZC0+cXVhZFJlY3QoKS55KCkp
OwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IHJlbmRlck1hdHJp
eDsKICAgICBkZXZpY2VNYXRyaXguc2NhbGVOb25Vbmlmb3JtKHF1YWQtPnF1YWRSZWN0KCkud2lk
dGgoKSwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSk7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggY29udGVudHNEZXZpY2VUcmFuc2Zvcm0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh3
aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIGRldmljZU1hdHJpeCkudG8yZFRy
YW5zZm9ybSgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZnJhbWUud2luZG93TWF0cml4ICogZnJh
bWUucHJvamVjdGlvbk1hdHJpeCAqIGRldmljZU1hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwogCiAg
ICAgLy8gQ2FuIG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmljZSBtYXRyaXggaXMgaW52ZXJ0aWJs
ZS4KICAgICBpZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4
dHVyZSA9IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCByZW5kZXJQYXNzLT5iYWNrZ3JvdW5k
RmlsdGVycygpLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CisgICAgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3QmFja2dyb3VuZEZpbHRlcnMoZnJhbWUs
IHF1YWQsIHJlbmRlclBhc3MtPmJhY2tncm91bmRGaWx0ZXJzKCksIGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9u
J3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAg
ICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KQEAgLTY3NSw3ICs2
NjYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNv
bnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlmIChiYWNrZ3JvdW5kVGV4dHVy
ZSkgewogICAgICAgICBBU1NFUlQoYmFja2dyb3VuZFRleHR1cmUtPnNpemUoKSA9PSBxdWFkLT5x
dWFkUmVjdCgpLnNpemUoKSk7CiAgICAgICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBs
b2NrKG1fcmVzb3VyY2VQcm92aWRlciwgYmFja2dyb3VuZFRleHR1cmUtPmlkKCkpOwotICAgICAg
ICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIobG9jay50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJl
Y3QoKS5zaXplKCksIHJlbmRlck1hdHJpeCk7CisgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1
ZmZlcihmcmFtZSwgbG9jay50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHJl
bmRlck1hdHJpeCk7CiAgICAgfQogCiAgICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7CkBAIC03NjIs
MTEgKzc1MywxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NR
dWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIEZsb2F0UXVhZCBzdXJm
YWNlUXVhZCA9IENDTWF0aFV0aWw6Om1hcFF1YWQoY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaW52
ZXJzZSgpLCBkZXZpY2VMYXllckVkZ2VzLmZsb2F0UXVhZCgpLCBjbGlwcGVkKTsKICAgICBBU1NF
UlQoIWNsaXBwZWQpOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChyZW5kZXJNYXRyaXgsIHF1YWQt
PnF1YWRSZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSwgcXVhZC0+b3Bh
Y2l0eSgpLCBzdXJmYWNlUXVhZCwKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZyYW1lLCByZW5kZXJN
YXRyaXgsIHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQo
KSwgcXVhZC0+b3BhY2l0eSgpLCBzdXJmYWNlUXVhZCwKICAgICAgICAgICAgICAgICAgICAgIHNo
YWRlck1hdHJpeExvY2F0aW9uLCBzaGFkZXJBbHBoYUxvY2F0aW9uLCBzaGFkZXJRdWFkTG9jYXRp
b24pOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFk
KGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBTb2xpZENvbG9yUHJvZ3JhbSog
cHJvZ3JhbSA9IHNvbGlkQ29sb3JQcm9ncmFtKCk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwpAQCAtNzgyLDcgKzc3Myw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NT
b2xpZENvbG9yRHJhd1F1YWQqIHF1YWQpCiAKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgKFNr
Q29sb3JHZXRSKGNvbG9yKSAvIDI1NS4wKSAqIGFscGhhLCAoU2tDb2xvckdldEcoY29sb3IpIC8g
MjU1LjApICogYWxwaGEsIChTa0NvbG9yR2V0Qihjb2xvcikgLyAyNTUuMCkgKiBhbHBoYSwgYWxw
aGEpKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5zZm9ybSwKKyAgICBkcmF3VGV4
dHVyZWRRdWFkKGZyYW1lLCB0aWxlVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgdGls
ZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIDEuMCwgRmxvYXRRdWFkKCksCiAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAogICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKQEAgLTgxMyw3ICs4MDQsNyBAQCBzdGF0
aWMgdm9pZCB0aWxlVW5pZm9ybUxvY2F0aW9uKFQgcHJvZ3JhbSwgVGlsZVByb2dyYW1Vbmlmb3Jt
cyYgdW5pZm9ybXMpCiAgICAgdW5pZm9ybXMuZWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NUaWxlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QgPSBx
dWFkLT5xdWFkVmlzaWJsZVJlY3QoKTsKIApAQCAtODQ5LDcgKzg0MCw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQp
CiAKIAogICAgIEZsb2F0UXVhZCBsb2NhbFF1YWQ7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4
KCkgKiBwcm9qZWN0aW9uTWF0cml4KCkgKiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFu
c2Zvcm0oKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChmcmFtZS53aW5kb3dNYXRyaXggKiBmcmFtZS5wcm9qZWN0
aW9uTWF0cml4ICogcXVhZC0+cXVhZFRyYW5zZm9ybSgpKS50bzJkVHJhbnNmb3JtKCk7CiAgICAg
aWYgKCFkZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtOTY1LDEwICs5NTYsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxl
UXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCogcXVhZCkKICAgICAvLyBOb3JtYWxpemUgdG8gdGls
ZVJlY3QuCiAgICAgbG9jYWxRdWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBm
IC8gdGlsZVJlY3QuaGVpZ2h0KCkpOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5xdWFk
VHJhbnNmb3JtKCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBxdWFkLT5v
cGFjaXR5KCksIGxvY2FsUXVhZCwgdW5pZm9ybXMubWF0cml4TG9jYXRpb24sIHVuaWZvcm1zLmFs
cGhhTG9jYXRpb24sIHVuaWZvcm1zLnBvaW50TG9jYXRpb24pOworICAgIGRyYXdUZXh0dXJlZFF1
YWQoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJl
Y3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgbG9jYWxRdWFkLCB1bmlmb3Jtcy5tYXRyaXhM
b2NhdGlvbiwgdW5pZm9ybXMuYWxwaGFMb2NhdGlvbiwgdW5pZm9ybXMucG9pbnRMb2NhdGlvbik7
CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlkZW9RdWFkKGNvbnN0
IENDWVVWVmlkZW9EcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3WVVWVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVWVmlkZW9EcmF3
UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRl
b1lVVlByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXpl
ZCgpKTsKQEAgLTEwMjUsMTQgKzEwMTYsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdZVVZWaWRlb1F1YWQoY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAgIElu
dFJlY3QgcXVhZFJlY3QgPSBxdWFkLT5xdWFkUmVjdCgpOwogICAgIHF1YWRUcmFuc2Zvcm0udHJh
bnNsYXRlKHF1YWRSZWN0LngoKSArIHF1YWRSZWN0LndpZHRoKCkgLyAyLjAsIHF1YWRSZWN0Lnko
KSArIHF1YWRSZWN0LmhlaWdodCgpIC8gMi4wKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQocXVh
ZFRyYW5zZm9ybSwgcXVhZFJlY3Qud2lkdGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCksIHF1YWQtPm9w
YWNpdHkoKSwgRmxvYXRRdWFkKCksCisgICAgZHJhd1RleHR1cmVkUXVhZChmcmFtZSwgcXVhZFRy
YW5zZm9ybSwgcXVhZFJlY3Qud2lkdGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNp
dHkoKSwgRmxvYXRRdWFkKCksCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhh
TG9jYXRpb24oKSwgLTEpOwogCiAgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0
ZXh0dXJlIDAuCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqIHF1
YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1N0cmVhbVZpZGVvUXVhZChEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAg
ICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKIApAQCAtMTA1Myw3ICsxMDQ0LDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgQ0NTdHJl
YW1WaWRlb0RyYXdRdWFkKiBxdWEKICAgICBJbnRSZWN0IHF1YWRSZWN0ID0gcXVhZC0+cXVhZFJl
Y3QoKTsKICAgICBxdWFkVHJhbnNmb3JtLnRyYW5zbGF0ZShxdWFkUmVjdC54KCkgKyBxdWFkUmVj
dC53aWR0aCgpIC8gMi4wLCBxdWFkUmVjdC55KCkgKyBxdWFkUmVjdC5oZWlnaHQoKSAvIDIuMCk7
CiAKLSAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWRUcmFuc2Zvcm0sIHF1YWRSZWN0LndpZHRoKCks
IHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgp
LAorICAgIGRyYXdUZXh0dXJlZFF1YWQoZnJhbWUsIHF1YWRUcmFuc2Zvcm0sIHF1YWRSZWN0Lndp
ZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5
UXVhZCgpLAogICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
IC0xKTsKIH0KIApAQCAtMTA4MSw3ICsxMDcyLDcgQEAgc3RydWN0IFRleFRyYW5zZm9ybVRleHR1
cmVQcm9ncmFtQmluZGluZyA6IFRleHR1cmVQcm9ncmFtQmluZGluZyB7CiAgICAgaW50IHRleFRy
YW5zZm9ybUxvY2F0aW9uOwogfTsKIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdU
ZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NUZXh0dXJlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIApAQCAtMTEyMiwxMyArMTExMywxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1RleHR1cmVRdWFkKGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKiBxdWFkKQogICAg
IEludFJlY3QgcXVhZFJlY3QgPSBxdWFkLT5xdWFkUmVjdCgpOwogICAgIHF1YWRUcmFuc2Zvcm0u
dHJhbnNsYXRlKHF1YWRSZWN0LngoKSArIHF1YWRSZWN0LndpZHRoKCkgLyAyLjAsIHF1YWRSZWN0
LnkoKSArIHF1YWRSZWN0LmhlaWdodCgpIC8gMi4wKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQo
cXVhZFRyYW5zZm9ybSwgcXVhZFJlY3Qud2lkdGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCksIHF1YWQt
Pm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIGJpbmRpbmcubWF0cml4TG9jYXRpb24s
IGJpbmRpbmcuYWxwaGFMb2NhdGlvbiwgLTEpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoZnJhbWUs
IHF1YWRUcmFuc2Zvcm0sIHF1YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFk
LT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgpLCBiaW5kaW5nLm1hdHJpeExvY2F0aW9u
LCBiaW5kaW5nLmFscGhhTG9jYXRpb24sIC0xKTsKIAogICAgIGlmICghcXVhZC0+cHJlbXVsdGlw
bGllZEFscGhhKCkpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JD
X0FMUEhBKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNl
UXVhZChjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdJT1N1cmZhY2VRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEND
SU9TdXJmYWNlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKICAgICBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsK
QEAgLTExNDgsMTQgKzExMzksMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdJ
T1N1cmZhY2VRdWFkKGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqIHF1YWQpCiAgICAgSW50UmVj
dCBxdWFkUmVjdCA9IHF1YWQtPnF1YWRSZWN0KCk7CiAgICAgcXVhZFRyYW5zZm9ybS50cmFuc2xh
dGUocXVhZFJlY3QueCgpICsgcXVhZFJlY3Qud2lkdGgoKSAvIDIuMCwgcXVhZFJlY3QueSgpICsg
cXVhZFJlY3QuaGVpZ2h0KCkgLyAyLjApOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChxdWFkVHJh
bnNmb3JtLCBxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0
eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwgYmluZGlu
Zy5hbHBoYUxvY2F0aW9uLCAtMSk7CisgICAgZHJhd1RleHR1cmVkUXVhZChmcmFtZSwgcXVhZFRy
YW5zZm9ybSwgcXVhZFJlY3Qud2lkdGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNp
dHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIGJpbmRpbmcubWF0cml4TG9jYXRpb24sIGJpbmRp
bmcuYWxwaGFMb2NhdGlvbiwgLTEpOwogCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkpOwogfQog
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkKIHsKLSAg
ICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2suY2xlYXIoKTsKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpKTsKIH0KQEAgLTExODAsNyArMTE3MCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uCiAg
ICAgZmxhdHRlbmVkWzE1XSA9IG0ubTQ0KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3
TWF0cml4LAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRy
aXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4
TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKQogewpAQCAtMTE5
Miw3ICsxMTgyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1
YWQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXcKICAgICByZW5kZXJNYXRyaXgu
c2NhbGUzZCh3aWR0aCwgaGVpZ2h0LCAxKTsKIAogICAgIC8vIEFwcGx5IHRoZSBwcm9qZWN0aW9u
IG1hdHJpeCBiZWZvcmUgc2VuZGluZyB0aGUgdHJhbnNmb3JtIG92ZXIgdG8gdGhlIHNoYWRlci4K
LSAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbV9wcm9qZWN0aW9uTWF0cml4ICogcmVuZGVy
TWF0cml4KTsKKyAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgZnJhbWUucHJvamVjdGlvbk1h
dHJpeCAqIHJlbmRlck1hdHJpeCk7CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYobWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pKTsK
IApAQCAtMTIxNSw3ICsxMjA1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdU
ZXh0dXJlZFF1YWQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXcKICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQg
dGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkcmF3TWF0cml4KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlUZXh0
dXJlVG9GcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmIGZyYW1lLCBpbnQgdGV4dHVyZUlkLCBjb25z
dCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0
cml4KQogewogICAgIGNvbnN0IFJlbmRlclBhc3NQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyUGFz
c1Byb2dyYW0oKTsKIApAQCAtMTIyOCw3ICsxMjE4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRT
aXoKIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtKCkpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgZHJhd1Rl
eHR1cmVkUXVhZChkcmF3TWF0cml4LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpLCAx
LCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZyYW1lLCBkcmF3
TWF0cml4LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpLCAxLCBzaGFyZWRHZW9tZXRy
eVF1YWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZl
cnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKQEAgLTE0MDAsMjAgKzEzOTAs
MjAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZShD
Q1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKiByZW5kZXJQYXNzKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVu
dFJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5k
ZXJQYXNzKQogewotICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3Mg
JiYgIW1fY3VycmVudFRleHR1cmU7CisgICAgcmV0dXJuIGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNz
ID09IHJlbmRlclBhc3MgJiYgIWZyYW1lLmN1cnJlbnRUZXh0dXJlOwogfQogCi1ib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhEcmF3aW5n
RnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7Ci0gICAgbV9j
dXJyZW50UmVuZGVyUGFzcyA9IHJlbmRlclBhc3M7Ci0gICAgbV9jdXJyZW50VGV4dHVyZSA9IDA7
CisgICAgZnJhbWUuY3VycmVudFJlbmRlclBhc3MgPSByZW5kZXJQYXNzOworICAgIGZyYW1lLmN1
cnJlbnRUZXh0dXJlID0gMDsKIAotICAgIGlmIChyZW5kZXJQYXNzID09IG1fZGVmYXVsdFJlbmRl
clBhc3MpIHsKLSAgICAgICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7CisgICAg
aWYgKHJlbmRlclBhc3MgPT0gZnJhbWUucm9vdFJlbmRlclBhc3MpIHsKKyAgICAgICAgZnJhbWUu
Y3VycmVudEZyYW1lYnVmZmVyTG9jay5jbGVhcigpOwogICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IDApKTsKLSAgICAgICAgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChyZW5kZXJQYXNzLT5mcmFtZWJ1
ZmZlck91dHB1dFJlY3QoKSwgdHJ1ZSk7CisgICAgICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3Qo
ZnJhbWUsIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLCB0cnVlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDI1LDI1ICsxNDE1LDI2IEBAIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcykKICAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYgIXRleHR1cmUtPmFsbG9jYXRlKEND
UmVuZGVyZXI6OkltcGxQb29sLCByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJl
bmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRl
eHR1cmVVc2FnZUZyYW1lYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSh0ZXh0dXJlLCByZW5kZXJQYXNzLT5mcmFtZWJ1
ZmZlck91dHB1dFJlY3QoKSk7CisgICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShm
cmFtZSwgdGV4dHVyZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOwogfQog
Ci1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVyZShjb25zdCBDQ1Nj
b3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKK2Jvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRUZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJh
bWUsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3Bv
cnRSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKLSAgICBtX2N1cnJlbnRSZW5k
ZXJQYXNzID0gMDsKLSAgICBtX2N1cnJlbnRUZXh0dXJlID0gdGV4dHVyZTsKKyAgICBmcmFtZS5j
dXJyZW50UmVuZGVyUGFzcyA9IDA7CisgICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSB0ZXh0dXJl
OwogCi0gICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSh0ZXh0dXJlLCB2aWV3cG9y
dFJlY3QpOworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRleHR1
cmUsIHZpZXdwb3J0UmVjdCk7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU2Nv
cGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KQogewog
ICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZz
Y3JlZW5GcmFtZWJ1ZmZlcklkKSk7Ci0gICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrID0gYWRv
cHRQdHIobmV3IENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUobV9yZXNvdXJjZVByb3ZpZGVy
LCB0ZXh0dXJlLT5pZCgpKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fY3VycmVudEZyYW1lYnVmZmVyTG9jay0+dGV4dHVyZUlkKCksIDApKTsKKyAgICBmcmFtZS5j
dXJyZW50RnJhbWVidWZmZXJMb2NrID0gYWRvcHRQdHIobmV3IENDU2NvcGVkTG9ja1Jlc291cmNl
Rm9yV3JpdGUobV9yZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKSk7CisgICAgdW5zaWdu
ZWQgdGV4dHVyZUlkID0gZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jay0+dGV4dHVyZUlkKCk7
CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCwgMCkpOwog
CiAjaWYgIWRlZmluZWQgKCBOREVCVUcgKQogICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKQEAgLTE0NTIsMTYgKzE0NDMsMTYgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25z
dCBDQ1Njb3BlZFRleHR1cmUqIHRleHQKICAgICB9CiAjZW5kaWYKIAotICAgIHNldERyYXdGcmFt
ZWJ1ZmZlclJlY3QoZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7CisgICAgc2V0RHJhd0ZyYW1lYnVm
ZmVyUmVjdChmcmFtZSwgZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogLy8gU2V0cyB0aGUgc2Npc3NvciByZWdpb24gdG8gdGhlIGdpdmVuIHJlY3Rhbmds
ZS4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUKIC8vIHNjaXNzb3JSZWN0IGhhcyBpdHMg
b3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGN1cnJlbnQgdmlzaWJsZSByZWN0
Lgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1JlY3QoY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0U2Npc3Nv
clRvUmVjdChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkK
IHsKLSAgICBJbnRSZWN0IGZyYW1lYnVmZmVyT3V0cHV0UmVjdCA9IChtX2N1cnJlbnRSZW5kZXJQ
YXNzID8gbV9jdXJyZW50UmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkgOiBtX2Rl
ZmF1bHRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSk7CisgICAgSW50UmVjdCBm
cmFtZWJ1ZmZlck91dHB1dFJlY3QgPSBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcy0+ZnJhbWVidWZm
ZXJPdXRwdXRSZWN0KCk7CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKQEAgLTE0NzIsNyArMTQ2Myw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KQogICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRoZSBib3R0b20g
b2Ygb3VyIGxheWVyLgogICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNjcmVlbiB0ZXh0
dXJlLCB3ZSByZXZlcnNlIG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgogICAgIGludCBzY2lz
c29yWTsKLSAgICBpZiAoaXNDdXJyZW50UmVuZGVyUGFzcyhtX2RlZmF1bHRSZW5kZXJQYXNzKSkK
KyAgICBpZiAoaXNDdXJyZW50UmVuZGVyUGFzcyhmcmFtZSwgZnJhbWUucm9vdFJlbmRlclBhc3Mp
KQogICAgICAgICBzY2lzc29yWSA9IGZyYW1lYnVmZmVyT3V0cHV0UmVjdC5oZWlnaHQoKSAtIChz
Y2lzc29yUmVjdC5tYXhZKCkgLSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QueSgpKTsKICAgICBlbHNl
CiAgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gZnJhbWVidWZmZXJPdXRwdXRS
ZWN0LnkoKTsKQEAgLTE0ODcsMTQgKzE0NzgsMTQgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06Om1ha2VDb250ZXh0Q3VycmVudCgpCiAvLyBTZXRzIHRoZSBjb29yZGluYXRlIHJhbmdlIG9m
IGNvbnRlbnQgdGhhdCBlbmRzIGJlaW5nIGRyYXduIG9udG8gdGhlIHRhcmdldCByZW5kZXIgc3Vy
ZmFjZS4KIC8vIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgaXMgYXNzdW1lZCB0byBoYXZlIGFu
IG9yaWdpbiBhdCAwLCAwIGFuZCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZgogLy8gb2YgdGhlIGRy
YXdSZWN0Lgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdGcmFtZWJ1ZmZlclJl
Y3QoY29uc3QgSW50UmVjdCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChEcmF3aW5nRnJhbWUmIGZyYW1lLCBj
b25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBmbGlwWSkKIHsKICAgICBpZiAoZmxpcFkpCi0g
ICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJh
d1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRyYXdSZWN0LnkoKSk7CisgICAgICAgIGZy
YW1lLnByb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0
Lm1heFgoKSwgZHJhd1JlY3QubWF4WSgpLCBkcmF3UmVjdC55KCkpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVj
dC5tYXhYKCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKKyAgICAgICAgZnJhbWUu
cHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4
WCgpLCBkcmF3UmVjdC55KCksIGRyYXdSZWN0Lm1heFkoKSk7CiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBkcmF3UmVjdC53aWR0aCgpLCBkcmF3UmVjdC5oZWln
aHQoKSkpOwotICAgIG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4KDAsIDAsIGRyYXdSZWN0
LndpZHRoKCksIGRyYXdSZWN0LmhlaWdodCgpKTsKKyAgICBmcmFtZS53aW5kb3dNYXRyaXggPSBz
Y3JlZW5NYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpOwog
fQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggOGY1OWQ0ZTlhZjI4
N2UzYzdkMzM3ZWFkYTViZDczNWZlYWEzNjEwMC4uY2JkYWM4NzVkM2U1OTM0MmNhNTEwYzI0ODJi
NTAxZjBmY2RiMzg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTEw
MywxMCArMTAzLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9v
bCkgT1ZFUlJJREU7CiAKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZs
b2F0UXVhZCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhMb2NhdGlvbiwg
aW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOwotICAgIHZvaWQgY29weVRleHR1
cmVUb0ZyYW1lYnVmZmVyKGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCk7CiAgICAgQ0NS
ZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZVByb3ZpZGVyOyB9CiAKIHByb3RlY3RlZDoKQEAgLTExOSwzNiArMTE1LDU4IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAogcHJpdmF0ZToK
KyAgICBzdHJ1Y3QgRHJhd2luZ0ZyYW1lIHsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzSWRI
YXNoTWFwKiByZW5kZXJQYXNzZXNCeUlkOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJv
b3RSZW5kZXJQYXNzOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGN1cnJlbnRSZW5kZXJQ
YXNzOworICAgICAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJlbnRUZXh0dXJlOworICAg
ICAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gY3VycmVudEZyYW1lYnVm
ZmVyTG9jazsKKworICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2pl
Y3Rpb25NYXRyaXg7CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2lu
ZG93TWF0cml4OworCisgICAgICAgIERyYXdpbmdGcmFtZSgpCisgICAgICAgICAgICA6IHJvb3RS
ZW5kZXJQYXNzKDApCisgICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCisgICAgICAg
ICAgICAsIGN1cnJlbnRUZXh0dXJlKDApCisgICAgICAgIHsgfQorICAgIH07CisKICAgICBzdGF0
aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwogCiAgICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZSgpOwotICAgIHZvaWQgZHJh
d1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1
ZmZlckRhbWFnZVJlY3QpOworICAgIHZvaWQgZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwg
Y29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJl
Y3QpOwogICAgIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKLSAgICB2b2lkIGRyYXdRdWFk
KGNvbnN0IENDRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7Ci0gICAgUGFzc093blB0cjxDQ1Njb3BlZFRl
eHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCos
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYsIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7Ci0gICAgdm9pZCBkcmF3UmVuZGVy
UGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdTb2xp
ZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1N0
cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRy
YXdUZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd0lP
U3VyZmFjZVF1YWQoY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1Rp
bGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3WVVWVmlkZW9RdWFk
KGNvbnN0IENDWVVWVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0Zy
YW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQo
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd0RlYnVnQm9yZGVyUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RlYnVnQm9yZGVyRHJh
d1F1YWQqKTsKKyAgICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZHJhd0JhY2tncm91bmRG
aWx0ZXJzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVh
ZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd1NvbGlkQ29sb3JRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDU29saWRDb2xvckRyYXdR
dWFkKik7CisgICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0
IENDU3RyZWFtVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1RleHR1cmVRdWFkKERyYXdp
bmdGcmFtZSYsIGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3SU9TdXJm
YWNlUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKik7CisgICAg
dm9pZCBkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqKTsK
KyAgICB2b2lkIGRyYXdZVVZWaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NZVVZWaWRl
b0RyYXdRdWFkKik7CisKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoRHJhd2luZ0ZyYW1lJiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBt
YXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOworICAg
IHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYsIGludCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd01hdHJpeCk7CiAKLSAgICB2b2lkIHNldFNjaXNzb3JUb1JlY3QoY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgc2V0U2Npc3NvclRvUmVjdChEcmF3aW5nRnJhbWUmLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoY29uc3QgSW50
UmVjdCYsIGJvb2wgZmxpcFkpOworICAgIHZvaWQgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChEcmF3
aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAKICAgICAvLyBUaGUgY3Vy
cmVudCBkcmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5kZXJQYXNzIG9yIFNjb3BlZFRleHR1
cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0
LgotICAgIGJvb2wgdXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKLSAgICBib29s
IHVzZVNjb3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
dmlld3BvcnRSZWN0KTsKLSAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKik7CisgICAgYm9vbCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
UmVuZGVyUGFzcyopOworICAgIGJvb2wgdXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBj
b25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOworICAg
IGJvb2wgaXNDdXJyZW50UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBh
c3MqKTsKIAotICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGNvbnN0IENDU2NvcGVk
VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCBiaW5kRnJh
bWVidWZmZXJUb1RleHR1cmUoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KTsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VS
ZWN0KTsKKyAgICB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCiAgICAgYm9vbCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIApAQCAtMTcyLDkgKzE5MCw2IEBAIHByaXZhdGU6CiAKICAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwogCi0gICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiBtX2N1cnJlbnRSZW5kZXJQYXNzOwotICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSog
bV9jdXJyZW50VGV4dHVyZTsKLSAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0
ZT4gbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrOwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZDsKIAogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0
cnk7CkBAIC0yNjMsOSArMjc4LDYgQEAgcHJpdmF0ZToKIAogICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9kZWZh
dWx0UmVuZGVyUGFzczsKLSAgICBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAqIG1fcmVuZGVy
UGFzc2VzQnlJZDsKLQogICAgIGJvb2wgbV9pc1ZpZXdwb3J0Q2hhbmdlZDsKICAgICBib29sIG1f
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsKICAgICBib29sIG1faXNVc2luZ0JpbmRVbmlmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJlci5oCmluZGV4IDUxYjg5NDIxZGI1ZjMzZmEzNmE5OGU4YmMwMDdkMTVmMDVj
YmJlNTAuLjkwODA1NjRjMGI1MTM2NjIzYmIxY2FkMjJkN2Y1NjhiNDI1ODE1ZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlcmVyLmgKQEAgLTc0LDkgKzc0LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHZpZXdwb3J0Q2hhbmdlZCgpIHsgfQogCi0gICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvamVjdGlv
bk1hdHJpeDsgfQotICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdp
bmRvd01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93TWF0cml4OyB9Ci0KICAgICB2aXJ0
dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzdCYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9y
UmVuZGVyUGFzc0lkKGludCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMTA1LDggKzEw
Miw2IEBAIHByb3RlY3RlZDoKICAgICB9CiAKICAgICBDQ1JlbmRlcmVyQ2xpZW50KiBtX2NsaWVu
dDsKLSAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJp
eDsKLSAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4Owog
fTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154431</attachid>
            <date>2012-07-25 13:42:34 -0700</date>
            <delta_ts>2012-07-25 13:47:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91885-20120725164224.patch</filename>
            <type>text/plain</type>
            <size>61899</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODljMDUxZmJmMzIxMWEy
NDY3YzdkNTU1MmMwYTY5NjhlYmU3YmUxZi4uMWZjYjBjMmVkM2RmYzgwNmY0ODE4MDQ5ZThiOWZi
Yjk1MDc4Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA3LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBXZWJGaWx0ZXJPcGVyYXRpb25zIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkIHRvIFJlbmRlclBh
c3MgYW5kIHJlbW92ZSBlcGhlbWVyYWwgc3RhdGUgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbW92ZSB0
aGUgZmlsdGVyIG9wZXJhdGlvbnMgdG8gQ0NSZW5kZXJQYXNzIHRvIGF2b2lkIGhhdmluZworICAg
ICAgICB2YXJpYWJsZS1sZW5ndGggZGF0YSBpbiBhIFdlYkNvbXBvc2l0b3JRdWFkIGluIG9yZGVy
IHRvIHNlcmlhbGl6ZSwKKyAgICAgICAgYW5kIGFsc28gdG8gYXZvaWQgcmVxdWlyaW5nIGEgdmly
dHVhbCBkZXN0cnVjdG9yIGZvciB0aGUgcXVhZAorICAgICAgICBjbGFzc2VzLgorCisgICAgICAg
IFRoZSBkcmF3RnJhbWUgbWV0aG9kIG5vdyB0YWtlcyBhIENDUmVuZGVyUGFzc0lkSGFzaE1hcCBp
biBvcmRlcgorICAgICAgICB0byBjb25uZWN0IFJlbmRlclBhc3MgcXVhZHMgdG8gdGhlaXIgc291
cmNlIFJlbmRlclBhc3MuIERhdGEgdGhhdAorICAgICAgICBpcyBvbmx5IHZhbGlkIGR1cmluZyBk
cmF3RnJhbWUgaXMgbW92ZWQgaW50byBhIHN0cnVjdCB0aGF0CisgICAgICAgIGlzIG93bmVkIGJ5
IGRyYXdGcmFtZSBpbnN0ZWFkIG9mIGJlaW5nIGNsYXNzIG1lbWJlciB2YXJpYWJsZXMuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQ
YXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVZWaWRl
b1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3Ry
ZWFtVmlkZW9RdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1RleHR1cmVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0lPU3VyZmFjZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDdXJyZW50UmVuZGVyUGFzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVy
VG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0
U2Npc3NvclRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnNldERyYXdGcmFtZWJ1ZmZlclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKERyYXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkRyYXdpbmdGcmFtZTo6RHJhd2luZ0ZyYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6ZmlsdGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnNldEZpbHRlcnMpOgorICAgICAgICAoQ0NSZW5kZXJQYXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YmFja2dyb3VuZEZpbHRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzZXRCYWNrZ3JvdW5kRmlsdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
UGFzc0RyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKEND
UmVuZGVyZXIpOgorICAgICAgICBUaGUgcHJvamVjdGlvbiBhbmQgd2luZG93IG1hdHJpY2VzIGFy
ZSBub3QgdXNlZCBleHRlcm5hbGx5LCBzbworICAgICAgICB0aGV5IGFyZSBtb3ZlZCBpbnRvIHRo
ZSBlcGhlbWVyYWwgRHJhd2luZ0ZyYW1lIHN0cnVjdHVyZSBpbgorICAgICAgICBMYXllclJlbmRl
cmVyQ2hyb21pdW0uCisKIDIwMTItMDctMjQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUdXJuIHRoZSBkZWJ1ZyBIVUQgaW50byBhIGxh
eWVyIHNvIHRoYXQgaXQgY2FuIGJlIGRyYXduIGFzIGEgV2ViQ29tcG9zaXRvclF1YWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGFhMTVjMDkzMDA3NDBkZGNkOThiZjZlZWMwMjY1Nzcy
ODg0M2I3NS4uNzg1NzhlYjA5YjNjYzk4MjQxZmQ3ZmRlOGQ2ZmJmZTI3MzFiNjRkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNy0yNSAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUg
V2ViRmlsdGVyT3BlcmF0aW9ucyBmcm9tIFJlbmRlclBhc3NEcmF3UXVhZCB0byBSZW5kZXJQYXNz
IGFuZCByZW1vdmUgZXBoZW1lcmFsIHN0YXRlIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg4NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwg
aW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBs
ZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAg
ICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3Rz
L0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJD
bGllbnQ6OkZha2VDQ1JlbmRlcmVyQ2xpZW50KToKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xp
ZW50Ojpyb290UmVuZGVyUGFzcyk6CisgICAgICAgIChGYWtlQ0NSZW5kZXJlckNsaWVudDo6cmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIpOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OnJl
bmRlclBhc3Nlcyk6CisgICAgICAgIChGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisgICAgICAgIChU
RVNUX0YpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTItMDctMjQgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUdXJuIHRoZSBkZWJ1ZyBI
VUQgaW50byBhIGxheWVyIHNvIHRoYXQgaXQgY2FuIGJlIGRyYXduIGFzIGEgV2ViQ29tcG9zaXRv
clF1YWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDEyODFkODA0
OGI1YTcyOGNhN2Y2YTAyYzBhZGFiMjgwOWYyZTNjYWUuLmViZDYxMDIxZDRkZjA1MDhlYWI0MTc3
NTI5YzhmMWMxZGE0NzU3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtMTY2LDEzICsxNjYsMTAgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRl
cmVyQ2hyb21pdW0oQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVBy
b3ZpZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZVVwbG9hZGVyT3B0aW9uIHRleHR1cmVVcGxvYWRlclNldHRpbmcpCiAgICAgOiBDQ1JlbmRl
cmVyKGNsaWVudCkKLSAgICAsIG1fY3VycmVudFJlbmRlclBhc3MoMCkKLSAgICAsIG1fY3VycmVu
dFRleHR1cmUoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9z
aGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCiAg
ICAgLCBtX3Jlc291cmNlUHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKICAgICAsIG1fY29udGV4
dChyZXNvdXJjZVByb3ZpZGVyLT5ncmFwaGljc0NvbnRleHQzRCgpKQotICAgICwgbV9kZWZhdWx0
UmVuZGVyUGFzcygwKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxzZSkKICAgICAsIG1f
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKICAgICAsIG1faXNVc2luZ0JpbmRVbmlmb3Jt
KGZhbHNlKQpAQCAtMjg5LDMxICsyODYsMjcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnZpZXdwb3J0Q2hhbmdlZCgpCiB7CiAgICAgbV9pc1ZpZXdwb3J0Q2hhbmdlZCA9IHRydWU7Ci0K
LSAgICAvLyBSZXNldCB0aGUgY3VycmVudCBSZW5kZXJQYXNzIHRvIGZvcmNlIGFuIHVwZGF0ZSBv
ZiB0aGUgdmlld3BvcnQgYW5kCi0gICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVz
ZVJlbmRlclBhc3MgaXMgY2FsbGVkLgotICAgIG1fY3VycmVudFJlbmRlclBhc3MgPSAwOwogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVu
ZGVyUGFzcyogcmVuZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJl
Y3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJGcmFtZWJ1ZmZlcihEcmF3aW5n
RnJhbWUmIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkKIHsK
ICAgICAvLyBPbiBERUJVRyBidWlsZHMsIG9wYXF1ZSByZW5kZXIgcGFzc2VzIGFyZSBjbGVhcmVk
IHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhl
IHNjcmVlbi4gSWYgd2UKICAgICAvLyBhcmUgdXNpbmcgcGFydGlhbCBzd2FwIC8gc2Npc3NvciBv
cHRpbWl6YXRpb24sIHRoZW4gdGhlIHN1cmZhY2Ugc2hvdWxkIG9ubHkKICAgICAvLyBjbGVhciB0
aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHVu
LWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBvZiB0aGUgc2NyZWVuLgogCi0gICAgaWYgKHJlbmRl
clBhc3MtPmhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQorICAgIGlmIChmcmFtZS5jdXJyZW50
UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CiAgICAgZWxzZQogICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSkpOwog
CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldFNj
aXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpKTsKKyAg
ICAgICAgc2V0U2Npc3NvclRvUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChmcmFtZWJ1ZmZl
ckRhbWFnZVJlY3QpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKICNpZiBkZWZp
bmVkKE5ERUJVRykKLSAgICBpZiAocmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpCisgICAgaWYgKGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJhY2tn
cm91bmQoKSkKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIApAQCAtMzM0LDE0ICszMjcsMTQgQEAgR0MzRGVudW0g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1Jl
bmRlclBhc3MqKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFz
c0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXIpCiB7Ci0gICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFzcyo+IHBh
c3Nlc0luRnJhbWU7CisgICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFzcyo+IHJlbmRl
clBhc3Nlc0luRnJhbWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJ
bkRyYXdPcmRlci5zaXplKCk7ICsraSkKLSAgICAgICAgcGFzc2VzSW5GcmFtZS5zZXQocmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldKTsK
KyAgICAgICAgcmVuZGVyUGFzc2VzSW5GcmFtZS5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJb
aV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldKTsKIAogICAgIFZlY3RvcjxpbnQ+
IHBhc3Nlc1RvRGVsZXRlOwogICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwogICAgIGZvciAocGFzc0l0ZXJhdG9yID0g
bV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVyUGFz
c1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRvcikgewotICAgICAgICBjb25zdCBDQ1JlbmRl
clBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9y
LT5maXJzdCk7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUg
PSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKICAgICAgICAg
aWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewogICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBw
ZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNzQs
MjkgKzM2NywzMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291
cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0CiAgICAgcmV0dXJuIHRleHR1cmUgJiYg
dGV4dHVyZS0+aWQoKSAmJiB0ZXh0dXJlLT5pc0NvbXBsZXRlKCk7CiB9CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVy
UGFzc2VzLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2Vz
QnlJZCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgY29uc3QgQ0NS
ZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyA9IHJlbmRlclBhc3Nlcy5sYXN0KCk7Ci0gICAgYmVn
aW5EcmF3aW5nRnJhbWUocm9vdFJlbmRlclBhc3MpOworICAgIGNvbnN0IENDUmVuZGVyUGFzcyog
cm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7CisgICAgQVNT
RVJUKHJvb3RSZW5kZXJQYXNzKTsKKworICAgIERyYXdpbmdGcmFtZSBmcmFtZTsKKyAgICBmcmFt
ZS5yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7CisgICAgZnJhbWUucm9vdFJl
bmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyog
cmVuZGVyUGFzcyA9IHJlbmRlclBhc3Nlc1tpXTsKKyAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXpl
KCk7ICsraSkgeworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSByZW5k
ZXJQYXNzZXNJbkRyYXdPcmRlcltpXTsKIAogICAgICAgICBGbG9hdFJlY3Qgcm9vdFNjaXNzb3JS
ZWN0SW5DdXJyZW50U3VyZmFjZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29tcHV0
ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JSZWN0KTsKLSAgICAg
ICAgZHJhd1JlbmRlclBhc3MocmVuZGVyUGFzcywgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3Vy
ZmFjZSk7CisgICAgICAgIGRyYXdSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzLCByb290U2Np
c3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKICAgICB9CiAKICAgICBmaW5pc2hEcmF3aW5nRnJh
bWUoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1l
KGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBvbmNlIGZyYW1lYnVmZmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVjcmVhdGVkIG9uIGZpcnN0IHVz
ZQogICAgIGVuc3VyZUZyYW1lYnVmZmVyKCk7CiAKLSAgICBtX2RlZmF1bHRSZW5kZXJQYXNzID0g
cm9vdFJlbmRlclBhc3M7Ci0gICAgQVNTRVJUKG1fZGVmYXVsdFJlbmRlclBhc3MpOwotCiAgICAg
aWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MjYs
MTkgKzQyMiwxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkKICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNz
LCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1h
Z2VSZWN0KQogewotICAgIGlmICghdXNlUmVuZGVyUGFzcyhyZW5kZXJQYXNzKSkKKyAgICBpZiAo
IXVzZVJlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3MpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjbGVhclJlbmRlclBhc3MocmVuZGVyUGFzcywgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKKyAg
ICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lLCBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCiAgICAg
Y29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwogICAg
IGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3Qu
YmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0
KQotICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCkpOworICAgICAgICBkcmF3UXVhZChmcmFtZSwg
aXQtPmdldCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNv
bnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJD
b21wb3NpdG9yUXVhZCogcXVhZCkKIHsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gcXVhZC0+
c2Npc3NvclJlY3QoKTsKIApAQCAtNDQ2LDcgKzQ0Miw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkKiBxdWFkKQog
ICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNl
dFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOworICAgIHNldFNjaXNzb3JUb1JlY3QoZnJhbWUs
IHNjaXNzb3JSZWN0KTsKIAogICAgIGlmIChxdWFkLT5uZWVkc0JsZW5kaW5nKCkpCiAgICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOwpAQCAtNDU4LDM2ICs0NTQsMzYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdRdWFkKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQqIHF1YWQpCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYktpdDo6V2Vi
Q29tcG9zaXRvclF1YWQ6OkNoZWNrZXJib2FyZDoKLSAgICAgICAgZHJhd0NoZWNrZXJib2FyZFF1
YWQoQ0NDaGVja2VyYm9hcmREcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAg
ZHJhd0NoZWNrZXJib2FyZFF1YWQoZnJhbWUsIENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQ6Om1hdGVy
aWFsQ2FzdChxdWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJDb21w
b3NpdG9yUXVhZDo6RGVidWdCb3JkZXI6Ci0gICAgICAgIGRyYXdEZWJ1Z0JvcmRlclF1YWQoQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBkcmF3RGVi
dWdCb3JkZXJRdWFkKGZyYW1lLCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChx
dWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVh
ZDo6SU9TdXJmYWNlQ29udGVudDoKLSAgICAgICAgZHJhd0lPU3VyZmFjZVF1YWQoQ0NJT1N1cmZh
Y2VEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd0lPU3VyZmFjZVF1
YWQoZnJhbWUsIENDSU9TdXJmYWNlRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDo6UmVuZGVyUGFz
czoKLSAgICAgICAgZHJhd1JlbmRlclBhc3NRdWFkKENDUmVuZGVyUGFzc0RyYXdRdWFkOjptYXRl
cmlhbENhc3QocXVhZCkpOworICAgICAgICBkcmF3UmVuZGVyUGFzc1F1YWQoZnJhbWUsIENDUmVu
ZGVyUGFzc0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQ6OlNvbGlkQ29sb3I6Ci0gICAgICAgIGRy
YXdTb2xpZENvbG9yUXVhZChXZWJLaXQ6OldlYkNvbXBvc2l0b3JTb2xpZENvbG9yUXVhZDo6bWF0
ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd1NvbGlkQ29sb3JRdWFkKGZyYW1lLCBXZWJL
aXQ6OldlYkNvbXBvc2l0b3JTb2xpZENvbG9yUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkOjpTdHJlYW1W
aWRlb0NvbnRlbnQ6Ci0gICAgICAgIGRyYXdTdHJlYW1WaWRlb1F1YWQoQ0NTdHJlYW1WaWRlb0Ry
YXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBkcmF3U3RyZWFtVmlkZW9RdWFk
KGZyYW1lLCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDo6VGV4dHVyZUNv
bnRlbnQ6Ci0gICAgICAgIGRyYXdUZXh0dXJlUXVhZChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUZXh0
dXJlUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd1RleHR1cmVRdWFkKGZy
YW1lLCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JUZXh0dXJlUXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6OldlYkNvbXBvc2l0b3JRdWFkOjpU
aWxlZENvbnRlbnQ6Ci0gICAgICAgIGRyYXdUaWxlUXVhZChDQ1RpbGVEcmF3UXVhZDo6bWF0ZXJp
YWxDYXN0KHF1YWQpKTsKKyAgICAgICAgZHJhd1RpbGVRdWFkKGZyYW1lLCBDQ1RpbGVEcmF3UXVh
ZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6
OldlYkNvbXBvc2l0b3JRdWFkOjpZVVZWaWRlb0NvbnRlbnQ6Ci0gICAgICAgIGRyYXdZVVZWaWRl
b1F1YWQoQ0NZVVZWaWRlb0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBk
cmF3WVVWVmlkZW9RdWFkKGZyYW1lLCBDQ1lVVlZpZGVvRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChx
dWFkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQq
IHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQo
RHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkK
IHsKICAgICBjb25zdCBUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSogcHJvZ3JhbSA9IHRpbGVDaGVj
a2VyYm9hcmRQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7CkBAIC01MDksMTMgKzUwNSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcQog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuZnJlcXVlbmN5TG9jYXRpb24oKSwgZnJlcXVlbmN5KSk7CiAKICAgICBmbG9hdCBv
cGFjaXR5ID0gcXVhZC0+b3BhY2l0eSgpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5z
Zm9ybSwKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZyYW1lLCB0aWxlVHJhbnNmb3JtLAogICAgICAg
ICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNp
dHksIEZsb2F0UXVhZCgpLAogICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkubWF0cml4TG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLCAtMSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3
UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJR
dWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVh
ZCkKIHsKICAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwogICAgIGNvbnN0IFNvbGlkQ29s
b3JQcm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xvclByb2dyYW0oKTsKQEAgLTUyNiw3ICs1MjIs
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25z
dCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHJlbmRlck1hdHJpeCA9IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKTsKICAgICByZW5kZXJNYXRyaXgu
dHJhbnNsYXRlKDAuNSAqIGxheWVyUmVjdC53aWR0aCgpICsgbGF5ZXJSZWN0LngoKSwgMC41ICog
bGF5ZXJSZWN0LmhlaWdodCgpICsgbGF5ZXJSZWN0LnkoKSk7CiAgICAgcmVuZGVyTWF0cml4LnNj
YWxlTm9uVW5pZm9ybShsYXllclJlY3Qud2lkdGgoKSwgbGF5ZXJSZWN0LmhlaWdodCgpKTsKLSAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0
aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiByZW5kZXJN
YXRyaXgpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsTWF0
cml4WzBdKSk7CiAKICAgICBTa0NvbG9yIGNvbG9yID0gcXVhZC0+Y29sb3IoKTsKQEAgLTU1Niw3
ICs1NTIsNyBAQCBzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0CiAgICAgcmV0dXJuIHNvdXJjZTsKIH0K
IAotUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pCitQYXNz
T3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dy
b3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqIHF1YWQsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQogewog
ICAgIC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxp
ZXMgYSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3Vn
aCBpdHMgYmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6
CkBAIC01NzQsMzAgKzU3MCwzMCBAQCBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQwogCiAgICAgLy8g
RklYTUU6IFdoZW4gdGhpcyBhbGdvcml0aG0gY2hhbmdlcywgdXBkYXRlIENDTGF5ZXJUcmVlSG9z
dDo6cHJpb3JpdGl6ZVRleHR1cmVzKCkgYWNjb3JkaW5nbHkuCiAKLSAgICBpZiAocXVhZC0+YmFj
a2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXZSBvbmx5IGFsbG93IGJh
Y2tncm91bmQgZmlsdGVycyBvbiBhbiBvcGFxdWUgcmVuZGVyIHN1cmZhY2UgYmVjYXVzZSBvdGhl
ciBzdXJmYWNlcyBtYXkgY29udGFpbgogICAgIC8vIHRyYW5zbHVjZW50IHBpeGVscywgYW5kIHRo
ZSBjb250ZW50cyBiZWhpbmQgdGhvc2UgdHJhbnNsdWNlbnQgcGl4ZWxzIHdvdWxkbid0IGhhdmUg
dGhlIGZpbHRlciBhcHBsaWVkLgotICAgIGlmIChtX2N1cnJlbnRSZW5kZXJQYXNzLT5oYXNUcmFu
c3BhcmVudEJhY2tncm91bmQoKSkKKyAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmhh
c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBB
U1NFUlQoIW1fY3VycmVudFRleHR1cmUpOworICAgIEFTU0VSVCghZnJhbWUuY3VycmVudFRleHR1
cmUpOwogCiAgICAgLy8gRklYTUU6IERvIGEgc2luZ2xlIHJlYWRiYWNrIGZvciBib3RoIHRoZSBz
dXJmYWNlIGFuZCByZXBsaWNhIGFuZCBjYWNoZSB0aGUgZmlsdGVyZWQgcmVzdWx0cyAob25jZSBm
aWx0ZXIgdGV4dHVyZXMgYXJlIG5vdCByZXVzZWQpLgogICAgIEludFJlY3QgZGV2aWNlUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QoY29udGVudHNEZXZp
Y2VUcmFuc2Zvcm0sIHNoYXJlZEdlb21ldHJ5UXVhZCgpLmJvdW5kaW5nQm94KCkpKTsKIAogICAg
IGludCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7Ci0gICAgcXVhZC0+YmFja2dyb3VuZEZpbHRl
cnMoKS5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgZmlsdGVycy5n
ZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAgICAgZGV2aWNlUmVjdC5tb3Zl
KC1sZWZ0LCAtdG9wKTsKICAgICBkZXZpY2VSZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRvcCAr
IGJvdHRvbSk7CiAKLSAgICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1cnJlbnRSZW5kZXJQYXNz
LT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSk7CisgICAgZGV2aWNlUmVjdC5pbnRlcnNlY3QoZnJh
bWUuY3VycmVudFJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKIAogICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gQ0NTY29wZWRU
ZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3ZpZGVyKTsKICAgICBpZiAoIWdldEZyYW1lYnVm
ZmVyVGV4dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgU2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNr
Z3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCksIGRl
dmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKKyAgICBTa0JpdG1hcCBmaWx0ZXJlZERldmlj
ZUJhY2tncm91bmQgPSBhcHBseUZpbHRlcnModGhpcywgZmlsdGVycywgZGV2aWNlQmFja2dyb3Vu
ZFRleHR1cmUuZ2V0KCkpOwogICAgIGlmICghZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRl
eHR1cmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTYwOCw4ICs2MDQsOCBAQCBQ
YXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFj
a2dyb3VuZEZpbHRlcnMoY29uc3QgQwogICAgIGlmICghYmFja2dyb3VuZFRleHR1cmUtPmFsbG9j
YXRlKENDUmVuZGVyZXI6OkltcGxQb29sLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlRnJhbWVi
dWZmZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0IENDUmVuZGVyUGFz
cyogdGFyZ2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgYm9vbCB1c2lu
Z0JhY2tncm91bmRUZXh0dXJlID0gdXNlU2NvcGVkVGV4dHVyZShiYWNrZ3JvdW5kVGV4dHVyZS5n
ZXQoKSwgcXVhZC0+cXVhZFJlY3QoKSk7CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiB0YXJnZXRS
ZW5kZXJQYXNzID0gZnJhbWUuY3VycmVudFJlbmRlclBhc3M7CisgICAgYm9vbCB1c2luZ0JhY2tn
cm91bmRUZXh0dXJlID0gdXNlU2NvcGVkVGV4dHVyZShmcmFtZSwgYmFja2dyb3VuZFRleHR1cmUu
Z2V0KCksIHF1YWQtPnF1YWRSZWN0KCkpOwogCiAgICAgaWYgKHVzaW5nQmFja2dyb3VuZFRleHR1
cmUpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcmVhZGJhY2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRv
IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBzdXJmYWNlLgpAQCAtNjIwLDM3ICs2MTYs
NDIgQEAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEMKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZl
clRyYW5zZm9ybS50cmFuc2xhdGUoZGV2aWNlUmVjdC53aWR0aCgpIC8gMi4wLCBkZXZpY2VSZWN0
LmhlaWdodCgpIC8gMi4wKTsKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybS50
cmFuc2xhdGUoZGV2aWNlUmVjdC54KCksIGRldmljZVJlY3QueSgpKTsKIAotICAgICAgICBjb3B5
VGV4dHVyZVRvRnJhbWVidWZmZXIoZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBk
ZXZpY2VSZWN0LnNpemUoKSwgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybSk7CisgICAgICAg
IGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihmcmFtZSwgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5k
VGV4dHVyZUlkLCBkZXZpY2VSZWN0LnNpemUoKSwgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9y
bSk7CiAgICAgfQogCi0gICAgdXNlUmVuZGVyUGFzcyh0YXJnZXRSZW5kZXJQYXNzKTsKKyAgICB1
c2VSZW5kZXJQYXNzKGZyYW1lLCB0YXJnZXRSZW5kZXJQYXNzKTsKIAogICAgIGlmICghdXNpbmdC
YWNrZ3JvdW5kVGV4dHVyZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGJh
Y2tncm91bmRUZXh0dXJlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQ2Fj
aGVkVGV4dHVyZSogY29udGVudHNUZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHF1
YWQtPnJlbmRlclBhc3NJZCgpKTsKICAgICBpZiAoIWNvbnRlbnRzVGV4dHVyZSB8fCAhY29udGVu
dHNUZXh0dXJlLT5pZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBjb25zdCBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLT5nZXQocXVhZC0+cmVuZGVy
UGFzc0lkKCkpOworICAgIEFTU0VSVChyZW5kZXJQYXNzKTsKKyAgICBpZiAoIXJlbmRlclBhc3Mp
CisgICAgICAgIHJldHVybjsKKwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1h
dHJpeCA9IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKTsKICAgICByZW5kZXJNYXRyaXgudHJhbnNsYXRl
KDAuNSAqIHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSArIHF1YWQtPnF1YWRSZWN0KCkueCgpLCAw
LjUgKiBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpICsgcXVhZC0+cXVhZFJlY3QoKS55KCkpOwog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IHJlbmRlck1hdHJpeDsK
ICAgICBkZXZpY2VNYXRyaXguc2NhbGVOb25Vbmlmb3JtKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgo
KSwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSk7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudHNEZXZpY2VUcmFuc2Zvcm0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh3aW5k
b3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIGRldmljZU1hdHJpeCkudG8yZFRyYW5z
Zm9ybSgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNm
b3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZnJhbWUud2luZG93TWF0cml4ICogZnJhbWUu
cHJvamVjdGlvbk1hdHJpeCAqIGRldmljZU1hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwogCiAgICAg
Ly8gQ2FuIG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmljZSBtYXRyaXggaXMgaW52ZXJ0aWJsZS4K
ICAgICBpZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVy
ZSA9IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7
CisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3QmFj
a2dyb3VuZEZpbHRlcnMoZnJhbWUsIHF1YWQsIHJlbmRlclBhc3MtPmJhY2tncm91bmRGaWx0ZXJz
KCksIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlz
IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFj
ZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMg
dGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywg
cXVhZC0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUpOworICAgIFNrQml0bWFwIGZpbHRlckJp
dG1hcCA9IGFwcGx5RmlsdGVycyh0aGlzLCByZW5kZXJQYXNzLT5maWx0ZXJzKCksIGNvbnRlbnRz
VGV4dHVyZSk7CiAgICAgT3duUHRyPENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZD4gY29udGVu
dHNSZXNvdXJjZUxvY2s7CiAgICAgdW5zaWduZWQgY29udGVudHNUZXh0dXJlSWQgPSAwOwogICAg
IGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7CkBAIC02NjUsNyArNjY2LDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXVhZCkKICAgICBpZiAoYmFja2dyb3VuZFRleHR1cmUpIHsKICAgICAg
ICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5z
aXplKCkpOwogICAgICAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgbG9jayhtX3Jlc291
cmNlUHJvdmlkZXIsIGJhY2tncm91bmRUZXh0dXJlLT5pZCgpKTsKLSAgICAgICAgY29weVRleHR1
cmVUb0ZyYW1lYnVmZmVyKGxvY2sudGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgp
LCByZW5kZXJNYXRyaXgpOworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZnJhbWUs
IGxvY2sudGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCByZW5kZXJNYXRyaXgp
OwogICAgIH0KIAogICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwpAQCAtNzUyLDExICs3NTMsMTEg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKICAgICBGbG9hdFF1YWQgc3VyZmFjZVF1YWQgPSBD
Q01hdGhVdGlsOjptYXBRdWFkKGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKSwgZGV2
aWNlTGF5ZXJFZGdlcy5mbG9hdFF1YWQoKSwgY2xpcHBlZCk7CiAgICAgQVNTRVJUKCFjbGlwcGVk
KTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQocmVuZGVyTWF0cml4LCBxdWFkLT5xdWFkUmVjdCgp
LndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc3Vy
ZmFjZVF1YWQsCisgICAgZHJhd1RleHR1cmVkUXVhZChmcmFtZSwgcmVuZGVyTWF0cml4LCBxdWFk
LT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9w
YWNpdHkoKSwgc3VyZmFjZVF1YWQsCiAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhM
b2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlvbiwgc2hhZGVyUXVhZExvY2F0aW9uKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
U29saWRDb2xvclF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTb2xpZENvbG9yRHJh
d1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgU29saWRDb2xvclByb2dyYW0qIHByb2dyYW0gPSBz
b2xpZENvbG9yUHJvZ3JhbSgpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKQEAgLTc3Miw3ICs3NzMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRy
YXdRdWFkKiBxdWFkKQogCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYo
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIChTa0NvbG9yR2V0Uihj
b2xvcikgLyAyNTUuMCkgKiBhbHBoYSwgKFNrQ29sb3JHZXRHKGNvbG9yKSAvIDI1NS4wKSAqIGFs
cGhhLCAoU2tDb2xvckdldEIoY29sb3IpIC8gMjU1LjApICogYWxwaGEsIGFscGhhKSk7CiAKLSAg
ICBkcmF3VGV4dHVyZWRRdWFkKHRpbGVUcmFuc2Zvcm0sCisgICAgZHJhd1RleHR1cmVkUXVhZChm
cmFtZSwgdGlsZVRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRo
KCksIHRpbGVSZWN0LmhlaWdodCgpLCAxLjAsIEZsb2F0UXVhZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKICAgICAgICAg
ICAgICAgICAgICAgIC0xLCAtMSk7CkBAIC04MDMsNyArODA0LDcgQEAgc3RhdGljIHZvaWQgdGls
ZVVuaWZvcm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1z
KQogICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
ZWRnZUxvY2F0aW9uKCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGls
ZVF1YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1RpbGVRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGlsZURyYXdR
dWFkKiBxdWFkKQogewogICAgIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0ID0gcXVhZC0+cXVhZFZp
c2libGVSZWN0KCk7CiAKQEAgLTgzOSw3ICs4NDAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQogCiAKICAgICBG
bG9hdFF1YWQgbG9jYWxRdWFkOwotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRy
YW5zZm9ybSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KHdpbmRvd01hdHJpeCgpICogcHJvamVj
dGlvbk1hdHJpeCgpICogcXVhZC0+cXVhZFRyYW5zZm9ybSgpKS50bzJkVHJhbnNmb3JtKCk7Cisg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoZnJhbWUud2luZG93TWF0cml4ICogZnJhbWUucHJvamVjdGlvbk1hdHJpeCAq
IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghZGV2aWNl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk1NSwxMCAr
OTU2LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoY29uc3Qg
Q0NUaWxlRHJhd1F1YWQqIHF1YWQpCiAgICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0LgogICAg
IGxvY2FsUXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVSZWN0
LmhlaWdodCgpKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+cXVhZFRyYW5zZm9ybSgp
LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBs
b2NhbFF1YWQsIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uLCB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9u
LCB1bmlmb3Jtcy5wb2ludExvY2F0aW9uKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZyYW1lLCBx
dWFkLT5xdWFkVHJhbnNmb3JtKCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgp
LCBxdWFkLT5vcGFjaXR5KCksIGxvY2FsUXVhZCwgdW5pZm9ybXMubWF0cml4TG9jYXRpb24sIHVu
aWZvcm1zLmFscGhhTG9jYXRpb24sIHVuaWZvcm1zLnBvaW50TG9jYXRpb24pOwogfQogCi12b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVlZpZGVvUXVhZChjb25zdCBDQ1lVVlZpZGVv
RHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVlZpZGVv
UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1lVVlZpZGVvRHJhd1F1YWQqIHF1YWQp
CiB7CiAgICAgY29uc3QgVmlkZW9ZVVZQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9ZVVZQcm9ncmFt
KCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CkBAIC0x
MDE1LDE0ICsxMDE2LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlk
ZW9RdWFkKGNvbnN0IENDWVVWVmlkZW9EcmF3UXVhZCogcXVhZCkKICAgICBJbnRSZWN0IHF1YWRS
ZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKICAgICBxdWFkVHJhbnNmb3JtLnRyYW5zbGF0ZShxdWFk
UmVjdC54KCkgKyBxdWFkUmVjdC53aWR0aCgpIC8gMi4wLCBxdWFkUmVjdC55KCkgKyBxdWFkUmVj
dC5oZWlnaHQoKSAvIDIuMCk7CiAKLSAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWRUcmFuc2Zvcm0s
IHF1YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIEZs
b2F0UXVhZCgpLAorICAgIGRyYXdUZXh0dXJlZFF1YWQoZnJhbWUsIHF1YWRUcmFuc2Zvcm0sIHF1
YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIEZsb2F0
UXVhZCgpLAogICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
IC0xKTsKIAogICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdT
dHJlYW1WaWRlb1F1YWQoY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1WaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiBm
cmFtZSwgY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIHN0YXRpYyBm
bG9hdCBnbE1hdHJpeFsxNl07CiAKQEAgLTEwNDMsNyArMTA0NCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVmlkZW9RdWFkKGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3
UXVhZCogcXVhCiAgICAgSW50UmVjdCBxdWFkUmVjdCA9IHF1YWQtPnF1YWRSZWN0KCk7CiAgICAg
cXVhZFRyYW5zZm9ybS50cmFuc2xhdGUocXVhZFJlY3QueCgpICsgcXVhZFJlY3Qud2lkdGgoKSAv
IDIuMCwgcXVhZFJlY3QueSgpICsgcXVhZFJlY3QuaGVpZ2h0KCkgLyAyLjApOwogCi0gICAgZHJh
d1RleHR1cmVkUXVhZChxdWFkVHJhbnNmb3JtLCBxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5o
ZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICBkcmF3
VGV4dHVyZWRRdWFkKGZyYW1lLCBxdWFkVHJhbnNmb3JtLCBxdWFkUmVjdC53aWR0aCgpLCBxdWFk
UmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKICAg
ICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9u
KCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLCAtMSk7CiB9CiAK
QEAgLTEwNzEsNyArMTA3Miw3IEBAIHN0cnVjdCBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJp
bmRpbmcgOiBUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgewogICAgIGludCB0ZXhUcmFuc2Zvcm1Mb2Nh
dGlvbjsKIH07CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQo
Y29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1RleHR1cmVRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGV4dHVyZURy
YXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAK
QEAgLTExMTIsMTMgKzExMTMsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdU
ZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkKICAgICBJbnRSZWN0IHF1
YWRSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKICAgICBxdWFkVHJhbnNmb3JtLnRyYW5zbGF0ZShx
dWFkUmVjdC54KCkgKyBxdWFkUmVjdC53aWR0aCgpIC8gMi4wLCBxdWFkUmVjdC55KCkgKyBxdWFk
UmVjdC5oZWlnaHQoKSAvIDIuMCk7CiAKLSAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWRUcmFuc2Zv
cm0sIHF1YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCks
IHNoYXJlZEdlb21ldHJ5UXVhZCgpLCBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLCBiaW5kaW5nLmFs
cGhhTG9jYXRpb24sIC0xKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGZyYW1lLCBxdWFkVHJhbnNm
b3JtLCBxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgp
LCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwgYmluZGluZy5h
bHBoYUxvY2F0aW9uLCAtMSk7CiAKICAgICBpZiAoIXF1YWQtPnByZW11bHRpcGxpZWRBbHBoYSgp
KQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFjZVF1YWQoY29uc3Qg
Q0NJT1N1cmZhY2VEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3SU9TdXJmYWNlUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0lPU3VyZmFjZURy
YXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAg
ICAgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CkBAIC0xMTM4LDE0
ICsxMTM5LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVh
ZChjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBxdWFkKQogICAgIEludFJlY3QgcXVhZFJlY3Qg
PSBxdWFkLT5xdWFkUmVjdCgpOwogICAgIHF1YWRUcmFuc2Zvcm0udHJhbnNsYXRlKHF1YWRSZWN0
LngoKSArIHF1YWRSZWN0LndpZHRoKCkgLyAyLjAsIHF1YWRSZWN0LnkoKSArIHF1YWRSZWN0Lmhl
aWdodCgpIC8gMi4wKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZFRyYW5zZm9ybSwgcXVh
ZFJlY3Qud2lkdGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVk
R2VvbWV0cnlRdWFkKCksIGJpbmRpbmcubWF0cml4TG9jYXRpb24sIGJpbmRpbmcuYWxwaGFMb2Nh
dGlvbiwgLTEpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoZnJhbWUsIHF1YWRUcmFuc2Zvcm0sIHF1
YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJl
ZEdlb21ldHJ5UXVhZCgpLCBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLCBiaW5kaW5nLmFscGhhTG9j
YXRpb24sIC0xKTsKIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
RXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCiB7Ci0gICAgbV9jdXJyZW50
RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiB9CkBA
IC0xMTcwLDcgKzExNzAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJp
eChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbgogICAgIGZsYXR0ZW5l
ZFsxNV0gPSBtLm00NCgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVkUXVhZChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCwKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKERyYXdpbmdGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBp
bnQgYWxwaGFMb2NhdGlvbiwgaW50IHF1YWRMb2NhdGlvbikKIHsKQEAgLTExODIsNyArMTE4Miw3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3CiAgICAgcmVuZGVyTWF0cml4LnNjYWxlM2Qod2lk
dGgsIGhlaWdodCwgMSk7CiAKICAgICAvLyBBcHBseSB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmVm
b3JlIHNlbmRpbmcgdGhlIHRyYW5zZm9ybSBvdmVyIHRvIHRoZSBzaGFkZXIuCi0gICAgdG9HTE1h
dHJpeCgmZ2xNYXRyaXhbMF0sIG1fcHJvamVjdGlvbk1hdHJpeCAqIHJlbmRlck1hdHJpeCk7Cisg
ICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiByZW5k
ZXJNYXRyaXgpOwogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4
NGZ2KG1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7CiAKQEAgLTEyMDUs
NyArMTIwNSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFk
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3CiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoaW50IHRleHR1cmVJZCwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d01hdHJpeCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVi
dWZmZXIoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCkKIHsKICAg
ICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbSogcHJvZ3JhbSA9IHJlbmRlclBhc3NQcm9ncmFtKCk7
CiAKQEAgLTEyMTgsNyArMTIxOCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5
VGV4dHVyZVRvRnJhbWVidWZmZXIoaW50IHRleHR1cmVJZCwgY29uc3QgSW50U2l6CiAKICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7
CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQo
ZHJhd01hdHJpeCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgc2hhcmVkR2Vv
bWV0cnlRdWFkKCksCisgICAgZHJhd1RleHR1cmVkUXVhZChmcmFtZSwgZHJhd01hdHJpeCwgYm91
bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtMSk7CkBAIC0xMzkwLDIwICsxMzkwLDIwIEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29wZWRUZXh0
dXJlKiB0ZXh0dXJlLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcykKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNz
KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKIHsK
LSAgICByZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1cnJl
bnRUZXh0dXJlOworICAgIHJldHVybiBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQ
YXNzICYmICFmcmFtZS5jdXJyZW50VGV4dHVyZTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQorYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogewotICAgIG1fY3VycmVudFJlbmRl
clBhc3MgPSByZW5kZXJQYXNzOwotICAgIG1fY3VycmVudFRleHR1cmUgPSAwOworICAgIGZyYW1l
LmN1cnJlbnRSZW5kZXJQYXNzID0gcmVuZGVyUGFzczsKKyAgICBmcmFtZS5jdXJyZW50VGV4dHVy
ZSA9IDA7CiAKLSAgICBpZiAocmVuZGVyUGFzcyA9PSBtX2RlZmF1bHRSZW5kZXJQYXNzKSB7Ci0g
ICAgICAgIG1fY3VycmVudEZyYW1lYnVmZmVyTG9jay5jbGVhcigpOworICAgIGlmIChyZW5kZXJQ
YXNzID09IGZyYW1lLnJvb3RSZW5kZXJQYXNzKSB7CisgICAgICAgIGZyYW1lLmN1cnJlbnRGcmFt
ZWJ1ZmZlckxvY2suY2xlYXIoKTsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0gICAg
ICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QocmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRS
ZWN0KCksIHRydWUpOworICAgICAgICBzZXREcmF3RnJhbWVidWZmZXJSZWN0KGZyYW1lLCByZW5k
ZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtMTQxNSwyNSArMTQxNSwyNiBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiAg
ICAgaWYgKCF0ZXh0dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJ
bXBsUG9vbCwgcmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3MpLCByZW5kZXJQYXNzVGV4
dHVyZUZvcm1hdChyZW5kZXJQYXNzKSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VG
cmFtZWJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBiaW5kRnJh
bWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRS
ZWN0KCkpOworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRleHR1
cmUsIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKIH0KIAotYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJl
KiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCitib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBD
Q1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKIHsK
ICAgICBBU1NFUlQodGV4dHVyZS0+aWQoKSk7Ci0gICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IDA7
Ci0gICAgbV9jdXJyZW50VGV4dHVyZSA9IHRleHR1cmU7CisgICAgZnJhbWUuY3VycmVudFJlbmRl
clBhc3MgPSAwOworICAgIGZyYW1lLmN1cnJlbnRUZXh0dXJlID0gdGV4dHVyZTsKIAotICAgIHJl
dHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgdmlld3BvcnRSZWN0KTsKKyAg
ICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGZyYW1lLCB0ZXh0dXJlLCB2aWV3cG9y
dFJlY3QpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVy
VG9UZXh0dXJlKGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
ZnJhbWVidWZmZXJSZWN0KQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1
ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUq
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKIHsKICAgICBBU1NFUlQo
dGV4dHVyZS0+aWQoKSk7CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJhbWVi
dWZmZXJJZCkpOwotICAgIG1fY3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFkb3B0UHRyKG5ldyBD
Q1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4dHVyZS0+
aWQoKSkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2N1cnJlbnRG
cmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpLCAwKSk7CisgICAgZnJhbWUuY3VycmVudEZyYW1l
YnVmZmVyTG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlKG1f
cmVzb3VyY2VQcm92aWRlciwgdGV4dHVyZS0+aWQoKSkpOworICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZCA9IGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpOworICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApKTsKIAogI2lmICFkZWZp
bmVkICggTkRFQlVHICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CkBAIC0xNDQyLDE2ICsxNDQzLDE2IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoY29uc3QgQ0NTY29wZWRU
ZXh0dXJlKiB0ZXh0CiAgICAgfQogI2VuZGlmCiAKLSAgICBzZXREcmF3RnJhbWVidWZmZXJSZWN0
KGZyYW1lYnVmZmVyUmVjdCwgZmFsc2UpOworICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoZnJh
bWUsIGZyYW1lYnVmZmVyUmVjdCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8v
IFNldHMgdGhlIHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29y
ZGluYXRlIHN5c3RlbSBmb3IgdGhlCiAvLyBzY2lzc29yUmVjdCBoYXMgaXRzIG9yaWdpbiBhdCB0
aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHZpc2libGUgcmVjdC4KLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1JlY3QoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCiB7Ci0gICAgSW50
UmVjdCBmcmFtZWJ1ZmZlck91dHB1dFJlY3QgPSAobV9jdXJyZW50UmVuZGVyUGFzcyA/IG1fY3Vy
cmVudFJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpIDogbV9kZWZhdWx0UmVuZGVy
UGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOworICAgIEludFJlY3QgZnJhbWVidWZmZXJP
dXRwdXRSZWN0ID0gZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVj
dCgpOwogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCkBAIC0xNDYyLDcgKzE0NjMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0U2Npc3NvclRvUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29y
UmVjdCkKICAgICAvLyBvZiB0aGUgR0wgc2Npc3NvciBpcyB0aGUgYm90dG9tIG9mIG91ciBsYXll
ci4KICAgICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2
ZXJzZSBvdXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4KICAgICBpbnQgc2Npc3Nvclk7Ci0gICAg
aWYgKGlzQ3VycmVudFJlbmRlclBhc3MobV9kZWZhdWx0UmVuZGVyUGFzcykpCisgICAgaWYgKGlz
Q3VycmVudFJlbmRlclBhc3MoZnJhbWUsIGZyYW1lLnJvb3RSZW5kZXJQYXNzKSkKICAgICAgICAg
c2Npc3NvclkgPSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3Qu
bWF4WSgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LnkoKSk7CiAgICAgZWxzZQogICAgICAgICBz
Y2lzc29yWSA9IHNjaXNzb3JSZWN0LnkoKSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC55KCk7CkBA
IC0xNDc3LDE0ICsxNDc4LDE0IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSByYW5nZSBvZiBjb250ZW50IHRo
YXQgZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UuCiAvLyBU
aGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBvcmlnaW4gYXQg
MCwgMCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKIC8vIG9mIHRoZSBkcmF3UmVjdC4KLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3RnJhbWVidWZmZXJSZWN0KGNvbnN0IElu
dFJlY3QmIGRyYXdSZWN0LCBib29sIGZsaXBZKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnNldERyYXdGcmFtZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmVj
dCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpCiB7CiAgICAgaWYgKGZsaXBZKQotICAgICAgICBtX3By
b2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgo
KSwgZHJhd1JlY3QubWF4WSgpLCBkcmF3UmVjdC55KCkpOworICAgICAgICBmcmFtZS5wcm9qZWN0
aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRy
YXdSZWN0Lm1heFkoKSwgZHJhd1JlY3QueSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fcHJvamVj
dGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBk
cmF3UmVjdC55KCksIGRyYXdSZWN0Lm1heFkoKSk7CisgICAgICAgIGZyYW1lLnByb2plY3Rpb25N
YXRyaXggPSBvcnRob01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1Jl
Y3QueSgpLCBkcmF3UmVjdC5tYXhZKCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
dmlld3BvcnQoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKLSAg
ICBtX3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCBkcmF3UmVjdC53aWR0aCgpLCBk
cmF3UmVjdC5oZWlnaHQoKSk7CisgICAgZnJhbWUud2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4
KDAsIDAsIGRyYXdSZWN0LndpZHRoKCksIGRyYXdSZWN0LmhlaWdodCgpKTsKIH0KIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDkwYmQ3NzQzYjlmMWQyZmE4YTYwMTY0
ZGU2MTE4OThkM2FmOGJlZDQuLjgwNzEwYzFlZjM3YTEwM2NhNjExM2VmOTQ0Y2EwZmNjN2VlZTU0
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04MCw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9y
RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9v
bCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QgT1ZFUlJJ
REU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3Qm
LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQ
YXNzSWRIYXNoTWFwJiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIE9WRVJSSURF
OwogCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoKCkgT1ZFUlJJREU7CkBAIC0xMDMsMTAgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOwogCi0gICAgdm9pZCBkcmF3
VGV4dHVyZWRRdWFkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVy
TWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExv
Y2F0aW9uKTsKLSAgICB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQgdGV4dHVyZUlk
LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdNYXRyaXgpOwogICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92
aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VQcm92aWRlcjsgfQogCiBwcm90ZWN0ZWQ6
CkBAIC0xMTksMzYgKzExNSw1OCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZWxlYXNlUmVuZGVy
UGFzc1RleHR1cmVzKCk7CiAKIHByaXZhdGU6CisgICAgc3RydWN0IERyYXdpbmdGcmFtZSB7Cisg
ICAgICAgIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCogcmVuZGVyUGFzc2VzQnlJZDsKKyAg
ICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzczsKKyAgICAgICAgY29uc3Qg
Q0NSZW5kZXJQYXNzKiBjdXJyZW50UmVuZGVyUGFzczsKKyAgICAgICAgY29uc3QgQ0NTY29wZWRU
ZXh0dXJlKiBjdXJyZW50VGV4dHVyZTsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkTG9ja1Jlc291
cmNlRm9yV3JpdGU+IGN1cnJlbnRGcmFtZWJ1ZmZlckxvY2s7CisKKyAgICAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHdpbmRvd01hdHJpeDsKKworICAgICAgICBEcmF3aW5n
RnJhbWUoKQorICAgICAgICAgICAgOiByb290UmVuZGVyUGFzcygwKQorICAgICAgICAgICAgLCBj
dXJyZW50UmVuZGVyUGFzcygwKQorICAgICAgICAgICAgLCBjdXJyZW50VGV4dHVyZSgwKQorICAg
ICAgICB7IH0KKyAgICB9OworCiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHZvaWQgYmVnaW5E
cmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyk7Ci0gICAgdm9p
ZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZy
YW1lYnVmZmVyRGFtYWdlUmVjdCk7CisgICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZSgpOworICAg
IHZvaWQgZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwg
Y29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogICAgIHZvaWQgZmluaXNo
RHJhd2luZ0ZyYW1lKCk7CiAKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqKTsK
LSAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1
YWQqKTsKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkKik7Ci0gICAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5k
RmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7Ci0gICAgdm9pZCBkcmF3UmVuZGVy
UGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdTb2xp
ZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1N0
cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRy
YXdUZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd0lP
U3VyZmFjZVF1YWQoY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1Rp
bGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3WVVWVmlkZW9RdWFk
KGNvbnN0IENDWVVWVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0Zy
YW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQo
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd0RlYnVnQm9yZGVyUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RlYnVnQm9yZGVyRHJh
d1F1YWQqKTsKKyAgICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZHJhd0JhY2tncm91bmRG
aWx0ZXJzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVh
ZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd1NvbGlkQ29sb3JRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDU29saWRDb2xvckRyYXdR
dWFkKik7CisgICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0
IENDU3RyZWFtVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1RleHR1cmVRdWFkKERyYXdp
bmdGcmFtZSYsIGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3SU9TdXJm
YWNlUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKik7CisgICAg
dm9pZCBkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqKTsK
KyAgICB2b2lkIGRyYXdZVVZWaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NZVVZWaWRl
b0RyYXdRdWFkKik7CisKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoRHJhd2luZ0ZyYW1lJiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBt
YXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOworICAg
IHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYsIGludCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd01hdHJpeCk7CiAKLSAgICB2b2lkIHNldFNjaXNzb3JUb1JlY3QoY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgc2V0U2Npc3NvclRvUmVjdChEcmF3aW5nRnJhbWUmLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoY29uc3QgSW50
UmVjdCYsIGJvb2wgZmxpcFkpOworICAgIHZvaWQgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChEcmF3
aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAKICAgICAvLyBUaGUgY3Vy
cmVudCBkcmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5kZXJQYXNzIG9yIFNjb3BlZFRleHR1
cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0
LgotICAgIGJvb2wgdXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKLSAgICBib29s
IHVzZVNjb3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
dmlld3BvcnRSZWN0KTsKLSAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKik7CisgICAgYm9vbCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
UmVuZGVyUGFzcyopOworICAgIGJvb2wgdXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBj
b25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOworICAg
IGJvb2wgaXNDdXJyZW50UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBh
c3MqKTsKIAotICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGNvbnN0IENDU2NvcGVk
VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCBiaW5kRnJh
bWVidWZmZXJUb1RleHR1cmUoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KTsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VS
ZWN0KTsKKyAgICB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJiwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKIApAQCAtMTcyLDkgKzE5MCw2IEBAIHByaXZhdGU6CiAKICAgICBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwogCi0gICAgY29uc3QgQ0NSZW5kZXJQYXNz
KiBtX2N1cnJlbnRSZW5kZXJQYXNzOwotICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogbV9jdXJy
ZW50VGV4dHVyZTsKLSAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gbV9j
dXJyZW50RnJhbWVidWZmZXJMb2NrOwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZDsKIAogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CkBA
IC0yNjMsOCArMjc4LDYgQEAgcHJpdmF0ZToKIAogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0QqIG1fY29udGV4dDsKIAotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9kZWZhdWx0UmVu
ZGVyUGFzczsKLQogICAgIGJvb2wgbV9pc1ZpZXdwb3J0Q2hhbmdlZDsKICAgICBib29sIG1faXNG
cmFtZWJ1ZmZlckRpc2NhcmRlZDsKICAgICBib29sIG1faXNVc2luZ0JpbmRVbmlmb3JtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAxY2M2ZDYyOTM3YjY4YWMw
ZGFjNzMzY2Y3YmFkMmY2MWY3MDYyMjgzLi5hMGZmNjU3YWMzMGQwNjJmMDI5NjJhMGYzZWI5ZDdh
N2NjNTBhNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MjkzLDYgKzI5Myw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVy
UGFzc2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAKICAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9IHJl
bmRlclN1cmZhY2VMYXllci0+aWQoKTsKICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFz
cyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7Cisg
ICAgICAgIHBhc3MtPnNldEZpbHRlcnMocmVuZGVyU3VyZmFjZUxheWVyLT5maWx0ZXJzKCkpOwor
ICAgICAgICBwYXNzLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhyZW5kZXJTdXJmYWNlTGF5ZXItPmJh
Y2tncm91bmRGaWx0ZXJzKCkpOworCiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5kZXJT
dXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmFwcGVuZChw
YXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5hZGQocmVuZGVyUGFz
c0lkLCBwYXNzLnJlbGVhc2UoKSk7CkBAIC01NDksNyArNTUyLDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgLy8gUmVu
ZGVyV2lkZ2V0LgogICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVu
dFRpbWUoKSk7CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdGcmFtZShmcmFtZS5yZW5kZXJQ
YXNzZXMsIG1fcm9vdFNjaXNzb3JSZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdGcmFt
ZShmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQsIG1fcm9vdFNjaXNz
b3JSZWN0KTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVy
UGFzc2VzLnNpemUoKTsgaSsrKQogICAgICAgICBmcmFtZS5yZW5kZXJQYXNzZXNbaV0tPnRhcmdl
dFN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5kaWREcmF3RGFtYWdlZEFyZWEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmgKaW5kZXggODE2NDgxYzk3MzY1OTJkYjgyNDNkNzAyYmMzMTIxYmY2MzJi
NTM4ZS4uNzE1ODIxMjhjNmE2NTNjNjc0MjMwMWE5YmUyOGM0NDA0N2E3MTkxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFk
LmgiCiAjaW5jbHVkZSAiY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC02OCw2ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAg
Ly8gVGhpcyBkZW5vdGVzIHRoZSBib3VuZHMgaW4gcGh5c2ljYWwgcGl4ZWxzIG9mIHRoZSBvdXRw
dXQgZ2VuZXJhdGVkIGJ5IHRoaXMgUmVuZGVyUGFzcy4KICAgICBjb25zdCBJbnRSZWN0JiBmcmFt
ZWJ1ZmZlck91dHB1dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lYnVmZmVyT3V0cHV0UmVj
dDsgfQogCisgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJz
OyB9CisKKyAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRG
aWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQorICAgIHZvaWQg
c2V0QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKSB7IG1fYmFja2dyb3VuZEZpbHRlcnMgPSBmaWx0ZXJzOyB9CisKICAgICBib29sIGhh
c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kOyB9CiAgICAgdm9pZCBzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0
cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRyYW5zcGFyZW50OyB9
CiAKQEAgLTgzLDYgKzkwLDggQEAgcHJvdGVjdGVkOgogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OwogICAgIGJvb2wgbV9oYXNUcmFu
c3BhcmVudEJhY2tncm91bmQ7CiAgICAgYm9vbCBtX2hhc09jY2x1c2lvbkZyb21PdXRzaWRlVGFy
Z2V0U3VyZmFjZTsKKyAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwor
ICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogfTsK
IAogdHlwZWRlZiBWZWN0b3I8Q0NSZW5kZXJQYXNzKj4gQ0NSZW5kZXJQYXNzTGlzdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzc0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCAyZDc0YTIyNzgwM2ZlNGFm
YWU5MWZjM2NiMTUyZjcxZjM5NzYzYThiLi44ZjUxYjk0MDcwNDlmN2QwOTc4ZDcwMDVmMDYyM2E3
ZDE1ZGRmODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCkBA
IC0zMSwxOCArMzEsMTYgQEAgdXNpbmcgV2ViS2l0OjpXZWJDb21wb3NpdG9yUXVhZDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1Jl
bmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50
IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycywgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlk
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKK1Bhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29u
c3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGlj
YSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwg
Y29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJl
Y3QsIHJlbmRlclBhc3NJZCwgaXNSZXBsaWNhLCBkcmF3VHJhbnNmb3JtLCBmaWx0ZXJzLCBiYWNr
Z3JvdW5kRmlsdGVycywgbWFza1Jlc291cmNlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZy
YW1lKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFy
ZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCByZW5kZXJQYXNzSWQsIGlzUmVwbGljYSwgZHJhd1RyYW5z
Zm9ybSwgbWFza1Jlc291cmNlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9
CiAKLUNDUmVuZGVyUGFzc0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJL
aXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3Qg
SW50UmVjdCYgcXVhZFJlY3QsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBtYXNrUmVzb3VyY2VJZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2lu
Y2VMYXN0RnJhbWUpCitDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQo
Y29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVw
bGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKICAgICA6IFdlYkNvbXBvc2l0
b3JRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgV2ViQ29tcG9zaXRvclF1YWQ6OlJlbmRlclBhc3MsIHF1
YWRSZWN0KQogICAgICwgbV9yZW5kZXJQYXNzSWQocmVuZGVyUGFzc0lkKQogICAgICwgbV9pc1Jl
cGxpY2EoaXNSZXBsaWNhKQogICAgICwgbV9kcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pCi0g
ICAgLCBtX2ZpbHRlcnMoZmlsdGVycykKLSAgICAsIG1fYmFja2dyb3VuZEZpbHRlcnMoYmFja2dy
b3VuZEZpbHRlcnMpCiAgICAgLCBtX21hc2tSZXNvdXJjZUlkKG1hc2tSZXNvdXJjZUlkKQogICAg
ICwgbV9jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZShjb250ZW50c0NoYW5nZWRTaW5jZUxh
c3RGcmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCmluZGV4IDZm
Mzk5YmU2N2Y4NjUyOTc4NzU2ZDY1YmYxYjc0ODZhMmZiMmU4NzkuLmFmZjhkYjZkZWI0OTJiZTZm
ZDI0ZjMwYzgwNWJjOTZkNWYwM2E0YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJh
d1F1YWQuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkNvbXBvc2l0b3JRdWFkLmg+Ci0jaW5jbHVkZSA8
cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC0zOSw3
ICszOCw3IEBAIGNsYXNzIENDUmVuZGVyUGFzczsKIGNsYXNzIENDUmVuZGVyUGFzc0RyYXdRdWFk
IDogcHVibGljIFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDUmVuZGVyUGFzc0RyYXdRdWFkKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9z
aXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBi
b29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNv
bnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5n
ZWRTaW5jZUxhc3RGcmFtZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJh
d1F1YWQ+IGNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lKTsKIAogICAgIGludCByZW5kZXJQYXNzSWQoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlclBhc3NJZDsgfQogICAgIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gbV9p
c1JlcGxpY2E7IH0KQEAgLTQ5LDE4ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHdlIHNob3VsZCBkcmF3IHRoZSBSZW5kZXJQYXNzIHdp
dGggdGhlIHF1YWRUcmFuc2Zvcm0uCiAgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsg
fQogCi0gICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZp
bHRlcnM7IH0KLQogICAgIHN0YXRpYyBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogbWF0ZXJp
YWxDYXN0KGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclF1YWQqKTsKIHByaXZhdGU6Ci0gICAg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGludCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNh
LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQg
bWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZy
YW1lKTsKKyAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0
b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgaW50IHJlbmRlclBhc3NJZCwgYm9v
bCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBDQ1Jl
c291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAogICAgIGludCBtX3JlbmRlclBhc3NJ
ZDsKICAgICBib29sIG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBt
X2ZpbHRlcnM7Ci0gICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZp
bHRlcnM7CiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1fbWFza1Jlc291cmNl
SWQ7CiAgICAgSW50UmVjdCBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDk1ZWYwYjljMjI2MjUwNDJmNDAzNDU3
MDUzYjg5ZTEwYjYzNmRlZTMuLjUwNjdiOWVmMTJkNDJkOGUwMDNmZDQ5NjUwYmRjNTYxMWNjN2Zj
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMjExLDEwICsyMTEsNyBA
QCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkU2luayYgcXVhZExpc3Qs
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRy
YXdUcmFuc2Zvcm0gPSBmb3JSZXBsaWNhID8gbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA6IG1fZHJh
d1RyYW5zZm9ybTsKICAgICBJbnRSZWN0IGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lID0g
Y29udGVudHNDaGFuZ2VkKCkgPyBtX2NvbnRlbnRSZWN0IDogSW50UmVjdCgpOwogCi0gICAgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzID0gbV9vd25pbmdMYXllci0+
ZmlsdGVycygpOwotICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMgPSBtX293bmluZ0xheWVyLT5iYWNrZ3JvdW5kRmlsdGVycygpOwotCi0gICAg
cXVhZExpc3QuYXBwZW5kKENDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0
YXRlLCBjb250ZW50UmVjdCgpLCByZW5kZXJQYXNzSWQsIGZvclJlcGxpY2EsIGRyYXdUcmFuc2Zv
cm0sIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrUmVzb3VyY2VJZCwgY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NSZW5kZXJQYXNz
RHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRlclBh
c3NJZCwgZm9yUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgbWFza1Jlc291cmNlSWQsIGNvbnRlbnRz
Q2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaAppbmRleCA5
Mzk3ODcxNzc1N2FlNDE1Y2E0MjIxMTAyYmE5Mjk5MzQ1MGJjY2FmLi45MDgwNTY0YzBiNTEzNjYy
M2JiMWNhZDIyZDdmNTY4YjQyNTgxNWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCkBAIC03NCwxMyAr
NzQsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0Q2hhbmdlZCgpIHsg
fQogCi0gICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlv
bk1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvamVjdGlvbk1hdHJpeDsgfQotICAgIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdpbmRvd01hdHJpeCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2luZG93TWF0cml4OyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVy
UGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYpIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWUoY29uc3Qg
Q0NSZW5kZXJQYXNzTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29u
c3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJl
Y3QpID0gMDsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdmly
dHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKQEAgLTEwNSw4ICsxMDIsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgfQogCiAgICAgQ0NSZW5kZXJlckNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKaW5kZXggZTY0MTU2YmQ2MzM0NjBiZDlmOWNiZTdiMzQ2NjdjNDBjMWY0MjM1Ny4uYzdhNWM1
MzUzODFhY2U1ZGNhZmY3YzM1MTRmZmNjMWEzYzQ1YzhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAg
LTM1NzcsMTIgKzM1NzcsMTIgQEAgc3RydWN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIHsKIAogY2xhc3MgQ0NUZXN0UmVu
ZGVyUGFzczogcHVibGljIENDUmVuZGVyUGFzcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNl
LCBpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Rlc3RSZW5kZXJQYXNzKHRhcmdldFN1
cmZhY2UsIGlkKSk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0
ZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIGludCBpZCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IENDVGVzdFJlbmRlclBhc3MocmVuZGVyU3VyZmFjZSwgaWQpKTsgfQogCiAgICAgdm9p
ZCBhcHBlbmRRdWFkKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCkgeyBtX3F1YWRMaXN0LmFw
cGVuZChxdWFkKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NUZXN0UmVuZGVyUGFzcyhDQ1JlbmRl
clN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3ModGFyZ2V0U3Vy
ZmFjZSwgaWQpIHsgfQorICAgIENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlLCBpbnQgaWQpIDogQ0NSZW5kZXJQYXNzKHJlbmRlclN1cmZhY2UsIGlkKSB7IH0K
IH07CiAKIGNsYXNzIENDVGVzdFJlbmRlcmVyIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1
bSwgcHVibGljIENDUmVuZGVyZXJDbGllbnQgewpAQCAtMzY5OCw3ICszNjk4LDcgQEAgc3RhdGlj
IHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3JpcHQs
IFJlbmRlclBhc3NSZW1vdmEKIAogICAgICAgICAgICAgICAgIEludFJlY3QgcXVhZFJlY3QgPSBJ
bnRSZWN0KDAsIDAsIDEsIDEpOwogICAgICAgICAgICAgICAgIEludFJlY3QgY29udGVudHNDaGFu
Z2VkUmVjdCA9IGNvbnRlbnRzQ2hhbmdlZCA/IHF1YWRSZWN0IDogSW50UmVjdCgpOwotICAgICAg
ICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVuZGVyUGFz
c0RyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBxdWFkUmVj
dCwgbmV3UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBP
d25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6
Y3JlYXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVhZFJlY3QsIG5ld1JlbmRl
clBhc3NJZCwgaXNSZXBsaWNhLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEs
IGNvbnRlbnRzQ2hhbmdlZFJlY3QpOwogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENDVGVz
dFJlbmRlclBhc3MqPihyZW5kZXJQYXNzLmdldCgpKS0+YXBwZW5kUXVhZChxdWFkLnJlbGVhc2Uo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGYx
ZDhkYzFkMDNiZmU4MjAwZDVhYzNkMTUzMjkyYTQ2ODZlNTA5NDAuLmQ4NjExNjRmNjk3MzJkYzkw
YTI3YWNjNDJmYTIwOTc4YTY0ZTBlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODAsOCAr
ODAsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlZmF1bHRNZW1vcnlBbGxvY2F0aW9uTGltaXQo
KSkKICAgICB7CiAgICAgICAgIG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgICAgIG1fcm9vdFJlbmRlclBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLCBtX3Jvb3RMYXllci0+aWQoKSk7Ci0gICAgICAgIG1fcmVuZGVy
UGFzc2VzLmFwcGVuZChtX3Jvb3RSZW5kZXJQYXNzLmdldCgpKTsKKyAgICAgICAgT3duUHRyPEND
UmVuZGVyUGFzcz4gcm9vdFJlbmRlclBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLCBtX3Jvb3RMYXllci0+aWQoKSk7CisgICAgICAgIG1fcmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIuYXBwZW5kKHJvb3RSZW5kZXJQYXNzLmdldCgpKTsKKyAgICAg
ICAgbV9yZW5kZXJQYXNzZXMuc2V0KG1fcm9vdExheWVyLT5pZCgpLCByb290UmVuZGVyUGFzcy5y
ZWxlYXNlKCkpOwogICAgIH0KIAogICAgIC8vIENDUmVuZGVyZXJDbGllbnQgbWV0aG9kcy4KQEAg
LTk2LDggKzk3LDkgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgYWRkZWQgZm9yIHRlc3QuCiAg
ICAgaW50IHNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
RnVsbFJvb3RMYXllckRhbWFnZUNvdW50OyB9CiAKLSAgICBDQ1JlbmRlclBhc3MqIHJvb3RSZW5k
ZXJQYXNzKCkgeyByZXR1cm4gbV9yb290UmVuZGVyUGFzcy5nZXQoKTsgfQotICAgIGNvbnN0IEND
UmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3NlcygpIHsgcmV0dXJuIG1fcmVuZGVyUGFzc2VzOyB9
CisgICAgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcygpIHsgcmV0dXJuIG1fcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIubGFzdCgpOyB9CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3Nlc0luRHJh
d09yZGVyOyB9CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXMo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NlczsgfQogCiAgICAgc2l6ZV90IG1lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlczsgfQogCkBAIC0xMDUsOCArMTA3LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zZXRG
dWxsUm9vdExheWVyRGFtYWdlQ291bnQ7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIG1f
aW1wbFRocmVhZDsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVyOwotICAgIE93
blB0cjxDQ1JlbmRlclBhc3M+IG1fcm9vdFJlbmRlclBhc3M7Ci0gICAgQ0NSZW5kZXJQYXNzTGlz
dCBtX3JlbmRlclBhc3NlczsKKyAgICBDQ1JlbmRlclBhc3NMaXN0IG1fcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXI7CisgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwIG1fcmVuZGVyUGFzc2VzOwogICAg
IHNpemVfdCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogfTsKIApAQCAtMjIyLDcgKzIy
NCw3IEBAIFRFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBEaXNjYXJkZWRCYWNrYnVm
ZmVySXNSZWNyZWF0ZWRGb3JTY29wZUR1cmF0aW9uCiAgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0Ns
aWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CiAKICAgICBtX2xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5zZXRWaXNpYmxlKHRydWUpOwotICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVt
LmRyYXdGcmFtZShtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzKCksIEZsb2F0UmVjdCgpKTsKKyAg
ICBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobV9tb2NrQ2xpZW50LnJlbmRlclBh
c3Nlc0luRHJhd09yZGVyKCksIG1fbW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0
KCkpOwogICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVm
ZmVyRGlzY2FyZGVkKCkpOwogCiAgICAgc3dhcEJ1ZmZlcnMoKTsKQEAgLTIzNyw3ICsyMzksNyBA
QCBURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgRnJhbWVidWZmZXJEaXNjYXJkZWRB
ZnRlclJlYWRiYWNrV2hlbk5vdFZpc2libAogICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQu
c2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOwogCiAgICAgY2hhciBwaXhlbHNbNF07Ci0g
ICAgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0uZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5kZXJQ
YXNzZXMoKSwgRmxvYXRSZWN0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdG
cmFtZShtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbV9tb2NrQ2xpZW50
LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CiAKICAgICBtX2xheWVy
UmVuZGVyZXJDaHJvbWl1bS5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIEludFJlY3QoMCwg
MCwgMSwgMSkpOwpAQCAtNDE4LDcgKzQyMCw3IEBAIFRFU1QoTGF5ZXJSZW5kZXJlckNocm9taXVt
VGVzdDIsIG9wYXF1ZUJhY2tncm91bmQpCiAKICAgICBFWFBFQ1RfVFJVRShsYXllclJlbmRlcmVy
Q2hyb21pdW0uaW5pdGlhbGl6ZSgpKTsKIAotICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3
RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0KCkpOworICAgIGxheWVy
UmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXNJbkRyYXdP
cmRlcigpLCBtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7CiAKICAgICAv
LyBPbiBERUJVRyBidWlsZHMsIHJlbmRlciBwYXNzZXMgd2l0aCBvcGFxdWUgYmFja2dyb3VuZCBj
bGVhciB0byBibHVlIHRvCiAgICAgLy8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3Qg
ZHJhd24gb24gdGhlIHNjcmVlbi4KQEAgLTQ0MSw3ICs0NDMsNyBAQCBURVNUKExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QyLCB0cmFuc3BhcmVudEJhY2tncm91bmQpCiAKICAgICBFWFBFQ1RfVFJV
RShsYXllclJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpKTsKIAotICAgIGxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0
KCkpOworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5k
ZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBGbG9hdFJl
Y3QoKSk7CiAKICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC0+Y2xlYXJDb3VudCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154435</attachid>
            <date>2012-07-25 13:48:49 -0700</date>
            <delta_ts>2012-07-25 15:08:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-91885-20120725164839.patch</filename>
            <type>text/plain</type>
            <size>29178</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODljMDUxZmJmMzIxMWEy
NDY3YzdkNTU1MmMwYTY5NjhlYmU3YmUxZi4uOThlZjUwNDQyOGZhODQ2ZTg2ZGM4ODhmODNmZTQx
NDE3NzU0Mzc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBXZWJGaWx0ZXJPcGVyYXRpb25zIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkIHRvIFJlbmRlclBh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgIFdlIG1v
dmUgdGhlIGZpbHRlciBvcGVyYXRpb25zIHRvIENDUmVuZGVyUGFzcyB0byBhdm9pZCBoYXZpbmcK
KyAgICAgICAgdmFyaWFibGUtbGVuZ3RoIGRhdGEgaW4gYSBXZWJDb21wb3NpdG9yUXVhZCBpbiBv
cmRlciB0byBzZXJpYWxpemUsCisgICAgICAgIGFuZCBhbHNvIHRvIGF2b2lkIHJlcXVpcmluZyBh
IHZpcnR1YWwgZGVzdHJ1Y3RvciBmb3IgdGhlIHF1YWQKKyAgICAgICAgY2xhc3Nlcy4KKworICAg
ICAgICBUaGUgZHJhd0ZyYW1lIG1ldGhvZCBub3cgdGFrZXMgYSBDQ1JlbmRlclBhc3NJZEhhc2hN
YXAgaW4gb3JkZXIKKyAgICAgICAgdG8gY29ubmVjdCBSZW5kZXJQYXNzIHF1YWRzIHRvIHRoZWly
IHNvdXJjZSBSZW5kZXJQYXNzLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNp
ZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJQYXNzOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKENDUmVuZGVyUGFzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmJhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6c2V0QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5o
OgorICAgICAgICAoQ0NSZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChDQ1JlbmRlcmVyKToKKwog
MjAxMi0wNy0yNCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIFR1cm4gdGhlIGRlYnVnIEhVRCBpbnRvIGEgbGF5ZXIgc28gdGhhdCBpdCBj
YW4gYmUgZHJhd24gYXMgYSBXZWJDb21wb3NpdG9yUXVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCBkYWExNWMwOTMwMDc0MGRkY2Q5OGJmNmVlYzAyNjU3NzI4ODQzYjc1Li5kOGI4NjVi
MDMxNTEzNzQzZjMwYjNjY2RmNjYxMTZlODYyMzBiMTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA3LTI1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBXZWJGaWx0ZXJPcGVyYXRp
b25zIGZyb20gUmVuZGVyUGFzc0RyYXdRdWFkIHRvIFJlbmRlclBhc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3Qu
Y3BwOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OkZha2VDQ1JlbmRlcmVyQ2xpZW50
KToKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50Ojpyb290UmVuZGVyUGFzcyk6CisgICAg
ICAgIChGYWtlQ0NSZW5kZXJlckNsaWVudDo6cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIpOgorICAg
ICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OnJlbmRlclBhc3Nlcyk6CisgICAgICAgIChGYWtl
Q0NSZW5kZXJlckNsaWVudCk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAoVEVTVCk6CisK
IDIwMTItMDctMjQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBUdXJuIHRoZSBkZWJ1ZyBIVUQgaW50byBhIGxheWVyIHNvIHRoYXQgaXQg
Y2FuIGJlIGRyYXduIGFzIGEgV2ViQ29tcG9zaXRvclF1YWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IDEyODFkODA0OGI1YTcyOGNhN2Y2YTAyYzBhZGFiMjgwOWYy
ZTNjYWUuLjY4MGIxMGVkYWZlNTY4YTY4NGI0YTRkZjNkOTkwMjdlYTY5N2NkMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzM0LDE0ICszMzQsMTQgQEAgR0Mz
RGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25z
dCBDQ1JlbmRlclBhc3MqKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVu
ZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXIpCiB7Ci0gICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFz
cyo+IHBhc3Nlc0luRnJhbWU7CisgICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFzcyo+
IHJlbmRlclBhc3Nlc0luRnJhbWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQ
YXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkKLSAgICAgICAgcGFzc2VzSW5GcmFtZS5zZXQo
cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVy
W2ldKTsKKyAgICAgICAgcmVuZGVyUGFzc2VzSW5GcmFtZS5zZXQocmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldKTsKIAogICAgIFZlY3Rv
cjxpbnQ+IHBhc3Nlc1RvRGVsZXRlOwogICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4
dHVyZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwogICAgIGZvciAocGFzc0l0ZXJh
dG9yID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVu
ZGVyUGFzc1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRvcikgewotICAgICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0
ZXJhdG9yLT5maXJzdCk7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0lu
RnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKICAg
ICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewogICAgICAgICAgICAgcGFzc2VzVG9EZWxl
dGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwogICAgICAgICAgICAgY29udGludWU7CkBA
IC0zNzQsMjkgKzM3NCwzNCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0CiAgICAgcmV0dXJuIHRleHR1
cmUgJiYgdGV4dHVyZS0+aWQoKSAmJiB0ZXh0dXJlLT5pc0NvbXBsZXRlKCk7CiB9CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYg
cmVuZGVyUGFzc2VzLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVy
UGFzc2VzQnlJZCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgY29u
c3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcyA9IHJlbmRlclBhc3Nlcy5sYXN0KCk7Ci0g
ICAgYmVnaW5EcmF3aW5nRnJhbWUocm9vdFJlbmRlclBhc3MpOworICAgIGNvbnN0IENDUmVuZGVy
UGFzcyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7Cisg
ICAgQVNTRVJUKHJvb3RSZW5kZXJQYXNzKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyog
cmVuZGVyUGFzcyA9IHJlbmRlclBhc3Nlc1tpXTsKKyAgICBtX2RlZmF1bHRSZW5kZXJQYXNzID0g
cm9vdFJlbmRlclBhc3M7CisgICAgbV9yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5
SWQ7CisKKyAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXTsK
IAogICAgICAgICBGbG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSA9IHJl
bmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVu
dFN1cmZhY2Uocm9vdFNjaXNzb3JSZWN0KTsKICAgICAgICAgZHJhd1JlbmRlclBhc3MocmVuZGVy
UGFzcywgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk7CiAgICAgfQogCiAgICAgZmlu
aXNoRHJhd2luZ0ZyYW1lKCk7CisKKyAgICBtX2RlZmF1bHRSZW5kZXJQYXNzID0gMDsKKyAgICBt
X3JlbmRlclBhc3Nlc0J5SWQgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
YmVnaW5EcmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcykKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgpCiB7CiAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVidWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNy
ZWF0ZWQgb24gZmlyc3QgdXNlCiAgICAgZW5zdXJlRnJhbWVidWZmZXIoKTsKIAotICAgIG1fZGVm
YXVsdFJlbmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKLSAgICBBU1NFUlQobV9kZWZhdWx0UmVu
ZGVyUGFzcyk7Ci0KICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTU1Niw3ICs1NjEsNyBAQCBzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5
RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0CiAgICAg
cmV0dXJuIHNvdXJjZTsKIH0KIAotUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZp
Y2VUcmFuc2Zvcm0pCitQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQq
IHF1YWQsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAg
IC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMg
YSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBp
dHMgYmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBA
IC01NzQsNyArNTc5LDcgQEAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEMKIAogICAgIC8vIEZJWE1F
OiBXaGVuIHRoaXMgYWxnb3JpdGhtIGNoYW5nZXMsIHVwZGF0ZSBDQ0xheWVyVHJlZUhvc3Q6OnBy
aW9yaXRpemVUZXh0dXJlcygpIGFjY29yZGluZ2x5LgogCi0gICAgaWYgKHF1YWQtPmJhY2tncm91
bmRGaWx0ZXJzKCkuaXNFbXB0eSgpKQorICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxvdyBiYWNrZ3Jv
dW5kIGZpbHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3Vy
ZmFjZXMgbWF5IGNvbnRhaW4KQEAgLTU4Nyw3ICs1OTIsNyBAQCBQYXNzT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29u
c3QgQwogICAgIEludFJlY3QgZGV2aWNlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRp
bDo6bWFwQ2xpcHBlZFJlY3QoY29udGVudHNEZXZpY2VUcmFuc2Zvcm0sIHNoYXJlZEdlb21ldHJ5
UXVhZCgpLmJvdW5kaW5nQm94KCkpKTsKIAogICAgIGludCB0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQ7Ci0gICAgcXVhZC0+YmFja2dyb3VuZEZpbHRlcnMoKS5nZXRPdXRzZXRzKHRvcCwgcmlnaHQs
IGJvdHRvbSwgbGVmdCk7CisgICAgZmlsdGVycy5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCk7CiAgICAgZGV2aWNlUmVjdC5tb3ZlKC1sZWZ0LCAtdG9wKTsKICAgICBkZXZpY2VS
ZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7CiAKQEAgLTU5Nyw3ICs2MDIs
NyBAQCBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQwogICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0
dXJlKGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBTa0JpdG1hcCBmaWx0ZXJlZERldmljZUJhY2tncm91bmQg
PSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+YmFja2dyb3VuZEZpbHRlcnMoKSwgZGV2aWNlQmFj
a2dyb3VuZFRleHR1cmUuZ2V0KCkpOworICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dy
b3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBmaWx0ZXJzLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVy
ZS5nZXQoKSk7CiAgICAgaWYgKCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNjM2LDYgKzY0MSwxMSBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFz
c0RyYXdRdWFkKiBxdWFkKQogICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50c1Rl
eHR1cmUtPmlkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGNvbnN0IENDUmVuZGVyUGFzcyog
cmVuZGVyUGFzcyA9IG1fcmVuZGVyUGFzc2VzQnlJZC0+Z2V0KHF1YWQtPnJlbmRlclBhc3NJZCgp
KTsKKyAgICBBU1NFUlQocmVuZGVyUGFzcyk7CisgICAgaWYgKCFyZW5kZXJQYXNzKQorICAgICAg
ICByZXR1cm47CisKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBx
dWFkLT5xdWFkVHJhbnNmb3JtKCk7CiAgICAgcmVuZGVyTWF0cml4LnRyYW5zbGF0ZSgwLjUgKiBx
dWFkLT5xdWFkUmVjdCgpLndpZHRoKCkgKyBxdWFkLT5xdWFkUmVjdCgpLngoKSwgMC41ICogcXVh
ZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSArIHF1YWQtPnF1YWRSZWN0KCkueSgpKTsKICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXggPSByZW5kZXJNYXRyaXg7CkBAIC02NDYs
MTEgKzY1NiwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NR
dWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlmICghY29udGVudHNE
ZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRG
aWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKKyAgICBPd25QdHI8Q0NTY29w
ZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFk
LCByZW5kZXJQYXNzLT5iYWNrZ3JvdW5kRmlsdGVycygpLCBjb250ZW50c0RldmljZVRyYW5zZm9y
bSk7CiAKICAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8v
IEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmls
dGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgY29udGVudHNU
ZXh0dXJlKTsKKyAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywg
cmVuZGVyUGFzcy0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUpOwogICAgIE93blB0cjxDQ1Nj
b3BlZExvY2tSZXNvdXJjZUZvclJlYWQ+IGNvbnRlbnRzUmVzb3VyY2VMb2NrOwogICAgIHVuc2ln
bmVkIGNvbnRlbnRzVGV4dHVyZUlkID0gMDsKICAgICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1
cmUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA5MGJkNzc0M2I5
ZjFkMmZhOGE2MDE2NGRlNjExODk4ZDNhZjhiZWQ0Li44ZjU5ZDRlOWFmMjg3ZTNjN2QzMzdlYWRh
NWJkNzM1ZmVhYTM2MTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAt
ODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlY2lkZVJlbmRlclBhc3NB
bGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQp
IGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYsIGNv
bnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JS
ZWN0KSBPVkVSUklERTsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAg
ICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpIE9WRVJSSURFOwpAQCAtMTIxLDE0ICsxMjEsMTQgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0Kiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBiZWdp
bkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzKTsKKyAgICB2
b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKCk7CiAgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCk7CiAg
ICAgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKIAogICAgIHZvaWQgZHJhd1F1YWQoY29uc3Qg
Q0NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVj
a2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBD
Q0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKLSAgICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICBQ
YXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEND
UmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsK
ICAgICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCop
OwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFk
Kik7CiAgICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3
UXVhZCopOwpAQCAtMjY0LDYgKzI2NCw3IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2Rl
ZmF1bHRSZW5kZXJQYXNzOworICAgIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCogbV9yZW5k
ZXJQYXNzZXNCeUlkOwogCiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOwogICAgIGJvb2wg
bV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAppbmRleCAxY2M2ZDYyOTM3YjY4YWMwZGFjNzMzY2Y3YmFkMmY2MWY3MDYyMjgzLi5h
MGZmNjU3YWMzMGQwNjJmMDI5NjJhMGYzZWI5ZDdhN2NjNTBhNTA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjkzLDYgKzI5Myw5IEBAIGJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAK
ICAgICAgICAgaW50IHJlbmRlclBhc3NJZCA9IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsKICAg
ICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJl
bmRlclN1cmZhY2UsIHJlbmRlclBhc3NJZCk7CisgICAgICAgIHBhc3MtPnNldEZpbHRlcnMocmVu
ZGVyU3VyZmFjZUxheWVyLT5maWx0ZXJzKCkpOworICAgICAgICBwYXNzLT5zZXRCYWNrZ3JvdW5k
RmlsdGVycyhyZW5kZXJTdXJmYWNlTGF5ZXItPmJhY2tncm91bmRGaWx0ZXJzKCkpOworCiAgICAg
ICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAg
ICAgZnJhbWUucmVuZGVyUGFzc2VzLmFwcGVuZChwYXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUu
cmVuZGVyUGFzc2VzQnlJZC5hZGQocmVuZGVyUGFzc0lkLCBwYXNzLnJlbGVhc2UoKSk7CkBAIC01
NDksNyArNTUyLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0
IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1fZnBzQ291bnRl
ci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVudFRpbWUoKSk7CiAKLSAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdGcmFtZShmcmFtZS5yZW5kZXJQYXNzZXMsIG1fcm9vdFNjaXNzb3JSZWN0KTsK
KyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdGcmFtZShmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1l
LnJlbmRlclBhc3Nlc0J5SWQsIG1fcm9vdFNjaXNzb3JSZWN0KTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgaSsrKQogICAgICAg
ICBmcmFtZS5yZW5kZXJQYXNzZXNbaV0tPnRhcmdldFN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5kaWREcmF3RGFtYWdlZEFyZWEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggODE2NDgx
Yzk3MzY1OTJkYjgyNDNkNzAyYmMzMTIxYmY2MzJiNTM4ZS4uNzE1ODIxMjhjNmE2NTNjNjc0MjMw
MWE5YmUyOGM0NDA0N2E3MTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NPY2NsdXNp
b25UcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC02OCw2ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBkZW5vdGVzIHRoZSBib3VuZHMg
aW4gcGh5c2ljYWwgcGl4ZWxzIG9mIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoaXMgUmVuZGVy
UGFzcy4KICAgICBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lYnVmZmVyT3V0cHV0UmVjdDsgfQogCisgICAgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9
CisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9CisKKyAgICBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kRmlsdGVyczsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZEZpbHRlcnMoY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fYmFja2dyb3VuZEZpbHRl
cnMgPSBmaWx0ZXJzOyB9CisKICAgICBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOyB9CiAgICAgdm9pZCBzZXRI
YXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFy
ZW50QmFja2dyb3VuZCA9IHRyYW5zcGFyZW50OyB9CiAKQEAgLTgzLDYgKzkwLDggQEAgcHJvdGVj
dGVkOgogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFk
U3RhdGVMaXN0OwogICAgIGJvb2wgbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQ7CiAgICAgYm9v
bCBtX2hhc09jY2x1c2lvbkZyb21PdXRzaWRlVGFyZ2V0U3VyZmFjZTsKKyAgICBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOworICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8Q0NSZW5kZXJQ
YXNzKj4gQ0NSZW5kZXJQYXNzTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdR
dWFkLmNwcAppbmRleCAyZDc0YTIyNzgwM2ZlNGFmYWU5MWZjM2NiMTUyZjcxZjM5NzYzYThiLi44
ZjUxYjk0MDcwNDlmN2QwOTc4ZDcwMDVmMDYyM2E3ZDE1ZGRmODdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3
UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCkBAIC0zMSwxOCArMzEsMTYgQEAgdXNpbmcgV2Vi
S2l0OjpXZWJDb21wb3NpdG9yUXVhZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3du
UHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNv
bnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRl
LCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxp
Y2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0s
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0No
YW5nZWRTaW5jZUxhc3RGcmFtZSkKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IEND
UmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9yU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBp
bnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpS
ZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRT
aW5jZUxhc3RGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJlbmRlclBhc3NJZCwgaXNSZXBsaWNh
LCBkcmF3VHJhbnNmb3JtLCBmaWx0ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1Jlc291cmNl
SWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1JlbmRlclBhc3NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCByZW5k
ZXJQYXNzSWQsIGlzUmVwbGljYSwgZHJhd1RyYW5zZm9ybSwgbWFza1Jlc291cmNlSWQsIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9CiAKLUNDUmVuZGVyUGFzc0RyYXdRdWFkOjpD
Q1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFk
U3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGludCByZW5k
ZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZp
bHRlcnMsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXNrUmVzb3VyY2VJZCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCitDQ1JlbmRlclBhc3NE
cmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgV2ViS2l0OjpXZWJDb21wb3NpdG9y
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNv
dXJjZUlkIG1hc2tSZXNvdXJjZUlkLCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5j
ZUxhc3RGcmFtZSkKICAgICA6IFdlYkNvbXBvc2l0b3JRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgV2Vi
Q29tcG9zaXRvclF1YWQ6OlJlbmRlclBhc3MsIHF1YWRSZWN0KQogICAgICwgbV9yZW5kZXJQYXNz
SWQocmVuZGVyUGFzc0lkKQogICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogICAgICwgbV9k
cmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pCi0gICAgLCBtX2ZpbHRlcnMoZmlsdGVycykKLSAg
ICAsIG1fYmFja2dyb3VuZEZpbHRlcnMoYmFja2dyb3VuZEZpbHRlcnMpCiAgICAgLCBtX21hc2tS
ZXNvdXJjZUlkKG1hc2tSZXNvdXJjZUlkKQogICAgICwgbV9jb250ZW50c0NoYW5nZWRTaW5jZUxh
c3RGcmFtZShjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0Ry
YXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3NEcmF3UXVhZC5oCmluZGV4IDZmMzk5YmU2N2Y4NjUyOTc4NzU2ZDY1YmYxYjc0
ODZhMmZiMmU4NzkuLmFmZjhkYjZkZWI0OTJiZTZmZDI0ZjMwYzgwNWJjOTZkNWYwM2E0YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaApAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8cHVibGljL1dl
YkNvbXBvc2l0b3JRdWFkLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMu
aD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCkBAIC0zOSw3ICszOCw3IEBAIGNsYXNzIENDUmVuZGVyUGFz
czsKIGNsYXNzIENDUmVuZGVyUGFzc0RyYXdRdWFkIDogcHVibGljIFdlYktpdDo6V2ViQ29tcG9z
aXRvclF1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyUGFzc0RyYXdRdWFk
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4g
Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvclNoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBpbnQgcmVuZGVyUGFzc0lkLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycywgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hc2tSZXNvdXJjZUlk
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBXZWJLaXQ6
OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgaW50IHJlbmRl
clBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAogICAgIGludCBy
ZW5kZXJQYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NJZDsgfQogICAgIGJvb2wg
aXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0KQEAgLTQ5LDE4ICs0OCwx
MyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHdl
IHNob3VsZCBkcmF3IHRoZSBSZW5kZXJQYXNzIHdpdGggdGhlIHF1YWRUcmFuc2Zvcm0uCiAgICAg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogCi0gICAgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9Ci0g
ICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRlcnM7IH0KLQogICAgIHN0YXRpYyBjb25z
dCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogbWF0ZXJpYWxDYXN0KGNvbnN0IFdlYktpdDo6V2ViQ29t
cG9zaXRvclF1YWQqKTsKIHByaXZhdGU6Ci0gICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3Qg
V2ViS2l0OjpXZWJDb21wb3NpdG9yU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGlu
dCByZW5kZXJQYXNzSWQsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
LCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCBD
Q1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKKyAgICBDQ1JlbmRlclBhc3NEcmF3
UXVhZChjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgaW50IHJlbmRlclBhc3NJZCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQg
bWFza1Jlc291cmNlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZy
YW1lKTsKIAogICAgIGludCBtX3JlbmRlclBhc3NJZDsKICAgICBib29sIG1faXNSZXBsaWNhOwog
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAg
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7Ci0gICAgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiAgICAgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpSZXNvdXJjZUlkIG1fbWFza1Jlc291cmNlSWQ7CiAgICAgSW50UmVjdCBtX2NvbnRlbnRz
Q2hhbmdlZFNpbmNlTGFzdEZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3Bw
CmluZGV4IDk1ZWYwYjljMjI2MjUwNDJmNDAzNDU3MDUzYjg5ZTEwYjYzNmRlZTMuLjUwNjdiOWVm
MTJkNDJkOGUwMDNmZDQ5NjUwYmRjNTYxMWNjN2ZjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcApAQCAtMjExLDEwICsyMTEsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBw
ZW5kUXVhZHMoQ0NRdWFkU2luayYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZQog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSBmb3JSZXBsaWNhID8g
bV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA6IG1fZHJhd1RyYW5zZm9ybTsKICAgICBJbnRSZWN0IGNv
bnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lID0gY29udGVudHNDaGFuZ2VkKCkgPyBtX2NvbnRl
bnRSZWN0IDogSW50UmVjdCgpOwogCi0gICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzID0gbV9vd25pbmdMYXllci0+ZmlsdGVycygpOwotICAgIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMgPSBtX293bmluZ0xheWVy
LT5iYWNrZ3JvdW5kRmlsdGVycygpOwotCi0gICAgcXVhZExpc3QuYXBwZW5kKENDUmVuZGVyUGFz
c0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50UmVjdCgpLCByZW5kZXJQ
YXNzSWQsIGZvclJlcGxpY2EsIGRyYXdUcmFuc2Zvcm0sIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0
ZXJzLCBtYXNrUmVzb3VyY2VJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsKKyAg
ICBxdWFkTGlzdC5hcHBlbmQoQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFk
U3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRlclBhc3NJZCwgZm9yUmVwbGljYSwgZHJhd1RyYW5z
Zm9ybSwgbWFza1Jlc291cmNlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyZXIuaAppbmRleCA5Mzk3ODcxNzc1N2FlNDE1Y2E0MjIxMTAyYmE5
Mjk5MzQ1MGJjY2FmLi41MWI4OTQyMWRiNWYzM2ZhMzZhOThlOGJjMDA3ZDE1ZjA1Y2JiZTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJlci5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQ
YXNzTGlzdCYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVu
ZGVyUGFzc0lkKGludCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgcm9v
dFNjaXNzb3JSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiwgY29uc3QgRmxvYXRS
ZWN0JiByb290U2Npc3NvclJlY3QpID0gMDsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcg
dG8gZmluaXNoCiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
aW5kZXggZTY0MTU2YmQ2MzM0NjBiZDlmOWNiZTdiMzQ2NjdjNDBjMWY0MjM1Ny4uYzdhNWM1MzUz
ODFhY2U1ZGNhZmY3YzM1MTRmZmNjMWEzYzQ1YzhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM1
NzcsMTIgKzM1NzcsMTIgQEAgc3RydWN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIHsKIAogY2xhc3MgQ0NUZXN0UmVuZGVy
UGFzczogcHVibGljIENDUmVuZGVyUGFzcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBp
bnQgaWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Rlc3RSZW5kZXJQYXNzKHRhcmdldFN1cmZh
Y2UsIGlkKSk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIo
bmV3IENDVGVzdFJlbmRlclBhc3MocmVuZGVyU3VyZmFjZSwgaWQpKTsgfQogCiAgICAgdm9pZCBh
cHBlbmRRdWFkKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCkgeyBtX3F1YWRMaXN0LmFwcGVu
ZChxdWFkKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NUZXN0UmVuZGVyUGFzcyhDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3ModGFyZ2V0U3VyZmFj
ZSwgaWQpIHsgfQorICAgIENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlLCBpbnQgaWQpIDogQ0NSZW5kZXJQYXNzKHJlbmRlclN1cmZhY2UsIGlkKSB7IH0KIH07
CiAKIGNsYXNzIENDVGVzdFJlbmRlcmVyIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSwg
cHVibGljIENDUmVuZGVyZXJDbGllbnQgewpAQCAtMzY5OCw3ICszNjk4LDcgQEAgc3RhdGljIHZv
aWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3JpcHQsIFJl
bmRlclBhc3NSZW1vdmEKIAogICAgICAgICAgICAgICAgIEludFJlY3QgcXVhZFJlY3QgPSBJbnRS
ZWN0KDAsIDAsIDEsIDEpOwogICAgICAgICAgICAgICAgIEludFJlY3QgY29udGVudHNDaGFuZ2Vk
UmVjdCA9IGNvbnRlbnRzQ2hhbmdlZCA/IHF1YWRSZWN0IDogSW50UmVjdCgpOwotICAgICAgICAg
ICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVuZGVyUGFzc0Ry
YXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBxdWFkUmVjdCwg
bmV3UmVuZGVyUGFzc0lkLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucygpLCAxLCBjb250ZW50c0NoYW5nZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBPd25Q
dHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3Jl
YXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgcXVhZFJlY3QsIG5ld1JlbmRlclBh
c3NJZCwgaXNSZXBsaWNhLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEsIGNv
bnRlbnRzQ2hhbmdlZFJlY3QpOwogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENDVGVzdFJl
bmRlclBhc3MqPihyZW5kZXJQYXNzLmdldCgpKS0+YXBwZW5kUXVhZChxdWFkLnJlbGVhc2UoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGYxZDhk
YzFkMDNiZmU4MjAwZDVhYzNkMTUzMjkyYTQ2ODZlNTA5NDAuLmQ4NjExNjRmNjk3MzJkYzkwYTI3
YWNjNDJmYTIwOTc4YTY0ZTBlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODAsOCArODAs
OSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlZmF1bHRNZW1vcnlBbGxvY2F0aW9uTGltaXQoKSkK
ICAgICB7CiAgICAgICAgIG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAg
ICAgIG1fcm9vdFJlbmRlclBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RMYXllci0+
cmVuZGVyU3VyZmFjZSgpLCBtX3Jvb3RMYXllci0+aWQoKSk7Ci0gICAgICAgIG1fcmVuZGVyUGFz
c2VzLmFwcGVuZChtX3Jvb3RSZW5kZXJQYXNzLmdldCgpKTsKKyAgICAgICAgT3duUHRyPENDUmVu
ZGVyUGFzcz4gcm9vdFJlbmRlclBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLCBtX3Jvb3RMYXllci0+aWQoKSk7CisgICAgICAgIG1fcmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXIuYXBwZW5kKHJvb3RSZW5kZXJQYXNzLmdldCgpKTsKKyAgICAgICAg
bV9yZW5kZXJQYXNzZXMuc2V0KG1fcm9vdExheWVyLT5pZCgpLCByb290UmVuZGVyUGFzcy5yZWxl
YXNlKCkpOwogICAgIH0KIAogICAgIC8vIENDUmVuZGVyZXJDbGllbnQgbWV0aG9kcy4KQEAgLTk2
LDggKzk3LDkgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgYWRkZWQgZm9yIHRlc3QuCiAgICAg
aW50IHNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0RnVs
bFJvb3RMYXllckRhbWFnZUNvdW50OyB9CiAKLSAgICBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQ
YXNzKCkgeyByZXR1cm4gbV9yb290UmVuZGVyUGFzcy5nZXQoKTsgfQotICAgIGNvbnN0IENDUmVu
ZGVyUGFzc0xpc3QmIHJlbmRlclBhc3NlcygpIHsgcmV0dXJuIG1fcmVuZGVyUGFzc2VzOyB9Cisg
ICAgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcygpIHsgcmV0dXJuIG1fcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXIubGFzdCgpOyB9CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3Nlc0luRHJhd09y
ZGVyOyB9CisgICAgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXMoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NlczsgfQogCiAgICAgc2l6ZV90IG1lbW9yeUFsbG9j
YXRpb25MaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRC
eXRlczsgfQogCkBAIC0xMDUsOCArMTA3LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zZXRGdWxs
Um9vdExheWVyRGFtYWdlQ291bnQ7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIG1faW1w
bFRocmVhZDsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVyOwotICAgIE93blB0
cjxDQ1JlbmRlclBhc3M+IG1fcm9vdFJlbmRlclBhc3M7Ci0gICAgQ0NSZW5kZXJQYXNzTGlzdCBt
X3JlbmRlclBhc3NlczsKKyAgICBDQ1JlbmRlclBhc3NMaXN0IG1fcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXI7CisgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwIG1fcmVuZGVyUGFzc2VzOwogICAgIHNp
emVfdCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogfTsKIApAQCAtMjIyLDcgKzIyNCw3
IEBAIFRFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBEaXNjYXJkZWRCYWNrYnVmZmVy
SXNSZWNyZWF0ZWRGb3JTY29wZUR1cmF0aW9uCiAgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVu
dC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CiAKICAgICBtX2xheWVyUmVuZGVyZXJD
aHJvbWl1bS5zZXRWaXNpYmxlKHRydWUpOwotICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmRy
YXdGcmFtZShtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzKCksIEZsb2F0UmVjdCgpKTsKKyAgICBt
X2xheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobV9tb2NrQ2xpZW50LnJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKCksIG1fbW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0KCkp
OwogICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKCkpOwogCiAgICAgc3dhcEJ1ZmZlcnMoKTsKQEAgLTIzNyw3ICsyMzksNyBAQCBU
RVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgRnJhbWVidWZmZXJEaXNjYXJkZWRBZnRl
clJlYWRiYWNrV2hlbk5vdFZpc2libAogICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0
RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOwogCiAgICAgY2hhciBwaXhlbHNbNF07Ci0gICAg
bV9sYXllclJlbmRlcmVyQ2hyb21pdW0uZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5kZXJQYXNz
ZXMoKSwgRmxvYXRSZWN0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdGcmFt
ZShtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbV9tb2NrQ2xpZW50LnJl
bmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5k
ZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CiAKICAgICBtX2xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIEludFJlY3QoMCwgMCwg
MSwgMSkpOwpAQCAtNDE4LDcgKzQyMCw3IEBAIFRFU1QoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dDIsIG9wYXF1ZUJhY2tncm91bmQpCiAKICAgICBFWFBFQ1RfVFJVRShsYXllclJlbmRlcmVyQ2hy
b21pdW0uaW5pdGlhbGl6ZSgpKTsKIAotICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJh
bWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0KCkpOworICAgIGxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXNJbkRyYXdPcmRl
cigpLCBtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3QoKSk7CiAKICAgICAvLyBP
biBERUJVRyBidWlsZHMsIHJlbmRlciBwYXNzZXMgd2l0aCBvcGFxdWUgYmFja2dyb3VuZCBjbGVh
ciB0byBibHVlIHRvCiAgICAgLy8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJh
d24gb24gdGhlIHNjcmVlbi4KQEAgLTQ0MSw3ICs0NDMsNyBAQCBURVNUKExheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QyLCB0cmFuc3BhcmVudEJhY2tncm91bmQpCiAKICAgICBFWFBFQ1RfVFJVRShs
YXllclJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpKTsKIAotICAgIGxheWVyUmVuZGVyZXJD
aHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSwgRmxvYXRSZWN0KCkp
OworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQ
YXNzZXNJbkRyYXdPcmRlcigpLCBtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpLCBGbG9hdFJlY3Qo
KSk7CiAKICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC0+Y2xlYXJDb3VudCgpKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>