<?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>93442</bug_id>
          
          <creation_ts>2012-08-07 23:56:17 -0700</creation_ts>
          <short_desc>[chromium] Base class for CCResourceProvider</short_desc>
          <delta_ts>2013-04-15 08:10:45 -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>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandre Elias">aelias</reporter>
          <assigned_to name="Alexandre Elias">aelias</assigned_to>
          <cc>aelias</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>689984</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-07 23:56:17 -0700</bug_when>
    <thetext>[chromium] Base class for CCResourceProvider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689990</commentid>
    <comment_count>1</comment_count>
      <attachid>157134</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 00:04:37 -0700</bug_when>
    <thetext>Created attachment 157134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689991</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 00:06:14 -0700</bug_when>
    <thetext>I haven&apos;t updated the tests yet, I&apos;ll do that tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689997</commentid>
    <comment_count>3</comment_count>
      <attachid>157135</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 00:09:21 -0700</bug_when>
    <thetext>Created attachment 157135
Patch

Actually added the CCResourceProviderGL.h/.cpp files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690757</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 14:41:29 -0700</bug_when>
    <thetext>So I thought a bit more about this, and I&apos;m thinking that it would be possibly better to handle the different type of resources inside a single CCResourceProvider class.
The rationale is 2-fold:
- I foresee some amount of duplicated code for meta-data tracking, etc. in the CCResourceProviderGL and the CCResourceProviderSoftware (or w/e). In particular I&apos;m worried about creeping slight differences in how we check read/write lock state, which resource has been sent to the parent, pools, etc.
- at some point we may want to mix &amp; match resource types, e.g. use the &quot;software&quot; resource type that doesn&apos;t involve a context (e.g. for tiled layer) at the same time as &quot;3d&quot; resource types for resources that need them.

I think CCResourceProvider::Resource could easily keep a ResourceImpl that itself has a virtual upload() and whatever else is needed instead of glId, and have different implementations on different resource types. Only when creating the resource would we need to do something different, but we could still share a bunch of the code.

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690804</commentid>
    <comment_count>5</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 15:12:32 -0700</bug_when>
    <thetext>Seems like a good idea.  I&apos;m still a bit vague on how it would look exactly, here are some random thoughts:

- Skia provides its own read/write lock.  Not sure what value ResourceProvider&apos;s locking stuff provides in the software context (I&apos;m not clear on exactly the scenarios it protects against in the hardware case, either).  OTOH, it probably doesn&apos;t hurt to have two locking schemes on top of each other.

- For the mix-and-match, there&apos;s an asymmetry in that the leaf-compositor may want to mix-and-match, but the root-compositor wants to convert everything it receives into a unified format for the CCRenderer.  I wonder what the best way to express this would be.  For example, we could have a new class CCResourceReceiver, that would take care of converting received resources according to policy and feed them to the local CCResourceProvider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690844</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 15:40:36 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Seems like a good idea.  I&apos;m still a bit vague on how it would look exactly, here are some random thoughts:
&gt; 
&gt; - Skia provides its own read/write lock.  Not sure what value ResourceProvider&apos;s locking stuff provides in the software context (I&apos;m not clear on exactly the scenarios it protects against in the hardware case, either).  OTOH, it probably doesn&apos;t hurt to have two locking schemes on top of each other.

Arguably, the locking-for-write stuff is to ensure proper behavior from the clients, it&apos;s only used in ASSERTs. But without it, it will get hairy to debug synchronization issues cross process. The lock-for-read stuff has visible impact though, through the isInUseByCompositor that will at some point be needed to figure out if you have to double-buffer your tiles or not.


Even with the 3D path, we&apos;ll want to add a couple of other ways to feed the data besides upload():
1- a lock/unlock scheme, that gives you the actual bits (used for the zero-copy path, saves 2 copies). This would follow similar rules as the  lockForWrite path, in that the resource must be !inUseByConsumer()
2- a mapBufferForUpload / commitBufferForUpload scheme, where you could get the buffer even if the resource is in-use. The commit would be passed to the parent (together with the sendFrameToParent scheme) that is responsible for doing the upload. Adds a copy, but the child won&apos;t have to double-buffer resources any more and can do partial updates, which may translate into a win.

I think both would make sense as well for the software path.

&gt; 
&gt; - For the mix-and-match, there&apos;s an asymmetry in that the leaf-compositor may want to mix-and-match, but the root-compositor wants to convert everything it receives into a unified format for the CCRenderer.  I wonder what the best way to express this would be.  For example, we could have a new class CCResourceReceiver, that would take care of converting received resources according to policy and feed them to the local CCResourceProvider.

Yes, I think we&apos;ll need something there. I believe we&apos;ll need to go to the parent to allocate the resource in either case (if only because the renderer can&apos;t create a SHM/TransportDIB without talking to the browser anyway), but the details of the transport mechanism could be hidden in a 2D allocator class (that we talked about in https://bugs.webkit.org/show_bug.cgi?id=90736 ) on the child side, and implemented by a CCResourceReceiver on the parent side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691219</commentid>
    <comment_count>7</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 22:43:37 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; - For the mix-and-match, there&apos;s an asymmetry in that the leaf-compositor may want to mix-and-match, but the root-compositor wants to convert everything it receives into a unified format for the CCRenderer.  I wonder what the best way to express this would be.  For example, we could have a new class CCResourceReceiver, that would take care of converting received resources according to policy and feed them to the local CCResourceProvider.
&gt; 
&gt; Yes, I think we&apos;ll need something there. I believe we&apos;ll need to go to the parent to allocate the resource in either case (if only because the renderer can&apos;t create a SHM/TransportDIB without talking to the browser anyway), but the details of the transport mechanism could be hidden in a 2D allocator class (that we talked about in https://bugs.webkit.org/show_bug.cgi?id=90736 ) on the child side, and implemented by a CCResourceReceiver on the parent side.

OK, two proposals come to mind:
1. The allocator could always pre-emptively create both a SHM and a texture of the same size, and at a low level they would always be kept tightly bundled together.  This magic would be invisible to the ResourceProviders -- the parent ResourceProvider will only see textureIds and the child ResourceProvider will only see SHM handles, and the allocator can accept either of them as a key (since the allocator wouldn&apos;t know about resourceIds).  For this to work, the creation/destruction and mailbox transfer stuff needs to be moved out of ResourceProvider.

2. Conversely, the ResourceProvider could explicitly orchestrate the whole thing.  In that case, a single ResourceImpl in the parent would have both a SHM handle and a textureId.  The parent would have to remember resources after sending them back to the client in order not to lose track of the textureId.

I think (1) is better encapsulated and easier to reason about, but (2) might open more optimization opportunities such as finer-grained locking.  Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691675</commentid>
    <comment_count>8</comment_count>
      <attachid>157135</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-09 12:16:23 -0700</bug_when>
    <thetext>Comment on attachment 157135
Patch

Removing r? on this patch; I&apos;ll work on the alternate approach.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157134</attachid>
            <date>2012-08-08 00:04:37 -0700</date>
            <delta_ts>2012-08-08 00:09:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93442-20120808000412.patch</filename>
            <type>text/plain</type>
            <size>43233</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0OTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU4M2ZmMzI3OWMzYzg4
Y2M3Zjc3N2Y1ODM2NDI3OWYxZWQ4ZTRiOC4uOWY3MjY4ZDUzNzc4ZGRmNTViMDkyMDViYWQ5YjEw
ZDBmNmRiM2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA4LTA3ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEJh
c2UgY2xhc3MgZm9yIENDUmVzb3VyY2VQcm92aWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJIG1hZGUgQ0NSZXNvdXJjZVByb3ZpZGVyIGludG8gYSBi
YXNlIGNsYXNzIGFuZCBtb3ZlZCB0aGUgY3VycmVudAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBp
bnRvIGEgbmV3IGNsYXNzIENDUmVzb3VyY2VQcm92aWRlckdMLiAgVGhpcyB3aWxsIGJlCisgICAg
ICAgIHRoZSBiYXNpcyBmb3IgZnV0dXJlIHViZXJjb21wLWxlYWYgYW5kIHNvZnR3YXJlIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICBTb21lIHVzZXJzIHJlcXVpcmVkIGRvd25jYXN0cyB0byB0
aGUgR0wgaW1wbGVtZW50YXRpb24sIGVpdGhlciBiZWNhdXNlCisgICAgICAgIHRoZXkgd2FudGVk
IHRvIHB1bGwgaXRzIEdyYXBoaWNzQ29udGV4dDNEIG9yIGJlY2F1c2UgdGhleSB3ZXJlIGdpdmlu
ZworICAgICAgICBpdCBhbiBleHRlcm5hbCB0ZXh0dXJlIElELiAgVGhleSBhcmU6CisgICAgICAg
ICAgLSBHYW5lc2gtYmFzZWQgcGFpbnRpbmcKKyAgICAgICAgICAtIFRleHR1cmVMYXllcgorICAg
ICAgICAgIC0gVmlkZW8gbGF5ZXIgd2l0aCBURVhUVVJFXzJEIHNldAorICAgICAgICAgIC0gSU9T
dXJmYWNlTGF5ZXIKKyAgICAgICAgSSBhZGRlZCBhbiBhc3NlcnRpb24gZm9yIHRoZSBmaXJzdCB0
aHJlZSwgYXMgdGhlIHVzZXIgbXVzdCBlbnN1cmUgdGhleQorICAgICAgICBhcmUgbmV2ZXIgaW52
b2tlZCBhbnl3YXkuICBGb3IgSU9TdXJmYWNlTGF5ZXIsIEkgYWRkZWQgYSByZXR1cm4gYXMgaXQK
KyAgICAgICAgbG9va3MgbGlrZSBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG1heSBiZSBwb3Nz
aWJsZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKG5vLW9wIHJlZmFjdG9yaW5nKS4KKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlkZW9RdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVm
ZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlc291cmNlUHJvdmlkZXIp
OgorICAgICAgICAoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0lPU3VyZmFjZUxheWVySW1wbDo6d2lsbERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92
aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVzb3Vy
Y2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0
ZVJlc291cmNlUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnB1
dFJlc291cmNlSW5Qb29sKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6
cmVtb3ZlUmVzb3VyY2VGcm9tUG9vbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6bWF4VGV4dHVyZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpudW1SZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjppblVzZUJ5Q29uc3VtZXIpOgorICAgICAgICAo
Q0NSZXNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRl
cjo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpzaGFsbG93
Rmx1c2hJZlN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmlzUmVzb3VyY2VQcm92aWRlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6Z2VuZXJhdGVSZXNvdXJjZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlTGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFsKToKKwogMjAxMi0wOC0wNyAgTWlrZSBSZWVk
ICA8cmVlZEBnb29nbGUuY29tPgogCiAgICAgICAgIHJlaW1wbGVtZW50IGZhc3RNb2Qgdy9vIChz
b29uIHRvIGJlKSBwcml2YXRlIHNraWEgbWFjcm9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjhlMTZh
MjMzMTNlMDE0Yzg5Zjg4YWE0M2I4OGVhODIzMTIwZTI1NC4uYWZkNjdiNzdiZmI4ZWE3MzBlNmRk
MTgwOWU2NDk5NDc4MGViMWFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODM4Miw2ICs4MzgyLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmlu
Z1N0YXRzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVzb3VyY2VQcm92aWRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlckdMLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVy
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hl
ZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmlu
ZGV4IGEwZTg1N2U5ZDRiYzVlYTc5MjQ5Mjk1ZjkwNjFiZjRhZGRmMjUzNDcuLmMwYzA4ZWIzMGQ0
ODk4ZjNjYzU0NjhkZjRjMGVjN2MyZTJjZTIzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVkZSAi
U2tHcHVEZXZpY2UuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZXNvdXJjZVByb3ZpZGVyR0wuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0
M0QuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaD4KIApA
QCAtNzMsNyArNzQsOSBAQCB2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChDQ1Jlc291cgogICAgIEdyQ29udGV4dCog
c2hhcmVkR3JDb250ZXh0ID0gQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpID8gV2ViU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvbXBvc2l0b3JUaHJlYWRHckNvbnRleHQoKSA6IFdlYlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjptYWluVGhyZWFkR3JDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFyZWRD
b250ZXh0IHx8ICFzaGFyZWRHckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICB0ZXh0dXJl
VXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChzaGFyZWRDb250ZXh0LCBzaGFyZWRHckNvbnRl
eHQsIHJlc291cmNlUHJvdmlkZXIsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwor
ICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyLT5pc1Jlc291cmNlUHJvdmlkZXJHTCgpKTsKKyAg
ICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlckdMID0gc3RhdGljX2Nhc3Q8
Q0NSZXNvdXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICB0ZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChzaGFyZWRDb250ZXh0LCBzaGFyZWRHckNvbnRleHQs
IHJlc291cmNlUHJvdmlkZXJHTCwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiB9
CiAKIFBhc3NSZWZQdHI8RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQpAQCAtMTAxLDEzICsx
MDQsMTMgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXAKICAgICByZXR1cm4gTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KFdlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHckNvbnRleHQqIGdyQ29udGV4dCwgQ0NSZXNvdXJj
ZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2
b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
VGV4dHVyZVJlY3QoV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdyQ29udGV4dCogZ3JD
b250ZXh0LCBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlciwgQ0NQcmlvcml0
aXplZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBnYW5lc2ggdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgogICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgdGV4dHVyZS0+YWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwotICAg
IENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUgbG9jayhyZXNvdXJjZVByb3ZpZGVyLCB0ZXh0
dXJlLT5yZXNvdXJjZUlkKCkpOworICAgIENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JXcml0ZSBs
b2NrKHJlc291cmNlUHJvdmlkZXIsIHRleHR1cmUtPnJlc291cmNlSWQoKSk7CiAgICAgLy8gQ3Jl
YXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgogICAgIE93blB0cjxTa0NhbnZh
cz4gY2FudmFzID0gY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoZ3JDb250ZXh0LCB0ZXh0dXJlLT5z
aXplKCksIGxvY2sudGV4dHVyZUlkKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4
IDY0ZDVlZWMzODE2ZGQ0NDgxODQwYTkwNjhiZGExZjE2ZDkyYjM5YmUuLjBjZWFiNzVkYmZmYmI4
NDE3NTRmZjdmMTBlMjNlMjZlYjQxMzk0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBA
IC00MCw2ICs0MCw4IEBAIGNsYXNzIFdlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDUmVzb3VyY2VQcm92aWRlckdMOworCiAvLyBUaGlz
IGNsYXNzIHJlY29yZHMgdGhlIGNvbnRlbnRSZWN0IGludG8gYW4gU2tQaWN0dXJlLCB0aGVuIHVz
ZXMgYWNjZWxlcmF0ZWQKIC8vIGRyYXdpbmcgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlLiBUaGUgYWNj
ZWxlcmF0ZWQgZHJhd2luZyBnb2VzIHRvIGFuCiAvLyBpbnRlcm1lZGlhdGUgZnJhbWVidWZmZXIg
YW5kIHRoZW4gaXMgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIG9uY2UgZG9uZS4K
QEAgLTYzLDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpIE9WRVJSSURFOwotICAgIHZv
aWQgdXBkYXRlVGV4dHVyZVJlY3QoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIEdyQ29u
dGV4dCosIENDUmVzb3VyY2VQcm92aWRlciosIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIEdyQ29udGV4
dCosIENDUmVzb3VyY2VQcm92aWRlckdMKiwgQ0NQcmlvcml0aXplZFRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDY0OWU2MTA0MTdjMjM2NjYwMWUyNWNlY2JkMTZlNDQy
MjJmZTUzY2YuLmNmNzNkNmFhMDI0MzU0YzNmMDI0NjE5OWZjNjA0OTdjNTlkMmEwYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyR0wuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKICNpbmNsdWRl
ICJjYy9DQ1NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpA
QCAtMTU0LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ29tcGxldGU7CiB9Owog
Ci1QYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUoQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0
aW5nKQorUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNvdXJjZVByb3ZpZGVy
R0wqIHJlc291cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2Fk
ZXJTZXR0aW5nKQogewogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVu
ZGVyZXIoYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIHJlc291cmNl
UHJvdmlkZXIsIHRleHR1cmVVcGxvYWRlclNldHRpbmcpKSk7CiAgICAgaWYgKCFsYXllclJlbmRl
cmVyLT5pbml0aWFsaXplKCkpCkBAIC0xNjQsNyArMTY1LDcgQEAgUGFzc093blB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJD
bGllbnQKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0o
Q0NSZW5kZXJlckNsaWVudCogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3Zp
ZGVyR0wqIHJlc291cmNlUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGlu
ZykKICAgICA6IENDUmVuZGVyZXIoY2xpZW50KQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKDApCkBAIC01MzgsNyArNTM5LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogCiAgICAg
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5mbHVzaCgpOwogCi0gICAgQ0NTY29wZWRMb2NrUmVz
b3VyY2VGb3JXcml0ZSBsb2NrKGxheWVyUmVuZGVyZXItPnJlc291cmNlUHJvdmlkZXIoKSwgc291
cmNlVGV4dHVyZS0+aWQoKSk7CisgICAgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlIGxv
Y2sobGF5ZXJSZW5kZXJlci0+cmVzb3VyY2VQcm92aWRlcigpLCBzb3VyY2VUZXh0dXJlLT5pZCgp
KTsKICAgICBTa0JpdG1hcCBzb3VyY2UgPSBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShm
aWx0ZXJzLCBsb2NrLnRleHR1cmVJZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNv
bnRleHQsIGZpbHRlckdyQ29udGV4dCk7CiAgICAgcmV0dXJuIHNvdXJjZTsKIH0KQEAgLTY0MCwy
MCArNjQxLDIwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1
YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kCiAgICAgLy8gRklYTUU6IENhY2hl
IHRoaXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGZvciBib3RoIHRoZSBz
dXJmYWNlIGFuZCBpdHMgcmVwbGljYS4KICAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250
ZW50cyB0ZXh0dXJlLgogICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0
aGlzLCByZW5kZXJQYXNzLT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7Ci0gICAgT3duUHRy
PENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZD4gY29udGVudHNSZXNvdXJjZUxvY2s7CisgICAg
T3duUHRyPENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkPiBjb250ZW50c1Jlc291cmNlTG9j
azsKICAgICB1bnNpZ25lZCBjb250ZW50c1RleHR1cmVJZCA9IDA7CiAgICAgaWYgKGZpbHRlckJp
dG1hcC5nZXRUZXh0dXJlKCkpIHsKICAgICAgICAgR3JUZXh0dXJlKiB0ZXh0dXJlID0gcmVpbnRl
cnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKTsKICAgICAg
ICAgY29udGVudHNUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgY29udGVudHNSZXNvdXJjZUxvY2sgPSBhZG9wdFB0cihuZXcgQ0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkKG1fcmVzb3VyY2VQcm92aWRlciwgY29udGVudHNUZXh0
dXJlLT5pZCgpKSk7CisgICAgICAgIGNvbnRlbnRzUmVzb3VyY2VMb2NrID0gYWRvcHRQdHIobmV3
IENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkKG1fcmVzb3VyY2VQcm92aWRlciwgY29udGVu
dHNUZXh0dXJlLT5pZCgpKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNS
ZXNvdXJjZUxvY2stPnRleHR1cmVJZCgpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGJhY2tn
cm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUuCiAgICAgaWYgKGJhY2tncm91bmRUZXh0dXJl
KSB7CiAgICAgICAgIEFTU0VSVChiYWNrZ3JvdW5kVGV4dHVyZS0+c2l6ZSgpID09IHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpKTsKLSAgICAgICAgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkIGxv
Y2sobV9yZXNvdXJjZVByb3ZpZGVyLCBiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSk7CisgICAgICAg
IENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkIGxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCBi
YWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSk7CiAgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZl
cihmcmFtZSwgbG9jay50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3QoKSwgcXVhZC0+cXVhZFRy
YW5zZm9ybSgpKTsKICAgICB9CiAKQEAgLTY3MCwxMCArNjcxLDEwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgQ0NSZW5kCiAgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rp
c3RhbmNlKCk7CiAgICAgfQogCi0gICAgT3duUHRyPENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVh
ZD4gbWFza1Jlc291cmNlTG9jazsKKyAgICBPd25QdHI8Q0NTY29wZWRMb2NrR0xSZXNvdXJjZUZv
clJlYWQ+IG1hc2tSZXNvdXJjZUxvY2s7CiAgICAgdW5zaWduZWQgbWFza1RleHR1cmVJZCA9IDA7
CiAgICAgaWYgKHF1YWQtPm1hc2tSZXNvdXJjZUlkKCkpIHsKLSAgICAgICAgbWFza1Jlc291cmNl
TG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQobV9yZXNvdXJj
ZVByb3ZpZGVyLCBxdWFkLT5tYXNrUmVzb3VyY2VJZCgpKSk7CisgICAgICAgIG1hc2tSZXNvdXJj
ZUxvY2sgPSBhZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvclJlYWQobV9yZXNv
dXJjZVByb3ZpZGVyLCBxdWFkLT5tYXNrUmVzb3VyY2VJZCgpKSk7CiAgICAgICAgIG1hc2tUZXh0
dXJlSWQgPSBtYXNrUmVzb3VyY2VMb2NrLT50ZXh0dXJlSWQoKTsKICAgICB9CiAKQEAgLTg1NCw3
ICs4NTUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKERyYXdp
bmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGlsZURyYXdRdQogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7CiAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uLCAwKSk7CiAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOwotICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBxdWFkUmVz
b3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKKyAgICBD
Q1Njb3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQ
cm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3Vy
Y2VMb2NrLnRleHR1cmVJZCgpKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIHF1YWQtPnRl
eHR1cmVGaWx0ZXIoKSkpOwpAQCAtOTYxLDkgKzk2Miw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3WVVWVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVW
VmlkCiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdVBsYW5lID0gcXVh
ZC0+dVBsYW5lKCk7CiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdlBs
YW5lID0gcXVhZC0+dlBsYW5lKCk7CiAKLSAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQg
eVBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHlQbGFuZS5yZXNvdXJjZUlkKTsKLSAgICBD
Q1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgdVBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIs
IHVQbGFuZS5yZXNvdXJjZUlkKTsKLSAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgdlBs
YW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHZQbGFuZS5yZXNvdXJjZUlkKTsKKyAgICBDQ1Nj
b3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCB5UGxhbmVMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwg
eVBsYW5lLnJlc291cmNlSWQpOworICAgIENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkIHVQ
bGFuZUxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCB1UGxhbmUucmVzb3VyY2VJZCk7CisgICAgQ0NT
Y29wZWRMb2NrR0xSZXNvdXJjZUZvclJlYWQgdlBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIs
IHZQbGFuZS5yZXNvdXJjZUlkKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7CiAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
eVBsYW5lTG9jay50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKQEAgLTEwNzIsNyAr
MTA3Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUZXh0dXJlCiAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdXZSZWN0Lngo
KSwgdXZSZWN0LnkoKSwgdXZSZWN0LndpZHRoKCksIHV2UmVjdC5oZWlnaHQoKSkpOwogCiAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCkpOwotICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBxdWFkUmVzb3Vy
Y2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKKyAgICBDQ1Nj
b3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92
aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3VyY2VM
b2NrLnRleHR1cmVJZCgpKSk7CiAKICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBw
YXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hl
cmUKQEAgLTEzNjEsNyArMTM2Miw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRG
cmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zCiAgICAgaWYg
KCF0ZXh0dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9v
bCwgZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IsIENDUmVzb3VyY2VQ
cm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZSBsb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4
dHVyZS0+aWQoKSk7CisgICAgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlIGxvY2sobV9y
ZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBsb2NrLnRl
eHR1cmVJZCgpKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZS0+Zm9ybWF0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VSZWN0Lngo
KSwgZGV2aWNlUmVjdC55KCksIGRldmljZVJlY3Qud2lkdGgoKSwgZGV2aWNlUmVjdC5oZWlnaHQo
KSwgMCkpOwpAQCAtMTQxMCw3ICsxNDExLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdAogICAg
IEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3Jl
ZW5GcmFtZWJ1ZmZlcklkKSk7Ci0gICAgZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFk
b3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92aWRl
ciwgdGV4dHVyZS0+aWQoKSkpOworICAgIGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2sgPSBh
ZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92
aWRlciwgdGV4dHVyZS0+aWQoKSkpOwogICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IGZyYW1lLmN1
cnJlbnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpOwogICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCA2ODQyZjBjYzU5NTRiZGY3ZWJjMzlmNmMzZWY5NzE5NDNlOTNkYWRk
Li43MzdkNGU1ZGUzODljY2M1NDRhMTI4NTNlZTRkM2NkZjgxYmVkNTFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNjL0ND
SU9TdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJv
dmlkZXJHTC5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTdHJlYW1WaWRlb0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJh
d1F1YWQuaCIKQEAgLTY1LDcgKzY2LDcgQEAgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDog
cHVibGljIENDUmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NDb250ZXh0TG9zdENhbGxi
YWNrIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclJlbmRlcmVyQ2hyb21pdW0pOwog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3Jl
YXRlKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2Fk
ZXJPcHRpb24pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXJHTCosIFRleHR1cmVV
cGxvYWRlck9wdGlvbik7CiAKICAgICB2aXJ0dWFsIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsK
IApAQCAtMTAzLDEwICsxMDQsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGUoYm9vbCkgT1ZFUlJJREU7CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUHJvdmlkZXI7IH0KKyAgICBDQ1Jl
c291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VQcm92aWRlcjsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
KENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2FkZXJP
cHRpb24pOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiwgQ0NS
ZXNvdXJjZVByb3ZpZGVyR0wqLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOwogCiAKICAgICBib29s
IGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJE
aXNjYXJkZWQ7IH0KQEAgLTEyMCw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzOwogICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IGN1cnJlbnRSZW5kZXJQYXNzOwogICAgICAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJl
bnRUZXh0dXJlOwotICAgICAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4g
Y3VycmVudEZyYW1lYnVmZmVyTG9jazsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkTG9ja0dMUmVz
b3VyY2VGb3JXcml0ZT4gY3VycmVudEZyYW1lYnVmZmVyTG9jazsKIAogICAgICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4OwpAQCAtMjcxLDcgKzI3Miw3
IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8U29saWRDb2xvclByb2dyYW0+IG1fc29saWRDb2xv
clByb2dyYW07CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIG1fcmVzb3VyY2VQcm92aWRlcjsK
KyAgICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0
cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8
VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJT1N1cmZhY2VMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJ
T1N1cmZhY2VMYXllckltcGwuY3BwCmluZGV4IDQ3M2RlMjU5YjhlYWVhYmRlZDlkNmViZWY5N2I3
YzQyNjVkMWNiZDMuLmM0ZTc0YTYzMjdiNDIwNWM5MmMyZjI3OGQyNTZhY2Y5MGZiMDEzOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SU9TdXJmYWNlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHAKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUXVhZFNpbmsuaCIKKyNpbmNsdWRl
ICJjYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGlj
c0NvbnRleHQzRC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSwxMSArNjYsMTIgQEAg
dm9pZCBDQ0lPU3VyZmFjZUxheWVySW1wbDo6d2lsbERyYXcoQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpZGVyKQogICAgIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhyZXNvdXJjZVByb3Zp
ZGVyKTsKIAogICAgIGlmIChtX2lvU3VyZmFjZUNoYW5nZWQpIHsKLSAgICAgICAgV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gcmVzb3VyY2VQcm92aWRlci0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0M2QpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFyZXNvdXJjZVByb3ZpZGVyLT5pc1Jlc291
cmNlUHJvdmlkZXJHTCgpKSB7CisgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBh
dGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlckdMID0gc3Rh
dGljX2Nhc3Q8Q0NSZXNvdXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAg
ICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gcmVzb3VyY2VQcm92
aWRlckdMLT5ncmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlz
IGluIGEgd2F5IHRoYXQgd2UgY2FuIHRyYWNrIG1lbW9yeSB1c2FnZS4KICAgICAgICAgaWYgKCFt
X2lvU3VyZmFjZVRleHR1cmVJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKaW5kZXggNWFjMTkzMTg2MjdjMjllM2JkNzZmYmE2OWY1YjUxZjI2MzAzN2Y4NC4uMmJmOTZi
NjQxNmRiYWI1N2I0YzRiMWQ3ZTM1YTljMWQwYTA4YjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTUxOSw3ICs1MTksNyBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgbV9yZXNvdXJj
ZVByb3ZpZGVyLT5kZWxldGVPd25lZFJlc291cmNlcyhDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7
CisgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZVBvb2woQ0NSZW5kZXJlcjo6
Q29udGVudFBvb2wpOwogICAgIG1fY29udGVudHNUZXh0dXJlc1dlcmVQdXJnZWRTaW5jZUxhc3RD
b21taXQgPSB0cnVlOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OwogfQpAQCAtNjg1LDcgKzY4NSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4KICAgICB9CiAK
ICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHRSZWYoY29udGV4dCk7Ci0gICAg
T3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKGNvbnRleHRSZWYuZ2V0KCkpOworICAgIE93blB0cjxDQ1Jlc291cmNl
UHJvdmlkZXJHTD4gcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlckdMOjpjcmVh
dGUoY29udGV4dDNkKTsKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJl
bmRlcmVyOwogICAgIGlmIChyZXNvdXJjZVByb3ZpZGVyLmdldCgpKQogICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgcmVzb3VyY2VQcm92
aWRlci5nZXQoKSwgdGV4dHVyZVVwbG9hZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJv
dmlkZXIuY3BwCmluZGV4IDQ5YzNiMjQzZjUxMzQwNWNjN2Y4Y2Q0NDU5MWUxMGFiYWVlZTYxNjUu
LmVmYTQxOTU5Yzk3NGUxMjdlNmE3ZWI1NjA5M2I3MmE4ODU0YjY2OGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92
aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApAQCAtMSwyNjcgKzEsNjQgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqCiAgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9y
IHRoZSBHTEMoKSBtYWNybwotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCi0jaW5j
bHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCi0j
aW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+Ci0KLXVzaW5nIFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEdD
M0RlbnVtIHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsK
LSAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEOjpSR0JBOF9PRVM7Ci0g
ICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOgot
ICAgICAgICBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkJHUkE4X0VYVDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdG9yYWdlRm9ybWF0Owot
fQotCi1zdGF0aWMgYm9vbCBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKEdDM0Rl
bnVtIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSB8fCBmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVCk7Ci19Ci0KLVBhc3NPd25Q
dHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShDQ0dyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK0NDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3Zp
ZGVyKCkKKyAgICA6IG1fbmV4dElkKDEpCiB7Ci0gICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRl
cj4gcmVzb3VyY2VQcm92aWRlcihhZG9wdFB0cihuZXcgQ0NSZXNvdXJjZVByb3ZpZGVyKGNvbnRl
eHQpKSk7Ci0gICAgaWYgKCFyZXNvdXJjZVByb3ZpZGVyLT5pbml0aWFsaXplKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXNvdXJjZVByb3ZpZGVyLnJlbGVhc2UoKTsK
IH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjp+Q0NSZXNvdXJjZVByb3ZpZGVyKCkKIHsKIH0KIAot
V2ViR3JhcGhpY3NDb250ZXh0M0QqIENDUmVzb3VyY2VQcm92aWRlcjo6Z3JhcGhpY3NDb250ZXh0
M0QoKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci19Ci0KLWJvb2wgQ0NSZXNvdXJjZVByb3ZpZGVyOjpp
blVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCBpZCkKLXsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwotICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgcmV0
dXJuICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50OwotfQotCi1DQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9v
bCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50
IGhpbnQpCi17Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICB1bnNp
Z25lZCB0ZXh0dXJlSWQgPSAwOwotICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qg
PSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dDNkKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4K
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEdMQyhjb250ZXh0M2QsIHRleHR1cmVJZCA9
IGNvbnRleHQzZC0+Y3JlYXRlVGV4dHVyZSgpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0
M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQp
KTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250
ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICBHTEMoY29udGV4dDNk
LCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKLQotICAgIGlmIChtX3VzZVRleHR1cmVVc2FnZUhpbnQgJiYgaGludCA9
PSBUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlcikKLSAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4
dDNkLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKTsKLSAgICBpZiAobV91c2VUZXh0
dXJlU3RvcmFnZUV4dCAmJiBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKGZvcm1h
dCkpIHsKLSAgICAgICAgR0MzRGVudW0gc3RvcmFnZUZvcm1hdCA9IHRleHR1cmVUb1N0b3JhZ2VG
b3JtYXQoZm9ybWF0KTsKLSAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT50ZXhTdG9y
YWdlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDEsIHN0b3JhZ2VGb3JtYXQs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBmb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7Ci0gICAgUmVzb3VyY2VJZCBp
ZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCBwb29s
LCAwLCBmYWxzZSwgZmFsc2UsIHNpemUsIGZvcm1hdH07Ci0gICAgbV9yZXNvdXJjZXMuYWRkKGlk
LCByZXNvdXJjZSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1DQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZUZyb21FeHRlcm5hbFRl
eHR1cmUodW5zaWduZWQgdGV4dHVyZUlkKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2Ug
cmVzb3VyY2UgPSB7dGV4dHVyZUlkLCAwLCAwLCBmYWxzZSwgdHJ1ZSwgSW50U2l6ZSgpLCAwfTsK
LSAgICBtX3Jlc291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0K
LXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlkIGlkKQot
ewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFj
b250ZXh0M2QpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAh
PSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQt
PnNlY29uZC5sb2NrRm9yUmVhZENvdW50KTsKLSAgICBpZiAoIWl0LT5zZWNvbmQuZXh0ZXJuYWwp
Ci0gICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vj
b25kLmdsSWQpKTsKLSAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwotfQotCi12b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6ZGVsZXRlT3duZWRSZXNvdXJjZXMoaW50IHBvb2wpCit2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2VQb29sKGludCBwb29sKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVmVjdG9yPFJlc291cmNlSWQ+IHRvRGVs
ZXRlOwotICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQucG9vbCA9PSBwb29sICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQorICAgIGZvciAoUmVz
b3VyY2VQb29sTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VQb29sTWFwLmJlZ2luKCk7IGl0
ICE9IG1fcmVzb3VyY2VQb29sTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vj
b25kID09IHBvb2wpCiAgICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKICAg
ICB9CiAgICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUu
YmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJlc291
cmNlKCppdCk7CiB9CiAKLXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1cGxvYWQoUmVzb3VyY2VJ
ZCBpZCwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEND
UmVzb3VyY2VQcm92aWRlcjo6cHV0UmVzb3VyY2VJblBvb2woUmVzb3VyY2VJZCByZXNvdXJjZUlk
LCBpbnQgcG9vbCkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAg
IEFTU0VSVChtX3RleFN1YkltYWdlLmdldCgpKTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQzZCkg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29t
cG9zaXRpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxv
Y2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotCi0gICAgY29udGV4dDNk
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5n
bElkKTsKLSAgICBtX3RleFN1YkltYWdlLT51cGxvYWQoaW1hZ2UsIGltYWdlUmVjdCwgc291cmNl
UmVjdCwgZGVzdFJlY3QsIGl0LT5zZWNvbmQuZm9ybWF0LCBjb250ZXh0M2QpOwotfQotCi11bnNp
Z25lZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQotewot
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25k
LmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNv
bmQubG9ja2VkRm9yV3JpdGUgPSB0cnVlOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdsSWQ7Ci19
Ci0KLXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlk
KQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5z
ZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsK
KyAgICBtX3Jlc291cmNlUG9vbE1hcC5hZGQocmVzb3VyY2VJZCwgcG9vbCk7CiB9CiAKLXZvaWQg
Q0NSZXNvdXJjZVByb3ZpZGVyOjpmbHVzaCgpCit2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6cmVt
b3ZlUmVzb3VyY2VGcm9tUG9vbChSZXNvdXJjZUlkIHJlc291cmNlSWQpCiB7Ci0gICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQzZCkgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9z
aXRpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29udGV4dDNkLT5mbHVzaCgpOwot
fQotCi1ib29sIENDUmVzb3VyY2VQcm92aWRlcjo6c2hhbGxvd0ZsdXNoSWZTdXBwb3J0ZWQoKQot
ewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFj
b250ZXh0M2QpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKG1fdXNlU2hhbGxvd0ZsdXNoKQotICAgICAgICBjb250ZXh0M2QtPnNoYWxsb3dGbHVzaENI
Uk9NSVVNKCk7Ci0gICAgcmV0dXJuIG1fdXNlU2hhbGxvd0ZsdXNoOwotfQotCi11bnNpZ25lZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCi17Ci0gICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUpOwotICAgICsrKGl0LT5zZWNvbmQu
bG9ja0ZvclJlYWRDb3VudCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2xJZDsKLX0KLQotdm9p
ZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkKLXsKLSAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgPiAwKTsKLSAgICAtLShp
dC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotfQotCi1DQ1Jlc291cmNlUHJvdmlkZXI6OkND
UmVzb3VyY2VQcm92aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fY29u
dGV4dChjb250ZXh0KQotICAgICwgbV9uZXh0SWQoMSkKLSAgICAsIG1fdXNlVGV4dHVyZVN0b3Jh
Z2VFeHQoZmFsc2UpCi0gICAgLCBtX3VzZVRleHR1cmVVc2FnZUhpbnQoZmFsc2UpCi0gICAgLCBt
X3VzZVNoYWxsb3dGbHVzaChmYWxzZSkKLSAgICAsIG1fbWF4VGV4dHVyZVNpemUoMCkKLXsKLX0K
LQotYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OmluaXRpYWxpemUoKQotewotICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250ZXh0M2QgfHwgIWNv
bnRleHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gY29udGV4dDNkLT5n
ZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGV4dGVuc2lvbnM7Ci0gICAgZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcsIGV4dGVuc2lv
bnMpOwotICAgIGJvb2wgdXNlTWFwU3ViID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zW2ld
ID09ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIikKLSAgICAgICAgICAgIG1fdXNlVGV4dHVyZVN0
b3JhZ2VFeHQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChleHRlbnNpb25zW2ldID09ICJHTF9B
TkdMRV90ZXh0dXJlX3VzYWdlIikKLSAgICAgICAgICAgIG1fdXNlVGV4dHVyZVVzYWdlSGludCA9
IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGV4dGVuc2lvbnNbaV0gPT0gIkdMX0NIUk9NSVVNX21h
cF9zdWIiKQotICAgICAgICAgICAgdXNlTWFwU3ViID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAo
ZXh0ZW5zaW9uc1tpXSA9PSAiR0xfQ0hST01JVU1fc2hhbGxvd19mbHVzaCIpCi0gICAgICAgICAg
ICBtX3VzZVNoYWxsb3dGbHVzaCA9IHRydWU7Ci0gICAgfQotCi0gICAgbV90ZXhTdWJJbWFnZSA9
IGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVTdWJJbWFnZSh1c2VNYXBTdWIpKTsKLSAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSkpOwotICAgIHJldHVybiB0cnVlOworICAg
IG1fcmVzb3VyY2VQb29sTWFwLnJlbW92ZShyZXNvdXJjZUlkKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Jlc291cmNlUHJvdmlkZXIuaAppbmRleCAwNjdjYWQ0OTBkNDUwNDk2Mzk5Y2M3MGQ4MmU5
MWQwNDhjMmRiMzU5Li5lMzk1Yjg3MTgyNDU3ODA3N2ZiODQ5MDYwZDc4YjEwMTg4ZmM5Yjk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Jlc291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaApAQCAtMjcsMjUgKzI3LDE1IEBACiAj
aWZuZGVmIENDUmVzb3VyY2VQcm92aWRlcl9oCiAjZGVmaW5lIENDUmVzb3VyY2VQcm92aWRlcl9o
CiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwotfQordHlwZWRlZiB1bnNpZ25lZCBp
bnQgR0MzRGVudW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQ7Ci1jbGFzcyBDQ1Njb3Bl
ZExvY2tSZXNvdXJjZUZvcldyaXRlOwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIExheWVyVGV4dHVy
ZVN1YkltYWdlOwogCiAvLyBUaHJlYWQtc2FmZXR5IG5vdGVzOiB0aGlzIGNsYXNzIGlzIG5vdCB0
aHJlYWQtc2FmZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkCiAvLyBmcm9tIHRoZSB0aHJlYWQgaXQg
d2FzIGNyZWF0ZWQgb24gKGluIHByYWN0aWNlLCB0aGUgY29tcG9zaXRvciB0aHJlYWQpLgpAQCAt
NTUsMTE4ICs0NSw1MCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBSZXNvdXJjZUlk
OwogICAgIGVudW0gVGV4dHVyZVVzYWdlSGludCB7IFRleHR1cmVVc2FnZUFueSwgVGV4dHVyZVVz
YWdlRnJhbWVidWZmZXIgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVzb3VyY2VQcm92
aWRlcj4gY3JlYXRlKENDR3JhcGhpY3NDb250ZXh0Kik7Ci0KICAgICB2aXJ0dWFsIH5DQ1Jlc291
cmNlUHJvdmlkZXIoKTsKIAotICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBo
aWNzQ29udGV4dDNEKCk7Ci0gICAgaW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhUZXh0dXJlU2l6ZTsgfQotICAgIHVuc2lnbmVkIG51bVJlc291cmNlcygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb3VyY2VzLnNpemUoKTsgfQorICAgIHZpcnR1YWwgaW50IG1heFRleHR1cmVT
aXplKCkgY29uc3QgeyByZXR1cm4gSU5UX01BWDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbnVt
UmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVBvb2xNYXAuc2l6ZSgpOyB9CiAK
ICAgICAvLyBDaGVja3Mgd2hldGhlciBhIHJlc291cmNlIGlzIGluIHVzZSBieSBhIGNvbnN1bWVy
LgotICAgIGJvb2wgaW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQpOworICAgIHZpcnR1YWwgYm9v
bCBpblVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCkgeyByZXR1cm4gZmFsc2U7IH0KIAogCiAgICAg
Ly8gUHJvZHVjZXIgaW50ZXJmYWNlLgogCiAgICAgLy8gQ3JlYXRlcyBhIHJlc291cmNlIG9mIHRo
ZSBnaXZlbiBzaXplL2Zvcm1hdCwgaW50byB0aGUgZ2l2ZW4gcG9vbC4KLSAgICBSZXNvdXJjZUlk
IGNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0
LCBUZXh0dXJlVXNhZ2VIaW50KTsKKyAgICB2aXJ0dWFsIFJlc291cmNlSWQgY3JlYXRlUmVzb3Vy
Y2UoaW50IHBvb2wsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2Fn
ZUhpbnQpID0gMDsKIAotICAgIC8vIFdyYXBzIGFuIGV4dGVybmFsIHRleHR1cmUgaW50byBhIHJl
c291cmNlLgotICAgIFJlc291cmNlSWQgY3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJl
KHVuc2lnbmVkIHRleHR1cmVJZCk7Ci0gICAgdm9pZCBkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVzb3VyY2UoUmVzb3VyY2VJZCkgPSAwOwogCi0g
ICAgLy8gRGVsZXRlcyBhbGwgcmVzb3VyY2VzIG93bmVkIGJ5IGEgZ2l2ZW4gcG9vbC4KLSAgICB2
b2lkIGRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKTsKKyAgICAvLyBEZWxldGVzIGFsbCBy
ZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcG9vbC4KKyAgICB2b2lkIGRlbGV0ZVJl
c291cmNlUG9vbChpbnQgcG9vbCk7CiAKICAgICAvLyBVcGxvYWQgZGF0YSBmcm9tIGltYWdlLCBj
b3B5aW5nIHNvdXJjZVJlY3QgKGluIGltYWdlKSBpbnRvIGRlc3RSZWN0IChpbiB0aGUgcmVzb3Vy
Y2UpLgotICAgIHZvaWQgdXBsb2FkKFJlc291cmNlSWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBj
b25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkKFJlc291cmNlSWQs
IGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CiAKICAgICAv
LyBGbHVzaCBhbGwgY29udGV4dCBvcGVyYXRpb25zLCBraWNraW5nIHVwbG9hZHMgYW5kIGVuc3Vy
aW5nIG9yZGVyaW5nIHdpdGgKICAgICAvLyByZXNwZWN0IHRvIG90aGVyIGNvbnRleHRzLgotICAg
IHZvaWQgZmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSB7IH0KIAogICAgIC8vIE9u
bHkgZmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGlmIHN1cHBvcnRlZC4KICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNoYWxsb3cgZmx1c2ggb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAg
ICBib29sIHNoYWxsb3dGbHVzaElmU3VwcG9ydGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZDsKLSAgICBmcmllbmQgY2xhc3MgQ0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZTsKLQotICAgIHN0cnVjdCBSZXNvdXJjZSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGdsSWQ7Ci0gICAgICAgIGludCBwb29sOwotICAgICAgICBpbnQgbG9ja0Zv
clJlYWRDb3VudDsKLSAgICAgICAgYm9vbCBsb2NrZWRGb3JXcml0ZTsKLSAgICAgICAgYm9vbCBl
eHRlcm5hbDsKLSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBHQzNEZW51bSBmb3JtYXQ7
Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VJZCwgUmVzb3VyY2U+IFJlc291
cmNlTWFwOwotCi0gICAgZXhwbGljaXQgQ0NSZXNvdXJjZVByb3ZpZGVyKENDR3JhcGhpY3NDb250
ZXh0Kik7Ci0gICAgYm9vbCBpbml0aWFsaXplKCk7Ci0KLSAgICAvLyBHZXRzIGEgR0wgdGV4dHVy
ZSBpZCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlLCB0aGF0IGNhbiBiZSByZW5kZXJlZCBpbnRv
LgotICAgIHVuc2lnbmVkIGxvY2tGb3JXcml0ZShSZXNvdXJjZUlkKTsKLSAgICB2b2lkIHVubG9j
a0ZvcldyaXRlKFJlc291cmNlSWQpOwotCi0gICAgLy8gR2V0cyBhIEdMIHRleHR1cmUgaWQgcmVw
cmVzZW50aW5nIHRoZSByZXNvdXJjZSwgdGhhdCBjYW4gYmUgcmVuZGVyZWQgd2l0aC4KLSAgICB1
bnNpZ25lZCBsb2NrRm9yUmVhZChSZXNvdXJjZUlkKTsKLSAgICB2b2lkIHVubG9ja0ZvclJlYWQo
UmVzb3VyY2VJZCk7Ci0KLSAgICBDQ0dyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJl
c291cmNlSWQgbV9uZXh0SWQ7Ci0gICAgUmVzb3VyY2VNYXAgbV9yZXNvdXJjZXM7Ci0KLSAgICBi
b29sIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7Ci0gICAgYm9vbCBtX3VzZVRleHR1cmVVc2FnZUhp
bnQ7Ci0gICAgYm9vbCBtX3VzZVNoYWxsb3dGbHVzaDsKLSAgICBPd25QdHI8TGF5ZXJUZXh0dXJl
U3ViSW1hZ2U+IG1fdGV4U3ViSW1hZ2U7Ci0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci19Owot
Ci1jbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCk7Ci1wdWJsaWM6Ci0gICAgQ0NTY29w
ZWRMb2NrUmVzb3VyY2VGb3JSZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
ciwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQpCi0gICAgICAgIDog
bV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgICwgbV9yZXNvdXJj
ZUlkKHJlc291cmNlSWQpCi0gICAgICAgICwgbV90ZXh0dXJlSWQocmVzb3VyY2VQcm92aWRlci0+
bG9ja0ZvclJlYWQocmVzb3VyY2VJZCkpIHsgfQotCi0gICAgfkNDU2NvcGVkTG9ja1Jlc291cmNl
Rm9yUmVhZCgpCi0gICAgewotICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXItPnVubG9ja0ZvclJl
YWQobV9yZXNvdXJjZUlkKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQotCi1wcml2YXRlOgotICAgIENDUmVzb3VyY2VQcm92
aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOwotICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2VJZCBtX3Jlc291cmNlSWQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Ci19OworICAgIHZp
cnR1YWwgYm9vbCBzaGFsbG93Rmx1c2hJZlN1cHBvcnRlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LWNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUpOwotcHVibGljOgotICAgIENDU2Nv
cGVkTG9ja1Jlc291cmNlRm9yV3JpdGUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgcmVzb3VyY2VJZCkKLSAgICAgICAg
OiBtX3Jlc291cmNlUHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAgLCBtX3Jlc291
cmNlSWQocmVzb3VyY2VJZCkKLSAgICAgICAgLCBtX3RleHR1cmVJZChyZXNvdXJjZVByb3ZpZGVy
LT5sb2NrRm9yV3JpdGUocmVzb3VyY2VJZCkpIHsgfQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIGlzIGFuIGluc3RhbmNlIG9mIENDUmVzb3VyY2VQcm92aWRlckdMLgorICAgIHZpcnR1YWwg
Ym9vbCBpc1Jlc291cmNlUHJvdmlkZXJHTCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB+Q0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZSgpCi0gICAgewotICAgICAgICBtX3Jlc291cmNlUHJv
dmlkZXItPnVubG9ja0ZvcldyaXRlKG1fcmVzb3VyY2VJZCk7Ci0gICAgfQorcHJvdGVjdGVkOgor
ICAgIENDUmVzb3VyY2VQcm92aWRlcigpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBSZXNvdXJjZUlkIGdlbmVyYXRlUmVzb3Vy
Y2VJZCgpIHsgcmV0dXJuIG1fbmV4dElkKys7IH0KKyAgICB2b2lkIHB1dFJlc291cmNlSW5Qb29s
KFJlc291cmNlSWQsIGludCBwb29sKTsKKyAgICB2b2lkIHJlbW92ZVJlc291cmNlRnJvbVBvb2wo
UmVzb3VyY2VJZCk7CiAKIHByaXZhdGU6Ci0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiBtX3Jlc291
cmNlUHJvdmlkZXI7Ci0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1fcmVzb3Vy
Y2VJZDsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVz
b3VyY2VJZCwgaW50PiBSZXNvdXJjZVBvb2xNYXA7CisgICAgUmVzb3VyY2VQb29sTWFwIG1fcmVz
b3VyY2VQb29sTWFwOworICAgIFJlc291cmNlSWQgbV9uZXh0SWQ7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmNwcAppbmRleCA3Y2JiZWNlMTY4ODM4NzhjNDk3N2Q0
ZjlhYTQ4NTZlODAxY2NiMTgzLi41MGUwM2MzOWRlZTA1NTA4ZDc5YWQzMGJkMmRiY2MwZjFlZDcx
OTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkU2luay5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJv
dmlkZXJHTC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZURyYXdRdWFkLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUzLDcgKzU0LDEwIEBAIENDVGV4dHVyZUxheWVySW1wbDo6fkNDVGV4
dHVyZUxheWVySW1wbCgpCiB2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6d2lsbERyYXcoQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewogICAgIEFTU0VSVCghbV9leHRlcm5h
bFRleHR1cmVSZXNvdXJjZSk7Ci0gICAgbV9leHRlcm5hbFRleHR1cmVSZXNvdXJjZSA9IHJlc291
cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlRnJvbUV4dGVybmFsVGV4dHVyZShtX3RleHR1cmVJ
ZCk7CisKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlci0+aXNSZXNvdXJjZVByb3ZpZGVyR0wo
KSk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyR0wqIHJlc291cmNlUHJvdmlkZXJHTCA9IHN0YXRp
Y19jYXN0PENDUmVzb3VyY2VQcm92aWRlckdMKj4ocmVzb3VyY2VQcm92aWRlcik7CittX2V4dGVy
bmFsVGV4dHVyZVJlc291cmNlID0gcmVzb3VyY2VQcm92aWRlckdMLT5jcmVhdGVSZXNvdXJjZUZy
b21FeHRlcm5hbFRleHR1cmUobV90ZXh0dXJlSWQpOwogfQogCiB2b2lkIENDVGV4dHVyZUxheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkU2luayYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCBmYTIwMWQxMTI2YmE0YmIwOWU4NjdjNTcyYzIyOWI3MmQ5NzliOTk1Li5l
MTQ2M2ViOWVjYTc3NjVkNzE3MDQzYzE0MDNjMTFkMTQ0YWZiZDBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NRdWFkU2luay5oIgotI2luY2x1ZGUgImNjL0NDUmVzb3VyY2VQcm92aWRlci5oIgorI2luY2x1
ZGUgImNjL0NDUmVzb3VyY2VQcm92aWRlckdMLmgiCiAjaW5jbHVkZSAiY2MvQ0NTdHJlYW1WaWRl
b0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJjYy9DQ1lVVlZpZGVvRHJhd1F1YWQuaCIKQEAgLTE3Myw4ICsxNzMsMTEgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFsKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3Vy
Y2VQcm92aWRlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2Zvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKLSAgICAgICAgbV9leHRlcm5hbFRleHR1
cmVSZXNvdXJjZSA9IHJlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlRnJvbUV4dGVybmFs
VGV4dHVyZShtX2ZyYW1lLT50ZXh0dXJlSWQoKSk7CisgICAgaWYgKG1fZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIEFTU0VSVChyZXNvdXJjZVByb3Zp
ZGVyLT5pc1Jlc291cmNlUHJvdmlkZXJHTCgpKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
R0wqIHJlc291cmNlUHJvdmlkZXJHTCA9IHN0YXRpY19jYXN0PENDUmVzb3VyY2VQcm92aWRlckdM
Kj4ocmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fZXh0ZXJuYWxUZXh0dXJlUmVzb3VyY2Ug
PSByZXNvdXJjZVByb3ZpZGVyR0wtPmNyZWF0ZVJlc291cmNlRnJvbUV4dGVybmFsVGV4dHVyZSht
X2ZyYW1lLT50ZXh0dXJlSWQoKSk7CisgICAgfQogfQogCiB2b2lkIENDVmlkZW9MYXllckltcGw6
OmFwcGVuZFF1YWRzKENDUXVhZFNpbmsmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sJikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157135</attachid>
            <date>2012-08-08 00:09:21 -0700</date>
            <delta_ts>2012-08-09 12:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93442-20120808000856.patch</filename>
            <type>text/plain</type>
            <size>58181</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0OTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU4M2ZmMzI3OWMzYzg4
Y2M3Zjc3N2Y1ODM2NDI3OWYxZWQ4ZTRiOC4uOWY3MjY4ZDUzNzc4ZGRmNTViMDkyMDViYWQ5YjEw
ZDBmNmRiM2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA4LTA3ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEJh
c2UgY2xhc3MgZm9yIENDUmVzb3VyY2VQcm92aWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJIG1hZGUgQ0NSZXNvdXJjZVByb3ZpZGVyIGludG8gYSBi
YXNlIGNsYXNzIGFuZCBtb3ZlZCB0aGUgY3VycmVudAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBp
bnRvIGEgbmV3IGNsYXNzIENDUmVzb3VyY2VQcm92aWRlckdMLiAgVGhpcyB3aWxsIGJlCisgICAg
ICAgIHRoZSBiYXNpcyBmb3IgZnV0dXJlIHViZXJjb21wLWxlYWYgYW5kIHNvZnR3YXJlIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICBTb21lIHVzZXJzIHJlcXVpcmVkIGRvd25jYXN0cyB0byB0
aGUgR0wgaW1wbGVtZW50YXRpb24sIGVpdGhlciBiZWNhdXNlCisgICAgICAgIHRoZXkgd2FudGVk
IHRvIHB1bGwgaXRzIEdyYXBoaWNzQ29udGV4dDNEIG9yIGJlY2F1c2UgdGhleSB3ZXJlIGdpdmlu
ZworICAgICAgICBpdCBhbiBleHRlcm5hbCB0ZXh0dXJlIElELiAgVGhleSBhcmU6CisgICAgICAg
ICAgLSBHYW5lc2gtYmFzZWQgcGFpbnRpbmcKKyAgICAgICAgICAtIFRleHR1cmVMYXllcgorICAg
ICAgICAgIC0gVmlkZW8gbGF5ZXIgd2l0aCBURVhUVVJFXzJEIHNldAorICAgICAgICAgIC0gSU9T
dXJmYWNlTGF5ZXIKKyAgICAgICAgSSBhZGRlZCBhbiBhc3NlcnRpb24gZm9yIHRoZSBmaXJzdCB0
aHJlZSwgYXMgdGhlIHVzZXIgbXVzdCBlbnN1cmUgdGhleQorICAgICAgICBhcmUgbmV2ZXIgaW52
b2tlZCBhbnl3YXkuICBGb3IgSU9TdXJmYWNlTGF5ZXIsIEkgYWRkZWQgYSByZXR1cm4gYXMgaXQK
KyAgICAgICAgbG9va3MgbGlrZSBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG1heSBiZSBwb3Nz
aWJsZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKG5vLW9wIHJlZmFjdG9yaW5nKS4KKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlkZW9RdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVm
ZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlc291cmNlUHJvdmlkZXIp
OgorICAgICAgICAoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0lPU3VyZmFjZUxheWVySW1wbDo6d2lsbERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92
aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVzb3Vy
Y2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0
ZVJlc291cmNlUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnB1
dFJlc291cmNlSW5Qb29sKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6
cmVtb3ZlUmVzb3VyY2VGcm9tUG9vbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6bWF4VGV4dHVyZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpudW1SZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjppblVzZUJ5Q29uc3VtZXIpOgorICAgICAgICAo
Q0NSZXNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRl
cjo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpzaGFsbG93
Rmx1c2hJZlN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmlzUmVzb3VyY2VQcm92aWRlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6Z2VuZXJhdGVSZXNvdXJjZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlTGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFsKToKKwogMjAxMi0wOC0wNyAgTWlrZSBSZWVk
ICA8cmVlZEBnb29nbGUuY29tPgogCiAgICAgICAgIHJlaW1wbGVtZW50IGZhc3RNb2Qgdy9vIChz
b29uIHRvIGJlKSBwcml2YXRlIHNraWEgbWFjcm9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjhlMTZh
MjMzMTNlMDE0Yzg5Zjg4YWE0M2I4OGVhODIzMTIwZTI1NC4uYWZkNjdiNzdiZmI4ZWE3MzBlNmRk
MTgwOWU2NDk5NDc4MGViMWFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODM4Miw2ICs4MzgyLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmlu
Z1N0YXRzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVzb3VyY2VQcm92aWRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlckdMLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVy
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hl
ZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmlu
ZGV4IGEwZTg1N2U5ZDRiYzVlYTc5MjQ5Mjk1ZjkwNjFiZjRhZGRmMjUzNDcuLmMwYzA4ZWIzMGQ0
ODk4ZjNjYzU0NjhkZjRjMGVjN2MyZTJjZTIzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVkZSAi
U2tHcHVEZXZpY2UuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZXNvdXJjZVByb3ZpZGVyR0wuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0
M0QuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaD4KIApA
QCAtNzMsNyArNzQsOSBAQCB2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChDQ1Jlc291cgogICAgIEdyQ29udGV4dCog
c2hhcmVkR3JDb250ZXh0ID0gQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpID8gV2ViU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvbXBvc2l0b3JUaHJlYWRHckNvbnRleHQoKSA6IFdlYlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjptYWluVGhyZWFkR3JDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFyZWRD
b250ZXh0IHx8ICFzaGFyZWRHckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICB0ZXh0dXJl
VXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChzaGFyZWRDb250ZXh0LCBzaGFyZWRHckNvbnRl
eHQsIHJlc291cmNlUHJvdmlkZXIsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwor
ICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyLT5pc1Jlc291cmNlUHJvdmlkZXJHTCgpKTsKKyAg
ICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlckdMID0gc3RhdGljX2Nhc3Q8
Q0NSZXNvdXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICB0ZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChzaGFyZWRDb250ZXh0LCBzaGFyZWRHckNvbnRleHQs
IHJlc291cmNlUHJvdmlkZXJHTCwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiB9
CiAKIFBhc3NSZWZQdHI8RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQpAQCAtMTAxLDEzICsx
MDQsMTMgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXAKICAgICByZXR1cm4gTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KFdlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHckNvbnRleHQqIGdyQ29udGV4dCwgQ0NSZXNvdXJj
ZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2
b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
VGV4dHVyZVJlY3QoV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdyQ29udGV4dCogZ3JD
b250ZXh0LCBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlciwgQ0NQcmlvcml0
aXplZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBnYW5lc2ggdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgogICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgdGV4dHVyZS0+YWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwotICAg
IENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUgbG9jayhyZXNvdXJjZVByb3ZpZGVyLCB0ZXh0
dXJlLT5yZXNvdXJjZUlkKCkpOworICAgIENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JXcml0ZSBs
b2NrKHJlc291cmNlUHJvdmlkZXIsIHRleHR1cmUtPnJlc291cmNlSWQoKSk7CiAgICAgLy8gQ3Jl
YXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgogICAgIE93blB0cjxTa0NhbnZh
cz4gY2FudmFzID0gY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoZ3JDb250ZXh0LCB0ZXh0dXJlLT5z
aXplKCksIGxvY2sudGV4dHVyZUlkKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4
IDY0ZDVlZWMzODE2ZGQ0NDgxODQwYTkwNjhiZGExZjE2ZDkyYjM5YmUuLjBjZWFiNzVkYmZmYmI4
NDE3NTRmZjdmMTBlMjNlMjZlYjQxMzk0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBA
IC00MCw2ICs0MCw4IEBAIGNsYXNzIFdlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDUmVzb3VyY2VQcm92aWRlckdMOworCiAvLyBUaGlz
IGNsYXNzIHJlY29yZHMgdGhlIGNvbnRlbnRSZWN0IGludG8gYW4gU2tQaWN0dXJlLCB0aGVuIHVz
ZXMgYWNjZWxlcmF0ZWQKIC8vIGRyYXdpbmcgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlLiBUaGUgYWNj
ZWxlcmF0ZWQgZHJhd2luZyBnb2VzIHRvIGFuCiAvLyBpbnRlcm1lZGlhdGUgZnJhbWVidWZmZXIg
YW5kIHRoZW4gaXMgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIG9uY2UgZG9uZS4K
QEAgLTYzLDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpIE9WRVJSSURFOwotICAgIHZv
aWQgdXBkYXRlVGV4dHVyZVJlY3QoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIEdyQ29u
dGV4dCosIENDUmVzb3VyY2VQcm92aWRlciosIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIEdyQ29udGV4
dCosIENDUmVzb3VyY2VQcm92aWRlckdMKiwgQ0NQcmlvcml0aXplZFRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDY0OWU2MTA0MTdjMjM2NjYwMWUyNWNlY2JkMTZlNDQy
MjJmZTUzY2YuLmNmNzNkNmFhMDI0MzU0YzNmMDI0NjE5OWZjNjA0OTdjNTlkMmEwYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyR0wuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKICNpbmNsdWRl
ICJjYy9DQ1NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpA
QCAtMTU0LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ29tcGxldGU7CiB9Owog
Ci1QYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUoQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0
aW5nKQorUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNvdXJjZVByb3ZpZGVy
R0wqIHJlc291cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2Fk
ZXJTZXR0aW5nKQogewogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVu
ZGVyZXIoYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIHJlc291cmNl
UHJvdmlkZXIsIHRleHR1cmVVcGxvYWRlclNldHRpbmcpKSk7CiAgICAgaWYgKCFsYXllclJlbmRl
cmVyLT5pbml0aWFsaXplKCkpCkBAIC0xNjQsNyArMTY1LDcgQEAgUGFzc093blB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJD
bGllbnQKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0o
Q0NSZW5kZXJlckNsaWVudCogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3Zp
ZGVyR0wqIHJlc291cmNlUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGlu
ZykKICAgICA6IENDUmVuZGVyZXIoY2xpZW50KQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKDApCkBAIC01MzgsNyArNTM5LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogCiAgICAg
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5mbHVzaCgpOwogCi0gICAgQ0NTY29wZWRMb2NrUmVz
b3VyY2VGb3JXcml0ZSBsb2NrKGxheWVyUmVuZGVyZXItPnJlc291cmNlUHJvdmlkZXIoKSwgc291
cmNlVGV4dHVyZS0+aWQoKSk7CisgICAgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlIGxv
Y2sobGF5ZXJSZW5kZXJlci0+cmVzb3VyY2VQcm92aWRlcigpLCBzb3VyY2VUZXh0dXJlLT5pZCgp
KTsKICAgICBTa0JpdG1hcCBzb3VyY2UgPSBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShm
aWx0ZXJzLCBsb2NrLnRleHR1cmVJZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNv
bnRleHQsIGZpbHRlckdyQ29udGV4dCk7CiAgICAgcmV0dXJuIHNvdXJjZTsKIH0KQEAgLTY0MCwy
MCArNjQxLDIwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1
YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kCiAgICAgLy8gRklYTUU6IENhY2hl
IHRoaXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGZvciBib3RoIHRoZSBz
dXJmYWNlIGFuZCBpdHMgcmVwbGljYS4KICAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250
ZW50cyB0ZXh0dXJlLgogICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0
aGlzLCByZW5kZXJQYXNzLT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7Ci0gICAgT3duUHRy
PENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZD4gY29udGVudHNSZXNvdXJjZUxvY2s7CisgICAg
T3duUHRyPENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkPiBjb250ZW50c1Jlc291cmNlTG9j
azsKICAgICB1bnNpZ25lZCBjb250ZW50c1RleHR1cmVJZCA9IDA7CiAgICAgaWYgKGZpbHRlckJp
dG1hcC5nZXRUZXh0dXJlKCkpIHsKICAgICAgICAgR3JUZXh0dXJlKiB0ZXh0dXJlID0gcmVpbnRl
cnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKTsKICAgICAg
ICAgY29udGVudHNUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgY29udGVudHNSZXNvdXJjZUxvY2sgPSBhZG9wdFB0cihuZXcgQ0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkKG1fcmVzb3VyY2VQcm92aWRlciwgY29udGVudHNUZXh0
dXJlLT5pZCgpKSk7CisgICAgICAgIGNvbnRlbnRzUmVzb3VyY2VMb2NrID0gYWRvcHRQdHIobmV3
IENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkKG1fcmVzb3VyY2VQcm92aWRlciwgY29udGVu
dHNUZXh0dXJlLT5pZCgpKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNS
ZXNvdXJjZUxvY2stPnRleHR1cmVJZCgpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGJhY2tn
cm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUuCiAgICAgaWYgKGJhY2tncm91bmRUZXh0dXJl
KSB7CiAgICAgICAgIEFTU0VSVChiYWNrZ3JvdW5kVGV4dHVyZS0+c2l6ZSgpID09IHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpKTsKLSAgICAgICAgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkIGxv
Y2sobV9yZXNvdXJjZVByb3ZpZGVyLCBiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSk7CisgICAgICAg
IENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkIGxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCBi
YWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSk7CiAgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZl
cihmcmFtZSwgbG9jay50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3QoKSwgcXVhZC0+cXVhZFRy
YW5zZm9ybSgpKTsKICAgICB9CiAKQEAgLTY3MCwxMCArNjcxLDEwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgQ0NSZW5kCiAgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rp
c3RhbmNlKCk7CiAgICAgfQogCi0gICAgT3duUHRyPENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVh
ZD4gbWFza1Jlc291cmNlTG9jazsKKyAgICBPd25QdHI8Q0NTY29wZWRMb2NrR0xSZXNvdXJjZUZv
clJlYWQ+IG1hc2tSZXNvdXJjZUxvY2s7CiAgICAgdW5zaWduZWQgbWFza1RleHR1cmVJZCA9IDA7
CiAgICAgaWYgKHF1YWQtPm1hc2tSZXNvdXJjZUlkKCkpIHsKLSAgICAgICAgbWFza1Jlc291cmNl
TG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQobV9yZXNvdXJj
ZVByb3ZpZGVyLCBxdWFkLT5tYXNrUmVzb3VyY2VJZCgpKSk7CisgICAgICAgIG1hc2tSZXNvdXJj
ZUxvY2sgPSBhZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvclJlYWQobV9yZXNv
dXJjZVByb3ZpZGVyLCBxdWFkLT5tYXNrUmVzb3VyY2VJZCgpKSk7CiAgICAgICAgIG1hc2tUZXh0
dXJlSWQgPSBtYXNrUmVzb3VyY2VMb2NrLT50ZXh0dXJlSWQoKTsKICAgICB9CiAKQEAgLTg1NCw3
ICs4NTUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKERyYXdp
bmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGlsZURyYXdRdQogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7CiAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uLCAwKSk7CiAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOwotICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBxdWFkUmVz
b3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKKyAgICBD
Q1Njb3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQ
cm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3Vy
Y2VMb2NrLnRleHR1cmVJZCgpKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIHF1YWQtPnRl
eHR1cmVGaWx0ZXIoKSkpOwpAQCAtOTYxLDkgKzk2Miw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3WVVWVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVW
VmlkCiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdVBsYW5lID0gcXVh
ZC0+dVBsYW5lKCk7CiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdlBs
YW5lID0gcXVhZC0+dlBsYW5lKCk7CiAKLSAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQg
eVBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHlQbGFuZS5yZXNvdXJjZUlkKTsKLSAgICBD
Q1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgdVBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIs
IHVQbGFuZS5yZXNvdXJjZUlkKTsKLSAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgdlBs
YW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHZQbGFuZS5yZXNvdXJjZUlkKTsKKyAgICBDQ1Nj
b3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCB5UGxhbmVMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwg
eVBsYW5lLnJlc291cmNlSWQpOworICAgIENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkIHVQ
bGFuZUxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCB1UGxhbmUucmVzb3VyY2VJZCk7CisgICAgQ0NT
Y29wZWRMb2NrR0xSZXNvdXJjZUZvclJlYWQgdlBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIs
IHZQbGFuZS5yZXNvdXJjZUlkKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7CiAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
eVBsYW5lTG9jay50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKQEAgLTEwNzIsNyAr
MTA3Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUZXh0dXJlCiAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdXZSZWN0Lngo
KSwgdXZSZWN0LnkoKSwgdXZSZWN0LndpZHRoKCksIHV2UmVjdC5oZWlnaHQoKSkpOwogCiAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCkpOwotICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBxdWFkUmVzb3Vy
Y2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKKyAgICBDQ1Nj
b3BlZExvY2tHTFJlc291cmNlRm9yUmVhZCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92
aWRlciwgcXVhZC0+cmVzb3VyY2VJZCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3VyY2VM
b2NrLnRleHR1cmVJZCgpKSk7CiAKICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBw
YXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hl
cmUKQEAgLTEzNjEsNyArMTM2Miw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRG
cmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zCiAgICAgaWYg
KCF0ZXh0dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9v
bCwgZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IsIENDUmVzb3VyY2VQ
cm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZSBsb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4
dHVyZS0+aWQoKSk7CisgICAgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlIGxvY2sobV9y
ZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBsb2NrLnRl
eHR1cmVJZCgpKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZS0+Zm9ybWF0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VSZWN0Lngo
KSwgZGV2aWNlUmVjdC55KCksIGRldmljZVJlY3Qud2lkdGgoKSwgZGV2aWNlUmVjdC5oZWlnaHQo
KSwgMCkpOwpAQCAtMTQxMCw3ICsxNDExLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdAogICAg
IEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3Jl
ZW5GcmFtZWJ1ZmZlcklkKSk7Ci0gICAgZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFk
b3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92aWRl
ciwgdGV4dHVyZS0+aWQoKSkpOworICAgIGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2sgPSBh
ZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrR0xSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92
aWRlciwgdGV4dHVyZS0+aWQoKSkpOwogICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IGZyYW1lLmN1
cnJlbnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpOwogICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCA2ODQyZjBjYzU5NTRiZGY3ZWJjMzlmNmMzZWY5NzE5NDNlOTNkYWRk
Li43MzdkNGU1ZGUzODljY2M1NDRhMTI4NTNlZTRkM2NkZjgxYmVkNTFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNjL0ND
SU9TdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJv
dmlkZXJHTC5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTdHJlYW1WaWRlb0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJh
d1F1YWQuaCIKQEAgLTY1LDcgKzY2LDcgQEAgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDog
cHVibGljIENDUmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NDb250ZXh0TG9zdENhbGxi
YWNrIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclJlbmRlcmVyQ2hyb21pdW0pOwog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3Jl
YXRlKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2Fk
ZXJPcHRpb24pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXJHTCosIFRleHR1cmVV
cGxvYWRlck9wdGlvbik7CiAKICAgICB2aXJ0dWFsIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsK
IApAQCAtMTAzLDEwICsxMDQsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGUoYm9vbCkgT1ZFUlJJREU7CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUHJvdmlkZXI7IH0KKyAgICBDQ1Jl
c291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VQcm92aWRlcjsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
KENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2FkZXJP
cHRpb24pOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiwgQ0NS
ZXNvdXJjZVByb3ZpZGVyR0wqLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOwogCiAKICAgICBib29s
IGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJE
aXNjYXJkZWQ7IH0KQEAgLTEyMCw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzOwogICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IGN1cnJlbnRSZW5kZXJQYXNzOwogICAgICAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJl
bnRUZXh0dXJlOwotICAgICAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4g
Y3VycmVudEZyYW1lYnVmZmVyTG9jazsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkTG9ja0dMUmVz
b3VyY2VGb3JXcml0ZT4gY3VycmVudEZyYW1lYnVmZmVyTG9jazsKIAogICAgICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4OwpAQCAtMjcxLDcgKzI3Miw3
IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8U29saWRDb2xvclByb2dyYW0+IG1fc29saWRDb2xv
clByb2dyYW07CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIG1fcmVzb3VyY2VQcm92aWRlcjsK
KyAgICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0
cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8
VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJT1N1cmZhY2VMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJ
T1N1cmZhY2VMYXllckltcGwuY3BwCmluZGV4IDQ3M2RlMjU5YjhlYWVhYmRlZDlkNmViZWY5N2I3
YzQyNjVkMWNiZDMuLmM0ZTc0YTYzMjdiNDIwNWM5MmMyZjI3OGQyNTZhY2Y5MGZiMDEzOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SU9TdXJmYWNlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHAKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUXVhZFNpbmsuaCIKKyNpbmNsdWRl
ICJjYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGlj
c0NvbnRleHQzRC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSwxMSArNjYsMTIgQEAg
dm9pZCBDQ0lPU3VyZmFjZUxheWVySW1wbDo6d2lsbERyYXcoQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpZGVyKQogICAgIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhyZXNvdXJjZVByb3Zp
ZGVyKTsKIAogICAgIGlmIChtX2lvU3VyZmFjZUNoYW5nZWQpIHsKLSAgICAgICAgV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gcmVzb3VyY2VQcm92aWRlci0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0M2QpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFyZXNvdXJjZVByb3ZpZGVyLT5pc1Jlc291
cmNlUHJvdmlkZXJHTCgpKSB7CisgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBh
dGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlckdMID0gc3Rh
dGljX2Nhc3Q8Q0NSZXNvdXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAg
ICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gcmVzb3VyY2VQcm92
aWRlckdMLT5ncmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlz
IGluIGEgd2F5IHRoYXQgd2UgY2FuIHRyYWNrIG1lbW9yeSB1c2FnZS4KICAgICAgICAgaWYgKCFt
X2lvU3VyZmFjZVRleHR1cmVJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKaW5kZXggNWFjMTkzMTg2MjdjMjllM2JkNzZmYmE2OWY1YjUxZjI2MzAzN2Y4NC4uMmJmOTZi
NjQxNmRiYWI1N2I0YzRiMWQ3ZTM1YTljMWQwYTA4YjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTUxOSw3ICs1MTksNyBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgbV9yZXNvdXJj
ZVByb3ZpZGVyLT5kZWxldGVPd25lZFJlc291cmNlcyhDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7
CisgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZVBvb2woQ0NSZW5kZXJlcjo6
Q29udGVudFBvb2wpOwogICAgIG1fY29udGVudHNUZXh0dXJlc1dlcmVQdXJnZWRTaW5jZUxhc3RD
b21taXQgPSB0cnVlOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OwogfQpAQCAtNjg1LDcgKzY4NSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4KICAgICB9CiAK
ICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHRSZWYoY29udGV4dCk7Ci0gICAg
T3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKGNvbnRleHRSZWYuZ2V0KCkpOworICAgIE93blB0cjxDQ1Jlc291cmNl
UHJvdmlkZXJHTD4gcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlckdMOjpjcmVh
dGUoY29udGV4dDNkKTsKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJl
bmRlcmVyOwogICAgIGlmIChyZXNvdXJjZVByb3ZpZGVyLmdldCgpKQogICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgcmVzb3VyY2VQcm92
aWRlci5nZXQoKSwgdGV4dHVyZVVwbG9hZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJv
dmlkZXIuY3BwCmluZGV4IDQ5YzNiMjQzZjUxMzQwNWNjN2Y4Y2Q0NDU5MWUxMGFiYWVlZTYxNjUu
LmVmYTQxOTU5Yzk3NGUxMjdlNmE3ZWI1NjA5M2I3MmE4ODU0YjY2OGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92
aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApAQCAtMSwyNjcgKzEsNjQgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqCiAgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9y
IHRoZSBHTEMoKSBtYWNybwotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCi0jaW5j
bHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCi0j
aW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+Ci0KLXVzaW5nIFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEdD
M0RlbnVtIHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsK
LSAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEOjpSR0JBOF9PRVM7Ci0g
ICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOgot
ICAgICAgICBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkJHUkE4X0VYVDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdG9yYWdlRm9ybWF0Owot
fQotCi1zdGF0aWMgYm9vbCBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKEdDM0Rl
bnVtIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSB8fCBmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVCk7Ci19Ci0KLVBhc3NPd25Q
dHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShDQ0dyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK0NDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3Zp
ZGVyKCkKKyAgICA6IG1fbmV4dElkKDEpCiB7Ci0gICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRl
cj4gcmVzb3VyY2VQcm92aWRlcihhZG9wdFB0cihuZXcgQ0NSZXNvdXJjZVByb3ZpZGVyKGNvbnRl
eHQpKSk7Ci0gICAgaWYgKCFyZXNvdXJjZVByb3ZpZGVyLT5pbml0aWFsaXplKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXNvdXJjZVByb3ZpZGVyLnJlbGVhc2UoKTsK
IH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjp+Q0NSZXNvdXJjZVByb3ZpZGVyKCkKIHsKIH0KIAot
V2ViR3JhcGhpY3NDb250ZXh0M0QqIENDUmVzb3VyY2VQcm92aWRlcjo6Z3JhcGhpY3NDb250ZXh0
M0QoKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci19Ci0KLWJvb2wgQ0NSZXNvdXJjZVByb3ZpZGVyOjpp
blVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCBpZCkKLXsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwotICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgcmV0
dXJuICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50OwotfQotCi1DQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9v
bCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50
IGhpbnQpCi17Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICB1bnNp
Z25lZCB0ZXh0dXJlSWQgPSAwOwotICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qg
PSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dDNkKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4K
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEdMQyhjb250ZXh0M2QsIHRleHR1cmVJZCA9
IGNvbnRleHQzZC0+Y3JlYXRlVGV4dHVyZSgpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0
M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQp
KTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250
ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpKTsKLSAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICBHTEMoY29udGV4dDNk
LCBjb250ZXh0M2QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKLQotICAgIGlmIChtX3VzZVRleHR1cmVVc2FnZUhpbnQgJiYgaGludCA9
PSBUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlcikKLSAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4
dDNkLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKTsKLSAgICBpZiAobV91c2VUZXh0
dXJlU3RvcmFnZUV4dCAmJiBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKGZvcm1h
dCkpIHsKLSAgICAgICAgR0MzRGVudW0gc3RvcmFnZUZvcm1hdCA9IHRleHR1cmVUb1N0b3JhZ2VG
b3JtYXQoZm9ybWF0KTsKLSAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT50ZXhTdG9y
YWdlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDEsIHN0b3JhZ2VGb3JtYXQs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBmb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7Ci0gICAgUmVzb3VyY2VJZCBp
ZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCBwb29s
LCAwLCBmYWxzZSwgZmFsc2UsIHNpemUsIGZvcm1hdH07Ci0gICAgbV9yZXNvdXJjZXMuYWRkKGlk
LCByZXNvdXJjZSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1DQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZUZyb21FeHRlcm5hbFRl
eHR1cmUodW5zaWduZWQgdGV4dHVyZUlkKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2Ug
cmVzb3VyY2UgPSB7dGV4dHVyZUlkLCAwLCAwLCBmYWxzZSwgdHJ1ZSwgSW50U2l6ZSgpLCAwfTsK
LSAgICBtX3Jlc291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0K
LXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlkIGlkKQot
ewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFj
b250ZXh0M2QpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAh
PSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQt
PnNlY29uZC5sb2NrRm9yUmVhZENvdW50KTsKLSAgICBpZiAoIWl0LT5zZWNvbmQuZXh0ZXJuYWwp
Ci0gICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vj
b25kLmdsSWQpKTsKLSAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwotfQotCi12b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6ZGVsZXRlT3duZWRSZXNvdXJjZXMoaW50IHBvb2wpCit2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2VQb29sKGludCBwb29sKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVmVjdG9yPFJlc291cmNlSWQ+IHRvRGVs
ZXRlOwotICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQucG9vbCA9PSBwb29sICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQorICAgIGZvciAoUmVz
b3VyY2VQb29sTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VQb29sTWFwLmJlZ2luKCk7IGl0
ICE9IG1fcmVzb3VyY2VQb29sTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vj
b25kID09IHBvb2wpCiAgICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKICAg
ICB9CiAgICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUu
YmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJlc291
cmNlKCppdCk7CiB9CiAKLXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1cGxvYWQoUmVzb3VyY2VJ
ZCBpZCwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEND
UmVzb3VyY2VQcm92aWRlcjo6cHV0UmVzb3VyY2VJblBvb2woUmVzb3VyY2VJZCByZXNvdXJjZUlk
LCBpbnQgcG9vbCkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAg
IEFTU0VSVChtX3RleFN1YkltYWdlLmdldCgpKTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQzZCkg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29t
cG9zaXRpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxv
Y2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotCi0gICAgY29udGV4dDNk
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5n
bElkKTsKLSAgICBtX3RleFN1YkltYWdlLT51cGxvYWQoaW1hZ2UsIGltYWdlUmVjdCwgc291cmNl
UmVjdCwgZGVzdFJlY3QsIGl0LT5zZWNvbmQuZm9ybWF0LCBjb250ZXh0M2QpOwotfQotCi11bnNp
Z25lZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQotewot
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25k
LmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNv
bmQubG9ja2VkRm9yV3JpdGUgPSB0cnVlOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdsSWQ7Ci19
Ci0KLXZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlk
KQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgUmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5z
ZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsK
KyAgICBtX3Jlc291cmNlUG9vbE1hcC5hZGQocmVzb3VyY2VJZCwgcG9vbCk7CiB9CiAKLXZvaWQg
Q0NSZXNvdXJjZVByb3ZpZGVyOjpmbHVzaCgpCit2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6cmVt
b3ZlUmVzb3VyY2VGcm9tUG9vbChSZXNvdXJjZUlkIHJlc291cmNlSWQpCiB7Ci0gICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQzZCkgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9z
aXRpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29udGV4dDNkLT5mbHVzaCgpOwot
fQotCi1ib29sIENDUmVzb3VyY2VQcm92aWRlcjo6c2hhbGxvd0ZsdXNoSWZTdXBwb3J0ZWQoKQot
ewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFj
b250ZXh0M2QpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKG1fdXNlU2hhbGxvd0ZsdXNoKQotICAgICAgICBjb250ZXh0M2QtPnNoYWxsb3dGbHVzaENI
Uk9NSVVNKCk7Ci0gICAgcmV0dXJuIG1fdXNlU2hhbGxvd0ZsdXNoOwotfQotCi11bnNpZ25lZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCi17Ci0gICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUpOwotICAgICsrKGl0LT5zZWNvbmQu
bG9ja0ZvclJlYWRDb3VudCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2xJZDsKLX0KLQotdm9p
ZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkKLXsKLSAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgPiAwKTsKLSAgICAtLShp
dC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotfQotCi1DQ1Jlc291cmNlUHJvdmlkZXI6OkND
UmVzb3VyY2VQcm92aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fY29u
dGV4dChjb250ZXh0KQotICAgICwgbV9uZXh0SWQoMSkKLSAgICAsIG1fdXNlVGV4dHVyZVN0b3Jh
Z2VFeHQoZmFsc2UpCi0gICAgLCBtX3VzZVRleHR1cmVVc2FnZUhpbnQoZmFsc2UpCi0gICAgLCBt
X3VzZVNoYWxsb3dGbHVzaChmYWxzZSkKLSAgICAsIG1fbWF4VGV4dHVyZVNpemUoMCkKLXsKLX0K
LQotYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OmluaXRpYWxpemUoKQotewotICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250ZXh0M2QgfHwgIWNv
bnRleHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gY29udGV4dDNkLT5n
ZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGV4dGVuc2lvbnM7Ci0gICAgZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcsIGV4dGVuc2lv
bnMpOwotICAgIGJvb2wgdXNlTWFwU3ViID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zW2ld
ID09ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIikKLSAgICAgICAgICAgIG1fdXNlVGV4dHVyZVN0
b3JhZ2VFeHQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChleHRlbnNpb25zW2ldID09ICJHTF9B
TkdMRV90ZXh0dXJlX3VzYWdlIikKLSAgICAgICAgICAgIG1fdXNlVGV4dHVyZVVzYWdlSGludCA9
IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGV4dGVuc2lvbnNbaV0gPT0gIkdMX0NIUk9NSVVNX21h
cF9zdWIiKQotICAgICAgICAgICAgdXNlTWFwU3ViID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAo
ZXh0ZW5zaW9uc1tpXSA9PSAiR0xfQ0hST01JVU1fc2hhbGxvd19mbHVzaCIpCi0gICAgICAgICAg
ICBtX3VzZVNoYWxsb3dGbHVzaCA9IHRydWU7Ci0gICAgfQotCi0gICAgbV90ZXhTdWJJbWFnZSA9
IGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVTdWJJbWFnZSh1c2VNYXBTdWIpKTsKLSAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSkpOwotICAgIHJldHVybiB0cnVlOworICAg
IG1fcmVzb3VyY2VQb29sTWFwLnJlbW92ZShyZXNvdXJjZUlkKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Jlc291cmNlUHJvdmlkZXIuaAppbmRleCAwNjdjYWQ0OTBkNDUwNDk2Mzk5Y2M3MGQ4MmU5
MWQwNDhjMmRiMzU5Li5lMzk1Yjg3MTgyNDU3ODA3N2ZiODQ5MDYwZDc4YjEwMTg4ZmM5Yjk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Jlc291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaApAQCAtMjcsMjUgKzI3LDE1IEBACiAj
aWZuZGVmIENDUmVzb3VyY2VQcm92aWRlcl9oCiAjZGVmaW5lIENDUmVzb3VyY2VQcm92aWRlcl9o
CiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwotfQordHlwZWRlZiB1bnNpZ25lZCBp
bnQgR0MzRGVudW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQ7Ci1jbGFzcyBDQ1Njb3Bl
ZExvY2tSZXNvdXJjZUZvcldyaXRlOwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIExheWVyVGV4dHVy
ZVN1YkltYWdlOwogCiAvLyBUaHJlYWQtc2FmZXR5IG5vdGVzOiB0aGlzIGNsYXNzIGlzIG5vdCB0
aHJlYWQtc2FmZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkCiAvLyBmcm9tIHRoZSB0aHJlYWQgaXQg
d2FzIGNyZWF0ZWQgb24gKGluIHByYWN0aWNlLCB0aGUgY29tcG9zaXRvciB0aHJlYWQpLgpAQCAt
NTUsMTE4ICs0NSw1MCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBSZXNvdXJjZUlk
OwogICAgIGVudW0gVGV4dHVyZVVzYWdlSGludCB7IFRleHR1cmVVc2FnZUFueSwgVGV4dHVyZVVz
YWdlRnJhbWVidWZmZXIgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVzb3VyY2VQcm92
aWRlcj4gY3JlYXRlKENDR3JhcGhpY3NDb250ZXh0Kik7Ci0KICAgICB2aXJ0dWFsIH5DQ1Jlc291
cmNlUHJvdmlkZXIoKTsKIAotICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBo
aWNzQ29udGV4dDNEKCk7Ci0gICAgaW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhUZXh0dXJlU2l6ZTsgfQotICAgIHVuc2lnbmVkIG51bVJlc291cmNlcygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb3VyY2VzLnNpemUoKTsgfQorICAgIHZpcnR1YWwgaW50IG1heFRleHR1cmVT
aXplKCkgY29uc3QgeyByZXR1cm4gSU5UX01BWDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbnVt
UmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVBvb2xNYXAuc2l6ZSgpOyB9CiAK
ICAgICAvLyBDaGVja3Mgd2hldGhlciBhIHJlc291cmNlIGlzIGluIHVzZSBieSBhIGNvbnN1bWVy
LgotICAgIGJvb2wgaW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQpOworICAgIHZpcnR1YWwgYm9v
bCBpblVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCkgeyByZXR1cm4gZmFsc2U7IH0KIAogCiAgICAg
Ly8gUHJvZHVjZXIgaW50ZXJmYWNlLgogCiAgICAgLy8gQ3JlYXRlcyBhIHJlc291cmNlIG9mIHRo
ZSBnaXZlbiBzaXplL2Zvcm1hdCwgaW50byB0aGUgZ2l2ZW4gcG9vbC4KLSAgICBSZXNvdXJjZUlk
IGNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0
LCBUZXh0dXJlVXNhZ2VIaW50KTsKKyAgICB2aXJ0dWFsIFJlc291cmNlSWQgY3JlYXRlUmVzb3Vy
Y2UoaW50IHBvb2wsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2Fn
ZUhpbnQpID0gMDsKIAotICAgIC8vIFdyYXBzIGFuIGV4dGVybmFsIHRleHR1cmUgaW50byBhIHJl
c291cmNlLgotICAgIFJlc291cmNlSWQgY3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJl
KHVuc2lnbmVkIHRleHR1cmVJZCk7Ci0gICAgdm9pZCBkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVzb3VyY2UoUmVzb3VyY2VJZCkgPSAwOwogCi0g
ICAgLy8gRGVsZXRlcyBhbGwgcmVzb3VyY2VzIG93bmVkIGJ5IGEgZ2l2ZW4gcG9vbC4KLSAgICB2
b2lkIGRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKTsKKyAgICAvLyBEZWxldGVzIGFsbCBy
ZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcG9vbC4KKyAgICB2b2lkIGRlbGV0ZVJl
c291cmNlUG9vbChpbnQgcG9vbCk7CiAKICAgICAvLyBVcGxvYWQgZGF0YSBmcm9tIGltYWdlLCBj
b3B5aW5nIHNvdXJjZVJlY3QgKGluIGltYWdlKSBpbnRvIGRlc3RSZWN0IChpbiB0aGUgcmVzb3Vy
Y2UpLgotICAgIHZvaWQgdXBsb2FkKFJlc291cmNlSWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBj
b25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkKFJlc291cmNlSWQs
IGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CiAKICAgICAv
LyBGbHVzaCBhbGwgY29udGV4dCBvcGVyYXRpb25zLCBraWNraW5nIHVwbG9hZHMgYW5kIGVuc3Vy
aW5nIG9yZGVyaW5nIHdpdGgKICAgICAvLyByZXNwZWN0IHRvIG90aGVyIGNvbnRleHRzLgotICAg
IHZvaWQgZmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSB7IH0KIAogICAgIC8vIE9u
bHkgZmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGlmIHN1cHBvcnRlZC4KICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNoYWxsb3cgZmx1c2ggb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAg
ICBib29sIHNoYWxsb3dGbHVzaElmU3VwcG9ydGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZDsKLSAgICBmcmllbmQgY2xhc3MgQ0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZTsKLQotICAgIHN0cnVjdCBSZXNvdXJjZSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGdsSWQ7Ci0gICAgICAgIGludCBwb29sOwotICAgICAgICBpbnQgbG9ja0Zv
clJlYWRDb3VudDsKLSAgICAgICAgYm9vbCBsb2NrZWRGb3JXcml0ZTsKLSAgICAgICAgYm9vbCBl
eHRlcm5hbDsKLSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBHQzNEZW51bSBmb3JtYXQ7
Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VJZCwgUmVzb3VyY2U+IFJlc291
cmNlTWFwOwotCi0gICAgZXhwbGljaXQgQ0NSZXNvdXJjZVByb3ZpZGVyKENDR3JhcGhpY3NDb250
ZXh0Kik7Ci0gICAgYm9vbCBpbml0aWFsaXplKCk7Ci0KLSAgICAvLyBHZXRzIGEgR0wgdGV4dHVy
ZSBpZCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlLCB0aGF0IGNhbiBiZSByZW5kZXJlZCBpbnRv
LgotICAgIHVuc2lnbmVkIGxvY2tGb3JXcml0ZShSZXNvdXJjZUlkKTsKLSAgICB2b2lkIHVubG9j
a0ZvcldyaXRlKFJlc291cmNlSWQpOwotCi0gICAgLy8gR2V0cyBhIEdMIHRleHR1cmUgaWQgcmVw
cmVzZW50aW5nIHRoZSByZXNvdXJjZSwgdGhhdCBjYW4gYmUgcmVuZGVyZWQgd2l0aC4KLSAgICB1
bnNpZ25lZCBsb2NrRm9yUmVhZChSZXNvdXJjZUlkKTsKLSAgICB2b2lkIHVubG9ja0ZvclJlYWQo
UmVzb3VyY2VJZCk7Ci0KLSAgICBDQ0dyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJl
c291cmNlSWQgbV9uZXh0SWQ7Ci0gICAgUmVzb3VyY2VNYXAgbV9yZXNvdXJjZXM7Ci0KLSAgICBi
b29sIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7Ci0gICAgYm9vbCBtX3VzZVRleHR1cmVVc2FnZUhp
bnQ7Ci0gICAgYm9vbCBtX3VzZVNoYWxsb3dGbHVzaDsKLSAgICBPd25QdHI8TGF5ZXJUZXh0dXJl
U3ViSW1hZ2U+IG1fdGV4U3ViSW1hZ2U7Ci0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci19Owot
Ci1jbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCk7Ci1wdWJsaWM6Ci0gICAgQ0NTY29w
ZWRMb2NrUmVzb3VyY2VGb3JSZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
ciwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQpCi0gICAgICAgIDog
bV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgICwgbV9yZXNvdXJj
ZUlkKHJlc291cmNlSWQpCi0gICAgICAgICwgbV90ZXh0dXJlSWQocmVzb3VyY2VQcm92aWRlci0+
bG9ja0ZvclJlYWQocmVzb3VyY2VJZCkpIHsgfQotCi0gICAgfkNDU2NvcGVkTG9ja1Jlc291cmNl
Rm9yUmVhZCgpCi0gICAgewotICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXItPnVubG9ja0ZvclJl
YWQobV9yZXNvdXJjZUlkKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQotCi1wcml2YXRlOgotICAgIENDUmVzb3VyY2VQcm92
aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOwotICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2VJZCBtX3Jlc291cmNlSWQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Ci19OworICAgIHZp
cnR1YWwgYm9vbCBzaGFsbG93Rmx1c2hJZlN1cHBvcnRlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LWNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUpOwotcHVibGljOgotICAgIENDU2Nv
cGVkTG9ja1Jlc291cmNlRm9yV3JpdGUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgcmVzb3VyY2VJZCkKLSAgICAgICAg
OiBtX3Jlc291cmNlUHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAgLCBtX3Jlc291
cmNlSWQocmVzb3VyY2VJZCkKLSAgICAgICAgLCBtX3RleHR1cmVJZChyZXNvdXJjZVByb3ZpZGVy
LT5sb2NrRm9yV3JpdGUocmVzb3VyY2VJZCkpIHsgfQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIGlzIGFuIGluc3RhbmNlIG9mIENDUmVzb3VyY2VQcm92aWRlckdMLgorICAgIHZpcnR1YWwg
Ym9vbCBpc1Jlc291cmNlUHJvdmlkZXJHTCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB+Q0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZSgpCi0gICAgewotICAgICAgICBtX3Jlc291cmNlUHJv
dmlkZXItPnVubG9ja0ZvcldyaXRlKG1fcmVzb3VyY2VJZCk7Ci0gICAgfQorcHJvdGVjdGVkOgor
ICAgIENDUmVzb3VyY2VQcm92aWRlcigpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBSZXNvdXJjZUlkIGdlbmVyYXRlUmVzb3Vy
Y2VJZCgpIHsgcmV0dXJuIG1fbmV4dElkKys7IH0KKyAgICB2b2lkIHB1dFJlc291cmNlSW5Qb29s
KFJlc291cmNlSWQsIGludCBwb29sKTsKKyAgICB2b2lkIHJlbW92ZVJlc291cmNlRnJvbVBvb2wo
UmVzb3VyY2VJZCk7CiAKIHByaXZhdGU6Ci0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiBtX3Jlc291
cmNlUHJvdmlkZXI7Ci0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1fcmVzb3Vy
Y2VJZDsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVz
b3VyY2VJZCwgaW50PiBSZXNvdXJjZVBvb2xNYXA7CisgICAgUmVzb3VyY2VQb29sTWFwIG1fcmVz
b3VyY2VQb29sTWFwOworICAgIFJlc291cmNlSWQgbV9uZXh0SWQ7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291
cmNlUHJvdmlkZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAyMzdmZmIzZGRm
N2M0NjYxODg3M2MzZjJiODUzNTdjMWZjMmNhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlckdM
LmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDUmVzb3VyY2VQcm92aWRlckdMLmgiCisKKyNpbmNsdWRlICJFeHRlbnNpb25z
M0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNybworI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJHcmFwaGljc0NvbnRleHQzRC5oPgorCit1c2luZyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHQzNEZW51bSB0ZXh0dXJl
VG9TdG9yYWdlRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgR0MzRGVudW0g
c3RvcmFnZUZvcm1hdCA9IEV4dGVuc2lvbnMzRDo6UkdCQThfT0VTOworICAgIHN3aXRjaCAodGV4
dHVyZUZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDoKKyAgICAgICAgc3RvcmFn
ZUZvcm1hdCA9IEV4dGVuc2lvbnMzRENocm9taXVtOjpCR1JBOF9FWFQ7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RvcmFnZUZvcm1hdDsKK30KKworc3RhdGljIGJv
b2wgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3JtYXQpCit7
CisgICAgcmV0dXJuIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgZm9ybWF0
ID09IEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQpOworfQorCitQYXNzT3duUHRyPENDUmVzb3VyY2VQ
cm92aWRlckdMPiBDQ1Jlc291cmNlUHJvdmlkZXJHTDo6Y3JlYXRlKFdlYkdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQoreworICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXJHTD4gcmVzb3Vy
Y2VQcm92aWRlcihhZG9wdFB0cihuZXcgQ0NSZXNvdXJjZVByb3ZpZGVyR0woY29udGV4dCkpKTsK
KyAgICByZXR1cm4gcmVzb3VyY2VQcm92aWRlci5yZWxlYXNlKCk7Cit9CisKK0NDUmVzb3VyY2VQ
cm92aWRlckdMOjp+Q0NSZXNvdXJjZVByb3ZpZGVyR0woKQoreworfQorCitXZWJHcmFwaGljc0Nv
bnRleHQzRCogQ0NSZXNvdXJjZVByb3ZpZGVyR0w6OmdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBtX2NvbnRleHQ7
Cit9CisKK2Jvb2wgQ0NSZXNvdXJjZVByb3ZpZGVyR0w6OmluVXNlQnlDb25zdW1lcihSZXNvdXJj
ZUlkIGlkKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgUmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CisgICAgQVNTRVJU
KGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5sb2NrRm9y
UmVhZENvdW50ID4gMDsKK30KKworQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVz
b3VyY2VQcm92aWRlckdMOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50IGhpbnQpCit7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAw
OworICAgIEdMQyhtX2NvbnRleHQsIHRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVy
ZSgpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKworICAgIGlm
IChtX3VzZVRleHR1cmVVc2FnZUhpbnQgJiYgaGludCA9PSBUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZl
cikKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVS
RV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQU5HTEUpKTsKKyAgICBpZiAobV91c2VUZXh0dXJlU3RvcmFnZUV4dCAmJiBpc1RleHR1
cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKGZvcm1hdCkpIHsKKyAgICAgICAgR0MzRGVudW0g
c3RvcmFnZUZvcm1hdCA9IHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQoZm9ybWF0KTsKKyAgICAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhTdG9yYWdlMkRFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDEsIHN0b3JhZ2VGb3JtYXQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCAwKSk7CisgICAgUmVzb3VyY2VJZCBpZCA9IGdlbmVyYXRlUmVzb3VyY2VJZCgp
OworICAgIFJlc291cmNlIHJlc291cmNlID0ge3RleHR1cmVJZCwgMCwgZmFsc2UsIGZhbHNlLCBz
aXplLCBmb3JtYXR9OworICAgIHB1dFJlc291cmNlSW5Qb29sKGlkLCBwb29sKTsKKyAgICBtX3Jl
c291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK0NDUmVzb3Vy
Y2VQcm92aWRlcjo6UmVzb3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlkZXJHTDo6Y3JlYXRlUmVzb3Vy
Y2VGcm9tRXh0ZXJuYWxUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFJlc291cmNlSWQgaWQgPSBnZW5lcmF0ZVJl
c291cmNlSWQoKTsKKyAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHt0ZXh0dXJlSWQsIDAsIGZhbHNl
LCB0cnVlLCBJbnRTaXplKCksIDB9OworICAgIG1fcmVzb3VyY2VzLmFkZChpZCwgcmVzb3VyY2Up
OworICAgIHJldHVybiBpZDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXJHTDo6ZGVsZXRl
UmVzb3VyY2UoUmVzb3VyY2VJZCBpZCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQo
aWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5s
b2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50KTsKKyAgICBpZiAo
IWl0LT5zZWNvbmQuZXh0ZXJuYWwpIHsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5kZWxldGVUZXh0dXJlKGl0LT5zZWNvbmQuZ2xJZCkpOworICAgICAgICByZW1vdmVSZXNvdXJj
ZUZyb21Qb29sKGlkKTsKKyAgICB9CisgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKK30KKwor
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXJHTDo6dXBsb2FkKFJlc291cmNlSWQgaWQsIGNvbnN0IHVp
bnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGV4U3ViSW1hZ2UuZ2V0KCkpOworICAg
IFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOworICAgIEFT
U0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0
ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFs
KTsKKworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCkpOworICAgIG1fdGV4U3ViSW1h
Z2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgaXQtPnNl
Y29uZC5mb3JtYXQsIG1fY29udGV4dCk7Cit9CisKK3Vuc2lnbmVkIENDUmVzb3VyY2VQcm92aWRl
ckdMOjpsb2NrRm9yV3JpdGUoUmVzb3VyY2VJZCBpZCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3Vy
Y2VzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQt
PnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ICYm
ICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKKyAgICBpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlID0g
dHJ1ZTsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5nbElkOworfQorCit2b2lkIENDUmVzb3VyY2VQ
cm92aWRlckdMOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQoreworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
ICYmIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwor
ICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKK30KKwordm9pZCBDQ1Jlc291
cmNlUHJvdmlkZXJHTDo6Zmx1c2goKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKK30KKworYm9v
bCBDQ1Jlc291cmNlUHJvdmlkZXJHTDo6c2hhbGxvd0ZsdXNoSWZTdXBwb3J0ZWQoKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fdXNlU2hhbGxv
d0ZsdXNoKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+c2hhbGxvd0ZsdXNoQ0hST01JVU0oKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2ln
bmVkIENDUmVzb3VyY2VQcm92aWRlckdMOjpsb2NrRm9yUmVhZChSZXNvdXJjZUlkIGlkKQorewor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKKyAgICBpdC0+c2Vj
b25kLmxvY2tGb3JSZWFkQ291bnQrKzsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5nbElkOworfQor
Cit2b2lkIENDUmVzb3VyY2VQcm92aWRlckdMOjp1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ID4gMCk7Cisg
ICAgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50LS07Cit9CisKK0NDUmVzb3VyY2VQcm92aWRl
ckdMOjpDQ1Jlc291cmNlUHJvdmlkZXJHTChXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV91c2VUZXh0dXJlU3RvcmFnZUV4dChm
YWxzZSkKKyAgICAsIG1fdXNlVGV4dHVyZVVzYWdlSGludChmYWxzZSkKKyAgICAsIG1fdXNlU2hh
bGxvd0ZsdXNoKGZhbHNlKQorICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQoreworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcg
PSBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9OUyk7Cisg
ICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0
KCcgJywgZXh0ZW5zaW9ucyk7CisgICAgYm9vbCB1c2VNYXBTdWIgPSBmYWxzZTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGV4dGVuc2lvbnNbaV0gPT0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UiKQorICAgICAgICAgICAg
bV91c2VUZXh0dXJlU3RvcmFnZUV4dCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGV4dGVuc2lv
bnNbaV0gPT0gIkdMX0FOR0xFX3RleHR1cmVfdXNhZ2UiKQorICAgICAgICAgICAgbV91c2VUZXh0
dXJlVXNhZ2VIaW50ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoZXh0ZW5zaW9uc1tpXSA9PSAi
R0xfQ0hST01JVU1fbWFwX3N1YiIpCisgICAgICAgICAgICB1c2VNYXBTdWIgPSB0cnVlOworICAg
ICAgICBlbHNlIGlmIChleHRlbnNpb25zW2ldID09ICJHTF9DSFJPTUlVTV9zaGFsbG93X2ZsdXNo
IikKKyAgICAgICAgICAgIG1fdXNlU2hhbGxvd0ZsdXNoID0gdHJ1ZTsKKyAgICB9CisKKyAgICBt
X3RleFN1YkltYWdlID0gYWRvcHRQdHIobmV3IExheWVyVGV4dHVyZVN1YkltYWdlKHVzZU1hcFN1
YikpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVzb3VyY2VQcm92aWRlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXJHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhMzUwMDg5
NWRlNzNhZGJhZWIwZjdiOTJhMTg5NjAzNzc3YmRhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlk
ZXJHTC5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENDUmVzb3VyY2VQcm92
aWRlckdMX2gKKyNkZWZpbmUgQ0NSZXNvdXJjZVByb3ZpZGVyR0xfaAorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZXNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ1Njb3BlZExvY2tHTFJlc291cmNlRm9yUmVhZDsKK2NsYXNzIENDU2NvcGVk
TG9ja0dMUmVzb3VyY2VGb3JXcml0ZTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBMYXllclRleHR1
cmVTdWJJbWFnZTsKKworY2xhc3MgQ0NSZXNvdXJjZVByb3ZpZGVyR0wgOiBwdWJsaWMgQ0NSZXNv
dXJjZVByb3ZpZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Jlc291cmNlUHJvdmlk
ZXJHTCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVy
R0w+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKik7CisKKyAgICB2aXJ0dWFs
IH5DQ1Jlc291cmNlUHJvdmlkZXJHTCgpOworCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIGludCBtYXhUZXh0dXJlU2l6
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIG51bVJlc291cmNlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcmVz
b3VyY2VzLnNpemUoKTsgfQorCisgICAgdmlydHVhbCBib29sIGluVXNlQnlDb25zdW1lcihSZXNv
dXJjZUlkKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUmVzb3VyY2VJZCBjcmVhdGVSZXNvdXJj
ZShpbnQgcG9vbCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdl
SGludCkgT1ZFUlJJREU7CisgICAgLy8gV3JhcHMgYW4gZXh0ZXJuYWwgdGV4dHVyZSBpbnRvIGEg
cmVzb3VyY2UuCisgICAgUmVzb3VyY2VJZCBjcmVhdGVSZXNvdXJjZUZyb21FeHRlcm5hbFRleHR1
cmUodW5zaWduZWQgdGV4dHVyZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVzb3VyY2Uo
UmVzb3VyY2VJZCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkKFJlc291cmNl
SWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29s
IHNoYWxsb3dGbHVzaElmU3VwcG9ydGVkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZXNvdXJjZVByb3ZpZGVyR0woKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkOworICAg
IGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tHTFJlc291cmNlRm9yV3JpdGU7CisKKyAgICBzdHJ1
Y3QgUmVzb3VyY2UgeworICAgICAgICB1bnNpZ25lZCBnbElkOworICAgICAgICBpbnQgbG9ja0Zv
clJlYWRDb3VudDsKKyAgICAgICAgYm9vbCBsb2NrZWRGb3JXcml0ZTsKKyAgICAgICAgYm9vbCBl
eHRlcm5hbDsKKyAgICAgICAgSW50U2l6ZSBzaXplOworICAgICAgICBHQzNEZW51bSBmb3JtYXQ7
CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VJZCwgUmVzb3VyY2U+IFJlc291
cmNlTWFwOworCisgICAgZXhwbGljaXQgQ0NSZXNvdXJjZVByb3ZpZGVyR0woV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRCopOworCisgICAgLy8gR2V0cyBhIEdMIHRleHR1cmUgaWQgcmVwcmVz
ZW50aW5nIHRoZSByZXNvdXJjZSwgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW50by4KKyAgICB1bnNp
Z25lZCBsb2NrRm9yV3JpdGUoUmVzb3VyY2VJZCk7CisgICAgdm9pZCB1bmxvY2tGb3JXcml0ZShS
ZXNvdXJjZUlkKTsKKworICAgIC8vIEdldHMgYSBHTCB0ZXh0dXJlIGlkIHJlcHJlc2VudGluZyB0
aGUgcmVzb3VyY2UsIHRoYXQgY2FuIGJlIHJlbmRlcmVkIHdpdGguCisgICAgdW5zaWduZWQgbG9j
a0ZvclJlYWQoUmVzb3VyY2VJZCk7CisgICAgdm9pZCB1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQp
OworCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFJl
c291cmNlTWFwIG1fcmVzb3VyY2VzOworCisgICAgYm9vbCBtX3VzZVRleHR1cmVTdG9yYWdlRXh0
OworICAgIGJvb2wgbV91c2VUZXh0dXJlVXNhZ2VIaW50OworICAgIGJvb2wgbV91c2VTaGFsbG93
Rmx1c2g7CisgICAgT3duUHRyPExheWVyVGV4dHVyZVN1YkltYWdlPiBtX3RleFN1YkltYWdlOwor
ICAgIGludCBtX21heFRleHR1cmVTaXplOworfTsKKworY2xhc3MgQ0NTY29wZWRMb2NrR0xSZXNv
dXJjZUZvclJlYWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2NvcGVkTG9ja0dMUmVz
b3VyY2VGb3JSZWFkKTsKK3B1YmxpYzoKKyAgICBDQ1Njb3BlZExvY2tHTFJlc291cmNlRm9yUmVh
ZChDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlciwgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQpCisgICAgICAgIDogbV9yZXNvdXJjZVByb3ZpZGVy
KHJlc291cmNlUHJvdmlkZXIpCisgICAgICAgICwgbV9yZXNvdXJjZUlkKHJlc291cmNlSWQpCisg
ICAgICAgICwgbV90ZXh0dXJlSWQocmVzb3VyY2VQcm92aWRlci0+bG9ja0ZvclJlYWQocmVzb3Vy
Y2VJZCkpIHsgfQorCisgICAgfkNDU2NvcGVkTG9ja0dMUmVzb3VyY2VGb3JSZWFkKCkKKyAgICB7
CisgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci0+dW5sb2NrRm9yUmVhZChtX3Jlc291cmNlSWQp
OworICAgIH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dHVyZUlkOyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyR0wqIG1fcmVzb3Vy
Y2VQcm92aWRlcjsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbV9yZXNvdXJj
ZUlkOworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworfTsKKworY2xhc3MgQ0NTY29wZWRMb2Nr
R0xSZXNvdXJjZUZvcldyaXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Njb3BlZExv
Y2tHTFJlc291cmNlRm9yV3JpdGUpOworcHVibGljOgorICAgIENDU2NvcGVkTG9ja0dMUmVzb3Vy
Y2VGb3JXcml0ZShDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlciwgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQpCisgICAgICAgIDogbV9yZXNvdXJj
ZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCisgICAgICAgICwgbV9yZXNvdXJjZUlkKHJlc291
cmNlSWQpCisgICAgICAgICwgbV90ZXh0dXJlSWQocmVzb3VyY2VQcm92aWRlci0+bG9ja0Zvcldy
aXRlKHJlc291cmNlSWQpKSB7IH0KKworICAgIH5DQ1Njb3BlZExvY2tHTFJlc291cmNlRm9yV3Jp
dGUoKQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT51bmxvY2tGb3JXcml0ZSht
X3Jlc291cmNlSWQpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZUlkOyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
R0wqIG1fcmVzb3VyY2VQcm92aWRlcjsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
SWQgbV9yZXNvdXJjZUlkOworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwCmluZGV4IDdjYmJlY2Ux
Njg4Mzg3OGM0OTc3ZDRmOWFhNDg1NmU4MDFjY2IxODMuLjUwZTAzYzM5ZGVlMDU1MDhkNzlhZDMw
YmQyZGJjYzBmMWVkNzE5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJj
Yy9DQ1F1YWRTaW5rLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJlci5oIgorI2luY2x1ZGUgImNj
L0NDUmVzb3VyY2VQcm92aWRlckdMLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJhd1F1YWQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNyArNTQsMTAgQEAgQ0NUZXh0dXJlTGF5
ZXJJbXBsOjp+Q0NUZXh0dXJlTGF5ZXJJbXBsKCkKIHZvaWQgQ0NUZXh0dXJlTGF5ZXJJbXBsOjp3
aWxsRHJhdyhDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNT
RVJUKCFtX2V4dGVybmFsVGV4dHVyZVJlc291cmNlKTsKLSAgICBtX2V4dGVybmFsVGV4dHVyZVJl
c291cmNlID0gcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0
dXJlKG1fdGV4dHVyZUlkKTsKKworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyLT5pc1Jlc291
cmNlUHJvdmlkZXJHTCgpKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92
aWRlckdMID0gc3RhdGljX2Nhc3Q8Q0NSZXNvdXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3Zp
ZGVyKTsKK21fZXh0ZXJuYWxUZXh0dXJlUmVzb3VyY2UgPSByZXNvdXJjZVByb3ZpZGVyR0wtPmNy
ZWF0ZVJlc291cmNlRnJvbUV4dGVybmFsVGV4dHVyZShtX3RleHR1cmVJZCk7CiB9CiAKIHZvaWQg
Q0NUZXh0dXJlTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRTaW5rJiBxdWFkTGlzdCwgY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IGZhMjAxZDExMjZiYTRiYjA5ZTg2N2M1NzJjMjI5
YjcyZDk3OWI5OTUuLmUxNDYzZWI5ZWNhNzc2NWQ3MTcwNDNjMTQwM2MxMWQxNDRhZmJkMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIK
ICNpbmNsdWRlICJjYy9DQ1F1YWRTaW5rLmgiCi0jaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3Zp
ZGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3ZpZGVyR0wuaCIKICNpbmNsdWRlICJj
Yy9DQ1N0cmVhbVZpZGVvRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVh
ZC5oIgogI2luY2x1ZGUgImNjL0NDWVVWVmlkZW9EcmF3UXVhZC5oIgpAQCAtMTczLDggKzE3Mywx
MSBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OndpbGxEcmF3SW50ZXJuYWwoQ0NSZXNvdXJjZVBy
b3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKQotICAgICAgICBt
X2V4dGVybmFsVGV4dHVyZVJlc291cmNlID0gcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3Vy
Y2VGcm9tRXh0ZXJuYWxUZXh0dXJlKG1fZnJhbWUtPnRleHR1cmVJZCgpKTsKKyAgICBpZiAobV9m
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAgICAgQVNTRVJU
KHJlc291cmNlUHJvdmlkZXItPmlzUmVzb3VyY2VQcm92aWRlckdMKCkpOworICAgICAgICBDQ1Jl
c291cmNlUHJvdmlkZXJHTCogcmVzb3VyY2VQcm92aWRlckdMID0gc3RhdGljX2Nhc3Q8Q0NSZXNv
dXJjZVByb3ZpZGVyR0wqPihyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgbV9leHRlcm5hbFRl
eHR1cmVSZXNvdXJjZSA9IHJlc291cmNlUHJvdmlkZXJHTC0+Y3JlYXRlUmVzb3VyY2VGcm9tRXh0
ZXJuYWxUZXh0dXJlKG1fZnJhbWUtPnRleHR1cmVJZCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkU2luayYgcXVhZExpc3QsIGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>