<?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>179967</bug_id>
          
          <creation_ts>2017-11-23 00:07:15 -0800</creation_ts>
          <short_desc>[CoordGraphics] Replace CoordinatedSurface, ThreadSafeCoordinatedSurface with CoordinatedBuffer</short_desc>
          <delta_ts>2017-11-23 01:27:49 -0800</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1374350</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-11-23 00:07:15 -0800</bug_when>
    <thetext>[CoordGraphics] Replace CoordinatedSurface, ThreadSafeCoordinatedSurface with CoordinatedBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374351</commentid>
    <comment_count>1</comment_count>
      <attachid>327485</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-11-23 00:18:24 -0800</bug_when>
    <thetext>Created attachment 327485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374352</commentid>
    <comment_count>2</comment_count>
      <attachid>327485</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-23 01:06:58 -0800</bug_when>
    <thetext>Comment on attachment 327485
Patch

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

&gt; Source/WebKit/ChangeLog:13
&gt; +
&gt; +        
&gt; +

Remove extra empty lines here, please.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:53
&gt; +void CoordinatedBuffer::paintToSurface(const IntRect&amp; rect, Client&amp; client)

I&apos;m confused about this, what surface is this painting to? Maybe we could rename it to paintToBuffer now, or simply paint() since buffer is this, no?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:59
&gt; +    client.paintToSurfaceContext(context);

I would also rename this to paintToContext()

&gt; Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:105
&gt;      UpdateAtlasSurfaceClient surfaceClient(client, size, supportsAlpha());
&gt; -    m_surface-&gt;paintToSurface(rect, surfaceClient);
&gt; +    m_buffer-&gt;paintToSurface(rect, surfaceClient);

Wow, this CoordinatedBuffer::Client is a bit messy. Here we have UpdateAtlasSurfaceClient which is a CoordinatedBuffer::Client but receives another CoordinatedBuffer::Client as parameter. Could we avoid this client mess by simply using lambdas to render into the context? CoordinatedBuffer::paint() could receive a Function &lt;void (GraphicsContext&amp;)&gt;. I&apos;m not suggesting to do that in this patch, just wondering if that would be possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374353</commentid>
    <comment_count>3</comment_count>
      <attachid>327485</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-11-23 01:15:24 -0800</bug_when>
    <thetext>Comment on attachment 327485
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:53
&gt;&gt; +void CoordinatedBuffer::paintToSurface(const IntRect&amp; rect, Client&amp; client)
&gt; 
&gt; I&apos;m confused about this, what surface is this painting to? Maybe we could rename it to paintToBuffer now, or simply paint() since buffer is this, no?

I have this and other &quot;paint to surface&quot; methods removed in the stashed work. That&apos;s why I didn&apos;t bother renaming them.

&gt;&gt; Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:105
&gt;&gt; +    m_buffer-&gt;paintToSurface(rect, surfaceClient);
&gt; 
&gt; Wow, this CoordinatedBuffer::Client is a bit messy. Here we have UpdateAtlasSurfaceClient which is a CoordinatedBuffer::Client but receives another CoordinatedBuffer::Client as parameter. Could we avoid this client mess by simply using lambdas to render into the context? CoordinatedBuffer::paint() could receive a Function &lt;void (GraphicsContext&amp;)&gt;. I&apos;m not suggesting to do that in this patch, just wondering if that would be possible.

This will also be simplified to the point where CoordinatedBuffer::Client will be possible to remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374354</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-11-23 01:17:11 -0800</bug_when>
    <thetext>Committed r225108: &lt;https://trac.webkit.org/changeset/225108&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374355</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-23 01:20:09 -0800</bug_when>
    <thetext>&lt;rdar://problem/35674166&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374356</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-23 01:27:49 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #3)
&gt; Comment on attachment 327485 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327485&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:53
&gt; &gt;&gt; +void CoordinatedBuffer::paintToSurface(const IntRect&amp; rect, Client&amp; client)
&gt; &gt; 
&gt; &gt; I&apos;m confused about this, what surface is this painting to? Maybe we could rename it to paintToBuffer now, or simply paint() since buffer is this, no?
&gt; 
&gt; I have this and other &quot;paint to surface&quot; methods removed in the stashed
&gt; work. That&apos;s why I didn&apos;t bother renaming them.
&gt; 
&gt; &gt;&gt; Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:105
&gt; &gt;&gt; +    m_buffer-&gt;paintToSurface(rect, surfaceClient);
&gt; &gt; 
&gt; &gt; Wow, this CoordinatedBuffer::Client is a bit messy. Here we have UpdateAtlasSurfaceClient which is a CoordinatedBuffer::Client but receives another CoordinatedBuffer::Client as parameter. Could we avoid this client mess by simply using lambdas to render into the context? CoordinatedBuffer::paint() could receive a Function &lt;void (GraphicsContext&amp;)&gt;. I&apos;m not suggesting to do that in this patch, just wondering if that would be possible.
&gt; 
&gt; This will also be simplified to the point where CoordinatedBuffer::Client
&gt; will be possible to remove.

\o/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327485</attachid>
            <date>2017-11-23 00:18:24 -0800</date>
            <delta_ts>2017-11-23 01:06:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179967-20171123091823.patch</filename>
            <type>text/plain</type>
            <size>57492</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODU2NTk3Yzc5MzA1NmYx
YTY3NjZiMmE2MmMxODA5NTA1Y2EwNDVlNS4uZWIwODNjMDdhN2M1MDZlZDk5MzAyMDA0MTEwYjZm
MWNlNDkzZDExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTExLTIzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29vcmRHcmFwaGlj
c10gUmVwbGFjZSBDb29yZGluYXRlZFN1cmZhY2UsIFRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZh
Y2Ugd2l0aCBDb29yZGluYXRlZEJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUm9sbCB0aGUgQ29vcmRpbmF0ZWRTdXJmYWNlIGFuZCBUaHJlYWRT
YWZlQ29vcmRpbmF0ZWRTdXJmYWNlIGNsYXNzZXMKKyAgICAgICAgaW50byBvbmUgQ29vcmRpbmF0
ZWRCdWZmZXIgY2xhc3MuCisKKyAgICAgICAgQ29vcmRpbmF0ZWRCdWZmZXIgY2xhc3MgbWltaWNz
IENvb3JkaW5hdGVkU3VyZmFjZSBpbiBwcm92aWRpbmcgdGhlCisgICAgICAgIENsaWVudCBjbGFz
cyB0aGF0IGFsbG93cyBzcGVjaWZ5aW5nIGhvdyB0aGUgY2xpZW50IHNob3VsZCBwYWludCB1c2lu
ZyBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBvYmplY3QuIHN1cHBvcnRzQWxwaGEoKSBhbmQg
c2l6ZSgpIG1ldGhvZHMgYXJlIGFsc28KKyAgICAgICAgcHJlc2VudCwgYXMgd2VsbCBhcyBwYWlu
dFRvU3VyZmFjZSgpLiB1cGxvYWRJbWFnZSgpIHJldHJpZXZlcyB0aGUKKyAgICAgICAgSW1hZ2Ug
dGhhdCdzIGNyZWF0ZWQgZnJvbSB0aGUgY29udGFpbmVkIEltYWdlQnVmZmVyLCBhbGxvd2luZyB0
aGUgdXNlcgorICAgICAgICB0byB0aGVuIG1hbnVhbGx5IHVwbG9hZCB0aGUgYnVmZmVyIGRhdGEg
b250byB0aGUgR1BVLgorCisgICAgICAgIENvb3JkaW5hdGVkQnVmZmVyIG90aGVyd2lzZSBzZXJ2
ZXMgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUKKyAgICAgICAgQ29vcmRpbmF0ZWRT
dXJmYWNlIGNsYXNzLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGluIHRoZQorICAgICAgICBD
b29yZGlhbnRlZEdyYXBoaWNzIGNvZGUgcmVmbGVjdCB0aGF0LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyAtLSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0
dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEJ1ZmZlcjo6Q29vcmRpbmF0ZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRCdWZmZXI6OnBhaW50VG9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
QnVmZmVyOjp1cGxvYWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRCdWZmZXI6OnN1cHBvcnRzQWxwaGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI6OnNpemUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwYWludFRvU3Vy
ZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1
cmZhY2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkU3VyZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9UaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50Lmg6CisKIDIwMTctMTEtMjIgIEph
dmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1n
cmlkXSBSZWZhY3RvcmluZyBhbmQgbmV3IG5hbWVzcGFjZSB3aXRoIGdyaWQgcmVsYXRlZCB1dGls
aXR5IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhOTI0MmRmMzY0OGYyMzJhNjA5OGQ2NThlNDFhZmIx
MGM1MGEzNDY2Li40Y2I0OGFkMjA4NWI0YzkzNTFhY2IxMmI5NWIzMzcyZDkzNmY4NzA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTExLTIzICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29vcmRHcmFwaGljc10gUmVwbGFjZSBDb29yZGlu
YXRlZFN1cmZhY2UsIFRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2Ugd2l0aCBDb29yZGluYXRl
ZEJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVwbGFjZSB1c2VzIG9mIENvb3JkaW5hdGVkU3VyZmFjZSBjbGFzcyB3aXRoIENvb3JkaW5hdGVk
QnVmZmVyLiBUaGUKKyAgICAgICAgVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZSBjbGFzcyBp
cyByZW1vdmVkLCBhbG9uZyB3aXRoIHRoZSBjb2RlIGluCisgICAgICAgIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCB0aGF0IGVzdGFibGlzaGVkIGEgQ29vcmRpbmF0ZWRTdXJmYWNlIGZhY3Rvcnku
CisKKyAgICAgICAgCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZSk6CisgICAgICAgICogU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgUmVu
YW1lIG1fc3VyZmFjZSB0byBtX2J1ZmZlciwgbV9zdXJmYWNlT2Zmc2V0IHRvIG1fYnVmZmVyT2Zm
c2V0LgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg6CisgICAgICAgICogU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZFNhZmVDb29yZGlu
YXRlZFN1cmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmg6
IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZhY2UpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFz
Ojp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6cGFpbnRPbkF2
YWlsYWJsZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVXBkYXRlQXRsYXMuaDoKKyAgICAgICAgUmVuYW1lIG1fc3VyZmFjZSB0byBtX2J1
ZmZlci4KKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OnNpemUgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6c3VwcG9ydHNBbHBoYSBjb25zdCk6CisKIDIwMTctMTEt
MjIgIEFsaSBKdW1hICA8YWp1bWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBW
aXN1YWxWaWV3cG9ydCBBUEkgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNzVlNDEwNjg1YjVhOTYxNmFmNGRhYzJjMWQxYjlhMDU1
YWIyMTBiYS4uOWIxNzMxNThjMzk0ZjRiODExZWUzNTcxYmY4Mjk3N2EwZGM4ZWM3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC0zNSw5ICszNSw5
IEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHku
Y3BwCiAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZh
Y2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9UaWxl
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZWRC
YWNraW5nU3RvcmUuY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg3OTE0ZDdiNzQ3NmNhN2U2NDkwZjhjMzYxMjNm
YzBjNGQyYmFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJ1ZmZlci5jcHAKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRC
dWZmZXIuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZjxDb29yZGluYXRlZEJ1ZmZlcj4gQ29vcmRpbmF0ZWRCdWZmZXI6OmNyZWF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDb29yZGluYXRlZEJ1ZmZlcihzaXplLCBmbGFncykpOworfQorCitDb29yZGluYXRlZEJ1ZmZl
cjo6Q29vcmRpbmF0ZWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCisg
ICAgOiBtX2ltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRl
ZCkpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCit7Cit9CisKK0Nv
b3JkaW5hdGVkQnVmZmVyOjp+Q29vcmRpbmF0ZWRCdWZmZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQg
Q29vcmRpbmF0ZWRCdWZmZXI6OnBhaW50VG9TdXJmYWNlKGNvbnN0IEludFJlY3QmIHJlY3QsIENs
aWVudCYgY2xpZW50KQoreworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1faW1hZ2VC
dWZmZXItPmNvbnRleHQoKTsKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmNsaXAo
cmVjdCk7CisgICAgY29udGV4dC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICBj
bGllbnQucGFpbnRUb1N1cmZhY2VDb250ZXh0KGNvbnRleHQpOworICAgIGNvbnRleHQucmVzdG9y
ZSgpOworfQorCitSZWZQdHI8SW1hZ2U+IENvb3JkaW5hdGVkQnVmZmVyOjp1cGxvYWRJbWFnZSgp
Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjk0YmQxNWIwYTBmYWI1MzI1MTk5M2MxMmRmOTU5YjFhNzk0ZDQ0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJ1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDsKK2NsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJ
bnRSZWN0OworCitjbGFzcyBDb29yZGluYXRlZEJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxDb29yZGluYXRlZEJ1ZmZlcj4geworcHVibGljOgorICAgIGVudW0gRmxhZyB7Cisg
ICAgICAgIE5vRmxhZ3MgPSAwLAorICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAorICAg
IH07CisgICAgdXNpbmcgRmxhZ3MgPSB1bnNpZ25lZDsKKworICAgIGNsYXNzIENsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSA9IGRlZmF1bHQ7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYWludFRvU3VyZmFjZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0JikgPSAw
OworICAgIH07CisKKyAgICBzdGF0aWMgUmVmPENvb3JkaW5hdGVkQnVmZmVyPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYsIEZsYWdzKTsKKyAgICB+Q29vcmRpbmF0ZWRCdWZmZXIoKTsKKworICAgIGJv
b2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBTdXBwb3J0c0FscGhh
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
CisgICAgdm9pZCBwYWludFRvU3VyZmFjZShjb25zdCBJbnRSZWN0JiwgQ2xpZW50Jik7CisgICAg
UmVmUHRyPEltYWdlPiB1cGxvYWRJbWFnZSgpOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVk
QnVmZmVyKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgRmxhZ3Mg
bV9mbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNTUyMmEzZDEyYmM1YmE3ZmRjY2UwOWZm
NTg1NzUwOTIxMjJkNzcyMS4uOWVkM2FhY2UxNmI5ODQ4N2JkNWY3M2YxMDEwOWExN2M0ZDBhMzAx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKQEAgLTg5MiwxMSArODkyLDExIEBAIEludFJlY3QgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjp0cmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKIH0KIAotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhaW50
VG9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhcywgSW50UG9pbnQm
IG9mZnNldCwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQmIGNsaWVudCkKK2Jvb2wgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCB1
aW50MzJfdCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQsIENvb3JkaW5hdGVkQnVmZmVyOjpDbGll
bnQmIGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgcmV0dXJuIG1fY29v
cmRpbmF0b3ItPnBhaW50VG9TdXJmYWNlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGlu
YXRlZFN1cmZhY2U6Ok5vRmxhZ3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEs
IGF0bGFzLCBvZmZzZXQsIGNsaWVudCk7CisgICAgcmV0dXJuIG1fY29vcmRpbmF0b3ItPnBhaW50
VG9TdXJmYWNlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGluYXRlZEJ1ZmZlcjo6Tm9G
bGFncyA6IENvb3JkaW5hdGVkQnVmZmVyOjpTdXBwb3J0c0FscGhhLCBhdGxhcywgb2Zmc2V0LCBj
bGllbnQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1
aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlRmFjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGI3NzRlMDA1ZmMwMTVj
NDUwMmNmZGVjZTQ4MDE3ZDExNzJjMzZjMmYuLjViOWQ1NGU3ODI5Y2NiMzgwOWJhNGQ2MTI4MDE4
NmZkYWUxNWI4MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBS
ZWY8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKElt
YWdlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IElu
dFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50
UG9pbnQmLCBDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkQnVmZmVyOjpGbGFn
cywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0ZWRCdWZmZXI6OkNsaWVu
dCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExh
eWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgPSAwOwogfTsKQEAgLTEzNiw3
ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwg
ZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRU
b1N1cmZhY2UoY29uc3QgSW50U2l6ZSYsIHVpbnQzMl90JiAvKiBhdGxhc0lEICovLCBJbnRQb2lu
dCYsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBwYWlu
dFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIEludFBv
aW50JiwgQ29vcmRpbmF0ZWRCdWZmZXI6OkNsaWVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
ZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCmluZGV4
IDcwMTQ5MzdjNjRlNWYxYWZlNjhlNjhjYzMwYmE0ZTU3ZWQyNTdkMjEuLjlhM2U5OGVjM2NkYWZl
NDk5NDkwYzc2MTMzZjZjODIyMDI1MTM1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CitjbGFzcyBDb29y
ZGluYXRlZEJ1ZmZlcjsKIAogdHlwZWRlZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7CiBl
bnVtIHsgSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCA9IDAgfTsKQEAgLTE4NiwxNSArMTg2LDE1
IEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgewogICAgIEludFJlY3QgY292ZXJl
ZFJlY3Q7CiAKICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBsYXllcnNUb0NyZWF0ZTsK
LSAgICBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGU+ID4gbGF5ZXJzVG9VcGRhdGU7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxD
b29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPj4gbGF5ZXJz
VG9VcGRhdGU7CiAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJzVG9SZW1vdmU7
CiAKICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4gaW1hZ2VzVG9DcmVhdGU7
CiAgICAgVmVjdG9yPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+IGltYWdlc1RvUmVtb3ZlOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gPiA+IGltYWdlc1RvVXBkYXRlOworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkQnVmZmVyPj4+
IGltYWdlc1RvVXBkYXRlOwogICAgIFZlY3RvcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPiBp
bWFnZXNUb0NsZWFyOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCAvKiBhdGxhc0lE
ICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+ID4gdXBkYXRlQXRsYXNlc1RvQ3JlYXRl
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPENv
b3JkaW5hdGVkQnVmZmVyPj4+IHVwZGF0ZUF0bGFzZXNUb0NyZWF0ZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuY3BwCmluZGV4IGQwM2Y0ZjNjNDNiYzE4NjYxY2Y4MGEyMWIwNjIzMDMz
MzYzOGYwOWQuLmEyMjFkODhiZjA3NWEyMTE2MTM4ZWI5MGVlMGFhYjk3ZmY5YTVlOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNw
cApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEltYWdl
QmFja2luZ1N1cmZhY2VDbGllbnQgOiBwdWJsaWMgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQg
eworY2xhc3MgSW1hZ2VCYWNraW5nU3VyZmFjZUNsaWVudCA6IHB1YmxpYyBDb29yZGluYXRlZEJ1
ZmZlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBJbWFnZUJhY2tpbmdTdXJmYWNlQ2xpZW50KElt
YWdlJiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQpAQCAtMTE4LDI4ICsxMTgsMjMgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBk
YXRlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3Vy
ZmFjZTo6Y3JlYXRlKEludFNpemUobV9pbWFnZS0+c2l6ZSgpKSwgIW1faW1hZ2UtPmN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhh
IDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpOb0ZsYWdzKTsKLSAgICBpZiAoIW1fc3VyZmFjZSkgewot
ICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBt
X2J1ZmZlciA9IENvb3JkaW5hdGVkQnVmZmVyOjpjcmVhdGUoSW50U2l6ZShtX2ltYWdlLT5zaXpl
KCkpLCAhbV9pbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgPyBDb29yZGluYXRl
ZEJ1ZmZlcjo6U3VwcG9ydHNBbHBoYSA6IENvb3JkaW5hdGVkQnVmZmVyOjpOb0ZsYWdzKTsKKyAg
ICBBU1NFUlQobV9idWZmZXIpOwogCiAgICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCks
IEludFNpemUobV9pbWFnZS0+c2l6ZSgpKSk7CiAKICAgICBJbWFnZUJhY2tpbmdTdXJmYWNlQ2xp
ZW50IHN1cmZhY2VDbGllbnQoKm1faW1hZ2UsIHJlY3QpOwotICAgIG1fc3VyZmFjZS0+cGFpbnRU
b1N1cmZhY2UocmVjdCwgc3VyZmFjZUNsaWVudCk7CisgICAgbV9idWZmZXItPnBhaW50VG9TdXJm
YWNlKHJlY3QsIHN1cmZhY2VDbGllbnQpOwogCiAgICAgbV9uYXRpdmVJbWFnZVB0ciA9IG1faW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKLSAgICBtX2NsaWVudC0+dXBkYXRl
SW1hZ2VCYWNraW5nKGlkKCksIG1fc3VyZmFjZS5jb3B5UmVmKCkpOworICAgIG1fY2xpZW50LT51
cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9idWZmZXIuY29weVJlZigpKTsKICAgICBtX2lzRGly
dHkgPSBmYWxzZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1
cmZhY2VJZk5lZWRlZCgpCiB7Ci0gICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1bnRpbCBV
SSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KLSAgICAvLyBJZiBtX3N1cmZhY2UgZXhpc3RzLCBp
dCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgotICAgIG1fc3VyZmFjZSA9IG51
bGxwdHI7CisgICAgbV9idWZmZXIgPSBudWxscHRyOwogfQogCiBzdGF0aWMgY29uc3QgU2Vjb25k
cyBjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCB7IDNfcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA0YzY5ZTU4MjY2OWZl
Mjc4OWFhYzZhYTEyYzMzYjU1YWFhNzI3YjljLi5kNWJjY2FjNTMzYjVhYjQ5NmVjNzkxMGJlZjBl
YmZjYjY3N2M4OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsOCArMjgsOCBAQAogI2RlZmluZSBDb29yZGluYXRlZElt
YWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRCdWZmZXIuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUu
aCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQyLDcg
KzQyLDcgQEAgcHVibGljOgogICAgIGNsYXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiYmKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkQnVmZmVyPiYmKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CiAgICAgfTsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0
ZToKICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7CiAgICAgVmVjdG9yPEhvc3Qq
PiBtX2hvc3RzOwogCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwor
ICAgIFJlZlB0cjxDb29yZGluYXRlZEJ1ZmZlcj4gbV9idWZmZXI7CiAKICAgICBUaW1lciBtX2Ns
ZWFyQ29udGVudHNUaW1lcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRTdXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkODE1YmQwMjdk
YWI1NWNmNDRlYzE0ODhlMzE4Y2E4ZmYxNjM1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9y
eSogQ29vcmRpbmF0ZWRTdXJmYWNlOjpzX2ZhY3RvcnkgPSAwOwotCi12b2lkIENvb3JkaW5hdGVk
U3VyZmFjZTo6c2V0RmFjdG9yeShDb29yZGluYXRlZFN1cmZhY2U6OkZhY3RvcnkgZmFjdG9yeSkK
LXsKLSAgICBzX2ZhY3RvcnkgPSBmYWN0b3J5OwotfQotCi1SZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPiBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFn
cyBmbGFncykKLXsKLSAgICBBU1NFUlQoc19mYWN0b3J5KTsKLSAgICByZXR1cm4gc19mYWN0b3J5
KHNpemUsIGZsYWdzKTsKLX0KLQotQ29vcmRpbmF0ZWRTdXJmYWNlOjpDb29yZGluYXRlZFN1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fZmxhZ3MoZmxhZ3MpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjNmYjYwZmNjOTFhNzIwMWI5NjdhODdmZTI1Y2E4M2EzN2U0ZTVkMC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29tcGFueSAxMDAsIEluYy4KLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDb29y
ZGluYXRlZFN1cmZhY2VfaAotI2RlZmluZSBDb29yZGluYXRlZFN1cmZhY2VfaAotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEJpdG1hcFRleHR1cmU7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxDb29yZGluYXRlZFN1cmZhY2U+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZsYWcgewot
ICAgICAgICBOb0ZsYWdzID0gMCwKLSAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDEgPDwgMCwKLSAg
ICB9OwotICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Ci0KLSAgICBjbGFzcyBDbGllbnQgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgPSBkZWZhdWx0OwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1N1cmZhY2VDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYpID0g
MDsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBGYWN0
b3J5KGNvbnN0IEludFNpemUmLCBGbGFncyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RmFjdG9yeShG
YWN0b3J5KTsKLSAgICBzdGF0aWMgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlKGNv
bnN0IEludFNpemUmLCBGbGFncyk7Ci0KLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFN1cmZhY2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBm
bGFncygpICYgU3VwcG9ydHNBbHBoYTsgfQotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9TdXJmYWNlKGNvbnN0IElu
dFJlY3QmLCBDbGllbnQmKSA9IDA7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmly
dHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoQml0bWFwVGV4dHVyZSYsIGNvbnN0IEludFJlY3QmIHRh
cmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCkgPSAwOwotI2VuZGlmCi0KLXByb3Rl
Y3RlZDoKLSAgICBDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKLSAg
ICBGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KLQotICAgIEludFNpemUg
bV9zaXplOwotICAgIEZsYWdzIG1fZmxhZ3M7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogc19mYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlmIC8v
IENvb3JkaW5hdGVkU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RpbGUuaAppbmRleCA3YjEzZjE1YjZk
MWNmMGRjYThkN2MyMThiY2ViNTUzZWQ2MWU2ZDQ5Li5kNzhmZmVhZWJiYjJlNmNlMjlmYjkzMTgz
ZTNiMzYyMzBhZWZkNzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9UaWxlLmgKQEAgLTI3LDcgKzI3LDggQEAK
ICNkZWZpbmUgVGlsZV9oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgpAQCAtMzcsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKIAotY2xhc3Mg
VGlsZSA6IHB1YmxpYyBDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCB7CitjbGFzcyBUaWxlIDog
cHVibGljIENvb3JkaW5hdGVkQnVmZmVyOjpDbGllbnQgewogcHVibGljOgogICAgIHR5cGVkZWYg
SW50UG9pbnQgQ29vcmRpbmF0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGls
ZWRCYWNraW5nU3RvcmVDbGllbnQuaAppbmRleCBkNTcxOWU3MmI5NTRjNDU1ODhkMDNlNmJhYTI0
ZjQwMzBlNDg1OTYxLi45N2Q4MzdjZTNlYzk4NmQ5MDhiNDdmNjE0YWFmNDEzNDZiN2FjOTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQu
aApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudF9oCiAj
ZGVmaW5lIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50X2gKIAotI2luY2x1ZGUgIkNvb3JkaW5hdGVk
U3VyZmFjZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRp
bGVJRCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXpl
JiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGll
bnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IEludFNpemUm
LCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmLCBDb29yZGluYXRlZEJ1ZmZlcjo6Q2xpZW50
JikgPSAwOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
R1RLLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyM2RmYmZl
ZWM5Y2E4YjJhYTk2M2U2MTZmYjQwMzc5OGYzMjVlZjgwLi4wZWNlZjJhYTNkNGZmZDIxZjdiYWI5
ODc4N2ZmNmQxYTY4NDYwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RL
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTczLDcgKzcz
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9TaW1wbGVWaWV3cG9ydENvbnRyb2xsZXIuY3BwCiAKICAgICBTaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvQ29tcG9zaXRpbmdSdW5Mb29wLmNwcAot
ICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRT
YWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKICAg
ICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRD
b21wb3NpdG9yLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNt
YWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCAzNTI4Yzc0MzA4ZjUz
YmFhZGFjZDYyMGUyYmExNjUyYjQ1ZjJkOTQxLi42NDRkYzY4MDFiYmQ0ZjY3MDVkYjFkMjY1ZGVm
MzVmZWZlY2ZlZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTEwNSw3ICsxMDUsNiBA
QCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL1NpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKIAogICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9Db21wb3NpdGluZ1J1bkxvb3AuY3BwCi0gICAg
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZFNhZmVD
b29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhy
ZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKICAgICBTaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1v
bml0b3IuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
NDA0MDU0MjBjZjc1MDE5NTUzY2QwMTU0MzU0NTY4NTdkMGQxMGFiYy4uNmYzMmU2NGZjNTM2ZjNk
YWNmMTg5YjRjNzQ4MmQ3ZjFjMWRlNmM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5jcHAKQEAgLTIxLDcgKzIxLDggQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oIgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgPFdl
YkNvcmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+CisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFw
cGVyR0wuaD4KQEAgLTMyLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyJiB0ZXh0
dXJlTWFwcGVyKQogewotICAgIGlmICghbV9zdXJmYWNlKQorICAgIGlmICghbV9idWZmZXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVCh0ZXh0dXJlTWFwcGVyLm1heFRleHR1cmVTaXpl
KCkud2lkdGgoKSA+PSBtX3RpbGVSZWN0LnNpemUoKS53aWR0aCgpKTsKQEAgLTQzLDIwICs0NCwy
MSBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoVGV4dHVy
ZU1hcHBlciYgdGV4dHVyZU1hcHBlcikKIAogICAgIGlmICghbV90ZXh0dXJlIHx8IHVuc2NhbGVk
VGlsZVJlY3QgIT0gcmVjdCgpKSB7CiAgICAgICAgIHNldFJlY3QodW5zY2FsZWRUaWxlUmVjdCk7
Ci0gICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVNYXBwZXIuYWNxdWlyZVRleHR1cmVGcm9tUG9v
bChtX3RpbGVSZWN0LnNpemUoKSwgbV9zdXJmYWNlLT5zdXBwb3J0c0FscGhhKCkgPyBCaXRtYXBU
ZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKLSAgICB9IGVs
c2UgaWYgKG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgpID09IG1fdGV4dHVyZS0+aXNPcGFxdWUo
KSkKLSAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3RpbGVSZWN0LnNpemUoKSwgbV9zdXJmYWNl
LT5zdXBwb3J0c0FscGhhKCkpOworICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLmFj
cXVpcmVUZXh0dXJlRnJvbVBvb2wobV90aWxlUmVjdC5zaXplKCksIG1fYnVmZmVyLT5zdXBwb3J0
c0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6
Tm9GbGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fYnVmZmVyLT5zdXBwb3J0c0FscGhhKCkgPT0gbV90
ZXh0dXJlLT5pc09wYXF1ZSgpKQorICAgICAgICBtX3RleHR1cmUtPnJlc2V0KG1fdGlsZVJlY3Qu
c2l6ZSgpLCBtX2J1ZmZlci0+c3VwcG9ydHNBbHBoYSgpKTsKIAotICAgIG1fc3VyZmFjZS0+Y29w
eVRvVGV4dHVyZSgqbV90ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0g
ICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKKyAgICBhdXRvIHVwbG9hZEltYWdlID0gbV9idWZmZXIt
PnVwbG9hZEltYWdlKCk7CisgICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyh1cGxvYWRJbWFn
ZS5nZXQoKSwgbV9zb3VyY2VSZWN0LCBtX2J1ZmZlck9mZnNldCwgQml0bWFwVGV4dHVyZTo6VXBk
YXRlQ2FuTW9kaWZ5T3JpZ2luYWxJbWFnZURhdGEpOworICAgIG1fYnVmZmVyID0gbnVsbHB0cjsK
IH0KIAotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+JiYgYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQordm9p
ZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFJlZlB0cjxDb29yZGluYXRl
ZEJ1ZmZlcj4mJiBidWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgbV9zb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBtX3RpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgbV9z
dXJmYWNlT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3VyZmFjZSA9IFdURk1vdmUoYnVmZmVyKTsK
KyAgICBtX2J1ZmZlck9mZnNldCA9IG9mZnNldDsKKyAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVm
ZmVyKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZSh1aW50
MzJfdCBpZCwgZmxvYXQgc2NhbGUpCkBAIC03NywxMSArNzksMTEgQEAgdm9pZCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMoKQogICAgICAgICBtX3RpbGVzVG9SZW1vdmUu
YWRkKGtleSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUo
dWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiYmIGJhY2tCdWZmZXIsIGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxl
KHVpbnQzMl90IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgUmVmUHRyPENvb3JkaW5hdGVkQnVmZmVyPiYmIGJ1ZmZlciwgY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKIHsKICAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQo
KSk7Ci0gICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIFdU
Rk1vdmUoYmFja0J1ZmZlciksIG9mZnNldCk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIo
dGlsZVJlY3QsIHNvdXJjZVJlY3QsIFdURk1vdmUoYnVmZmVyKSwgb2Zmc2V0KTsKIH0KIAogUmVm
UHRyPEJpdG1hcFRleHR1cmU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaAppbmRleCAxYjkzMmJiNGRiZjA2
OWZhNzZmY2I2NzMzYjI1NzA3Y2MzYTk3NjNhLi4wNmU2OWY5ZTkzMmVmOGM3NTU0MzUxMGUxYmZl
ZWYwZDA3OTE4ODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCkBAIC0z
MCw3ICszMCw3IEBACiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ29vcmRpbmF0ZWRT
dXJmYWNlOworY2xhc3MgQ29vcmRpbmF0ZWRCdWZmZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBmbG9hdCBzY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KICAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXImKTsKLSAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRTdXJmYWNlPiYmIGJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2
b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI+JiYsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jik7CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZEJ1ZmZlcj4gbV9idWZmZXI7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3NvdXJjZVJlY3Q7CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBtX3RpbGVSZWN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1f
c3VyZmFjZU9mZnNldDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2J1ZmZlck9mZnNldDsKICAg
ICBmbG9hdCBtX3NjYWxlOwogfTsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlVGls
ZSh1aW50MzJfdCB0aWxlSUQpOwogICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKLSAgICB2b2lk
IHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+
JiYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCB1cGRhdGVUaWxlKHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI+JiYsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CiAgICAgc3RhdGljIFJlZjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSk7IH0K
ICAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXImKTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IDEyZmMw
NjMzMDJmNzJhYjM3NDg0ZGVhNTQ1ZGY3YWYyNzA3ZDM0NDIuLmUyY2MwOGM2ZjFiMDM5NTJmNWVh
Mzk0YTAxODczZGQwODU0ZmI0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5jcHAKQEAgLTQzOCwxMCArNDM4LDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzeW5jVXBkYXRlQXRsYXNlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmCiAg
ICAgICAgIGNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzLmZpcnN0LCBhdGxhcy5zZWNvbmQuY29weVJl
ZigpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+JiYgc3VyZmFj
ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50
MzJfdCBhdGxhc0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAg
IEFTU0VSVCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7Ci0gICAgbV9zdXJmYWNlcy5h
ZGQoYXRsYXNJRCwgV1RGTW92ZShzdXJmYWNlKSk7CisgICAgbV9zdXJmYWNlcy5hZGQoYXRsYXNJ
RCwgV1RGTW92ZShidWZmZXIpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCkBAIC00NzcsNyArNDc3LDcgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWcKICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQs
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlELCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiYmIHN1cmZhY2UpCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUmVmUHRyPENvb3JkaW5hdGVkQnVmZmVyPiYmIGJ1ZmZl
cikKIHsKICAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKICAg
ICBhdXRvIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CkBAIC00ODUsMTEgKzQ4
NSwxMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZwogCiAgICAgLy8gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgaXMgcmVhbGl6ZWQgdG8gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgd2l0aCBvbmx5
IG9uZSB0aWxlIGluIFVJIFByb2Nlc3MuCiAgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKDEg
LyogaWQgKi8sIDEgLyogc2NhbGUgKi8pOwotICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVy
bygpLCBzdXJmYWNlLT5zaXplKCkpOworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygp
LCBidWZmZXItPnNpemUoKSk7CiAgICAgLy8gU2VlIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZSgpCiAgICAgQVNTRVJUKDIwMDAgPj0gc3RkOjpt
YXgocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAgYmFja2luZ1N0b3JlLT5zZXRT
aXplKHJlY3Quc2l6ZSgpKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUoMSAvKiBpZCAq
LywgcmVjdCwgcmVjdCwgV1RGTW92ZShzdXJmYWNlKSwgcmVjdC5sb2NhdGlvbigpKTsKKyAgICBi
YWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUoMSAvKiBpZCAqLywgcmVjdCwgcmVjdCwgV1RGTW92ZShi
dWZmZXIpLCByZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lLmgKaW5kZXggNGIxZjA0NjAwYTQxNmM0YTUxMjc3OTEzYjRiM2Q0YzI3MDY0YzZl
NS4uZDMyMzkyMzk2MDM0MDFjNTE5ZWJiMzc2NzcyMGY0MTU2OGZmYTk4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0yMiw4ICsyMiw5IEBACiAjZGVmaW5lIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CkBAIC0xMDcsMTIgKzEwOCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TGF5ZXJS
ZXBhaW50Q291bnRJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwogCiAgICAgdm9pZCBzeW5j
VXBkYXRlQXRsYXNlcyhjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsK
LSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFJlZlB0cjxXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U+JiYpOworICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQnVmZmVyPiYmKTsK
ICAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwogCiAgICAgdm9p
ZCBzeW5jSW1hZ2VCYWNraW5ncyhjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUmKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNl
PiYmKTsKKyAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI+JiYpOwogICAg
IHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKIApAQCAtMTYxLDcgKzE2Miw3IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8V2ViQ29yZTo6VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+IG1fcGxhdGZvcm1MYXllclByb3hpZXM7CiAj
ZW5kaWYKIAotICAgIEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4+IG1fc3VyZmFjZXM7CisgICAgSGFzaE1hcDx1aW50MzJf
dCAvKiBhdGxhc0lEICovLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI+PiBtX3N1
cmZhY2VzOwogCiAgICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkg
dGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0
aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4KICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmVDbGllbnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkU2FmZUNvb3JkaW5hdGVk
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3Ro
cmVhZGVkY29tcG9zaXRvci9UaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhZjRiOWRlM2JiMTIxYmU4ZTA4MGE2ZWQyMjNhMzhk
NjZiMDkyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRv
ci9UaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIlRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UuaCIKLQotI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlZjxU
aHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlPiBUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNl
OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBm
bGFncykKLXsKLSAgICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQg
YnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKLSAgICAvLyBpc24ndCB1c2VkIGJ5
IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZShzaXplLCBmbGFn
cywgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKSkpOwotfQotCi1UaHJl
YWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlOjpUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlKGNv
bnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKQotICAgIDogQ29vcmRpbmF0ZWRTdXJmYWNl
KHNpemUsIGZsYWdzKQotICAgICwgbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCi17Ci19
Ci0KLVRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2U6On5UaHJlYWRTYWZlQ29vcmRpbmF0ZWRT
dXJmYWNlKCkKLXsKLX0KLQotdm9pZCBUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlOjpwYWlu
dFRvU3VyZmFjZShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVu
dCYgY2xpZW50KQotewotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IGJlZ2luUGFpbnQo
cmVjdCk7Ci0gICAgY2xpZW50LnBhaW50VG9TdXJmYWNlQ29udGV4dChjb250ZXh0KTsKLSAgICBl
bmRQYWludCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIFRocmVhZFNhZmVDb29yZGluYXRlZFN1
cmZhY2U6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBtX2lt
YWdlQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICBn
cmFwaGljc0NvbnRleHQuY2xpcChyZWN0KTsKLSAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRl
KHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dDsKLX0KLQot
dm9pZCBUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlOjplbmRQYWludCgpCi17Ci0gICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXIpOwotICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS5yZXN0b3Jl
KCk7Ci19Ci0KLXZvaWQgVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZTo6Y29weVRvVGV4dHVy
ZShCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IElu
dFBvaW50JiBzb3VyY2VPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1faW1hZ2VCdWZmZXIpOwotICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotICAgIHRleHR1cmUudXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRh
cmdldCwgc291cmNlT2Zmc2V0LCBCaXRtYXBUZXh0dXJlOjpVcGRhdGVDYW5Nb2RpZnlPcmlnaW5h
bEltYWdlRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZFNhZmVDb29yZGlu
YXRlZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5ZWMwNzgxNjUzZmNiNjI0YzlhNWEzOTM5YTAyNDE1
NzY1MDdiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRv
ci9UaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZV9oCi0jZGVmaW5lIFRocmVhZFNh
ZmVDb29yZGluYXRlZFN1cmZhY2VfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JbWFnZUJ1ZmZlci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVGhyZWFkU2Fm
ZUNvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2Ug
ewotcHVibGljOgotICAgIHZpcnR1YWwgflRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UoKTsK
LQotICAgIC8vIENyZWF0ZSBhIG5ldyBUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlIGFuZCBh
bGxvY2F0ZSBlaXRoZXIgYSBHcmFwaGljc1N1cmZhY2Ugb3IgYSBJbWFnZUJ1ZmZlciBhcyBiYWNr
aW5nLgotICAgIHN0YXRpYyBSZWY8VGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZs
YWdzKTsKLQotICAgIHZvaWQgcGFpbnRUb1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjb3B5VG9UZXh0dXJlKFdlYkNvcmU6OkJpdG1hcFRleHR1cmUmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzb3VyY2VPZmZzZXQpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3Ms
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4pOwotCi0gICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBiZWdpblBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAg
ICB2b2lkIGVuZFBhaW50KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIFRocmVhZFNhZmVD
b29yZGluYXRlZFN1cmZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggMDIyOGEwOTUzMGFlZDMwNDdlYWQxYjA1Yzhk
NzEzNTljMGQ5NDBkNS4uODdiNjMwMDFlZDM2MjAxNTQyN2NhYTcxYjA4YWM4ODI0NTFhYWFhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuY3BwCkBAIC0yMjQsMTAgKzIyNCwxMCBAQCB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSQogICAg
IG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuYXBwZW5kKGltYWdlSUQpOwogfQogCi12b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQsIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+JiYgY29vcmRpbmF0ZWRT
dXJmYWNlKQordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBSZWZQdHI8Q29vcmRpbmF0ZWRCdWZm
ZXI+JiYgYnVmZmVyKQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0
YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBXVEZNb3Zl
KGNvb3JkaW5hdGVkU3VyZmFjZSkpKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBXVEZNb3ZlKGJ1ZmZlcikpKTsKIH0KIAogdm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKQEAgLTI5Myw5ICsyOTMsOSBAQCBmbG9hdCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAogICAgIHJldHVybiBt
X3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwogfQogCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFJlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+JiYgY29vcmRpbmF0ZWRTdXJmYWNlKQordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBSZWZQdHI8Q29vcmRpbmF0
ZWRCdWZmZXI+JiYgYnVmZmVyKQogewotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRl
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBXVEZNb3ZlKGNvb3JkaW5hdGVkU3VyZmFj
ZSkpKTsKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoYXRsYXNJRCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKQEAgLTM4NSwx
MSArMzg1LDExIEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3Rv
cmVzKCkKICAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKIH0KIAotYm9vbCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGlu
YXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9m
ZnNldCwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQmIGNsaWVudCkKK2Jvb2wgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRCdWZmZXI6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9m
ZnNldCwgQ29vcmRpbmF0ZWRCdWZmZXI6OkNsaWVudCYgY2xpZW50KQogewogICAgIGZvciAoYXV0
byYgdXBkYXRlQXRsYXMgOiBtX3VwZGF0ZUF0bGFzZXMpIHsKICAgICAgICAgVXBkYXRlQXRsYXMq
IGF0bGFzID0gdXBkYXRlQXRsYXMuZ2V0KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNB
bHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsK
KyAgICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0
ZWRCdWZmZXI6OlN1cHBvcnRzQWxwaGEpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmUg
ZmFsc2UgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KICAgICAgICAgICAg
IGlmIChhdGxhcy0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQs
IGNsaWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IDJkOTZkMGE5YzBl
MzFkYjQ4ZDJiYjgxMDQ2MzAxZjY0ZTg0MTVmMTUuLjI0NTA2NGJkMzEzYjYzN2EwMjFmYTI5ZTFl
NTMwZjUzMTg1OWFjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9z
aXRpbmdDb29yZGluYXRvci5oCkBAIC0zOSwxMCArMzksMTAgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGFnZTsKK2NsYXNzIENv
b3JkaW5hdGVkQnVmZmVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR3JhcGhpY3NM
YXllcjsKLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKK2NsYXNzIFBhZ2U7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1
cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVm
UHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1
cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVm
UHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQnVmZmVyPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIGNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgb3ZlcnJpZGU7CiAKQEAgLTExNiwxMSArMTE2LDExIEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dCBvdmVycmlkZTsKICAgICBSZWY8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBvdmVy
cmlkZTsKLSAgICBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgLyogYXRsYXNJRCAq
LywgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVu
dCYpIG92ZXJyaWRlOworICAgIGJvb2wgcGFpbnRUb1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkQnVmZmVyOjpGbGFncywgdWludDMyX3QmIC8qIGF0
bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI6
OkNsaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYp
IG92ZXJyaWRlOwogCiAgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAotICAgIHZvaWQgY3JlYXRl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVk
U3VyZmFjZT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCdWZmZXI+JiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgb3ZlcnJpZGU7
CiAKICAgICAvLyBHcmFwaGljc0xheWVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDViOTk5MmRhNDY5
NjhiODdmNGJiYjJmMDMzZTFmYWRhYWI0ZDQxZmUuLjNhZDM4MjgzNTllMzFiYWFkYjU3YmMxOGYw
YTJjNzAzNmNmZWVlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM3LDEwICszNyw2IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJv
bGxlci5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotI2luY2x1
ZGUgIlRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UuaCIKLSNlbmRpZgotCiAjaWYgVVNFKEdM
SUJfRVZFTlRfTE9PUCkKICNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHku
aD4KICNlbmRpZgpAQCAtNjksNyArNjUsNiBAQCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQogI2VuZGlmCiAgICAgbV9j
b29yZGluYXRvci5jcmVhdGVSb290TGF5ZXIobV93ZWJQYWdlLnNpemUoKSk7CiAKLSAgICBDb29y
ZGluYXRlZFN1cmZhY2U6OnNldEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKTsKICAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIApAQCAtMjE5LDE3ICsyMTQsNiBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmCiAgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CiB9CiAK
LVJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmxhZ3MgZmxhZ3MpCi17Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVB
REVEKQotICAgIHJldHVybiBUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoc2l6
ZSwgZmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWdzKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQotCiB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsK
ICAgICBtX2Nvb3JkaW5hdG9yLmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgK
aW5kZXggYWE1MWNhYzcyZWRhOTIyNmUxYWZhY2RiN2I2NGFhMzkwODg3NjM2Ni4uOTI1MzYzNjlk
NDdjYWU1ZjhmNmE1OWEzYWMxYWQ0ZWM3OTZkYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
Q29vcmRpbmF0ZWRTdXJmYWNlOwogY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CiB9CiAKQEAg
LTgwLDggKzc5LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2b2lkIGxheWVyRmx1c2hU
aW1lckZpcmVkKCk7CiAKLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKLQogICAgIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3IgbV9jb29yZGluYXRvcjsKICAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIg
eyB0cnVlIH07CiAgICAgYm9vbCBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKaW5kZXggZTJj
NGZmZWVlNDJkZGM2Yjc1OWQ4MTIxY2EyYTY3ODU5YjYzMmFjYy4uMGJjNmVmNGYxM2NlMzY3NWI1
MmMxZjFmNTVmNjlkMTBkM2Y2MGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVB
dGxhcy5jcHAKQEAgLTMyLDkgKzMyLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBVcGRhdGVBdGxhc1N1cmZhY2VDbGllbnQgZmluYWwg
OiBwdWJsaWMgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQgeworY2xhc3MgVXBkYXRlQXRsYXNT
dXJmYWNlQ2xpZW50IGZpbmFsIDogcHVibGljIENvb3JkaW5hdGVkQnVmZmVyOjpDbGllbnQgewog
cHVibGljOgotICAgIFVwZGF0ZUF0bGFzU3VyZmFjZUNsaWVudChDb29yZGluYXRlZFN1cmZhY2U6
OkNsaWVudCYgY2xpZW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHN1cHBvcnRzQWxwaGEp
CisgICAgVXBkYXRlQXRsYXNTdXJmYWNlQ2xpZW50KENvb3JkaW5hdGVkQnVmZmVyOjpDbGllbnQm
IGNsaWVudCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBzdXBwb3J0c0FscGhhKQogICAgICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBt
X3N1cHBvcnRzQWxwaGEoc3VwcG9ydHNBbHBoYSkKQEAgLTUzLDI2ICs1MywyNCBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50JiBtX2Ns
aWVudDsKKyAgICBDb29yZGluYXRlZEJ1ZmZlcjo6Q2xpZW50JiBtX2NsaWVudDsKICAgICBJbnRT
aXplIG1fc2l6ZTsKICAgICBib29sIG1fc3VwcG9ydHNBbHBoYTsKIH07CiAKLVVwZGF0ZUF0bGFz
OjpVcGRhdGVBdGxhcyhDbGllbnQmIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGbGFncyBmbGFncykKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhDbGllbnQmIGNs
aWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRCdWZmZXI6OkZsYWdzIGZsYWdzKQogICAg
IDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9idWZmZXIoQ29vcmRpbmF0ZWRCdWZmZXI6OmNy
ZWF0ZShuZXh0UG93ZXJPZlR3byhJbnRTaXplKGRpbWVuc2lvbiwgZGltZW5zaW9uKSksIGZsYWdz
KSkKIHsKICAgICBzdGF0aWMgdWludDMyX3QgbmV4dElEID0gMDsKICAgICBtX0lEID0gKytuZXh0
SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24s
IGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRl
KHNpemUsIGZsYWdzKTsKIAotICAgIG1fY2xpZW50LmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1f
c3VyZmFjZS5jb3B5UmVmKCkpOworICAgIG1fY2xpZW50LmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQs
IG1fYnVmZmVyLmNvcHlSZWYoKSk7CiB9CiAKIFVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQog
ewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fY2xpZW50LnJlbW92ZVVwZGF0ZUF0bGFz
KG1fSUQpOworICAgIG1fY2xpZW50LnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwogfQogCiB2b2lk
IFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTg4LDcgKzg2LDcgQEAgdm9p
ZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQogICAgIG1fYXJlYUFsbG9jYXRvciA9IG51
bGxwdHI7CiB9CiAKLWJvb2wgVXBkYXRlQXRsYXM6OnBhaW50T25BdmFpbGFibGVCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQsIENv
b3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50JiBjbGllbnQpCitib29sIFVwZGF0ZUF0bGFzOjpwYWlu
dE9uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhc0lE
LCBJbnRQb2ludCYgb2Zmc2V0LCBDb29yZGluYXRlZEJ1ZmZlcjo6Q2xpZW50JiBjbGllbnQpCiB7
CiAgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzID0gMDsKICAgICBidWlsZExheW91dElmTmVlZGVk
KCk7CkBAIC05OCwxNiArOTYsMTMgQEAgYm9vbCBVcGRhdGVBdGxhczo6cGFpbnRPbkF2YWlsYWJs
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCB1aW50MzJfdCYgYXRsYXNJRCwKICAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9zdXJm
YWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBhdGxhc0lEID0gbV9JRDsKIAogICAg
IC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVz
LgogICAgIG9mZnNldCA9IHJlY3QubG9jYXRpb24oKTsKIAogICAgIFVwZGF0ZUF0bGFzU3VyZmFj
ZUNsaWVudCBzdXJmYWNlQ2xpZW50KGNsaWVudCwgc2l6ZSwgc3VwcG9ydHNBbHBoYSgpKTsKLSAg
ICBtX3N1cmZhY2UtPnBhaW50VG9TdXJmYWNlKHJlY3QsIHN1cmZhY2VDbGllbnQpOworICAgIG1f
YnVmZmVyLT5wYWludFRvU3VyZmFjZShyZWN0LCBzdXJmYWNlQ2xpZW50KTsKIAogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oCmluZGV4IDYzZjc2
YmU5NWY2MzQ5ZDg1NjA4MmJlNzc1ZmFmZDRkZDY0MGVlOTQuLmIyZTRhNjE2MWE1OThlNzIyOGM3
Mzg3ODg1YjY1NmMyMjc3NTJmNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFz
LmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAogCiAjaW5jbHVkZSAi
QXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDAsMTkgKzQwLDE5
IEBAIGNsYXNzIFVwZGF0ZUF0bGFzIHsKIHB1YmxpYzoKICAgICBjbGFzcyBDbGllbnQgewogICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IC8qIGlkICovLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPiYmKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCAvKiBpZCAqLywg
UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQnVmZmVyPiYmKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCAvKiBpZCAqLykgPSAwOwogICAgIH07
CiAKLSAgICBVcGRhdGVBdGxhcyhDbGllbnQmLCBpbnQgZGltZW5zaW9uLCBXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKKyAgICBVcGRhdGVBdGxhcyhDbGllbnQmLCBpbnQgZGlt
ZW5zaW9uLCBXZWJDb3JlOjpDb29yZGluYXRlZEJ1ZmZlcjo6RmxhZ3MpOwogICAgIH5VcGRhdGVB
dGxhcygpOwogCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9CisgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLT5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KLSAgICBib29sIHBhaW50T25B
dmFpbGFibGVCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lE
LCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0LCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6
OkNsaWVudCYpOworICAgIGJvb2wgcGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkQnVmZmVyOjpDbGllbnQmKTsKICAgICB2b2lkIGRpZFN3YXBC
dWZmZXJzKCk7Ci0gICAgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlLT5zdXBwb3J0c0FscGhhKCk7IH0KKyAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci0+c3VwcG9ydHNBbHBoYSgpOyB9CiAKICAgICB2b2lkIGFkZFRpbWVJ
bmFjdGl2ZShkb3VibGUgc2Vjb25kcykKICAgICB7CkBAIC03Miw3ICs3Miw3IEBAIHByaXZhdGU6
CiBwcml2YXRlOgogICAgIENsaWVudCYgbV9jbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdl
bmVyYWxBcmVhQWxsb2NhdG9yPiBtX2FyZWFBbGxvY2F0b3I7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OkNvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOworICAgIFJlZjxXZWJDb3JlOjpDb29yZGlu
YXRlZEJ1ZmZlcj4gbV9idWZmZXI7CiAgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kcyB7
IDAgfTsKICAgICB1aW50MzJfdCBtX0lEIHsgMCB9OwogfTsK
</data>
<flag name="review"
          id="346709"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>