<?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>150783</bug_id>
          
          <creation_ts>2015-11-01 14:50:16 -0800</creation_ts>
          <short_desc>Remove some dead and unneeded code (ScrollbarThemeSafari, RenderThemeSafari, OPENCL, a little color space logic)</short_desc>
          <delta_ts>2015-11-01 16:17:32 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138384</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-01 14:50:16 -0800</bug_when>
    <thetext>Remove some dead and unneeded code (ScrollbarThemeSafari, RenderThemeSafari, OPENCL, a little color space logic)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138390</commentid>
    <comment_count>1</comment_count>
      <attachid>264538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-01 14:55:29 -0800</bug_when>
    <thetext>Created attachment 264538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138391</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-01 14:56:37 -0800</bug_when>
    <thetext>This is a part of my Color/ColorSpace patch from bug 150305 that can clearly be landed separately, first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138411</commentid>
    <comment_count>3</comment_count>
      <attachid>264538</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-01 16:17:28 -0800</bug_when>
    <thetext>Comment on attachment 264538
Patch

Clearing flags on attachment: 264538

Committed r191867: &lt;http://trac.webkit.org/changeset/191867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138412</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-01 16:17:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264538</attachid>
            <date>2015-11-01 14:55:29 -0800</date>
            <delta_ts>2015-11-01 16:17:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150783-20151101145434.patch</filename>
            <type>text/plain</type>
            <size>86930</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdjNjY0OGRkNGJhY2M3ZWVjNTY3Mjk2
NDU3MjYwNjVlZTdlNjQ1MzcuLjNkMDk5NTA5NDAzODM1OWRmNDFmMmIwY2ZkMTE1NTQ5NTYyYzY2
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMTEtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIGRlYWQgYW5kIHVubmVlZGVkIGNvZGUg
KFNjcm9sbGJhclRoZW1lU2FmYXJpLCBSZW5kZXJUaGVtZVNhZmFyaSwgT1BFTkNMLCBhIGxpdHRs
ZSBjb2xvciBzcGFjZSBsb2dpYykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6IFJlbW92ZWQgdGhlIE9QRU5DTCBm
ZWF0dXJlLCBubyBsb25nZXIgc3VwcG9ydGVkLgorCiAyMDE1LTExLTAxICBQaGlsaXAgQ2hpbWVu
dG8gIDxwaGlsaXAuY2hpbWVudG9AZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEZpeCBjb21i
aW5hdGlvbnMgb2YgUExBVEZPUk0oR1RLKSBhbmQgT1MoREFSV0lOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVl
YjcxOWEzODU2NmZmYjk1OWEwMmFlZjAxNzhiZTVmM2EyN2U3NGQuLmNhYzFmZmZhYTA3MmU5ODM2
ZGM4ODJiNWJkMGEzN2RiYzQ5Y2EwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAx
NS0xMS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHNvbWUgZGVhZCBhbmQgdW5uZWVkZWQgY29kZSAoU2Nyb2xsYmFyVGhlbWVTYWZhcmksIFJlbmRl
clRoZW1lU2FmYXJpLCBPUEVOQ0wsIGEgbGl0dGxlIGNvbG9yIHNwYWNlIGxvZ2ljKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzgzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlOiBSZW1vdmVkIFNjcm9sbGJhclRoZW1lU2FmYXJpLmNwcCwgbm8gcmVhc29uIHRv
IGNvbXBpbGUgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvSW1hZ2UpOiBSZW1vdmVkIHRoZSBjb2RlIHRoYXQgc2V0IGEgY29sb3Igc3BhY2UKKyAgICAg
ICAgb24gYW4gaW1hZ2UgaWYgaXQncyBzZXQgdG8gZGV2aWNlIGNvbG9yIHNwYWNlLiBUaGlzIGhh
cyBiZWVuIGRlYWQgY29kZSBmb3IgbWFueSByZWxlYXNlcworICAgICAgICBvZiBPUyBYIGFuZCBp
T1MgYXQgdGhpcyBwb2ludC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOiBSZW1vdmVkIHNvbWUgRU5BQkxFKE9QRU5DTCktb25seSBjb2RlLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseUFsbCk6IFJlbW92ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KTogUmVtb3ZlZCBFTkFCTEUoT1BFTkNMKS1v
bmx5IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnBsYXRmb3JtQXBwbHlP
cGVuQ0wpOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdCk6IFJlbW92ZWQgRU5BQkxFKE9QRU5DTCktb25seSBjb2RlLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6Om9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcik6IFJlbW92ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KTogUmVt
b3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IFJlbW92ZWQgRU5BQkxFKE9QRU5DTCktb25seSBjb2RlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDogUmVtb3ZlZCBFTkFCTEUo
T1BFTkNMKS1vbmx5IGNvZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVTYWZhcmkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3Jv
bGxiYXJUaGVtZVNhZmFyaS5oOiBSZW1vdmVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOiBSZW1vdmVkIGFuIG9ic29sZXRlIGNvbW1lbnQuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oOiBSZW1vdmVkLgorCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOiBSZW1vdmVkIEVOQUJMRShPUEVOQ0wpLW9ubHkgY29k
ZS4KKwogMjAxNS0xMS0wMSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSB0aGUgUmVzb3VyY2VVc2FnZU92ZXJsYXkgb3V0IG9mIHRoZSB3YXkgYnkgZGVm
YXVsdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDcyNWI3NDBjYjNjMzJhZDNiMTVjN2E2
ODIxMTkyOWQ0NzA5ZDk1ZTkuLjM5OWJkYTI1OTgzNjM2ODNmOWIyNDg5NGY4M2VlY2U1YWRjNzUw
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291
cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtNjM3LDEwICs2MzcsNiBAQCB0aGUgcHVi
bGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmlu
ZXMueGNjb25maWcgZmlsZQogI2RlZmluZSBFTkFCTEVfTk9USUZJQ0FUSU9OUyAwCiAjZW5kaWYK
IAotI2lmICFkZWZpbmVkKEVOQUJMRV9PUEVOQ0wpCi0jZGVmaW5lIEVOQUJMRV9PUEVOQ0wgMAot
I2VuZGlmCi0KICNpZiAhZGVmaW5lZChFTkFCTEVfT1BFTlRZUEVfVkVSVElDQUwpCiAjZGVmaW5l
IEVOQUJMRV9PUEVOVFlQRV9WRVJUSUNBTCAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdp
bkNhaXJvLmNtYWtlCmluZGV4IGQzMzM3ZGQ3MjM3OTViZWFjZjkwYmQ4ZjQ5Y2QxMjgyOGQxYzc4
ZjMuLjRkNGEyMmVhZmYzZDBjY2NhOTBjMGU2NTk0MGFiNWNiZjUyMWFjZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtMTM4LDcgKzEzOCw2IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAogICAgIHBs
YXRmb3JtL3dpbi9QRUltYWdlLmNwcAogICAgIHBsYXRmb3JtL3dpbi9QYXRoV2Fsa2VyLmNwcAot
ICAgIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5jcHAKICAgICBwbGF0Zm9ybS93
aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5k
ZXJlci5jcHAKICAgICBwbGF0Zm9ybS93aW4vV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAKaW5kZXggYmMwZWQzNjkzZTI5NDc4ZTFkNmU1MjdlNTA2NGNhMDE1YWRlNzYz
Mi4uODA3ZWUxMzk1MmYxZDNjYWNiMGY1MGFmOTUxNDYwNmE4NTExYzg2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCkBAIC05OTQsMTcgKzk5NCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICBtX3VuY29ycmVjdGVkQ29udGVudHNJbWFn
ZSA9IG5ld0ltYWdlOwogICAgICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0gbmV3SW1hZ2U7
CiAKLSNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oSU9TKQotICAgICAgICBDR0NvbG9y
U3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG1fcGVuZGluZ0NvbnRl
bnRzSW1hZ2UuZ2V0KCkpOwotCi0gICAgICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgZGV2aWNl
UkdCID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgICAgIGlmIChjb2xvclNw
YWNlICYmIENGRXF1YWwoY29sb3JTcGFjZSwgZGV2aWNlUkdCKSkgewotICAgICAgICAgICAgLy8g
Q29yZUdyYXBoaWNzIHJlbmRlcnMgaW1hZ2VzIHRhZ2dlZCB3aXRoIERldmljZVJHQiB1c2luZyB0
aGUgY29sb3Igc3BhY2Ugb2YgdGhlIG1haW4gZGlzcGxheS4gV2hlbiB3ZSBoYW5kIHN1Y2gKLSAg
ICAgICAgICAgIC8vIGltYWdlcyB0byBDQSB3ZSBuZWVkIHRvIHRhZyB0aGVtIHNpbWlsYXJseSBz
byBDQSByZW5kZXJpbmcgbWF0Y2hlcyBDRyByZW5kZXJpbmcuCi0gICAgICAgICAgICBzdGF0aWMg
Q0dDb2xvclNwYWNlUmVmIGdlbmVyaWNSR0IgPSBDR0Rpc3BsYXlDb3B5Q29sb3JTcGFjZShrQ0dE
aXJlY3RNYWluRGlzcGxheSk7Ci0gICAgICAgICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNlKG1fcGVuZGluZ0NvbnRlbnRz
SW1hZ2UuZ2V0KCksIGdlbmVyaWNSR0IpKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1f
Y29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9ySW1hZ2U7CiAgICAgICAgIGlm
ICghbV9jb250ZW50c0xheWVyKQogICAgICAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKaW5kZXggZTBjZWU1NTJkMzUzMzBkNDlkZTEzMTU3NmY1OTVmODM5OGQx
YzZjNS4uNTVlZmNjODkxNTNkMTdhNjQzYWFkNzUwM2M1Y2E3NTExY2RkZTFiNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmgKQEAgLTQ4LDkgKzQ4LDYgQEAgcHVibGljOgogICAgIGJvb2wgc2V0VmFsdWVzKGNv
bnN0IFZlY3RvcjxmbG9hdD4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKTsKLSNpZiBFTkFCTEUoT1BFTkNMKQotICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFw
cGx5T3BlbkNMKCk7Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggYzU1ZWM3ZjNkY2NlNmEyYWZkZjRiNmY1N2EzMTNj
MTM1ODIxMTRiNC4uMWFhNTY5YjVkYzRhYzJkY2Y1OWExNzYzOGQ3YmMwNjc4NmI5Y2Q5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKQEAgLTQ2LDkgKzQ2LDYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKE9QRU5DTCkKLSAg
ICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpIG92ZXJyaWRlOwotI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCAwNWU0M2RkNDZk
OTMzODRkODI3Mzc5OTYzZTk1ZmFjMjM0OTUxNWI1Li4zMGM2YzU1NWM1MmVjZjlkNTcxNTc2MWIz
YjBlODZlNWJkMDJiMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzMsOSArMzMsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCk7Ci0jaWYgRU5BQkxFKE9QRU5DTCkKLSAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
KTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCBjMzA1NzVj
YWJhMmQwM2QxY2JiMmU4ZTJhYzFhNmQyZmIxMWNjODI0Li5jYjRhZWE0OWVlYTQxYmI3MGYyNmNi
YmQyOGY0OWYwZjJjMmE2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTYwLDkgKzYwLDYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwogCiAgICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwotI2lmIEVOQUJMRShPUEVOQ0wpCi0g
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKLSNlbmRpZgogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggMzliYzMwZGE5OGQ1MGY0OTc1
M2FjNGVhODQyOTNmZmUwYWU5MzE3My4uMzE2NDBjM2Q2NzQ4MDQ3OTViZjJhM2RhODhiOTM1ZDk0
OTRjNDA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMTE0LDI0ICsxMTQsNiBAQCB1bnNpZ25l
ZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdAogICAgIHJl
dHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3RzKTsKIH0KIAotI2lmIEVOQUJMRShP
UEVOQ0wpCi12b2lkIEZpbHRlckVmZmVjdDo6YXBwbHlBbGwoKQotewotICAgIGlmIChoYXNSZXN1
bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQg
PSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQpIHsKLSAg
ICAgICAgYXBwbHkoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5pbkVycm9yKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotICAgICAgICBj
b250ZXh0LT5kZXN0cm95Q29udGV4dCgpOwotICAgIH0KLSAgICAvLyBTb2Z0d2FyZSBjb2RlIHBh
dGguCi0gICAgYXBwbHkoKTsKLX0KLSNlbmRpZgotCiB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHko
KQogewogICAgIGlmIChoYXNSZXN1bHQoKSkKQEAgLTE1OSwzNyArMTQxLDggQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNp
ZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSNpZiBFTkFCTEUo
T1BFTkNMKQotICAgIGlmIChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCi0gICAgICAgIHJldHVybjsK
LSNlbmRpZgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwotfQotCi0jaWYgRU5BQkxFKE9Q
RU5DTCkKLS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjaGFuZ2VkIHRvIGFic3RyYWN0IHZpcnR1
YWwgd2hlbiBhbGwgZmlsdGVycyBhcmUgbGFuZGVkLgotYm9vbCBGaWx0ZXJFZmZlY3Q6OnBsYXRm
b3JtQXBwbHlPcGVuQ0woKQotewotICAgIGlmICghRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgp
OwotICAgICAgICAvLyBTb2Z0d2FyZSBjb2RlIHBhdGggZXhwZWN0cyB0aGF0IGF0IGxlYXN0IG9u
ZSBvZiB0aGUgZm9sbG93aW5nIGZpbGVkcyBpcyB2YWxpZC4KLSAgICAgICAgaWYgKCFpbi0+bV9p
bWFnZUJ1ZmZlclJlc3VsdCAmJiAhaW4tPm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgJiYgIWlu
LT5tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgIGluLT5hc0ltYWdlQnVm
ZmVyKCk7Ci0gICAgfQotCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci0gICAgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlID0gYXNJbWFnZUJ1ZmZlcigpOwotICAgIGlmIChzb3VyY2VJbWFn
ZSkgewotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZUltYWdlRGF0YSA9
IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgp
LCBzb3VyY2VJbWFnZS0+aW50ZXJuYWxTaXplKCkpKTsKLSAgICAgICAgY3JlYXRlT3BlbkNMSW1h
Z2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKIH0KLSNlbmRpZgogCiB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMoKQogewpAQCAtMjQ4LDEwICsyMDEsNiBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQoKQogICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsK
ICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSNpZiBFTkFCTEUoT1BFTkNMKQotICAgIGlmICht
X29wZW5DTEltYWdlUmVzdWx0KQotICAgICAgICBtX29wZW5DTEltYWdlUmVzdWx0ID0gbnVsbHB0
cjsKLSNlbmRpZgogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KCkKQEAgLTI3MiwxMCArMjIxLDYgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFn
ZUJ1ZmZlcigpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLSNpZiBF
TkFCTEUoT1BFTkNMKQotICAgIGlmIChtX29wZW5DTEltYWdlUmVzdWx0KQotICAgICAgICByZXR1
cm4gb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7Ci0jZW5kaWYKICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwg
bV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3Vs
dENvbG9yU3BhY2UpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0yODgsMzcgKzIzMyw2IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwogfQogCi0jaWYgRU5BQkxFKE9QRU5DTCkKLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6Om9w
ZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpCi17Ci0gICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKLSAgICBBU1NFUlQoY29udGV4
dCk7Ci0KLSAgICBpZiAoY29udGV4dC0+aW5FcnJvcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHNpemVfdCBvcmlnaW5bM10gPSB7IDAsIDAsIDAgfTsKLSAgICBzaXplX3QgcmVn
aW9uWzNdID0geyBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJl
Y3QuaGVpZ2h0KCksIDEgfTsKLQotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7Ci0KLSAg
ICBpZiAoY29udGV4dC0+aXNGYWlsZWQoY2xGaW5pc2goY29udGV4dC0+Y29tbWFuZFF1ZXVlKCkp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoY29udGV4dC0+aXNGYWlsZWQo
Y2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNvbW1hbmRRdWV1ZSgpLCBtX29wZW5DTEltYWdl
UmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwgMCwgMCwgZGVzdGluYXRpb25QaXhlbEFy
cmF5LT5kYXRhKCksIDAsIDAsIDApKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIW1faW1hZ2VC
dWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50UmVjdCBkZXN0
aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheShVbm11bHRpcGxpZWQsIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5nZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25S
ZWN0LCBJbnRQb2ludCgpKTsKLQotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwotfQotI2VuZGlmCi0KIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFNp
emUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CkBAIC00OTcsMzYgKzQxMSw2IEBAIFVpbnQ4Q2xh
bXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi0jaWYg
RU5BQkxFKE9QRU5DTCkKLU9wZW5DTEhhbmRsZSBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZU9wZW5DTElt
YWdlUmVzdWx0KHVpbnQ4X3QqIHNvdXJjZSkKLXsKLSAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBj
b250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOwotICAgIEFTU0VSVChjb250
ZXh0KTsKLQotICAgIGlmIChjb250ZXh0LT5pbkVycm9yKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1hZ2VG
b3JtYXQ7Ci0gICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdCQTsK
LSAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1fSU5U
ODsKLQotICAgIGludCBlcnJvckNvZGUgPSAwOwotI2lmZGVmIENMX0FQSV9TVUZGSVhfX1ZFUlNJ
T05fMV8yCi0gICAgY2xfaW1hZ2VfZGVzYyBpbWFnZURlc2NyaXB0b3IgPSB7IENMX01FTV9PQkpF
Q1RfSU1BR0UyRCwgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKLSAgICBtX29wZW5DTEltYWdlUmVz
dWx0ID0gY2xDcmVhdGVJbWFnZShjb250ZXh0LT5kZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFE
X1dSSVRFIHwgKHNvdXJjZSA/IENMX01FTV9DT1BZX0hPU1RfUFRSIDogMCksCi0gICAgICAgICZj
bEltYWdlRm9ybWF0LCAmaW1hZ2VEZXNjcmlwdG9yLCBzb3VyY2UsICZlcnJvckNvZGUpOwotI2Vs
c2UKLSAgICBtX29wZW5DTEltYWdlUmVzdWx0ID0gY2xDcmVhdGVJbWFnZTJEKGNvbnRleHQtPmRl
dmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfV1JJVEUgfCAoc291cmNlID8gQ0xfTUVNX0NPUFlf
SE9TVF9QVFIgOiAwKSwKLSAgICAgICAgJmNsSW1hZ2VGb3JtYXQsIG1fYWJzb2x1dGVQYWludFJl
Y3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSwgMCwgc291cmNlLCAmZXJy
b3JDb2RlKTsKLSNlbmRpZgotICAgIGlmIChjb250ZXh0LT5pc0ZhaWxlZChlcnJvckNvZGUpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX29wZW5DTEltYWdlUmVzdWx0OwotfQot
I2VuZGlmCi0KIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCkBAIC01MzYsMjMgKzQyMCw5
IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3Bh
Y2UgZHN0Q29sb3JTcGFjZSkKICAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRzdENvbG9yU3BhY2Ug
PT0gbV9yZXN1bHRDb2xvclNwYWNlKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoT1BF
TkNMKQotICAgIGlmIChvcGVuQ0xJbWFnZSgpKSB7Ci0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KQotICAgICAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAg
ICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b250ZXh0KCk7Ci0gICAgICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC0+b3Bl
bkNMVHJhbnNmb3JtQ29sb3JTcGFjZShtX29wZW5DTEltYWdlUmVzdWx0LCBhYnNvbHV0ZVBhaW50
UmVjdCgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOwotICAgIH0gZWxzZSB7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFs
bHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAgICAg
Ly8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxp
ZWQgYXJyYXlzLgotICAgICAgICBhc0ltYWdlQnVmZmVyKCktPnRyYW5zZm9ybUNvbG9yU3BhY2Uo
bV9yZXN1bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKLQotI2lmIEVOQUJMRShPUEVOQ0wp
Ci0gICAgfQotI2VuZGlmCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlh
bGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8g
Y29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQg
YXJyYXlzLgorICAgIGFzSW1hZ2VCdWZmZXIoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3Vs
dENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOwogCiAgICAgbV9yZXN1bHRDb2xvclNwYWNlID0g
ZHN0Q29sb3JTcGFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggNGVlZGM5ZDZhMzI1Nzc4ZjM0OTcx
NDhmMGFmZjE3M2RiMTkzZGNiYi4uYmI1Y2JjYTRmNmRiNjQxN2I0ZDUyODVlYTVkN2Y0NzczMDlj
YTM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yNSwxOSArMjUsMTEgQEAKICNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgot
CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgotCi0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBFTkFCTEUoT1BFTkNMKQot
I2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKLSNlbmRpZgotCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCmluZGV4IDg3MmFkMjYwYjhlNTE4
NGE4MjdiYmMxOGY0NjNhZDc3OTFkMGI4MjIuLmNhYjU2YWIzY2RiYzM0ODczM2NhZGZiNjA4NzI3
ODg4NGQxNDFmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlQWxwaGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKQEAgLTMyLDkgKzMyLDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKLSNpZiBFTkFCTEUoT1BFTkNMKQotICAgIHZp
cnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZv
aWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDg2Y2Q2ZWRkYTM4YzM2NjExN2EzMWM2MmIxZTY3OWE2
ZmJiN2UzOGIuLmU0NDYyNTUyY2JjODUwMDgzNjEzZWY1ZjJkY2YyNGQ2MzJiNDg4ODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oCkBAIC0zMyw5ICszMyw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCk7Ci0jaWYgRU5BQkxFKE9QRU5DTCkKLSAgICB2aXJ0dWFsIGJvb2wgcGxh
dGZvcm1BcHBseU9wZW5DTCgpOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NzRmODZkZGJlZDNlNzg0ZmEyNzc2ZjBhMTc0
NDY1YjU2NzRjOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZVNhZmFyaS5oIgotCi0jaWYgVVNFKFNBRkFSSV9USEVNRSkKLQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZVdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
LQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLQotLy8gSWYgeW91IGhh
dmUgYW4gZW1wdHkgcGxhY2Vob2xkZXIgU2FmYXJpVGhlbWVDb25zdGFudHMuaCwgdGhlbiBpbmNs
dWRlIFNhZmFyaVRoZW1lLmgKLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIGEgdmVyc2lv
biBvZiBXZWJLaXRTdXBwb3J0TGlicmFyeSBpcyByZWxlYXNlZCB3aXRoIGFuIHVwZGF0ZWQgU2Fm
YXJpVGhlbWVDb25zdGFudHMuaCAKLSNpbmNsdWRlIDxTYWZhcmlUaGVtZS9TYWZhcmlUaGVtZUNv
bnN0YW50cy5oPgotI2lmbmRlZiBTYWZhcmlUaGVtZUNvbnN0YW50c19oCi0jaW5jbHVkZSA8U2Fm
YXJpVGhlbWUvU2FmYXJpVGhlbWUuaD4KLSNlbmRpZgotCi0vLyBGSVhNRTogVGhlcmUgYXJlIHJl
cGFpbnRpbmcgcHJvYmxlbXMgZHVlIHRvIEFxdWEgc2Nyb2xsIGJhciBidXR0b25zJyB2aXN1YWwg
b3ZlcmZsb3cuCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotdXNpbmcgbmFtZXNwYWNlIFNhZmFyaVRoZW1lOwotCi1TY3JvbGxiYXJUaGVtZSYgU2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVTYWZh
cmkgc2FmYXJpVGhlbWU7Ci0gICAgc3RhdGljIFNjcm9sbGJhclRoZW1lV2luIHdpbmRvd3NUaGVt
ZTsKLSAgICBpZiAoU2V0dGluZ3M6OnNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMoKSkKLSAgICAg
ICAgcmV0dXJuIHdpbmRvd3NUaGVtZTsKLSAgICByZXR1cm4gc2FmYXJpVGhlbWU7Ci19Ci0KLS8v
IEZJWE1FOiBHZXQgdGhlc2UgbnVtYmVycyBmcm9tIENvcmVVSS4KLXN0YXRpYyBpbnQgY1Njcm9s
bGJhclRoaWNrbmVzc1tdID0geyAxNSwgMTEgfTsKLXN0YXRpYyBpbnQgY1JlYWxCdXR0b25MZW5n
dGhbXSA9IHsgMjgsIDIxIH07Ci1zdGF0aWMgaW50IGNCdXR0b25JbnNldFtdID0geyAxNCwgMTEg
fTsKLXN0YXRpYyBpbnQgY0J1dHRvbkhpdEluc2V0W10gPSB7IDMsIDIgfTsKLS8vIGNSZWFsQnV0
dG9uTGVuZ3RoIC0gY0J1dHRvbkluc2V0Ci1zdGF0aWMgaW50IGNCdXR0b25MZW5ndGhbXSA9IHsg
MTQsIDEwIH07Ci1zdGF0aWMgaW50IGNUaHVtYk1pbkxlbmd0aFtdID0geyAyNiwgMjAgfTsKLQot
I2lmZGVmIERFQlVHX0FMTAotU09GVF9MSU5LX0RFQlVHX0xJQlJBUlkoU2FmYXJpVGhlbWUpCi0j
ZWxzZQotU09GVF9MSU5LX0xJQlJBUlkoU2FmYXJpVGhlbWUpCi0jZW5kaWYKLQotU09GVF9MSU5L
KFNhZmFyaVRoZW1lLCBwYWludFRoZW1lUGFydCwgdm9pZCwgX19zdGRjYWxsLCAKLSAgICAgICAg
ICAgIChUaGVtZVBhcnQgcGFydCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHUmVjdCYg
cmVjdCwgTlNDb250cm9sU2l6ZSBzaXplLCBUaGVtZUNvbnRyb2xTdGF0ZSBzdGF0ZSksCi0gICAg
ICAgICAgICAocGFydCwgY29udGV4dCwgcmVjdCwgc2l6ZSwgc3RhdGUpKQotCi1zdGF0aWMgU2Ny
b2xsYmFyQ29udHJvbFN0YXRlIHNjcm9sbGJhckNvbnRyb2xTdGF0ZUZyb21UaGVtZVN0YXRlKFRo
ZW1lQ29udHJvbFN0YXRlIHN0YXRlKQotewotICAgIFNjcm9sbGJhckNvbnRyb2xTdGF0ZSBzID0g
MDsKLSAgICBpZiAoc3RhdGUgJiBBY3RpdmVTdGF0ZSkKLSAgICAgICAgcyB8PSBBY3RpdmVTY3Jv
bGxiYXJTdGF0ZTsKLSAgICBpZiAoc3RhdGUgJiBFbmFibGVkU3RhdGUpCi0gICAgICAgIHMgfD0g
RW5hYmxlZFNjcm9sbGJhclN0YXRlOwotICAgIGlmIChzdGF0ZSAmIFByZXNzZWRTdGF0ZSkKLSAg
ICAgICAgcyB8PSBQcmVzc2VkU2Nyb2xsYmFyU3RhdGU7Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLVNj
cm9sbGJhclRoZW1lU2FmYXJpOjp+U2Nyb2xsYmFyVGhlbWVTYWZhcmkoKQotewotfQotCi1pbnQg
U2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkKLXsKLSAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250
cm9sU2l6ZV07Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6Omhhc0J1dHRvbnMoU2Ny
b2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhci5lbmFibGVkKCkgJiYg
KHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKLSAgICAg
ICAgICAgICBzY3JvbGxiYXIud2lkdGgoKSA6IAotICAgICAgICAgICAgIHNjcm9sbGJhci5oZWln
aHQoKSkgPj0gMiAqIChjUmVhbEJ1dHRvbkxlbmd0aFtzY3JvbGxiYXIuY29udHJvbFNpemUoKV0g
LSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLmNvbnRyb2xTaXplKCldKTsKLX0KLQotYm9vbCBT
Y3JvbGxiYXJUaGVtZVNhZmFyaTo6aGFzVGh1bWIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0g
ICAgcmV0dXJuIHNjcm9sbGJhci5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKLSAgICAgICAgICAgICBzY3JvbGxiYXIud2lkdGgo
KSA6IAotICAgICAgICAgICAgIHNjcm9sbGJhci5oZWlnaHQoKSkgPj0gMiAqIGNCdXR0b25JbnNl
dFtzY3JvbGxiYXIuY29udHJvbFNpemUoKV0gKyBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLmNv
bnRyb2xTaXplKCldICsgMTsKLX0KLQotc3RhdGljIEludFJlY3QgYnV0dG9uUmVwYWludFJlY3Qo
Y29uc3QgSW50UmVjdCYgYnV0dG9uUmVjdCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplLCBib29sIHN0YXJ0KQotewotICAg
IEludFJlY3QgcGFpbnRSZWN0KGJ1dHRvblJlY3QpOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIHBhaW50UmVjdC5zZXRXaWR0aChjUmVhbEJ1
dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0pOwotICAgICAgICBpZiAoIXN0YXJ0KQotICAgICAgICAg
ICAgcGFpbnRSZWN0LnNldFgoYnV0dG9uUmVjdC54KCkgLSAoY1JlYWxCdXR0b25MZW5ndGhbY29u
dHJvbFNpemVdIC0gYnV0dG9uUmVjdC53aWR0aCgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cGFpbnRSZWN0LnNldEhlaWdodChjUmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0pOwotICAg
ICAgICBpZiAoIXN0YXJ0KQotICAgICAgICAgICAgcGFpbnRSZWN0LnNldFkoYnV0dG9uUmVjdC55
KCkgLSAoY1JlYWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVdIC0gYnV0dG9uUmVjdC5oZWlnaHQo
KSkpOwotICAgIH0KLQotICAgIHJldHVybiBwYWludFJlY3Q7Ci19Ci0KLUludFJlY3QgU2Nyb2xs
YmFyVGhlbWVTYWZhcmk6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3Jv
bGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCi17Ci0gICAgSW50UmVjdCByZXN1bHQ7Ci0K
LSAgICAvLyBXaW5kb3dzIGp1c3QgaGFzIHNpbmdsZSBhcnJvd3MuCi0gICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhp
Y2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci5jb250cm9sU2l6ZSgpKTsKLSAg
ICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAg
ICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXIueCgpLCBzY3JvbGxiYXIueSgpLCBjQnV0
dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250cm9sU2l6ZSgpXSwgdGhpY2tuZXNzKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLngoKSwgc2Nyb2xsYmFyLnkoKSwg
dGhpY2tuZXNzLCBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250cm9sU2l6ZSgpXSk7Ci0gICAg
aWYgKHBhaW50aW5nKQotICAgICAgICByZXR1cm4gYnV0dG9uUmVwYWludFJlY3QocmVzdWx0LCBz
Y3JvbGxiYXIub3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLmNvbnRyb2xTaXplKCksIHRydWUpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OmZv
cndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQs
IGJvb2wgcGFpbnRpbmcpCi17Ci0gICAgSW50UmVjdCByZXN1bHQ7Ci0gICAgCi0gICAgLy8gV2lu
ZG93cyBqdXN0IGhhcyBzaW5nbGUgYXJyb3dzLgotICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0
b25TdGFydFBhcnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNz
ID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci5jb250cm9sU2l6ZSgpKTsKLSAgICBpZiAo
c2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAg
cmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXIueCgpICsgc2Nyb2xsYmFyLndpZHRoKCkgLSBjQnV0
dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250cm9sU2l6ZSgpXSwgc2Nyb2xsYmFyLnkoKSwgY0J1dHRv
bkxlbmd0aFtzY3JvbGxiYXIuY29udHJvbFNpemUoKV0sIHRoaWNrbmVzcyk7Ci0gICAgZWxzZQot
ICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci54KCksIHNjcm9sbGJhci55KCkgKyBz
Y3JvbGxiYXIuaGVpZ2h0KCkgLSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250cm9sU2l6ZSgp
XSwgdGhpY2tuZXNzLCBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250cm9sU2l6ZSgpXSk7Ci0g
ICAgaWYgKHBhaW50aW5nKQotICAgICAgICByZXR1cm4gYnV0dG9uUmVwYWludFJlY3QocmVzdWx0
LCBzY3JvbGxiYXIub3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLmNvbnRyb2xTaXplKCksIGZhbHNl
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgSW50UmVjdCB0cmFja1JlcGFpbnRS
ZWN0KGNvbnN0IEludFJlY3QmIHRyYWNrUmVjdCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAgIEludFJlY3Qg
cGFpbnRSZWN0KHRyYWNrUmVjdCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCi0gICAgICAgIHBhaW50UmVjdC5pbmZsYXRlWChjQnV0dG9uTGVuZ3RoW2NvbnRy
b2xTaXplXSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QuaW5mbGF0ZVkoY0J1dHRvbkxl
bmd0aFtjb250cm9sU2l6ZV0pOwotCi0gICAgcmV0dXJuIHBhaW50UmVjdDsKLX0KLQotSW50UmVj
dCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6dHJhY2tSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBi
b29sIHBhaW50aW5nKQotewotICAgIGlmIChwYWludGluZyB8fCAhaGFzQnV0dG9ucyhzY3JvbGxi
YXIpKQotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLmZyYW1lUmVjdCgpOwotICAgIAotICAgIElu
dFJlY3QgcmVzdWx0OwotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Ny
b2xsYmFyLmNvbnRyb2xTaXplKCkpOwotICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSAKLSAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFy
LngoKSArIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLmNvbnRyb2xTaXplKCldLCBzY3JvbGxiYXIu
eSgpLCBzY3JvbGxiYXIud2lkdGgoKSAtIDIgKiBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci5jb250
cm9sU2l6ZSgpXSwgdGhpY2tuZXNzKTsKLSAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXIueCgp
LCBzY3JvbGxiYXIueSgpICsgY0J1dHRvbkxlbmd0aFtzY3JvbGxiYXIuY29udHJvbFNpemUoKV0s
IHRoaWNrbmVzcywgc2Nyb2xsYmFyLmhlaWdodCgpIC0gMiAqIGNCdXR0b25MZW5ndGhbc2Nyb2xs
YmFyLmNvbnRyb2xTaXplKCldKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lU2FmYXJpOjptaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIGNUaHVt
Yk1pbkxlbmd0aFtzY3JvbGxiYXIuY29udHJvbFNpemUoKV07Ci19Ci0KLWJvb2wgU2Nyb2xsYmFy
VGhlbWVTYWZhcmk6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyJiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCi17Ci0gICAgcmV0dXJuIGV2dC5zaGlmdEtleSgpICYmIGV2dC5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpw
YWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRyYWNrUmVjdCkKLXsKLSAgICBpZiAo
IVNhZmFyaVRoZW1lTGlicmFyeSgpKQotICAgICAgICByZXR1cm47Ci0gICAgTlNDb250cm9sU2l6
ZSBzaXplID0gc2Nyb2xsYmFyLmNvbnRyb2xTaXplKCkgPT0gU21hbGxTY3JvbGxiYXIgPyBOU1Nt
YWxsQ29udHJvbFNpemUgOiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKLSAgICBUaGVtZUNvbnRyb2xT
dGF0ZSBzdGF0ZSA9IDA7Ci0gICAgaWYgKHNjcm9sbGJhci5pc1Njcm9sbGFibGVBcmVhQWN0aXZl
KCkpCi0gICAgICAgIHN0YXRlIHw9IEFjdGl2ZVN0YXRlOwotICAgIGlmIChoYXNCdXR0b25zKHNj
cm9sbGJhcikpCi0gICAgICAgIHN0YXRlIHw9IEVuYWJsZWRTdGF0ZTsKLSAgICBwYWludFRoZW1l
UGFydChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IFZTY3Jv
bGxUcmFja1BhcnQgOiBIU2Nyb2xsVHJhY2tQYXJ0LCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIHRyYWNrUmVjdCwgc2l6ZSwgc3RhdGUpOyAKLX0KLQotdm9pZCBTY3JvbGxiYXJU
aGVtZVNhZmFyaTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBidXR0b25SZWN0LCBTY3JvbGxi
YXJQYXJ0IHBhcnQpCi17Ci0gICAgaWYgKCFTYWZhcmlUaGVtZUxpYnJhcnkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9IHNjcm9sbGJhci5jb250cm9sU2l6ZSgp
ID09IFNtYWxsU2Nyb2xsYmFyID8gTlNTbWFsbENvbnRyb2xTaXplIDogTlNSZWd1bGFyQ29udHJv
bFNpemU7Ci0gICAgVGhlbWVDb250cm9sU3RhdGUgc3RhdGUgPSAwOwotICAgIGlmIChzY3JvbGxi
YXIuaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpKQotICAgICAgICBzdGF0ZSB8PSBBY3RpdmVTdGF0
ZTsKLSAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxiYXIpKQotICAgICAgICBzdGF0ZSB8PSBFbmFi
bGVkU3RhdGU7Ci0gICAgaWYgKHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09IHBhcnQpCi0gICAg
ICAgIHN0YXRlIHw9IFByZXNzZWRTdGF0ZTsKLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0KQotICAgICAgICBwYWludFRoZW1lUGFydChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhciA/IFNjcm9sbFVwQXJyb3dQYXJ0IDogU2Nyb2xsTGVmdEFycm93
UGFydCwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICBidXR0b25SZWN0LCBzaXplLCBzdGF0ZSk7Ci0gICAgZWxzZSBpZiAocGFydCA9PSBG
b3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcGFpbnRUaGVtZVBhcnQoc2Nyb2xsYmFyLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBTY3JvbGxEb3duQXJyb3dQYXJ0IDog
U2Nyb2xsUmlnaHRBcnJvd1BhcnQsIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdCwgc2l6ZSwgc3RhdGUpOwotfQotCi12
b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdGh1bWJS
ZWN0KQotewotICAgIGlmICghU2FmYXJpVGhlbWVMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBOU0NvbnRyb2xTaXplIHNpemUgPSBzY3JvbGxiYXIuY29udHJvbFNpemUoKSA9PSBTbWFs
bFNjcm9sbGJhciA/IE5TU21hbGxDb250cm9sU2l6ZSA6IE5TUmVndWxhckNvbnRyb2xTaXplOwot
ICAgIFRoZW1lQ29udHJvbFN0YXRlIHN0YXRlID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFyLmlzU2Ny
b2xsYWJsZUFyZWFBY3RpdmUoKSkKLSAgICAgICAgc3RhdGUgfD0gQWN0aXZlU3RhdGU7Ci0gICAg
aWYgKGhhc1RodW1iKHNjcm9sbGJhcikpCi0gICAgICAgIHN0YXRlIHw9IEVuYWJsZWRTdGF0ZTsK
LSAgICBpZiAoc2Nyb2xsYmFyLnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBz
dGF0ZSB8PSBQcmVzc2VkU3RhdGU7Ci0gICAgcGFpbnRUaGVtZVBhcnQoc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBWU2Nyb2xsVGh1bWJQYXJ0IDogSFNjcm9s
bFRodW1iUGFydCwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCAKLSAgICAgICAg
ICAgICAgICAgICB0aHVtYlJlY3QsIHNpemUsIHN0YXRlKTsKLX0KLQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFy
aS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTA1MzM2NDAzNDUwYTVkMTEwMzJmZDg0
NjI5MGQwNzhmYjhmN2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVTYWZhcmlfaAotI2Rl
ZmluZSBTY3JvbGxiYXJUaGVtZVNhZmFyaV9oCi0KLSNpZiBVU0UoU0FGQVJJX1RIRU1FKQotCi0j
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTY3JvbGxiYXJUaGVtZVNhZmFyaSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVTYWZhcmkoKTsK
LQotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6
ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Nv
bnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciYpOwotICAgIHZpcnR1YWwgYm9vbCBoYXNU
aHVtYihTY3JvbGxiYXImKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChT
Y3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3Qo
U2Nyb2xsYmFyJiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLQotICAgIHZpcnR1YWwgaW50IG1p
bmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXImKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXImLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQm
LCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmLCBTY3JvbGxi
YXJQYXJ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQmLCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jik7Ci19OwotCi19Ci0jZW5kaWYKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggZGEyZDlhNzJl
NWNmOWFkZjdhNDFmMTc5MTM3NzkwYTZjYjFiMjE1NC4uMmI3NTU4OGQ3ZjE4ZGYyMThiYjAxMWY3
M2VhNzAwMjU3ZDE5ZTNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQpAQCAtMTE0LDggKzExNCw2IEBAIEBlbmQKIAogLy8gVGhlIG1ldGhvZHMgaW4gdGhp
cyBmaWxlIGFyZSBzcGVjaWZpYyB0byB0aGUgTWFjIE9TIFggcGxhdGZvcm0uCiAKLS8vIEZJWE1F
OiBUaGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgY29kZSBpbiB0aGlzIGNsYXNzIHNob3VsZCBiZSBm
YWN0b3JlZCBvdXQgYW5kIG1lcmdlZCB3aXRoIFJlbmRlclRoZW1lU2FmYXJpLgotCiAvLyBXZSBl
c3RpbWF0ZSB0aGUgYW5pbWF0aW9uIHJhdGUgb2YgYSBNYWMgT1MgWCBwcm9ncmVzcyBiYXIgaXMg
MzMgZnBzLgogLy8gSGFyZCBjb2RlIHRoZSB2YWx1ZSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZW4ndCBm
b3VuZCBBUEkgZm9yIGl0LgogY29uc3QgZG91YmxlIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRl
ID0gMC4wMzM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2MmVmZDAyM2MxYjc3MmNjOTUy
YTQ1NDg2NTg2ZWFkNzZmOWRhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTIxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlbmRlclRoZW1lU2FmYXJpLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVXaW4uaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaWYgVVNFKFNBRkFSSV9USEVNRSkKLQotI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJv
dW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1ldGVy
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5o
IgotI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHMuaCIKLSNpbmNsdWRlICJSZW5kZXJNZXRl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNp
bmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVX
aW4uaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi11c2luZyBzdGQ6Om1pbjsKLQotLy8gRklYTUU6IFRoZSBwbGF0
Zm9ybS1pbmRlcGVuZGVudCBjb2RlIGluIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGZhY3RvcmVkIG91
dCBhbmQgbWVyZ2VkIHdpdGggUmVuZGVyVGhlbWVNYWMuIAotIAotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIFNhZmFyaVRo
ZW1lOwotCi1lbnVtIHsKLSAgICB0b3BNYXJnaW4sCi0gICAgcmlnaHRNYXJnaW4sCi0gICAgYm90
dG9tTWFyZ2luLAotICAgIGxlZnRNYXJnaW4KLX07Ci0KLWVudW0gewotICAgIHRvcFBhZGRpbmcs
Ci0gICAgcmlnaHRQYWRkaW5nLAotICAgIGJvdHRvbVBhZGRpbmcsCi0gICAgbGVmdFBhZGRpbmcK
LX07Ci0KLVJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVTYWZhcmk6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVyVGhlbWVTYWZhcmkpOwotfQotCi1QYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17
Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lJiBzYWZhcmlUaGVtZSA9IFJlbmRlclRoZW1lU2FmYXJp
OjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lJiB3aW5kb3dzVGhl
bWUgPSBSZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKCkubGVha1JlZigpOwotCi0gICAgLy8gRklYTUU6
IFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBTZXR0aW5ncyBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBX
ZWJLaXQsIHNvIHdpbGwgcmV0dXJuIGEKLSAgICAvLyBwb3RlbnRpYWxseSB3cm9uZyBhbnN3ZXIg
dGhlIHZlcnkgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCAoc2VlCi0gICAgLy8gPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ5Mz4pLgotICAgIGlmIChTZXR0aW5nczo6
c2hvdWxkUGFpbnROYXRpdmVDb250cm9scygpKSB7Ci0gICAgICAgIFJlbmRlclRoZW1lOjpzZXRD
dXN0b21Gb2N1c1JpbmdDb2xvcihzYWZhcmlUaGVtZS0+cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigp
KTsKLSAgICAgICAgcmV0dXJuICZ3aW5kb3dzVGhlbWU7Ci0gICAgfQotICAgIHJldHVybiAmc2Fm
YXJpVGhlbWU7Ci19Ci0KLSNpZmRlZiBERUJVR19BTEwKLVNPRlRfTElOS19ERUJVR19MSUJSQVJZ
KFNhZmFyaVRoZW1lKQotI2Vsc2UKLVNPRlRfTElOS19MSUJSQVJZKFNhZmFyaVRoZW1lKQotI2Vu
ZGlmCi0KLVNPRlRfTElOSyhTYWZhcmlUaGVtZSwgcGFpbnRUaGVtZVBhcnQsIHZvaWQsIF9fc3Rk
Y2FsbCwgKFRoZW1lUGFydCBwYXJ0LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dSZWN0
JiByZWN0LCBOU0NvbnRyb2xTaXplIHNpemUsIFRoZW1lQ29udHJvbFN0YXRlIHN0YXRlKSwgKHBh
cnQsIGNvbnRleHQsIHJlY3QsIHNpemUsIHN0YXRlKSkKLSNpZiBkZWZpbmVkKFNBRkFSSV9USEVN
RV9WRVJTSU9OKSAmJiBTQUZBUklfVEhFTUVfVkVSU0lPTiA+PSAyCi1TT0ZUX0xJTksoU2FmYXJp
VGhlbWUsIFNUUGFpbnRQcm9ncmVzc0luZGljYXRvciwgdm9pZCwgQVBJRU5UUlksIChQcm9ncmVz
c0luZGljYXRvclR5cGUgdHlwZSwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHUmVjdCYg
cmVjdCwgTlNDb250cm9sU2l6ZSBzaXplLCBUaGVtZUNvbnRyb2xTdGF0ZSBzdGF0ZSwgZmxvYXQg
dmFsdWUpLCAodHlwZSwgY29udGV4dCwgcmVjdCwgc2l6ZSwgc3RhdGUsIHZhbHVlKSkKLSNlbmRp
ZgotU09GVF9MSU5LX09QVElPTkFMKFNhZmFyaVRoZW1lLCBTVENvcHlUaGVtZUNvbG9yLCBDR0Nv
bG9yUmVmLCBBUElFTlRSWSwgKHVuc2lnbmVkIGNvbG9yLCBTYWZhcmlUaGVtZTo6VGhlbWVDb250
cm9sU3RhdGUpKTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0Rm9jdXNSaW5nQ29sb3JJRCA9
IDQ7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcXVhRm9jdXNSaW5nQ29sb3IgPSAweEZGN0RB
REQ5OwotCi1zdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xv
cikKLXsKLSAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVu
dHMoY29sb3IpOwotICAgIHJldHVybiBtYWtlUkdCQSgyNTUgKiBjb21wb25lbnRzWzBdLCAyNTUg
KiBjb21wb25lbnRzWzFdLCAyNTUgKiBjb21wb25lbnRzWzJdLCAyNTUgKiBjb21wb25lbnRzWzNd
KTsKLX0KLQotVGhlbWVDb250cm9sU3RhdGUgUmVuZGVyVGhlbWVTYWZhcmk6OmRldGVybWluZVN0
YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKLXsKLSAgICBUaGVtZUNvbnRyb2xTdGF0
ZSByZXN1bHQgPSAwOwotICAgIGlmIChpc0FjdGl2ZShvKSkKLSAgICAgICAgcmVzdWx0IHw9IFNh
ZmFyaVRoZW1lOjpBY3RpdmVTdGF0ZTsKLSAgICBpZiAoaXNFbmFibGVkKG8pICYmICFpc1JlYWRP
bmx5Q29udHJvbChvKSkKLSAgICAgICAgcmVzdWx0IHw9IFNhZmFyaVRoZW1lOjpFbmFibGVkU3Rh
dGU7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAgICAgcmVzdWx0IHw9IFNhZmFyaVRoZW1l
OjpQcmVzc2VkU3RhdGU7Ci0gICAgaWYgKGlzQ2hlY2tlZChvKSkKLSAgICAgICAgcmVzdWx0IHw9
IFNhZmFyaVRoZW1lOjpDaGVja2VkU3RhdGU7Ci0gICAgaWYgKGlzSW5kZXRlcm1pbmF0ZShvKSkK
LSAgICAgICAgcmVzdWx0IHw9IFNhZmFyaVRoZW1lOjpJbmRldGVybWluYXRlQ2hlY2tlZFN0YXRl
OwotICAgIGlmIChpc0ZvY3VzZWQobykpCi0gICAgICAgIHJlc3VsdCB8PSBTYWZhcmlUaGVtZTo6
Rm9jdXNlZFN0YXRlOwotICAgIGlmIChpc0RlZmF1bHQobykpCi0gICAgICAgIHJlc3VsdCB8PSBT
YWZhcmlUaGVtZTo6RGVmYXVsdFN0YXRlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRnJvbVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgSW50U2l6ZSBzaXplc1tdKQotewotICAgIGlmIChzaXplc1tOU1JlZ3VsYXJDb250cm9s
U2l6ZV0uaGVpZ2h0KCkgPT0gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIE5TUmVndWxh
ckNvbnRyb2xTaXplOwotICAgIGVsc2UgaWYgKHNpemVzW05TTWluaUNvbnRyb2xTaXplXS5oZWln
aHQoKSA9PSByZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7
Ci0gICAgCi0gICAgcmV0dXJuIE5TU21hbGxDb250cm9sU2l6ZTsKLX0KLQotUmVuZGVyVGhlbWVT
YWZhcmk6OlJlbmRlclRoZW1lU2FmYXJpKCkKLXsKLX0KLQotUmVuZGVyVGhlbWVTYWZhcmk6On5S
ZW5kZXJUaGVtZVNhZmFyaSgpCi17Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lU2FmYXJpOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IENvbG9yKDE4MSwgMjEzLCAyNTUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVNhZmFyaTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENvbG9yKDIxMiwgMjEyLCAyMTIpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVNhZmFyaTo6
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGp1c3QgYmUgYSBkYXJrZXIgdmVyc2lvbiBvZiB0
aGUgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IKLSAgICByZXR1cm4gQ29s
b3IoNTYsIDExNywgMjE1KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVTYWZhcmk6OnBsYXRmb3Jt
Rm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIHN0YXRpYyBDb2xvciBmb2N1c1JpbmdDb2xv
cjsKLQotICAgIGlmICghZm9jdXNSaW5nQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmIChT
VENvcHlUaGVtZUNvbG9yUHRyKCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVm
PiBjb2xvciA9IGFkb3B0Q0YoU1RDb3B5VGhlbWVDb2xvclB0cigpKHN0Rm9jdXNSaW5nQ29sb3JJ
RCwgU2FmYXJpVGhlbWU6OkFjdGl2ZVN0YXRlKSk7Ci0gICAgICAgICAgICBmb2N1c1JpbmdDb2xv
ciA9IG1ha2VSR0JBRnJvbUNHQ29sb3IoY29sb3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAg
IGlmICghZm9jdXNSaW5nQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZm9jdXNSaW5nQ29s
b3IgPSBhcXVhRm9jdXNSaW5nQ29sb3I7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvY3VzUmluZ0Nv
bG9yOwotfQotCi1zdGF0aWMgZmxvYXQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZShOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAgIHN0YXRpYyBmbG9hdCBzaXplc1tdID0geyAx
My4wZiwgMTEuMGYsIDkuMGYgfTsKLSAgICAKLSAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVd
OwotfQotCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVz
Y3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgZmxvYXQgZm9udFNpemU7Ci0gICAgc3dpdGNoICh2
YWx1ZUlEKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKLSAgICAgICAgZm9udFNp
emUgPSBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplKE5TU21hbGxDb250cm9sU2l6ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51OgotICAgICAgICBmb250U2l6ZSA9
IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemUoTlNSZWd1bGFyQ29udHJvbFNpemUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAgICAgICBmb250U2l6
ZSA9IDEwLjBmOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNv
bnRyb2w6Ci0gICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZShO
U01pbmlDb250cm9sU2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRTbWFsbENvbnRyb2w6Ci0gICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemVGb3JDb250
cm9sU2l6ZShOU1NtYWxsQ29udHJvbFNpemUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlV2Via2l0Q29udHJvbDoKLSAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZUZv
ckNvbnRyb2xTaXplKE5TUmVndWxhckNvbnRyb2xTaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZm9udFNpemUgPSAxMy4wZjsKLSAgICB9Ci0KLSAgICBpZiAoIWZv
bnRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNv
bHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseSgiTHVjaWRh
IEdyYW5kZSIpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXpl
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09mZik7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0Ci17Ci0gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgU2FmYXJpVGhlbWUu
ZGxsIHdlIHdvbid0IGJlIGFibGUgdG8gcGFpbnQgYW55IHRoZW1lZCBjb250cm9scy4KLSAgICBp
ZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
LSAgICAgICAgcmV0dXJuIHN0eWxlLmJvcmRlcigpICE9IGJvcmRlcjsKLSAgICByZXR1cm4gUmVu
ZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNr
Z3JvdW5kQ29sb3IpOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIG8sIEludFJlY3QmIHIpCi17Ci0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpOwotCi0gICAg
c3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7Ci0gICAgICAgIGNhc2UgQ2hlY2tib3hQ
YXJ0OiB7Ci0gICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBh
Y2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRo
ZSBjaGVja2JveAotICAgICAgICAgICAgLy8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9u
J3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2Vi
S2l0LgotICAgICAgICAgICAgciA9IGluZmxhdGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtjb250
cm9sU2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhjb250cm9sU2l6ZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgICAgIC8v
IFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5j
bHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgICAgICAg
ICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQg
b2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgICAgICByID0g
aW5mbGF0ZVJlY3QociwgcmFkaW9TaXplcygpW2NvbnRyb2xTaXplXSwgcmFkaW9NYXJnaW5zKGNv
bnRyb2xTaXplKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgotICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgotICAgICAg
ICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3Qg
YXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8g
YWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgICAgICAgICAvLyBzaGFkb3ciIGFuZCB0aGUg
Y2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUg
Y29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgICAgICBpZiAoci5oZWlnaHQoKSA8PSBidXR0b25T
aXplcygpW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICBy
ID0gaW5mbGF0ZVJlY3QociwgYnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV0sIGJ1dHRvbk1hcmdp
bnMoY29udHJvbFNpemUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgICAgICByID0gaW5mbGF0ZVJlY3QociwgcG9w
dXBCdXR0b25TaXplcygpW2NvbnRyb2xTaXplXSwgcG9wdXBCdXR0b25NYXJnaW5zKGNvbnRyb2xT
aXplKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1JbnRSZWN0IFJlbmRlclRoZW1lU2FmYXJp
OjppbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBpbnQqIG1hcmdpbnMpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBkbyB0aGUgaW5mbGF0aW9uIGlm
IHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndpc2UgdHJ5
IHRvCi0gICAgLy8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWlsYWJsZSBi
b3gncyB3aWR0aC9oZWlnaHQuCi0gICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkgLSAoc2l6
ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSArIG1hcmdpbnNbcmlnaHRNYXJnaW5dKTsK
LSAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJn
aW5zW3RvcE1hcmdpbl0gKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0pOwotICAgIEludFJlY3QgcmVz
dWx0KHIpOwotICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewotICAgICAgICByZXN1bHQuc2V0WChy
ZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSk7Ci0gICAgICAgIHJlc3VsdC5zZXRXaWR0
aChyZXN1bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOwotICAgIH0KLSAgICBpZiAoaGVpZ2h0RGVs
dGEgPCAwKSB7Ci0gICAgICAgIHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5zW3RvcE1h
cmdpbl0pOwotICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAtIGhlaWdo
dERlbHRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IFJlbmRlclRoZW1l
U2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAotewot
ICAgIGlmIChib3guc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IGJveC5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiBib3gubWFy
Z2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZy
b20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNv
bnN0Ci17Ci0gICAgaWYgKCFpc0VuYWJsZWQobykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIENoZWNrYm94ZXMgb25seSBoYXZlIHRpbnQgd2hlbiBjaGVja2VkLgotICAgIGlmIChv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKLSAgICAgICAgcmV0dXJuIGlz
Q2hlY2tlZChvKTsKLQotICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUg
dGludCBpZiBlbmFibGVkLgotICAgIHJldHVybiB0cnVlOwotfQotCi1OU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAotewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7Ci0gICAgaWYgKGZv
bnRTaXplID49IDE2KQotICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7Ci0gICAg
aWYgKGZvbnRTaXplID49IDExKQotICAgICAgICByZXR1cm4gTlNTbWFsbENvbnRyb2xTaXplOwot
ICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKLX0KLS8qCi12b2lkIFJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRDb250cm9sU2l6ZShOU0NlbGwqIGNlbGwsIGNvbnN0IEludFNpemUqIHNpemVzLCBj
b25zdCBJbnRTaXplJiBtaW5TaXplKQotewotICAgIE5TQ29udHJvbFNpemUgc2l6ZTsKLSAgICBp
ZiAobWluU2l6ZS53aWR0aCgpID49IHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS53aWR0aCgp
ICYmCi0gICAgICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNp
emVdLmhlaWdodCgpKQotICAgICAgICBzaXplID0gTlNSZWd1bGFyQ29udHJvbFNpemU7Ci0gICAg
ZWxzZSBpZiAobWluU2l6ZS53aWR0aCgpID49IHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lk
dGgoKSAmJgotICAgICAgICAgICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc2l6ZXNbTlNTbWFsbENv
bnRyb2xTaXplXS5oZWlnaHQoKSkKLSAgICAgICAgc2l6ZSA9IE5TU21hbGxDb250cm9sU2l6ZTsK
LSAgICBlbHNlCi0gICAgICAgIHNpemUgPSBOU01pbmlDb250cm9sU2l6ZTsKLSAgICBpZiAoc2l6
ZSAhPSBbY2VsbCBjb250cm9sU2l6ZV0pIC8vIE9ubHkgdXBkYXRlIGlmIHdlIGhhdmUgdG8sIHNp
bmNlIEFwcEtpdCBkb2VzIHdvcmsgZXZlbiBpZiB0aGUgc2l6ZSBpcyB0aGUgc2FtZS4KLSAgICAg
ICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07Ci19Ci0qLwotSW50U2l6ZSBSZW5kZXJUaGVt
ZVNhZmFyaTo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxl
KV07Ci19Ci0KLUludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OnNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwotfQotCi12b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2Vk
LCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQu
Ci0gICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsKLSAgICBpZiAo
c3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCi0g
ICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAg
aWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplKSBjb25zdAotewotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotICAg
IGZsb2F0IGZvbnRTaXplID0gc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZShjb250cm9sU2l6
ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseSgiTHVjaWRhIEdyYW5kZSIpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udFNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLQotICAgIC8vIFJlc2V0IGxp
bmUgaGVpZ2h0Ci0gICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0KLSAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbikpCi0gICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZzdHlsZVJlc29s
dmVyLmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwotfQotCi1OU0NvbnRyb2xTaXplIFJlbmRl
clRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAotewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7Ci0gICAgaWYg
KGZvbnRTaXplID49IDEzKQotICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7Ci0g
ICAgaWYgKGZvbnRTaXplID49IDExKQotICAgICAgICByZXR1cm4gTlNTbWFsbENvbnRyb2xTaXpl
OwotICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIEFTU0VSVChTYWZhcmlUaGVt
ZUxpYnJhcnkoKSk7Ci0KLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KG8uc3R5bGUoKSk7Ci0KLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxh
dGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtjb250cm9sU2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhj
b250cm9sU2l6ZSkpOyAgCi0gICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6OkNoZWNrYm94
UGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwgaW5mbGF0ZWRSZWN0
LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6Y2hlY2tib3hTaXplcygpIGNv
bnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMTQs
IDE0KSwgSW50U2l6ZSgxMiwgMTIpLCBJbnRTaXplKDEwLCAxMCkgfTsKLSAgICByZXR1cm4gc2l6
ZXM7Ci19Ci0KLWNvbnN0IGludCogUmVuZGVyVGhlbWVTYWZhcmk6OmNoZWNrYm94TWFyZ2lucyhO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBpbnQg
bWFyZ2luc1szXVs0XSA9Ci0gICAgewotICAgICAgICB7IDIsIDIsIDIsIDIgfSwKLSAgICAgICAg
eyAyLCAyLCAyLCAxIH0sCi0gICAgICAgIHsgMSwgMCwgMCwgMCB9LAotICAgIH07Ci0gICAgcmV0
dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAotewotICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBVc2Ug
dGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29u
dHJvbC4KLSAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGNoZWNrYm94U2l6ZXMoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBB
U1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwotCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpOwotIAotICAgIEludFJlY3QgaW5m
bGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QociwgcmFkaW9TaXplcygpW2NvbnRyb2xTaXplXSwgcmFk
aW9NYXJnaW5zKGNvbnRyb2xTaXplKSk7ICAgIAotICAgIHBhaW50VGhlbWVQYXJ0KFJhZGlvQnV0
dG9uUGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwgaW5mbGF0ZWRS
ZWN0LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmFkaW9TaXplcygpIGNv
bnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMTQs
IDE1KSwgSW50U2l6ZSgxMiwgMTMpLCBJbnRTaXplKDEwLCAxMCkgfTsKLSAgICByZXR1cm4gc2l6
ZXM7Ci19Ci0KLWNvbnN0IGludCogUmVuZGVyVGhlbWVTYWZhcmk6OnJhZGlvTWFyZ2lucyhOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFy
Z2luc1szXVs0XSA9Ci0gICAgewotICAgICAgICB7IDEsIDIsIDIsIDIgfSwKLSAgICAgICAgeyAw
LCAxLCAyLCAxIH0sCi0gICAgICAgIHsgMCwgMCwgMSwgMCB9LAotICAgICB9OwotICAgIHJldHVy
biBtYXJnaW5zW2NvbnRyb2xTaXplXTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgd2lk
dGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgotICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHls
ZS5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXNlIHRoZSBm
b250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wu
Ci0gICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCByYWRpb1NpemVzKCkpOwotfQotCi12b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0
eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAotewotICAgIC8vIEp1c3QgdXNl
IDhweC4gIEFwcEtpdCB3YW50cyB0byB1c2UgMTFweCBmb3IgbWluaSBidXR0b25zLCBidXQgdGhh
dCBwYWRkaW5nIGlzIGp1c3QgdG9vIGxhcmdlCi0gICAgLy8gZm9yIHJlYWwtd29ybGQgV2ViIHNp
dGVzIChjcmVhdGluZyBhIGh1Z2UgbmVjZXNzYXJ5IG1pbmltdW0gd2lkdGggZm9yIGJ1dHRvbnMg
d2hvc2Ugc3BhY2UgaXMKLSAgICAvLyBieSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3
ZSBzZWxlY3QgbWluaSBvbmx5IGZvciBzbWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KLSAgICAv
LyBUaGlzIGFsc28gZ3VhcmFudGVlcyB0aGUgSFRNTDQgPGJ1dHRvbj4gd2lsbCBtYXRjaCBvdXIg
cmVuZGVyaW5nIGJ5IGRlZmF1bHQsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgY29uc2lzdGVudAotICAg
IC8vIHBhZGRpbmcuCi0gICAgY29uc3QgaW50IHBhZGRpbmcgPSA4OwotICAgIHN0eWxlLnNldFBh
ZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExl
bmd0aCgwLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZp
eGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Ci17Ci0gICAgLy8gVGhlcmUgYXJlIHRocmVlIGFwcGVhcmFuY2UgY29uc3RhbnRzIGZv
ciBidXR0b25zLgotICAgIC8vICgxKSBQdXNoLWJ1dHRvbiBpcyB0aGUgY29uc3RhbnQgZm9yIHRo
ZSBkZWZhdWx0IEFxdWEgc3lzdGVtIGJ1dHRvbi4gIFB1c2ggYnV0dG9ucyB3aWxsIG5vdCBzY2Fs
ZSB2ZXJ0aWNhbGx5IGFuZCB3aWxsIG5vdCBhbGxvdwotICAgIC8vIGN1c3RvbSBmb250cyBvciBj
b2xvcnMuICA8aW5wdXQ+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9uIHdpbGwgYWxs
b3cgY3VzdG9tIGNvbG9ycyBhbmQgZm9udCB3ZWlnaHRzL3ZhcmlhbnRzIGJ1dCB3b24ndAotICAg
IC8vIHNjYWxlIHZlcnRpY2FsbHkuCi0gICAgLy8gKDIpIHNxdWFyZS1idXR0b24gaXMgdGhlIGNv
bnN0YW50IGZvciB0aGUgc3F1YXJlIGJ1dHRvbi4gIFRoaXMgYnV0dG9uIHdpbGwgYWxsb3cgY3Vz
dG9tIGZvbnRzIGFuZCBjb2xvcnMgYW5kIHdpbGwgc2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAo
MykgQnV0dG9uIGlzIHRoZSBjb25zdGFudCB0aGF0IG1lYW5zICJwaWNrIHRoZSBiZXN0IGJ1dHRv
biBhcyBhcHByb3ByaWF0ZS4iICA8YnV0dG9uPnMgdXNlIHRoaXMgY29uc3RhbnQuICBUaGlzIGJ1
dHRvbiB3aWxsCi0gICAgLy8gYWxzbyBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCBhbGxvdyBjdXN0b20g
Zm9udHMgYW5kIGNvbG9ycy4gIEl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgQXF1YSBpZiBwb3NzaWJs
ZSBhbmQgd2lsbCBtYWtlIHRoaXMgZGV0ZXJtaW5hdGlvbgotICAgIC8vIHNvbGVseSBvbiB0aGUg
cmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLgotCi0gICAgLy8gRGV0ZXJtaW5lIG91ciBjb250cm9s
IHNpemUgYmFzZWQgb2ZmIG91ciBmb250LgotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwotCi0gICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBQdXNoQnV0dG9uUGFydCkgewotICAgICAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgotICAg
ICAgICBzdHlsZS5yZXNldEJvcmRlcigpOwotCi0gICAgICAgIC8vIEhlaWdodCBpcyBsb2NrZWQg
dG8gYXV0by4KLSAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0KLSAgICAg
ICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgICAgICBzdHlsZS5zZXRXaGl0
ZVNwYWNlKFBSRSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0aWNhbCBzaXpl
LgotICAgICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLQotICAgICAgICAvLyBBZGQgaW4gdGhl
IHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgotICAgICAgICBzZXRCdXR0b25QYWRkaW5n
RnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAgICAgICAgLy8gT3VyIGZv
bnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gZm9udCBzaXplIGZvciB0aGUg
Y29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0aGUgQ1NTLXNwZWNpZmllZCBmb250
IHRvIGZpZ3VyZSBvdXQKLSAgICAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0
IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250
IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gc3lzdGVtIGZvbnQgZm9y
IHRoZSBjb250cm9sIHNpemUgaW5zdGVhZC4KLSAgICAgICAgc2V0Rm9udEZyb21Db250cm9sU2l6
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIFNldCBhIG1pbi1oZWlnaHQgc28gdGhhdCB3ZSBjYW4ndCBnZXQgc21hbGxlciB0aGFu
IHRoZSBtaW5pIGJ1dHRvbi4KLSAgICAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aCgxNSwg
Rml4ZWQpKTsKLQotICAgICAgICAvLyBSZXNldCB0aGUgdG9wIGFuZCBib3R0b20gYm9yZGVycy4K
LSAgICAgICAgc3R5bGUucmVzZXRCb3JkZXJUb3AoKTsKLSAgICAgICAgc3R5bGUucmVzZXRCb3Jk
ZXJCb3R0b20oKTsKLSAgICB9Ci19Ci0KLWNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJp
OjpidXR0b25TaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNb
M10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsK
LSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLWNvbnN0IGludCogUmVuZGVyVGhlbWVTYWZhcmk6OmJ1
dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0
aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyA0LCA2LCA3LCA2
IH0sCi0gICAgICAgIHsgNCwgNSwgNiwgNSB9LAotICAgICAgICB7IDAsIDEsIDEsIDEgfSwKLSAg
ICB9OwotICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdl
IGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRo
IG9mIHRoZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgYnV0dG9uU2l6ZXMo
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgQVNTRVJUKFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKLQotICAgIC8vIFdlIGluZmxh
dGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4g
dGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGJ1dHRvbgotICAgIC8vIHNoYWRvdy4gIFdlIGRv
bid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdl
YktpdC4KLQotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZyb21S
ZWN0KHIsIGJ1dHRvblNpemVzKCkpOwotICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsKLQot
ICAgIFRoZW1lUGFydCBwYXJ0OwotICAgIGlmIChyLmhlaWdodCgpIDw9IGJ1dHRvblNpemVzKClb
TlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgpKSB7Ci0gICAgICAgIC8vIFB1c2ggYnV0dG9u
Ci0gICAgICAgIHBhcnQgPSBTYWZhcmlUaGVtZTo6UHVzaEJ1dHRvblBhcnQ7Ci0KLSAgICAgICAg
SW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07Ci0gICAgICAgIHNpemUu
c2V0V2lkdGgoci53aWR0aCgpKTsKLQotICAgICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB3aXRo
aW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4KLSAgICAgICAgaWYgKGluZmxhdGVkUmVjdC5oZWlnaHQo
KSA+IHNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRZKGluZmxh
dGVkUmVjdC55KCkgKyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKSkgLyAy
KTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUg
c2hhZG93LgotICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3Qs
IHNpemUsIGJ1dHRvbk1hcmdpbnMoY29udHJvbFNpemUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cGFydCA9IFNhZmFyaVRoZW1lOjpTcXVhcmVCdXR0b25QYXJ0OwotCi0gICAgcGFpbnRUaGVtZVBh
cnQocGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwgaW5mbGF0ZWRS
ZWN0LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwotCi0gICAgcGFpbnRUaGVtZVBh
cnQoU2FmYXJpVGhlbWU6OlRleHRGaWVsZFBhcnQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCksIHIsIChOU0NvbnRyb2xTaXplKTAsIGRldGVybWluZVN0YXRlKG8pICYgfkZv
Y3VzZWRTdGF0ZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2Fm
YXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50KikgY29uc3QKLXsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRDYXBz
TG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoteyAgICAKLSNpZiBkZWZpbmVkKFNBRkFSSV9USEVN
RV9WRVJTSU9OKSAmJiBTQUZBUklfVEhFTUVfVkVSU0lPTiA+PSAxCi0gICAgQVNTRVJUKFNhZmFy
aVRoZW1lTGlicmFyeSgpKTsKLQotICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBwYWludFRoZW1lUGFydChD
YXBzTG9ja1BhcnQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCksIHIsIChO
U0NvbnRyb2xTaXplKTAsIChUaGVtZUNvbnRyb2xTdGF0ZSkwKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIEFTU0VSVChTYWZhcmlU
aGVtZUxpYnJhcnkoKSk7Ci0KLSAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6VGV4dEFy
ZWFQYXJ0LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLCByLCAoTlNDb250
cm9sU2l6ZSkwLCBkZXRlcm1pbmVTdGF0ZShvKSAmIH5Gb2N1c2VkU3RhdGUpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3QKLXsKLX0KLQot
Y29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBCdXR0b25NYXJnaW5zKE5TQ29udHJv
bFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0g
PQotICAgIHsKLSAgICAgICAgeyAyLCAzLCAzLCAzIH0sCi0gICAgICAgIHsgMSwgMywgMywgMyB9
LAotICAgICAgICB7IDAsIDEsIDAsIDEgfQotICAgIH07Ci0gICAgcmV0dXJuIG1hcmdpbnNbc2l6
ZV07Ci19Ci0KLWNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEJ1dHRvblNp
emVzKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50
U2l6ZSgwLCAyMSksIEludFNpemUoMCwgMTgpLCBJbnRTaXplKDAsIDE1KSB9OwotICAgIHJldHVy
biBzaXplczsKLX0KLQotY29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBCdXR0b25Q
YWRkaW5nKE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50
IHBhZGRpbmdbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAyLCAyNiwgMywgOCB9LAotICAgICAg
ICB7IDIsIDIzLCAzLCA4IH0sCi0gICAgICAgIHsgMiwgMjIsIDMsIDEwIH0KLSAgICB9OwotICAg
IHJldHVybiBwYWRkaW5nW3NpemVdOwotfQotCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWlu
dE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7Ci0K
LSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGcm9tUmVjdChyLCBw
b3B1cEJ1dHRvblNpemVzKCkpOwotICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsKLSAgICBJ
bnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbY29udHJvbFNpemVdOwotICAgIHNpemUu
c2V0V2lkdGgoci53aWR0aCgpKTsKLQotICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQg
Zm9yIHRoZSBzaGFkb3cuCi0gICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXpl
KG8uc3R5bGUoKSkpCi0gICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSk7Ci0KLSAgICBwYWlu
dFRoZW1lUGFydChEcm9wRG93bkJ1dHRvblBhcnQsIGluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBm
OwotY29uc3QgZmxvYXQgYmFzZUFycm93SGVpZ2h0ID0gNS4wZjsKLWNvbnN0IGZsb2F0IGJhc2VB
cnJvd1dpZHRoID0gNy4wZjsKLWNvbnN0IGludCBhcnJvd1BhZGRpbmdMZWZ0ID0gNTsKLWNvbnN0
IGludCBhcnJvd1BhZGRpbmdSaWdodCA9IDU7Ci1jb25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFy
YXRvciA9IDQ7Ci1jb25zdCBpbnQgYmFzZUJvcmRlclJhZGl1cyA9IDU7Ci1jb25zdCBpbnQgc3R5
bGVkUG9wdXBQYWRkaW5nTGVmdCA9IDg7Ci1jb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nVG9w
ID0gMTsKLWNvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gPSAyOwotCi1zdGF0aWMg
dm9pZCBUb3BHcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGlu
RGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKLXsKLSAgICBzdGF0aWMgZmxvYXQgZGFya1s0XSA9IHsg
MS4wZiwgMS4wZiwgMS4wZiwgMC40ZiB9OwotICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsg
MS4wZiwgMS4wZiwgMS4wZiwgMC4xNWYgfTsKLSAgICBmbG9hdCBhID0gaW5EYXRhWzBdOwotICAg
IGludCBpID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgICBvdXREYXRh
W2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07Ci19Ci0KLXN0YXRpYyB2
b2lkIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCog
aW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAwLjBmIH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAwLjNmIH07Ci0gICAgZmxvYXQgYSA9IGluRGF0YVswXTsKLSAg
ICBpbnQgaSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgb3V0RGF0
YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwotfQotCi1zdGF0aWMg
dm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBp
bkRhdGEsIENHRmxvYXQqIG91dERhdGEpCi17Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7
IDAuMGYsIDAuMGYsIDAuMGYsIDAuMTVmIH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0g
eyAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmIH07Ci0gICAgZmxvYXQgYSA9IGluRGF0YVswXTsKLSAg
ICBpbnQgaSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgb3V0RGF0
YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwotfQotCi1zdGF0aWMg
dm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCog
aW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0g
eyAwLjBmLCAwLjBmLCAwLjBmLCAwLjY3OGYgfTsKLSAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0g
PSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuMTNmIH07Ci0gICAgZmxvYXQgYSA9IGluRGF0YVswXTsK
LSAgICBpbnQgaSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgb3V0
RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwotfQotCi12b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgaWYgKHIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICBwYWludEluZm8uY29udGV4dCgpLnNhdmUoKTsKLQotICAgIEZsb2F0Um91bmRlZFJl
Y3QgYm91bmQgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9y
KHIpKTsKLSAgICBpbnQgcmFkaXVzID0gYm91bmQucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsK
LQotICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7
Ci0KLSAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIu
aGVpZ2h0KCkgLyAyLjBmKTsKLSAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxs
YmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKLSAgICBSZXRhaW5Q
dHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24gPSBhZG9wdENGKENHRnVuY3Rpb25DcmVhdGUo
TlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxD
R1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkpLCBDR1Bv
aW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSksIHRvcEZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKLQotICAgIEZsb2F0UmVjdCBib3R0b21HcmFkaWVudChy
LngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgpIC0gMi4w
ZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwotICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2Fs
bGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwg
TlVMTCB9OwotICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21GdW5jdGlvbiA9IGFk
b3B0Q0YoQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2Fs
bGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyA9IGFk
b3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFk
aWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVu
dC54KCksIGJvdHRvbUdyYWRpZW50Lm1heFkoKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxz
ZSwgZmFsc2UpKTsKLQotICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFj
a3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07Ci0gICAgUmV0YWluUHRy
PENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9IGFkb3B0Q0YoQ0dGdW5jdGlvbkNyZWF0ZShO
VUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxD
R1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChj
c3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSwgci5t
YXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwotCi0gICAgUmV0YWlu
UHRyPENHU2hhZGluZ1JlZj4gbGVmdFNoYWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgp
ICsgcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcgPSBhZG9wdENGKENHU2hh
ZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5tYXhYKCksICByLnkoKSksIENH
UG9pbnRNYWtlKHIubWF4WCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwg
ZmFsc2UsIGZhbHNlKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zYXZlKCk7Ci0gICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKLSAgICBwYWludEluZm8uY29udGV4dCgpLmNs
aXBSb3VuZGVkUmVjdChib3VuZCk7Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwg
bWFpblNoYWRpbmcuZ2V0KCkpOwotICAgIHBhaW50SW5mby5jb250ZXh0KCkucmVzdG9yZSgpOwot
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCB0b3BHcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwg
Ym91bmQucmFkaWkoKS50b3BMZWZ0KCksIGJvdW5kLnJhZGlpKCkudG9wUmlnaHQoKSwgSW50U2l6
ZSgpLCBJbnRTaXplKCkpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BT
aGFkaW5nLmdldCgpKTsKLSAgICBwYWludEluZm8uY29udGV4dCgpLnJlc3RvcmUoKTsKLQotICAg
IGlmICghYm90dG9tR3JhZGllbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuc2F2ZSgpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRv
bUdyYWRpZW50KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91bmRlZFJlY3Qo
RmxvYXRSb3VuZGVkUmVjdChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRpZW50KSwgSW50U2l6
ZSgpLCBJbnRTaXplKCksIGJvdW5kLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBib3VuZC5yYWRpaSgp
LmJvdHRvbVJpZ2h0KCkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwg
Ym90dG9tU2hhZGluZy5nZXQoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkucmVzdG9y
ZSgpOwotICAgIH0KLQotICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2F2ZSgpOwotICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlw
Um91bmRlZFJlY3QoYm91bmQpOwotICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGxl
ZnRTaGFkaW5nLmdldCgpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCByaWdo
dFNoYWRpbmcuZ2V0KCkpOwotICAgIHBhaW50SW5mby5jb250ZXh0KCkucmVzdG9yZSgpOwotCi0g
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5yZXN0b3JlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChyZWN0LngoKSArIHJlbmRlcmVy
LnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgIHJlY3QueSgpICsgcmVuZGVyZXIu
c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICByZWN0LndpZHRoKCkgLSByZW5kZXJl
ci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJSaWdo
dFdpZHRoKCksCi0gICAgICAgIHJlY3QuaGVpZ2h0KCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRl
clRvcFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlckJvdHRvbVdpZHRoKCkpOwotICAg
IC8vIERyYXcgdGhlIGdyYWRpZW50cyB0byBnaXZlIHRoZSBzdHlsZWQgcG9wdXAgbWVudSBhIGJ1
dHRvbiBhcHBlYXJhbmNlCi0gICAgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhyZW5kZXJl
ciwgcGFpbnRJbmZvLCBib3VuZHMpOwotCi0gICAgLy8gU2luY2Ugd2UgYWN0dWFsbHkga25vdyB0
aGUgc2l6ZSBvZiB0aGUgY29udHJvbCBoZXJlLCB3ZSByZXN0cmljdCB0aGUgZm9udCBzY2FsZSB0
byBtYWtlIHN1cmUgdGhlIGFycm93IHdpbGwgZml0IHZlcnRpY2FsbHkgaW4gdGhlIGJvdW5kcwot
ICAgIGZsb2F0IGZvbnRTY2FsZSA9IG1pbihyZW5kZXJlci5zdHlsZSgpLmZvbnRTaXplKCkgLyBi
YXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIGJhc2VBcnJvd0hlaWdodCk7Ci0gICAgZmxv
YXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBmOwotICAgIGZs
b2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9udFNjYWxlOwotICAgIGZsb2F0
IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBsZWZ0
RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93V2lkdGg7Ci0K
LSAgICBpZiAoYm91bmRzLndpZHRoKCkgPCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zYXZlKCk7
Ci0KLSAgICBwYWludEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihOb1N0cm9rZSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICBGbG9hdFBvaW50IGFycm93WzNdOwotICAgIGFy
cm93WzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSAtIGFycm93SGVpZ2h0IC8gMi4w
Zik7Ci0gICAgYXJyb3dbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2Vu
dGVyWSAtIGFycm93SGVpZ2h0IC8gMi4wZik7Ci0gICAgYXJyb3dbMl0gPSBGbG9hdFBvaW50KGxl
ZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgKyBhcnJvd0hlaWdodCAvIDIuMGYp
OwotCi0gICAgLy8gRHJhdyB0aGUgYXJyb3cKLSAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdD
b252ZXhQb2x5Z29uKDMsIGFycm93LCB0cnVlKTsKLQotICAgIENvbG9yIGxlZnRTZXBhcmF0b3JD
b2xvcigwLCAwLCAwLCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1
NSwgMjU1LCA0MCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0b3IgdGhpY2tu
ZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwotICAgIGludCBzZXBhcmF0
b3JTcGFjZSA9IDI7Ci0gICAgaW50IGxlZnRFZGdlT2ZTZXBhcmF0b3IgPSBzdGF0aWNfY2FzdDxp
bnQ+KGxlZnRFZGdlIC0gYXJyb3dQYWRkaW5nTGVmdCk7IC8vIEZJWE1FOiBSb3VuZD8KLQotICAg
IC8vIERyYXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVmdCBvZiB0aGUgYXJyb3dzCi0gICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VUaGlja25lc3MoMSk7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5zZXRTdHJva2VDb2xvcihsZWZ0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwotICAgIHBhaW50SW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VP
ZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5tYXhZKCkpKTsKLQotICAgIHBh
aW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IocmlnaHRTZXBhcmF0b3JDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQ
b2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJh
dG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5tYXhZKCkpKTsKLQotICAgIHBhaW50SW5mby5j
b250ZXh0KCkucmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBz
dHlsZS5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwotICAgIAotICAg
IC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KLSAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KEF1dG8pKTsKLQotICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICBzdHls
ZS5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Ig
dG8gYmxhY2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUgdGhlIGFxdWEgbG9vay4KLSAgICAvLyBDYXN0
IHRvIFJHQjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnLgotICAgIHN0eWxlLnNl
dENvbG9yKGUgJiYgIWUtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdC
QTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKLQotICAgIC8vIFNldCB0aGUg
YnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLQotICAg
IC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6
ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVj
aWZpZWQgZm9udCB0byBmaWd1cmUgb3V0Ci0gICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6
ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhh
dCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAvLyBzeXN0ZW0gZm9udCBm
b3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgotICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKLX0KLQotaW50IFJlbmRlclRoZW1l
U2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAotewotICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAg
ICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xl
ZnRQYWRkaW5nXTsKLSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9u
UGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQ7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbcmlnaHRQYWRkaW5nXTsKLSAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwotICAgICAgICBmbG9hdCBhcnJv
d1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQ
YWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSk7Ci0gICAgfQotICAgIHJldHVy
biAwOwotfQotCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9w
KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXTsKLSAgICBpZiAoc3R5bGUuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVw
UGFkZGluZ1RvcDsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFJlbmRlclRoZW1lU2FmYXJpOjpw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVy
biBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9tUGFk
ZGluZ107Ci0gICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
Ci0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b207Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKLSAg
ICAKLSAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKLSAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMo
SW50U2l6ZShpbnQoYmFzZUJvcmRlclJhZGl1cyArIGZvbnRTY2FsZSAtIDEpLCBpbnQoYmFzZUJv
cmRlclJhZGl1cyArIGZvbnRTY2FsZSAtIDEpKSk7IC8vIEZJWE1FOiBSb3VuZCB1cD8KLQotICAg
IGNvbnN0IGludCBtaW5IZWlnaHQgPSAxNTsKLSAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3Ro
KG1pbkhlaWdodCwgRml4ZWQpKTsKLSAgICAKLSAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotY29uc3QgSW50U2l6ZSogUmVuZGVy
VGhlbWVTYWZhcmk6Om1lbnVMaXN0U2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBJ
bnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDksIDApLCBJbnRTaXplKDUsIDApLCBJbnRTaXpl
KDAsIDApIH07Ci0gICAgcmV0dXJuIHNpemVzOwotfQotCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6
Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAotewotICAgIHJl
dHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgbWVudUxpc3RTaXplcygpKS53aWR0aCgpOwot
fQotCi1jb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7Ci1jb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAy
OwotCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgSW50U2l6ZSByYWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKLSAgICBG
bG9hdFJvdW5kZWRSZWN0IGJvdW5kcyhyLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMp
OwotCi0gICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQ
YXJ0KQotICAgICAgICBib3VuZHMuc2V0UmVjdChJbnRSZWN0KHIueCgpLCByLnkoKSArIHIuaGVp
Z2h0KCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIsIHIud2lkdGgoKSwgdHJhY2tXaWR0aCkpOwotICAg
IGVsc2UgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQot
ICAgICAgICBib3VuZHMuc2V0UmVjdChJbnRSZWN0KHIueCgpICsgci53aWR0aCgpIC8gMiAtIHRy
YWNrV2lkdGggLyAyLCByLnkoKSwgdHJhY2tXaWR0aCwgci5oZWlnaHQoKSkpOwotCi0gICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7
Ci0KLSAgICBwYWludEluZm8uY29udGV4dCgpLnNhdmUoKTsKLSAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQsIGJvdW5kcy5yZWN0KCkpOwotCi0gICAgc3RydWN0IENHRnVuY3Rpb25DYWxs
YmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRlLCBOVUxM
IH07Ci0gICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9IGFkb3B0Q0Yo
Q0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykp
OwotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwotICAgIGlmIChvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgbWFpblNo
YWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLm1heFkoKSksIENHUG9pbnRNYWtlKGJv
dW5kcy5yZWN0KCkubWF4WCgpLCBib3VuZHMucmVjdCgpLm1heFkoKSksIG1haW5GdW5jdGlvbi5n
ZXQoKSwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgZWxzZQotICAgICAgICBtYWluU2hhZGluZyA9IGFk
b3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMucmVj
dCgpLngoKSwgIGJvdW5kcy5yZWN0KCkueSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54
KCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFs
c2UpKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xpcFJvdW5kZWRSZWN0KGJvdW5kcyk7
Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbWFpblNoYWRpbmcuZ2V0KCkpOwot
ICAgIHBhaW50SW5mby5jb250ZXh0KCkucmVzdG9yZSgpOwotICAgIAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQq
IGUpIGNvbnN0IAoteyAKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIp
OyAKLX0gCi0KLWNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7
Ci0KLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwotICAgIHBhaW50VGhlbWVQYXJ0
KFNsaWRlclRodW1iUGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgTlNTbWFsbENvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1jb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwotY29uc3QgaW50IHNs
aWRlclRodW1iSGVpZ2h0ID0gMTU7Ci0KLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAg
fSAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgZWxzZSBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09
IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSAKLSAgICAgICAgUmVuZGVyTWVkaWFDb250cm9sczo6YWRq
dXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoc3R5bGUpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBBU1NFUlQo
U2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwotCi0gICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6
OlNlYXJjaEZpZWxkUGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgY29udHJvbFNpemVGcm9tUmVjdChyLCBzZWFyY2hGaWVsZFNpemVzKCkpLCBkZXRlcm1pbmVT
dGF0ZShvKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJU
aGVtZVNhZmFyaTo6c2VhcmNoRmllbGRTaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0
IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjIpLCBJbnRTaXplKDAsIDE5KSwgSW50
U2l6ZSgwLCAxNSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdl
IGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3
aWR0aCBvZiB0aGUgY29udHJvbC4KLSAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZp
ZWxkU2l6ZXMoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBPdmVycmlkZSBib3JkZXIuCi0gICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDI7Ci0gICAgc3R5
bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS5zZXRCb3JkZXJM
ZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lk
dGgpOwotICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLnNl
dEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS5zZXRCb3JkZXJCb3R0
b21TdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgp
OwotICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKLQotICAgIC8vIE92ZXJyaWRl
IGhlaWdodC4KLSAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLSAgICBzZXRTZWFy
Y2hGaWVsZFNpemUoc3R5bGUpOwotCi0gICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1h
dGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsK
LSAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBz
dHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUu
c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotCi0gICAgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0gICAgc2V0Rm9udEZyb21D
b250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
KQotewotICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7Ci0KLSAgICBOb2RlKiBpbnB1
dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5w
dXQgPSBvLm5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXQtPnJlbmRl
cmVyKCk7Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLQotICAgIEludFJlY3Qgc2VhcmNoUmVjdCA9
IHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpOwot
Ci0gICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6OlNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
UGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwgc2VhcmNoUmVjdCwg
Y29udHJvbFNpemVGcm9tUmVjdChzZWFyY2hSZWN0LCBzZWFyY2hGaWVsZFNpemVzKCkpLCBkZXRl
cm1pbmVTdGF0ZShvKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZVNhZmFyaTo6Y2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRp
YyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE2LCAxMyksIEludFNpemUoMTMs
IDExKSwgSW50U2l6ZSgxMywgOSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50
U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkp
OwotICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi1jb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxOSwgMTMp
LCBJbnRTaXplKDE3LCAxMSksIEludFNpemUoMTcsIDkpIH07Ci0gICAgcmV0dXJuIHNpemVzOwot
fQotCi1jb25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNp
emUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAg
IHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQs
IEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUg
c2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0g
ICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgQVNTRVJUKFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKLQotICAgIE5vZGUq
IGlucHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIWlucHV0KQotICAgICAg
ICBpbnB1dCA9IG8ubm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dC0+
cmVuZGVyZXIoKTsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotCi0gICAgSW50UmVjdCBzZWFyY2hS
ZWN0ID0gcmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1z
KCk7Ci0KLSAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCksIHNl
YXJjaFJlY3QsIGNvbnRyb2xTaXplRnJvbVJlY3Qoc2VhcmNoUmVjdCwgc2VhcmNoRmllbGRTaXpl
cygpKSwgZGV0ZXJtaW5lU3RhdGUobykpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3Qg
aW50IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUuc2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwotICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYpCi17Ci0gICAgQVNTRVJUKFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKLQotICAgIE5vZGUqIGlu
cHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICBp
bnB1dCA9IG8ubm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dC0+cmVu
ZGVyZXIoKTsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotCi0gICAgSW50UmVjdCBzZWFyY2hSZWN0
ID0gcmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7
Ci0KLSAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uUGFydCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSwgc2VhcmNoUmVj
dCwgY29udHJvbFNpemVGcm9tUmVjdChzZWFyY2hSZWN0LCBzZWFyY2hGaWVsZFNpemVzKCkpLCBk
ZXRlcm1pbmVTdGF0ZShvKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKFZJ
REVPKQotU3RyaW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
Ci17Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICBpZiAobV9tZWRpYUNv
bnRyb2xzU3R5bGVTaGVldC5pc0VtcHR5KCkpCi0gICAgICAgIG1fbWVkaWFDb250cm9sc1N0eWxl
U2hlZXQgPSBSZW5kZXJUaGVtZVdpbjo6c3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlKENGU1RSKCJt
ZWRpYUNvbnRyb2xzQXBwbGUiKSwgQ0ZTVFIoImNzcyIpKTsKLSAgICByZXR1cm4gbV9tZWRpYUNv
bnRyb2xzU3R5bGVTaGVldDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5k
aWYKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkK
LXsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIFN0cmluZ0J1aWxkZXIg
c2NyaXB0QnVpbGRlcjsKLSAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZChSZW5kZXJUaGVtZVdpbjo6
c3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlKENGU1RSKCJtZWRpYUNvbnRyb2xzTG9jYWxpemVkU3Ry
aW5ncyIpLCBDRlNUUigianMiKSkpOwotICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kKFJlbmRlclRo
ZW1lV2luOjpzdHJpbmdXaXRoQ29udGVudHNPZkZpbGUoQ0ZTVFIoIm1lZGlhQ29udHJvbHNBcHBs
ZSIpLCBDRlNUUigianMiKSkpOwotICAgIG1fbWVkaWFDb250cm9sc1NjcmlwdCA9IHNjcmlwdEJ1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICByZXR1cm4gbV9tZWRpYUNvbnRyb2xzU2NyaXB0OwotI2Vs
c2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVy
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBNZXRlclBhcnQ6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUludFNp
emUgUmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRl
ciYsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICByZXR1cm4gYm91bmRzLnNp
emUoKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcihjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gTk9URTogVGhpcyByb3V0aW5lIGlzIGZvciB0ZXN0
aW5nIG9ubHkuIEl0IHNob3VsZCBiZSBmbGVzaGVkIG91dCB3aXRoIGEgcmVhbCBDRy1iYXNlZCBp
bXBsZW1lbnRhdGlvbi4KLSAgICAvLyBSaWdodCBub3cgaXQgdXNlcyBhIHNsaWRlciwgd2l0aCB0
aGUgdGh1bWIgcG9zaXRpb25lZCBhdCB0aGUgbWV0ZXIgcG9pbnQuCi0gICAgaWYgKCFpczxSZW5k
ZXJNZXRlcj4ocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBIVE1M
TWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KHJlbmRlck9iamVj
dCkubWV0ZXJFbGVtZW50KCk7Ci0KLSAgICBpbnQgcmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50
PigoMS4wIC0gZWxlbWVudC0+dmFsdWVSYXRpbygpKSAqIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVj
dC5zaXplKCkud2lkdGgoKSkpOwotCi0gICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZAotICAgIHBh
aW50U2xpZGVyVHJhY2socmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotCi0gICAgLy8g
RHJhdyB0aGUgcHJvZ3Jlc3MgcG9ydGlvbgotICAgIEludFJlY3QgY29tcGxldGVkUmVjdChyZWN0
KTsKLSAgICBjb21wbGV0ZWRSZWN0LmNvbnRyYWN0KHJlbWFpbmluZywgMCk7Ci0KLSAgICBwYWlu
dFNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCBjb21wbGV0ZWRSZWN0KTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gI2lmIFVTRShTQUZBUklfVEhFTUUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
OWU1YWRkY2Q0Y2NkODY5YmQ2NjI1MThlMTY3Nzg2OWMwYTk5ODRhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVNhZmFyaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJl
bmRlclRoZW1lU2FmYXJpX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVTYWZhcmlfaAotCi0jaWYgVVNF
KFNBRkFSSV9USEVNRSkKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLS8vIElmIHlvdSBo
YXZlIGFuIGVtcHR5IHBsYWNlaG9sZGVyIFNhZmFyaVRoZW1lQ29uc3RhbnRzLmgsIHRoZW4gaW5j
bHVkZSBTYWZhcmlUaGVtZS5oCi0vLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCBhIHZlcnNp
b24gb2YgV2ViS2l0U3VwcG9ydExpYnJhcnkgaXMgcmVsZWFzZWQgd2l0aCBhbiB1cGRhdGVkIFNh
ZmFyaVRoZW1lQ29uc3RhbnRzLmggCi0jaW5jbHVkZSA8U2FmYXJpVGhlbWUvU2FmYXJpVGhlbWVD
b25zdGFudHMuaD4KLSNpZm5kZWYgU2FmYXJpVGhlbWVDb25zdGFudHNfaAotI2luY2x1ZGUgPFNh
ZmFyaVRoZW1lL1NhZmFyaVRoZW1lLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLXR5
cGVkZWYgdm9pZCogSEFORExFOwotdHlwZWRlZiBzdHJ1Y3QgSElOU1RBTkNFX18qIEhJTlNUQU5D
RTsKLXR5cGVkZWYgSElOU1RBTkNFIEhNT0RVTEU7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi11c2luZyBuYW1lc3BhY2UgU2FmYXJpVGhlbWU7Ci0KLWNsYXNzIFJlbmRlclN0eWxl
OwotCi1jbGFzcyBSZW5kZXJUaGVtZVNhZmFyaSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7Ci0KLSAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCi0gICAgLy8gcG9zaXRpb24g
Y2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCi0gICAgLy8gY29udHJvbHMgdGhh
dCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJCb3gmKSBjb25zdDsKLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29u
dHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90Lgot
ICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKLQotICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9s
IHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHND
b250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgSW50UmVjdCYpOwotCi0gICAg
dmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJv
cmRlckRhdGEmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExh
eWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5n
Q29sb3IoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVu
ZGVyU3R5bGUmKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCop
IGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAg
ICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUuCi0g
ICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2Jv
eFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlv
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlJikgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQqKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCopIGNv
bnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQqKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gCi0gICAgdmly
dHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1NjcmlwdCgpIG92ZXJyaWRlOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXpl
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhl
bWVTYWZhcmkoKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVNhZmFyaSgpOwotCi0gICAgSW50
UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGlu
dCogbWFyZ2lucykgY29uc3Q7Ci0KLSAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBv
ZmYgdGhlIGZvbnQuICBVc2VkIGJ5IHNvbWUgb2YgdGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMp
LgotCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmKSBj
b25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSYpIGNvbnN0OwotICAgIC8vdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJ
bnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSk7Ci0gICAgdm9pZCBzZXRTaXpl
RnJvbUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAg
SW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBj
b25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiwgY29uc3Qg
SW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKLQotICAg
IC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKLSAg
ICBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7Ci0gICAgY29uc3QgaW50KiBj
aGVja2JveE1hcmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBJbnRTaXpl
KiByYWRpb1NpemVzKCkgY29uc3Q7Ci0gICAgY29uc3QgaW50KiByYWRpb01hcmdpbnMoTlNDb250
cm9sU2l6ZSkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmdGcm9tQ29udHJvbFNp
emUoUmVuZGVyU3R5bGUmLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKLSAgICBjb25zdCBJbnRTaXpl
KiBidXR0b25TaXplcygpIGNvbnN0OwotICAgIGNvbnN0IGludCogYnV0dG9uTWFyZ2lucyhOU0Nv
bnRyb2xTaXplKSBjb25zdDsKLQotICAgIGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMo
KSBjb25zdDsKLSAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uTWFyZ2lucyhOU0NvbnRyb2xTaXpl
KSBjb25zdDsKLSAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uUGFkZGluZyhOU0NvbnRyb2xTaXpl
KSBjb25zdDsKLSAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGNvbnN0
IEludFNpemUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKLQotICAgIGNvbnN0IEludFNpemUqIHNl
YXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKLSAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25T
aXplcygpIGNvbnN0OwotICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNv
bnN0OwotICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7Ci0K
LSAgICBUaGVtZUNvbnRyb2xTdGF0ZSBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKLQotICAgIFN0cmluZyBtX21lZGlhQ29udHJvbHNTY3JpcHQ7Ci0gICAgU3RyaW5n
IG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyAjaWYgVVNFKFNBRkFSSV9USEVNRSkKLQotI2VuZGlmIC8vIFJlbmRlclRo
ZW1lU2FmYXJpX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaAppbmRleCBkZTVkYTU0ZTQyODRjZWJjOTZkZWZiYzgzYzY4OWE0ZDZjMmZlOWI0
Li5hM2VmYzBlMzEyZGRiM2JiYmE1MjZiNzM5ZTk1MTU2NTBjMDgyYjk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zOCw5ICsz
OCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZl
cmVuY2UoRmlsdGVyJiwgRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKE9QRU5DTCkKLSAgICB2aXJ0dWFsIGJvb2wgcGxhdGZv
cm1BcHBseU9wZW5DTCgpOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKSBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>