<?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>114017</bug_id>
          
          <creation_ts>2013-04-05 03:00:17 -0700</creation_ts>
          <short_desc>Remove Chromium code from WebCore/rendering</short_desc>
          <delta_ts>2013-04-05 08:44:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869669</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 03:00:17 -0700</bug_when>
    <thetext>Remove Chromium code from WebCore/rendering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869670</commentid>
    <comment_count>1</comment_count>
      <attachid>196607</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 03:00:44 -0700</bug_when>
    <thetext>Created attachment 196607
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869781</commentid>
    <comment_count>2</comment_count>
      <attachid>196607</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 08:44:18 -0700</bug_when>
    <thetext>Comment on attachment 196607
Cleanup

Clearing flags on attachment: 196607

Committed r147748: &lt;http://trac.webkit.org/changeset/147748&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869782</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 08:44:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196607</attachid>
            <date>2013-04-05 03:00:44 -0700</date>
            <delta_ts>2013-04-05 08:44:18 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-114017-20130405030031.patch</filename>
            <type>text/plain</type>
            <size>155673</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzczMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTA0LTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBDaHJvbWl1bSBjb2Rl
IGZyb20gV2ViQ29yZS9yZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNDAxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbW92ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRl
eHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3Jv
bGxiYXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVp
cmVzVmVydGljYWxTY3JvbGxiYXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZENv
bXBvc2l0ZU92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc092ZXJoYW5nQXJlYXNMYXllcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkLmg6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1
bHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZv
bnRQcm92aWRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbTogUmVtb3Zl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1NoYXJlZC5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjU2hhcmVkOjpwYWludFNsaWRlclRodW1iKToKKwog
MjAxMy0wNC0wNSAgU2Vva2p1IEt3b24gIDxzZW9ranUua3dvbkBnbWFpbC5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogY3Jhc2ggaW4gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxp
Z2h0UXVhZCBhZnRlciByMTQ3NTY2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgxOCwxNCArODE4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxX
aWR0aEZvclRleAogICAgIGZsb2F0IG1lYXN1cmVkV2lkdGggPSAwOwogCiAgICAgYm9vbCBrZXJu
aW5nSXNFbmFibGVkID0gZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJuaW5nOwotCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKLSAgICAvLyBGSVhNRTogSGF2aW5n
IGFueSBmb250IGZlYXR1cmUgc2V0dGluZ3MgZW5hYmxlZCBjYW4gbGVhZCB0byBzZWxlY3Rpb24g
Z2FwcyBvbgotICAgIC8vIENocm9taXVtLW1hYy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzQxOAotICAgIGJvb2wgY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoID0g
cmVuZGVyZXItPmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpICYmICFmb250LmZvbnREZXNjcmlw
dGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOwotI2Vsc2UKICAgICBib29sIGNhblVzZVNpbXBsZUZv
bnRDb2RlUGF0aCA9IHJlbmRlcmVyLT5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKTsKLSNlbmRp
ZgogICAgIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IGNhY2hlIGdseXBoIG92ZXJmbG93cywgd2Ug
bmVlZCB0byByZS1tZWFzdXJlIHRoZSBydW4gaWYKICAgICAvLyB0aGUgc3R5bGUgaXMgbGluZWJv
eC1jb250YWluOiBnbHlwaC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
NiwyOCArMTAxNiwyMiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0QmFja2dyb3VuZExh
CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJM
YXllcigpIGNvbnN0CiB7Ci0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogICAgIGlmICghbV9vd25p
bmdMYXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhbV9vd25pbmdMYXllci0+bmVlZHND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogICAg
IHJldHVybiBtX293bmluZ0xheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25z
dAogewotI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICBpZiAoIW1fb3duaW5nTGF5ZXItPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIW1fb3duaW5nTGF5ZXItPm5lZWRzQ29tcG9zaXRlZFNj
cm9sbGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICByZXR1cm4gbV9v
d25pbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogewotI2lmICFQTEFURk9S
TShDSFJPTUlVTSkKICAgICBpZiAoIW1fb3duaW5nTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgIW1fb3duaW5nTGF5ZXItPm5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICByZXR1cm4gIW1fb3duaW5nTGF5ZXItPnNjcm9s
bENvcm5lckFuZFJlc2l6ZXJSZWN0KCkuaXNFbXB0eSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNzgsMTEgKzIyNzgsNiBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cGFpbnRDb250ZW50CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5t
b3ZlQnkoc2Nyb2xsQ29ybmVyLmxvY2F0aW9uKCkpOwogICAgICAgICBtX3JlbmRlclZpZXctPmZy
YW1lVmlldygpLT5wYWludFNjcm9sbENvcm5lcigmY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsK
ICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5
ZXJGb3JPdmVyaGFuZ0FyZWFzKCkpIHsKLSAgICAgICAgU2Nyb2xsVmlldyogdmlldyA9IG1fcmVu
ZGVyVmlldy0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIHZpZXctPmNhbGN1bGF0ZUFuZFBhaW50T3Zl
cmhhbmdBcmVhcygmY29udGV4dCwgY2xpcCk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTIzODAs
MTAgKzIzNzUsOCBAQCBzdGF0aWMgYm9vbCBzaG91bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRyCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0jaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQogICAgIGlmICghdmlldy0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI0MTYsMTEgKzI0
MDksNiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPdmVyCiAgICAgaWYg
KHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgJiYgbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+aGFz
T3BhcXVlQmFja2dyb3VuZCgpICYmICFtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5wcm9oaWJp
dHNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBDaHJvbWl1bSBh
bHdheXMgd2FudHMgYSBsYXllci4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
LmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCi0KLSNpbmNsdWRlICJHcmFkaWVu
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIK
LSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIEVO
QUJMRShWSURFTykKLQotdHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgY2hhciosIEltYWdlKj4g
TWVkaWFDb250cm9sSW1hZ2VNYXA7Ci1zdGF0aWMgTWVkaWFDb250cm9sSW1hZ2VNYXAqIGdNZWRp
YUNvbnRyb2xJbWFnZU1hcCA9IDA7Ci0KLXN0YXRpYyBJbWFnZSogcGxhdGZvcm1SZXNvdXJjZShj
b25zdCBjaGFyKiBuYW1lKQotewotICAgIGlmICghZ01lZGlhQ29udHJvbEltYWdlTWFwKQotICAg
ICAgICBnTWVkaWFDb250cm9sSW1hZ2VNYXAgPSBuZXcgTWVkaWFDb250cm9sSW1hZ2VNYXAoKTsK
LSAgICBpZiAoSW1hZ2UqIGltYWdlID0gZ01lZGlhQ29udHJvbEltYWdlTWFwLT5nZXQobmFtZSkp
Ci0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICBpZiAoSW1hZ2UqIGltYWdlID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKG5hbWUpLmxlYWtSZWYoKSkgewotICAgICAgICBnTWVkaWFDb250
cm9sSW1hZ2VNYXAtPnNldChuYW1lLCBpbWFnZSk7Ci0gICAgICAgIHJldHVybiBpbWFnZTsKLSAg
ICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBib29sIGhhc1NvdXJjZShjb25zdCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi17
Ci0gICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgIT0gSFRNTE1lZGlhRWxl
bWVudDo6TkVUV09SS19FTVBUWQotICAgICAgICAmJiBtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0
ZSgpICE9IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfTk9fU09VUkNFOwotfQotCi1zdGF0aWMg
Ym9vbCBwYWludE1lZGlhQnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQotewotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3Qp
OwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3Rh
dGljIEltYWdlKiBzb3VuZExldmVsMyA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhcGxheWVyU291
bmRMZXZlbDMiKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTGV2ZWwyID0gcGxhdGZvcm1SZXNv
dXJjZSgibWVkaWFwbGF5ZXJTb3VuZExldmVsMiIpOwotICAgIHN0YXRpYyBJbWFnZSogc291bmRM
ZXZlbDEgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYXBsYXllclNvdW5kTGV2ZWwxIik7Ci0gICAg
c3RhdGljIEltYWdlKiBzb3VuZExldmVsMCA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhcGxheWVy
U291bmRMZXZlbDAiKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlzYWJsZWQgPSBwbGF0Zm9y
bVJlc291cmNlKCJtZWRpYXBsYXllclNvdW5kRGlzYWJsZWQiKTsKLQotICAgIGlmICghaGFzU291
cmNlKG1lZGlhRWxlbWVudCkgfHwgIW1lZGlhRWxlbWVudC0+aGFzQXVkaW8oKSkKLSAgICAgICAg
cmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIHNvdW5kRGlz
YWJsZWQpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSB8fCBtZWRpYUVsZW1lbnQt
PnZvbHVtZSgpIDw9IDApCi0gICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBzb3VuZExldmVsMCk7Ci0KLSAgICBpZiAobWVkaWFFbGVtZW50LT52
b2x1bWUoKSA8PSAwLjMzKQotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludElu
Zm8uY29udGV4dCwgcmVjdCwgc291bmRMZXZlbDEpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+
dm9sdW1lKCkgPD0gMC42NikKLSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsIHNvdW5kTGV2ZWwyKTsKLQotICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBzb3VuZExldmVsMyk7Ci19Ci0KLXN0YXRp
YyBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOwot
ICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSW1hZ2UqIG1lZGlhUGxheSA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhcGxheWVyUGxheSIp
OwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlh
cGxheWVyUGF1c2UiKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2FibGVkID0gcGxh
dGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJQbGF5RGlzYWJsZWQiKTsKLQotICAgIGlmICghaGFz
U291cmNlKG1lZGlhRWxlbWVudCkpCi0gICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVBsYXlEaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5j
YW5QbGF5KCkgPyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKLX0KLQotc3RhdGljIGJvb2wgcGFp
bnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOwotICAg
IGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhh
c1NvdXJjZShtZWRpYUVsZW1lbnQpIHx8ICFtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYU92ZXJsYXlQbGF5ID0g
cGxhdGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJPdmVybGF5UGxheSIpOwotICAgIHJldHVybiBw
YWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYU92ZXJsYXlQbGF5
KTsKLX0KLQotc3RhdGljIEltYWdlKiBnZXRNZWRpYVNsaWRlclRodW1iKCkKLXsKLSAgICBzdGF0
aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWIgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYXBsYXll
clNsaWRlclRodW1iIik7Ci0gICAgcmV0dXJuIG1lZGlhU2xpZGVyVGh1bWI7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhaW50Um91bmRlZFNsaWRlckJhY2tncm91bmQoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0g
ICAgaW50IGJvcmRlclJhZGl1cyA9IHJlY3QuaGVpZ2h0KCkgLyAyOwotICAgIEludFNpemUgcmFk
aWkoYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMpOwotICAgIENvbG9yIHNsaWRlckJhY2tncm91
bmRDb2xvciA9IENvbG9yKDExLCAxMSwgMTEpOwotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBj
b250ZXh0LT5maWxsUm91bmRlZFJlY3QocmVjdCwgcmFkaWksIHJhZGlpLCByYWRpaSwgcmFkaWks
IHNsaWRlckJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4
dC0+cmVzdG9yZSgpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludFNsaWRlclJhbmdlSGlnaGxpZ2h0
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBDb2xv
ciBzdGFydENvbG9yLCBDb2xvciBlbmRDb2xvcikKLXsKLSAgICAvLyBDYWxjdWxhdGUgYm9yZGVy
IHJhZGl1czsgbmVlZCB0byBhdm9pZCBiZWluZyBzbWFsbGVyIHRoYW4gaGFsZiB0aGUgc2xpZGVy
IGhlaWdodAotICAgIC8vIGJlY2F1c2Ugb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMwMTQzLgotICAgIGludCBib3JkZXJSYWRpdXMgPSByZWN0LmhlaWdodCgpIC8g
MjsKLSAgICBJbnRTaXplIHJhZGlpKGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzKTsKLQotICAg
IC8vIENhbGN1bGF0ZSBoaWdobGlnaHQgcmVjdGFuZ2xlIGFuZCBlZGdlIGRpbWVuc2lvbnMuCi0g
ICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnRQb3NpdGlvbjsKLSAgICBpbnQgZW5kT2Zmc2V0ID0g
cmVjdC53aWR0aCgpIC0gZW5kUG9zaXRpb247Ci0gICAgaW50IHJhbmdlV2lkdGggPSBlbmRQb3Np
dGlvbiAtIHN0YXJ0UG9zaXRpb247Ci0KLSAgICBpZiAocmFuZ2VXaWR0aCA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIHJhbmdlIHdpZHRoIGlzIGJpZ2dlciB0
aGFuIGJvcmRlciByYWRpdXMgYXQgdGhlIGVkZ2VzIHRvIHJldGFpbiByb3VuZGVkIGNvcm5lcnMu
Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IDwgYm9yZGVyUmFkaXVzICYmIHJhbmdlV2lkdGggPCBib3Jk
ZXJSYWRpdXMpCi0gICAgICAgIHJhbmdlV2lkdGggPSBib3JkZXJSYWRpdXM7Ci0gICAgaWYgKGVu
ZE9mZnNldCA8IGJvcmRlclJhZGl1cyAmJiByYW5nZVdpZHRoIDwgYm9yZGVyUmFkaXVzKSB7Ci0g
ICAgICAgIHN0YXJ0UG9zaXRpb24gLT0gYm9yZGVyUmFkaXVzIC0gcmFuZ2VXaWR0aDsKLSAgICAg
ICAgcmFuZ2VXaWR0aCA9IGJvcmRlclJhZGl1czsKLSAgICB9Ci0KLSAgICAvLyBTZXQgcmVjdGFu
Z2xlIHRvIGhpZ2hsaWdodCByYW5nZS4KLSAgICBJbnRSZWN0IGhpZ2hsaWdodFJlY3QgPSByZWN0
OwotICAgIGhpZ2hsaWdodFJlY3QubW92ZShzdGFydE9mZnNldCwgMCk7Ci0gICAgaGlnaGxpZ2h0
UmVjdC5zZXRXaWR0aChyYW5nZVdpZHRoKTsKLQotICAgIC8vIERvbid0IGJvdGhlciBkcmF3aW5n
IGFuIGVtcHR5IGFyZWEuCi0gICAgaWYgKGhpZ2hsaWdodFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgd2hpdGUtZ3JleSBncmFkaWVudC4KLSAgICBJ
bnRQb2ludCBzbGlkZXJUb3BMZWZ0ID0gaGlnaGxpZ2h0UmVjdC5sb2NhdGlvbigpOwotICAgIElu
dFBvaW50IHNsaWRlckJvdHRvbUxlZnQgPSBzbGlkZXJUb3BMZWZ0OwotICAgIHNsaWRlckJvdHRv
bUxlZnQubW92ZSgwLCBoaWdobGlnaHRSZWN0LmhlaWdodCgpKTsKLSAgICBSZWZQdHI8R3JhZGll
bnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BMZWZ0LCBzbGlkZXJCb3R0
b21MZWZ0KTsKLSAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgc3RhcnRDb2xvcik7Ci0g
ICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIGVuZENvbG9yKTsKLQotICAgIC8vIEZpbGwg
aGlnaGxpZ2h0IHJlY3RhbmdsZSB3aXRoIGdyYWRpZW50LCBwb3RlbnRpYWxseSByb3VuZGVkIGlm
IG9uIGxlZnQgb3IgcmlnaHQgZWRnZS4KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4
dC0+c2V0RmlsbEdyYWRpZW50KGdyYWRpZW50KTsKLQotICAgIGlmIChzdGFydE9mZnNldCA8IGJv
cmRlclJhZGl1cyAmJiBlbmRPZmZzZXQgPCBib3JkZXJSYWRpdXMpCi0gICAgICAgIGNvbnRleHQt
PmZpbGxSb3VuZGVkUmVjdChoaWdobGlnaHRSZWN0LCByYWRpaSwgcmFkaWksIHJhZGlpLCByYWRp
aSwgc3RhcnRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZWxzZSBpZiAoc3RhcnRP
ZmZzZXQgPCBib3JkZXJSYWRpdXMpCi0gICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdCho
aWdobGlnaHRSZWN0LCByYWRpaSwgSW50U2l6ZSgwLCAwKSwgcmFkaWksIEludFNpemUoMCwgMCks
IHN0YXJ0Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGVsc2UgaWYgKGVuZE9mZnNl
dCA8IGJvcmRlclJhZGl1cykKLSAgICAgICAgY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KGhpZ2hs
aWdodFJlY3QsIEludFNpemUoMCwgMCksIHJhZGlpLCBJbnRTaXplKDAsIDApLCByYWRpaSwgc3Rh
cnRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0
LT5maWxsUmVjdChoaWdobGlnaHRSZWN0KTsKLQotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLX0K
LQotY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDMyOwotCi1zdGF0aWMgYm9vbCBw
YWludE1lZGlhU2xpZGVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQ7Ci0KLSAgICBwYWludFJvdW5kZWRTbGlkZXJCYWNrZ3JvdW5kKHJlY3Qs
IHN0eWxlLCBjb250ZXh0KTsKLQotICAgIC8vIERyYXcgdGhlIGJ1ZmZlcmVkIHJhbmdlLiBTaW5j
ZSB0aGUgZWxlbWVudCBtYXkgaGF2ZSBtdWx0aXBsZSBidWZmZXJlZCByYW5nZXMgYW5kIGl0J2Qg
YmUKLSAgICAvLyBkaXN0cmFjdGluZy8nYnVzeScgdG8gc2hvdyBhbGwgb2YgdGhlbSwgc2hvdyBv
bmx5IHRoZSBidWZmZXJlZCByYW5nZSBjb250YWluaW5nIHRoZSBjdXJyZW50IHBsYXkgaGVhZC4K
LSAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWRUaW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50
LT5idWZmZXJlZCgpOwotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlv
bigpOwotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgp
OwotICAgIGlmIChzdGQ6OmlzbmFuKGR1cmF0aW9uKSB8fCBzdGQ6OmlzaW5mKGR1cmF0aW9uKSB8
fCAhZHVyYXRpb24gfHwgc3RkOjppc25hbihjdXJyZW50VGltZSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlcmVkVGltZVJhbmdlcy0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBmbG9hdCBzdGFydCA9IGJ1ZmZlcmVkVGltZVJhbmdl
cy0+c3RhcnQoaSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgICAgIGZsb2F0IGVuZCA9IGJ1
ZmZlcmVkVGltZVJhbmdlcy0+ZW5kKGksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBp
ZiAoc3RkOjppc25hbihzdGFydCkgfHwgc3RkOjppc25hbihlbmQpIHx8IHN0YXJ0ID4gY3VycmVu
dFRpbWUgfHwgZW5kIDwgY3VycmVudFRpbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaW50IHN0YXJ0UG9zaXRpb24gPSBpbnQoc3RhcnQgKiByZWN0LndpZHRoKCkgLyBkdXJhdGlv
bik7Ci0gICAgICAgIGludCBjdXJyZW50UG9zaXRpb24gPSBpbnQoY3VycmVudFRpbWUgKiByZWN0
LndpZHRoKCkgLyBkdXJhdGlvbik7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IGludChlbmQg
KiByZWN0LndpZHRoKCkgLyBkdXJhdGlvbik7Ci0KLSAgICAgICAgLy8gQWRkIGhhbGYgdGhlIHRo
dW1iIHdpZHRoIHByb3BvcnRpb25hbGx5IGFkanVzdGVkIHRvIHRoZSBjdXJyZW50IHBhaW50aW5n
IHBvc2l0aW9uLgotICAgICAgICBpbnQgdGh1bWJDZW50ZXIgPSBtZWRpYVNsaWRlclRodW1iV2lk
dGggLyAyOwotICAgICAgICBpbnQgYWRkV2lkdGggPSB0aHVtYkNlbnRlciAqICgxLjAgLSAyLjAg
KiBjdXJyZW50UG9zaXRpb24gLyByZWN0LndpZHRoKCkpOwotICAgICAgICBjdXJyZW50UG9zaXRp
b24gKz0gYWRkV2lkdGg7Ci0KLSAgICAgICAgLy8gRHJhdyB3aGl0ZS1pc2ggaGlnaGxpZ2h0IGJl
Zm9yZSBjdXJyZW50IHRpbWUuCi0gICAgICAgIENvbG9yIHN0YXJ0Q29sb3IgPSBDb2xvcigxOTUs
IDE5NSwgMTk1KTsKLSAgICAgICAgQ29sb3IgZW5kQ29sb3IgPSBDb2xvcigyMTcsIDIxNywgMjE3
KTsKLSAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24pCi0gICAgICAg
ICAgICBwYWludFNsaWRlclJhbmdlSGlnaGxpZ2h0KHJlY3QsIHN0eWxlLCBjb250ZXh0LCBzdGFy
dFBvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24sIHN0YXJ0Q29sb3IsIGVuZENvbG9yKTsKLQotICAg
ICAgICAvLyBEcmF3IGdyZXktaXNoIGhpZ2hsaWdodCBhZnRlciBjdXJyZW50IHRpbWUuCi0gICAg
ICAgIHN0YXJ0Q29sb3IgPSBDb2xvcig2MCwgNjAsIDYwKTsKLSAgICAgICAgZW5kQ29sb3IgPSBD
b2xvcig3NiwgNzYsIDc2KTsKLQotICAgICAgICBpZiAoZW5kUG9zaXRpb24gPiBjdXJyZW50UG9z
aXRpb24pCi0gICAgICAgICAgICBwYWludFNsaWRlclJhbmdlSGlnaGxpZ2h0KHJlY3QsIHN0eWxl
LCBjb250ZXh0LCBjdXJyZW50UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzdGFydENvbG9yLCBlbmRD
b2xvcik7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QtPm5vZGUoKS0+c2hhZG93SG9z
dCgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFoYXNTb3VyY2UobWVkaWFFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYiA9IGdldE1lZGlhU2xpZGVyVGh1bWIoKTsKLSAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFT
bGlkZXJUaHVtYik7Ci19Ci0KLWNvbnN0IGludCBtZWRpYVZvbHVtZVNsaWRlclRodW1iV2lkdGgg
PSAyNDsKLQotc3RhdGljIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlcihSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVs
ZW1lbnQob2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAgcGFpbnRS
b3VuZGVkU2xpZGVyQmFja2dyb3VuZChyZWN0LCBzdHlsZSwgY29udGV4dCk7Ci0KLSAgICAvLyBD
YWxjdWxhdGUgdm9sdW1lIHBvc2l0aW9uIGZvciB3aGl0ZSBiYWNrZ3JvdW5kIHJlY3RhbmdsZS4K
LSAgICBmbG9hdCB2b2x1bWUgPSBtZWRpYUVsZW1lbnQtPnZvbHVtZSgpOwotICAgIGlmIChzdGQ6
OmlzbmFuKHZvbHVtZSkgfHwgdm9sdW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKHZvbHVtZSA+IDEpCi0gICAgICAgIHZvbHVtZSA9IDE7Ci0gICAgaWYgKCFoYXNTb3VyY2Uo
bWVkaWFFbGVtZW50KSB8fCAhbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpIHx8IG1lZGlhRWxlbWVu
dC0+bXV0ZWQoKSkKLSAgICAgICAgdm9sdW1lID0gMDsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUg
cG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGNlbnRlciBvZiB0aGUgdGh1bWIuCi0gICAgZmxvYXQg
ZmlsbFdpZHRoID0gMDsKLSAgICBpZiAodm9sdW1lID4gMCkgewotICAgICAgICBmbG9hdCB0aHVt
YkNlbnRlciA9IG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJXaWR0aCAvIDI7Ci0gICAgICAgIGZsb2F0
IHpvb21MZXZlbCA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGZsb2F0IHBvc2l0
aW9uV2lkdGggPSB2b2x1bWUgKiAocmVjdC53aWR0aCgpIC0gKHpvb21MZXZlbCAqIHRodW1iQ2Vu
dGVyKSk7Ci0gICAgICAgIGZpbGxXaWR0aCA9IHBvc2l0aW9uV2lkdGggKyAoem9vbUxldmVsICog
dGh1bWJDZW50ZXIgLyAyKTsKLSAgICB9Ci0KLSAgICBDb2xvciBzdGFydENvbG9yID0gQ29sb3Io
MTk1LCAxOTUsIDE5NSk7Ci0gICAgQ29sb3IgZW5kQ29sb3IgPSBDb2xvcigyMTcsIDIxNywgMjE3
KTsKLQotICAgIHBhaW50U2xpZGVyUmFuZ2VIaWdobGlnaHQocmVjdCwgc3R5bGUsIGNvbnRleHQs
IDAuMCwgZmlsbFdpZHRoLCBzdGFydENvbG9yLCBlbmRDb2xvcik7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0LT5ub2RlKCkpOwotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG9iamVjdC0+bm9kZSgpLT5z
aGFkb3dIb3N0KCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWhhc1NvdXJjZShtZWRpYUVsZW1lbnQpIHx8ICFtZWRpYUVsZW1lbnQt
Pmhhc0F1ZGlvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc3RhdGljIEltYWdlKiBt
ZWRpYVZvbHVtZVNsaWRlclRodW1iID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJWb2x1
bWVTbGlkZXJUaHVtYiIpOwotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCBtZWRpYVZvbHVtZVNsaWRlclRodW1iKTsKLX0KLQotc3RhdGljIGJvb2wg
cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG9iamVjdCk7Ci0g
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRp
YyBJbWFnZSogbWVkaWFGdWxsc2NyZWVuQnV0dG9uID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFw
bGF5ZXJGdWxsc2NyZWVuIik7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZv
LmNvbnRleHQsIHJlY3QsIG1lZGlhRnVsbHNjcmVlbkJ1dHRvbik7Ci19Ci0KLXN0YXRpYyBib29s
IHBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQo
b2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYUNsb3NlZENhcHRpb25CdXR0b24gPSBwbGF0Zm9ybVJl
c291cmNlKCJtZWRpYXBsYXllckNsb3NlZENhcHRpb24iKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1l
ZGlhQ2xvc2VkQ2FwdGlvbkJ1dHRvbkRpc2FibGVkID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFw
bGF5ZXJDbG9zZWRDYXB0aW9uRGlzYWJsZWQiKTsKLQotICAgIGlmIChtZWRpYUVsZW1lbnQtPndl
YmtpdENsb3NlZENhcHRpb25zVmlzaWJsZSgpKQotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1
dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFDbG9zZWRDYXB0aW9uQnV0dG9uKTsK
LQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBt
ZWRpYUNsb3NlZENhcHRpb25CdXR0b25EaXNhYmxlZCk7Ci19Ci0KLQotYm9vbCBSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgcGFydCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHN3aXRjaCAocGFydCkgewotICAg
IGNhc2UgTWVkaWFNdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246Ci0gICAg
ICAgIHJldHVybiBwYWludE1lZGlhTXV0ZUJ1dHRvbihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
Ci0gICAgY2FzZSBNZWRpYVBhdXNlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgot
ICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVBsYXlCdXR0b24ob2JqZWN0LCBwYWludEluZm8sIHJl
Y3QpOwotICAgIGNhc2UgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0gICAgICAgIHJl
dHVybiBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24ob2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOwotICAgIGNhc2UgTWVkaWFTbGlkZXI6Ci0gICAgICAgIHJldHVybiBwYWludE1l
ZGlhU2xpZGVyKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICBjYXNlIE1lZGlhU2xpZGVy
VGh1bWI6Ci0gICAgICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyVGh1bWIob2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXI6Ci0gICAgICAgIHJldHVy
biBwYWludE1lZGlhVm9sdW1lU2xpZGVyKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICBj
YXNlIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWI6Ci0gICAgICAgIHJldHVybiBwYWludE1lZGlhVm9s
dW1lU2xpZGVyVGh1bWIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotICAgIGNhc2UgTWVkaWFF
bnRlckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9u
OgotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24ob2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwotICAgIGNhc2UgTWVkaWFPdmVybGF5UGxheUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihvYmplY3QsIHBhaW50SW5mbywgcmVj
dCk7Ci0gICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b246Ci0gICAgY2FzZSBNZWRp
YVNlZWtCYWNrQnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbjoKLSAgICBj
YXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOgotICAgIGNhc2UgTWVkaWFUaW1lbGluZUNv
bnRhaW5lcjoKLSAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OgotICAgIGNhc2UgTWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoKLSAg
ICBjYXNlIE1lZGlhUmV3aW5kQnV0dG9uOgotICAgIGNhc2UgTWVkaWFSZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uOgotICAgIGNhc2UgTWVkaWFTdGF0dXNEaXNwbGF5OgotICAgIGNhc2UgTWVkaWFIaWRl
Q2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0gICAgY2FzZSBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250
YWluZXI6Ci0gICAgY2FzZSBNZWRpYVRleHRUcmFja0Rpc3BsYXk6Ci0gICAgY2FzZSBNZWRpYUZ1
bGxTY3JlZW5Wb2x1bWVTbGlkZXI6Ci0gICAgY2FzZSBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlk
ZXJUaHVtYjoKLSAgICBjYXNlIE1lZGlhQ2xvc2VkQ2FwdGlvbnNDb250YWluZXI6Ci0gICAgY2Fz
ZSBNZWRpYUNsb3NlZENhcHRpb25zVHJhY2tMaXN0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29u
c3QgaW50IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAyNDsKLWNvbnN0IGludCBtZWRpYVZvbHVt
ZVNsaWRlclRodW1iSGVpZ2h0ID0gMjQ7Ci0KLXZvaWQgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0g
ICAgc3RhdGljIEltYWdlKiBtZWRpYVNsaWRlclRodW1iID0gcGxhdGZvcm1SZXNvdXJjZSgibWVk
aWFwbGF5ZXJTbGlkZXJUaHVtYiIpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYiA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhcGxheWVyVm9sdW1lU2xpZGVyVGh1bWIi
KTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotCi0gICAgSW1hZ2Uq
IHRodW1iSW1hZ2UgPSAwOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xp
ZGVyVGh1bWJQYXJ0KSB7Ci0gICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVNsaWRlclRodW1iOwot
ICAgICAgICB3aWR0aCA9IG1lZGlhU2xpZGVyVGh1bWJXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0g
bWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKLSAgICB9IGVsc2UgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgdGh1bWJJbWFnZSA9
IG1lZGlhVm9sdW1lU2xpZGVyVGh1bWI7Ci0gICAgICAgIHdpZHRoID0gbWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYldpZHRoOwotICAgICAgICBoZWlnaHQgPSBtZWRpYVZvbHVtZVNsaWRlclRodW1iSGVp
Z2h0OwotICAgIH0KLQotICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgaWYgKHRodW1iSW1hZ2UpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQgKiB6b29tTGV2
ZWwpLCBGaXhlZCkpOwotICAgIH0KLX0KLQotc3RhdGljIFN0cmluZyBmb3JtYXRDaHJvbWl1bU1l
ZGlhQ29udHJvbHNUaW1lKGZsb2F0IHRpbWUsIGZsb2F0IGR1cmF0aW9uKQotewotICAgIGlmICgh
c3RkOjppc2Zpbml0ZSh0aW1lKSkKLSAgICAgICAgdGltZSA9IDA7Ci0gICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKGR1cmF0aW9uKSkKLSAgICAgICAgZHVyYXRpb24gPSAwOwotICAgIGludCBzZWNvbmRz
ID0gc3RhdGljX2Nhc3Q8aW50PihmYWJzZih0aW1lKSk7Ci0gICAgaW50IGhvdXJzID0gc2Vjb25k
cyAvICg2MCAqIDYwKTsKLSAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7Ci0g
ICAgc2Vjb25kcyAlPSA2MDsKLQotICAgIC8vIGR1cmF0aW9uIGRlZmluZXMgdGhlIGZvcm1hdCBv
ZiBob3cgdGhlIHRpbWUgaXMgcmVuZGVyZWQKLSAgICBpbnQgZHVyYXRpb25TZWNzID0gc3RhdGlj
X2Nhc3Q8aW50PihmYWJzZihkdXJhdGlvbikpOwotICAgIGludCBkdXJhdGlvbkhvdXJzID0gZHVy
YXRpb25TZWNzIC8gKDYwICogNjApOwotICAgIGludCBkdXJhdGlvbk1pbnMgPSAoZHVyYXRpb25T
ZWNzIC8gNjApICUgNjA7Ci0KLSAgICBpZiAoZHVyYXRpb25Ib3VycyB8fCBob3VycykKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyUwMWQ6JTAyZDolMDJkIiwgKHRpbWUgPCAwID8g
Ii0iIDogIiIpLCBob3VycywgbWludXRlcywgc2Vjb25kcyk7Ci0gICAgaWYgKGR1cmF0aW9uTWlu
cyA+IDkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMlMDJkOiUwMmQiLCAodGlt
ZSA8IDAgPyAiLSIgOiAiIiksIG1pbnV0ZXMsIHNlY29uZHMpOwotCi0gICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIlcyUwMWQ6JTAyZCIsICh0aW1lIDwgMCA/ICItIiA6ICIiKSwgbWludXRlcywg
c2Vjb25kcyk7Ci19Ci0KLVN0cmluZyBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmZvcm1h
dE1lZGlhQ29udHJvbHNUaW1lKGZsb2F0IHRpbWUpCi17Ci0gICAgcmV0dXJuIGZvcm1hdENocm9t
aXVtTWVkaWFDb250cm9sc1RpbWUodGltZSwgdGltZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW06OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBj
dXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIGZvcm1hdENocm9taXVt
TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUsIGR1cmF0aW9uKTsKLX0KLQotU3RyaW5nIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1Rp
bWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKQotewotICAgIHJldHVybiBmb3Jt
YXRDaHJvbWl1bU1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lIC0gZHVyYXRpb24sIGR1cmF0
aW9uKTsKLX0KLQotI2VuZGlmICAvLyAjaWYgRU5BQkxFKFZJREVPKQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtX2gKLSNkZWZpbmUgUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtX2gKLQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFBhaW50SW5mbzsKLQotY2xhc3MgSFRNTE1lZGlh
RWxlbWVudDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLWNsYXNzIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgcGFp
bnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHN0YXRpYyB2b2lkIGFk
anVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKik7Ci0gICAgc3RhdGljIFN0cmlu
ZyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShmbG9hdCB0aW1lKTsKLSAgICBzdGF0aWMgU3RyaW5n
IGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQg
ZHVyYXRpb24pOwotICAgIHN0YXRpYyBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmlu
Z1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyOTQsNyArMjI5NCw3IEBAIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSBSZW5kZXJPYmplY3QKICAgICAvLyBSZXNwZWN0IHRoZSBpbWFnZSdzIG9yaWVudGF0
aW9uIGlmIGl0J3MgYmVpbmcgdXNlZCBhcyBhIGZ1bGwtcGFnZSBpbWFnZSBvciBpdCdzCiAgICAg
Ly8gYW4gPGltZz4gYW5kIHRoZSBzZXR0aW5nIHRvIHJlc3BlY3QgaXQgZXZlcnl3aGVyZSBpcyBz
ZXQuCiAgICAgcmV0dXJuCi0jaWYgVVNFKENHKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgVVNF
KENBSVJPKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQogICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGJlIGVu
YWJsZWQgZm9yIHBvcnRzIHdoaWNoIGhvbm9yIHRoZSBvcmllbnRhdGlvbiBmbGFnIGluIHRoZWly
IGRyYXdpbmcgY29kZS4KICAgICAgICAgZG9jdW1lbnQoKS0+aXNJbWFnZURvY3VtZW50KCkgfHwK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2
aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQwLDcgKzE3NDAsNyBAQCBpbnQgUmVuZGVyVGV4dDo6cHJl
dmlvdXNPZmZzZXQoaW50IGN1cnJlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKE1BQ19PU19YKQorI2lmIFBMQVRG
T1JNKE1BQykKIAogI2RlZmluZSBIQU5HVUxfQ0hPU0VPTkdfU1RBUlQgKDB4MTEwMCkKICNkZWZp
bmUgSEFOR1VMX0NIT1NFT05HX0VORCAoMHgxMTVGKQpAQCAtMTc4Miw3ICsxNzgyLDcgQEAgaW5s
aW5lIGJvb2wgaXNSZWdpb25hbEluZGljYXRvcihVQ2hhcjMyIAogCiBpbnQgUmVuZGVyVGV4dDo6
cHJldmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGludCBjdXJyZW50KSBjb25zdAogewot
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKE1BQ19PU19YKQor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBBU1NFUlQobV90ZXh0KTsKICAgICBTdHJpbmdJbXBsJiB0
ZXh0ID0gKm1fdGV4dC5pbXBsKCk7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVD
aHJvbWl1bUFuZHJvaWQuaCIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCi0j
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNp
bmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvUGxhdGZv
cm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvYW5kcm9pZC9XZWJUaGVtZUVuZ2luZS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hy
b21pdW1BbmRyb2lkOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVy
VGhlbWVDaHJvbWl1bUFuZHJvaWQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJl
bmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBzdGF0aWMgUmVuZGVy
VGhlbWUqIHJlbmRlclRoZW1lID0gUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OmNyZWF0ZSgp
LmxlYWtSZWYoKTsKLSAgICByZXR1cm4gcmVuZGVyVGhlbWU7Ci19Ci0KLVJlbmRlclRoZW1lQ2hy
b21pdW1BbmRyb2lkOjp+UmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQoKQotewotfQotCi1Db2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQp
IGNvbnN0Ci17Ci0gICAgaWYgKGlzUnVubmluZ0xheW91dFRlc3QoKSAmJiBjc3NWYWx1ZUlkID09
IENTU1ZhbHVlQnV0dG9uZmFjZSkgewotICAgICAgICAvLyBNYXRjaCBDaHJvbWl1bSBMaW51eCcg
YnV0dG9uIGNvbG9yIGluIGxheW91dCB0ZXN0cy4KLSAgICAgICAgc3RhdGljIGNvbnN0IENvbG9y
IGxpbnV4QnV0dG9uR3JheUNvbG9yKDB4ZmZkZGRkZGQpOwotICAgICAgICByZXR1cm4gbGludXhC
dXR0b25HcmF5Q29sb3I7Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29s
b3IoY3NzVmFsdWVJZCk7Ci19Ci0KLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6
ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRp
YUNvbnRyb2xzQ2hyb21pdW1BbmRyb2lkVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNDaHJvbWl1bUFuZHJvaWRVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLVN0cmlu
ZyBSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCi17
Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjpleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCkgKwotICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUFuZHJvaWRVc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YodGhlbWVDaHJvbWl1bUFuZHJvaWRVc2VyQWdlbnRTdHlsZVNoZWV0
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OmFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAotewotICAgIGlmIChpc1J1bm5pbmdMYXlvdXRUZXN0KCkpIHsKLSAgICAgICAgLy8g
TWF0Y2ggQ2hyb21pdW0gTGludXggc3BpbiBidXR0b24gc3R5bGUgaW4gbGF5b3V0IHRlc3RzLgot
ICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGNvbmRpdGlvbmFsIGlmIGEg
ZnV0dXJlIEFuZHJvaWQgdGhlbWUgbWF0Y2hlcyB0aGlzLgotICAgICAgICBJbnRTaXplIHNpemUg
PSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2Vi
S2l0OjpXZWJUaGVtZUVuZ2luZTo6UGFydElubmVyU3BpbkJ1dHRvbik7Ci0KLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIH0KLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6cGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgcmV0dXJuIFJlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYU92ZXJs
YXlQbGF5QnV0dG9uLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNF
RF9QQVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1BbmRyb2lkOjptZW51TGlzdEFycm93UGFkZGluZygpIGNvbnN0Ci17Ci0g
ICAgLy8gV2UgY2Fubm90IHVzZSB0aGUgc2Nyb2xsYmFyIHRoaWNrbmVzcyBoZXJlLCBhcyBpdCdz
IHdpZHRoIGlzIDAgb24gQW5kcm9pZC4KLSAgICAvLyBJbnN0ZWFkLCB1c2UgdGhlIHdpZHRoIG9m
IHRoZSBzY3JvbGxiYXIgZG93biBhcnJvdy4KLSAgICBJbnRTaXplIHNjcm9sbGJhclNpemUgPSBX
ZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViS2l0
OjpXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdyk7Ci0gICAgcmV0dXJuIHNj
cm9sbGJhclNpemUud2lkdGgoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1B
bmRyb2lkLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkX2gKLSNkZWZpbmUg
UmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWRfaAotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJv
bWl1bURlZmF1bHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUaGVt
ZUNocm9taXVtQW5kcm9pZCA6IHB1YmxpYyBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOwotICAg
IHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKSBPVkVSUklERTsKLQotICAg
IHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbGlkSWQpIGNvbnN0IE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKLQotICAgIHZp
cnR1YWwgYm9vbCBkZWxlZ2F0ZXNNZW51TGlzdFJlbmRlcmluZygpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhT3ZlcmxheVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVk
aWFDb250cm9sc1N0eWxlU2hlZXQoKSBPVkVSUklERTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdCBPVkVSUklERQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21p
dW1BbmRyb2lkOjpkZWZhdWx0VGFwSGlnaGxpZ2h0Q29sb3I7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZUNocm9taXVt
QW5kcm9pZDo6ZGVmYXVsdEFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKLSAgICB9Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGludCBtZW51TGlzdEFycm93UGFkZGluZygpIGNvbnN0
IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1B
bmRyb2lkKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGRlZmF1bHRUYXBIaWdobGlnaHRD
b2xvciA9IDB4NjYzM2I1ZTU7Ci0gICAgc3RhdGljIGNvbnN0IFJHQkEzMiBkZWZhdWx0QWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gMHg2NjMzYjVlNTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUNvbW1vbi5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oIgotCi0jaW5jbHVkZSAiSW5wdXRUeXBlTmFtZXMuaCIK
LSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uOjpzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKQotewotICAgIHJldHVybiB0eXBlID09IElucHV0VHlwZU5hbWVzOjp0ZXh0
KCkgfHwgdHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6c2VhcmNoKCkgfHwgdHlwZSA9PSBJbnB1dFR5
cGVOYW1lczo6dXJsKCkKLSAgICAgICAgfHwgdHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6dGVsZXBo
b25lKCkgfHwgdHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6ZW1haWwoKSB8fCB0eXBlID09IElucHV0
VHlwZU5hbWVzOjpudW1iZXIoKQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgICAg
ICB8fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjpjb2xvcigpCi0jZW5kaWYKLSNpZiBFTkFCTEUo
Q0FMRU5EQVJfUElDS0VSKQotICAgICAgICB8fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjpkYXRl
KCkKLSNlbmRpZgotICAgICAgICB8fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjpkYXRldGltZSgp
Ci0gICAgICAgIHx8IHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6OmRhdGV0aW1lbG9jYWwoKQotICAg
ICAgICB8fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjptb250aCgpCi0gICAgICAgIHx8IHR5cGUg
PT0gSW5wdXRUeXBlTmFtZXM6OndlZWsoKQotICAgICAgICB8fCB0eXBlID09IElucHV0VHlwZU5h
bWVzOjp0aW1lKCkKLSAgICAgICAgfHwgdHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6cmFuZ2UoKTsK
LX0KLQotI2lmIEVOQUJMRShJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUkpCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1Db21tb246OnN1cHBvcnRzQ2FsZW5kYXJQaWNrZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKQotewotICAgIHJldHVybiB0eXBlID09IElucHV0VHlwZU5hbWVzOjpkYXRlKCkK
LSAgICAgICAgfHwgdHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6ZGF0ZXRpbWUoKQotICAgICAgICB8
fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjpkYXRldGltZWxvY2FsKCkKLSAgICAgICAgfHwgdHlw
ZSA9PSBJbnB1dFR5cGVOYW1lczo6bW9udGgoKQotICAgICAgICB8fCB0eXBlID09IElucHV0VHlw
ZU5hbWVzOjp3ZWVrKCk7Ci19Ci0jZW5kaWYKLQotTGF5b3V0VW5pdCBSZW5kZXJUaGVtZUNocm9t
aXVtQ29tbW9uOjpzbGlkZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKQotewotICAgIHJldHVybiA1
OwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtQ29tbW9uLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21p
dW1Db21tb25faAotI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uX2gKLQotI2luY2x1
ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKTsKLSNpZiBFTkFCTEUoSU5QVVRfTVVMVElQTEVfRklFTERTX1VJKQotICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzQ2FsZW5kYXJQaWNrZXIoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlKTsKLSNlbmRpZgotICAgIHN0YXRpYyBMYXlvdXRVbml0IHNsaWRlclRpY2tTbmFwcGluZ1Ro
cmVzaG9sZCgpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1v
bl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bURl
ZmF1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtRGVmYXVsdC5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBHb29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVD
aHJvbWl1bURlZmF1bHQuaCIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5k
ZXJQcm9ncmVzcy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRl
IDxwdWJsaWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUmVjdC5oPgotI2luY2x1
ZGUgPHB1YmxpYy9kZWZhdWx0L1dlYlRoZW1lRW5naW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdW5zaWduZWQgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6Om1fYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yID0KLSAgICAweGZmMWU5MGZmOwotdW5zaWduZWQgUmVuZGVyVGhl
bWVDaHJvbWl1bURlZmF1bHQ6Om1fYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0KLSAg
ICBDb2xvcjo6YmxhY2s7Ci11bnNpZ25lZCBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6bV9p
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9Ci0gICAgMHhmZmM4YzhjODsKLXVuc2ln
bmVkIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjptX2luYWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yID0KLSAgICAweGZmMzIzMjMyOwotCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1
bURlZmF1bHQ6Om1fY2FyZXRCbGlua0ludGVydmFsOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVmYXVsdEJ1dHRvbkJhY2tncm91bmRDb2xvciA9IDB4ZmZkZGRkZGQ7Ci0KLXN0YXRpYyBXZWJL
aXQ6OldlYlRoZW1lRW5naW5lOjpTdGF0ZSBnZXRXZWJUaGVtZVN0YXRlKGNvbnN0IFJlbmRlclRo
ZW1lKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQotewotICAgIGlmICghdGhlbWUtPmlz
RW5hYmxlZChvKSkKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlN0YXRl
RGlzYWJsZWQ7Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQobykpCi0gICAgICAgIHJldHVybiBX
ZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7Ci0gICAgaWYgKHRoZW1lLT5pc0hv
dmVyZWQobykpCi0gICAgICAgIHJldHVybiBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTdGF0ZUhv
dmVyOwotCi0gICAgcmV0dXJuIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9ybWFsOwot
fQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6
Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lQ2hyb21pdW1E
ZWZhdWx0KCkpOwotfQotCi0vLyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlIGZvciBBbmRyb2lk
IGlzIGRlZmluZWQgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQuY3BwLgotI2lmICFPUyhB
TkRST0lEKQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFn
ZShQYWdlKiBwYWdlKQotewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVt
ZUNocm9taXVtRGVmYXVsdDo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiBydDsKLX0K
LSNlbmRpZgotCi1SZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6UmVuZGVyVGhlbWVDaHJvbWl1
bURlZmF1bHQoKQotewotICAgIG1fY2FyZXRCbGlua0ludGVydmFsID0gUmVuZGVyVGhlbWU6OmNh
cmV0QmxpbmtJbnRlcnZhbCgpOwotfQotCi1SZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6flJl
bmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0KCkKLXsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bURlZmF1bHQ6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAotewotICAgIHN0
YXRpYyBjb25zdCBDb2xvciBkZWZhdWx0QnV0dG9uR3JheUNvbG9yKDB4ZmZkZGRkZGQpOwotICAg
IHN0YXRpYyBjb25zdCBDb2xvciBkZWZhdWx0TWVudUNvbG9yKDB4ZmZmN2Y3ZjcpOwotCi0gICAg
aWYgKGNzc1ZhbHVlSWQgPT0gQ1NTVmFsdWVCdXR0b25mYWNlKQotICAgICAgICByZXR1cm4gZGVm
YXVsdEJ1dHRvbkdyYXlDb2xvcjsKLSAgICBpZiAoY3NzVmFsdWVJZCA9PSBDU1NWYWx1ZU1lbnUp
Ci0gICAgICAgIHJldHVybiBkZWZhdWx0TWVudUNvbG9yOwotICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci19Ci0KLVN0cmluZyBSZW5kZXJUaGVtZUNocm9t
aXVtRGVmYXVsdDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCi17Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNo
ZWV0KCkgKwotICAgICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUxpbnV4VXNlckFnZW50U3R5
bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsK
LSNlbHNlCi0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRT
dHlsZVNoZWV0KCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVs
dDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewot
ICAgIHJldHVybiBpc0VuYWJsZWQobyk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1E
ZWZhdWx0OjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gQ29sb3IoMHgyOCwgMHgyOCwgMHgyOCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1EZWZhdWx0OjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3I6OmJsYWNrOwotfQotCi1Db2xvciBSZW5kZXJU
aGVtZUNocm9taXVtRGVmYXVsdDo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7Ci19Ci0K
LUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigweDMyLCAweDMy
LCAweDMyKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hy
b21pdW1EZWZhdWx0OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsK
LX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZh
dWx0OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKLX0KLQotI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotSW50U2l6ZSBSZW5kZXJUaGVtZUNocm9taXVtRGVm
YXVsdDo6c2xpZGVyVGlja1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKDEsIDYp
OwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnNsaWRlclRpY2tPZmZzZXRG
cm9tVHJhY2tDZW50ZXIoKSBjb25zdAotewotICAgIHJldHVybiAtMTY7Ci19Ci0jZW5kaWYKLQot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBJbnRTaXpl
IHNpemUgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNp
emUoV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6UGFydFNsaWRlclRodW1iKTsKLQotICAgIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgfSBl
bHNlIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7
Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
LSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwot
ICAgIH0gZWxzZQotICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKHN0eWxlLCBlbGVtZW50KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
RGVmYXVsdDo6c3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjpzZXRDYXJldEJsaW5rSW50
ZXJ2YWwoZG91YmxlIGludGVydmFsKQotewotICAgIG1fY2FyZXRCbGlua0ludGVydmFsID0gaW50
ZXJ2YWw7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6Y2FyZXRCbGlu
a0ludGVydmFsSW50ZXJuYWwoKSBjb25zdAotewotICAgIHJldHVybiBtX2NhcmV0QmxpbmtJbnRl
cnZhbDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6c2V0U2VsZWN0aW9u
Q29sb3JzKAotICAgIHVuc2lnbmVkIGFjdGl2ZUJhY2tncm91bmRDb2xvciwKLSAgICB1bnNpZ25l
ZCBhY3RpdmVGb3JlZ3JvdW5kQ29sb3IsCi0gICAgdW5zaWduZWQgaW5hY3RpdmVCYWNrZ3JvdW5k
Q29sb3IsCi0gICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpCi17Ci0gICAgbV9h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBhY3RpdmVCYWNrZ3JvdW5kQ29sb3I7Ci0g
ICAgbV9hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBhY3RpdmVGb3JlZ3JvdW5kQ29s
b3I7Ci0gICAgbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IGluYWN0aXZlQmFj
a2dyb3VuZENvbG9yOwotICAgIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBp
bmFjdGl2ZUZvcmVncm91bmRDb2xvcjsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtRGVm
YXVsdDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpFeHRy
YVBhcmFtcyBleHRyYVBhcmFtczsKLSAgICBXZWJLaXQ6OldlYkNhbnZhcyogY2FudmFzID0gaS5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgZXh0cmFQYXJhbXMuYnV0
dG9uLmNoZWNrZWQgPSBpc0NoZWNrZWQobyk7Ci0gICAgZXh0cmFQYXJhbXMuYnV0dG9uLmluZGV0
ZXJtaW5hdGUgPSBpc0luZGV0ZXJtaW5hdGUobyk7Ci0KLSAgICBXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50KGNhbnZhcywgV2ViS2l0OjpXZWJUaGVtZUVu
Z2luZTo6UGFydENoZWNrYm94LCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCBXZWJLaXQ6Oldl
YlJlY3QocmVjdCksICZleHRyYVBhcmFtcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3Ro
IHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgc2l6ZSA9IFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6ZShXZWJLaXQ6OldlYlRoZW1lRW5naW5l
OjpQYXJ0Q2hlY2tib3gpOwotICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIFdlYktp
dDo6V2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOwotICAgIFdlYktpdDo6
V2ViQ2FudmFzKiBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KTsKLSAgICBleHRyYVBhcmFtcy5idXR0b24uY2hlY2tlZCA9IGlzQ2hlY2tlZChvKTsKLQotICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnQoY2FudmFz
LCBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpQYXJ0UmFkaW8sIGdldFdlYlRoZW1lU3RhdGUodGhp
cywgbyksIFdlYktpdDo6V2ViUmVjdChyZWN0KSwgJmV4dHJhUGFyYW1zKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnNldFJhZGlvU2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAg
ICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBzaXplID0gV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2luZSgpLT5nZXRTaXplKFdlYktpdDo6
V2ViVGhlbWVFbmdpbmU6OlBhcnRSYWRpbyk7Ci0gICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6
ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOwot
ICAgIFdlYktpdDo6V2ViQ2FudmFzKiBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKTsKLSAgICBleHRyYVBhcmFtcy5idXR0b24uaXNEZWZhdWx0ID0gaXNEZWZh
dWx0KG8pOwotICAgIGV4dHJhUGFyYW1zLmJ1dHRvbi5oYXNCb3JkZXIgPSB0cnVlOwotICAgIGV4
dHJhUGFyYW1zLmJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3IgPSBkZWZhdWx0QnV0dG9uQmFja2dyb3Vu
ZENvbG9yOwotICAgIGlmIChvLT5oYXNCYWNrZ3JvdW5kKCkpCi0gICAgICAgIGV4dHJhUGFyYW1z
LmJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3IgPSBvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpOwotCi0gICAgV2ViS2l0OjpQbGF0
Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludChjYW52YXMsIFdlYktpdDo6V2Vi
VGhlbWVFbmdpbmU6OlBhcnRCdXR0b24sIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIFdlYktp
dDo6V2ViUmVjdChyZWN0KSwgJmV4dHJhUGFyYW1zKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IC8vIFdlYlRoZW1lRW5naW5lIGRvZXMgbm90IGhhbmRsZSBib3JkZXIgcm91bmRlZCBjb3JuZXIg
YW5kIGJhY2tncm91bmQgaW1hZ2UKLSAgICAvLyBzbyByZXR1cm4gdHJ1ZSB0byBkcmF3IENTUyBi
b3JkZXIgYW5kIGJhY2tncm91bmQuCi0gICAgaWYgKG8tPnN0eWxlKCktPmhhc0JvcmRlclJhZGl1
cygpIHx8IG8tPnN0eWxlKCktPmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7
Ci0KLSAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsK
LSAgICBleHRyYVBhcmFtcy50ZXh0RmllbGQuaXNUZXh0QXJlYSA9IHBhcnQgPT0gVGV4dEFyZWFQ
YXJ0OwotICAgIGV4dHJhUGFyYW1zLnRleHRGaWVsZC5pc0xpc3Rib3ggPSBwYXJ0ID09IExpc3Ri
b3hQYXJ0OwotCi0gICAgV2ViS2l0OjpXZWJDYW52YXMqIGNhbnZhcyA9IGkuY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotCi0gICAgLy8gRmFsbGJhY2sgdG8gd2hpdGUgaWYg
dGhlIHNwZWNpZmllZCBjb2xvciBvYmplY3QgaXMgaW52YWxpZC4KLSAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IoQ29sb3I6OndoaXRlKTsKLSAgICBpZiAoby0+c3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkpCi0gICAgICAg
IGJhY2tncm91bmRDb2xvciA9IG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgZXh0cmFQYXJhbXMudGV4dEZpZWxkLmJhY2tn
cm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvci5yZ2IoKTsKLQotICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnQoY2FudmFzLCBXZWJLaXQ6OldlYlRo
ZW1lRW5naW5lOjpQYXJ0VGV4dEZpZWxkLCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCBXZWJL
aXQ6OldlYlJlY3QocmVjdCksICZleHRyYVBhcmFtcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0OjpwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghby0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgaW50
IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7Ci0gICAgY29uc3QgaW50IG1pZGRsZSA9
IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7Ci0KLSAgICBXZWJLaXQ6OldlYlRoZW1lRW5n
aW5lOjpFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKLSAgICBleHRyYVBhcmFtcy5tZW51TGlzdC5h
cnJvd1ggPSAoby0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSA/IHJlY3QueCgpICsgNyA6
IHJpZ2h0IC0gMTM7Ci0gICAgZXh0cmFQYXJhbXMubWVudUxpc3QuYXJyb3dZID0gbWlkZGxlOwot
ICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgLy8gTWF0Y2gg
Q2hyb21pdW0gV2luIGJlaGF2aW91ciBvZiBzaG93aW5nIGFsbCBib3JkZXJzIGlmIGFueSBhcmUg
c2hvd24uCi0gICAgZXh0cmFQYXJhbXMubWVudUxpc3QuaGFzQm9yZGVyID0gYm94LT5ib3JkZXJS
aWdodCgpIHx8IGJveC0+Ym9yZGVyTGVmdCgpIHx8IGJveC0+Ym9yZGVyVG9wKCkgfHwgYm94LT5i
b3JkZXJCb3R0b20oKTsKLSAgICBleHRyYVBhcmFtcy5tZW51TGlzdC5oYXNCb3JkZXJSYWRpdXMg
PSBvLT5zdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKTsKLSAgICAvLyBGYWxsYmFjayB0byB0cmFu
c3BhcmVudCBpZiB0aGUgc3BlY2lmaWVkIGNvbG9yIG9iamVjdCBpcyBpbnZhbGlkLgotICAgIGV4
dHJhUGFyYW1zLm1lbnVMaXN0LmJhY2tncm91bmRDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsK
LSAgICBpZiAoby0+aGFzQmFja2dyb3VuZCgpKQotICAgICAgICBleHRyYVBhcmFtcy5tZW51TGlz
dC5iYWNrZ3JvdW5kQ29sb3IgPSBvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpOwotCi0gICAgV2ViS2l0OjpXZWJDYW52YXMq
IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotCi0gICAg
V2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludChjYW52YXMs
IFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlBhcnRNZW51TGlzdCwgZ2V0V2ViVGhlbWVTdGF0ZSh0
aGlzLCBvKSwgV2ViS2l0OjpXZWJSZWN0KHJlY3QpLCAmZXh0cmFQYXJhbXMpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtRGVmYXVsdDo6cGFpbnRTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyBleHRy
YVBhcmFtczsKLSAgICBXZWJLaXQ6OldlYkNhbnZhcyogY2FudmFzID0gaS5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgZXh0cmFQYXJhbXMuc2xpZGVyLnZlcnRpY2Fs
ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydDsKLQotICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnQoY2FudmFz
LCBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpQYXJ0U2xpZGVyVHJhY2ssIGdldFdlYlRoZW1lU3Rh
dGUodGhpcywgbyksIFdlYktpdDo6V2ViUmVjdChyZWN0KSwgJmV4dHJhUGFyYW1zKTsKLQotI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIHBhaW50U2xpZGVyVGlja3MobywgaSwgcmVj
dCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtRGVmYXVsdDo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBXZWJLaXQ6OldlYlRoZW1l
RW5naW5lOjpFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKLSAgICBXZWJLaXQ6OldlYkNhbnZhcyog
Y2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgZXh0
cmFQYXJhbXMuc2xpZGVyLnZlcnRpY2FsID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0OwotICAgIGV4dHJhUGFyYW1zLnNsaWRlci5pbkRyYWcgPSBp
c1ByZXNzZWQobyk7Ci0KLSAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPnRoZW1lRW5n
aW5lKCktPnBhaW50KGNhbnZhcywgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6UGFydFNsaWRlclRo
dW1iLCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCBXZWJLaXQ6OldlYlJlY3QocmVjdCksICZl
eHRyYVBhcmFtcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1EZWZhdWx0OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNpemUg
PSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2Vi
S2l0OjpXZWJUaGVtZUVuZ2luZTo6UGFydElubmVyU3BpbkJ1dHRvbik7Ci0KLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWlu
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtRGVmYXVsdDo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgV2ViS2l0OjpX
ZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMgZXh0cmFQYXJhbXM7Ci0gICAgV2ViS2l0OjpXZWJD
YW52YXMqIGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwot
ICAgIGV4dHJhUGFyYW1zLmlubmVyU3Bpbi5zcGluVXAgPSAoY29udHJvbFN0YXRlc0ZvclJlbmRl
cmVyKG8pICYgU3BpblVwU3RhdGUpOwotICAgIGV4dHJhUGFyYW1zLmlubmVyU3Bpbi5yZWFkT25s
eSA9IGlzUmVhZE9ubHlDb250cm9sKG8pOwotCi0gICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludChjYW52YXMsIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6
OlBhcnRJbm5lclNwaW5CdXR0b24sIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIFdlYktpdDo6
V2ViUmVjdChyZWN0KSwgJmV4dHJhUGFyYW1zKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtRGVm
YXVsdDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3Mg
PSB0b1JlbmRlclByb2dyZXNzKG8pOwotICAgIEludFJlY3QgdmFsdWVSZWN0ID0gcHJvZ3Jlc3NW
YWx1ZVJlY3RGb3IocmVuZGVyUHJvZ3Jlc3MsIHJlY3QpOwotCi0gICAgV2ViS2l0OjpXZWJUaGVt
ZUVuZ2luZTo6RXh0cmFQYXJhbXMgZXh0cmFQYXJhbXM7Ci0gICAgZXh0cmFQYXJhbXMucHJvZ3Jl
c3NCYXIuZGV0ZXJtaW5hdGUgPSByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpOwotICAg
IGV4dHJhUGFyYW1zLnByb2dyZXNzQmFyLnZhbHVlUmVjdFggPSB2YWx1ZVJlY3QueCgpOwotICAg
IGV4dHJhUGFyYW1zLnByb2dyZXNzQmFyLnZhbHVlUmVjdFkgPSB2YWx1ZVJlY3QueSgpOwotICAg
IGV4dHJhUGFyYW1zLnByb2dyZXNzQmFyLnZhbHVlUmVjdFdpZHRoID0gdmFsdWVSZWN0LndpZHRo
KCk7Ci0gICAgZXh0cmFQYXJhbXMucHJvZ3Jlc3NCYXIudmFsdWVSZWN0SGVpZ2h0ID0gdmFsdWVS
ZWN0LmhlaWdodCgpOwotCi0gICAgRGlyZWN0aW9uRmxpcHBpbmdTY29wZSBzY29wZShvLCBpLCBy
ZWN0KTsKLSAgICBXZWJLaXQ6OldlYkNhbnZhcyogY2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50
aGVtZUVuZ2luZSgpLT5wYWludChjYW52YXMsIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlBhcnRQ
cm9ncmVzc0JhciwgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvKSwgV2ViS2l0OjpXZWJSZWN0KHJl
Y3QpLCAmZXh0cmFQYXJhbXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQ6OnNob3VsZE9wZW5QaWNrZXJXaXRoRjRLZXko
KSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1
bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bURlZmF1bHQuaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBHb29nbGUsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUmVu
ZGVyVGhlbWVDaHJvbWl1bURlZmF1bHRfaAotI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtRGVm
YXVsdF9oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0IDogcHVibGlj
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpOwotCi0gICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFs
aWRJZCkgY29uc3Q7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hh
bmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICB2aXJ0
dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0KLSAgICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKLSAgICB2aXJ0dWFsIENvbG9yIGFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OwotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRT
aXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2xp
ZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIHNldENhcmV0QmxpbmtJbnRlcnZhbChkb3Vi
bGUpOwotICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5U3BhY2VP
clJldHVybigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KLQotI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZE9wZW5QaWNrZXJXaXRoRjRLZXkoKSBjb25zdCBPVkVSUklE
RTsKLQotICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGlvbkNvbG9ycyh1bnNpZ25lZCBhY3RpdmVC
YWNrZ3JvdW5kQ29sb3IsIHVuc2lnbmVkIGFjdGl2ZUZvcmVncm91bmRDb2xvciwgdW5zaWduZWQg
aW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IsIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9y
KTsKLQotcHJvdGVjdGVkOgotICAgIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0KCk7Ci0gICAg
dmlydHVhbCB+UmVuZGVyVGhlbWVDaHJvbWl1bURlZmF1bHQoKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBv
cnRlZCBhdCBhbGwuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29u
c3Q7Ci0KLSAgICBzdGF0aWMgZG91YmxlIG1fY2FyZXRCbGlua0ludGVydmFsOwotCi0gICAgc3Rh
dGljIHVuc2lnbmVkIG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwotICAgIHN0YXRp
YyB1bnNpZ25lZCBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKLSAgICBzdGF0aWMg
dW5zaWduZWQgbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKLSAgICBzdGF0aWMg
dW5zaWduZWQgbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1EZWZhdWx0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9u
dFByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgiCi0K
LSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUt
d2lkdGggZm9udCBzaXplLiBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250Ci0vLyBzaXpl
IGZvciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVu
IHNocmluaykgZm9yCi0vLyBmb3JtIGNvbnRyb2wgZm9udHMuCi0vLyBzdGF0aWMKLWZsb2F0IFJl
bmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNfZGVmYXVsdEZvbnRTaXplID0gMTYuMDsK
LQotLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQg
b24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCi0v
LyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0
KERFRkFVTFRfR1VJX0ZPTlQpLAotLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCi0vLyAt
U2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KLS8vCi0vLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3
aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KLS8v
IElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkg
YXQgY2VydGFpbiBwaXhlbAotLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1
c3QgdXNlIEFyaWFsLgotY29uc3QgU3RyaW5nJiBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyOjpkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJBcmlhbCIpKSk7Ci0gICAgcmV0dXJuIGZvbnRGYWNl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgJ
KHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtRm9udFByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJfaAotI2Rl
ZmluZSBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyX2gKLQotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotCi1jbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlw
dGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQpOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0R1VJRm9udCgpOwot
Ci0gICAgc3RhdGljIGZsb2F0IHNfZGVmYXVsdEZvbnRTaXplOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcAkocmV2aXNpb24gMTQ3NzMy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJv
dmlkZXJMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlci5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgotCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIHN0
YXRpYwotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXREZWZhdWx0Rm9u
dFNpemUoaW50IGZvbnRTaXplKQotewotICAgIHNfZGVmYXVsdEZvbnRTaXplID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGZvbnRTaXplKTsKLX0KLQotLy8gc3RhdGljCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXI6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCi17Ci0gICAgZmxvYXQgZm9udFNpemUgPSBzX2RlZmF1bHRGb250
U2l6ZTsKLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1p
bmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVy
PyBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuIE5vdGUgdGhhdCB3ZQotICAgICAgICAv
LyBhcmUgYXNzdW1pbmcgYSA5NmRwaSBzY3JlZW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHRoYXQg
d2UgdXNlIG9uCi0gICAgICAgIC8vIFdpbmRvd3MuCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwaXhl
bHNQZXJJbmNoID0gOTYuMGY7Ci0gICAgICAgIGZvbnRTaXplIC09ICgyLjBmIC8gcG9pbnRzUGVy
SW5jaCkgKiBwaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmb250
RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQoKSk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJdGFsaWMoZmFsc2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXJXaW4uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaCIKLQot
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCi0KLSNpbmNs
dWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNkZWZp
bmUgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihzdHJ1Y3ROYW1lLCBt
ZW1iZXIpIFwKLSAgICBvZmZzZXRvZihzdHJ1Y3ROYW1lLCBtZW1iZXIpICsgXAotICAgIChzaXpl
b2Ygc3RhdGljX2Nhc3Q8c3RydWN0TmFtZSo+KDApLT5tZW1iZXIpCi0jZGVmaW5lIE5PTkNMSUVO
VE1FVFJJQ1NfU0laRV9QUkVfVklTVEEgXAotICAgIFNJWkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJ
RURfTEFTVF9NRU1CRVIoTk9OQ0xJRU5UTUVUUklDUywgbGZNZXNzYWdlRm9udCkKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgRm9udERlc2NyaXB0aW9uJiBzbWFsbFN5c3RlbUZvbnQo
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBmb250LCAoKSk7
Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLXN0YXRpYyBGb250RGVzY3JpcHRpb24mIG1lbnVGb250
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgZm9udCwgKCkp
OwotICAgIHJldHVybiBmb250OwotfQotCi1zdGF0aWMgRm9udERlc2NyaXB0aW9uJiBsYWJlbEZv
bnQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBmb250LCAo
KSk7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLS8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVs
cy4gT25lIHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KLXN0YXRpYyBmbG9hdCBwb2ludHNUb1Bp
eGVscyhmbG9hdCBwb2ludHMpCi17Ci0gICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAw
LjBmOwotICAgIGlmICghcGl4ZWxzUGVySW5jaCkgewotICAgICAgICBIV25kREMgaGRjKDApOyAv
LyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8KLSAgICAgICAgaWYg
KGhkYykgLy8gQ2FuIHRoaXMgZXZlciBhY3R1YWxseSBiZSAwPwotICAgICAgICAgICAgcGl4ZWxz
UGVySW5jaCA9IEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgcmV0dXJuIHBvaW50cyAvIHBv
aW50c1BlckluY2ggKiBwaXhlbHNQZXJJbmNoOwotfQotCi1zdGF0aWMgdm9pZCBnZXROb25DbGll
bnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCi17Ci0gICAgc3RhdGljIFVJTlQg
c2l6ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPwotICAgICAgICBzaXpl
b2YoTk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBOwot
ICAgIG1ldHJpY3MtPmNiU2l6ZSA9IHNpemU7Ci0gICAgYm9vbCBzdWNjZXNzID0gISFTeXN0ZW1Q
YXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZSwgbWV0cmljcywgMCk7
Ci0gICAgQVNTRVJUKHN1Y2Nlc3MpOwotfQotCi0vLyBSZXR1cm4gdGhlIGhlaWdodCBvZiBzeXN0
ZW0gZm9udCB8Zm9udHwgaW4gcGl4ZWxzLiBXZSB1c2UgdGhpcyBzaXplIGJ5Ci0vLyBkZWZhdWx0
IGZvciBzb21lIG5vbi1mb3JtLWNvbnRyb2wgZWxlbWVudHMuCi1zdGF0aWMgZmxvYXQgc3lzdGVt
Rm9udFNpemUoY29uc3QgTE9HRk9OVCYgZm9udCkKLXsKLSAgICBmbG9hdCBzaXplID0gLWZvbnQu
bGZIZWlnaHQ7Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIEhGT05UIGhGb250ID0gQ3Jl
YXRlRm9udEluZGlyZWN0KCZmb250KTsKLSAgICAgICAgaWYgKGhGb250KSB7Ci0gICAgICAgICAg
ICBIV25kREMgaGRjKDApOyAvLyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdo
dCBEQz8KLSAgICAgICAgICAgIGlmIChoZGMpIHsKLSAgICAgICAgICAgICAgICBIR0RJT0JKIGhP
YmplY3QgPSBTZWxlY3RPYmplY3QoaGRjLCBoRm9udCk7Ci0gICAgICAgICAgICAgICAgVEVYVE1F
VFJJQyB0bTsKLSAgICAgICAgICAgICAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0bSk7Ci0gICAg
ICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgaE9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
c2l6ZSA9IHRtLnRtQXNjZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRGVsZXRlT2Jq
ZWN0KGhGb250KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSAiY29kZXBhZ2UgOTM2
IiBiaXQgaGVyZSBpcyBmcm9tIEdlY2tvOyBhcHBhcmVudGx5IHRoaXMgaGVscHMgbWFrZQotICAg
IC8vIGZvbnRzIG1vcmUgbGVnaWJsZSBpbiBTaW1wbGlmaWVkIENoaW5lc2Ugd2hlcmUgdGhlIGRl
ZmF1bHQgZm9udCBzaXplIGlzCi0gICAgLy8gdG9vIHNtYWxsLgotICAgIC8vCi0gICAgLy8gRklY
TUU6IGh0dHA6Ly9iLzExMTk4ODMgU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yICJzbWFsbCBj
YXB0aW9uIiwKLSAgICAvLyAibWVudSIsIGFuZCAic3RhdHVzIGJhciIgb2JqZWN0cywgSSdtIG5v
dCBzdXJlIGhvdyBtdWNoIHRoaXMgZXZlbgotICAgIC8vIG1hdHRlcnMuIFBsdXMgdGhlIEdlY2tv
IHBhdGNoIHdlbnQgaW4gYmFjayBpbiAyMDAyLCBhbmQgbWF5YmUgdGhpcwotICAgIC8vIGlzbid0
IGV2ZW4gcmVsZXZhbnQgYW55bW9yZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgdGhp
cyBzaG91bGQKLSAgICAvLyBiZSByZW1vdmVkLCBvciBwZXJoYXBzIGJyb2FkZW5lZCB0byBiZSAi
YW55IENKSyBsb2NhbGUiLgotICAgIC8vCi0gICAgcmV0dXJuICgoc2l6ZSA8IDEyLjBmKSAmJiAo
R2V0QUNQKCkgPT0gOTM2KSkgPyAxMi4wZiA6IHNpemU7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQotewotICAgIC8vIFRoaXMgbG9naWMgb3dl
cyBtdWNoIHRvIFJlbmRlclRoZW1lU2FmYXJpLmNwcC4KLSAgICBGb250RGVzY3JpcHRpb24qIGNh
Y2hlZERlc2MgPSAwOwotICAgIEF0b21pY1N0cmluZyBmYWNlTmFtZTsKLSAgICBmbG9hdCBmb250
U2l6ZSA9IDA7Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlU21hbGxD
YXB0aW9uOgotICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsU3lzdGVtRm9udCgpOwotICAgICAg
ICBpZiAoIXNtYWxsU3lzdGVtRm9udCgpLmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAg
IE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJp
Y3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmlj
cy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZTbUNhcHRpb25G
b250LmxmRmFjZU5hbWUpKTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUo
bWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTVmFsdWVNZW51OgotICAgICAgICBjYWNoZWREZXNjID0gJm1lbnVGb250KCk7Ci0g
ICAgICAgIGlmICghbWVudUZvbnQoKS5pc0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBO
T05DTElFTlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNz
KCZtZXRyaWNzKTsKLSAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3Mu
bGZNZW51Rm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5h
bWUpKTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZk1l
bnVGb250KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3Rh
dHVzQmFyOgotICAgICAgICBjYWNoZWREZXNjID0gJmxhYmVsRm9udCgpOwotICAgICAgICBpZiAo
IWxhYmVsRm9udCgpLmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAgIE5PTkNMSUVOVE1F
VFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3Mp
OwotICAgICAgICAgICAgZmFjZU5hbWUgPSBtZXRyaWNzLmxmU3RhdHVzRm9udC5sZkZhY2VOYW1l
OwotICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmU3RhdHVz
Rm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdV
SUZvbnQoKTsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdz
IHdoYXQgR2Vja28gZG9lcy4KLSAgICAgICAgZm9udFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZSAt
IHBvaW50c1RvUGl4ZWxzKDIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250KCk7Ci0gICAgICAgIGZvbnRTaXplID0gc19kZWZh
dWx0Rm9udFNpemU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghY2FjaGVkRGVz
YykKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZmb250RGVzY3JpcHRpb247Ci0KLSAgICBpZiAoZm9u
dFNpemUpIHsKLSAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFj
ZU5hbWUpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAg
ICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFt
aWx5KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7Ci0g
ICAgICAgIGNhY2hlZERlc2MtPnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICAgICAg
Y2FjaGVkRGVzYy0+c2V0SXRhbGljKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9udERlc2NyaXB0aW9u
ID0gKmNhY2hlZERlc2M7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQotewotICAgIHNf
ZGVmYXVsdEZvbnRTaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRTaXplKTsKLQotICAgIC8v
IFJlc2V0IGNhY2hlZCBmb250cy4KLSAgICBzbWFsbFN5c3RlbUZvbnQoKSA9IG1lbnVGb250KCkg
PSBsYWJlbEZvbnQoKSA9IEZvbnREZXNjcmlwdGlvbigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTWFjLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODUgKzAs
MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtTWFjX2gKLSNkZWZpbmUgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hY19oCi0KLSNpbXBvcnQgIlJlbmRlclRoZW1lQ2hyb21pdW1Db21t
b24uaCIKLSNpbXBvcnQgIlJlbmRlclRoZW1lTWFjU2hhcmVkLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBSZW5kZXJUaGVt
ZU1hY1NoYXJlZCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IGNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUxpc3RVSShjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpIGNvbnN0IE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0jaWYgRU5B
QkxFKFZJREVPKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0j
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRnVsbFNj
cmVlblN0eWxlU2hlZXQoKTsKLSNlbmRpZgotICAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9t
TXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9y
KENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHVz
ZXNWZXJ0aWNhbFZvbHVtZVNsaWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZmxvYXQgdGltZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1
cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZm9y
bWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1
cmF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIE5TVmlldyogZG9jdW1lbnRWaWV3Rm9yKFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHls
ZSopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0Q29s
b3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0ZXh0Q29sb3I7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUo
TlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFE
ZWZhdWx0U3R5bGVTaGVldCgpOwotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBzbGlkZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKSBjb25zdCBPVkVS
UklERTsKLSNlbmRpZgotI2lmIEVOQUJMRShJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUkpCi0gICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQ2FsZW5kYXJQaWNrZXIoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlKSBjb25zdCBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93
UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IE9WRVJSSURFOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2ltcG9ydCAiTGF5b3V0VGVzdFN1cHBvcnQu
aCIKLSNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAiUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYy5oIgotI2ltcG9ydCAiUGFpbnRJbmZvLmgiCi0jaW1wb3J0ICJS
ZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKLSNpbXBvcnQgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW1wb3J0IDxDYXJi
b24vQ2FyYm9uLmg+Ci0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgotI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8bWF0aC5oPgot
Ci1AaW50ZXJmYWNlIFJUQ01GbGlwcGVkVmlldyA6IE5TVmlldwote30KLQotLSAoQk9PTClpc0Zs
aXBwZWQ7Ci0tIChOU1RleHQgKiljdXJyZW50RWRpdG9yOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBSVENNRmxpcHBlZFZpZXcKLQotLSAoQk9PTClpc0ZsaXBwZWQgewotICAgIHJldHVybiBb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdOwotfQotCi0tIChO
U1RleHQgKiljdXJyZW50RWRpdG9yIHsKLSAgICByZXR1cm4gbmlsOwotfQotCi1AZW5kCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotTlNWaWV3KiBGbGlwcGVkVmlldygpCi17Ci0gICAgc3RhdGlj
IE5TVmlldyogdmlldyA9IFtbUlRDTUZsaXBwZWRWaWV3IGFsbG9jXSBpbml0XTsKLSAgICByZXR1
cm4gdmlldzsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1l
Rm9yUGFnZShQYWdlKikKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiBydDsKLX0KLQot
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lQ2hyb21pdW1NYWMpOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN1cHBvcnRzRGF0YUxpc3RVSShjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21p
dW1Db21tb246OnN1cHBvcnRzRGF0YUxpc3RVSSh0eXBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlzUnVubmluZ0xheW91dFRlc3QoKTsKLX0KLQotTlNWaWV3KiBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gRmxpcHBlZFZpZXcoKTsKLX0KLQotY29uc3QgaW50IGF1dG9maWxsUG9wdXBIb3Jpem9u
dGFsUGFkZGluZyA9IDQ7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggTWVu
dUxpc3RQYXJ0IG9yIE1lbnVsaXN0QnV0dG9uUGFydCBhcHBlYXJhbmNlIGJ5IFJlbmRlck1lbnVM
aXN0LCBvciB3aXRoIFRleHRGaWVsZFBhcnQgYXBwZWFyYW5jZSBieSBBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudC4KLS8vIFdlIGFzc3VtZSBvbmx5IEF1dG9maWxsUG9wdXBNZW51Q2xpZW50IGdpdmVz
IFRleGZpZWxkUGFydCBhcHBlYXJhbmNlIGhlcmUuCi0vLyBXZSB3YW50IHRvIGNoYW5nZSBvbmx5
IEF1dG9maWxsIHBhZGRpbmcuCi0vLyBJbiB0aGUgZnV0dXJlLCB3ZSBoYXZlIHRvIHNlcGFyYXRl
IEF1dG9maWxsIHBvcHVwIHdpbmRvdyBsb2dpYyBmcm9tIFdlYktpdCB0byBDaHJvbWl1bS4KLWlu
dCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRl
eHRGaWVsZFBhcnQpCi0gICAgICAgIHJldHVybiBhdXRvZmlsbFBvcHVwSG9yaXpvbnRhbFBhZGRp
bmc7Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWVNYWNTaGFyZWQ6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nTGVmdChzdHlsZSk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0KQotICAgICAgICByZXR1cm4gYXV0
b2ZpbGxQb3B1cEhvcml6b250YWxQYWRkaW5nOwotCi0gICAgcmV0dXJuIFJlbmRlclRoZW1lTWFj
U2hhcmVkOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKTsKLX0KLQotLy8gVXBkYXRl
cyB0aGUgY29udHJvbCB0aW50IChhLmsuYS4gYWN0aXZlIHN0YXRlKSBvZiB8Y2VsbHwgKGZyb20g
fG98KS4KLS8vIEluIHRoZSBDaHJvbWl1bSBwb3J0LCB0aGUgcmVuZGVyZXIgcnVucyBhcyBhIGJh
Y2tncm91bmQgcHJvY2VzcyBhbmQgY29udHJvbHMnCi0vLyBOU0NlbGwocykgbGFjayBhIHBhcmVu
dCBOU1ZpZXcuIFRoZXJlZm9yZSBjb250cm9scyBkb24ndCBoYXZlIHRoZWlyIHRpbnQKLS8vIGNv
bG9yIHVwZGF0ZWQgY29ycmVjdGx5IHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGFjdGl2YXRlZC9k
ZWFjdGl2YXRlZC4KLS8vIEZvY3VzQ29udHJvbGxlcidzIHNldEFjdGl2ZSgpIGlzIGNhbGxlZCB3
aGVuIHRoZSBhcHBsaWNhdGlvbiBpcwotLy8gYWN0aXZhdGVkL2RlYWN0aXZhdGVkLCB3aGljaCBj
YXVzZXMgYSByZXBhaW50IGF0IHdoaWNoIHRpbWUgdGhpcyBjb2RlIGlzCi0vLyBjYWxsZWQuCi0v
LyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRyYXdpbmcgYW55IE5TQ2Vs
bC1kZXJpdmVkIGNvbnRyb2xzLAotLy8gdW5sZXNzIHlvdSdyZSBzdXJlIGl0IGlzbid0IG5lZWRl
ZC4KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxs
KiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgTlNDb250cm9sVGludCBvbGRU
aW50ID0gW2NlbGwgY29udHJvbFRpbnRdOwotICAgIE5TQ29udHJvbFRpbnQgdGludCA9IGlzQWN0
aXZlKG8pID8gW05TQ29sb3IgY3VycmVudENvbnRyb2xUaW50XSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxOU0NvbnRyb2xUaW50PihOU0NsZWFy
Q29udHJvbFRpbnQpOwotCi0gICAgaWYgKHRpbnQgIT0gb2xkVGludCkKLSAgICAgICAgW2NlbGwg
c2V0Q29udHJvbFRpbnQ6dGludF07Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
LXsKLSAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1
bWJTaXplKHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1l
ZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIFJlbmRlck1lZGlhQ29u
dHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVBsYXlCdXR0b24sIG9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIFJlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYU11dGVC
dXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJl
dHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQo
TWVkaWFTbGlkZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotU3RyaW5nIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQotewotICAg
IHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKLXsKLSAgICAvLyBGSVhNRTogQ2hyb21pdW0g
bWF5IHdpc2ggdG8gc3R5bGUgaXRzIGRlZmF1bHQgbWVkaWEgY29udHJvbHMgZGlmZmVyZW50bHkg
aW4gZnVsbHNjcmVlbi4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotU3RyaW5n
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQotewotICAg
IHJldHVybiBSZW5kZXJUaGVtZU1hY1NoYXJlZDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpICsK
LSAgICAgICAgICAgU3RyaW5nKHRoZW1lQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXpl
b2YodGhlbWVDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQotI2lmIEVOQUJMRShE
QVRBTElTVF9FTEVNRU5UKQotTGF5b3V0VW5pdCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzbGlk
ZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKSBjb25zdAotewotICAgIHJldHVybiBSZW5kZXJUaGVt
ZUNocm9taXVtQ29tbW9uOjpzbGlkZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKTsKLX0KLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19VSSkgJiYgRU5BQkxFKENBTEVO
REFSX1BJQ0tFUikKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHNDYWxlbmRh
clBpY2tlcihjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJl
bmRlclRoZW1lQ2hyb21pdW1Db21tb246OnN1cHBvcnRzQ2FsZW5kYXJQaWNrZXIodHlwZSk7Ci19
Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
cmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFy
dChNZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci19Ci0KLUludFBv
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0
dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0
dG9uKG11dGVCdXR0b25Cb3gsIHNpemUpOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6Zm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZmxvYXQgdGltZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpmb3JtYXRNZWRpYUNvbnRyb2xzVGlt
ZSh0aW1lKTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmZvcm1hdE1lZGlh
Q29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6Zm9ybWF0TWVk
aWFDb250cm9sc0N1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBkdXJhdGlvbik7Ci19Ci0KLVN0cmlu
ZyBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGlt
ZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1l
KGN1cnJlbnRUaW1lLCBkdXJhdGlvbik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVy
biBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVk
aWFFbnRlckZ1bGxzY3JlZW5CdXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xz
Q2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNC
dXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBHb29nbGUgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhLmgiCi0KLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0j
aW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNpbmNsdWRlICJTa1NoYWRlci5oIgotI2lu
Y2x1ZGUgIlNrR3JhZGllbnRTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVt
IFBhZGRpbmdUeXBlIHsKLSAgICBUb3BQYWRkaW5nLAotICAgIFJpZ2h0UGFkZGluZywKLSAgICBC
b3R0b21QYWRkaW5nLAotICAgIExlZnRQYWRkaW5nCi19OwotCi1zdGF0aWMgY29uc3QgaW50IHN0
eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0IH07Ci0KLS8vIFRo
ZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi4KLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZh
dWx0Q29udHJvbEZvbnRQaXhlbFNpemUgPSAxMzsKLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0
Q2FuY2VsQnV0dG9uU2l6ZSA9IDk7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluQ2FuY2VsQnV0dG9u
U2l6ZSA9IDU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4Q2FuY2VsQnV0dG9uU2l6ZSA9IDIxOwot
c3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6
ZSA9IDEzOwotc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU2l6ZSA9IDMwOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25XaWR0aCA9IDE4OwotCi1SZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEoKQotewotfQotCi1SZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkKLXsKLX0KLQotLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxl
IHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHRo
ZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVT
aGVldCkpICsKLSAgICAgICAgICAgU3RyaW5nKHRoZW1lQ2hyb21pdW1Ta2lhVXNlckFnZW50U3R5
bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1Ta2lhVXNlckFnZW50U3R5bGVTaGVldCkpICsK
LSAgICAgICAgICAgU3RyaW5nKHRoZW1lQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXpl
b2YodGhlbWVDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQotU3RyaW5nIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQotewotICAgIHJldHVy
biBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVX
aW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1T
dHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKQotewotICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0
c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIFRoaXMgY2F1c2VzIFdl
YktpdCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0RhdGFMaXN0VUkoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlKSBjb25zdAotewotICAgIHJldHVybiBSZW5kZXJUaGVtZUNo
cm9taXVtQ29tbW9uOjpzdXBwb3J0c0RhdGFMaXN0VUkodHlwZSk7Ci19Ci0KLSNpZiBFTkFCTEUo
SU5QVVRfTVVMVElQTEVfRklFTERTX1VJKSAmJiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQotYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNDYWxlbmRhclBpY2tlcihjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21p
dW1Db21tb246OnN1cHBvcnRzQ2FsZW5kYXJQaWNrZXIodHlwZSk7Ci19Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBv
cnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYKLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMHgxZSwgMHg5
MCwgMHhmZik7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29s
b3IoMHhjOCwgMHhjOCwgMHhjOCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIENvbG9yOjpibGFjazsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAg
IHJldHVybiBDb2xvcigweDMyLCAweDMyLCAweDMyKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIHN0YXRp
YyBDb2xvciBmb2N1c1JpbmdDb2xvcigyMjksIDE1MSwgMCwgMjU1KTsKLSAgICByZXR1cm4gZm9j
dXNSaW5nQ29sb3I7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRC
bGlua0ludGVydmFsKCkgY29uc3QKLXsKLSAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJl
dCBpbiBsYXlvdXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCi0gICAgLy8gYSByYWNlIGNv
bmRpdGlvbiBmb3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCi0gICAgaWYgKGlz
UnVubmluZ0xheW91dFRlc3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fy
ZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0
ZW1Gb250KHByb3BJZCwgZm9udERlc2NyaXB0aW9uKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IGRpbWVuc2lv
bnMgb2YgcmFkaW8gYnV0dG9ucyBhbmQgY2hlY2tib3hlcy4KLXN0YXRpYyBjb25zdCBpbnQgd2lk
Z2V0U3RhbmRhcmRXaWR0aCA9IDEzOwotc3RhdGljIGNvbnN0IGludCB3aWRnZXRTdGFuZGFyZEhl
aWdodCA9IDEzOwotCi0vLyBSZXR1cm4gYSByZWN0YW5nbGUgdGhhdCBoYXMgdGhlIHNhbWUgY2Vu
dGVyIHBvaW50IGFzIHxvcmlnaW5hbHwsIGJ1dCB3aXRoIGEKLS8vIHNpemUgY2FwcGVkIGF0IHx3
aWR0aHwgYnkgfGhlaWdodHwuCi1JbnRSZWN0IGNlbnRlcihjb25zdCBJbnRSZWN0JiBvcmlnaW5h
bCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIHdpZHRoID0gc3RkOjptaW4ob3JpZ2lu
YWwud2lkdGgoKSwgd2lkdGgpOwotICAgIGhlaWdodCA9IHN0ZDo6bWluKG9yaWdpbmFsLmhlaWdo
dCgpLCBoZWlnaHQpOwotICAgIGludCB4ID0gb3JpZ2luYWwueCgpICsgKG9yaWdpbmFsLndpZHRo
KCkgLSB3aWR0aCkgLyAyOwotICAgIGludCB5ID0gb3JpZ2luYWwueSgpICsgKG9yaWdpbmFsLmhl
aWdodCgpIC0gaGVpZ2h0KSAvIDI7Ci0KLSAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgot
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogIEEgaGFy
ZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkK
LSAgICAvLyBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBz
ZXR0aW5ncyBvbiBXaW5kb3dzLAotICAgIC8vIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3Ug
YSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvciB0aGUgaGlnaGVyCi0gICAgLy8gRFBJLiAg
VW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5
Niwgd2UKLSAgICAvLyBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzIG1ldHJpY3MuCi0gICAgY29u
c3QgSW50U2l6ZSBzaXplKHdpZGdldFN0YW5kYXJkV2lkdGgsIHdpZGdldFN0YW5kYXJkSGVpZ2h0
KTsKLSAgICBzZXRTaXplSWZBdXRvKHN0eWxlLCBzaXplKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSAgICAvLyBVc2Ugc2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KLSAgICBz
ZXRDaGVja2JveFNpemUoc3R5bGUpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0
dG9uUGFydCkgewotICAgICAgICAvLyBJZ25vcmUgbGluZS1oZWlnaHQuCi0gICAgICAgIHN0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgICAvLyBJZ25vcmUgbGluZS1oZWln
aHQuCi0gICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBp
eGVsU2l6ZTsKLSAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3Rk
OjptYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBmb250
U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci19Ci0KLUludFJlY3QgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVy
ZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBMYXlvdXRSZWN0IHBhcnRSZWN0
LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKLXsKLSAgICAvLyBDb21wdXRlIGFu
IG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIu
Ci0gICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciA9IC1wYXJ0UmVuZGVyZXIt
Pm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlcmVyKTsKLSAgICAvLyBNb3Zl
IHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzLgotICAgIHBhcnRSZWN0Lm1vdmUo
b2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOwotICAgIC8vIEFjY291bnQgZm9yIHRoZSBsb2NhbCBk
cmF3aW5nIG9mZnNldC4KLSAgICBwYXJ0UmVjdC5tb3ZlKGxvY2FsT2Zmc2V0LngoKSwgbG9jYWxP
ZmZzZXQueSgpKTsKLQotICAgIHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KHBhcnRSZWN0KTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbihSZW5kZXJPYmplY3QqIGNhbmNlbEJ1dHRvbk9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgLy8gR2V0IHRoZSByZW5kZXJl
ciBvZiA8aW5wdXQ+IGVsZW1lbnQuCi0gICAgTm9kZSogaW5wdXQgPSBjYW5jZWxCdXR0b25PYmpl
Y3QtPm5vZGUoKS0+c2hhZG93SG9zdCgpOwotICAgIFJlbmRlck9iamVjdCogYmFzZVJlbmRlcmVy
ID0gaW5wdXQgPyBpbnB1dC0+cmVuZGVyZXIoKSA6IGNhbmNlbEJ1dHRvbk9iamVjdDsKLSAgICBp
ZiAoIWJhc2VSZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
bmRlckJveCogaW5wdXRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChiYXNlUmVuZGVyZXIpOwotICAg
IExheW91dFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hS
ZWN0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJl
IGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVuaXQgY2FuY2Vs
QnV0dG9uU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxM
YXlvdXRVbml0PihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKLSAgICAv
LyBDYWxjdWxhdGUgY2FuY2VsIGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBp
bnB1dCBlbGVtZW50LgotICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3Vu
ZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQg
d2lsbAotICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmll
bGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgTGF5b3V0
UmVjdCBjYW5jZWxCdXR0b25SZWN0KGNhbmNlbEJ1dHRvbk9iamVjdC0+b2Zmc2V0RnJvbUFuY2Vz
dG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWln
aHQoKSAtIGNhbmNlbEJ1dHRvblNpemUgKyAxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbEJ1dHRvblNpemUsIGNhbmNlbEJ1dHRvblNpemUpOwotICAgIEludFJl
Y3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94LCBj
YW5jZWxCdXR0b25PYmplY3QsIGNhbmNlbEJ1dHRvblJlY3QsIHIpOwotCi0gICAgc3RhdGljIElt
YWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2Fu
Y2VsIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikubGVha1Jl
ZigpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKGNhbmNlbEJ1
dHRvbk9iamVjdCkgPyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbk9iamVjdC0+c3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBwYWludGluZ1JlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBlbXB0eVNpemUoMSwgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
ZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
ZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gU2Nh
bGUgdGhlIGRlY29yYXRpb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQg
Zm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emU7Ci0gICAgaW50IG1hZ25pZmllclNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1p
blNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiBtYWduaWZpZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlu
cHV0PiBlbGVtZW50LgotICAgIE5vZGUqIGlucHV0ID0gbWFnbmlmaWVyT2JqZWN0LT5ub2RlKCkt
PnNoYWRvd0hvc3QoKTsKLSAgICBSZW5kZXJPYmplY3QqIGJhc2VSZW5kZXJlciA9IGlucHV0ID8g
aW5wdXQtPnJlbmRlcmVyKCkgOiBtYWduaWZpZXJPYmplY3Q7Ci0gICAgaWYgKCFiYXNlUmVuZGVy
ZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIGlucHV0
UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goYmFzZVJlbmRlcmVyKTsKLSAgICBMYXlvdXRSZWN0IGlu
cHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwg
Zml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5pdCBtYWduaWZpZXJTaXplID0g
c3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluPExheW91dFVuaXQ+KGlu
cHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOwotICAgIC8vIENhbGN1bGF0ZSBk
ZWNvcmF0aW9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCi0g
ICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gs
IHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8v
IGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRl
bmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgTGF5b3V0UmVjdCBtYWduaWZp
ZXJSZWN0KG1hZ25pZmllck9iamVjdC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0
UmVuZGVyQm94KS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENv
bnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIG1hZ25pZmllclNpemUg
KyAxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25pZmllclNpemUsIG1h
Z25pZmllclNpemUpOwotICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRp
bmdSZWN0KGlucHV0UmVuZGVyQm94LCBtYWduaWZpZXJPYmplY3QsIG1hZ25pZmllclJlY3QsIHIp
OwotCi0gICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikubGVha1JlZigpOwotICAgIHBhaW50SW5mby5j
b250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG1hZ25pZmllck9iamVjdC0+c3R5bGUo
KS0+Y29sb3JTcGFjZSgpLCBwYWludGluZ1JlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Ci17Ci0gICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNp
emUKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250
cm9sRm9udFBpeGVsU2l6ZTsKLSAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gbHJvdW5kZihzdGQ6
Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU2l6ZSkpOwotICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlm
aWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBtYWdu
aWZpZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIE5v
ZGUqIGlucHV0ID0gbWFnbmlmaWVyT2JqZWN0LT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBS
ZW5kZXJPYmplY3QqIGJhc2VSZW5kZXJlciA9IGlucHV0ID8gaW5wdXQtPnJlbmRlcmVyKCkgOiBt
YWduaWZpZXJPYmplY3Q7Ci0gICAgaWYgKCFiYXNlUmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIGlucHV0UmVuZGVyQm94ID0gdG9SZW5kZXJC
b3goYmFzZVJlbmRlcmVyKTsKLSAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0
UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2Fs
ZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVu
aXQgbWFnbmlmaWVySGVpZ2h0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKTsKLSAgICBMYXlvdXRVbml0IG1hZ25pZmllcldpZHRoID0g
c3RkOjptaW48TGF5b3V0VW5pdD4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIG1hZ25pZmllckhl
aWdodCAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSk7Ci0gICAgTGF5b3V0UmVjdCBtYWduaWZpZXJS
ZWN0KG1hZ25pZmllck9iamVjdC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVu
ZGVyQm94KS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbnRl
bnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIG1hZ25pZmllckhlaWdodCAr
IDEpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmlmaWVyV2lkdGgsIG1h
Z25pZmllckhlaWdodCk7Ci0gICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWlu
dGluZ1JlY3QoaW5wdXRSZW5kZXJCb3gsIG1hZ25pZmllck9iamVjdCwgbWFnbmlmaWVyUmVjdCwg
cik7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJzZWFyY2hNYWduaWZpZXJSZXN1bHRzIikubGVha1JlZigpOwotICAgIHBh
aW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG1hZ25pZmllck9iamVj
dC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwYWludGluZ1JlY3QpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgcmV0dXJuIFJlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRl
ciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVj
dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0j
aWYgRU5BQkxFKFZJREVPKQotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHBhaW50SW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjphZGp1c3RN
ZWRpYVNsaWRlclRodW1iU2l6ZShzdHlsZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzdHls
ZSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRp
YVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgcmV0
dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChN
ZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVO
VVNFRF9QQVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHJldHVybiBSZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTaG93Q2xv
c2VkQ2FwdGlvbnNCdXR0b24sIG8sIHBhaW50SW5mbywgcik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNFRF9Q
QVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHND
aHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1iLCBv
YmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvYmplY3Qp
OwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShW
SURFTykKLSAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlh
Q29udHJvbHNQYXJ0KE1lZGlhUGxheUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJ
bmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFNdXRlQnV0dG9u
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgcmV0dXJuIFJlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYU11dGVCdXR0
b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9i
amVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
Y3QpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGZsb2F0IHRpbWUpIGNvbnN0Ci17
Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW06OmZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKHRpbWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0odGltZSk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVu
dFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBy
ZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUoY3VycmVudFRpbWUsIGR1cmF0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRUaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oZHVyYXRpb24pOwotICAgIHJldHVybiAw
OwotI2VuZGlmCi19Ci0KLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Zm9ybWF0TWVk
aWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9u
KSBjb25zdAotewotI2lmIEVOQUJMRShWSURFTykKLSAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShjdXJyZW50VGlt
ZSwgZHVyYXRpb24pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudFRpbWUpOwotICAg
IFVOVVNFRF9QQVJBTShkdXJhdGlvbik7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICByZXR1cm4gUmVuZGVyTWVkaWFD
b250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhRW50ZXJGdWxsc2Ny
ZWVuQnV0dG9uLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNFRF9Q
QVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBIZWln
aHQgaXMgbG9ja2VkIHRvIGF1dG8gb24gYWxsIGJyb3dzZXJzLgotICAgIHN0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
Ci17Ci0gICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19
Ci0KLS8vIFVzZWQgdG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRl
ZmF1bHQgYm9yZGVyKQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlz
dEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBpLCByZWN0KTsKLX0KLQot
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFk
ZGluZyhzdHlsZSwgTGVmdFBhZGRpbmcpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAot
ewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5n
KTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGlu
Z1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50
ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0
b21QYWRkaW5nKTsKLX0KLQotLy8gc3RhdGljCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQotewotICAgIFJlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZShmb250U2l6ZSk7Ci19Ci0KLWRv
dWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwo
KSBjb25zdAotewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Y2FyZXRCbGlua0ludGVydmFsKCk7
Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RBcnJvd1BhZGRpbmco
KSBjb25zdAotewotICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+c2Nyb2xsYmFy
VGhpY2tuZXNzKCk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c2V0U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUmIHNpemUp
Ci17Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGlu
Z1R5cGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBpbnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0
aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCi0gICAgLy8gTWF0Y2hlcyB0aGUgRkYg
YmVoYXZpb3IuCi0gICAgaW50IHBhZGRpbmcgPSBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGlu
Z1twYWRkaW5nVHlwZV07Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSBzcGFjZSBmb3IgcmlnaHQgYXJy
b3cgaGVyZS4gVGhlIHJlc3Qgb2YgdGhlIHBhZGRpbmcgaXMKLSAgICAvLyBzZXQgYnkgYWRqdXN0
TWVudUxpc3RTdHlsZSwgc2luY2UgUG9wTWVudVdpbi5jcHAgdXNlcyB0aGUgcGFkZGluZyBmcm9t
Ci0gICAgLy8gUmVuZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBp
biB0aGUgcG9wdXAuCi0gICAgLy8gSWYgdGhlIE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBlYXJh
bmNlICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMKLSAgICAvLyB3ZSBkb24ndCBkcmF3
IGEgYnV0dG9uLCBzbyBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBpdC4KLSAgICBjb25zdCBpbnQg
YmFyVHlwZSA9IHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBMZWZ0
UGFkZGluZzsKLSAgICBpZiAocGFkZGluZ1R5cGUgPT0gYmFyVHlwZSAmJiBzdHlsZS0+YXBwZWFy
YW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCi0gICAgICAgIHBhZGRpbmcgKz0gbWVudUxpc3RBcnJv
d1BhZGRpbmcoKTsKLQotICAgIHJldHVybiBwYWRkaW5nOwotfQotCi1ib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLUxh
eW91dFVuaXQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVz
aG9sZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21pdW1Db21tb246OnNs
aWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKLQotLy8KLS8vIEZvbGxvd2luZyB2YWx1ZXMgYXJlIGNvbWUgZnJvbSBk
ZWZhdWx0IG9mIEdUSysKLS8vCi1zdGF0aWMgY29uc3QgaW50IHByb2dyZXNzRGVsdGFQaXhlbHNQ
ZXJTZWNvbmQgPSAxMDA7Ci1zdGF0aWMgY29uc3QgaW50IHByb2dyZXNzQWN0aXZpdHlCbG9ja3Mg
PSA1Owotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZybWFlcyA9IDEwOwotc3Rh
dGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci0KLUlu
dFJlY3QgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRldGVybWluYXRlUHJvZ3Jlc3NWYWx1ZVJl
Y3RGb3IoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAotewotICAgIGludCBkeCA9IHJlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5w
b3NpdGlvbigpOwotICAgIHJldHVybiBJbnRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgZHgsIHJl
Y3QuaGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjppbmRl
dGVybWluYXRlUHJvZ3Jlc3NWYWx1ZVJlY3RGb3IoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dy
ZXNzLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotCi0gICAgaW50IHZhbHVlV2lkdGgg
PSByZWN0LndpZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzOwotICAgIGludCBtb3ZhYmxl
V2lkdGggPSByZWN0LndpZHRoKCkgLSB2YWx1ZVdpZHRoOwotICAgIGlmIChtb3ZhYmxlV2lkdGgg
PD0gMCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGRvdWJsZSBwcm9ncmVzcyA9
IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOwotICAgIGlmIChwcm9ncmVzcyA8
IDAuNSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QocmVjdC54KCkgKyBwcm9ncmVzcyAqIDIgKiBt
b3ZhYmxlV2lkdGgsIHJlY3QueSgpLCB2YWx1ZVdpZHRoLCByZWN0LmhlaWdodCgpKTsKLSAgICBy
ZXR1cm4gSW50UmVjdChyZWN0LngoKSArICgxLjAgLSBwcm9ncmVzcykgKiAyICogbW92YWJsZVdp
ZHRoLCByZWN0LnkoKSwgdmFsdWVXaWR0aCwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLWRvdWJsZSBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0
aW9uSW50ZXJ2YWw7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3Mp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBwcm9ncmVz
c0FuaW1hdGlvbkZybWFlcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGgKLX0KLQotSW50
UmVjdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cHJvZ3Jlc3NWYWx1ZVJlY3RGb3IoUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpID8gZGV0ZXJtaW5hdGVQ
cm9ncmVzc1ZhbHVlUmVjdEZvcihyZW5kZXJQcm9ncmVzcywgcmVjdCkgOiBpbmRldGVybWluYXRl
UHJvZ3Jlc3NWYWx1ZVJlY3RGb3IocmVuZGVyUHJvZ3Jlc3MsIHJlY3QpOwotfQotCi1SZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6RGlyZWN0aW9uRmxpcHBpbmdTY29wZTo6RGlyZWN0aW9uRmxpcHBp
bmdTY29wZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLSAgICA6IG1fbmVlZHNGbGlwcGluZyghcmVuZGVyZXIt
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAsIG1fcGFpbnRJbmZvKHBh
aW50SW5mbykKLXsKLSAgICBpZiAoIW1fbmVlZHNGbGlwcGluZykKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBtX3BhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoMiAqIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCAwKTsKLSAgICBtX3BhaW50
SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoLTEsIDEpKTsKLX0KLQotUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OkRpcmVjdGlvbkZsaXBwaW5nU2NvcGU6On5EaXJlY3Rpb25GbGlwcGluZ1Nj
b3BlKCkKLXsKLSAgICBpZiAoIW1fbmVlZHNGbGlwcGluZykKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotCi0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5NyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYV9oCi0jZGVmaW5lIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFJlbmRlclByb2dyZXNzOwotCi1jbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSA6IHB1Ymxp
YyBSZW5kZXJUaGVtZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKTsK
LSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpOwotCi0gICAgdmlydHVhbCBT
dHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJh
UXVpcmtzU3R5bGVTaGVldCgpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRhcEhpZ2hsaWdodENvbG9y
KCkgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb2xvcihkZWZhdWx0VGFw
SGlnaGxpZ2h0Q29sb3IpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQSBtZXRob2QgYXNraW5n
IGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdo
ZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJT
dHlsZSopIGNvbnN0OwotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBh
YmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkgY29uc3QgT1ZFUlJJREU7
Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ2xv
c2VkQ2FwdGlvbmluZygpIGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0gICAgLy8gVGhlIHBsYXRm
b3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0
OwotCi0gICAgLy8gVG8gY2hhbmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3ZlcnJpZGUgY2FyZXRC
bGlua0ludGVydmFsSW50ZXJuYWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0aGF0IHdlIG1heSBz
aGFyZSBsYXlvdXQgdGVzdCBjb2RlIGFuIGludGVyY2VwdHMuCi0gICAgdmlydHVhbCBkb3VibGUg
Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7Ci0KLSAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAg
dmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xz
VGltZShmbG9hdCB0aW1lKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNv
bnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShm
bG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAvLyBNZW51TGlzdCByZWZlcnMgdG8gYW4gdW5z
dHlsZWQgbWVudWxpc3QgKG1lYW5pbmcgYSBtZW51bGlzdCB3aXRob3V0Ci0gICAgLy8gYmFja2dy
b3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RCdXR0b24gcmVmZXJzIHRvIGEg
c3R5bGVkCi0gICAgLy8gbWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0aCBiYWNrZ3JvdW5kLWNvbG9y
IG9yIGJvcmRlciBzZXQpLiBUaGV5IGhhdmUKLSAgICAvLyB0aGlzIGRpc3RpbmN0aW9uIHRvIHN1
cHBvcnQgc2hvd2luZyBhcXVhIHN0eWxlIHRoZW1lcyB3aGVuZXZlciB0aGV5Ci0gICAgLy8gcG9z
c2libHkgY2FuLCB3aGljaCBpcyBzb21ldGhpbmcgd2UgZG9uJ3Qgd2FudCB0byByZXBsaWNhdGUu
Ci0gICAgLy8KLSAgICAvLyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24gdGhlIE1lbnVMaXN0
IGNvZGUgcGF0aCBvciB0aGUgTWVudUxpc3RCdXR0b24KLSAgICAvLyBjb2RlcGF0aC4gV2UgbmV2
ZXIgZ28gZG93biBib3RoLiBBbmQgaW4gYm90aCBjYXNlcywgdGhleSByZW5kZXIgdGhlCi0gICAg
Ly8gZW50aXJlIG1lbnVsaXN0LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
Ci0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Owot
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqKSBjb25zdDsKLSNlbmRpZgotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBkZWZpbmUg
dGhlIHBhZGRpbmcgZm9yIHRoZSBNZW51TGlzdCdzIGlubmVyIGJsb2NrLgotICAgIHZpcnR1YWwg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgLy8gTWVkaWEgY29udHJvbHMK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQ
YXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHVzZXNWZXJ0aWNh
bFZvbHVtZVNsaWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLQotICAgIC8v
IFByb3ZpZGUgYSB3YXkgdG8gcGFzcyB0aGUgZGVmYXVsdCBmb250IHNpemUgZnJvbSB0aGUgU2V0
dGluZ3Mgb2JqZWN0Ci0gICAgLy8gdG8gdGhlIHJlbmRlciB0aGVtZS4gRklYTUU6IGh0dHA6Ly9i
LzExMjkxODYgQSBjbGVhbmVyIHdheSB3b3VsZCBiZQotICAgIC8vIHRvIHJlbW92ZSB0aGUgZGVm
YXVsdCBmb250IHNpemUgZnJvbSB0aGlzIG9iamVjdCBhbmQgaGF2ZSBjYWxsZXJzCi0gICAgLy8g
dGhhdCBuZWVkIHRoZSB2YWx1ZSB0byBnZXQgaXQgZGlyZWN0bHkgZnJvbSB0aGUgYXBwcm9wcmlh
dGUgU2V0dGluZ3MKLSAgICAvLyBvYmplY3QuCi0gICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZv
bnRTaXplKGludCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5r
SW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbWVudUxpc3RBcnJv
d1BhZGRpbmcoKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIHNldFNpemVJZkF1dG8oUmVuZGVy
U3R5bGUqLCBjb25zdCBJbnRTaXplJik7Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LSAgICBJbnRSZWN0IGRldGVybWluYXRlUHJvZ3Jlc3NWYWx1ZVJlY3RGb3IoUmVuZGVyUHJvZ3Jl
c3MqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCBpbmRldGVybWluYXRlUHJv
Z3Jlc3NWYWx1ZVJlY3RGb3IoUmVuZGVyUHJvZ3Jlc3MqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
Ci0gICAgSW50UmVjdCBwcm9ncmVzc1ZhbHVlUmVjdEZvcihSZW5kZXJQcm9ncmVzcyosIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLQotICAgIGNsYXNzIERpcmVjdGlvbkZsaXBwaW5nU2NvcGUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgRGlyZWN0aW9uRmxpcHBpbmdTY29wZShSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIH5EaXJlY3Rpb25G
bGlwcGluZ1Njb3BlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIG1fbmVlZHNGbGlw
cGluZzsKLSAgICAgICAgY29uc3QgUGFpbnRJbmZvJiBtX3BhaW50SW5mbzsKLSAgICB9OwotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBDb2xvciBkaXNhYmxlZFRleHRDb2xvcihjb25z
dCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IHRleHRDb2xvcjsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVu
Rm9jdXNlZCgpIGNvbnN0IE9WRVJSSURFOwotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQp
Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNv
bnN0IE9WRVJSSURFOwotI2VuZGlmCi0jaWYgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19V
SSkKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDYWxlbmRhclBpY2tlcihjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUpIGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICBpbnQgbWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OwotICAg
IGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmLCBJbWFnZSopOwotICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRl
ck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIs
IExheW91dFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsK
LQotICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZGVmYXVsdFRhcEhpZ2hsaWdodENvbG9yID0gMHgy
ZTAwMDAwMDsgLy8gMTglIGJsYWNrLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24g
MTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2MCArMCwwIEBACi0vKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtV2luLmgi
Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dXh0aGVtZS5oPgotI2luY2x1ZGUg
PHZzc3ltMzIuaD4KLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJG
b250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJGb250VXRpbHNDaHJvbWl1bVdpbi5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5oIgotI2lu
Y2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgot
I2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oIgotI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lLmgiCi0jaW5jbHVkZSAiU3lzdGVtSW5mby5oIgotI2luY2x1ZGUgIlRyYW5zcGFyZW5j
eVdpbi5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDb2xvci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+Ci0jaW5jbHVkZSA8cHVibGlj
L3dpbi9XZWJUaGVtZUVuZ2luZS5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi0K
LS8vIEZJWE1FOiBUaGlzIGRlcGVuZGVuY3kgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4K
LSNpbmNsdWRlIDxza2lhL2V4dC9za2lhX3V0aWxzX3dpbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIFRoZSBzdGFuZGFyZCB3aWR0aCBmb3IgdGhlIG1lbnUgbGlzdCBkcm9wLWRvd24g
YnV0dG9uIHdoZW4gcnVuIHVuZGVyCi0vLyBsYXlvdXQgdGVzdCBtb2RlLiBVc2UgdGhlIHZhbHVl
IHRoYXQncyBjdXJyZW50bHkgY2FwdHVyZWQgaW4gbW9zdCBiYXNlbGluZXMuCi1zdGF0aWMgY29u
c3QgaW50IGtTdGFuZGFyZE1lbnVMaXN0QnV0dG9uV2lkdGggPSAxNzsKLQotbmFtZXNwYWNlIHsK
LS8vIFdlIG11c3Qgbm90IGNyZWF0ZSBtdWx0aXBsZSBUaGVtZVBhaW50ZXIgaW5zdGFuY2VzLgot
Y2xhc3MgVGhlbWVQYWludGVyIHsKLXB1YmxpYzoKLSAgICBUaGVtZVBhaW50ZXIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQotICAgIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIEFTU0VSVCghc19oYXNJbnN0YW5jZSk7Ci0gICAgICAgIHNfaGFzSW5zdGFuY2Ug
PSB0cnVlOwotI2VuZGlmCi0gICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VHJhbnNmb3JtTW9kZSB0
cmFuc2Zvcm1Nb2RlID0gZ2V0VHJhbnNmb3JtTW9kZShjb250ZXh0LT5nZXRDVE0oKSk7Ci0gICAg
ICAgIG1faGVscGVyLmluaXQoY29udGV4dCwgZ2V0TGF5ZXJNb2RlKGNvbnRleHQsIHRyYW5zZm9y
bU1vZGUpLCB0cmFuc2Zvcm1Nb2RlLCByKTsKLQotICAgICAgICBpZiAoIW1faGVscGVyLmNvbnRl
eHQoKSkgewotICAgICAgICAgICAgLy8gVHJhbnNwYXJlbmN5V2luIGRvZXNuJ3QgaGF2ZSB3ZWxs
LWRlZmluZWQgY29weS1jdG9yIG5vciBvcD0oKQotICAgICAgICAgICAgLy8gc28gd2UgcmUtaW5p
dGlhbGl6ZSBpdCBpbnN0ZWFkIG9mIGFzc2lnbmluZyBhIGZyZXNoIGlzdGFuY2UuCi0gICAgICAg
ICAgICAvLyBPbiB0aGUgcmVpbml0aWFsaXphdGlvbiwgd2UgZmFsbGJhY2sgdG8gdXNlIE5vTGF5
ZXIgbW9kZS4KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3JpZ2luYWwgaW5pdGlhbGl6
YXRpb24gZmFpbHVyZSBjYW4gYmUgY2F1c2VkIGJ5Ci0gICAgICAgICAgICAvLyBhIGZhaWx1cmUg
b2YgYW4gaW50ZXJuYWwgYnVmZmVyIGFsbG9jYXRpb24gYW5kIE5vTGF5ZXIgbW9kZQotICAgICAg
ICAgICAgLy8gZG9lcyBub3QgaGF2ZSBzdWNoIGJ1ZmZlciBhbGxvY2F0aW9ucy4KLSAgICAgICAg
ICAgIG1faGVscGVyLn5UcmFuc3BhcmVuY3lXaW4oKTsKLSAgICAgICAgICAgIG5ldyAoJm1faGVs
cGVyKSBUcmFuc3BhcmVuY3lXaW4oKTsKLSAgICAgICAgICAgIG1faGVscGVyLmluaXQoY29udGV4
dCwgVHJhbnNwYXJlbmN5V2luOjpOb0xheWVyLCB0cmFuc2Zvcm1Nb2RlLCByKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIH5UaGVtZVBhaW50ZXIoKQotICAgIHsKLSAgICAgICAgbV9oZWxwZXIu
Y29tcG9zaXRlKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBzX2hhc0luc3RhbmNlID0gZmFs
c2U7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSB7IHJl
dHVybiBtX2hlbHBlci5jb250ZXh0KCk7IH0KLSAgICBjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCgp
IHsgcmV0dXJuIG1faGVscGVyLmRyYXdSZWN0KCk7IH0KLQotcHJpdmF0ZToKLQotICAgIHN0YXRp
YyBUcmFuc3BhcmVuY3lXaW46OkxheWVyTW9kZSBnZXRMYXllck1vZGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBUcmFuc3BhcmVuY3lXaW46OlRyYW5zZm9ybU1vZGUgdHJhbnNmb3JtTW9kZSkK
LSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNEcmF3aW5n
VG9JbWFnZUJ1ZmZlcigpKSAvLyBNaWdodCBoYXZlIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCi0g
ICAgICAgICAgICByZXR1cm4gVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyOwotICAgICAgICBp
ZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5pc0RyYXdpbmdUb0xheWVy
KCkpIC8vIE5lZWRzIGFudGlhbGlhc2luZyBoZWxwLgotICAgICAgICAgICAgcmV0dXJuIFRyYW5z
cGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7Ci0gICAgICAgIC8vIE5vdGhpbmcgaW50
ZXJlc3RpbmcuCi0gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Nb2RlID09IFRyYW5zcGFyZW5jeVdp
bjo6S2VlcFRyYW5zZm9ybSA/IFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciA6IFRyYW5zcGFyZW5j
eVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIFRyYW5zcGFy
ZW5jeVdpbjo6VHJhbnNmb3JtTW9kZSBnZXRUcmFuc2Zvcm1Nb2RlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbWF0cml4KQotICAgIHsKLSAgICAgICAgaWYgKG1hdHJpeC5iKCkgfHwgbWF0cml4LmMo
KSkgLy8gU2tldy4KLSAgICAgICAgICAgIHJldHVybiBUcmFuc3BhcmVuY3lXaW46OlVudHJhbnNm
b3JtOwotICAgICAgICBpZiAobWF0cml4LmEoKSAhPSAxLjAgfHwgbWF0cml4LmQoKSAhPSAxLjAp
IC8vIFNjYWxlLgotICAgICAgICAgICAgcmV0dXJuIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFu
c2Zvcm07Ci0gICAgICAgIC8vIE5vdGhpbmcgaW50ZXJlc3RpbmcuCi0gICAgICAgIHJldHVybiBU
cmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm07Ci0gICAgfQotCi0gICAgVHJhbnNwYXJlbmN5
V2luIG1faGVscGVyOwotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBzX2hhc0luc3Rh
bmNlOwotI2VuZGlmCi19OwotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBUaGVtZVBhaW50ZXI6OnNf
aGFzSW5zdGFuY2UgPSBmYWxzZTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZQotCi0vLyBJbnRl
cm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIGRvbid0IHB1dCB0aGVtIGluIGFuIGFu
b255bW91cwotLy8gbmFtZXNwYWNlIHNvIHRoZXkgaGF2ZSBlYXNpZXIgYWNjZXNzIHRvIHRoZSBX
ZWJDb3JlIG5hbWVzcGFjZS4KLQotc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFy
dCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgU3F1
YXJlQnV0dG9uUGFydDoKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9u
UGFydDoKLSAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IGRvdWJsZSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwoZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkK
LXsKLSAgICBVSU5UIGJsaW5rVGltZSA9IEdldENhcmV0QmxpbmtUaW1lKCk7Ci0gICAgaWYgKCFi
bGlua1RpbWUpCi0gICAgICAgIHJldHVybiBkZWZhdWx0SW50ZXJ2YWw7Ci0gICAgaWYgKGJsaW5r
VGltZSA9PSBJTkZJTklURSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJsaW5rVGlt
ZSAvIDEwMDAuMDsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
Q2hyb21pdW1XaW4pOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6
dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9
IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4g
cnQ7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIExldCB3ZWJraXQgZHJh
dyBvbmUgb2YgaXRzIGhhbG8gcmluZ3MgYXJvdW5kIGFueSBmb2N1c2VkIGVsZW1lbnQsCi0gICAg
Ly8gZXhjZXB0IHB1c2ggYnV0dG9ucy4gRm9yIGJ1dHRvbnMgd2UgdXNlIHRoZSB3aW5kb3dzIFBC
U19ERUZBVUxURUQKLSAgICAvLyBzdHlsaW5nIHRvIGdpdmUgaXQgYSBibHVlIGJvcmRlci4KLSAg
ICByZXR1cm4gc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBCdXR0b25QYXJ0Ci0gICAgICAgICAgICB8
fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0Ci0gICAgICAgICAgICB8fCBz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFNxdWFyZUJ1dHRvblBhcnQ7Ci19Ci0KLUNvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNSdW5uaW5nTGF5b3V0VGVzdCgpKQotICAgICAgICByZXR1
cm4gQ29sb3IoMHgwMCwgMHgwMCwgMHhmZik7IC8vIFJveWFsIGJsdWUuCi0gICAgQ09MT1JSRUYg
Y29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQpOwotICAgIHJldHVybiBDb2xvcihH
ZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAweGZm
KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzUnVubmluZ0xheW91
dFRlc3QoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDB4OTksIDB4OTksIDB4OTkpOyAvLyBNZWRp
dW0gZ3JheS4KLSAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhU
KTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwg
R2V0QlZhbHVlKGNvbG9yKSwgMHhmZik7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1X
aW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICBpZiAoaXNSdW5uaW5nTGF5b3V0VGVzdCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoMHhmZiwg
MHhmZiwgMHhjYyk7IC8vIFBhbGUgeWVsbG93LgotICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lz
Q29sb3IoQ09MT1JfSElHSExJR0hUVEVYVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShj
b2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4ZmYpOwotfQotCi1D
b2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3I6OndoaXRlOwotfQotCi1D
b2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4OTYsIDB4MzIp
OyAvLyBPcmFuZ2UuCi19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3Jt
SW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBD
b2xvcigweGZmLCAweGZmLCAweDk2KTsgLy8gWWVsbG93LgotfQotCi0vLyBNYXAgYSBDU1NWYWx1
ZSogc3lzdGVtIGNvbG9yIHRvIGFuIGluZGV4IHVuZGVyc3Rvb2QgYnkgR2V0U3lzQ29sb3IoKS4K
LXN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRleChpbnQgY3NzVmFsdWVJZCkKLXsK
LSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlYm9yZGVy
OiByZXR1cm4gQ09MT1JfQUNUSVZFQk9SREVSOwotICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0
aW9uOiByZXR1cm4gQ09MT1JfQUNUSVZFQ0FQVElPTjsKLSAgICBjYXNlIENTU1ZhbHVlQXBwd29y
a3NwYWNlOiByZXR1cm4gQ09MT1JfQVBQV09SS1NQQUNFOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNr
Z3JvdW5kOiByZXR1cm4gQ09MT1JfQkFDS0dST1VORDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9u
ZmFjZTogcmV0dXJuIENPTE9SX0JUTkZBQ0U7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hs
aWdodDogcmV0dXJuIENPTE9SX0JUTkhJR0hMSUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9u
c2hhZG93OiByZXR1cm4gQ09MT1JfQlROU0hBRE9XOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250
ZXh0OiByZXR1cm4gQ09MT1JfQlROVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6
IHJldHVybiBDT0xPUl9DQVBUSU9OVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6IHJl
dHVybiBDT0xPUl9HUkFZVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlSGlnaGxpZ2h0OiByZXR1cm4g
Q09MT1JfSElHSExJR0hUOwotICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHR0ZXh0OiByZXR1cm4g
Q09MT1JfSElHSExJR0hUVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVib3JkZXI6IHJl
dHVybiBDT0xPUl9JTkFDVElWRUJPUkRFUjsKLSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0
aW9uOiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVDQVBUSU9OOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFj
dGl2ZWNhcHRpb250ZXh0OiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVDQVBUSU9OVEVYVDsKLSAgICBj
YXNlIENTU1ZhbHVlSW5mb2JhY2tncm91bmQ6IHJldHVybiBDT0xPUl9JTkZPQks7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZUluZm90ZXh0OiByZXR1cm4gQ09MT1JfSU5GT1RFWFQ7Ci0gICAgY2FzZSBDU1NW
YWx1ZU1lbnU6IHJldHVybiBDT0xPUl9NRU5VOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51dGV4dDog
cmV0dXJuIENPTE9SX01FTlVURVhUOwotICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGxiYXI6IHJldHVy
biBDT0xPUl9TQ1JPTExCQVI7Ci0gICAgY2FzZSBDU1NWYWx1ZVRocmVlZGRhcmtzaGFkb3c6IHJl
dHVybiBDT0xPUl8zRERLU0hBRE9XOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRmYWNlOiByZXR1
cm4gQ09MT1JfM0RGQUNFOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ6IHJldHVy
biBDT0xPUl8zREhJR0hMSUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6
IHJldHVybiBDT0xPUl8zRExJR0hUOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRzaGFkb3c6IHJl
dHVybiBDT0xPUl8zRFNIQURPVzsKLSAgICBjYXNlIENTU1ZhbHVlV2luZG93OiByZXR1cm4gQ09M
T1JfV0lORE9XOwotICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3dmcmFtZTogcmV0dXJuIENPTE9SX1dJ
TkRPV0ZSQU1FOwotICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3d0ZXh0OiByZXR1cm4gQ09MT1JfV0lO
RE9XVEVYVDsKLSAgICBkZWZhdWx0OiByZXR1cm4gLTE7IC8vIFVuc3VwcG9ydGVkIENTU1ZhbHVl
Ci0gICAgfQotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3QKLXsKLSAgICBpbnQgc3lzQ29sb3JJbmRleCA9IGNzc1ZhbHVl
SWRUb1N5c0NvbG9ySW5kZXgoY3NzVmFsdWVJZCk7Ci0gICAgaWYgKGlzUnVubmluZ0xheW91dFRl
c3QoKSB8fCAoc3lzQ29sb3JJbmRleCA9PSAtMSkpCi0gICAgICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci0KLSAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5
c0NvbG9yKHN5c0NvbG9ySW5kZXgpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3Ip
LCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKLX0KLQotI2lmIEVOQUJMRShE
QVRBTElTVF9FTEVNRU5UKQotSW50U2l6ZSBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzbGlkZXJU
aWNrU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoMSwgMyk7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMTE7Ci19Ci0jZW5kaWYKLQotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIC8vIFRoZXNlIHNpemVzIG1hdGNoIHdoYXQgV2lu
WFAgZHJhd3MgZm9yIHZhcmlvdXMgbWVudXMuCi0gICAgY29uc3QgaW50IHNsaWRlclRodW1iQWxv
bmdBeGlzID0gMTE7Ci0gICAgY29uc3QgaW50IHNsaWRlclRodW1iQWNyb3NzQXhpcyA9IDIxOwot
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQp
IHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYkFsb25nQXhpcywg
Rml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJBY3Jv
c3NBeGlzLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHNsaWRlclRodW1iQWNyb3NzQXhpcywgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2xpZGVyVGh1bWJBbG9uZ0F4aXMsIEZpeGVkKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUs
IGVsZW1lbnQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOwotfQotYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCBy
KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBj
b25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShvKTsKLQotICAgIFRoZW1l
UGFpbnRlciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgV2ViS2l0OjpXZWJDYW52YXMqIGNh
bnZhcyA9IHBhaW50ZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0g
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRv
bihjYW52YXMsIHRoZW1lRGF0YS5tX3BhcnQsIHRoZW1lRGF0YS5tX3N0YXRlLCB0aGVtZURhdGEu
bV9jbGFzc2ljU3RhdGUsIFdlYktpdDo6V2ViUmVjdChwYWludGVyLmRyYXdSZWN0KCkpKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkSW50ZXJuYWwobywgaSwgciwgdHJ1
ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShvKTsKLQotICAg
IFRoZW1lUGFpbnRlciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgV2ViS2l0OjpXZWJDYW52
YXMqIGNhbnZhcyA9IHBhaW50ZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7Ci0gICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dFRyYWNrYmFyKGNhbnZhcywgdGhlbWVEYXRhLm1fcGFydCwgdGhlbWVEYXRhLm1fc3RhdGUsIHRo
ZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwgV2ViS2l0OjpXZWJSZWN0KHBhaW50ZXIuZHJhd1JlY3Qo
KSkpOwotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgcGFpbnRTbGlkZXJUaWNr
cyhvLCBpLCByKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgY29uc3QgVGhlbWVEYXRh
JiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7Ci0KLSAgICBUaGVtZVBhaW50ZXIgcGFpbnRl
cihpLmNvbnRleHQsIHIpOwotICAgIFdlYktpdDo6V2ViQ2FudmFzKiBjYW52YXMgPSBwYWludGVy
LmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcihjYW52YXMsIHRo
ZW1lRGF0YS5tX3BhcnQsIHRoZW1lRGF0YS5tX3N0YXRlLCB0aGVtZURhdGEubV9jbGFzc2ljU3Rh
dGUsIFdlYktpdDo6V2ViUmVjdChwYWludGVyLmRyYXdSZWN0KCkpKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotc3RhdGljIGludCBtZW51TGlzdEJ1dHRvbldpZHRoKCkKLXsKLSAgICBzdGF0
aWMgaW50IHdpZHRoID0gaXNSdW5uaW5nTGF5b3V0VGVzdCgpID8ga1N0YW5kYXJkTWVudUxpc3RC
dXR0b25XaWR0aCA6IAotICAgICAgICBJbnRTaXplKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQo
KS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6ZShTQlBfQVJST1dCVE4pKS53aWR0aCgpOwotICAgIHJl
dHVybiB3aWR0aDsKLX0KLQotLy8gVXNlZCB0byBwYWludCB1bnN0eWxlZCBtZW51bGlzdHMgKGku
ZS4gd2l0aCB0aGUgZGVmYXVsdCBib3JkZXIpCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwotICAgIGlu
dCBib3JkZXJSaWdodCA9IGJveC0+Ym9yZGVyUmlnaHQoKTsKLSAgICBpbnQgYm9yZGVyTGVmdCA9
IGJveC0+Ym9yZGVyTGVmdCgpOwotICAgIGludCBib3JkZXJUb3AgPSBib3gtPmJvcmRlclRvcCgp
OwotICAgIGludCBib3JkZXJCb3R0b20gPSBib3gtPmJvcmRlckJvdHRvbSgpOwotCi0gICAgLy8g
SWYgYWxsIHRoZSBib3JkZXJzIGFyZSAwLCB0aGVuIHRlbGwgc2tpYSBub3QgdG8gcGFpbnQgdGhl
IGJvcmRlciBvbiB0aGUKLSAgICAvLyB0ZXh0ZmllbGQuICBGSVhNRTogaHR0cDovL2IvMTIxMDAx
NyBGaWd1cmUgb3V0IGhvdyB0byBnZXQgV2luZG93cyB0byBub3QKLSAgICAvLyBkcmF3IGluZGl2
aWR1YWwgYm9yZGVycyBhbmQgdGhlbiBwYXNzIHRoYXQgdG8gc2tpYSBzbyB3ZSBjYW4gYXZvaWQK
LSAgICAvLyBkcmF3aW5nIGFueSBib3JkZXJzIHRoYXQgYXJlIHNldCB0byAwLiBGb3Igbm9uLXpl
cm8gYm9yZGVycywgd2UgZHJhdyB0aGUKLSAgICAvLyBib3JkZXIsIGJ1dCB3ZWJraXQganVzdCBk
cmF3cyBvdmVyIGl0LgotICAgIGJvb2wgZHJhd0VkZ2VzID0gISghYm9yZGVyUmlnaHQgJiYgIWJv
cmRlckxlZnQgJiYgIWJvcmRlclRvcCAmJiAhYm9yZGVyQm90dG9tKTsKLQotICAgIHBhaW50VGV4
dEZpZWxkSW50ZXJuYWwobywgaSwgciwgZHJhd0VkZ2VzKTsKLQotICAgIC8vIFRha2UgcGFkZGlu
ZyBhbmQgYm9yZGVyIGludG8gYWNjb3VudC4gIElmIHRoZSBNZW51TGlzdCBpcyBzbWFsbGVyIHRo
YW4KLSAgICAvLyB0aGUgc2l6ZSBvZiBhIGJ1dHRvbiwgbWFrZSBzdXJlIHRvIHNocmluayBpdCBh
cHByb3ByaWF0ZWx5IGFuZCBub3QgcHV0Ci0gICAgLy8gaXRzIHggcG9zaXRpb24gdG8gdGhlIGxl
ZnQgb2YgdGhlIG1lbnVsaXN0LgotICAgIGNvbnN0IGludCBidXR0b25XaWR0aCA9IG1lbnVMaXN0
QnV0dG9uV2lkdGgoKTsKLSAgICBpbnQgc3BhY2luZ0xlZnQgPSBib3JkZXJMZWZ0ICsgYm94LT5w
YWRkaW5nTGVmdCgpOwotICAgIGludCBzcGFjaW5nUmlnaHQgPSBib3JkZXJSaWdodCArIGJveC0+
cGFkZGluZ1JpZ2h0KCk7Ci0gICAgaW50IHNwYWNpbmdUb3AgPSBib3JkZXJUb3AgKyBib3gtPnBh
ZGRpbmdUb3AoKTsKLSAgICBpbnQgc3BhY2luZ0JvdHRvbSA9IGJvcmRlckJvdHRvbSArIGJveC0+
cGFkZGluZ0JvdHRvbSgpOwotCi0gICAgaW50IGJ1dHRvblg7Ci0gICAgaWYgKHIubWF4WCgpIC0g
ci54KCkgPCBidXR0b25XaWR0aCkKLSAgICAgICAgYnV0dG9uWCA9IHIueCgpOwotICAgIGVsc2UK
LSAgICAgICAgYnV0dG9uWCA9IG8tPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IHIubWF4
WCgpIC0gc3BhY2luZ1JpZ2h0IC0gYnV0dG9uV2lkdGggOiByLngoKSArIHNwYWNpbmdMZWZ0Owot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBidXR0b24gaW4gdGhlIGRlc3Rp
bmF0aW9uIGltYWdlLgotICAgIEludFJlY3QgcmVjdChidXR0b25YLAotICAgICAgICAgICAgICAg
ICByLnkoKSArIHNwYWNpbmdUb3AsCi0gICAgICAgICAgICAgICAgIHN0ZDo6bWluKGJ1dHRvbldp
ZHRoLCByLm1heFgoKSAtIHIueCgpKSwKLSAgICAgICAgICAgICAgICAgci5oZWlnaHQoKSAtIChz
cGFjaW5nVG9wICsgc3BhY2luZ0JvdHRvbSkpOwotCi0gICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRo
ZW1lIGRhdGEgZm9yIGEgdGV4dGZpZWxkIGFuZCBwYWludCB0aGUgbWVudS4KLSAgICBUaGVtZVBh
aW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHJlY3QpOwotICAgIFdlYktpdDo6V2ViQ2FudmFzKiBj
YW52YXMgPSBwYWludGVyLmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwot
ICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51
TGlzdChjYW52YXMsIENQX0RST1BET1dOQlVUVE9OLCBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJt
aW5lQ2xhc3NpY1N0YXRlKG8pLCBXZWJLaXQ6OldlYlJlY3QocGFpbnRlci5kcmF3UmVjdCgpKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdAotewotICAgIC8vIFRoaXMgaW52b2x2
ZXMgYSBzeXN0ZW0gY2FsbCwgc28gd2UgY2FjaGUgdGhlIHJlc3VsdC4KLSAgICBzdGF0aWMgZG91
YmxlIGJsaW5rSW50ZXJ2YWwgPSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwoUmVuZGVyVGhlbWU6
OmNhcmV0QmxpbmtJbnRlcnZhbCgpKTsKLSAgICByZXR1cm4gYmxpbmtJbnRlcnZhbDsKLX0KLQot
dW5zaWduZWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZGV0ZXJtaW5lU3RhdGUoUmVuZGVyT2Jq
ZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9
IFRTX05PUk1BTDsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpOwotICAgIGlmICghaXNFbmFibGVkKG8pKQotICAgICAgICByZXN1bHQgPSBUU19E
SVNBQkxFRDsKLSAgICBlbHNlIGlmIChpc1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgcmVz
dWx0ID0gKGFwcGVhcmFuY2UgPT0gVGV4dEZpZWxkUGFydCB8fCBhcHBlYXJhbmNlID09IFRleHRB
cmVhUGFydCB8fCBhcHBlYXJhbmNlID09IFNlYXJjaEZpZWxkUGFydCkgPyBFVFNfUkVBRE9OTFkg
OiBUU19ESVNBQkxFRDsKLSAgICAvLyBBY3RpdmUgb3ZlcnJpZGVzIGhvdmVyIGFuZCBmb2N1c2Vk
LgotICAgIGVsc2UgaWYgKGlzUHJlc3NlZChvKSAmJiAoc3ViUGFydCA9PSBTcGluQnV0dG9uVXAp
ID09IGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpCi0gICAgICAgIHJlc3VsdCA9IFRTX1BS
RVNTRUQ7Ci0gICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhhcHBlYXJhbmNlKSAmJiBpc0ZvY3Vz
ZWQobykpCi0gICAgICAgIHJlc3VsdCA9IEVUU19GT0NVU0VEOwotICAgIGVsc2UgaWYgKGlzSG92
ZXJlZChvKSAmJiAoc3ViUGFydCA9PSBTcGluQnV0dG9uVXApID09IGlzU3BpblVwQnV0dG9uUGFy
dEhvdmVyZWQobykpCi0gICAgICAgIHJlc3VsdCA9IFRTX0hPVDsKLQotICAgIC8vIENCU19VTkNI
RUNLRUQqOiAxLTQKLSAgICAvLyBDQlNfQ0hFQ0tFRCo6IDUtOAotICAgIC8vIENCU19NSVhFRCo6
IDktMTIKLSAgICBpZiAoaXNJbmRldGVybWluYXRlKG8pKQotICAgICAgICByZXN1bHQgKz0gODsK
LSAgICBlbHNlIGlmIChpc0NoZWNrZWQobykpCi0gICAgICAgIHJlc3VsdCArPSA0OwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXVuc2lnbmVkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmRldGVy
bWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFRVU19OT1JNQUw7Ci0gICAgaWYgKCFpc0VuYWJsZWQobykpCi0gICAgICAgIHJlc3Vs
dCA9IFRVU19ESVNBQkxFRDsKLSAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQotICAgICAgICByZXN1bHQgPSBUVVNfRk9D
VVNFRDsKLSAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAgIHJlc3VsdCA9IFRVU19Q
UkVTU0VEOwotICAgIGVsc2UgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAgICAgcmVzdWx0ID0gVFVT
X0hPVDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi11bnNpZ25lZCBSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3Vi
UGFydCBzdWJQYXJ0KQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0KLSAgICBDb250cm9s
UGFydCBwYXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotCi0gICAgLy8gU2xpZGVycyBh
cmUgYWx3YXlzIGluIHRoZSBub3JtYWwgc3RhdGUuCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9y
aXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICAvLyBTbyBhcmUgcmVhZG9ubHkgdGV4dCBmaWVsZHMuCi0gICAgaWYg
KGlzUmVhZE9ubHlDb250cm9sKG8pICYmIChwYXJ0ID09IFRleHRGaWVsZFBhcnQgfHwgcGFydCA9
PSBUZXh0QXJlYVBhcnQgfHwgcGFydCA9PSBTZWFyY2hGaWVsZFBhcnQpKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8
fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIGlmICghaXNFbmFi
bGVkKG8pKQotICAgICAgICAgICAgcmVzdWx0ID0gREZDU19JTkFDVElWRTsKLSAgICAgICAgZWxz
ZSBpZiAoaXNQcmVzc2VkKG8pKSAvLyBBY3RpdmUgc3VwZXJzZWRlcyBob3ZlcgotICAgICAgICAg
ICAgcmVzdWx0ID0gREZDU19QVVNIRUQ7Ci0gICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChvKSkK
LSAgICAgICAgICAgIHJlc3VsdCA9IERGQ1NfSE9UOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghaXNFbmFibGVkKG8pIHx8IGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICAgICAgcmVz
dWx0ID0gREZDU19JTkFDVElWRTsKLSAgICAgICAgLy8gQWN0aXZlIHN1cGVyc2VkZXMgaG92ZXIK
LSAgICAgICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pICYmIChzdWJQYXJ0ID09IFNwaW5CdXR0b25V
cCkgPT0gaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKLSAgICAgICAgICAgIHJlc3VsdCA9
IERGQ1NfUFVTSEVEOwotICAgICAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKHBhcnQpICYmIGlz
Rm9jdXNlZChvKSkgLy8gU28gZG9lcyBmb2N1c2VkCi0gICAgICAgICAgICByZXN1bHQgPSAwOwot
ICAgICAgICBlbHNlIGlmIChpc0hvdmVyZWQobykgJiYgKHN1YlBhcnQgPT0gU3BpbkJ1dHRvblVw
KSA9PSBpc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKG8pKQotICAgICAgICAgICAgcmVzdWx0ID0g
REZDU19IT1Q7Ci0gICAgICAgIC8vIENsYXNzaWMgdGhlbWUgY2FuJ3QgcmVwcmVzZW50IGluZGV0
ZXJtaW5hdGUgc3RhdGVzLiBVc2UgdW5jaGVja2VkIGFwcGVhcmFuY2UuCi0gICAgICAgIGlmIChp
c0NoZWNrZWQobykgJiYgIWlzSW5kZXRlcm1pbmF0ZShvKSkKLSAgICAgICAgICAgIHJlc3VsdCB8
PSBERkNTX0NIRUNLRUQ7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVRoZW1lRGF0
YSBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZURhdGEoUmVuZGVyT2JqZWN0KiBvLCBD
b250cm9sU3ViUGFydCBzdWJQYXJ0KQotewotICAgIFRoZW1lRGF0YSByZXN1bHQ7Ci0gICAgc3dp
dGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoK
LSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NIRUNLQk9YOwotICAgICAgICByZXN1bHQubV9z
dGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUg
PSBERkNTX0JVVFRPTkNIRUNLOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlvUGFydDoK
LSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JBRElPQlVUVE9OOwotICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3Rh
dGUgPSBERkNTX0JVVFRPTlJBRElPOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNxdWFyZUJ1
dHRvblBhcnQ6Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6
Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9QVVNIQlVUVE9OOwotICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3Rh
dGUgPSBERkNTX0JVVFRPTlBVU0g7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2xpZGVySG9y
aXpvbnRhbFBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBUS1BfVFJBQ0s7Ci0gICAgICAg
IHJlc3VsdC5tX3N0YXRlID0gVFJTX05PUk1BTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBT
bGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBUS1BfVFJBQ0tWRVJU
OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFRSVlNfTk9STUFMOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3Bh
cnQgPSBUS1BfVEhVTUJCT1RUT007Ci0gICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5l
U2xpZGVyVGh1bWJTdGF0ZShvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IFRLUF9USFVNQlZFUlQ7Ci0g
ICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0ZShvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaXN0Ym94UGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFy
dDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFy
dDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAg
ICAgIHJlc3VsdC5tX3BhcnQgPSBFUF9FRElUVEVYVDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbm5lclNwaW5C
dXR0b25QYXJ0OgotICAgICAgICByZXN1bHQubV9wYXJ0ID0gc3ViUGFydCA9PSBTcGluQnV0dG9u
VXAgPyBTUE5QX1VQIDogU1BOUF9ET1dOOwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVy
bWluZVN0YXRlKG8sIHN1YlBhcnQpOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBz
dWJQYXJ0ID09IFNwaW5CdXR0b25VcCA/IERGQ1NfU0NST0xMVVAgOiBERkNTX1NDUk9MTERPV047
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSB8PSBk
ZXRlcm1pbmVDbGFzc2ljU3RhdGUobywgc3ViUGFydCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGV4dEZpZWxkSW50ZXJuYWwo
UmVuZGVyT2JqZWN0KiBvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHJhd0VkZ2Vz
KQotewotICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIGlmIHRoZSBzcGVjaWZpZWQgY29sb3Igb2Jq
ZWN0IGlzIGludmFsaWQuCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKENvbG9yOjp3aGl0ZSk7
Ci0gICAgaWYgKG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikuaXNWYWxpZCgpKQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBvLT5z
dHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBiYWNrZ3JvdW5kLWltYWdlLCBkb24ndCBmaWxsIHRoZSBj
b250ZW50IGFyZWEgdG8gZXhwb3NlIHRoZQotICAgIC8vIHBhcmVudCdzIGJhY2tncm91bmQuIEFs
c28sIHdlIHNob3VsZG4ndCBmaWxsIHRoZSBjb250ZW50IGFyZWEgaWYgdGhlCi0gICAgLy8gYWxw
aGEgb2YgdGhlIGNvbG9yIGlzIDAuIFRoZSBBUEkgb2YgV2luZG93cyBHREkgaWdub3JlcyB0aGUg
YWxwaGEuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgd2Ugc2hvdWxkIHBhaW50IHRoZSBjb250
ZW50IGFyZWEgd2hpdGUgaWYgd2UgaGF2ZSBuZWl0aGVyIHRoZQotICAgIC8vIGJhY2tncm91bmQg
Y29sb3Igbm9yIGJhY2tncm91bmQgaW1hZ2UgZXhwbGljaXRseSBzcGVjaWZpZWQgdG8ga2VlcCB0
aGUKLSAgICAvLyBhcHBlYXJhbmNlIG9mIHNlbGVjdCBlbGVtZW50IGNvbnNpc3RlbnQgd2l0aCBv
dGhlciBicm93c2Vycy4KLSAgICBib29sIGZpbGxDb250ZW50QXJlYSA9ICFvLT5zdHlsZSgpLT5o
YXNCYWNrZ3JvdW5kSW1hZ2UoKSAmJiBiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKTsKLQotICAgIGlm
IChvLT5zdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkgewotICAgICAgICAvLyBJZiB0aGUgc3R5
bGUgaGFzIHJvdW5kZWQgYm9yZGVycywgc2V0dXAgdGhlIGNvbnRleHQgdG8gY2xpcCB0aGUKLSAg
ICAgICAgLy8gYmFja2dyb3VuZCAodGhlbWVkIG9yIGZpbGxlZCkgYXBwcm9wcmlhdGVseS4KLSAg
ICAgICAgLy8gRklYTUU6IG1ha2Ugc3VyZSB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcgaWYgY3NzIGJh
Y2tncm91bmQtY2xpcCBpcyBzZXQuCi0gICAgICAgIGkuY29udGV4dC0+c2F2ZSgpOwotICAgICAg
ICBpLmNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChvLT5zdHlsZSgpLT5nZXRSb3VuZGVkQm9yZGVy
Rm9yKHIpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0
YSA9IGdldFRoZW1lRGF0YShvKTsKLSAgICAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250
ZXh0LCByKTsKLSAgICAgICAgV2ViS2l0OjpXZWJDYW52YXMqIGNhbnZhcyA9IHBhaW50ZXIuY29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgICAgIFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUZXh0RmllbGQoY2FudmFzLCB0
aGVtZURhdGEubV9wYXJ0LCB0aGVtZURhdGEubV9zdGF0ZSwgdGhlbWVEYXRhLm1fY2xhc3NpY1N0
YXRlLCBXZWJLaXQ6OldlYlJlY3QocGFpbnRlci5kcmF3UmVjdCgpKSwgYmFja2dyb3VuZENvbG9y
LnJnYigpLCBmaWxsQ29udGVudEFyZWEsIGRyYXdFZGdlcyk7Ci0gICAgICAgIC8vIEVuZCBvZiBi
bG9jayBjb21taXRzIHRoZSBwYWludGVyIGJlZm9yZSByZXN0b3JpbmcgY29udGV4dC4KLSAgICB9
Ci0gICAgaWYgKG8tPnN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKQotICAgICAgICBpLmNvbnRl
eHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRoID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgaGFsZiA9IHJlY3Q7
Ci0KLSAgICAvLyBOZWVkIGV4cGxpY2l0IGJsb2NrcyB0byBhdm9pZCB0byBjcmVhdGUgbXVsdGlw
bGUgVGhlbWVQYWludGVyIGluc3RhbmNlcy4KLSAgICB7Ci0gICAgICAgIGhhbGYuc2V0SGVpZ2h0
KHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgY29uc3QgVGhlbWVEYXRhJiB1cFRoZW1lRGF0
YSA9IGdldFRoZW1lRGF0YShvYmplY3QsIFNwaW5CdXR0b25VcCk7Ci0gICAgICAgIFRoZW1lUGFp
bnRlciB1cFBhaW50ZXIoaW5mby5jb250ZXh0LCBoYWxmKTsKLSAgICAgICAgV2ViS2l0OjpXZWJD
YW52YXMqIGNhbnZhcyA9IHVwUGFpbnRlci5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKTsKLSAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT50aGVtZUVuZ2lu
ZSgpLT5wYWludFNwaW5CdXR0b24oY2FudmFzLCB1cFRoZW1lRGF0YS5tX3BhcnQsIHVwVGhlbWVE
YXRhLm1fc3RhdGUsIHVwVGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLCBXZWJLaXQ6OldlYlJlY3Qo
dXBQYWludGVyLmRyYXdSZWN0KCkpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGhhbGYuc2V0
WShyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgY29uc3QgVGhlbWVEYXRh
JiBkb3duVGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG9iamVjdCwgU3BpbkJ1dHRvbkRvd24pOwot
ICAgICAgICBUaGVtZVBhaW50ZXIgZG93blBhaW50ZXIoaW5mby5jb250ZXh0LCBoYWxmKTsKLSAg
ICAgICAgV2ViS2l0OjpXZWJDYW52YXMqIGNhbnZhcyA9IGRvd25QYWludGVyLmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U3BpbkJ1dHRvbihjYW52YXMsIGRvd25UaGVt
ZURhdGEubV9wYXJ0LCBkb3duVGhlbWVEYXRhLm1fc3RhdGUsIGRvd25UaGVtZURhdGEubV9jbGFz
c2ljU3RhdGUsIFdlYktpdDo6V2ViUmVjdChkb3duUGFpbnRlci5kcmF3UmVjdCgpKSk7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQot
Ci0vLyBNU0ROIHNheXMgdGhhdCB1cGRhdGUgaW50ZXJ2YWxzIGZvciB0aGUgYmFyIGlzIDMwbXMu
Ci0vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmI3NjA4NDIodj1W
Uy44NSkuYXNweAotc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0
ZSA9IDAuMDMzOwotCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwotfQotCi1kb3VibGUgUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbjo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Ci17Ci0gICAgLy8gT24gQ2hyb21pdW0gV2luZG93
cyBwb3J0LCBhbmltYXRpb25Qcm9ncmVzcygpIGFuZCBhc3NvY2lhdGVkIHZhbHVlcyBhcmVuJ3Qg
dXNlZC4KLSAgICAvLyBTbyBoZXJlIHdlIGNhbiByZXR1cm4gYXJiaXRyYXJ5IHBvc2l0aXZlIHZh
bHVlLgotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAotewotfQotCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNz
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclBy
b2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKLSAgICAvLyBGb3IgaW5kZXRlcm1pbmF0ZSBi
YXIsIHZhbHVlUmVjdCBpcyBpZ25vcmVkIGFuZCBpdCBpcyBjb21wdXRlZCBieSB0aGUgdGhlbWUg
ZW5naW5lCi0gICAgLy8gYmVjYXVzZSB0aGUgYW5pbWF0aW9uIGlzIGEgcGxhdGZvcm0gZGV0YWls
IGFuZCBXZWJLaXQgZG9lc24ndCBuZWVkIHRvIGtub3cgaG93LgotICAgIEludFJlY3QgdmFsdWVS
ZWN0ID0gcmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSA/IGRldGVybWluYXRlUHJvZ3Jl
c3NWYWx1ZVJlY3RGb3IocmVuZGVyUHJvZ3Jlc3MsIHIpIDogSW50UmVjdCgwLCAwLCAwLCAwKTsK
LSAgICBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzID0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblN0
YXJ0VGltZSgpID8gIFdURjo6Y3VycmVudFRpbWUoKSAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRp
b25TdGFydFRpbWUoKSA6IDA7Ci0gICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCBy
KTsKLSAgICBEaXJlY3Rpb25GbGlwcGluZ1Njb3BlIHNjb3BlKG8sIGksIHIpOwotICAgIFdlYktp
dDo6V2ViQ2FudmFzKiBjYW52YXMgPSBwYWludGVyLmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpOwotICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+dGhlbWVFbmdp
bmUoKS0+cGFpbnRQcm9ncmVzc0JhcihjYW52YXMsIFdlYktpdDo6V2ViUmVjdChyKSwgV2ViS2l0
OjpXZWJSZWN0KHZhbHVlUmVjdCksIHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCksIGFu
aW1hdGVkU2Vjb25kcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpzaG91bGRPcGVuUGlja2VyV2l0aEY0S2V5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5o
CShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtV2luX2gKLSNk
ZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbl9oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5oIgotCi0jaWYgV0lOMzIKLXR5cGVkZWYgdm9pZCogSEFORExFOwotdHlwZWRl
ZiBzdHJ1Y3QgSElOU1RBTkNFX18qIEhJTlNUQU5DRTsKLXR5cGVkZWYgSElOU1RBTkNFIEhNT0RV
TEU7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgVGhlbWVEYXRhIHsK
LSAgICBUaGVtZURhdGEoKSA6IG1fcGFydCgwKSwgbV9zdGF0ZSgwKSwgbV9jbGFzc2ljU3RhdGUo
MCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBtX3BhcnQ7Ci0gICAgdW5zaWduZWQgbV9zdGF0ZTsKLSAg
ICB1bnNpZ25lZCBtX2NsYXNzaWNTdGF0ZTsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lQ2hyb21p
dW1XaW4gOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKLQotICAgIC8vIEEgbWV0aG9k
IGFza2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
IE9WRVJSSURFOwotCi0gICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICB2
aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVUZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCBPVkVSUklERTsK
LQotICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0IE9W
RVJSSURFOwotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRT
aXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2xp
ZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIFZhcmlvdXMgcGFpbnQgZnVuY3Rpb25zLgot
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0KLSAgICAvLyBNZW51TGlzdCByZWZl
cnMgdG8gYW4gdW5zdHlsZWQgbWVudWxpc3QgKG1lYW5pbmcgYSBtZW51bGlzdCB3aXRob3V0Ci0g
ICAgLy8gYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RCdXR0b24g
cmVmZXJzIHRvIGEgc3R5bGVkCi0gICAgLy8gbWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0aCBiYWNr
Z3JvdW5kLWNvbG9yIG9yIGJvcmRlciBzZXQpLiBUaGV5IGhhdmUKLSAgICAvLyB0aGlzIGRpc3Rp
bmN0aW9uIHRvIHN1cHBvcnQgc2hvd2luZyBhcXVhIHN0eWxlIHRoZW1lcyB3aGVuZXZlciB0aGV5
Ci0gICAgLy8gcG9zc2libHkgY2FuLCB3aGljaCBpcyBzb21ldGhpbmcgd2UgZG9uJ3Qgd2FudCB0
byByZXBsaWNhdGUuCi0gICAgLy8KLSAgICAvLyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24g
dGhlIE1lbnVMaXN0IGNvZGUgcGF0aCBvciB0aGUgTWVudUxpc3RCdXR0b24KLSAgICAvLyBjb2Rl
cGF0aC4gV2UgbmV2ZXIgZ28gZG93biBib3RoLiBBbmQgaW4gYm90aCBjYXNlcywgdGhleSByZW5k
ZXIgdGhlCi0gICAgLy8gZW50aXJlIG1lbnVsaXN0LgotICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBP
VkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLQotI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
KikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgdmly
dHVhbCBib29sIHNob3VsZE9wZW5QaWNrZXJXaXRoRjRLZXkoKSBjb25zdCBPVkVSUklERTsKLQot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFs
KCkgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBDb250cm9sU3ViUGFydCB7
Ci0gICAgICAgIE5vbmUsCi0gICAgICAgIFNwaW5CdXR0b25Eb3duLAotICAgICAgICBTcGluQnV0
dG9uVXAsCi0gICAgfTsKLQotICAgIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4oKSB7IH0KLSAgICB2
aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtV2luKCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBkZXRl
cm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOwotICAgIHVu
c2lnbmVkIGRldGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdW5z
aWduZWQgZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKFJlbmRlck9iamVjdCosIENvbnRyb2xTdWJQYXJ0
ID0gTm9uZSk7Ci0KLSAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCosIENv
bnRyb2xTdWJQYXJ0ID0gTm9uZSk7Ci0KLSAgICBib29sIHBhaW50VGV4dEZpZWxkSW50ZXJuYWwo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIGJvb2wpOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1NoYXJlZC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWNTaGFyZWQubW0JKHJldmlzaW9uIDE0
NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1NoYXJlZC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTQzMywxMiArMTQzMyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWNTaGFyZWQ6OnBhaW50U2xpZGVyVGgKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwg
dW56b29tZWRSZWN0LnkoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgLSh1bnpvb21l
ZFJlY3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdodCgpKSk7Ci0jZW5kaWYKLQogICAgIFtzbGlk
ZXJUaHVtYkNlbGwgZHJhd0ludGVyaW9yV2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6ZG9j
dW1lbnRWaWV3Rm9yKG8pXTsKICAgICBbc2xpZGVyVGh1bWJDZWxsIHNldENvbnRyb2xWaWV3Om5p
bF07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>