<?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>204483</bug_id>
          
          <creation_ts>2019-11-21 17:43:49 -0800</creation_ts>
          <short_desc>[Win] Try splitting out MiniBrowserLegacy from MiniBrowser</short_desc>
          <delta_ts>2019-11-25 18:12:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pvollan</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592609</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-21 17:43:49 -0800</bug_when>
    <thetext>An idea that Don suggested:

We might like to get rid of WKL for WinCairo, but it&apos;s important that we don&apos;t break AppleWin.

Now, we could add #ifs to allow for a complete --no-legacy build, but presumably our bots would still need to build both, meaning that the flag could get stale.

What would work though, is to have separate WK1 and WK2 MiniBrowser executables, along the same lines as DRT / WKTR.

---

My understanding is that Fujii-san is not on board with this idea, but I hope that a concrete patch will enable us to have a rational discussion about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592613</commentid>
    <comment_count>1</comment_count>
      <attachid>384112</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-21 17:55:13 -0800</bug_when>
    <thetext>Created attachment 384112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592617</commentid>
    <comment_count>2</comment_count>
      <attachid>384112</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-21 18:02:11 -0800</bug_when>
    <thetext>Comment on attachment 384112
Patch

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

&gt; Tools/ChangeLog:10
&gt; +        Procedure:

I forgot step 0: Use the Windows message loop directly on WK2 (and not IWebKitMessageLoopPtr). That part needs to be done with or without this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592712</commentid>
    <comment_count>3</comment_count>
      <attachid>384112</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-22 02:53:39 -0800</bug_when>
    <thetext>Comment on attachment 384112
Patch

As you know I strongly objecting this idea. Don&apos;t copy the code at the moment. It increase my maintained cost of webkit1 and webkit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593542</commentid>
    <comment_count>4</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-25 18:12:36 -0800</bug_when>
    <thetext>Closing in favor of bug 204592.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384112</attachid>
            <date>2019-11-21 17:55:13 -0800</date>
            <delta_ts>2019-11-22 02:53:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204483-20191121175512.patch</filename>
            <type>text/plain</type>
            <size>306878</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzZlZDFiNjY5YjU0YWUyYmU0M2EzNGY5ZWM0Y2U4Y2Fl
OTBkYmE3Yi4uODUyOTFiNDU3OTE5MzUwZjIyZGEwM2UyYjMyOGM5NTg0ODU3MmJiZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYy
IEBACisyMDE5LTExLTIxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
KworICAgICAgICBbV2luXSBUcnkgc3BsaXR0aW5nIG91dCBNaW5pQnJvd3NlckxlZ2FjeSBmcm9t
IE1pbmlCcm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDQ0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUdXJuIFdpbmRvd3MgTWluaUJyb3dzZXIgaW50byBzZXBhcmF0ZSBXSzEgYW5kIFdLMiBl
eGVjdXRhYmxlcywgYSBsYSBEdW1wUmVuZGVyVHJlZSBhbmQgV2ViS2l0VGVzdFJ1bm5lci4KKwor
ICAgICAgICBQcm9jZWR1cmU6CisgICAgICAgIDEuIENvcHkgTWluaUJyb3dzZXIvd2luIHRvIE1p
bmlCcm93c2VyL3dpbi13a2wgYW5kIG5hbWUgdGhlIGxhdHRlciBNaW5pQnJvd3NlckxlZ2FjeS4K
KyAgICAgICAgMi4gRGVsZXRlIHVubmVjZXNzYXJ5IGZpbGVzIC8gI2lmcyBmcm9tIGVhY2guCisg
ICAgICAgIDMuIERvIGF3YXkgd2l0aCBCcm93c2VyV2luZG93IGJhc2UgY2xhc3MsIHdoaWNoIGlz
IHJlbmRlcmVkIHVubmVjZXNzYXJ5LiAKKworICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi13a2wv
QWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL01pbmlCcm93c2Vy
L3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvQWNjZXNzaWJpbGl0eURlbGVnYXRlLmg6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJv
d3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmguCisgICAgICAgICogTWluaUJyb3dzZXIv
d2luLXdrbC9Ccm93c2VyV2luZG93Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93
c2VyL3dpbi13a2wvQ01ha2VMaXN0cy50eHQ6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2Vy
L3dpbi13a2wvQ29tbW9uLmNwcDogQ29waWVkIGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2luL0Nv
bW1vbi5jcHAuCisgICAgICAgICogTWluaUJyb3dzZXIvd2luLXdrbC9Db21tb24uaDogQ29waWVk
IGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5oLgorICAgICAgICAqIE1pbmlCcm93
c2VyL3dpbi13a2wvRGlhbG9nSGVscGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2Vy
L3dpbi13a2wvTWFpbldpbmRvdy5jcHA6IENvcGllZCBmcm9tIFRvb2xzL01pbmlCcm93c2VyL3dp
bi9NYWluV2luZG93LmNwcC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4td2tsL01haW5XaW5k
b3cuaDogQ29waWVkIGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaC4KKyAg
ICAgICAgKiBNaW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5LmljbzogQ29waWVk
IGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmljby4KKyAgICAgICAgKiBN
aW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5LnJjOiBDb3BpZWQgZnJvbSBUb29s
cy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIucmMuCisgICAgICAgICogTWluaUJyb3dzZXIv
d2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeUxpYi5yYzogQ29waWVkIGZyb20gVG9vbHMvTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyTGliLnJjLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi13
a2wvTWluaUJyb3dzZXJMZWdhY3lMaWJSZXNvdXJjZS5oOiBDb3BpZWQgZnJvbSBUb29scy9NaW5p
QnJvd3Nlci93aW4vTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oLgorICAgICAgICAqIE1pbmlCcm93
c2VyL3dpbi13a2wvTWluaUJyb3dzZXJMZWdhY3lSZXNvdXJjZS5oOiBDb3BpZWQgZnJvbSBUb29s
cy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJSZXNvdXJjZS5oLgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi13a2wvTWluaUJyb3dzZXJSZXBsYWNlLmg6IENvcGllZCBmcm9tIFRvb2xzL01p
bmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlclJlcGxhY2UuaC4KKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci93aW4td2tsL01pbmlCcm93c2VyV2ViSG9zdC5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5p
QnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmNwcC4KKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci93aW4td2tsL01pbmlCcm93c2VyV2ViSG9zdC5oOiBSZW5hbWVkIGZyb20gVG9vbHMvTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyV2ViSG9zdC5oLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvUHJpbnRXZWJVSURlbGVnYXRlLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL01pbmlCcm93
c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvUHJpbnRXZWJVSURlbGVnYXRlLmg6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJvd3Nl
ci93aW4vUHJpbnRXZWJVSURlbGVnYXRlLmguCisgICAgICAgICogTWluaUJyb3dzZXIvd2luLXdr
bC9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJvd3Nl
ci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvUmVzb3VyY2VMb2FkRGVsZWdhdGUuaDogUmVuYW1lZCBmcm9tIFRvb2xzL01pbmlCcm93
c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5oLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJv
d3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHAuCisgICAgICAgICogTWluaUJyb3dzZXIv
d2luLXdrbC9XZWJEb3dubG9hZERlbGVnYXRlLmg6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJv
d3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5oLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi13a2wvV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9N
aW5pQnJvd3Nlci93aW4vV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5jcHAuCisgICAgICAgICog
TWluaUJyb3dzZXIvd2luLXdrbC9XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Lmg6IFJlbmFtZWQg
ZnJvbSBUb29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi13a2wvV2luTWFpbi5jcHA6IENvcGllZCBmcm9tIFRv
b2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93
aW4td2tsL3Jlc291cmNlLmg6IENvcGllZCBmcm9tIFRvb2xzL01pbmlCcm93c2VyL3dpbi9yZXNv
dXJjZS5oLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi13a2wvc21hbGwuaWNvOiBDb3BpZWQg
ZnJvbSBUb29scy9NaW5pQnJvd3Nlci93aW4vc21hbGwuaWNvLgorICAgICAgICAqIE1pbmlCcm93
c2VyL3dpbi13a2wvc3RkYWZ4LmNwcDogQ29waWVkIGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2lu
L3N0ZGFmeC5jcHAuCisgICAgICAgICogTWluaUJyb3dzZXIvd2luLXdrbC9zdGRhZnguaDogQ29w
aWVkIGZyb20gVG9vbHMvTWluaUJyb3dzZXIvd2luL3N0ZGFmeC5oLgorCisgICAgICAgICogTWlu
aUJyb3dzZXIvd2luL0Jyb3dzZXJXaW5kb3cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9Ccm93c2VyV2luZG93Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29tbW9uLmg6CisgICAgICAgICog
TWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi9NYWluV2luZG93Lmg6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGli
LnJjOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmg6
CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwOgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcDoKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci93aW4vc3RkYWZ4Lmg6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisKIDIwMTktMTEt
MjEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gV2ViIHByb2Nlc3MgY3Jhc2hlcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVxdWVzdCBkb2N1bWVu
dCBjb250ZXh0IGluIGEgdGV4dGFyZWEKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi13a2wvQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY4OGJkNzM5YWY4ZDM3
NTZlMzMyZDZhMTBmNTkyMWIzM2FkM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luLXdrbC9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIgorCisj
aW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgorI2luY2x1ZGUgPFdlYktpdExl
Z2FjeS9XZWJLaXRDT01BUEkuaD4KKworSFJFU1VMVCBBY2Nlc3NpYmlsaXR5RGVsZWdhdGU6OlF1
ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2T2Jq
ZWN0KQoreworICAgIGlmICghcHB2T2JqZWN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
ICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9J
VW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJpbGl0
eURlbGVnYXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSUFj
Y2Vzc2liaWxpdHlEZWxlZ2F0ZSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJ
QWNjZXNzaWJpbGl0eURlbGVnYXRlKj4odGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
RV9OT0lOVEVSRkFDRTsKKworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitV
TE9ORyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGU6OkFkZFJlZigpCit7CisgICAgcmV0dXJuICsrbV9y
ZWZDb3VudDsKK30KKworVUxPTkcgQWNjZXNzaWJpbGl0eURlbGVnYXRlOjpSZWxlYXNlKCkKK3sK
KyAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiBuZXdSZWY7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJpbGl0eURlbGVnYXRlOjpmaXJlRnJhbWVMb2FkU3RhcnRlZEV2ZW50cygpCit7CisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJpbGl0eURlbGVnYXRlOjpmaXJlRnJhbWVM
b2FkRmluaXNoZWRFdmVudHMoKQoreworICAgIHJldHVybiBTX09LOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaCBiL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi13a2wvQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjMwODRjZjAyNWEwMThiZWIxOTlmYWNmMzlkOGU3OGJiMjRlNDY2YgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQu
aD4KKworY2xhc3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzsKKworY2xhc3MgQWNjZXNzaWJp
bGl0eURlbGVnYXRlIDogcHVibGljIElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUgeworcHVibGljOgor
ICAgIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBjbGll
bnQpCisgICAgICAgIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9P
dXRwdHJfIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FM
TFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxl
YXNlKCk7CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZmlyZUZyYW1l
TG9hZFN0YXJ0ZWRFdmVudHMoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgZmlyZUZyYW1lTG9hZEZpbmlzaGVkRXZlbnRzKCk7Citwcml2YXRlOgorICAgIFVMT05HIG1f
cmVmQ291bnQgeyAwIH07CisgICAgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgbV9jbGllbnQ7
Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9Ccm93c2VyV2luZG93
Q2xpZW50LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0Jyb3dzZXJXaW5kb3dDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43OWQwYWYzNDBiOThjNjE2NmM2OTgyMzBmYjk2ODFiOGE0MTc2NDQwCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9Ccm93c2VyV2luZG93
Q2xpZW50LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworY2xhc3MgQnJvd3NlcldpbmRvd0Ns
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHByb2dyZXNzQ2hhbmdlZChkb3VibGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZ3Jlc3NGaW5pc2hlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWN0aXZlVVJMQ2hhbmdlZChzdGQ6OndzdHJpbmcpID0gMDsKK307CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luLXdrbC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWQ4OWY1MzJhMDA2
MGVjZGUyMzMwZGJhZWRlZTU3NjY3OTZlYTZkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luLXdrbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUzIEBACitzZXQoTWlu
aUJyb3dzZXJMZWdhY3lfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICR7UEFMX0ZSQU1FV09SS19I
RUFERVJTX0RJUn0KKyAgICAke1dlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSU19ESVJ9
CisgICAgJHtXZWJLaXRMZWdhY3lfRlJBTUVXT1JLX0hFQURFUlNfRElSfQorKQorCitzZXQoTWlu
aUJyb3dzZXJMZWdhY3lfU09VUkNFUworICAgIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5jcHAKKyAg
ICBDb21tb24uY3BwCisgICAgTWFpbldpbmRvdy5jcHAKKyAgICBNaW5pQnJvd3NlckxlZ2FjeUxp
Yi5yYworICAgIE1pbmlCcm93c2VyV2ViSG9zdC5jcHAKKyAgICBQcmludFdlYlVJRGVsZWdhdGUu
Y3BwCisgICAgUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCisgICAgV2ViRG93bmxvYWREZWxlZ2F0
ZS5jcHAKKyAgICBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmNwcAorICAgIFdpbk1haW4uY3Bw
CisgICAgc3RkYWZ4LmNwcAorKQorCitzZXQoTWluaUJyb3dzZXJMZWdhY3lfTElCUkFSSUVTCisg
ICAgRGJnSGVscAorICAgIFdlYktpdDo6V1RGCisgICAgV2ViS2l0TGVnYWN5CisgICAgV2ViS2l0
TGVnYWN5R1VJRAorICAgIGNvbWN0bDMyCisgICAgY29tc3VwcAorICAgIGNvbXN1cHB3CisgICAg
c2hsd2FwaQorKQorCitpZiAoVVNFX0NGKQorICAgIGxpc3QoQVBQRU5EIE1pbmlCcm93c2VyTGVn
YWN5X0xJQlJBUklFUworICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9CisgICAgKQor
ZW5kaWYgKCkKKworc2V0KENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVE
X0xJTktFUl9GTEFHU30gJHtNU1ZDX1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCitzZXQoQ01BS0Vf
RVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvRU5UUlk6d1dpbk1h
aW5DUlRTdGFydHVwIikKKworaWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlST30pCisgICAgYWRk
X2RlZmluaXRpb25zKC1EV0lOX0NBSVJPKQorZW5kaWYgKCkKK2FkZF9kZWZpbml0aW9ucygtRF9V
TklDT0RFKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke01pbmlCcm93c2VyTGVnYWN5X0lOQ0xVREVf
RElSRUNUT1JJRVN9KQorYWRkX2xpYnJhcnkoTWluaUJyb3dzZXJMZWdhY3lMaWIgU0hBUkVEICR7
TWluaUJyb3dzZXJMZWdhY3lfU09VUkNFU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWluaUJy
b3dzZXJMZWdhY3lMaWIgJHtNaW5pQnJvd3NlckxlZ2FjeV9MSUJSQVJJRVN9KQorCithZGRfZXhl
Y3V0YWJsZShNaW5pQnJvd3NlckxlZ2FjeSBXSU4zMiAke1RPT0xTX0RJUn0vd2luL0RMTExhdW5j
aGVyL0RMTExhdW5jaGVyTWFpbi5jcHAgTWluaUJyb3dzZXJMZWdhY3kucmMpCit0YXJnZXRfbGlu
a19saWJyYXJpZXMoTWluaUJyb3dzZXJMZWdhY3kgc2hsd2FwaSkKK3NldF90YXJnZXRfcHJvcGVy
dGllcyhNaW5pQnJvd3NlckxlZ2FjeSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FICJNaW5pQnJvd3Nl
ckxlZ2FjeSIpCisKK2FkZF9kZXBlbmRlbmNpZXMoTWluaUJyb3dzZXJMZWdhY3kgTWluaUJyb3dz
ZXJMZWdhY3lMaWIpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0NvbW1v
bi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0NvbW1vbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzZjOGZiNzAzZWNkNmM4NTViMmUwMzQ1ZTNlNjg4NDFiMDNhY2U1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvQ29tbW9uLmNwcApAQCAtMCwwICsxLDI5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQnJlbnQg
RnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEgQXBwY2VsZXJhdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJzdGRh
ZnguaCIKKyNpbmNsdWRlICJDb21tb24uaCIKKworI2luY2x1ZGUgIkRpYWxvZ0hlbHBlci5oIgor
I2luY2x1ZGUgIk1pbmlCcm93c2VyTGVnYWN5TGliUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJNaW5p
QnJvd3NlclJlcGxhY2UuaCIKKyNpbmNsdWRlIDxkYmdoZWxwLmg+CisjaW5jbHVkZSA8c2hsb2Jq
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCisvLyBHbG9iYWwgVmFyaWFibGVzOgorSElOU1RBTkNFIGhJbnN0OworCisvLyBTdXBw
b3J0IG1vdmluZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CitQT0lOVCBzX3dpbmRvd1Bvc2l0aW9u
ID0geyAxMDAsIDEwMCB9OworU0laRSBzX3dpbmRvd1NpemUgPSB7IDUwMCwgMjAwIH07CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2Zsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KEhXTkQp
OworfQorCit2b2lkIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCkKK3sKKyAgICBSRUNUIGRlc2t0
b3A7CisgICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXT1JLQVJFQSwgMCwg
c3RhdGljX2Nhc3Q8dm9pZCo+KCZkZXNrdG9wKSwgMCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3co
bnVsbHB0cik7CisKKyAgICBzX3dpbmRvd1Bvc2l0aW9uLnggPSAwOworICAgIHNfd2luZG93UG9z
aXRpb24ueSA9IDA7CisgICAgc193aW5kb3dTaXplLmN4ID0gc2NhbGVGYWN0b3IgKiAoZGVza3Rv
cC5yaWdodCAtIGRlc2t0b3AubGVmdCk7CisgICAgc193aW5kb3dTaXplLmN5ID0gc2NhbGVGYWN0
b3IgKiAoZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcCk7Cit9CisKK0JPT0wgV0lOQVBJIERs
bE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCkKK3sKKyAg
ICBpZiAocmVhc29uID09IERMTF9QUk9DRVNTX0FUVEFDSCkKKyAgICAgICAgaEluc3QgPSBkbGxJ
bnN0YW5jZTsKKworICAgIHJldHVybiBUUlVFOworfQorCitib29sIGdldEFwcERhdGFGb2xkZXIo
X2JzdHJfdCYgZGlyZWN0b3J5KQoreworICAgIHdjaGFyX3QgYXBwRGF0YURpcmVjdG9yeVtNQVhf
UEFUSF07CisgICAgaWYgKEZBSUxFRChTSEdldEZvbGRlclBhdGhXKDAsIENTSURMX0xPQ0FMX0FQ
UERBVEEgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYXBwRGF0YURpcmVjdG9yeSkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB3Y2hhcl90IGV4ZWN1dGFibGVQYXRoW01BWF9QQVRI
XTsKKyAgICBpZiAoITo6R2V0TW9kdWxlRmlsZU5hbWVXKDAsIGV4ZWN1dGFibGVQYXRoLCBNQVhf
UEFUSCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIDo6UGF0aFJlbW92ZUV4dGVuc2lv
blcoZXhlY3V0YWJsZVBhdGgpOworCisgICAgZGlyZWN0b3J5ID0gX2JzdHJfdChhcHBEYXRhRGly
ZWN0b3J5KSArIEwiXFwiICsgOjpQYXRoRmluZEZpbGVOYW1lVyhleGVjdXRhYmxlUGF0aCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBjcmVhdGVDcmFzaFJlcG9ydChFWENFUFRJT05f
UE9JTlRFUlMqIGV4Y2VwdGlvblBvaW50ZXJzKQoreworICAgIF9ic3RyX3QgZGlyZWN0b3J5Owor
CisgICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGRpcmVjdG9yeSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICg6OlNIQ3JlYXRlRGlyZWN0b3J5RXgoMCwgZGlyZWN0b3J5LCAwKSAhPSBFUlJP
Ul9TVUNDRVNTCisgICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRklMRV9FWElT
VFMKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9BTFJFQURZX0VYSVNUUykK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp3c3RyaW5nIGZpbGVOYW1lID0gc3RkOjp3c3Ry
aW5nKHN0YXRpY19jYXN0PGNvbnN0IHdjaGFyX3QqPihkaXJlY3RvcnkpKSArIEwiXFxDcmFzaFJl
cG9ydC5kbXAiOworICAgIEhBTkRMRSBtaW5pRHVtcEZpbGUgPSA6OkNyZWF0ZUZpbGUoZmlsZU5h
bWUuY19zdHIoKSwgR0VORVJJQ19XUklURSwgMCwgMCwgQ1JFQVRFX0FMV0FZUywgRklMRV9BVFRS
SUJVVEVfTk9STUFMLCAwKTsKKworICAgIGlmIChtaW5pRHVtcEZpbGUgJiYgbWluaUR1bXBGaWxl
ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisKKyAgICAgICAgTUlOSURVTVBfRVhDRVBUSU9O
X0lORk9STUFUSU9OIG1kZWk7CisgICAgICAgIG1kZWkuVGhyZWFkSWQgPSA6OkdldEN1cnJlbnRU
aHJlYWRJZCgpOworICAgICAgICBtZGVpLkV4Y2VwdGlvblBvaW50ZXJzICA9IGV4Y2VwdGlvblBv
aW50ZXJzOworICAgICAgICBtZGVpLkNsaWVudFBvaW50ZXJzID0gMDsKKworI2lmZGVmIF9ERUJV
RworICAgICAgICBNSU5JRFVNUF9UWVBFIGR1bXBUeXBlID0gTWluaUR1bXBXaXRoRnVsbE1lbW9y
eTsKKyNlbHNlCisgICAgICAgIE1JTklEVU1QX1RZUEUgZHVtcFR5cGUgPSBNaW5pRHVtcE5vcm1h
bDsKKyNlbmRpZgorCisgICAgICAgIDo6TWluaUR1bXBXcml0ZUR1bXAoOjpHZXRDdXJyZW50UHJv
Y2VzcygpLCA6OkdldEN1cnJlbnRQcm9jZXNzSWQoKSwgbWluaUR1bXBGaWxlLCBkdW1wVHlwZSwg
Jm1kZWksIDAsIDApOworICAgICAgICA6OkNsb3NlSGFuZGxlKG1pbmlEdW1wRmlsZSk7CisgICAg
ICAgIHByb2Nlc3NDcmFzaFJlcG9ydChmaWxlTmFtZS5jX3N0cigpKTsKKyAgICB9Cit9CisKK2Jv
b2wgYXNrUHJveHlTZXR0aW5ncyhIV05EIGh3bmQsIFByb3h5U2V0dGluZ3MmIHNldHRpbmdzKQor
eworICAgIGNsYXNzIFByb3h5RGlhbG9nIDogcHVibGljIERpYWxvZyB7CisgICAgcHVibGljOgor
ICAgICAgICBQcm94eURpYWxvZyhQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKKyAgICAgICAgICAg
IDogc2V0dGluZ3MgeyBzZXR0aW5ncyB9CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBQcm94eVNldHRpbmdzJiBzZXR0aW5nczsKKworICAgICAgICB2b2lk
IHNldHVwKCkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjb21tYW5kID0gY29t
bWFuZEZvclByb3h5Q2hvaWNlKCk7CisgICAgICAgICAgICBwcm94eUNob2ljZSgpLnNldChjb21t
YW5kKTsKKyAgICAgICAgICAgIHNldFRleHQoSURDX1BST1hZX1VSTCwgc2V0dGluZ3MudXJsKTsK
KyAgICAgICAgICAgIHNldFRleHQoSURDX1BST1hZX0VYQ0xVREUsIHNldHRpbmdzLmV4Y2x1ZGVI
b3N0cyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG9rKCkgZmluYWwKKyAgICAgICAgewor
ICAgICAgICAgICAgc2V0dGluZ3MudXJsID0gZ2V0VGV4dChJRENfUFJPWFlfVVJMKTsKKyAgICAg
ICAgICAgIHNldHRpbmdzLmV4Y2x1ZGVIb3N0cyA9IGdldFRleHQoSURDX1BST1hZX0VYQ0xVREUp
OworICAgICAgICAgICAgdXBkYXRlUHJveHlDaG9pY2UocHJveHlDaG9pY2UoKS5nZXQoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHZhbGlkYXRlKCkgZmluYWwKKyAgICAgICAgeworICAg
ICAgICAgICAgYm9vbCB2YWxpZCA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChwcm94eUNob2lj
ZSgpLmdldCgpID09IElEQ19QUk9YWV9DVVNUT00pIHsKKyAgICAgICAgICAgICAgICBzZXRFbmFi
bGVkKElEQ19QUk9YWV9VUkwsIHRydWUpOworICAgICAgICAgICAgICAgIHNldEVuYWJsZWQoSURD
X1BST1hZX0VYQ0xVREUsIHRydWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFnZXRUZXh0TGVu
Z3RoKElEQ19QUk9YWV9VUkwpKQorICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRFbmFibGVkKElEQ19QUk9Y
WV9VUkwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzZXRFbmFibGVkKElEQ19QUk9YWV9FWENM
VURFLCBmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB2YWxpZDsK
KyAgICAgICAgfQorCisgICAgICAgIFJhZGlvR3JvdXAgcHJveHlDaG9pY2UoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gcmFkaW9Hcm91cChJRENfUFJPWFlfREVGQVVMVCwgSURDX1BS
T1hZX0RJU0FCTEUpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGNvbW1hbmRGb3JQcm94eUNo
b2ljZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MuZW5hYmxlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBJRENfUFJPWFlfRElTQUJMRTsKKyAgICAgICAgICAgIGlmIChz
ZXR0aW5ncy5jdXN0b20pCisgICAgICAgICAgICAgICAgcmV0dXJuIElEQ19QUk9YWV9DVVNUT007
CisgICAgICAgICAgICByZXR1cm4gSURDX1BST1hZX0RFRkFVTFQ7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHVwZGF0ZVByb3h5Q2hvaWNlKGludCBjb21tYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgSURDX1BST1hZX0RF
RkFVTFQ6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBzZXR0aW5ncy5jdXN0b20gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgSURDX1BST1hZX0NVU1RPTToKKyAgICAgICAgICAgICAgICBzZXR0
aW5ncy5lbmFibGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHNldHRpbmdzLmN1c3RvbSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElEQ19QUk9YWV9E
SVNBQkxFOgorICAgICAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIHNldHRpbmdzLmN1c3RvbSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBQcm94eURpYWxvZyBkaWFsb2cgeyBzZXR0
aW5ncyB9OworICAgIHJldHVybiBkaWFsb2cucnVuKGhJbnN0LCBod25kLCBJRERfUFJPWFkpOwor
fQorCitPcHRpb25hbDxDcmVkZW50aWFsPiBhc2tDcmVkZW50aWFsKEhXTkQgaHduZCwgY29uc3Qg
c3RkOjp3c3RyaW5nJiByZWFsbSkKK3sKKyAgICBzdHJ1Y3QgQXV0aERpYWxvZyA6IHB1YmxpYyBE
aWFsb2cgeworICAgICAgICBzdGQ6OndzdHJpbmcgcmVhbG07CisgICAgICAgIENyZWRlbnRpYWwg
Y3JlZGVudGlhbDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBzZXR1cCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNldFRleHQoSURDX1JFQUxNX1RFWFQsIHJlYWxtKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgb2soKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBj
cmVkZW50aWFsLnVzZXJuYW1lID0gZ2V0VGV4dChJRENfQVVUSF9VU0VSKTsKKyAgICAgICAgICAg
IGNyZWRlbnRpYWwucGFzc3dvcmQgPSBnZXRUZXh0KElEQ19BVVRIX1BBU1NXT1JEKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBBdXRoRGlhbG9nIGRpYWxvZzsKKyAgICBkaWFsb2cucmVhbG0g
PSByZWFsbTsKKworICAgIGlmIChkaWFsb2cucnVuKGhJbnN0LCBod25kLCBJRERfQVVUSCkpCisg
ICAgICAgIHJldHVybiBkaWFsb2cuY3JlZGVudGlhbDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCitib29sIGFza1NlcnZlclRydXN0RXZhbHVhdGlvbihIV05EIGh3bmQsIGNvbnN0IHN0
ZDo6d3N0cmluZyYgcGVtcykKK3sKKyAgICBjbGFzcyBTZXJ2ZXJUcnVzdEV2YWx1YXRpb25EaWFs
b2cgOiBwdWJsaWMgRGlhbG9nIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNlcnZlclRydXN0RXZh
bHVhdGlvbkRpYWxvZyhjb25zdCBzdGQ6OndzdHJpbmcmIHBlbXMpCisgICAgICAgICAgICA6IG1f
cGVtcyB7IHBlbXMgfQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kTWVzc2FnZShHZXREbGdJ
dGVtKHRoaXMtPmhEbGcoKSwgSURDX1NFUlZFUl9UUlVTVF9URVhUKSwgV01fU0VURk9OVCwgKFdQ
QVJBTSlHZXRTdG9ja09iamVjdChBTlNJX0ZJWEVEX0ZPTlQpLCBUUlVFKTsKKyAgICAgICAgfQor
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBzdGQ6OndzdHJpbmcgbV9wZW1zOworCisgICAgICAg
IHZvaWQgc2V0dXAoKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRUZXh0KElEQ19TRVJWRVJf
VFJVU1RfVEVYVCwgbV9wZW1zKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgb2soKSBmaW5h
bAorICAgICAgICB7CisKKyAgICAgICAgfQorICAgIH07CisKKyAgICBTZXJ2ZXJUcnVzdEV2YWx1
YXRpb25EaWFsb2cgZGlhbG9nIHsgcGVtcyB9OworICAgIHJldHVybiBkaWFsb2cucnVuKGhJbnN0
LCBod25kLCBJRERfU0VSVkVSX1RSVVNUKTsKK30KKworQ29tbWFuZExpbmVPcHRpb25zIHBhcnNl
Q29tbWFuZExpbmUoKQoreworICAgIENvbW1hbmRMaW5lT3B0aW9ucyBvcHRpb25zOworCisgICAg
aW50IGFyZ2MgPSAwOworICAgIFdDSEFSKiogYXJndiA9IENvbW1hbmRMaW5lVG9Bcmd2VyhHZXRD
b21tYW5kTGluZVcoKSwgJmFyZ2MpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytp
KSB7CisgICAgICAgIGlmICghd2NzaWNtcChhcmd2W2ldLCBMIi0tdHJhbnNwYXJlbnQiKSkKKyAg
ICAgICAgICAgIG9wdGlvbnMudXNlc0xheWVyZWRXZWJWaWV3ID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLWRlc2t0b3AiKSkKKyAgICAgICAgICAgIG9wdGlv
bnMudXNlRnVsbERlc2t0b3AgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5yZXF1
ZXN0ZWRVUkwpCisgICAgICAgICAgICBvcHRpb25zLnJlcXVlc3RlZFVSTCA9IGFyZ3ZbaV07Cisg
ICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK3N0ZDo6d3N0cmluZyByZXBsYWNlU3Ry
aW5nKHN0ZDo6d3N0cmluZyBzcmMsIGNvbnN0IHN0ZDo6d3N0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IHN0ZDo6d3N0cmluZyYgbmV3VmFsdWUpCit7CisgICAgaWYgKHNyYy5lbXB0eSgpIHx8IG9sZFZh
bHVlLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBzcmM7CisKKyAgICBzaXplX3QgcG9zID0gMDsK
KyAgICB3aGlsZSAoKHBvcyA9IHNyYy5maW5kKG9sZFZhbHVlLCBwb3MpKSAhPSBzcmMubnBvcykg
eworICAgICAgICBzcmMucmVwbGFjZShwb3MsIG9sZFZhbHVlLmxlbmd0aCgpLCBuZXdWYWx1ZSk7
CisgICAgICAgIHBvcyArPSBuZXdWYWx1ZS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3JjOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9Db21tb24uaCBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWI3ZDJmNjBk
YmU2MmIxYzlkNmFjYTg5MDAxODJlMDlkOTgzYjgyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi13a2wvQ29tbW9uLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCitzdHJ1Y3QgQ29tbWFuZExpbmVPcHRpb25zIHsK
KyAgICBib29sIHVzZXNMYXllcmVkV2ViVmlldyB7IH07CisgICAgYm9vbCB1c2VGdWxsRGVza3Rv
cCB7IH07CisgICAgX2JzdHJfdCByZXF1ZXN0ZWRVUkw7Cit9OworCitzdHJ1Y3QgQ3JlZGVudGlh
bCB7CisgICAgc3RkOjp3c3RyaW5nIHVzZXJuYW1lOworICAgIHN0ZDo6d3N0cmluZyBwYXNzd29y
ZDsKK307CisKK3N0cnVjdCBQcm94eVNldHRpbmdzIHsKKyAgICBib29sIGVuYWJsZSB7IHRydWUg
fTsKKyAgICBib29sIGN1c3RvbSB7IGZhbHNlIH07CisgICAgc3RkOjp3c3RyaW5nIHVybDsKKyAg
ICBzdGQ6OndzdHJpbmcgZXhjbHVkZUhvc3RzOworfTsKKwordm9pZCBjb21wdXRlRnVsbERlc2t0
b3BGcmFtZSgpOworYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9ic3RyX3QmIGRpcmVjdG9yeSk7CitD
b21tYW5kTGluZU9wdGlvbnMgcGFyc2VDb21tYW5kTGluZSgpOwordm9pZCBjcmVhdGVDcmFzaFJl
cG9ydChFWENFUFRJT05fUE9JTlRFUlMqKTsKK09wdGlvbmFsPENyZWRlbnRpYWw+IGFza0NyZWRl
bnRpYWwoSFdORCwgY29uc3Qgc3RkOjp3c3RyaW5nJiByZWFsbSk7Citib29sIGFza1Byb3h5U2V0
dGluZ3MoSFdORCwgUHJveHlTZXR0aW5ncyYpOworCitib29sIGFza1NlcnZlclRydXN0RXZhbHVh
dGlvbihIV05ELCBjb25zdCBzdGQ6OndzdHJpbmcmIHBlbXMpOworc3RkOjp3c3RyaW5nIHJlcGxh
Y2VTdHJpbmcoc3RkOjp3c3RyaW5nIHNyYywgY29uc3Qgc3RkOjp3c3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3Qgc3RkOjp3c3RyaW5nJiBuZXdWYWx1ZSk7CisKK2V4dGVybiBISU5TVEFOQ0UgaEluc3Q7
CitleHRlcm4gUE9JTlQgc193aW5kb3dQb3NpdGlvbjsKK2V4dGVybiBTSVpFIHNfd2luZG93U2l6
ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvRGlhbG9nSGVscGVyLmgg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0RpYWxvZ0hlbHBlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
OTBmZTAwMjU1ODQxZmE5M2EwZmU3YzZiZmZiYzBkYzEzZmQyZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL0RpYWxvZ0hlbHBlci5oCkBAIC0wLDAgKzEsMTUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworY2xhc3MgRGlhbG9nIHsKK3B1YmxpYzoKKyAgICBib29sIHJ1bihI
SU5TVEFOQ0UgaEluc3QsIEhXTkQgaHduZCwgaW50IGRpYWxvZ0lkKQorICAgIHsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBEaWFsb2dCb3hQYXJhbShoSW5zdCwgTUFLRUlOVFJFU09VUkNFKGRpYWxv
Z0lkKSwgaHduZCwgZG9hbG9nUHJvYywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KHRoaXMpKTsK
KyAgICAgICAgcmV0dXJuIChyZXN1bHQgPiAwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSU5UX1BU
UiBDQUxMQkFDSyBkb2Fsb2dQcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQorICAgIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gV01fSU5J
VERJQUxPRykKKyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIoaERsZywgRFdMUF9VU0VSLCBs
UGFyYW0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsUGFyYW0gPSBHZXRXaW5kb3dMb25n
UHRyKGhEbGcsIERXTFBfVVNFUik7CisKKyAgICAgICAgYXV0byogZGlhbG9nID0gcmVpbnRlcnBy
ZXRfY2FzdDxEaWFsb2cqPihsUGFyYW0pOworICAgICAgICByZXR1cm4gZGlhbG9nLT5oYW5kbGUo
aERsZywgbWVzc2FnZSwgd1BhcmFtKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBJTlRfUFRS
IGhhbmRsZShIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNlIFdNX0lOSVRESUFMT0c6IHsK
KyAgICAgICAgICAgIG1faERsZyA9IGhEbGc7CisgICAgICAgICAgICBzZXR1cCgpOworICAgICAg
ICAgICAgdXBkYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgICAgICAgICBpbnQgd21JZCA9IExPV09SRCh3UGFy
YW0pOworICAgICAgICAgICAgc3dpdGNoICh3bUlkKSB7CisgICAgICAgICAgICBjYXNlIElET0s6
CisgICAgICAgICAgICAgICAgb2soKTsKKyAgICAgICAgICAgICAgICBjbG9zZSh0cnVlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIGNhc2UgSURDQU5DRUw6Cisg
ICAgICAgICAgICAgICAgY2FuY2VsKCk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBhdXRvIGhhbmRsZWQgPSBjb21tYW5kKHdtSWQpOworICAgICAgICAgICAgICAg
IHVwZGF0ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVkOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0dXAoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKCkgeyB1cGRhdGVPa0J1
dHRvbih2YWxpZGF0ZSgpKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZSgpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlT2tCdXR0b24oYm9vbCBpc1ZhbGlkKSB7
IHNldEVuYWJsZWQoSURPSywgaXNWYWxpZCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29tbWFuZChp
bnQgd21JZCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb2soKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgeyB9CisKKyAgICB2b2lkIGNsb3NlKGJvb2wgc3VjY2Vz
cykgeyBFbmREaWFsb2cobV9oRGxnLCBzdWNjZXNzKTsgfQorCisgICAgSFdORCBoRGxnKCkgeyBy
ZXR1cm4gbV9oRGxnOyB9CisKKyAgICBIV05EIGl0ZW0oaW50IGl0ZW1JZCkgeyByZXR1cm4gR2V0
RGxnSXRlbShtX2hEbGcsIGl0ZW1JZCk7IH0KKworICAgIHZvaWQgc2V0RW5hYmxlZChpbnQgaXRl
bUlkLCBib29sIGVuYWJsZWQpCisgICAgeworICAgICAgICBFbmFibGVXaW5kb3coaXRlbShpdGVt
SWQpLCBlbmFibGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRleHQoaW50IGl0ZW1JZCwgY29u
c3Qgc3RkOjp3c3RyaW5nJiBzdHIpCisgICAgeworICAgICAgICBTZXREbGdJdGVtVGV4dChtX2hE
bGcsIGl0ZW1JZCwgX2JzdHJfdChzdHIuY19zdHIoKSkpOworICAgIH0KKworICAgIHN0ZDo6d3N0
cmluZyBnZXRUZXh0KGludCBpdGVtSWQpCisgICAgeworICAgICAgICBhdXRvIGxlbmd0aCA9IGdl
dFRleHRMZW5ndGgoaXRlbUlkKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VENIQVI+IGJ1ZmZlcihs
ZW5ndGggKyAxLCAwKTsKKyAgICAgICAgR2V0V2luZG93VGV4dChpdGVtKGl0ZW1JZCksIGJ1ZmZl
ci5kYXRhKCksIGxlbmd0aCArIDEpOworICAgICAgICByZXR1cm4gc3RkOjp3c3RyaW5nIHsgYnVm
ZmVyLmRhdGEoKSB9OworICAgIH0KKworICAgIGludCBnZXRUZXh0TGVuZ3RoKGludCBpdGVtSWQp
CisgICAgeworICAgICAgICByZXR1cm4gR2V0V2luZG93VGV4dExlbmd0aChpdGVtKGl0ZW1JZCkp
OworICAgIH0KKworICAgIGNsYXNzIFJhZGlvR3JvdXAgeworICAgIHB1YmxpYzoKKyAgICAgICAg
UmFkaW9Hcm91cChEaWFsb2cmIGRpYWxvZywgaW50IGZpcnN0LCBpbnQgbGFzdCkKKyAgICAgICAg
ICAgIDogbV9kaWFsb2coZGlhbG9nKQorICAgICAgICAgICAgLCBtX2ZpcnN0KGZpcnN0KQorICAg
ICAgICAgICAgLCBtX2xhc3QobGFzdCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBzZXQoaW50IGl0ZW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIENoZWNrUmFkaW9CdXR0
b24obV9kaWFsb2cuaERsZygpLCBtX2ZpcnN0LCBtX2xhc3QsIGl0ZW0pOworICAgICAgICB9CisK
KyAgICAgICAgaW50IGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGlkID0g
bV9maXJzdDsgaWQgPD0gbV9sYXN0OyBpZCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKElzRGxn
QnV0dG9uQ2hlY2tlZChtX2RpYWxvZy5oRGxnKCksIGlkKSA9PSBCU1RfQ0hFQ0tFRCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERpYWxvZyYgbV9kaWFs
b2c7CisgICAgICAgIGludCBtX2ZpcnN0OworICAgICAgICBpbnQgbV9sYXN0OworICAgIH07CisK
KyAgICBSYWRpb0dyb3VwIHJhZGlvR3JvdXAoaW50IGZpcnN0LCBpbnQgbGFzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBSYWRpb0dyb3VwKCp0aGlzLCBmaXJzdCwgbGFzdCk7CisgICAgfQorCisg
ICAgSFdORCBtX2hEbGcgeyB9OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi13a2wvTWFpbldpbmRvdy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01haW5XaW5k
b3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0NGEzYmU0ZmEyMzYxY2ExMjEwMzc3ZTkxNmU0N2ZlMGZkOTRi
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01haW5XaW5k
b3cuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJzdGRhZnguaCIKKyNpbmNsdWRlICJNYWluV2lu
ZG93LmgiCisKKyNpbmNsdWRlICJDb21tb24uaCIKKyNpbmNsdWRlICJNaW5pQnJvd3NlckxlZ2Fj
eUxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgor
I2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRp
b24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKK30KKworc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY29udHJvbEJ1dHRvbldpZHRoID0gMjQ7CitzdGF0aWMgY29uc3RleHByIGludCB1cmxC
YXJIZWlnaHQgPSAyNDsKKworc3RhdGljIFdORFBST0MgRGVmRWRpdFByb2MgPSBudWxscHRyOwor
CitzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBFZGl0UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7CitzdGF0aWMgSU5UX1BUUiBDQUxMQkFDSyBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0s
IExQQVJBTSk7CisKK3N0ZDo6d3N0cmluZyBNYWluV2luZG93OjpzX3dpbmRvd0NsYXNzOworc2l6
ZV90IE1haW5XaW5kb3c6OnNfbnVtSW5zdGFuY2VzOworCitzdGF0aWMgc3RkOjp3c3RyaW5nIGxv
YWRTdHJpbmcoaW50IGlkKQoreworICAgIGNvbnN0ZXhwciBzaXplX3QgbGVuZ3RoID0gMTAwOwor
ICAgIHdjaGFyX3QgYnVmZltsZW5ndGhdOworICAgIExvYWRTdHJpbmcoaEluc3QsIGlkLCBidWZm
LCBsZW5ndGgpOworICAgIHJldHVybiBidWZmOworfQorCit2b2lkIE1haW5XaW5kb3c6OnJlZ2lz
dGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHNfd2luZG93Q2xhc3MgPSBsb2FkU3RyaW5nKElE
Q19NSU5JQlJPV1NFUkxFR0FDWSk7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5j
YlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENT
X0hSRURSQVcgfCBDU19WUkVEUkFXOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBXbmRQcm9j
OworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAg
PSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBoSW5zdGFuY2U7CisgICAgd2NleC5oSWNv
biAgICAgICAgICA9IExvYWRJY29uKGhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNFKElESV9NSU5J
QlJPV1NFUkxFR0FDWSkpOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAs
IElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5scHN6
TWVudU5hbWUgICA9IE1BS0VJTlRSRVNPVVJDRShJRENfTUlOSUJST1dTRVJMRUdBQ1kpOworICAg
IHdjZXgubHBzekNsYXNzTmFtZSAgPSBzX3dpbmRvd0NsYXNzLmNfc3RyKCk7CisgICAgd2NleC5o
SWNvblNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0Uo
SURJX1NNQUxMKSk7CisKKyAgICBSZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitNYWluV2lu
ZG93OjpNYWluV2luZG93KCkKK3sKKyAgICBzX251bUluc3RhbmNlcysrOworfQorCitNYWluV2lu
ZG93Ojp+TWFpbldpbmRvdygpCit7CisgICAgc19udW1JbnN0YW5jZXMtLTsKK30KKworUmVmPE1h
aW5XaW5kb3c+IE1haW5XaW5kb3c6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWFpbldpbmRvdygpKTsKK30KKworYm9vbCBNYWluV2luZG93Ojppbml0KEJyb3dzZXJXaW5k
b3dGYWN0b3J5IGZhY3RvcnksIEhJTlNUQU5DRSBoSW5zdGFuY2UsIGJvb2wgdXNlc0xheWVyZWRX
ZWJWaWV3KQoreworICAgIHJlZ2lzdGVyQ2xhc3MoaEluc3RhbmNlKTsKKworICAgIGF1dG8gdGl0
bGUgPSBsb2FkU3RyaW5nKElEU19BUFBfVElUTEUpOworCisgICAgbV9oTWFpblduZCA9IENyZWF0
ZVdpbmRvdyhzX3dpbmRvd0NsYXNzLmNfc3RyKCksIHRpdGxlLmNfc3RyKCksIFdTX09WRVJMQVBQ
RURXSU5ET1csCisgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAs
IDAsIGhJbnN0YW5jZSwgdGhpcyk7CisKKyAgICBpZiAoIW1faE1haW5XbmQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG1faEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRU
T04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwg
bV9oTWFpblduZCwgcmVpbnRlcnByZXRfY2FzdDxITUVOVT4oSURNX0hJU1RPUllfQkFDS1dBUkQp
LCBoSW5zdGFuY2UsIDApOworICAgIG1faEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3co
TCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCAwLCAwLCAw
LCAwLCBtX2hNYWluV25kLCByZWludGVycHJldF9jYXN0PEhNRU5VPihJRE1fSElTVE9SWV9GT1JX
QVJEKSwgaEluc3RhbmNlLCAwKTsKKyAgICBtX2hSZWxvYWRCdXR0b25XbmQgPSBDcmVhdGVXaW5k
b3coTCJCVVRUT04iLCBMIuKGuiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIDAs
IDAsIDAsIDAsIG1faE1haW5XbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8SE1FTlU+KElETV9SRUxPQUQp
LCBoSW5zdGFuY2UsIDApOworICAgIG1faFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQi
LCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVU
T1ZTQ1JPTEwsIDAsIDAsIDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0YW5jZSwgMCk7CisgICAg
bV9oUHJvZ3Jlc3NJbmRpY2F0b3IgPSBDcmVhdGVXaW5kb3coTCJTVEFUSUMiLCAwLCBXU19DSElM
RCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBTU19DRU5URVIgfCBTU19DRU5URVJJTUFHRSwg
MCwgMCwgMCwgMCwgbV9oTWFpblduZCwgMCwgaEluc3RhbmNlLCAwKTsKKworICAgIERlZkVkaXRQ
cm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRyKG1faFVSTEJh
clduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgU2V0V2luZG93TG9uZ1B0cihtX2hVUkxCYXJXbmQs
IEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRWRpdFByb2MpKTsKKwor
ICAgIG1fYnJvd3NlcldpbmRvdyA9IGZhY3RvcnkoKnRoaXMsIG1faE1haW5XbmQsIHVzZXNMYXll
cmVkV2ViVmlldyk7CisgICAgaWYgKCFtX2Jyb3dzZXJXaW5kb3cpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBIUkVTVUxUIGhyID0gbV9icm93c2VyV2luZG93LT5pbml0KCk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCk7CisgICAgcmVzaXplU3ViVmlld3MoKTsKKyAgICBTZXRGb2N1cyhtX2hVUkxC
YXJXbmQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1haW5XaW5kb3c6OnJlc2l6ZVN1
YlZpZXdzKCkKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxl
RmFjdG9yRm9yV2luZG93KG1faE1haW5XbmQpOworCisgICAgUkVDVCByY0NsaWVudDsKKyAgICBH
ZXRDbGllbnRSZWN0KG1faE1haW5XbmQsICZyY0NsaWVudCk7CisKKyAgICBpbnQgaGVpZ2h0ID0g
c2NhbGVGYWN0b3IgKiB1cmxCYXJIZWlnaHQ7CisgICAgaW50IHdpZHRoID0gc2NhbGVGYWN0b3Ig
KiBjb250cm9sQnV0dG9uV2lkdGg7CisKKyAgICBNb3ZlV2luZG93KG1faEJhY2tCdXR0b25XbmQs
IDAsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3cobV9oRm9yd2FyZEJ1
dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3co
bV9oUmVsb2FkQnV0dG9uV25kLCB3aWR0aCAqIDIsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOwor
ICAgIE1vdmVXaW5kb3cobV9oVVJMQmFyV25kLCB3aWR0aCAqIDMsIDAsIHJjQ2xpZW50LnJpZ2h0
IC0gd2lkdGggKiA1LCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3cobV9oUHJvZ3Jlc3NJ
bmRpY2F0b3IsIHJjQ2xpZW50LnJpZ2h0IC0gd2lkdGggKiAyLCAwLCB3aWR0aCAqIDIsIGhlaWdo
dCwgVFJVRSk7CisKKyAgICBpZiAobV9icm93c2VyV2luZG93LT51c2VzTGF5ZXJlZFdlYlZpZXco
KSB8fCAhbV9icm93c2VyV2luZG93LT5od25kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBNb3Zl
V2luZG93KG1fYnJvd3NlcldpbmRvdy0+aHduZCgpLCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0
LCByY0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRSVUUpOworfQorCitMUkVTVUxUIENBTExCQUNL
IE1haW5XaW5kb3c6OlduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUmVmUHRyPE1haW5XaW5kb3c+IHRoaXNXaW5kb3cg
PSByZWludGVycHJldF9jYXN0PE1haW5XaW5kb3cqPihHZXRXaW5kb3dMb25nUHRyKGhXbmQsIEdX
TFBfVVNFUkRBVEEpKTsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX0NSRUFU
RToKKyAgICAgICAgU2V0V2luZG93TG9uZ1B0cihoV25kLCBHV0xQX1VTRVJEQVRBLCByZWludGVy
cHJldF9jYXN0PExPTkdfUFRSPihyZWludGVycHJldF9jYXN0PExQQ1JFQVRFU1RSVUNUPihsUGFy
YW0pLT5scENyZWF0ZVBhcmFtcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0NPTU1B
TkQ6IHsKKyAgICAgICAgaW50IHdtSWQgPSBMT1dPUkQod1BhcmFtKTsKKyAgICAgICAgaW50IHdt
RXZlbnQgPSBISVdPUkQod1BhcmFtKTsKKyAgICAgICAgc3dpdGNoICh3bUV2ZW50KSB7CisgICAg
ICAgIGNhc2UgMDogLy8gTWVudSBvciBCTl9DTElDS0VECisgICAgICAgIGNhc2UgMTogLy8gQWNj
ZWxlcmF0b3IKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwor
ICAgICAgICB9CisgICAgICAgIGlmICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYmIHdtSWQg
PD0gSURNX0hJU1RPUllfTElOSzkpIHsKKyAgICAgICAgICAgIHRoaXNXaW5kb3ctPmJyb3dzZXJX
aW5kb3coKS0+bmF2aWdhdGVUb0hpc3Rvcnkod21JZCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvLyBQYXJzZSB0aGUgbWVudSBzZWxlY3Rpb25zOgorICAgICAgICBz
d2l0Y2ggKHdtSWQpIHsKKyAgICAgICAgY2FzZSBJRENfVVJMX0JBUjoKKyAgICAgICAgICAgIHRo
aXNXaW5kb3ctPm9uVVJMQmFyRW50ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIElETV9ORVdfV0VCS0lUTEVHQUNZX1dJTkRPVzogeworICAgICAgICAgICAgYXV0byYgbmV3
V2luZG93ID0gTWFpbldpbmRvdzo6Y3JlYXRlKCkubGVha1JlZigpOworICAgICAgICAgICAgbmV3
V2luZG93LmluaXQoV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6Y3JlYXRlLCBoSW5zdCk7Cisg
ICAgICAgICAgICBTaG93V2luZG93KG5ld1dpbmRvdy5od25kKCksIFNXX1NIT1cpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBJRE1fQ0xPU0VfV0lORE9XOgor
ICAgICAgICAgICAgUG9zdE1lc3NhZ2UoaFduZCwgV01fQ0xPU0UsIDAsIDApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX0FCT1VUOgorICAgICAgICAgICAgRGlhbG9nQm94
KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FCT1VUQk9YKSwgaFduZCwgQWJvdXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX0VYSVQ6CisgICAgICAgICAgICBEZXN0
cm95V2luZG93KGhXbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1BS
SU5UOgorICAgICAgICAgICAgdGhpc1dpbmRvdy0+YnJvd3NlcldpbmRvdygpLT5wcmludCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1dFQl9JTlNQRUNUT1I6CisgICAg
ICAgICAgICB0aGlzV2luZG93LT5icm93c2VyV2luZG93KCktPmxhdW5jaEluc3BlY3RvcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1BST1hZX1NFVFRJTkdTOgorICAg
ICAgICAgICAgdGhpc1dpbmRvdy0+YnJvd3NlcldpbmRvdygpLT5vcGVuUHJveHlTZXR0aW5ncygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX0NBQ0hFUzoKKyAgICAgICAg
ICAgIGlmICghOjpJc1dpbmRvdyh0aGlzV2luZG93LT5tX2hDYWNoZVduZCkpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzV2luZG93LT5tX2hDYWNoZVduZCA9IENyZWF0ZURpYWxvZ1BhcmFtKGhJbnN0
LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0NBQ0hFUyksIGhXbmQsIGNhY2hlc0RpYWxvZ1Byb2MsIHJl
aW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPih0aGlzV2luZG93LmdldCgpKSk7CisgICAgICAgICAgICAg
ICAgOjpTaG93V2luZG93KHRoaXNXaW5kb3ctPm1faENhY2hlV25kLCBTV19TSE9XKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9ISVNUT1JZX0JB
Q0tXQVJEOgorICAgICAgICBjYXNlIElETV9ISVNUT1JZX0ZPUldBUkQ6CisgICAgICAgICAgICB0
aGlzV2luZG93LT5icm93c2VyV2luZG93KCktPm5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQod21J
ZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fVUFfT1RIRVI6CisgICAg
ICAgICAgICBEaWFsb2dCb3hQYXJhbShoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9VU0VSX0FH
RU5UKSwgaFduZCwgY3VzdG9tVXNlckFnZW50RGlhbG9nUHJvYywgcmVpbnRlcnByZXRfY2FzdDxM
UEFSQU0+KHRoaXNXaW5kb3cuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIElETV9BQ1RVQUxfU0laRToKKyAgICAgICAgICAgIHRoaXNXaW5kb3ctPmJyb3dzZXJXaW5k
b3coKS0+cmVzZXRab29tKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1f
UkVMT0FEOgorICAgICAgICAgICAgdGhpc1dpbmRvdy0+YnJvd3NlcldpbmRvdygpLT5yZWxvYWQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9aT09NX0lOOgorICAgICAg
ICAgICAgdGhpc1dpbmRvdy0+YnJvd3NlcldpbmRvdygpLT56b29tSW4oKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIElETV9aT09NX09VVDoKKyAgICAgICAgICAgIHRoaXNXaW5k
b3ctPmJyb3dzZXJXaW5kb3coKS0+em9vbU91dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSURNX1NIT1dfTEFZRVJfVFJFRToKKyAgICAgICAgICAgIHRoaXNXaW5kb3ctPmJy
b3dzZXJXaW5kb3coKS0+c2hvd0xheWVyVHJlZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIXRoaXNXaW5kb3ctPnRvZ2dsZU1lbnVJdGVt
KHdtSWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fREVTVFJPWToKKyAgICAgICAgU2V0V2luZG93TG9uZ1B0cihoV25kLCBH
V0xQX1VTRVJEQVRBLCAwKTsKKyAgICAgICAgdGhpc1dpbmRvdy0+ZGVyZWYoKTsKKyAgICAgICAg
aWYgKHNfbnVtSW5zdGFuY2VzID4gMSkKKyAgICAgICAgICAgIHJldHVybiAwOworI2lmIFVTRShD
RikKKyAgICAgICAgQ0ZSdW5Mb29wU3RvcChDRlJ1bkxvb3BHZXRNYWluKCkpOworI2VuZGlmCisg
ICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9T
SVpFOgorICAgICAgICB0aGlzV2luZG93LT5yZXNpemVTdWJWaWV3cygpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdNX0RQSUNIQU5HRUQ6IHsKKyAgICAgICAgdGhpc1dpbmRvdy0+dXBkYXRl
RGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgYXV0byYgcmVjdCA9ICpyZWludGVycHJldF9j
YXN0PFJFQ1QqPihsUGFyYW0pOworICAgICAgICBTZXRXaW5kb3dQb3MoaFduZCwgbnVsbHB0ciwg
cmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20g
LSByZWN0LnRvcCwgU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZBVEUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgYm9vbCBtZW51SXRlbUlzQ2hlY2tlZChjb25zdCBNRU5VSVRFTUlORk8mIGluZm8p
Cit7CisgICAgcmV0dXJuIGluZm8uZlN0YXRlICYgTUZTX0NIRUNLRUQ7Cit9CisKK3N0YXRpYyB2
b2lkIHR1cm5PZmZPdGhlclVzZXJBZ2VudHMoSE1FTlUgbWVudSkKK3sKKyAgICBNRU5VSVRFTUlO
Rk8gaW5mbzsKKyAgICA6Om1lbXNldCgmaW5mbywgMHgwMCwgc2l6ZW9mKGluZm8pKTsKKyAgICBp
bmZvLmNiU2l6ZSA9IHNpemVvZihpbmZvKTsKKyAgICBpbmZvLmZNYXNrID0gTUlJTV9TVEFURTsK
KworICAgIC8vIE11c3QgdW5zZXQgdGhlIG90aGVyIG1lbnUgaXRlbXM6CisgICAgZm9yIChVSU5U
IG1lbnVUb0NsZWFyID0gSURNX1VBX0RFRkFVTFQ7IG1lbnVUb0NsZWFyIDw9IElETV9VQV9PVEhF
UjsgKyttZW51VG9DbGVhcikgeworICAgICAgICBpZiAoITo6R2V0TWVudUl0ZW1JbmZvKG1lbnUs
IG1lbnVUb0NsZWFyLCBGQUxTRSwgJmluZm8pKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghbWVudUl0ZW1Jc0NoZWNrZWQoaW5mbykpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpbmZvLmZTdGF0ZSA9IE1GU19VTkNIRUNLRUQ7CisgICAgICAgIDo6U2V0TWVu
dUl0ZW1JbmZvKG1lbnUsIG1lbnVUb0NsZWFyLCBGQUxTRSwgJmluZm8pOworICAgIH0KK30KKwor
Ym9vbCBNYWluV2luZG93Ojp0b2dnbGVNZW51SXRlbShVSU5UIG1lbnVJRCkKK3sKKyAgICBITUVO
VSBtZW51ID0gOjpHZXRNZW51KGh3bmQoKSk7CisKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAg
IGNhc2UgSURNX1VBX0RFRkFVTFQ6CisgICAgY2FzZSBJRE1fVUFfU0FGQVJJOgorICAgIGNhc2Ug
SURNX1VBX1NBRkFSSV9JT1NfSVBIT05FOgorICAgIGNhc2UgSURNX1VBX1NBRkFSSV9JT1NfSVBB
RDoKKyAgICBjYXNlIElETV9VQV9FREdFOgorICAgIGNhc2UgSURNX1VBX0lFXzExOgorICAgIGNh
c2UgSURNX1VBX0NIUk9NRV9NQUM6CisgICAgY2FzZSBJRE1fVUFfQ0hST01FX1dJTjoKKyAgICBj
YXNlIElETV9VQV9GSVJFRk9YX01BQzoKKyAgICBjYXNlIElETV9VQV9GSVJFRk9YX1dJTjoKKyAg
ICAgICAgbV9icm93c2VyV2luZG93LT5zZXRVc2VyQWdlbnQobWVudUlEKTsKKyAgICAgICAgdHVy
bk9mZk90aGVyVXNlckFnZW50cyhtZW51KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1f
VUFfT1RIRVI6CisgICAgICAgIC8vIFRoZSBhY3R1YWwgdXNlciBhZ2VudCBzdHJpbmcgd2lsbCBi
ZSBzZXQgYnkgdGhlIGN1c3RvbSB1c2VyIGFnZW50IGRpYWxvZworICAgICAgICB0dXJuT2ZmT3Ro
ZXJVc2VyQWdlbnRzKG1lbnUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBNRU5VSVRF
TUlORk8gaW5mbyA9IHsgfTsKKyAgICBpbmZvLmNiU2l6ZSA9IHNpemVvZihpbmZvKTsKKyAgICBp
bmZvLmZNYXNrID0gTUlJTV9TVEFURTsKKworICAgIGlmICghOjpHZXRNZW51SXRlbUluZm8obWVu
dSwgbWVudUlELCBGQUxTRSwgJmluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBC
T09MIG5ld1N0YXRlID0gIW1lbnVJdGVtSXNDaGVja2VkKGluZm8pOworICAgIGluZm8uZlN0YXRl
ID0gKG5ld1N0YXRlKSA/IE1GU19DSEVDS0VEIDogTUZTX1VOQ0hFQ0tFRDsKKyAgICA6OlNldE1l
bnVJdGVtSW5mbyhtZW51LCBtZW51SUQsIEZBTFNFLCAmaW5mbyk7CisKKyAgICBtX2Jyb3dzZXJX
aW5kb3ctPnNldFByZWZlcmVuY2UobWVudUlELCBuZXdTdGF0ZSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBFZGl0UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2Up
IHsKKyAgICBjYXNlIFdNX1NFVEZPQ1VTOgorICAgICAgICBQb3N0TWVzc2FnZShoV25kLCBFTV9T
RVRTRUwsIDAsIC0xKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9DSEFSOgorICAgICAg
ICBpZiAod1BhcmFtID09IDEzKSB7CisgICAgICAgICAgICAvLyBFbnRlciBLZXkKKyAgICAgICAg
ICAgIDo6UG9zdE1lc3NhZ2UoR2V0UGFyZW50KGhXbmQpLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9D
T01NQU5EKSwgTUFLRUxQQVJBTShJRENfVVJMX0JBUiwgMCksIDApOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDYWxs
V2luZG93UHJvYyhEZWZFZGl0UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwor
fQorCisvLyBNZXNzYWdlIGhhbmRsZXIgZm9yIGFib3V0IGJveC4KK0lOVF9QVFIgQ0FMTEJBQ0sg
QWJvdXQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihsUGFyYW0pOworICAgIHN3aXRjaCAo
bWVzc2FnZSkgeworICAgIGNhc2UgV01fSU5JVERJQUxPRzoKKyAgICAgICAgcmV0dXJuIChJTlRf
UFRSKVRSVUU7CisKKyAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgICAgIGlmIChMT1dPUkQod1Bh
cmFtKSA9PSBJRE9LIHx8IExPV09SRCh3UGFyYW0pID09IElEQ0FOQ0VMKSB7CisgICAgICAgICAg
ICBFbmREaWFsb2coaERsZywgTE9XT1JEKHdQYXJhbSkpOworICAgICAgICAgICAgcmV0dXJuIChJ
TlRfUFRSKVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biAoSU5UX1BUUilGQUxTRTsKK30KKworSU5UX1BUUiBDQUxMQkFDSyBNYWluV2luZG93OjpjYWNo
ZXNEaWFsb2dQcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQoreworICAgIE1haW5XaW5kb3cmIHRoaXNXaW5kb3cgPSAqcmVpbnRlcnByZXRf
Y2FzdDxNYWluV2luZG93Kj4oR2V0V2luZG93TG9uZ1B0cihoRGxnLCBEV0xQX1VTRVIpKTsKKyAg
ICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX0lOSVRESUFMT0c6CisgICAgICAgIFNl
dFdpbmRvd0xvbmdQdHIoaERsZywgRFdMUF9VU0VSLCBsUGFyYW0pOworICAgICAgICA6OlNldFRp
bWVyKGhEbGcsIElEVF9VUERBVEVfU1RBVFMsIDEwMDAsIG51bGxwdHIpOworICAgICAgICByZXR1
cm4gKElOVF9QVFIpVFJVRTsKKworICAgIGNhc2UgV01fQ09NTUFORDoKKyAgICAgICAgaWYgKExP
V09SRCh3UGFyYW0pID09IElET0sgfHwgTE9XT1JEKHdQYXJhbSkgPT0gSURDQU5DRUwpIHsKKyAg
ICAgICAgICAgIDo6S2lsbFRpbWVyKGhEbGcsIElEVF9VUERBVEVfU1RBVFMpOworICAgICAgICAg
ICAgOjpEZXN0cm95V2luZG93KGhEbGcpOworICAgICAgICAgICAgdGhpc1dpbmRvdy5tX2hDYWNo
ZVduZCA9IDA7CisgICAgICAgICAgICByZXR1cm4gKElOVF9QVFIpVFJVRTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSURUX1VQREFURV9TVEFUUzoKKyAgICAgICAgOjpJ
bnZhbGlkYXRlUmVjdChoRGxnLCBudWxscHRyLCBGQUxTRSk7CisgICAgICAgIHJldHVybiAoSU5U
X1BUUilUUlVFOworCisgICAgY2FzZSBXTV9QQUlOVDoKKyAgICAgICAgdGhpc1dpbmRvdy5icm93
c2VyV2luZG93KCktPnVwZGF0ZVN0YXRpc3RpY3MoaERsZyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiAoSU5UX1BUUilGQUxTRTsKK30KKworSU5UX1BUUiBDQUxMQkFDSyBN
YWluV2luZG93OjpjdXN0b21Vc2VyQWdlbnREaWFsb2dQcm9jKEhXTkQgaERsZywgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIE1haW5XaW5kb3cmIHRo
aXNXaW5kb3cgPSAqcmVpbnRlcnByZXRfY2FzdDxNYWluV2luZG93Kj4oR2V0V2luZG93TG9uZ1B0
cihoRGxnLCBEV0xQX1VTRVIpKTsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdN
X0lOSVRESUFMT0c6IHsKKyAgICAgICAgTWFpbldpbmRvdyYgdGhpc1dpbmRvdyA9ICpyZWludGVy
cHJldF9jYXN0PE1haW5XaW5kb3cqPihsUGFyYW0pOworICAgICAgICBTZXRXaW5kb3dMb25nUHRy
KGhEbGcsIERXTFBfVVNFUiwgbFBhcmFtKTsKKyAgICAgICAgSFdORCBlZGl0ID0gOjpHZXREbGdJ
dGVtKGhEbGcsIElEQ19VU0VSX0FHRU5UX0lOUFVUKTsKKyAgICAgICAgX2JzdHJfdCB1c2VyQWdl
bnQ7CisgICAgICAgIHVzZXJBZ2VudCA9IHRoaXNXaW5kb3cuYnJvd3NlcldpbmRvdygpLT51c2Vy
QWdlbnQoKTsKKworICAgICAgICA6OlNldFdpbmRvd1RleHQoZWRpdCwgc3RhdGljX2Nhc3Q8TFBD
VFNUUj4odXNlckFnZW50KSk7CisgICAgICAgIHJldHVybiAoSU5UX1BUUilUUlVFOworICAgIH0K
KworICAgIGNhc2UgV01fQ09NTUFORDoKKyAgICAgICAgaWYgKExPV09SRCh3UGFyYW0pID09IElE
T0spIHsKKyAgICAgICAgICAgIEhXTkQgZWRpdCA9IDo6R2V0RGxnSXRlbShoRGxnLCBJRENfVVNF
Ul9BR0VOVF9JTlBVVCk7CisKKyAgICAgICAgICAgIFRDSEFSIGJ1ZmZlclsxMDI0XTsKKyAgICAg
ICAgICAgIGludCBzdHJMZW4gPSA6OkdldFdpbmRvd1RleHQoZWRpdCwgYnVmZmVyLCAxMDI0KTsK
KyAgICAgICAgICAgIGJ1ZmZlcltzdHJMZW5dID0gMDsKKworICAgICAgICAgICAgX2JzdHJfdCBi
c3RyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYnN0ci5sZW5ndGgoKSkgeworICAgICAgICAg
ICAgICAgIHRoaXNXaW5kb3cuYnJvd3NlcldpbmRvdygpLT5zZXRVc2VyQWdlbnQoYnN0cik7Cisg
ICAgICAgICAgICAgICAgdGhpc1dpbmRvdy50b2dnbGVNZW51SXRlbShJRE1fVUFfT1RIRVIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKExPV09SRCh3UGFyYW0pID09
IElET0sgfHwgTE9XT1JEKHdQYXJhbSkgPT0gSURDQU5DRUwpIHsKKyAgICAgICAgICAgIDo6RW5k
RGlhbG9nKGhEbGcsIExPV09SRCh3UGFyYW0pKTsKKyAgICAgICAgICAgIHJldHVybiAoSU5UX1BU
UilUUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gKElO
VF9QVFIpRkFMU0U7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6bG9hZFVSTChzdGQ6OndzdHJpbmcg
dXJsKQoreworICAgIGlmICg6OlBhdGhGaWxlRXhpc3RzKHVybC5jX3N0cigpKSB8fCA6OlBhdGhJ
c1VOQyh1cmwuY19zdHIoKSkpIHsKKyAgICAgICAgd2NoYXJfdCBmaWxlVVJMW0lOVEVSTkVUX01B
WF9VUkxfTEVOR1RIXTsKKyAgICAgICAgRFdPUkQgZmlsZVVSTExlbmd0aCA9IF9jb3VudG9mKGZp
bGVVUkwpOworCisgICAgICAgIGlmIChTVUNDRUVERUQoOjpVcmxDcmVhdGVGcm9tUGF0aCh1cmwu
Y19zdHIoKSwgZmlsZVVSTCwgJmZpbGVVUkxMZW5ndGgsIDApKSkKKyAgICAgICAgICAgIHVybCA9
IGZpbGVVUkw7CisgICAgfQorICAgIGlmICh1cmwuZmluZChMIjovLyIpID09IHVybC5ucG9zKQor
ICAgICAgICB1cmwgPSBMImh0dHA6Ly8iICsgdXJsOworCisgICAgaWYgKEZBSUxFRChtX2Jyb3dz
ZXJXaW5kb3ctPmxvYWRVUkwoX2JzdHJfdCh1cmwuY19zdHIoKSkpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU2V0Rm9jdXMobV9icm93c2VyV2luZG93LT5od25kKCkpOworfQorCit2b2lkIE1h
aW5XaW5kb3c6Om9uVVJMQmFyRW50ZXIoKQoreworICAgIHdjaGFyX3Qgc3RyUHRyW0lOVEVSTkVU
X01BWF9VUkxfTEVOR1RIXTsKKyAgICBHZXRXaW5kb3dUZXh0KG1faFVSTEJhclduZCwgc3RyUHRy
LCBJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSCk7CisgICAgc3RyUHRyW0lOVEVSTkVUX01BWF9VUkxf
TEVOR1RIIC0gMV0gPSAwOworICAgIGxvYWRVUkwoc3RyUHRyKTsKK30KKwordm9pZCBNYWluV2lu
ZG93Ojp1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAgaWYgKG1faFVSTEJhckZvbnQp
CisgICAgICAgIDo6RGVsZXRlT2JqZWN0KG1faFVSTEJhckZvbnQpOworICAgIGF1dG8gc2NhbGVG
YWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhtX2hNYWluV25kKTsK
KyAgICBpbnQgZm9udEhlaWdodCA9IHNjYWxlRmFjdG9yICogdXJsQmFySGVpZ2h0ICogMyAvIDQ7
CisgICAgbV9oVVJMQmFyRm9udCA9IDo6Q3JlYXRlRm9udChmb250SGVpZ2h0LCAwLCAwLCAwLCBG
V19OT1JNQUwsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIERFRkFVTFRfQ0hBUlNFVCwKKyAgICAgICAg
T1VUX1RUX09OTFlfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJFQ0lTLCBDTEVBUlRZUEVfUVVBTElU
WSwgRkZfRE9OVENBUkUsIEwiVGFob21hIik7CisgICAgOjpTZW5kTWVzc2FnZShtX2hVUkxCYXJX
bmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZPTlQpLCByZWludGVycHJldF9jYXN0PFdQQVJB
TT4obV9oVVJMQmFyRm9udCksIFRSVUUpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnByb2dyZXNz
Q2hhbmdlZChkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgc3RkOjp3b3N0cmluZ3N0cmVhbSB0ZXh0
OworICAgIHRleHQgPDwgc3RhdGljX2Nhc3Q8aW50Pihwcm9ncmVzcyAqIDEwMCkgPDwgTCclJzsK
KyAgICBTZXRXaW5kb3dUZXh0KG1faFByb2dyZXNzSW5kaWNhdG9yLCB0ZXh0LnN0cigpLmNfc3Ry
KCkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnByb2dyZXNzRmluaXNoZWQoKQoreworICAgIFNl
dFdpbmRvd1RleHQobV9oUHJvZ3Jlc3NJbmRpY2F0b3IsIEwiIik7Cit9CisKK3ZvaWQgTWFpbldp
bmRvdzo6YWN0aXZlVVJMQ2hhbmdlZChzdGQ6OndzdHJpbmcgdXJsKQoreworICAgIFNldFdpbmRv
d1RleHQobV9oVVJMQmFyV25kLCB1cmwuY19zdHIoKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4td2tsL01haW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvTWFpbldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MTg2ZDUyYzEwMTUyMTFiNmZlZTQ1NDI2OWZj
M2U2YTgyZWM2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2ts
L01haW5XaW5kb3cuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnJvd3Nl
cldpbmRvd0NsaWVudC5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CitjbGFzcyBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OworCitjbGFzcyBNYWluV2luZG93IGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8TWFpbldpbmRvdz4sIHB1YmxpYyBCcm93c2VyV2luZG93
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCcm93c2VyV2luZG93RmFjdG9yeSA9IHN0ZDo6
ZnVuY3Rpb248UmVmPFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c+KEJyb3dzZXJXaW5kb3dDbGll
bnQmLCBIV05EIG1haW5XbmQsIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3KT47CisKKyAgICBzdGF0
aWMgUmVmPE1haW5XaW5kb3c+IGNyZWF0ZSgpOworCisgICAgfk1haW5XaW5kb3coKTsKKyAgICBi
b29sIGluaXQoQnJvd3NlcldpbmRvd0ZhY3RvcnksIEhJTlNUQU5DRSBoSW5zdGFuY2UsIGJvb2wg
dXNlc0xheWVyZWRXZWJWaWV3ID0gZmFsc2UpOworCisgICAgdm9pZCByZXNpemVTdWJWaWV3cygp
OworICAgIEhXTkQgaHduZCgpIGNvbnN0IHsgcmV0dXJuIG1faE1haW5XbmQ7IH0KKyAgICBXZWJL
aXRMZWdhY3lCcm93c2VyV2luZG93KiBicm93c2VyV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9i
cm93c2VyV2luZG93LmdldCgpOyB9CisKKyAgICB2b2lkIGxvYWRVUkwoc3RkOjp3c3RyaW5nKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAgc3RhdGljIElOVF9QVFIgQ0FMTEJBQ0sgY3Vz
dG9tVXNlckFnZW50RGlhbG9nUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAg
c3RhdGljIElOVF9QVFIgQ0FMTEJBQ0sgY2FjaGVzRGlhbG9nUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaElu
c3RhbmNlKTsKKyAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHNfd2luZG93Q2xhc3M7CisgICAgc3Rh
dGljIHNpemVfdCBzX251bUluc3RhbmNlczsKKworICAgIE1haW5XaW5kb3coKTsKKyAgICBib29s
IHRvZ2dsZU1lbnVJdGVtKFVJTlQgbWVudUlEKTsKKyAgICB2b2lkIG9uVVJMQmFyRW50ZXIoKTsK
KyAgICB2b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBCcm93c2VyV2lu
ZG93Q2xpZW50CisgICAgdm9pZCBwcm9ncmVzc0NoYW5nZWQoZG91YmxlKSBmaW5hbDsKKyAgICB2
b2lkIHByb2dyZXNzRmluaXNoZWQoKSBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVVSTENoYW5nZWQo
c3RkOjp3c3RyaW5nKSBmaW5hbDsKKworICAgIEhXTkQgbV9oTWFpblduZCB7IG51bGxwdHIgfTsK
KyAgICBIV05EIG1faFVSTEJhclduZCB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faEJhY2tCdXR0
b25XbmQgeyBudWxscHRyIH07CisgICAgSFdORCBtX2hGb3J3YXJkQnV0dG9uV25kIHsgbnVsbHB0
ciB9OworICAgIEhXTkQgbV9oUmVsb2FkQnV0dG9uV25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQg
bV9oUHJvZ3Jlc3NJbmRpY2F0b3IgeyBudWxscHRyIH07CisgICAgSFdORCBtX2hDYWNoZVduZCB7
IG51bGxwdHIgfTsKKyAgICBIR0RJT0JKIG1faFVSTEJhckZvbnQgeyBudWxscHRyIH07CisgICAg
UmVmUHRyPFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c+IG1fYnJvd3NlcldpbmRvdzsKK307CmRp
ZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5Lmlj
byBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvTWluaUJyb3dzZXJMZWdhY3kuaWNvCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ1NTFhYTNhYWY4MGFkZjliNzc2MGUyZWI4ZGU5NWE1YzNlNTNkZjYKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDIzNTU4CnpjbWVJNDMwemd4K1F1SkhLdHhiZTVnYnUqMDMwQjUkVnlH
Y0RHU0ZPYWxrWSYyTHV2QzVwcCg3JjJYTmw5Nj1Aegp6TlhHSDJgfERPI254KTNud1VxNDNBPl9O
PSt3SHNZZSRVIzZlUG1TaEQmcF5CPjJ1eVN5bGJzQHVZSVB5Ji13I2MKenBjLTZVWUMpeCtFckRn
VXdROEJsWjdoSVVSUkIqPFhudXpyZlE/bF98Tkw/X3BuRHpWWnpAbC0wKUE/IWBANyYhCnpPVz43
ZXg8QVlHYCR1MmgtdiFlKyozT1lZOF92bGcoVVk8T0VBTl5qMHNjcDFxeztBK1N0PTV6UG9ITGtY
I1hMaQp6YXVvbG1EbjEtM2xHdDEqZyVuTiFwKF9mZGZZMW56Vm90d1RtTHRySSEzQGA8KEU1Y0lV
JXgoaj5aI1R9QVhHMioKej1ed2VHVEk1fklucSNyPzNRWlJoNT5Wdnk3QXFEeSpeaTsxcDZCWTc8
d0JMbV5QSk9ZRFN3PjtMUVNYWns7Zz5NCno/Zm01QTxtbCV+S09YYDVkQyhWSnBaN3RuU3xgNWNV
P1FkN3BHciR9cm13Pk0hMXVKfjE0Q1A1LTttYldKR2VGMAp6X2l1ck4hKDZHQkk1NHlvNGgoQ0J7
an5lKDZFbSRoaipWPUZxcHZvezUkZSMwN0wrVTJgd3ZGa244czhTI0Vmbz0KejxEKjs8TyhsPGEj
dEdqQlI2YF87Wkc/bnpqZDV5e0JUXjxoO1V0d2ohNU0jZnkldHApcihkZyEpWERZbTwmNWUkCnpe
TSpZPl58IX1ve3RvekxUMXxaN1VsYVNNeFooNUZnS15SaWxtKEtodnx2a283aTVYfTM2P2xJKSlH
Z2tsYXM2OQp6VnhTZSQ9MzMrMTBCZkFediUpdVhZO2I7ZEhHQ2FWNGU2b1BhZHd0MVBFRTdMI1Nq
TzRHYGtLeTMza0cjXlAxeUsKemN4KEpeUmE8PHpzM1UmYT04Y1BNZGdBOCg1JX5TbzB7a29XRW5F
eCYmZCZpcG9YUXZgZ0UzSUZYfkIlO08kJUo0Cnp7V2oxN0E1Rkt3c1ZOcnBWVnFSN3VMV2JII3dr
QmIjPlRpKz85NS1KSnZHSVdLMEpuVHM7dnNeRGNYeSk9akskdwp6PWxtZX5lMENNflNNNjFpN0Ur
Wnk2IVZ2OCg/WUNwWHw1SCUzJGJTMjF7ZGJxOzhJOTZUbmU+QzhqbS05byptTXwKej8ycn4jMUsm
flVeQndUQHlnSytJIzFVREc4c0lPJSZpRSp9QStFMSRqYkdOYSFTKGZSYXM5b3Z4YmE+KVRCWXs1
Cnp4eG9gUnE5fG9JRHRZMD9yakUjMXQhIXU5K31zNT53fDIjaSZENTV6JXkrfWg/SnJRPmFmOX5P
NHpBXm45PU5yJAp6N2pFdDlnUFhnJkAkMjNKeFY0OSh5fFF+NGVtT2lJLSlIXzZkSD1xS29CWWhs
cTVlKyZQV19BZWdaZnxVLV8pTn0KejlAUkpDM01TN3ZwP3lYTDFxQzQ+QU9RYVV7K0tqcjUrK1da
aHpTIVd6fU1Gb1c1PHJnPStVRHdZU2dJR1VLMFBXCno+V3hvJkkrMSFHJHpaSG4jJDtgITk4LTw8
YzZMP2xSNFBscThtVUl4Z0dZfVpKd19jcGJvbFZHeVFMI1g0Xn5lIwp6UiNXYU88KHM/cElBKVYt
ZUNuPGFNSCp8VDhmISUjSX5MNzxXbDJZQ3JXemZocXMhKjMyNlJkX0k+eWpISXl5I34KemQhXnw1
c202TFNGKV8hSyU4O1Yjcld6WlUoTl8lQCg8cyYwO0NSZ09HN1BQYCM1N0RiST4jUTVFd2d7S1JI
STk1CnpZPz1MSW8yRDlAI0t5KnpiXk8+U21IdX5JRTQ0bD88STI0THYyaVVeampvQV9XbktUY0lN
LUJUXlRmbyZXNUBYYQp6b3s1ZXY5PSpUMjNhM25vQHB6O2YraTNCWnIyYCReUDhuTzUhUVpxWGJa
bmhzWV5ENTU/byV8PCNLY3l+I3ZVZDYKem1LMCFPVnZsNndeSlZwP1UqWmVOIyVHbCtZa0RyKCp5
YThFTkgzbD1jSjRVIzhRKUdiWFptJjs9UjREUD1GQ3B4CnpDe3IzWVpkQG0mbmQzVXFjQUR+OXg1
WGJBQztOO1YtQz1QMUZgbiVgK1ljRyk+RGdoLTtLODF6KVdMSmA7NHdxbgp6X1pyWiVMbXpMP3d5
M2tEX2xMJWpaQGxgbipZSUpKPThvPz1LVm1eZGM9dEs4WFROU3JVSzF4d29mYjUhfDRXUEoKejQ7
Jk89NXVlY1N0dDhgJiRvJlUpQDdsWD4qWEVzai1nfGZCal91cEZacnglXm5ednF7e3IwTTVPUDgt
JWBPZG5pCno0ZWsxX3BVd35XUzMoeGYzd35La0JtRGRWUlNMfmRmcjApYk9mN3NJQG4lQD9sbTE9
YzBwZDRaJlQwMkhtQFJIMgp6KXdlOzV7STcoUyowZDAldHdSO3dMc0F8IyNuLVg0YnVONzBzYFRz
QmdATWJweGtuSDYhUVBqZlYtS35QK1ZBNnYKel9sTEU/eyRYd2k/ZUI/JmdFfUlscEM+fD81QTwl
MiY7ZWRwSWwzM2Q0SWhrQT83UWNzI0BOZG5ZV3NiZih7ZGFvCnpqdUFTKjY5TSFlR3QzN0cpNEN5
WCMqMnViLVY+aWoxPnZ1byFtenMreilLZ0xAYjd7ekhxT0U0OHYtJCF6SjMjWQp6djZ1SmJjNiRU
NmRRKktVPTY1cHghS19ZNW4kYTJDcipfOXpuYFlzJk8rZ3F0K3l7cFQwcStsPjFfSndPS004N3cK
emp8MUR8elhDandJQD00RXdva3xEUlRGU3crWiNCKWJxM0NEblRhdiVtb2wzM3lhY1FxO0Q5cUI/
KVlxT1RWKDg8CnpoT3swMklPYDgydT5Ic3xVWXBLJCNrc0luXyVmOCZ2M3NXPVl0S31pcDl5Xlox
fnIzSGBCfkkjOzJpRFE9QGplRQp6c1A7S2xfJV4lfEU9OVFGYCheSVBUSXI2VEgqYFNgdWk1Xnd3
K305P2RKZnJ9ZGc4e09BOz54RWhpaXU/PEh2bnwKenhKO2VwYyZXVDVLMG43Mj1MNChvbiRycnw1
IVUjNXVecH1+dmdoQHRKK0QwfSs2IVMwSVFPUEtHOXYzQkdxTnRfCnpofElUPz5MWVV6d2IrVCk4
Q2k9UEFadGtqV0t2bTY4WHt8SEJpdmxtM3xZJlg7XnNQNitHaEI1ZUprOTJ3PjVJMgp6KyRqKEl4
fWhDMTgyN0Q+OWRLKD8yanAoKWhAOHpHQCFRVCQkbDJOJXgzK2V8P1FKfEpPPGo/KntXJWByMyVJ
P2oKejJmbHJXKlJLYSgjZzghb0lKQUUhI2B9KU5tR2VpQ14+cmU/SjhQaG5KJU5pfkNMcnpXQiY0
NHxpUyV6eUI4QGlmCnpuYERhUjNtQHxPXjwhbEk/Sk45flp6YG8tdiRtaTlyKl4lbj96O3ZEMlch
YDwrTE9IVXExWHpmSm89UCR4MEk0bgp6KD9NTVopK215az80NTBHdEc3eEBkQ0pEUjR3SXUqKWhZ
IzNKdTlwRikjfXp0TkAtLSFRZnkzfERSYnZCIVFmUnAKekRXJFEmcHVXYml5NkNxVmdQfCRnOHll
IXtgUTVqSzZtTXVeblV2RHBrUHYlM3R8WDUqZ0Rjekg4eHJHNjl3RS1xCnpxR2VKX0o0NTJ9PEh0
KUZKfnF6YSRAWHByTHk0YHR6QV5NKmA/R2d4QDZQdEZjV0hsdD9Pbjk/NStnNz8qQn5qeQp6K2hF
fUZtMj9GMGhKSFBoUXU/cXpUWj1FaWFmNntSK2d+b19fPlF5UGh3WCNkenJnSUtZK09RSUJITGVp
SXd8RVAKeiZWVDAranZMfiYpcmRSSmV9LXZuQUlKNipRLVo8cElAXjhrb2JZMH5zY2F0YGVlfT93
ZzlxT34kYUx0KUElMDZlCnpiYT5ESDFOLSp3LWdSdjImWkx3OTliM0QzeE89I3t4dypUIXdRK096
QGJHQmNkMD98biYkI3NOXzJTOC1sPEFgZgp6NDtsWElATF9Ndm1AI0pmQEtIbURrTVFxNWRDSkp3
Q1VyT2d8S3l+VUgmPGBseWxHPDh4LUR6byp8XzFvXntiWXoKelQoUzc9YnhZVTJKSz1mMW5MR0lF
M0xke0tHQ1hZRmZfYjN9Qmk+ckZYI1JxRWF7fmlJZzYwSXdwMClrYXp4ZUpvCnpnWCNOJj5HM2so
OVpwa2BrNDY/OHlHcF9OUjk8fmd4JTBiMj5FQmM2aDZOKnM7KmEwezJXeTZPIzdaQThxKHU1NQp6
WG1BZyM5YFpDK1FCazl4I25TUXBhNENLcFIhc0NwIz5zdG5YUjxmbV9WWSY4JHpBeEBaQEVhQS0z
MSRfX1FkK3YKemAoVypxS0Rjc2ZKMSYyKTEyO2Uzal9sTn1JT1MpRFE8SWZ5O0tTR0tZMypxcHM5
Tnx1JE9XSDx3IXY0K3lKSzZ9Cno3K2Y9TSNfdF5TKWF3cW9vVld4clFLN2lIKzcmO29aSDUwez1a
PFNASkBDYEopWWBWVnd5cXQxUWQte3UqVmNSRAp6JURjfVhKRX03LVp5a1dfJXlZUHdAZm9odHsq
Jlh+TmRGTDUoIVc0PCk7WlJsVyZSQVpGSkhue21oPEZLLWtaKGkKeko9KGt5QDdIb2s1ZnY0TUJ9
PGtkQXxlNns3Y05BMmMoX2A9JTJjQG1Qd1dafEV9Qzk/YDR3flc4UlRQU1loelEqCnojKzBnN3ZH
JWRFdGxnP3haQnckV1VFUmxpVkVfTDhAPkJsLSlxUUZXXmZzcnl5PShaP0ZJMkFTPDU7bFYkSEIq
Vwp6cG0kJCRoaEZ1M1RIYX56K3FZTDtBRSR1PjJRWmwpMkc7UnUpM2ZedlVBbnkzck9VSERwNn5q
Y3Q1MGl9Q1hFfDYKelpQSzcmcXZwKz92VCpiMSteTTV5YHdtWmdkQVBUMGAlSF54aVhMNkR2V091
KjYweHg7dTZWI1EyezByOGFkQ3koCnpFbjtJdVYmZzxDbGhwZ3tvIT4yOHA0akk+VyNDVzUzT0Ym
IUNzQXJ+Um90dG9nSE0+JnNAUz5ES3F8N2h8M1NEOQp6cUY5WGlZd2ZnbU5VSlJGaFklKDFvNnhM
WSlAPztRS0pNTSU5WnYxfTs+MH4yIXIjfTB6cDB6V2B4Tkg5VWVEaigKemd9PVhSUXRqbX17X2R+
RXErO2JCNm0kSUNtcl5MIWxIJF5qcGBeQ1FRT0VyPj1KPmZecnJnKV5LUnNzZF5EKVFJCnplTHVv
fDgwS1RwXlNiPns9WCUpdilwTFJTbUNXJlR8QkBFSmlucFQxVHl6YiVtJnpQSl9nNHdgej9oRmdg
UmQxXwp6PldqNyY5am07e0RtTHkxR3NuKzhWcEAhUHRTVE5vdVdXaDhjZHorV3tNXzRTai1Qd2pE
cztSPms0TFIzX3VpU34Kej1ZQmxse3dlSmtscjhGQyhhSWAqP2pKUEEmcG4wMHk8Z2ZmQ3xsOXVF
Z0Z4Q3BaZ3JtQHBJcCE3UWMlOU5yKyM/Cnokby1uO19fPUA2OTYkSHBScnZLK0B2RTVpPz8wOUNt
K3Z7TlQ+dFcyQDFwTk5tRnIpeil9TVJhTVpJc1ReUCpKcgp6ZHt2fmZpY2lJPVYlRmIzeGxmLXBy
Y319Mnw1YmNTRHJQLT9AJkBfUW5+YzhScy0pKkRmLU0qJWBIMEgrJWxaNzIKenZpe0VHUU9yI2g7
ZHhTODRDV3gyQXdNSkJue2IkfmZ5VSUmM059QCE9WH05cURIdFI8QW1SM2xWfm9FVSpgUl89Cnpr
M0RgQmoyP0g8eWRKMkV4bjh8YEZecz1DYDZqKHV2I017d3E+dUc1dFVtNjhqLX5ma0cxc3FPVXlH
bVlsd1BnYgp6Mk9ZYVNgc3NuSG5Eekx7ZiQ3eTFIdlUyWnZPc1JsOTZ5PTFxUmtiKU8jVilmelp1
eSlBPjtLI2lKWUsle1lJPHoKelB4NklBLWNaUSYzN0pENyg8a0goWD81azckSV99Y3R6TmhFUU5D
SlJ6UTAhMT54KWA3bWFoRE0xPFB0fHQqck9FCno8NGN5MUY8SmB3TTxMJiotYW41cGVyS3xWTFZp
KW1Da3B2UUF4bFhNU19vTjFBeTtZMm8ye3krU1Q/b01zKHp8Wgp6ZnFLMllwakJnUWVSTituelJH
aGhhK2dCQlFwak95Rl82QyRAfFQpRlN4K0lLRCYkSXFUJXdUQVJHKGptN3szJFEKek4rQXlePFNk
MmtyO3FeXnZYYF9oenNZPXY0YT5CMXQlY205a2FaTllrRDRYX0RDOXFkKyQ4LT5CNVRRaEJ9PEo+
CnpQTHBGUChUNV55JCRWOElBMWRUUmg1ViM4ND4/Z0dCZyhPPTNifFMjbW5oXkNnKUZJJXZzQjtU
SG1kbF5hU0dXPgp6QUAzO1U5ZmNnRWtjU2o8a1V8YnAlYWZmSGEqeyRtUXBpP1A5ZmUkX2tlP0tD
bHRQfFQkV2BWYDx4M1ZoT2QtYzkKejxUWnUtQ2lDczZfQ20lfSRhKUduUGEpNEs8VUVDSkM7aHlI
OUgpQHU2dGNFTDdGTmkyM0s+KXRLWCl5fENNeUo5CnpXTUdBaXNnTlpWR053WklSTEk3YkVTP3VL
dUEwY0lOLT4zMDZTQXRNRTU4cH1TZFBLNU59SCEoeT9RUSRTUFIpIwp6RXc9Y0g7OXA4bXlWRU9F
PHFBfTt6Pn5aSnJZfTNpSWc/MHJQJiVMVEJwPX04aEBJPEorUFc2NFNOcFZGc0dnTEMKem1TZChl
bTlfJSpZXmR7cWRlSHF6NHhDVEQ2NGN6fHNtMFZ2WVE9ciU5czJJMj9zdCNUNCkhNkQxamh+aVQl
dU5YCnpjbThFKkheLWRDJihfVVorX2l2SXghWE47bj9DbT98RUM/WlpMMz1EPE5SJk9ka09oNEF0
eHJ9ejZ5ISNteWpWNwp6dlNkUTA/N0BeamhCZ2w4QWN3fWVub0RCYFlYaiVeQjFjeTBiKCM4Mm5T
N0E7OCpIZ2dfdEJ2NCkyYyt5T2pee20KejskQk8lQmcxQkA8ZkRFY1JKWjFhNjU0ZDFgPzMwWDxt
SUdjYiZFdks/P0lNTXQ1Jn07PiVUWHY8OS14VTxFdW53CnpQbj5PYCV9LXVXdDVhKkU9Mlo2XilO
aXAkND82fW1yYj1XM3I5cE1te04oPyVJPD0wZntaWCFpSzBvPEh1REB4MQp6R0tsOCszKkt2YSp2
R0VNKTh7QWFYcjctdXFjKj5LUTFkXkVkRyNeJWBOPk80THAjJilsY19CQ2BOP2NiQmgmb3UKejxU
fWZKZXNaSklzME8mdDhaOTJ6ezU3cWktNnRnNVRIXjhSJnFlKipKdUlzeEJSP3koXjUtV2JZbzFA
dHB9K25nCnojcF9VaXt+P2Jud1FOa3NQZnBpN3puWig/eXoyUy11I1FgZXR0VD9VPUswQTBZdGAh
Z01fK1NnQUopQTNuaWlhJgp6eXM+JEhhPiNtRTQ+WjNYYkoyTCErTnQrK1clWG16Q25FREt3ZSMx
WEVWTiMmOWtYN3oqQmE+YUR0fnAoTzdkNTgKenROTWJMTUlqNHFvfVYxR3M/dCk/VnxiV2x7aio8
OUw+fThiS04pVio8bUxFQ0NmcXpmUyNsdTxFbzdwRmpJPHs1CnooeFFvRmIzVlVMXklfaVh0OTxm
aFlEKlMhKmgyblYkWF8jbWY9VSRmKitOZDZfbWUqc0dUaD09X2JLaURoZktWWAp6dy0rK3tMT3gl
fTxfajVwbFR+RzFzeENpSW1meEg9YD5IeU1UKSZYbjdqcEtwcWJHejZ6bVZrQHsoUyU7bW9NYj0K
emdgQj1QSXkkUVBVQ0Z9PnhxMmFnRlhab3ErYFcqdypETmBGQXVCSXI8dSNHTEhgVE05SmlhRktg
bGg8c0VHemojCnokbG5YdWRtKjxrPG5WPUR6Vkw0aDJ6aGVoLSR+SD9ubF4yRWZiJSF+YXUjeVEh
VjgmcEE+JUcmLUQhSVdgRjl9YAp6RkojX0BqSiVNUW16LUB+c1YraTNVZFlMN0IxPHBpPnhGRStr
ZypyQ19zbn19ZWFZVm8qP0oqWUZaPiQ7IW9PSnsKentRQ2dCLSkxRkY0aT9pbXprUFp6ezRSdnJ7
aDdJPnNnVXV7JUxzU0slYjBKVW1sMC0xUm5OOzxQPW5Tc0ZKb1R5Cnp5dnpqLWQ2e2dfNDZtNyY4
QnIlTUJjZWBqIz09Xjs+R1NQISgtK2pwTyVKb3BPYEIoKGRucEstKCZ5UmFVSjZGOwp6Y2huRV9r
JFd2MWY0e29HOypUJDhWeDV8c3MhV2YwMUB5T18kbnVOQkxaNEd2YilWdTZ4OWY3UkQzdDN7UlBG
bmEKekB+PSoqeldmVXM4a1lQUFpDU0w0ZSlCMXhUfFRYblNNK1U+eXx7Tz84JW00dnR6SXJfQlZL
ZzV2Q1B9YCozZFJ9CnomYSF7TiNuPiU+a1UxOHohJFFfcSRtZVEjUlczPW9aPWtuRm1nPTgmViZg
cU9VZ35wMU4mbFd3bnBIbVBiOVlXMwp6dyt6KWs8SFEhTmVfMjElKU1xQzdVPHZOcVRJPklQKHh3
T01BSlg1e3xBKnZfX3VaZHR2Vjt3MnJPa2dlQ0NjMWkKeiNhNVElQW1jM0lnSWEzK2ZCSW0oeCZP
V1RzX35VbnxIeE5Oe2NvSCQjbXtQT1VEZXZeRHk+ZXtGTWhlMVk1aWl1CnpaPEQ8aWFAYXkxVGdZ
bF9COHo8fCZwSTtOKUU3ZElUZ1kkQSttcE1ldE1pdksrMihoJDwzZiZIJGRsKkdLYFdDcgp6ciZY
I1U8alJHN3hzWHA2YV8rSjxZfit7aEtsSWB9YF9vc354WmxvUisybmZtQGBsJjF1NWlBN2J5PFYh
UzY0UV4KemVwUXYxKjFpN1lxVDFLOW1wTmEqdyVxQ1o0PVlANm9RZCVJKWl+MkdmYzxUJCRDQEox
amxYU357c1BxZlNhbDltCkZgYWpRY0M9bWJ2CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5LnJjIGIv
VG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeS5yYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41OThmMDFhYmMyZjEyNTVmZjQ4OGY3NjdjYTE5NmFhYmY2NWUyZWJhCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeS5yYwpAQCAt
MCwwICsxLDc2IEBACisvLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgcmVzb3VyY2Ug
c2NyaXB0LgorLy8KKyNpbmNsdWRlICJNaW5pQnJvd3NlckxlZ2FjeVJlc291cmNlLmgiCisKKyNk
ZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
CisvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KKy8vCisjZGVm
aW5lIEFQU1RVRElPX0hJRERFTl9TWU1CT0xTCisjaW5jbHVkZSAid2luZG93cy5oIgorI3VuZGVm
IEFQU1RVRElPX0hJRERFTl9TWU1CT0xTCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjdW5kZWYg
QVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gRW5n
bGlzaCAoVS5TLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8
fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKKyNpZmRlZiBfV0lOMzIKK0xBTkdVQUdFIExBTkdfRU5H
TElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCisjcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQorI2VuZGlm
IC8vX1dJTjMyCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSWNvbgorLy8KKworLy8g
SWNvbiB3aXRoIGxvd2VzdCBJRCB2YWx1ZSBwbGFjZWQgZmlyc3QgdG8gZW5zdXJlIGFwcGxpY2F0
aW9uIGljb24KKy8vIHJlbWFpbnMgY29uc2lzdGVudCBvbiBhbGwgc3lzdGVtcy4KK0lESV9NSU5J
QlJPV1NFUkxFR0FDWSAgIElDT04gICAgICAgICAgICAgICAgICAgICJNaW5pQnJvd3NlckxlZ2Fj
eS5pY28iCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAiTWlu
aUJyb3dzZXJMZWdhY3lSZXNvdXJjZS5cMCIKK0VORAorCisyIFRFWFRJTkNMVURFIAorQkVHSU4K
KyAgICAiI2RlZmluZSBBUFNUVURJT19ISURERU5fU1lNQk9MU1xyXG4iCisgICAgIiNpbmNsdWRl
ICIid2luZG93cy5oIiJcclxuIgorICAgICIjdW5kZWYgQVBTVFVESU9fSElEREVOX1NZTUJPTFNc
clxuIgorICAgICJcMCIKK0VORAorCiszIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAiXHJcbiIK
KyAgICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworI2VuZGlm
ICAgIC8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
CisKKyNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisv
LyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4KKy8vCisKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKyNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRAorCmRp
ZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5TGli
LnJjIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeUxpYi5yYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xNDJlMWU3M2Q4ZThjZDhlODIwMjI2ZDZkMzBiNDNmMDZkMmU0N2UwCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2Fj
eUxpYi5yYwpAQCAtMCwwICsxLDQxMSBAQAorLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJh
dGVkIHJlc291cmNlIHNjcmlwdC4KKy8vCisjaW5jbHVkZSAiTWluaUJyb3dzZXJMZWdhY3lMaWJS
ZXNvdXJjZS5oIgorCisjZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVz
b3VyY2UuCisvLworI2RlZmluZSBBUFNUVURJT19ISURERU5fU1lNQk9MUworI2luY2x1ZGUgIndp
bmRvd3MuaCIKKyN1bmRlZiBBUFNUVURJT19ISURERU5fU1lNQk9MUworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpIHJlc291cmNlcworCisjaWYgIWRl
ZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpCitMQU5HVUFH
RSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUworI3ByYWdtYSBjb2RlX3BhZ2UoMTI1
MikKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBJY29uCisvLworCisvLyBJY29uIHdp
dGggbG93ZXN0IElEIHZhbHVlIHBsYWNlZCBmaXJzdCB0byBlbnN1cmUgYXBwbGljYXRpb24gaWNv
bgorLy8gcmVtYWlucyBjb25zaXN0ZW50IG9uIGFsbCBzeXN0ZW1zLgorSURJX01JTklCUk9XU0VS
TEVHQUNZICAgSUNPTiAgICAgICAgICAgICAgICAgICAgIk1pbmlCcm93c2VyTGVnYWN5LmljbyIK
KworSURJX1NNQUxMICAgICAgICAgICAgICAgSUNPTiAgICAgICAgICAgICAgICAgICAgInNtYWxs
LmljbyIKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1lbnUKKy8vCisKK0lEQ19N
SU5JQlJPV1NFUkxFR0FDWSBNRU5VCitCRUdJTgorICAgIFBPUFVQICImRmlsZSIKKyAgICBCRUdJ
TgorICAgICAgICBNRU5VSVRFTSAiJlByaW50XHRDdHJsLVAiLCAgICAgICAgICAgICAgSURNX1BS
SU5UCisgICAgICAgIE1FTlVJVEVNICJFJnhpdCIsICAgICAgICAgICAgICAgICAgICAgICBJRE1f
RVhJVAorICAgICAgICBNRU5VSVRFTSAiTmV3IFdlYktpdExlZ2FjeSBXaW5kb3ciLCAgICAgSURN
X05FV19XRUJLSVRMRUdBQ1lfV0lORE9XCisgICAgICAgIE1FTlVJVEVNICJDbG9zZVx0Q3RybC1X
IiwgICAgICAgICAgICAgICBJRE1fQ0xPU0VfV0lORE9XCisgICAgRU5ECisgICAgUE9QVVAgIiZW
aWV3IgorICAgIEJFR0lOCisgICAgICAgIE1FTlVJVEVNICJSZWxvYWRcdEN0cmwtUiIsICAgICAg
ICAgICAgICBJRE1fUkVMT0FECisgICAgICAgIE1FTlVJVEVNICJBY3R1YWwgU2l6ZSIsICAgICAg
ICAgICAgICAgICBJRE1fQUNUVUFMX1NJWkUKKyAgICAgICAgTUVOVUlURU0gIlpvb20gSW5cdEN0
cmwrKyIsICAgICAgICAgICAgIElETV9aT09NX0lOCisgICAgICAgIE1FTlVJVEVNICJab29tIE91
dFx0Q3RybCstIiwgICAgICAgICAgICBJRE1fWk9PTV9PVVQKKyAgICAgICAgTUVOVUlURU0gIklu
dmVydCBDb2xvcnMiLCAgICAgICAgICAgICAgIElETV9JTlZFUlRfQ09MT1JTCisgICAgRU5ECisg
ICAgUE9QVVAgIiZIaXN0b3J5IgorICAgIEJFR0lOCisgICAgICAgIE1FTlVJVEVNICJCYWNrIiwg
ICAgICAgICAgICAgICAgICAgICAgICBJRE1fSElTVE9SWV9CQUNLV0FSRAorICAgICAgICBNRU5V
SVRFTSAiRm9yd2FyZCIsICAgICAgICAgICAgICAgICAgICAgSURNX0hJU1RPUllfRk9SV0FSRAor
ICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKKyAgICAgICAgTUVOVUlURU0gIlVudXNlZCBIaXN0
b3J5IDAiLCAgICAgICAgICAgIElETV9ISVNUT1JZX0xJTkswCisgICAgICAgIE1FTlVJVEVNICJV
bnVzZWQgSGlzdG9yeSAxIiwgICAgICAgICAgICBJRE1fSElTVE9SWV9MSU5LMQorICAgICAgICBN
RU5VSVRFTSAiVW51c2VkIEhpc3RvcnkgMiIsICAgICAgICAgICAgSURNX0hJU1RPUllfTElOSzIK
KyAgICAgICAgTUVOVUlURU0gIlVudXNlZCBIaXN0b3J5IDMiLCAgICAgICAgICAgIElETV9ISVNU
T1JZX0xJTkszCisgICAgICAgIE1FTlVJVEVNICJVbnVzZWQgSGlzdG9yeSA0IiwgICAgICAgICAg
ICBJRE1fSElTVE9SWV9MSU5LNAorICAgICAgICBNRU5VSVRFTSAiVW51c2VkIEhpc3RvcnkgNSIs
ICAgICAgICAgICAgSURNX0hJU1RPUllfTElOSzUKKyAgICAgICAgTUVOVUlURU0gIlVudXNlZCBI
aXN0b3J5IDYiLCAgICAgICAgICAgIElETV9ISVNUT1JZX0xJTks2CisgICAgICAgIE1FTlVJVEVN
ICJVbnVzZWQgSGlzdG9yeSA3IiwgICAgICAgICAgICBJRE1fSElTVE9SWV9MSU5LNworICAgICAg
ICBNRU5VSVRFTSAiVW51c2VkIEhpc3RvcnkgOCIsICAgICAgICAgICAgSURNX0hJU1RPUllfTElO
SzgKKyAgICAgICAgTUVOVUlURU0gIlVudXNlZCBIaXN0b3J5IDkiLCAgICAgICAgICAgIElETV9I
SVNUT1JZX0xJTks5CisgICAgRU5ECisgICAgUE9QVVAgIkQmZXZlbG9wIgorICAgIEJFR0lOCisg
ICAgICAgIE1FTlVJVEVNICJTaG93IFdlYiBJbnNwZWN0b3IiLCAgICAgICAgICBJRE1fV0VCX0lO
U1BFQ1RPUgorICAgICAgICBQT1BVUCAiVXNlciBBZ2VudCIKKyAgICAgICAgQkVHSU4KKyAgICAg
ICAgICAgIE1FTlVJVEVNICJEZWZhdWx0IChBdXRvbWF0aWNhbGx5IENob3NlbikiLCBJRE1fVUFf
REVGQVVMVAorICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAgICAgICAgICBNRU5V
SVRFTSAiU2FmYXJpIiwgICAgICAgICAgICAgICAgICAgICAgSURNX1VBX1NBRkFSSQorICAgICAg
ICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAgICAgICAgICBNRU5VSVRFTSAiU2FmYXJpIGlP
UyAtIGlQaG9uZSIsICAgICAgICAgSURNX1VBX1NBRkFSSV9JT1NfSVBIT05FCisgICAgICAgICAg
ICBNRU5VSVRFTSAiU2FmYXJpIGlPUyAtIGlQYWQiLCAgICAgICAgICAgSURNX1VBX1NBRkFSSV9J
T1NfSVBBRAorICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAgICAgICAgICBNRU5V
SVRFTSAiTWljcm9zb2Z0IEVkZ2UiLCAgICAgICAgICAgICAgSURNX1VBX0VER0UKKyAgICAgICAg
ICAgIE1FTlVJVEVNICJJbnRlcm5ldCBFeHBsb3JlciAxMS4wIiwgICAgICBJRE1fVUFfSUVfMTEK
KyAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgorICAgICAgICAgICAgTUVOVUlURU0gIkdv
b2dsZSBDaHJvbWUgLSBNYWMiLCAgICAgICAgIElETV9VQV9DSFJPTUVfTUFDCisgICAgICAgICAg
ICBNRU5VSVRFTSAiR29vZ2xlIENocm9tZSAtIFdpbmRvd3MiLCAgICAgSURNX1VBX0NIUk9NRV9X
SU4KKyAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgorICAgICAgICAgICAgTUVOVUlURU0g
IkZpcmVmb3ggLSBNYWMiLCAgICAgICAgICAgICAgIElETV9VQV9GSVJFRk9YX01BQworICAgICAg
ICAgICAgTUVOVUlURU0gIkZpcmVmb3ggLSBXaW5kb3dzIiwgICAgICAgICAgIElETV9VQV9GSVJF
Rk9YX1dJTgorICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAgICAgICAgICBNRU5V
SVRFTSAiT3RoZXIiLCAgICAgICAgICAgICAgICAgICAgICAgSURNX1VBX09USEVSCisgICAgICAg
IEVORAorICAgICAgICBNRU5VSVRFTSAiUHJveHkgU2V0dGluZ3MuLi4iLCAgICAgICAgICAgSURN
X1BST1hZX1NFVFRJTkdTCisgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgorICAgICAgICBNRU5V
SVRFTSAiRGlzYWJsZSBJbWFnZXMiLCAgICAgICAgICAgICAgSURNX0RJU0FCTEVfSU1BR0VTCisg
ICAgICAgIE1FTlVJVEVNICJEaXNhYmxlIFN0eWxlcyIsICAgICAgICAgICAgICBJRE1fRElTQUJM
RV9TVFlMRVMKKyAgICAgICAgTUVOVUlURU0gIkRpc2FibGUgSmF2YVNjcmlwdCIsICAgICAgICAg
IElETV9ESVNBQkxFX0pBVkFTQ1JJUFQKKyAgICAgICAgTUVOVUlURU0gIkRpc2FibGUgTG9jYWwg
RmlsZSBSZXN0cmljdGlvbnMiLCBJRE1fRElTQUJMRV9MT0NBTF9GSUxFX1JFU1RSSUNUSU9OUwor
ICAgIEVORAorICAgIFBPUFVQICImSGVscCIKKyAgICBCRUdJTgorICAgICAgICBNRU5VSVRFTSAi
JkFib3V0IC4uLiIsICAgICAgICAgICAgICAgICAgSURNX0FCT1VUCisgICAgRU5ECisgICAgUE9Q
VVAgIiZEZWJ1ZyIKKyAgICBCRUdJTgorICAgICAgICBNRU5VSVRFTSAiVXNlIEFWRm91bmRhdGlv
biIsICAgICAgICAgICAgSURNX0FWRk9VTkRBVElPTiwgQ0hFQ0tFRAorICAgICAgICBNRU5VSVRF
TSAiVXNlIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIiwgSURNX0FDQ19DT01QT1NJVElORywgQ0hF
Q0tFRAorICAgICAgICBNRU5VSVRFTSAiRW5hYmxlIFdlYktpdCBGdWxsIFNjcmVlbiIsICAgSURN
X1dLX0ZVTExTQ1JFRU4sIENIRUNLRUQKKyAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAg
ICAgIE1FTlVJVEVNICJTaG93IENvbXBvc2l0aW5nIEJvcmRlcnMiLCAgICBJRE1fQ09NUE9TSVRJ
TkdfQk9SREVSUworICAgICAgICBNRU5VSVRFTSAiU2hvdyBUaWxlZCBEcmF3aW5nIGluZGljYXRv
ciIsIElETV9ERUJVR19JTkZPX0xBWUVSCisgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgorICAg
ICAgICBNRU5VSVRFTSAiU2hvdyBDYWNoZXMgV2luZG93IiwgICAgICAgICAgSURNX0NBQ0hFUwor
ICAgICAgICBNRU5VSVRFTSAiU2hvdyBMYXllciBUcmVlIiwgICAgICAgICAgICAgSURNX1NIT1df
TEFZRVJfVFJFRQorICAgIEVORAorRU5ECisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisv
LyBBY2NlbGVyYXRvcgorLy8KKworSURDX01JTklCUk9XU0VSTEVHQUNZIEFDQ0VMRVJBVE9SUwor
QkVHSU4KKyAgICAiLyIsICAgICAgICAgICAgSURNX0FCT1VULCAgICAgICAgICAgICAgQVNDSUks
ICBBTFQsIE5PSU5WRVJUCisgICAgIj8iLCAgICAgICAgICAgIElETV9BQk9VVCwgICAgICAgICAg
ICAgIEFTQ0lJLCAgQUxULCBOT0lOVkVSVAorICAgIFZLX0FERCwgICAgICAgICBJRE1fWk9PTV9J
TiwgICAgICAgICAgICBWSVJUS0VZLCBDT05UUk9MLCBOT0lOVkVSVAorICAgIFZLX1NVQlRSQUNU
LCAgICBJRE1fWk9PTV9PVVQsICAgICAgICAgICBWSVJUS0VZLCBDT05UUk9MLCBOT0lOVkVSVAor
ICAgICJXIiwgICAgICAgICAgICBJRE1fQ0xPU0VfV0lORE9XLCAgICAgICBWSVJUS0VZLCBDT05U
Uk9MLCBOT0lOVkVSVAorICAgICJSIiwgICAgICAgICAgICBJRE1fUkVMT0FELCAgICAgICAgICAg
ICBWSVJUS0VZLCBDT05UUk9MLCBOT0lOVkVSVAorRU5ECisKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vCisvLyBEaWFsb2cKKy8vCisKK0lERF9BQk9VVEJPWCBESUFMT0dFWCAyMiwgMTcsIDIz
MCwgNDEKK1NUWUxFIERTX1NFVEZPTlQgfCBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdT
X1NZU01FTlUKK0NBUFRJT04gIkFib3V0IgorRk9OVCA4LCAiTVMgU2hlbGwgRGxnIiwgMCwgMCwg
MHgwCitCRUdJTgorICAgIElDT04gICAgICAgICAgICBJRElfTUlOSUJST1dTRVJMRUdBQ1ksSURD
X01ZSUNPTiwxNCw5LDIwLDIwCisgICAgTFRFWFQgICAgICAgICAgICJNaW5pQnJvd3NlckxlZ2Fj
eSBWZXJzaW9uIDEuMSIsSURDX1NUQVRJQyw0OSwxMCwxMTksOAorICAgIExURVhUICAgICAgICAg
ICAiQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKKyAgICBE
RUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE4NiwxMCwzMCwxMSxXU19HUk9VUAorRU5ECisKK0lE
RF9DQUNIRVMgRElBTE9HRVggMCwgMCwgNDAxLCA0NTYKK1NUWUxFIERTX1NFVEZPTlQgfCBEU19N
T0RBTEZSQU1FIHwgRFNfRklYRURTWVMgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNN
RU5VCitDQVBUSU9OICJEaWFsb2ciCitGT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAsIDAsIDB4
MQorQkVHSU4KKyAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDI4Nyw0MzUsNTAsMTQKKyAg
ICBQVVNIQlVUVE9OICAgICAgIkNhbmNlbCIsSURDQU5DRUwsMzQ0LDQzNSw1MCwxNAorICAgIEdS
T1VQQk9YICAgICAgICAiRmFzdE1hbGxvYyIsSURDX1NUQVRJQywyMDgsMTQsMTg2LDY3CisgICAg
R1JPVVBCT1ggICAgICAgICJXZWJDb3JlIENhY2hlIixJRENfU1RBVElDLDE3LDgzLDM3NiwxMDUK
KyAgICBHUk9VUEJPWCAgICAgICAgIkphdmFTY3JpcHQgSGVhcCIsSURDX1NUQVRJQywxOCwxOTMs
Mzc2LDE2OAorICAgIEdST1VQQk9YICAgICAgICAiU2l0ZSBJY29uIERhdGFiYXNlIixJRENfU1RB
VElDLDE4LDM2NiwxNDIsNjUKKyAgICBHUk9VUEJPWCAgICAgICAgIkZvbnQgYW5kIEdseXBoIENh
Y2hlcyIsSURDX1NUQVRJQywxNjgsMzY2LDIyNiw2NgorICAgIEdST1VQQk9YICAgICAgICAiQ0ZV
UkxDYWNoZSIsSURDX1NUQVRJQyw3LDE0LDE5Nyw2NworICAgIFBVU0hCVVRUT04gICAgICAiRW1w
dHkgVVJMQ2FjaGUiLElEQ19FTVBUWV9VUkxfQ0FDSEUsMTMxLDYzLDY5LDE0LFdTX0RJU0FCTEVE
CisgICAgUFVTSEJVVFRPTiAgICAgICJSZXR1cm4gRnJlZSBNZW1vcnkiLElEQ19SRVRVUk5fRlJF
RV9NRU1PUlksMzA4LDYzLDc2LDE0LFdTX0RJU0FCTEVECisgICAgUFVTSEJVVFRPTiAgICAgICJF
bXB0eSBXZWJDb3JlIENhY2hlIixJRENfRU1QVFlfV0VCQ09SRV9DQUNIRSwyMSwxNzAsODMsMTQs
V1NfRElTQUJMRUQKKyAgICBDT05UUk9MICAgICAgICAgIkRpc2FibGUgV2ViQ29yZSBDYWNoZSIs
SURDX0NIRUNLMSwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCBXU19ESVNBQkxFRCB8IFdTX1RB
QlNUT1AsMTE5LDE3Miw5MywxMAorICAgIFBVU0hCVVRUT04gICAgICAiR2FyYmFnZSBDb2xsZWN0
IEphdmFTY3JpcHQgT2JqZWN0cyIsSURDX0dDX0pTQywyNTMsMzQzLDEzNSwxNCxXU19ESVNBQkxF
RAorICAgIFJURVhUICAgICAgICAgICAiUmVzZXJ2ZWQgVk0iLElEQ19TVEFUSUMsMjEyLDI2LDY3
LDkKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElEQ19SRVNFUlZFRF9WTSwyOTAsMjYsOTQsOAor
ICAgIFJURVhUICAgICAgICAgICAiQ29tbWl0dGVkIFZNIixJRENfU1RBVElDLDIxMSwzOSw2Nyw4
CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfQ09NTUlUVEVEX1ZNLDI5MCwzOSw5NCw4Cisg
ICAgUlRFWFQgICAgICAgICAgICJGcmVlIExpc3QgQnl0ZXMiLElEQ19TVEFUSUMsMjExLDUyLDY3
LDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElEQ19GUkVFX0xJU1RfQllURVMsMjkwLDUyLDk0
LDgKKyAgICBSVEVYVCAgICAgICAgICAgIkltYWdlcyIsSURDX1NUQVRJQywzNywxMDYsMjQsOAor
ICAgIFJURVhUICAgICAgICAgICAiQ1NTIixJRENfU1RBVElDLDQ3LDExNiwxNCw4CisgICAgUlRF
WFQgICAgICAgICAgICJYU0wiLElEQ19TVEFUSUMsNDksMTI2LDEyLDgKKyAgICBSVEVYVCAgICAg
ICAgICAgIkphdmFTY3JpcHQiLElEQ19TVEFUSUMsMjcsMTM1LDM0LDgKKyAgICBSVEVYVCAgICAg
ICAgICAgIlRvdGFsIixJRENfU1RBVElDLDQzLDE0NiwxNyw4CisgICAgTFRFWFQgICAgICAgICAg
ICJPYmplY3RzIixJRENfU1RBVElDLDExMSw5NiwyNiw4CisgICAgTFRFWFQgICAgICAgICAgICJC
eXRlcyIsSURDX1NUQVRJQywxNzUsOTYsMTksOAorICAgIExURVhUICAgICAgICAgICAiTGl2ZSIs
SURDX1NUQVRJQywyMzIsOTYsMTQsOAorICAgIExURVhUICAgICAgICAgICAiRGVjb2RlZCIsSURD
X1NUQVRJQywyODQsOTYsMjksOAorICAgIExURVhUICAgICAgICAgICAiUHVyZ2VhYmxlIixJRENf
U1RBVElDLDM1MSw5NiwzMyw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfSU1BR0VTX09C
SkVDVF9DT1VOVCwxMDAsMTA2LDMyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElEQ19DU1Nf
T0JKRUNUX0NPVU5ULDEwMCwxMTYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1hT
TF9PQkpFQ1RfQ09VTlQsMTAwLDEyNiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENf
SlNDX09CSkVDVF9DT1VOVCwxMDAsMTM1LDMyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElE
Q19UT1RBTF9PQkpFQ1RfQ09VTlQsMTAwLDE0NiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIw
IixJRENfSU1BR0VTX0JZVEVTLDE2MiwxMDYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIs
SURDX0NTU19CWVRFUywxNjIsMTE2LDMyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElEQ19Y
U0xfQllURVMsMTYyLDEyNiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfSlNDX0JZ
VEVTLDE2MiwxMzUsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1RPVEFMX0JZVEVT
LDE2MiwxNDYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX0lNQUdFU19MSVZFX0NP
VU5ULDIyMSwxMDYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX0NTU19MSVZFX0NP
VU5ULDIyMSwxMTYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1hTTF9MSVZFX0NP
VU5ULDIyMSwxMjYsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX0pTQ19MSVZFX0NP
VU5ULDIyMSwxMzUsMzIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1RPVEFMX0xJVkVf
Q09VTlQsMjIxLDE0NiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfSU1BR0VTX0RF
Q09ERURfQ09VTlQsMjg0LDEwNiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfQ1NT
X0RFQ09ERURfQ09VTlQsMjg0LDExNiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENf
WFNMX0RFQ09ERURfQ09VTlQsMjg0LDEyNiwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJ
RENfSlNDX0RFQ09ERURfQ09VTlQsMjg0LDEzNSwzMiw4CisgICAgUlRFWFQgICAgICAgICAgICIw
IixJRENfVE9UQUxfREVDT0RFRCwyODQsMTQ2LDMyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAi
LElEQ19JTUFHRVNfUFVSR0VBQkxFX0NPVU5ULDM1NCwxMDYsMzIsOAorICAgIFJURVhUICAgICAg
ICAgICAiMCIsSURDX0NTU19QVVJHRUFCTEVfQ09VTlQsMzU0LDExNiwzMiw4CisgICAgUlRFWFQg
ICAgICAgICAgICIwIixJRENfWFNMX1BVUkdFQUJMRV9DT1VOVCwzNTQsMTI2LDMyLDgKKyAgICBS
VEVYVCAgICAgICAgICAgIjAiLElEQ19KU0NfUFVSR0VBQkxFX0NPVU5ULDM1NCwxMzUsMzIsOAor
ICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1RPVEFMX1BVUkdFQUJMRSwzNTQsMTQ2LDMyLDgK
KyAgICBSVEVYVCAgICAgICAgICAgIlRvdGFsIE9iamVjdHMiLElEQ19TVEFUSUMsNjMsMjA3LDQ0
LDgKKyAgICBSVEVYVCAgICAgICAgICAgIkdsb2JhbCBPYmplY3RzIixJRENfU1RBVElDLDU2LDIx
Nyw1MSw4CisgICAgUlRFWFQgICAgICAgICAgICJQcm90ZWN0ZWQgT2JqZWN0cyIsSURDX1NUQVRJ
Qyw0OCwyMjcsNTksOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1RPVEFMX0pTQ19IRUFQ
X09CSkVDVFMsMTI3LDIwNyw1Niw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJRENfR0xPQkFM
X0pTQ19IRUFQX09CSkVDVFMsMTI3LDIxNyw1Niw4CisgICAgUlRFWFQgICAgICAgICAgICIwIixJ
RENfUFJPVEVDVEVEX0pTQ19IRUFQX09CSkVDVFMsMTI3LDIyNyw1Niw4CisgICAgUlRFWFQgICAg
ICAgICAgICJTaXplIixJRENfU1RBVElDNTYsMjIzLDIwNywxNCw4CisgICAgUlRFWFQgICAgICAg
ICAgICJGcmVlIixJRENfU1RBVElDNTcsMjIyLDIxNywxNiw4CisgICAgUlRFWFQgICAgICAgICAg
ICIwIixJRENfSlNDX0hFQVBfU0laRSwyNzAsMjA3LDU2LDgKKyAgICBSVEVYVCAgICAgICAgICAg
IjAiLElEQ19KU0NfSEVBUF9GUkVFLDI3MCwyMTcsNTYsOAorICAgIFBVU0hCVVRUT04gICAgICAi
UHVyZ2UgSW5hY3RpdmUgRm9udCBEYXRhIixJRENfQlVUVE9ONSwyOTMsNDE1LDk1LDE0LFdTX0RJ
U0FCTEVECisgICAgTFRFWFQgICAgICAgICAgICJUb3RhbCBGb250IERhdGEgT2JqZWN0cyIsSURD
X1NUQVRJQywyMDgsMzc5LDc4LDgKKyAgICBMVEVYVCAgICAgICAgICAgIkluYWN0aXZlIEZvbnQg
RGF0YSBPYmplY3RzIixJRENfU1RBVElDLDE5OCwzOTAsODgsOAorICAgIExURVhUICAgICAgICAg
ICAiR2x5cGggUGFnZXMiLElEQ19TVEFUSUMsMjQ2LDQwMiw0MCw4CisgICAgUlRFWFQgICAgICAg
ICAgICIwIixJRENfVE9UQUxfRk9OVF9PQkpFQ1RTLDMyOSwzNzksNTYsOAorICAgIFJURVhUICAg
ICAgICAgICAiMCIsSURDX0lOQUNUSVZFX0ZPTlRfT0JKRUNUUywzMjksMzkwLDU2LDgKKyAgICBS
VEVYVCAgICAgICAgICAgIjAiLElEQ19HTFlQSF9QQUdFUywzMjksNDAyLDU2LDgKKyAgICBMVEVY
VCAgICAgICAgICAgIlBhZ2UgVVJMIE1hcHBpbmdzIixJRENfU1RBVElDLDMzLDM4MCw2NCw4Cisg
ICAgTFRFWFQgICAgICAgICAgICJSZXRhaW5lZCBQYWdlIFVSTHMiLElEQ19TVEFUSUMsMzEsMzkw
LDY2LDgKKyAgICBMVEVYVCAgICAgICAgICAgIlNpdGUgSWNvbiBSZWNvcmRzIixJRENfU1RBVElD
LDQwLDQwMCw1Nyw4CisgICAgTFRFWFQgICAgICAgICAgICJTaXRlIEljb25zIHdpdGggRGF0YSIs
SURDX1NUQVRJQywzMiw0MTAsNjUsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1BBR0Vf
VVJMX01BUFBJTkdTLDEwMSwzODAsNTIsOAorICAgIFJURVhUICAgICAgICAgICAiMCIsSURDX1JF
VEFJTkVEX1BBR0VfVVJMUywxMDEsMzkwLDUyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAiLElE
Q19TSVRFX0lDT05fUkVDT1JEUywxMDEsNDAwLDUyLDgKKyAgICBSVEVYVCAgICAgICAgICAgIjAi
LElEQ19TSVRFX0lDT05TX1dJVEhfREFUQSwxMDEsNDEwLDUyLDgKK0VORAorCitJRERfVVNFUl9B
R0VOVCBESUFMT0dFWCAwLCAwLCAzMDksIDE3NgorU1RZTEUgRFNfU0VURk9OVCB8IERTX01PREFM
RlJBTUUgfCBEU19GSVhFRFNZUyB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUK
K0NBUFRJT04gIkRpYWxvZyIKK0ZPTlQgOCwgIk1TIFNoZWxsIERsZyIsIDQwMCwgMCwgMHgxCitC
RUdJTgorICAgIExURVhUICAgICAgICAgICAiVHlwZSBhIGN1c3RvbSB1c2VyIGFnZW50IHN0cmlu
ZyBmb3IgdGhpcyBwYWdlLiIsSURDX01lc3NhZ2UsNyw3LDI5NSwxOQorICAgIEVESVRURVhUICAg
ICAgICBJRENfVVNFUl9BR0VOVF9JTlBVVCw3LDM0LDI5NSwxMTcsRVNfQVVUT0hTQ1JPTEwKKyAg
ICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE5OCwxNTUsNTAsMTQKKyAgICBQVVNIQlVUVE9O
ICAgICAgIkNhbmNlbCIsSURDQU5DRUwsMjUyLDE1NSw1MCwxNAorRU5ECisKK0lERF9BVVRIIERJ
QUxPR0VYIDAsIDAsIDIzMSwgMTE5CitTVFlMRSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8
IERTX0ZJWEVEU1lTIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElP
TiAiQXV0aGVudGljYXRpb24gUmVxdWlyZWQiCitGT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAs
IDAsIDB4MQorQkVHSU4KKyAgICBERUZQVVNIQlVUVE9OICAgIlNpZ24gSW4iLElET0ssMTE2LDk4
LDUwLDE0CisgICAgUFVTSEJVVFRPTiAgICAgICJDYW5jZWwiLElEQ0FOQ0VMLDE3NCw5OCw1MCwx
NAorICAgIExURVhUICAgICAgICAgICAiUmVhbG0iLElEQ19SRUFMTV9URVhULDY3LDIxLDE1Nyw4
CisgICAgUlRFWFQgICAgICAgICAgICJVc2VyIE5hbWU6IixJRENfU1RBVElDLDcsNDEsNTcsOAor
ICAgIEVESVRURVhUICAgICAgICBJRENfQVVUSF9VU0VSLDY3LDM5LDE1NywxNCxFU19BVVRPSFND
Uk9MTAorICAgIFJURVhUICAgICAgICAgICAiUGFzc3dvcmQ6IixJRENfU1RBVElDLDcsNjYsNTcs
OAorICAgIEVESVRURVhUICAgICAgICBJRENfQVVUSF9QQVNTV09SRCw2Nyw2NCwxNTcsMTQsRVNf
UEFTU1dPUkQgfCBFU19BVVRPSFNDUk9MTAorRU5ECisKK0lERF9QUk9YWSBESUFMT0dFWCAwLCAw
LCAzMTAsIDE3NgorU1RZTEUgRFNfU0VURk9OVCB8IERTX01PREFMRlJBTUUgfCBEU19GSVhFRFNZ
UyB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIlByb3h5IENv
bmZpZ3VyYXRpb24iCitGT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAsIDAsIDB4MQorQkVHSU4K
KyAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE5OSwxNTUsNTAsMTQKKyAgICBQVVNIQlVU
VE9OICAgICAgIkNhbmNlbCIsSURDQU5DRUwsMjUzLDE1NSw1MCwxNAorICAgIENPTlRST0wgICAg
ICAgICAiVXNlIHN5c3RlbSBkZWZhdWx0IHByb3h5IGNvbmZpZ3VyYXRpb24uIixJRENfUFJPWFlf
REVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgIkJ1dHRvbiIsQlNfQVVUT1JBRElPQlVUVE9O
IHwgV1NfR1JPVVAsMjIsMTUsMjI2LDEwCisgICAgQ09OVFJPTCAgICAgICAgICJVc2UgY3VzdG9t
IHByb3h5IGNvbmZpZ3VyYXRpb246IixJRENfUFJPWFlfQ1VTVE9NLAorICAgICAgICAgICAgICAg
ICAgICAiQnV0dG9uIixCU19BVVRPUkFESU9CVVRUT04sMjIsMzMsMjI2LDEwCisgICAgQ09OVFJP
TCAgICAgICAgICJEb24ndCB1c2UgcHJveHkuIixJRENfUFJPWFlfRElTQUJMRSwiQnV0dG9uIixC
U19BVVRPUkFESU9CVVRUT04sMjIsMTE3LDIyNiwxMAorICAgIEVESVRURVhUICAgICAgICBJRENf
UFJPWFlfVVJMLDc2LDUyLDE5MywxNCxFU19BVVRPSFNDUk9MTAorICAgIEVESVRURVhUICAgICAg
ICBJRENfUFJPWFlfRVhDTFVERSw3Niw4NSwxOTMsMTQsRVNfQVVUT0hTQ1JPTEwKKyAgICBMVEVY
VCAgICAgICAgICAgIlVSTDoiLElEQ19TVEFUSUMsMzAsNTUsNDMsOCwwLFdTX0VYX1JJR0hUCisg
ICAgTFRFWFQgICAgICAgICAgICJFeGN1ZGUgbGlzdDoiLElEQ19TVEFUSUMsMzAsODgsNDMsOCww
LFdTX0VYX1JJR0hUCisgICAgTFRFWFQgICAgICAgICAgICJFeGFtcGxlOiBodHRwOi8vMTkyLjE2
OC4wLjI6ODAwMCIsSURDX1NUQVRJQyw4MCw2OCwxOTQsOAorICAgIExURVhUICAgICAgICAgICAi
Q29tbWEgc2VwYXJhdGVkIGhvc3RuYW1lcy4iLElEQ19TVEFUSUMsODAsMTAxLDE5NCw4CitFTkQK
KworSUREX1NFUlZFUl9UUlVTVCBESUFMT0dFWCAwLCAwLCAzMTksIDE4NAorU1RZTEUgRFNfU0VU
Rk9OVCB8IERTX01PREFMRlJBTUUgfCBEU19GSVhFRFNZUyB8IFdTX1BPUFVQIHwgV1NfQ0FQVElP
TiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIlNlcnZlciBUcnVzdCBFdmFsdWF0aW9uIFJlcXVlc3Qi
CitGT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAsIDAsIDB4MQorQkVHSU4KKyAgICBERUZQVVNI
QlVUVE9OICAgIlllcyIsSURPSywxOTcsMTYzLDUwLDE0CisgICAgUFVTSEJVVFRPTiAgICAgICJO
byIsSURDQU5DRUwsMjYyLDE2Myw1MCwxNAorICAgIExURVhUICAgICAgICAgICAiQ2VydGlmaWNh
dGUgaW5mb3JtYXRpb24iLElEQ19TVEFUSUMsNyw3LDI5NCwxNworICAgIEVESVRURVhUICAgICAg
ICBJRENfU0VSVkVSX1RSVVNUX1RFWFQsNywyNCwzMDUsMTMwLEVTX01VTFRJTElORSB8IEVTX1JF
QURPTkxZIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBOT1QgV1NfVEFCU1RPUAorRU5ECisK
KworI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
VEVYVElOQ0xVREUKKy8vCisKKzEgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICJNaW5pQnJvd3Nl
ckxlZ2FjeUxpYlJlc291cmNlLmhcMCIKK0VORAorCisyIFRFWFRJTkNMVURFIAorQkVHSU4KKyAg
ICAiI2RlZmluZSBBUFNUVURJT19ISURERU5fU1lNQk9MU1xyXG4iCisgICAgIiNpbmNsdWRlICIi
d2luZG93cy5oIiJcclxuIgorICAgICIjdW5kZWYgQVBTVFVESU9fSElEREVOX1NZTUJPTFNcclxu
IgorICAgICJcMCIKK0VORAorCiszIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAiXHJcbiIKKyAg
ICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8KKy8vIERFU0lHTklORk8KKy8vCisKKyNpZmRlZiBBUFNUVURJT19J
TlZPS0VECitHVUlERUxJTkVTIERFU0lHTklORk8KK0JFR0lOCisgICAgSUREX0FCT1VUQk9YLCBE
SUFMT0cKKyAgICBCRUdJTgorICAgIEVORAorCisgICAgSUREX0NBQ0hFUywgRElBTE9HCisgICAg
QkVHSU4KKyAgICAgICAgTEVGVE1BUkdJTiwgNworICAgICAgICBSSUdIVE1BUkdJTiwgMzk0Cisg
ICAgICAgIFRPUE1BUkdJTiwgNworICAgICAgICBCT1RUT01NQVJHSU4sIDQ0OQorICAgIEVORAor
CisgICAgSUREX1VTRVJfQUdFTlQsIERJQUxPRworICAgIEJFR0lOCisgICAgICAgIExFRlRNQVJH
SU4sIDcKKyAgICAgICAgUklHSFRNQVJHSU4sIDMwMgorICAgICAgICBUT1BNQVJHSU4sIDcKKyAg
ICAgICAgQk9UVE9NTUFSR0lOLCAxNjkKKyAgICBFTkQKKworICAgIElERF9BVVRILCBESUFMT0cK
KyAgICBCRUdJTgorICAgICAgICBMRUZUTUFSR0lOLCA3CisgICAgICAgIFJJR0hUTUFSR0lOLCAy
MjQKKyAgICAgICAgVkVSVEdVSURFLCA2NAorICAgICAgICBWRVJUR1VJREUsIDY3CisgICAgICAg
IFRPUE1BUkdJTiwgNworICAgICAgICBCT1RUT01NQVJHSU4sIDkyCisgICAgICAgIEhPUlpHVUlE
RSwgMjUKKyAgICAgICAgSE9SWkdVSURFLCA1MAorICAgIEVORAorCisgICAgSUREX1BST1hZLCBE
SUFMT0cKKyAgICBCRUdJTgorICAgICAgICBMRUZUTUFSR0lOLCA3CisgICAgICAgIFJJR0hUTUFS
R0lOLCAzMDMKKyAgICAgICAgVkVSVEdVSURFLCAyMgorICAgICAgICBUT1BNQVJHSU4sIDcKKyAg
ICAgICAgQk9UVE9NTUFSR0lOLCAxNjkKKyAgICBFTkQKKworICAgIElERF9TRVJWRVJfVFJVU1Qs
IERJQUxPRworICAgIEJFR0lOCisgICAgICAgIExFRlRNQVJHSU4sIDcKKyAgICAgICAgUklHSFRN
QVJHSU4sIDMxMgorICAgICAgICBUT1BNQVJHSU4sIDcKKyAgICAgICAgQk9UVE9NTUFSR0lOLCAx
NzcKKyAgICBFTkQKK0VORAorI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFN0cmluZyBUYWJsZQorLy8KKworU1RSSU5HVEFCTEUK
K0JFR0lOCisgICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIk1pbmlCcm93c2VyTGVnYWN5Igor
ICAgIElEQ19NSU5JQlJPV1NFUkxFR0FDWSAgICJNSU5JQlJPV1NFUkxFR0FDWSIKK0VORAorCisj
ZW5kaWYgICAgLy8gRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykgcmVzb3VyY2VzCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisKKworI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNl
LgorLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJ
T19JTlZPS0VECisKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvTWluaUJy
b3dzZXJMZWdhY3lMaWJSZXNvdXJjZS5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5p
QnJvd3NlckxlZ2FjeUxpYlJlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBmYzQwYzk5NDA2YzBmZGUz
YjZjMTM3YzhmYTE3NDU1MTc3MzMyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi13a2wvTWluaUJyb3dzZXJMZWdhY3lMaWJSZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTM5
IEBACisvL3t7Tk9fREVQRU5ERU5DSUVTfX0KKy8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVy
YXRlZCBpbmNsdWRlIGZpbGUuCisvLyBVc2VkIGJ5IE1pbmlCcm93c2VyTGVnYWN5TGliLnJjCisv
LworI2RlZmluZSBJRENfTVlJQ09OICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSURE
X01JTklCUk9XU0VSTEVHQUNZX0RJQUxPRyAgICAxMDIKKyNkZWZpbmUgSURTX0FQUF9USVRMRSAg
ICAgICAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgSUREX0FCT1VUQk9YICAgICAgICAgICAgICAg
ICAgICAxMDMKKyNkZWZpbmUgSURNX0FCT1VUICAgICAgICAgICAgICAgICAgICAgICAxMDQKKyNk
ZWZpbmUgSURNX0VYSVQgICAgICAgICAgICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgSURNX1BS
SU5UICAgICAgICAgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgSURJX01JTklCUk9XU0VSTEVH
QUNZICAgICAgICAgICAxMDcKKyNkZWZpbmUgSURJX1NNQUxMICAgICAgICAgICAgICAgICAgICAg
ICAxMDgKKyNkZWZpbmUgSURDX01JTklCUk9XU0VSTEVHQUNZICAgICAgICAgICAxMDkKKyNkZWZp
bmUgSURNX0FWRk9VTkRBVElPTiAgICAgICAgICAgICAgICAxMTAKKyNkZWZpbmUgSURNX0FDQ19D
T01QT1NJVElORyAgICAgICAgICAgICAxMTEKKyNkZWZpbmUgSURNX1dLX0ZVTExTQ1JFRU4gICAg
ICAgICAgICAgICAxMTIKKyNkZWZpbmUgSURNX0NPTVBPU0lUSU5HX0JPUkRFUlMgICAgICAgICAx
MTMKKyNkZWZpbmUgSURNX0NBQ0hFUyAgICAgICAgICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUg
SURNX1dFQl9JTlNQRUNUT1IgICAgICAgICAgICAgICAxMjAKKyNkZWZpbmUgSURNX0RJU0FCTEVf
SU1BR0VTICAgICAgICAgICAgICAxMjEKKyNkZWZpbmUgSURNX0RJU0FCTEVfU1RZTEVTICAgICAg
ICAgICAgICAxMjIKKyNkZWZpbmUgSURNX0RJU0FCTEVfSkFWQVNDUklQVCAgICAgICAgICAxMjMK
KyNkZWZpbmUgSURNX0RJU0FCTEVfTE9DQUxfRklMRV9SRVNUUklDVElPTlMgMTI0CisjZGVmaW5l
IElETV9JTlZFUlRfQ09MT1JTICAgICAgICAgICAgICAgMTI1CisjZGVmaW5lIElEUl9NQUlORlJB
TUUgICAgICAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIElERF9DQUNIRVMgICAgICAgICAgICAg
ICAgICAgICAgMTI5CisjZGVmaW5lIElETV9ISVNUT1JZX0JBQ0tXQVJEICAgICAgICAgICAgMTMw
CisjZGVmaW5lIElERF9VU0VSX0FHRU5UICAgICAgICAgICAgICAgICAgMTMwCisjZGVmaW5lIElE
TV9ISVNUT1JZX0ZPUldBUkQgICAgICAgICAgICAgMTMxCisjZGVmaW5lIElETV9ISVNUT1JZX0xJ
TkswICAgICAgICAgICAgICAgMTUwCisjZGVmaW5lIElETV9ISVNUT1JZX0xJTksxICAgICAgICAg
ICAgICAgMTUxCisjZGVmaW5lIElETV9ISVNUT1JZX0xJTksyICAgICAgICAgICAgICAgMTUyCisj
ZGVmaW5lIElETV9ISVNUT1JZX0xJTkszICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIElETV9I
SVNUT1JZX0xJTks0ICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIElETV9ISVNUT1JZX0xJTks1
ICAgICAgICAgICAgICAgMTU1CisjZGVmaW5lIElETV9ISVNUT1JZX0xJTks2ICAgICAgICAgICAg
ICAgMTU2CisjZGVmaW5lIElETV9ISVNUT1JZX0xJTks3ICAgICAgICAgICAgICAgMTU3CisjZGVm
aW5lIElETV9ISVNUT1JZX0xJTks4ICAgICAgICAgICAgICAgMTU4CisjZGVmaW5lIElETV9ISVNU
T1JZX0xJTks5ICAgICAgICAgICAgICAgMTU5CisjZGVmaW5lIElEVF9VUERBVEVfU1RBVFMgICAg
ICAgICAgICAgICAgMTYwCisjZGVmaW5lIElETV9VQV9ERUZBVUxUICAgICAgICAgICAgICAgICAg
MTYxCisjZGVmaW5lIElETV9VQV9TQUZBUkkgICAgICAgICAgICAgICAgICAgMTYyCisjZGVmaW5l
IElETV9VQV9TQUZBUklfSU9TX0lQSE9ORSAgICAgICAgMTYzCisjZGVmaW5lIElETV9VQV9TQUZB
UklfSU9TX0lQQUQgICAgICAgICAgMTY0CisjZGVmaW5lIElETV9VQV9FREdFICAgICAgICAgICAg
ICAgICAgICAgMTY1CisjZGVmaW5lIElETV9VQV9JRV8xMSAgICAgICAgICAgICAgICAgICAgMTY2
CisjZGVmaW5lIElETV9VQV9DSFJPTUVfTUFDICAgICAgICAgICAgICAgMTY3CisjZGVmaW5lIElE
TV9VQV9DSFJPTUVfV0lOICAgICAgICAgICAgICAgMTY4CisjZGVmaW5lIElETV9VQV9GSVJFRk9Y
X01BQyAgICAgICAgICAgICAgMTY5CisjZGVmaW5lIElETV9VQV9GSVJFRk9YX1dJTiAgICAgICAg
ICAgICAgMTcwCisjZGVmaW5lIElETV9VQV9PVEhFUiAgICAgICAgICAgICAgICAgICAgMTcxCisj
ZGVmaW5lIElETV9BQ1RVQUxfU0laRSAgICAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIElETV9a
T09NX0lOICAgICAgICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIElETV9aT09NX09VVCAgICAg
ICAgICAgICAgICAgICAgMTc0CisjZGVmaW5lIElETV9TSE9XX0xBWUVSX1RSRUUgICAgICAgICAg
ICAgMTc1CisjZGVmaW5lIElERF9BVVRIICAgICAgICAgICAgICAgICAgICAgICAgMTc2CisjZGVm
aW5lIElETV9ERUJVR19JTkZPX0xBWUVSICAgICAgICAgICAgMTc3CisjZGVmaW5lIElERF9QUk9Y
WSAgICAgICAgICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIElERF9TRVJWRVJfVFJVU1QgICAg
ICAgICAgICAgICAgMTc5CisjZGVmaW5lIElEQ19FTVBUWV9VUkxfQ0FDSEUgICAgICAgICAgICAg
MTAwMAorI2RlZmluZSBJRENfUkVUVVJOX0ZSRUVfTUVNT1JZICAgICAgICAgIDEwMDEKKyNkZWZp
bmUgSURDX0VNUFRZX1dFQkNPUkVfQ0FDSEUgICAgICAgICAxMDAyCisjZGVmaW5lIElEQ19DSEVD
SzEgICAgICAgICAgICAgICAgICAgICAgMTAwMworI2RlZmluZSBJRENfSEVBUF9PQkpFQ1RTICAg
ICAgICAgICAgICAgIDEwMDUKKyNkZWZpbmUgSURDX0dDX0pTQyAgICAgICAgICAgICAgICAgICAg
ICAxMDA2CisjZGVmaW5lIElEQ19SRVNFUlZFRF9WTSAgICAgICAgICAgICAgICAgMTAwNworI2Rl
ZmluZSBJRENfQ09NTUlUVEVEX1ZNICAgICAgICAgICAgICAgIDEwMDgKKyNkZWZpbmUgSURDX0ZS
RUVfTElTVF9CWVRFUyAgICAgICAgICAgICAxMDA5CisjZGVmaW5lIElEQ19JTUFHRVNfT0JKRUNU
X0NPVU5UICAgICAgICAgMTAxMQorI2RlZmluZSBJRENfQ1NTX09CSkVDVF9DT1VOVCAgICAgICAg
ICAgIDEwMTIKKyNkZWZpbmUgSURDX1hTTF9PQkpFQ1RfQ09VTlQgICAgICAgICAgICAxMDEzCisj
ZGVmaW5lIElEQ19KU0NfT0JKRUNUX0NPVU5UICAgICAgICAgICAgMTAxNAorI2RlZmluZSBJRENf
VE9UQUxfT0JKRUNUX0NPVU5UICAgICAgICAgIDEwMTUKKyNkZWZpbmUgSURDX0lNQUdFU19CWVRF
UyAgICAgICAgICAgICAgICAxMDE2CisjZGVmaW5lIElEQ19DU1NfQllURVMgICAgICAgICAgICAg
ICAgICAgMTAxNworI2RlZmluZSBJRENfWFNMX0JZVEVTICAgICAgICAgICAgICAgICAgIDEwMTgK
KyNkZWZpbmUgSURDX0pTQ19CWVRFUyAgICAgICAgICAgICAgICAgICAxMDE5CisjZGVmaW5lIElE
Q19UT1RBTF9CWVRFUyAgICAgICAgICAgICAgICAgMTAyMAorI2RlZmluZSBJRENfSU1BR0VTX0xJ
VkVfQ09VTlQgICAgICAgICAgIDEwMjEKKyNkZWZpbmUgSURDX0NTU19MSVZFX0NPVU5UICAgICAg
ICAgICAgICAxMDIyCisjZGVmaW5lIElEQ19YU0xfTElWRV9DT1VOVCAgICAgICAgICAgICAgMTAy
MworI2RlZmluZSBJRENfSlNDX0xJVkVfQ09VTlQgICAgICAgICAgICAgIDEwMjQKKyNkZWZpbmUg
SURDX1RPVEFMX0xJVkVfQ09VTlQgICAgICAgICAgICAxMDI1CisjZGVmaW5lIElEQ19JTUFHRVNf
REVDT0RFRF9DT1VOVCAgICAgICAgMTAyNgorI2RlZmluZSBJRENfQ1NTX0RFQ09ERURfQ09VTlQg
ICAgICAgICAgIDEwMjcKKyNkZWZpbmUgSURDX1hTTF9ERUNPREVEX0NPVU5UICAgICAgICAgICAx
MDI4CisjZGVmaW5lIElEQ19KU0NfREVDT0RFRF9DT1VOVCAgICAgICAgICAgMTAyOQorI2RlZmlu
ZSBJRENfVE9UQUxfREVDT0RFRCAgICAgICAgICAgICAgIDEwMzAKKyNkZWZpbmUgSURDX0lNQUdF
U19QVVJHRUFCTEVfQ09VTlQgICAgICAxMDMxCisjZGVmaW5lIElEQ19DU1NfUFVSR0VBQkxFX0NP
VU5UICAgICAgICAgMTAzMgorI2RlZmluZSBJRENfWFNMX1BVUkdFQUJMRV9DT1VOVCAgICAgICAg
IDEwMzMKKyNkZWZpbmUgSURDX0pTQ19QVVJHRUFCTEVfQ09VTlQgICAgICAgICAxMDM0CisjZGVm
aW5lIElEQ19UT1RBTF9QVVJHRUFCTEUgICAgICAgICAgICAgMTAzNQorI2RlZmluZSBJRENfVE9U
QUxfSlNDX0hFQVBfT0JKRUNUUyAgICAgIDEwMzYKKyNkZWZpbmUgSURDX0dMT0JBTF9KU0NfSEVB
UF9PQkpFQ1RTICAgICAxMDM3CisjZGVmaW5lIElEQ19QUk9URUNURURfSlNDX0hFQVBfT0JKRUNU
UyAgMTAzOAorI2RlZmluZSBJRENfU1RBVElDNTYgICAgICAgICAgICAgICAgICAgIDEwMzkKKyNk
ZWZpbmUgSURDX1NUQVRJQzU3ICAgICAgICAgICAgICAgICAgICAxMDQwCisjZGVmaW5lIElEQ19K
U0NfSEVBUF9TSVpFICAgICAgICAgICAgICAgMTA0MQorI2RlZmluZSBJRENfSlNDX0hFQVBfRlJF
RSAgICAgICAgICAgICAgIDEwNDIKKyNkZWZpbmUgSURDX0JVVFRPTjUgICAgICAgICAgICAgICAg
ICAgICAxMDQzCisjZGVmaW5lIElEQ19UT1RBTF9GT05UX09CSkVDVFMgICAgICAgICAgMTA0NAor
I2RlZmluZSBJRENfTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgIDEwNDQKKyNkZWZpbmUgSURD
X0lOQUNUSVZFX0ZPTlRfT0JKRUNUUyAgICAgICAxMDQ1CisjZGVmaW5lIElEQ19HTFlQSF9QQUdF
UyAgICAgICAgICAgICAgICAgMTA0NgorI2RlZmluZSBJRENfUEFHRV9VUkxfTUFQUElOR1MgICAg
ICAgICAgIDEwNDcKKyNkZWZpbmUgSURDX1JFVEFJTkVEX1BBR0VfVVJMUyAgICAgICAgICAxMDQ4
CisjZGVmaW5lIElEQ19TSVRFX0lDT05fUkVDT1JEUyAgICAgICAgICAgMTA0OQorI2RlZmluZSBJ
RENfVE9UQUxfRk9OVF9PQkpFQ1RTNSAgICAgICAgIDEwNTAKKyNkZWZpbmUgSURDX1NJVEVfSUNP
TlNfV0lUSF9EQVRBICAgICAgICAxMDUxCisjZGVmaW5lIElEQ19VU0VSX0FHRU5UX0lOUFVUICAg
ICAgICAgICAgMTA1MgorI2RlZmluZSBJRENfQVVUSF9VU0VSICAgICAgICAgICAgICAgICAgIDEw
NTMKKyNkZWZpbmUgSURDX0FVVEhfUEFTU1dPUkQgICAgICAgICAgICAgICAxMDU0CisjZGVmaW5l
IElEQ19VUkxfQkFSICAgICAgICAgICAgICAgICAgICAgMTA1NQorI2RlZmluZSBJRENfUkVBTE1f
VEVYVCAgICAgICAgICAgICAgICAgIDEwNTYKKyNkZWZpbmUgSURDX1BST1hZX1VSTCAgICAgICAg
ICAgICAgICAgICAxMDU3CisjZGVmaW5lIElEQ19QUk9YWV9ERUZBVUxUICAgICAgICAgICAgICAg
MTA1OAorI2RlZmluZSBJRENfUFJPWFlfQ1VTVE9NICAgICAgICAgICAgICAgIDEwNTkKKyNkZWZp
bmUgSURDX1BST1hZX0VYQ0xVREUgICAgICAgICAgICAgICAxMDYwCisjZGVmaW5lIElEQ19QUk9Y
WV9ESVNBQkxFICAgICAgICAgICAgICAgMTA2MQorI2RlZmluZSBJRENfU0VSVkVSX1RSVVNUX1RF
WFQgICAgICAgICAgIDEwNjIKKyNkZWZpbmUgSURNX05FV19XRUJLSVRMRUdBQ1lfV0lORE9XICAg
ICAzMjc3NgorI2RlZmluZSBJRE1fUFJPWFlfU0VUVElOR1MgICAgICAgICAgICAgIDMyNzc3Cisj
ZGVmaW5lIElETV9SRUxPQUQgICAgICAgICAgICAgICAgICAgICAgMzI3NzgKKyNkZWZpbmUgSURN
X0NMT1NFX1dJTkRPVyAgICAgICAgICAgICAgICAzMjc3OQorI2RlZmluZSBJRENfU1RBVElDICAg
ICAgICAgICAgICAgICAgICAgIC0xCisKKy8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBv
YmplY3RzCisvLyAKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisjaWZuZGVmIEFQU1RVRElPX1JF
QURPTkxZX1NZTUJPTFMKKyNkZWZpbmUgX0FQU19OT19NRkMgICAgICAgICAgICAgICAgICAgICAx
CisjZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTgwCisjZGVmaW5lIF9B
UFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3ODEKKyNkZWZpbmUgX0FQU19ORVhUX0NP
TlRST0xfVkFMVUUgICAgICAgICAxMDYzCisjZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAg
ICAgICAgICAgMTEwCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeVJlc291cmNlLmggYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4td2tsL01pbmlCcm93c2VyTGVnYWN5UmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTViYzMx
Yzc4OWIyNTI0NmIyNzNhODhiNWZjZjMwN2E4MTFiOWZjCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvd2luLXdrbC9NaW5pQnJvd3NlckxlZ2FjeVJlc291cmNlLmgKQEAgLTAs
MCArMSwyMCBAQAorLy97e05PX0RFUEVOREVOQ0lFU319CisvLyBNaWNyb3NvZnQgVmlzdWFsIEMr
KyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgorLy8gVXNlZCBieSBNaW5pQnJvd3NlckxlZ2FjeUxh
dW5jaGVyLnJjCisvLworI2RlZmluZSBJRERfTUlOSUJST1dTRVJMRUdBQ1lfRElBTE9HICAgIDEw
MgorI2RlZmluZSBJRElfTUlOSUJST1dTRVJMRUdBQ1kgICAgICAgICAgIDEwNworI2RlZmluZSBJ
RFJfTUFJTkZSQU1FICAgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBJRENfU1RBVElDICAg
ICAgICAgICAgICAgICAgICAgIC0xCisKKy8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBv
YmplY3RzCisvLyAKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisjaWZuZGVmIEFQU1RVRElPX1JF
QURPTkxZX1NZTUJPTFMKKyNkZWZpbmUgX0FQU19OT19NRkMgICAgICAgICAgICAgICAgICAgICAx
CisjZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTI5CisjZGVmaW5lIF9B
UFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3NzEKKyNkZWZpbmUgX0FQU19ORVhUX0NP
TlRST0xfVkFMVUUgICAgICAgICAxMDAwCisjZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAg
ICAgICAgICAgMTEwCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvd2luLXdrbC9NaW5pQnJvd3NlclJlcGxhY2UuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvTWluaUJyb3dzZXJSZXBsYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdkMDBlYmE1ODc1NzhjNWQwZWE3
MzQ2M2FlN2VjMDlkNmExM2JjOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi13a2wvTWluaUJyb3dzZXJSZXBsYWNlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworLy8gVGhpcyBmaWxlIGlzIHRvIG1ha2UgaXQg
ZWFzaWVyIGZvciB1c2VycyB0byBtYW5hZ2UgY2hhbmdlcyB0byB0aGUgaW50ZXJuYWxzIG9mIE1p
bmlCcm93c2VyCisKK3N0YXRpYyBjb25zdCB3Y2hhcl90KiBkZWZhdWx0VVJMID0gTCJodHRwczov
L3d3dy53ZWJraXQub3JnLyI7CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NDcmFzaFJlcG9ydChjb25z
dCB3Y2hhcl90KiBmaWxlTmFtZSkgeyA6Ok1lc3NhZ2VCb3goMCwgZmlsZU5hbWUsIEwiQ3Jhc2gg
UmVwb3J0IiwgTUJfT0spOyB9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2ts
L01pbmlCcm93c2VyV2ViSG9zdC5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL01pbmlC
cm93c2VyV2ViSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIxMjk1Y2IyYTNmNDhlMjk1NGE4MWYxMzE2
MjdiOWUzNGFkY2NmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvTWluaUJyb3dzZXJXZWJIb3N0LmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2Vs
ZXJhdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QWxleCBDaHJpc3RlbnNlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJzdGRhZnguaCIKKyNpbmNsdWRl
ICJNaW5pQnJvd3NlcldlYkhvc3QuaCIKKworI2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJX
aW5kb3cuaCIKKyNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+CisKK0hSRVNVTFQgTWlu
aUJyb3dzZXJXZWJIb3N0OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoX0luX29wdF8gSVdlYlZpZXcq
IHdlYlZpZXcsIF9Jbl9vcHRfIElXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGRpZENo
YW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lKHdlYlZpZXcsIGZyYW1lKTsKK30KKworSFJF
U1VMVCBNaW5pQnJvd3NlcldlYkhvc3Q6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3Io
X0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViRXJyb3IgKmVycm9yLCBfSW5fb3B0XyBJ
V2ViRnJhbWUqKQoreworICAgIF9ic3RyX3QgZXJyb3JEZXNjcmlwdGlvbjsKKyAgICBIUkVTVUxU
IGhyID0gRV9QT0lOVEVSOworICAgIGlmIChlcnJvcikKKyAgICAgICAgaHIgPSBlcnJvci0+bG9j
YWxpemVkRGVzY3JpcHRpb24oZXJyb3JEZXNjcmlwdGlvbi5HZXRBZGRyZXNzKCkpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gTCJGYWlsZWQgdG8gbG9h
ZCBwYWdlIGFuZCB0byBsb2NhbGl6ZSBlcnJvciBkZXNjcmlwdGlvbi4iOworCisgICAgaWYgKF93
Y3NpY21wKGVycm9yRGVzY3JpcHRpb24sIEwiQ2FuY2VsbGVkIikpCisgICAgICAgIDo6TWVzc2Fn
ZUJveFcoMCwgc3RhdGljX2Nhc3Q8TFBDV1NUUj4oZXJyb3JEZXNjcmlwdGlvbiksIEwiRXJyb3Ii
LCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBNaW5pQnJvd3NlcldlYkhvc3Q6OmRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1l
KF9Jbl9vcHRfIElXZWJWaWV3KiB3ZWJWaWV3LCBfSW5fb3B0XyBJV2ViRnJhbWUqIGZyYW1lKQor
eworICAgIElXZWJGcmFtZTJQdHIgZnJhbWUyKGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lMikKKyAg
ICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgQk9PTCBpc01haW5GcmFtZTsKKyAgICBI
UkVTVUxUIGhyID0gZnJhbWUyLT5pc01haW5GcmFtZSgmaXNNYWluRnJhbWUpOworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisgICAgaWYgKCFpc01haW5GcmFtZSkKKyAg
ICAgICAgcmV0dXJuIFNfT0s7CisgICAgX2JzdHJfdCB1cmw7CisgICAgaHIgPSB3ZWJWaWV3LT5t
YWluRnJhbWVVUkwodXJsLkdldEFkZHJlc3MoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKyAgICBtX2NsaWVudC0+bV9jbGllbnQuYWN0aXZlVVJMQ2hhbmdlZCh1
cmwuR2V0QlNUUigpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNaW5pQnJvd3Nl
cldlYkhvc3Q6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2
b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmICghcHB2T2JqZWN0KQorICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSVVua25vd24pKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SVdlYkZyYW1lTG9hZERlbGVnYXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQo
cmlpZCwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0ZSkpCisgICAgICAgICpwcHZPYmplY3QgPSBz
dGF0aWNfY2FzdDxJV2ViRnJhbWVMb2FkRGVsZWdhdGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJ
c0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSkpCisgICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRl
Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJOb3RpZmlj
YXRpb25PYnNlcnZlcikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViTm90
aWZpY2F0aW9uT2JzZXJ2ZXIqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFX05P
SU5URVJGQUNFOworCisgICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05H
IE1pbmlCcm93c2VyV2ViSG9zdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50
OworfQorCitVTE9ORyBNaW5pQnJvd3NlcldlYkhvc3Q6OlJlbGVhc2UoKQoreworICAgIFVMT05H
IG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKKyAgICBpZiAoIW5ld1JlZikKKyAgICAgICAgZGVsZXRl
IHRoaXM7CisgICAgcmV0dXJuIG5ld1JlZjsKK30KKworSFJFU1VMVCBNaW5pQnJvd3NlcldlYkhv
c3Q6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyogd2ViVmlldywgX0lu
X29wdF8gSVdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICF3ZWJWaWV3KQor
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+c2hvd0xhc3RWaXNpdGVkU2l0ZXMoKndlYlZpZXcpOworCisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgTWluaUJyb3dzZXJXZWJIb3N0OjpkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZyYW1lKiBmcmFt
ZSkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNaW5pQnJvd3NlcldlYkhvc3Q6
OmRpZEZhaWxMb2FkV2l0aEVycm9yKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkVy
cm9yKiwgX0luX29wdF8gSVdlYkZyYW1lKikKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBNaW5pQnJvd3NlcldlYkhvc3Q6OmRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lKF9J
bl9vcHRfIElXZWJWaWV3KiBzZW5kZXIsIF9Jbl9vcHRfIElXZWJGcmFtZSogZnJhbWUpCit7Cisg
ICAgSVdlYkRhdGFTb3VyY2VQdHIgZGF0YVNvdXJjZTsKKyAgICBIUkVTVUxUIGhyID0gZnJhbWUt
PmRhdGFTb3VyY2UoJmRhdGFTb3VyY2UuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlM
RUQoaHIpIHx8ICFkYXRhU291cmNlKQorICAgICAgICBociA9IGZyYW1lLT5wcm92aXNpb25hbERh
dGFTb3VyY2UoJmRhdGFTb3VyY2UuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQo
aHIpIHx8ICFkYXRhU291cmNlKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBJV2ViTXV0YWJs
ZVVSTFJlcXVlc3RQdHIgcmVxdWVzdDsKKyAgICBociA9IGRhdGFTb3VyY2UtPnJlcXVlc3QoJnJl
cXVlc3QuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpIHx8ICFyZXF1ZXN0
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBfYnN0cl90IGZyYW1lVVJMOworICAgIGhyID0g
cmVxdWVzdC0+bWFpbkRvY3VtZW50VVJMKGZyYW1lVVJMLkdldEFkZHJlc3MoKSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1pbmlCcm93c2VyV2ViSG9zdDo6b25Ob3RpZnkoX0luX29wdF8gSVdlYk5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIF9ic3RyX3QgbmFtZTsKKyAgICBIUkVTVUxU
IGhyID0gbm90aWZpY2F0aW9uLT5uYW1lKG5hbWUuR2V0QWRkcmVzcygpKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIGlmIChuYW1lID09IF9ic3RyX3QoV2Vi
Vmlld1Byb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKSkgeworICAgICAgICBJVW5r
bm93blB0ciBvYmplY3Q7CisgICAgICAgIGhyID0gbm90aWZpY2F0aW9uLT5nZXRPYmplY3QoJm9i
amVjdC5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICAgICAgcmV0dXJuIGhyOworICAgICAgICBJV2ViVmlld1B0ciB3ZWJWaWV3KG9iamVjdCk7Cisg
ICAgICAgIGlmICghd2ViVmlldykKKyAgICAgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOwor
ICAgICAgICBkb3VibGUgcHJvZ3Jlc3M7CisgICAgICAgIGhyID0gd2ViVmlldy0+ZXN0aW1hdGVk
UHJvZ3Jlc3MoJnByb2dyZXNzKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAg
ICByZXR1cm4gaHI7CisgICAgICAgIG1fY2xpZW50LT5tX2NsaWVudC5wcm9ncmVzc0NoYW5nZWQo
cHJvZ3Jlc3MpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBfYnN0cl90KFdlYlZpZXdQcm9ncmVz
c0ZpbmlzaGVkTm90aWZpY2F0aW9uKSkKKyAgICAgICAgbV9jbGllbnQtPm1fY2xpZW50LnByb2dy
ZXNzRmluaXNoZWQoKTsKKyAgICAKKyAgICByZXR1cm4gU19PSzsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi13a2wvTWluaUJyb3dzZXJXZWJIb3N0LmggYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyV2ViSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2OTg1YTMx
M2U4ZDM1OTI4NjNhODc1N2VjOTczNDM3NzM4OTdmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4td2tsL01pbmlCcm93c2VyV2ViSG9zdC5oCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJyZXNvdXJjZS5oIgorI2luY2x1ZGUgPFdl
YktpdExlZ2FjeS9XZWJLaXQuaD4KKyNpbmNsdWRlIDxjb211dGlsLmg+CisKK2NsYXNzIFdlYktp
dExlZ2FjeUJyb3dzZXJXaW5kb3c7CisKK2NsYXNzIE1pbmlCcm93c2VyV2ViSG9zdCA6IHB1Ymxp
YyBJV2ViRnJhbWVMb2FkRGVsZWdhdGUsIHB1YmxpYyBJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2
YXRlLCBwdWJsaWMgSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBNaW5p
QnJvd3NlcldlYkhvc3QoV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyogY2xpZW50KQorICAgICAg
ICA6IG1fY2xpZW50KGNsaWVudCkgeyB9CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlk
LCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERN
RVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExU
WVBFIFJlbGVhc2UoKTsKKworICAgIC8vIElXZWJGcmFtZUxvYWREZWxlZ2F0ZQorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZyYW1lKik7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZy
YW1lKikgeyByZXR1cm4gU19PSzsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yKF9Jbl9vcHRfIElXZWJWaWV3Kiwg
X0luX29wdF8gSVdlYkVycm9yKiwgX0luX29wdF8gSVdlYkZyYW1lKik7CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENvbW1pdExvYWRGb3JGcmFtZShfSW5fb3B0XyBJ
V2ViVmlldyosIF9Jbl9vcHRfIElXZWJGcmFtZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlVGl0bGUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJT
VFIgdGl0bGUsIF9Jbl9vcHRfIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2hhbmdlSWNvbnMoX0luX29wdF8gSVdl
YlZpZXcqLCBfSW5fb3B0XyBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVJY29uKF9Jbl9vcHRfIElXZWJW
aWV3KiwgX0luXyBIQklUTUFQLCBfSW5fb3B0XyBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRGb3JG
cmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJGcmFtZSopOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWlsTG9hZFdpdGhFcnJvcihfSW5fb3B0
XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJFcnJvciosIF9Jbl9vcHRfIElXZWJGcmFtZSopOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDaGFuZ2VMb2NhdGlvbldp
dGhpblBhZ2VGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJGcmFtZSop
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3aWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0VG9VUkwoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJTVFIgdXJsLCBkb3VibGUg
ZGVsYXlTZWNvbmRzLCBEQVRFIGZpcmVEYXRlLCBfSW5fb3B0XyBJV2ViRnJhbWUqKSB7IHJldHVy
biBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENhbmNl
bENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2Vi
RnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHdpbGxDbG9zZUZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZy
YW1lKikgeyByZXR1cm4gU19PSzsgfQorICAgIHZpcnR1YWwgLyogW2xvY2FsXSAqLyBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZShJV2ViVmlldyos
IEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpICB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVh
bCAvKiBbbG9jYWxdICovIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2xlYXJXaW5kb3dP
YmplY3QoSVdlYlZpZXcqLCBKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBJV2ViRnJhbWUqKSB7
IHJldHVybiBTX09LOyB9CisKKyAgICAvLyBJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlCisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiBzZW5kZXIsIF9Jbl9vcHRfIElXZWJGcmFtZSop
IHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
ZGlkRmlyc3RMYXlvdXRJbkZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiBzZW5kZXIsIF9Jbl9vcHRf
IElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoX0luX29wdF8gSVdlYlZp
ZXcqLCBfSW5fb3B0XyBJV2ViRnJhbWUqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZShfSW5fb3B0XyBJ
V2ViVmlldyogc2VuZGVyLCBfSW5fb3B0XyBJV2ViRnJhbWUqKSAgeyByZXR1cm4gU19PSzsgfQor
CisgICAgLy8gSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyCisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIG9uTm90aWZ5KF9Jbl9vcHRfIElXZWJOb3RpZmljYXRpb24qKTsKKwor
cHJpdmF0ZToKKyAgICBVTE9ORyBtX3JlZkNvdW50IHsgMCB9OworICAgIFdlYktpdExlZ2FjeUJy
b3dzZXJXaW5kb3cqIG1fY2xpZW50IHsgbnVsbHB0ciB9OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi13a2wvUHJpbnRXZWJVSURlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi13a2wvUHJpbnRXZWJVSURlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTQ0N2Zl
MDA4MDIzNDEyYzk0NzQ3ZmI1ZDJhY2Y0MjlkYTYyZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvd2luLXdrbC9QcmludFdlYlVJRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEs
MzQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0u
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3Rl
bnNlbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiUHJpbnRXZWJVSURlbGVn
YXRlLmgiCisKKyNpbmNsdWRlICJDb21tb24uaCIKKyNpbmNsdWRlICJNYWluV2luZG93LmgiCisj
aW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgorI2luY2x1ZGUgPFdlYktpdExl
Z2FjeS9XZWJLaXRDT01BUEkuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgTUFSR0lO
ID0gMjA7CisKK0hSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBCU1RSIG1lc3NhZ2UpCit7
CisgICAgOjpNZXNzYWdlQm94VygwLCBtZXNzYWdlLCBMIkphdmFTY3JpcHQgQWxlcnQiLCBNQl9P
Syk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjpy
dW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2UoX0luX29wdF8gSVdlYlZpZXcqLCBf
SW5fIEJTVFIgbWVzc2FnZSwgX091dF8gQk9PTCogcmVzdWx0KQoreworICAgICpyZXN1bHQgPSA6
Ok1lc3NhZ2VCb3hXKDAsIG1lc3NhZ2UsIEwiSmF2YVNjcmlwdCBDb25maXJtIiwgTUJfT0tDQU5D
RUwpID09IElET0s7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgUHJpbnRXZWJVSURl
bGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5f
b3B0XyBJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCwgX0NPTV9PdXRwdHJfb3B0XyBJV2ViVmlldyoq
IG5ld1dlYlZpZXcpCit7CisgICAgaWYgKCFuZXdXZWJWaWV3KQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworICAgICpuZXdXZWJWaWV3ID0gbnVsbHB0cjsKKyAgICBpZiAoIXJlcXVlc3QpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBhdXRvJiBuZXdXaW5kb3cgPSBNYWluV2lu
ZG93OjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgYm9vbCBvayA9IG5ld1dpbmRvdy5pbml0KFdl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OmNyZWF0ZSwgaEluc3QpOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgU2hvd1dpbmRvdyhuZXdXaW5kb3cuaHduZCgpLCBT
V19TSE9XKTsKKworICAgIGF1dG8mIG5ld0Jyb3dzZXJXaW5kb3cgPSAqc3RhdGljX2Nhc3Q8V2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdyo+KG5ld1dpbmRvdy5icm93c2VyV2luZG93KCkpOworICAg
ICpuZXdXZWJWaWV3ID0gbmV3QnJvd3NlcldpbmRvdy53ZWJWaWV3KCkuRGV0YWNoKCk7CisgICAg
SVdlYkZyYW1lUHRyIGZyYW1lOworICAgIEhSRVNVTFQgaHI7CisgICAgaHIgPSAoKm5ld1dlYlZp
ZXcpLT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIGhyID0gZnJhbWUtPmxvYWRSZXF1ZXN0KHJl
cXVlc3QpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBy
ZXR1cm4gU19PSzsKK30KKworc3RhdGljIEhXTkQgZ2V0SGFuZGxlRnJvbVdlYlZpZXcoSVdlYlZp
ZXcqIHdlYlZpZXcpCit7CisgICAgSVdlYlZpZXdQcml2YXRlMlB0ciB3ZWJWaWV3UHJpdmF0ZSh3
ZWJWaWV3KTsKKyAgICBpZiAoIXdlYlZpZXdQcml2YXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEhXTkQgd2ViVmlld1dpbmRvdyA9IG51bGxwdHI7CisgICAgSFJFU1VMVCBociA9
IHdlYlZpZXdQcml2YXRlLT52aWV3V2luZG93KCZ3ZWJWaWV3V2luZG93KTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gd2ViVmlld1dp
bmRvdzsKK30KKworSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OndlYlZpZXdDbG9zZShfSW5f
b3B0XyBJV2ViVmlldyogd2ViVmlldykKK3sKKyAgICBIV05EIGhvc3RXaW5kb3c7CisgICAgSFJF
U1VMVCBociA9IHdlYlZpZXctPmhvc3RXaW5kb3coJmhvc3RXaW5kb3cpOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICA6OkRlc3Ryb3lXaW5kb3coaG9zdFdp
bmRvdyk7CisKKyAgICBpZiAoaG9zdFdpbmRvdyA9PSBtX21vZGFsRGlhbG9nUGFyZW50KQorICAg
ICAgICBtX21vZGFsRGlhbG9nUGFyZW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiBTX09LOwor
fQorCitIUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6c2V0RnJhbWUoX0luX29wdF8gSVdlYlZp
ZXcqIHdlYlZpZXcsIF9Jbl8gUkVDVCogcmVjdCkKK3sKKyAgICBpZiAobV9tb2RhbERpYWxvZ1Bh
cmVudCkKKyAgICAgICAgOjpNb3ZlV2luZG93KG1fbW9kYWxEaWFsb2dQYXJlbnQsIHJlY3QtPmxl
ZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSBy
ZWN0LT50b3AsIEZBTFNFKTsKKworICAgIDo6TW92ZVdpbmRvdyhnZXRIYW5kbGVGcm9tV2ViVmll
dyh3ZWJWaWV3KSwgMCwgMCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20g
LSByZWN0LT50b3AsIEZBTFNFKTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFBy
aW50V2ViVUlEZWxlZ2F0ZTo6d2ViVmlld0ZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiB3ZWJWaWV3
LCBfT3V0XyBSRUNUKiByZWN0KQoreworICAgIGlmICghOjpHZXRXaW5kb3dSZWN0KGdldEhhbmRs
ZUZyb21XZWJWaWV3KHdlYlZpZXcpLCByZWN0KSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6UXVlcnlJ
bnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBwcHZPYmplY3Qp
Cit7CisgICAgaWYgKCFwcHZPYmplY3QpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAg
KnBwdk9iamVjdCA9IG51bGxwdHI7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtu
b3duKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJVSURlbGVnYXRlKj4o
dGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVdlYlVJRGVsZWdhdGUp
KQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlVJRGVsZWdhdGUqPih0aGlz
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworCisgICAgQWRkUmVm
KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFByaW50V2ViVUlEZWxlZ2F0ZTo6QWRk
UmVmKCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBQcmludFdlYlVJ
RGVsZWdhdGU6OlJlbGVhc2UoKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsK
KyAgICBpZiAoIW5ld1JlZikKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIG5ld1Jl
ZjsKK30KKworSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OndlYlZpZXdQcmludGluZ01hcmdp
blJlY3QoX0luX29wdF8gSVdlYlZpZXcqIHZpZXcsIF9PdXRfIFJFQ1QqIHJlY3QpCit7CisgICAg
aWYgKCF2aWV3IHx8ICFyZWN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgSVdl
YkZyYW1lUHRyIG1haW5GcmFtZTsKKyAgICBpZiAoRkFJTEVEKHZpZXctPm1haW5GcmFtZSgmbWFp
bkZyYW1lLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAg
ICBJV2ViRnJhbWVQcml2YXRlUHRyIHByaXZhdGVGcmFtZShtYWluRnJhbWUpOworICAgIGlmICgh
cHJpdmF0ZUZyYW1lKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgcHJpdmF0ZUZyYW1l
LT5mcmFtZUJvdW5kcyhyZWN0KTsKKworICAgIHJlY3QtPmxlZnQgKz0gTUFSR0lOOworICAgIHJl
Y3QtPnRvcCArPSBNQVJHSU47CisgICAgSERDIGRjID0gOjpHZXREQygwKTsKKyAgICByZWN0LT5y
aWdodCA9ICg6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpICogNi41KSAtIE1BUkdJTjsK
KyAgICByZWN0LT5ib3R0b20gPSAoOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNZKSAqIDEx
KSAtIE1BUkdJTjsKKyAgICA6OlJlbGVhc2VEQygwLCBkYyk7CisKKyAgICByZXR1cm4gU19PSzsK
K30KKworSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFj
dGlvbihfSW5fb3B0XyBJV2ViVmlldyosIFdlYkRyYWdTb3VyY2VBY3Rpb24sIF9Jbl8gTFBQT0lO
VCwgX0luX29wdF8gSURhdGFPYmplY3QqLCBfQ09NX091dHB0cl9vcHRfIElEYXRhT2JqZWN0Kiog
cmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
ICAgICpyZXN1bHQgPSBudWxscHRyOworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNV
TFQgUHJpbnRXZWJVSURlbGVnYXRlOjp3ZWJWaWV3SGVhZGVySGVpZ2h0KF9Jbl9vcHRfIElXZWJW
aWV3KiB3ZWJWaWV3LCBfT3V0XyBmbG9hdCogaGVpZ2h0KQoreworICAgIGlmICghd2ViVmlldyB8
fCAhaGVpZ2h0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgSERDIGRjID0gOjpH
ZXREQygwKTsKKworICAgIFRFWFRNRVRSSUMgdGV4dE1ldHJpYzsKKyAgICA6OkdldFRleHRNZXRy
aWNzKGRjLCAmdGV4dE1ldHJpYyk7CisgICAgOjpSZWxlYXNlREMoMCwgZGMpOworCisgICAgKmhl
aWdodCA9IDEuMSAqIHRleHRNZXRyaWMudG1IZWlnaHQ7CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OndlYlZpZXdGb290ZXJIZWlnaHQoX0luX29w
dF8gSVdlYlZpZXcqIHdlYlZpZXcsIF9PdXRfIGZsb2F0KiBoZWlnaHQpCit7CisgICAgaWYgKCF3
ZWJWaWV3IHx8ICFoZWlnaHQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBIREMg
ZGMgPSA6OkdldERDKDApOworCisgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljOworICAgIDo6R2V0
VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljKTsKKyAgICA6OlJlbGVhc2VEQygwLCBkYyk7CisK
KyAgICAqaGVpZ2h0ID0gMS4xICogdGV4dE1ldHJpYy50bUhlaWdodDsKKworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6ZHJhd0hlYWRlckluUmVjdChf
SW5fb3B0XyBJV2ViVmlldyogd2ViVmlldywgX0luXyBSRUNUKiByZWN0LCBVTE9OR19QVFIgZHJh
d2luZ0NvbnRleHQpCit7CisgICAgaWYgKCF3ZWJWaWV3IHx8ICFyZWN0KQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgLy8gVHVybiBvZmYgaGVhZGVyIGZvciBub3cuCisgICAgSERD
IGRjID0gcmVpbnRlcnByZXRfY2FzdDxIREM+KGRyYXdpbmdDb250ZXh0KTsKKworICAgIEhHRElP
QkogaEZvbnQgPSA6OkdldFN0b2NrT2JqZWN0KEFOU0lfVkFSX0ZPTlQpOworICAgIEhHRElPQkog
aE9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChkYywgaEZvbnQpOworCisgICAgTFBDV1NUUiBoZWFk
ZXIgPSBMIltTYW1wbGUgSGVhZGVyXSI7CisgICAgc2l6ZV90IGxlbmd0aCA9IHdjc2xlbihoZWFk
ZXIpOworCisgICAgaW50IHJjID0gOjpEcmF3VGV4dFcoZGMsIGhlYWRlciwgbGVuZ3RoLCByZWN0
LCBEVF9MRUZUIHwgRFRfTk9DTElQIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUpOworICAg
IDo6U2VsZWN0T2JqZWN0KGRjLCBoT2xkRm9udCk7CisKKyAgICBpZiAoIXJjKQorICAgICAgICBy
ZXR1cm4gRV9GQUlMOworCisgICAgOjpNb3ZlVG9FeChkYywgcmVjdC0+bGVmdCwgcmVjdC0+Ym90
dG9tLCAwKTsKKyAgICBIR0RJT0JKIGhQZW4gPSA6OkdldFN0b2NrT2JqZWN0KEJMQUNLX1BFTik7
CisgICAgSEdESU9CSiBoT2xkUGVuID0gOjpTZWxlY3RPYmplY3QoZGMsIGhQZW4pOworICAgIDo6
TGluZVRvKGRjLCByZWN0LT5yaWdodCwgcmVjdC0+Ym90dG9tKTsKKyAgICA6OlNlbGVjdE9iamVj
dChkYywgaE9sZFBlbik7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBQcmludFdl
YlVJRGVsZWdhdGU6OmRyYXdGb290ZXJJblJlY3QoX0luX29wdF8gSVdlYlZpZXcqIHdlYlZpZXcs
IF9Jbl8gUkVDVCogcmVjdCwgVUxPTkdfUFRSIGRyYXdpbmdDb250ZXh0LCBVSU5UIHBhZ2VJbmRl
eCwgVUlOVCBwYWdlQ291bnQpCit7CisgICAgaWYgKCF3ZWJWaWV3IHx8ICFyZWN0KQorICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgSERDIGRjID0gcmVpbnRlcnByZXRfY2FzdDxIREM+
KGRyYXdpbmdDb250ZXh0KTsKKworICAgIEhHRElPQkogaEZvbnQgPSA6OkdldFN0b2NrT2JqZWN0
KEFOU0lfVkFSX0ZPTlQpOworICAgIEhHRElPQkogaE9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChk
YywgaEZvbnQpOworCisgICAgTFBDV1NUUiBmb290ZXIgPSBMIltTYW1wbGUgRm9vdGVyXSI7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IHdjc2xlbihmb290ZXIpOworCisgICAgLy8gQWRkIGEgbGluZSwg
MS8xMHRoIGluY2ggYWJvdmUgdGhlIGZvb3RlciB0ZXh0IGZyb20gbGVmdCBtYXJnaW4gdG8gcmln
aHQgbWFyZ2luLgorICAgIDo6TW92ZVRvRXgoZGMsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgMCk7
CisgICAgSEdESU9CSiBoUGVuID0gOjpHZXRTdG9ja09iamVjdChCTEFDS19QRU4pOworICAgIEhH
RElPQkogaE9sZFBlbiA9IDo6U2VsZWN0T2JqZWN0KGRjLCBoUGVuKTsKKyAgICA6OkxpbmVUbyhk
YywgcmVjdC0+cmlnaHQsIHJlY3QtPnRvcCk7CisgICAgOjpTZWxlY3RPYmplY3QoZGMsIGhPbGRQ
ZW4pOworCisgICAgaW50IHJjID0gOjpEcmF3VGV4dFcoZGMsIGZvb3RlciwgbGVuZ3RoLCByZWN0
LCBEVF9MRUZUIHwgRFRfTk9DTElQIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUpOworICAg
IDo6U2VsZWN0T2JqZWN0KGRjLCBoT2xkRm9udCk7CisKKyAgICBpZiAoIXJjKQorICAgICAgICBy
ZXR1cm4gRV9GQUlMOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgUHJpbnRXZWJV
SURlbGVnYXRlOjpjYW5SdW5Nb2RhbChfSW5fb3B0XyBJV2ViVmlldyosIF9PdXRfIEJPT0wqIGNh
blJ1bkJvb2xlYW4pCit7CisgICAgaWYgKCFjYW5SdW5Cb29sZWFuKQorICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgICpjYW5SdW5Cb29sZWFuID0gVFJVRTsKKyAgICByZXR1cm4gU19PSzsK
K30KKworSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OnJ1bk1vZGFsKF9Jbl9vcHRfIElXZWJW
aWV3KiB3ZWJWaWV3KQoreworICAgIElXZWJWaWV3UHRyIHByb3RlY3Rvcih3ZWJWaWV3KTsKKwor
ICAgIGF1dG8gbW9kYWxEaWFsb2dPd25lciA9IDo6R2V0V2luZG93KG1fbW9kYWxEaWFsb2dQYXJl
bnQsIEdXX09XTkVSKTsKKyAgICBhdXRvIHRvcExldmVsUGFyZW50ID0gOjpHZXRBbmNlc3Rvciht
b2RhbERpYWxvZ093bmVyLCBHQV9ST09UKTsKKworICAgIDo6RW5hYmxlV2luZG93KHRvcExldmVs
UGFyZW50LCBGQUxTRSk7CisKKyAgICB3aGlsZSAoOjpJc1dpbmRvdyhnZXRIYW5kbGVGcm9tV2Vi
Vmlldyh3ZWJWaWV3KSkpIHsKKyNpZiBVU0UoQ0YpCisgICAgICAgIENGUnVuTG9vcFJ1bkluTW9k
ZShrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIDAsIHRydWUpOworI2VuZGlmCisgICAgICAgIE1TRyBt
c2c7CisgICAgICAgIGlmICghOjpHZXRNZXNzYWdlKCZtc2csIDAsIDAsIDApKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOworICAgICAgICA6
OkRpc3BhdGNoTWVzc2FnZSgmbXNnKTsgICAgICAgIAorICAgIH0KKworICAgIDo6RW5hYmxlV2lu
ZG93KHRvcExldmVsUGFyZW50LCBUUlVFKTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6Y3JlYXRlTW9kYWxEaWFsb2coX0luX29wdF8gSVdlYlZp
ZXcqIHNlbmRlciwgX0luX29wdF8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIF9DT01fT3V0cHRy
X29wdF8gSVdlYlZpZXcqKiBuZXdXZWJWaWV3KQoreworICAgIGlmICghbmV3V2ViVmlldykKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAKKyAgICBJV2ViVmlld1B0ciB3ZWJWaWV3Owor
ICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJWaWV3LCAwLCBJ
SURfSVdlYlZpZXcsICh2b2lkKiopJndlYlZpZXcpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICBtX21vZGFsRGlhbG9nUGFyZW50ID0gOjpDcmVhdGVXaW5k
b3coTCJTVEFUSUMiLCBMIk1vZGFsRGlhbG9nIiwgV1NfT1ZFUkxBUFBFRCB8IFdTX1ZJU0lCTEUs
IDAsIDAsIDAsIDAsIGdldEhhbmRsZUZyb21XZWJWaWV3KHNlbmRlciksIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIpOworCisgICAgaHIgPSB3ZWJWaWV3LT5zZXRIb3N0V2luZG93KG1fbW9kYWxE
aWFsb2dQYXJlbnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBSRUNUIGNsaWVudFJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBociA9IHdlYlZpZXct
PmluaXRXaXRoRnJhbWUoY2xpZW50UmVjdCwgMCwgX2JzdHJfdChMIiIpKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgSVdlYlVJRGVsZWdhdGVQdHIgdWlE
ZWxlZ2F0ZTsKKyAgICBociA9IHNlbmRlci0+dWlEZWxlZ2F0ZSgmdWlEZWxlZ2F0ZSk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHdlYlZpZXctPnNldFVJ
RGVsZWdhdGUodWlEZWxlZ2F0ZSk7CisKKyAgICAqbmV3V2ViVmlldyA9IHdlYlZpZXcuRGV0YWNo
KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi13a2wvUHJpbnRXZWJVSURlbGVnYXRlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2ts
L1ByaW50V2ViVUlEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYWU4MjJmMDYyODdjNGFlYzVkODVj
OTNmODBiMTllYzM2NzRjODAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4td2tsL1ByaW50V2ViVUlEZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KKworY2xhc3MgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdzsKKworY2xhc3MgUHJpbnRXZWJVSURlbGVnYXRlIDogcHVibGlj
IElXZWJVSURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBQcmludFdlYlVJRGVsZWdhdGUoV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdyYgY2xpZW50KQorICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkg
eyB9CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoq
IHBwdk9iamVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYo
KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKKworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjcmVhdGVXZWJWaWV3V2l0aFJlcXVl
c3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViVVJMUmVxdWVzdCosIF9DT01fT3V0
cHRyX29wdF8gSVdlYlZpZXcqKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHdlYlZpZXdTaG93KF9Jbl9vcHRfIElXZWJWaWV3KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlZpZXdDbG9zZShfSW5f
b3B0XyBJV2ViVmlldyopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3
ZWJWaWV3Rm9jdXMoX0luX29wdF8gSVdlYlZpZXcqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld1VuZm9jdXMoX0luX29w
dF8gSVdlYlZpZXcqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld0ZpcnN0UmVzcG9uZGVyKF9Jbl9vcHRfIElXZWJWaWV3
KiwgX091dF8gSFdORCopICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgbWFrZUZpcnN0UmVzcG9uZGVyKF9Jbl9vcHRfIElXZWJWaWV3
KiwgX0luXyBIV05EKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgc2V0U3RhdHVzVGV4dChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8g
QlNUUikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHdlYlZpZXdTdGF0dXNUZXh0KF9Jbl9vcHRfIElXZWJWaWV3KiwgX19kZXJlZl9v
cHRfb3V0IEJTVFIqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld0FyZVRvb2xiYXJzVmlzaWJsZShfSW5fb3B0XyBJV2Vi
VmlldyosIF9PdXRfIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0VG9vbGJhcnNWaXNpYmxlKF9Jbl9vcHRfIElXZWJW
aWV3KiwgQk9PTCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHdlYlZpZXdJc1N0YXR1c0JhclZpc2libGUoX0luX29wdF8gSVdlYlZp
ZXcqLCBfT3V0XyBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHNldFN0YXR1c0JhclZpc2libGUoX0luX29wdF8gSVdlYlZp
ZXcqLCBCT09MKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgd2ViVmlld0lzUmVzaXphYmxlKF9Jbl9vcHRfIElXZWJWaWV3KiwgX091
dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBzZXRSZXNpemFibGUoX0luX29wdF8gSVdlYlZpZXcqLCBCT09MKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
c2V0RnJhbWUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIFJFQ1QqKTsKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld0ZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3Kiwg
X091dF8gUkVDVCopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRD
b250ZW50UmVjdChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gUkVDVCopIHsgcmV0dXJuIEVfTk9U
SU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJWaWV3Q29u
dGVudFJlY3QoX0luX29wdF8gSVdlYlZpZXcqLCBfT3V0XyBSRUNUKikgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJ1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJTVFIpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBydW5KYXZhU2NyaXB0Q29uZmly
bVBhbmVsV2l0aE1lc3NhZ2UoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJTVFIsIF9PdXRfIEJP
T0wqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcnVuSmF2YVNjcmlw
dFRleHRJbnB1dFBhbmVsV2l0aFByb21wdChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gQlNUUiwg
X0luXyBCU1RSLCBfX2RlcmVmX29wdF9vdXQgQlNUUiopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBydW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWxXaXRoTWVzc2FnZShfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gQlNUUiwgSVdlYkZy
YW1lKiwgX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3Vs
dExpc3RlbmVyKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KF9Jbl9vcHRfIElXZWJWaWV3
KiwgX0luX29wdF8gSVByb3BlcnR5QmFnKiwgVUlOVCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvbnRleHRNZW51SXRlbXNGb3JF
bGVtZW50KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVByb3BlcnR5QmFnKiwgX0luXyBI
TUVOVSwgX091dF8gSE1FTlUqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbShfSW5fb3B0
XyBJV2ViVmlldyosIFVJTlQsIEJPT0wsIF9PdXRfIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7
IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2hvdWxkUGVyZm9ybUFj
dGlvbihfSW5fb3B0XyBJV2ViVmlldyosIFVJTlQsIFVJTlQpIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSURh
dGFPYmplY3QqLCBfSW5fb3B0XyBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24qKSB7IHJldHVybiBF
X05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbFBl
cmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oX0luX29wdF8gSVdlYlZpZXcqLCBXZWJEcmFnRGVz
dGluYXRpb25BY3Rpb24sIF9Jbl9vcHRfIElEYXRhT2JqZWN0KikgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIExQUE9JTlQsIF9PdXRfIFdl
YkRyYWdTb3VyY2VBY3Rpb24qKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKF9Jbl9v
cHRfIElXZWJWaWV3KiwgV2ViRHJhZ1NvdXJjZUFjdGlvbiwgX0luXyBMUFBPSU5ULCBfSW5fb3B0
XyBJRGF0YU9iamVjdCosIF9DT01fT3V0cHRyX29wdF8gSURhdGFPYmplY3QqKik7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKF9J
bl9vcHRfIElXZWJWaWV3Kiwgdm9pZCosIElQcm9wZXJ0eUJhZyopIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBoYXNDdXN0b21NZW51
SW1wbGVtZW50YXRpb24oX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0cmFja0N1c3RvbVBvcHVwTWVudShfSW5f
b3B0XyBJV2ViVmlldyosIF9Jbl8gSE1FTlUsIF9Jbl8gTFBQT0lOVCkgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIG1lYXN1cmVDdXN0
b21NZW51SXRlbShJV2ViVmlldyosIHZvaWQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZHJhd0N1c3RvbU1lbnVJdGVtKElXZWJW
aWV3Kiwgdm9pZCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBhZGRDdXN0b21NZW51RHJhd2luZ0RhdGEoX0luX29wdF8gSVdlYlZp
ZXcqLCBfSW5fIEhNRU5VKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgY2xlYW5VcEN1c3RvbU1lbnVEcmF3aW5nRGF0YShfSW5fb3B0
XyBJV2ViVmlldyosIF9Jbl8gSE1FTlUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjYW5UYWtlRm9jdXMoX0luX29wdF8gSVdlYlZp
ZXcqLCBCT09MLCBfT3V0XyBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHRha2VGb2N1cyhfSW5fb3B0XyBJV2ViVmlldyos
IEJPT0wpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSByZWdpc3RlclVuZG9XaXRoVGFyZ2V0KF9Jbl9vcHRfIElXZWJVbmRvVGFyZ2V0
KiwgX0luXyBCU1RSLCBfSW5fb3B0XyBJVW5rbm93biopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZW1vdmVBbGxBY3Rpb25zV2l0
aFRhcmdldChfSW5fb3B0XyBJV2ViVW5kb1RhcmdldCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRBY3Rpb25UaXRsZShfSW5f
IEJTVFIpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSB1bmRvKCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHJlZG8oKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2FuVW5kbyhfT3V0XyBCT09MKikgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGNhblJlZG8oX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwcmludEZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3Kiwg
X0luX29wdF8gSVdlYkZyYW1lKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aChfSW5fb3B0
XyBJV2ViVmlldyosIF9fZGVyZWZfb3B0X291dCBCU1RSKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlZpZXdIZWFkZXJIZWln
aHQoX0luX29wdF8gSVdlYlZpZXcqLCBfT3V0XyBmbG9hdCopOworICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJWaWV3Rm9vdGVySGVpZ2h0KF9Jbl9vcHRfIElXZWJWaWV3
KiwgX091dF8gZmxvYXQqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
ZHJhd0hlYWRlckluUmVjdChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gUkVDVCosIFVMT05HX1BU
Uik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRyYXdGb290ZXJJblJl
Y3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIFJFQ1QqLCBVTE9OR19QVFIsIFVJTlQsIFVJTlQp
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJWaWV3UHJpbnRpbmdN
YXJnaW5SZWN0KF9Jbl9vcHRfIElXZWJWaWV3KiwgX091dF8gUkVDVCopOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjYW5SdW5Nb2RhbChfSW5fb3B0XyBJV2ViVmlldyos
IF9PdXRfIEJPT0wqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY3Jl
YXRlTW9kYWxEaWFsb2coX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViVVJMUmVxdWVz
dCosIF9DT01fT3V0cHRyX29wdF8gSVdlYlZpZXcqKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHJ1bk1vZGFsKF9Jbl9vcHRfIElXZWJWaWV3Kik7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGlzTWVudUJhclZpc2libGUoX0luX29wdF8gSVdl
YlZpZXcqLCBfT3V0XyBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldE1lbnVCYXJWaXNpYmxlKF9Jbl9vcHRfIElXZWJW
aWV3KiwgQk9PTCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHJ1bkRhdGFiYXNlU2l6ZUxpbWl0UHJvbXB0KF9Jbl9vcHRfIElXZWJW
aWV3KiwgX0luXyBCU1RSLCBfSW5fb3B0XyBJV2ViRnJhbWUqLCBfT3V0XyBCT09MKikgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBh
aW50Q3VzdG9tU2Nyb2xsYmFyKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBIREMsIFJFQ1QsIFdl
YlNjcm9sbEJhckNvbnRyb2xTaXplLCBXZWJTY3JvbGxiYXJDb250cm9sU3RhdGUsIFdlYlNjcm9s
bGJhckNvbnRyb2xQYXJ0LCBCT09MLCBmbG9hdCwgZmxvYXQsIFdlYlNjcm9sbGJhckNvbnRyb2xQ
YXJ0TWFzaykgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKF9Jbl9vcHRfIElXZWJWaWV3Kiwg
X0luXyBIREMsIFJFQ1QpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorCitwcml2YXRlOgorICAgIFVM
T05HIG1fcmVmQ291bnQgeyAwIH07CisgICAgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgbV9j
bGllbnQ7CisgICAgSFdORCBtX21vZGFsRGlhbG9nUGFyZW50IHsgbnVsbHB0ciB9OworfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvUmVzb3VyY2VMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzE5ZGMzYzgyYmIwNzk4OTYzZmRlY2FkMTVjOTdjZDg4Y2Y1MTFiOQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvUmVzb3VyY2VMb2FkRGVs
ZWdhdGUuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5j
bHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKKworI2lu
Y2x1ZGUgIkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgorI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJL
aXRDT01BUEkuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVs
ZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lk
KiogcHB2T2JqZWN0KQoreworICAgIGlmICghcHB2T2JqZWN0KQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgIGlmIChJc0VxdWFsSUlEKHJp
aWQsIElJRF9JVW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2Vi
UmVzb3VyY2VMb2FkRGVsZWdhdGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsSUlEKHJp
aWQsIElJRF9JV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUpKQorICAgICAgICAqcHB2T2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SVdlYlJlc291cmNlTG9hZERlbGVnYXRlKj4odGhpcyk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKKworICAgIEFkZFJlZigpOworICAgIHJldHVy
biBTX09LOworfQorCitVTE9ORyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKCkKK3sKKyAg
ICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6
UmVsZWFzZSgpCit7CisgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OworICAgIGlmICgh
bmV3UmVmKQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gbmV3UmVmOworfQorCitI
UkVTVUxUIFJlc291cmNlTG9hZERlbGVnYXRlOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3Qo
X0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViVVJMUmVxdWVzdCosIF9Jbl9vcHRfIElX
ZWJEYXRhU291cmNlKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIHJldHVybiBF
X05PVElNUEw7Cit9CisKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OndpbGxTZW5kUmVx
dWVzdChfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcsIF9Jbl9vcHRfIElXZWJVUkxS
ZXF1ZXN0KiwgX0luX29wdF8gSVdlYlVSTFJlc3BvbnNlKiwgX0luX29wdF8gSVdlYkRhdGFTb3Vy
Y2UqLCBfQ09NX091dHB0cl9vcHRfIElXZWJVUkxSZXF1ZXN0KiogcmVzdWx0KQoreworICAgIHJl
dHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVk
IGxvbmcsIF9Jbl9vcHRfIElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSogY2hhbGxlbmdl
LCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopCit7CisgICAgQ09NUHRyPElXZWJVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVNlbmRlcj4gc2VuZGVyOworICAgIGlmICghY2hhbGxlbmdlIHx8IEZB
SUxFRChjaGFsbGVuZ2UtPnNlbmRlcigmc2VuZGVyKSkpCisgICAgICAgIHJldHVybiBFX0ZBSUw7
CisKKyAgICBDT01QdHI8SVdlYlVSTFByb3RlY3Rpb25TcGFjZT4gcHJvdGVjdGlvblNwYWNlOwor
ICAgIGlmIChGQUlMRUQoY2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoJnByb3RlY3Rpb25TcGFj
ZSkpKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgQlNUUiByZWFsbTsKKyAgICBpZiAo
RkFJTEVEKHByb3RlY3Rpb25TcGFjZS0+cmVhbG0oJnJlYWxtKSkpCisgICAgICAgIHJldHVybiBF
X0ZBSUw7CisKKyAgICBpZiAoYXV0byBjcmVkZW50aWFsID0gYXNrQ3JlZGVudGlhbChtX2NsaWVu
dC0+aHduZCgpLCBzdGQ6OndzdHJpbmcocmVhbG0pKSkgeworICAgICAgICBDT01QdHI8SVdlYlVS
TENyZWRlbnRpYWw+IHdrQ3JlZGVudGlhbDsKKyAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVh
dGVJbnN0YW5jZShDTFNJRF9XZWJVUkxDcmVkZW50aWFsLCAwLCBJSURfSVdlYlVSTENyZWRlbnRp
YWwsICh2b2lkKiopJndrQ3JlZGVudGlhbCkpKQorICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
KyAgICAgICAgd2tDcmVkZW50aWFsLT5pbml0V2l0aFVzZXIoX2JzdHJfdChjcmVkZW50aWFsLT51
c2VybmFtZS5jX3N0cigpKSwgX2JzdHJfdChjcmVkZW50aWFsLT5wYXNzd29yZC5jX3N0cigpKSwg
V2ViVVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CisKKyAgICAgICAgc2VuZGVy
LT51c2VDcmVkZW50aWFsKHdrQ3JlZGVudGlhbC5nZXQoKSwgY2hhbGxlbmdlKTsKKyAgICAgICAg
cmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgcmV0dXJuIEVfRkFJTDsKK30KKworSFJFU1VMVCBS
ZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoX0lu
X29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBsb25nLCBfSW5fb3B0XyBJV2ViVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UqLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopCit7CisgICAgcmV0dXJu
IEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZywgX0luX29wdF8gSVdl
YlVSTFJlc3BvbnNlKiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqKQoreworICAgIHJldHVybiBF
X05PVElNUEw7Cit9CisKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVD
b250ZW50TGVuZ3RoKF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZywgVUlOVCwgX0lu
X29wdF8gSVdlYkRhdGFTb3VyY2UqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hS
RVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJj
ZShfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgX0luX29wdF8g
SVdlYkRhdGFTb3VyY2UqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQg
UmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKF9Jbl9vcHRfIElX
ZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBf
SW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKwor
SFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6cGx1Z0luRmFpbGVkV2l0aEVycm9yKF9Jbl9v
cHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkVycm9yKiwgX0luX29wdF8gSVdlYkRhdGFTb3Vy
Y2UqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci93aW4td2tsL1Jlc291cmNlTG9hZERlbGVnYXRlLmggYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4td2tsL1Jlc291cmNlTG9hZERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUwNTk5NjNiMGE3
MzQ1MjA5ZjQxNTEwMDFhNGJlOTNjY2EyYjFiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi13a2wvUmVzb3VyY2VMb2FkRGVsZWdhdGUuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxX
ZWJLaXRMZWdhY3kvV2ViS2l0Lmg+CisKK2NsYXNzIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c7
CisKK2NsYXNzIFJlc291cmNlTG9hZERlbGVnYXRlIDogcHVibGljIElXZWJSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VMb2FkRGVsZWdhdGUoV2ViS2l0TGVnYWN5
QnJvd3NlcldpbmRvdyogY2xpZW50KQorICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkgeyB9CisK
KyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBR
dWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9i
amVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAg
ICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKKworICAgIC8vIElX
ZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBpZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5f
b3B0XyBJV2ViVVJMUmVxdWVzdCosIF9Jbl9vcHRfIElXZWJEYXRhU291cmNlKiwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
d2lsbFNlbmRSZXF1ZXN0KF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBfSW5fb3B0XyBJV2ViVVJMUmVxdWVzdCosIF9Jbl9vcHRfIElXZWJVUkxSZXNwb25zZSog
cmVkaXJlY3RSZXNwb25zZSwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqLCBfQ09NX091dHB0cl9v
cHRfIElXZWJVUkxSZXF1ZXN0KiogbmV3UmVxdWVzdCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0
XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgX0luX29wdF8gSVdlYlVSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIF9J
bl9vcHRfIElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSosIF9Jbl9vcHRfIElXZWJEYXRh
U291cmNlKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2Vp
dmVSZXNwb25zZShfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
X0luX29wdF8gSVdlYlVSTFJlc3BvbnNlKiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqKTsKKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUNvbnRlbnRMZW5n
dGgoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFVJTlQgbGVu
Z3RoLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBkaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3VyY2UoX0luX29wdF8gSVdl
YlZpZXcqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIF9Jbl9vcHRfICBJV2ViRGF0YVNvdXJj
ZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWlsTG9hZGlu
Z1dpdGhFcnJvcihfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
X0luX29wdF8gSVdlYkVycm9yKiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqKTsKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGx1Z0luRmFpbGVkV2l0aEVycm9yKF9Jbl9v
cHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkVycm9yKiwgX0luX29wdF8gSVdlYkRhdGFTb3Vy
Y2UqKTsKKworcHJpdmF0ZToKKyAgICBVTE9ORyBtX3JlZkNvdW50IHsgMCB9OworICAgIFdlYktp
dExlZ2FjeUJyb3dzZXJXaW5kb3cqIG1fY2xpZW50OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi13a2wvV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9NaW5pQnJv
d3Nlci93aW4td2tsL1dlYkRvd25sb2FkRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzMzJlMTFj
NTJlNWM2ODMwZDI1YzdhMmJjMmZmZTQzOGM0OTM3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4td2tsL1dlYkRvd25sb2FkRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEs
MTYwIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDkxKQorCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiV2ViRG93bmxvYWREZWxlZ2F0
ZS5oIgorCisjaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgorI2luY2x1ZGUg
PHNobG9iai5oPgorCitXZWJEb3dubG9hZERlbGVnYXRlOjpXZWJEb3dubG9hZERlbGVnYXRlKFdl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3cmIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkK
K3sKK30KKworV2ViRG93bmxvYWREZWxlZ2F0ZTo6fldlYkRvd25sb2FkRGVsZWdhdGUoKQorewor
fQorCitIUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVG
SUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmICghcHB2
T2JqZWN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICpwcHZPYmplY3QgPSBudWxs
cHRyOworCisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JVW5rbm93bikpCisgICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViRG93bmxvYWREZWxlZ2F0ZSo+KHRoaXMpOwor
ICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViRG93bmxvYWREZWxlZ2F0ZSkp
CisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViRG93bmxvYWREZWxlZ2F0ZSo+
KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisKKyAgICBB
ZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworVUxPTkcgV2ViRG93bmxvYWREZWxlZ2F0
ZTo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBXZWJE
b3dubG9hZERlbGVnYXRlOjpSZWxlYXNlKCkKK3sKKyAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVm
Q291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVy
biBuZXdSZWY7Cit9CisKK0hSRVNVTFQgV2ViRG93bmxvYWREZWxlZ2F0ZTo6ZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoX0luX29wdF8gSVdlYkRvd25sb2FkKiBkb3dubG9h
ZCwgX0luXyBCU1RSIGZpbGVuYW1lKQoreworICAgIGlmICghZG93bmxvYWQpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICB3Y2hhcl90IGRlc2t0b3BEaXJlY3RvcnlbTUFYX1BBVEhd
OworICAgIGlmIChGQUlMRUQoU0hHZXRGb2xkZXJQYXRoVygwLCBDU0lETF9ERVNLVE9QLCAwLCAw
LCBkZXNrdG9wRGlyZWN0b3J5KSkpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBfYnN0
cl90IGRlc3RpbmF0aW9uID0gX2JzdHJfdChkZXNrdG9wRGlyZWN0b3J5KSArIEwiXFwiICsgOjpQ
YXRoRmluZEZpbGVOYW1lVyhmaWxlbmFtZSk7CisKKyAgICBpZiAoOjpQYXRoRmlsZUV4aXN0cyhk
ZXN0aW5hdGlvbikpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBkb3dubG9hZC0+c2V0
RGVzdGluYXRpb24oZGVzdGluYXRpb24sIFRSVUUpOworICAgIHJldHVybiBTX09LOworfQorCitI
UkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93bmxvYWQsIF9Jbl9vcHRfIElXZWJVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSogY2hhbGxlbmdlKQoreworICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK0hSRVNVTFQgV2ViRG93bmxvYWREZWxlZ2F0ZTo6ZGlkQ3JlYXRlRGVzdGluYXRpb24o
X0luX29wdF8gSVdlYkRvd25sb2FkKiBkb3dubG9hZCwgX0luXyBCU1RSIGRlc3RpbmF0aW9uKQor
eworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgV2ViRG93bmxvYWREZWxlZ2F0
ZTo6ZGlkRmFpbFdpdGhFcnJvcihfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25sb2FkLCBfSW5f
b3B0XyBJV2ViRXJyb3IqIGVycm9yKQoreworICAgIGlmICghZG93bmxvYWQpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBkb3dubG9hZC0+UmVsZWFzZSgpOworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25sb2FkLCBfSW5fb3B0
XyBJV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UqIGNoYWxsZW5nZSkKK3sKKyAgICByZXR1
cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZFJlY2Vp
dmVEYXRhT2ZMZW5ndGgoX0luX29wdF8gSVdlYkRvd25sb2FkKiBkb3dubG9hZCwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgV2ViRG93bmxv
YWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93
bmxvYWQsIF9Jbl9vcHRfIElXZWJVUkxSZXNwb25zZSogcmVzcG9uc2UpCit7CisgICAgcmV0dXJu
IEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBXZWJEb3dubG9hZERlbGVnYXRlOjpzaG91bGREZWNv
ZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25sb2FkLCBf
SW5fIEJTVFIgZW5jb2RpbmdUeXBlLCBfT3V0XyBCT09MKiBzaG91bGREZWNvZGUpCit7CisgICAg
cmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBXZWJEb3dubG9hZERlbGVnYXRlOjp3aWxs
UmVzdW1lV2l0aFJlc3BvbnNlKF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93bmxvYWQsIF9Jbl9v
cHRfIElXZWJVUkxSZXNwb25zZSogcmVzcG9uc2UsIGxvbmcgbG9uZyBmcm9tQnl0ZSkKK3sKKyAg
ICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6Ondp
bGxTZW5kUmVxdWVzdChfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25sb2FkLCBfSW5fb3B0XyBJ
V2ViTXV0YWJsZVVSTFJlcXVlc3QqIHJlcXVlc3QsCisgICAgX0luX29wdF8gSVdlYlVSTFJlc3Bv
bnNlKiByZWRpcmVjdFJlc3BvbnNlLCBfQ09NX091dHB0cl9vcHRfIElXZWJNdXRhYmxlVVJMUmVx
dWVzdCoqIGZpbmFsUmVxdWVzdCkKK3sKKyAgICBpZiAoIWZpbmFsUmVxdWVzdCkKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqZmluYWxSZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICByZXR1
cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZEJlZ2lu
KF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgaWYgKCFkb3dubG9hZCkK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGRvd25sb2FkLT5BZGRSZWYoKTsKKyAg
ICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBXZWJEb3dubG9hZERlbGVnYXRlOjpkaWRGaW5p
c2goX0luX29wdF8gSVdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBpZiAoIWRvd25sb2Fk
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgZG93bmxvYWQtPlJlbGVhc2UoKTsK
KyAgICByZXR1cm4gU19PSzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvV2ViRG93bmxvYWREZWxlZ2F0ZS5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9XZWJE
b3dubG9hZERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMyOTU4ZWZiMWYyN2YyZGMyZGIwMzMwMzE4
OWNmYmU2MmQ4ZmU5MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13
a2wvV2ViRG93bmxvYWREZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+
CisjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5oPgorCitjbGFzcyBXZWJLaXRM
ZWdhY3lCcm93c2VyV2luZG93OworCitjbGFzcyBXZWJEb3dubG9hZERlbGVnYXRlIDogcHVibGlj
IElXZWJEb3dubG9hZERlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBXZWJEb3dubG9hZERlbGVnYXRl
KFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cmIGNsaWVudCk7CisgICAgdmlydHVhbCB+V2ViRG93
bmxvYWREZWxlZ2F0ZSgpOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2
T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwor
ICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOworCisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lKF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl8gQlNUUiBmaWxlbmFtZSk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl9vcHRfIElXZWJVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBkaWRDcmVhdGVEZXN0aW5hdGlvbihfSW5fb3B0XyBJV2ViRG93bmxvYWQqLCBfSW5f
IEJTVFIgZGVzdGluYXRpb24pOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBkaWRGYWlsV2l0aEVycm9yKF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl9vcHRfIElXZWJF
cnJvciopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoX0luX29wdF8gSVdlYkRvd25sb2FkKiwgX0luX29wdF8g
SVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVEYXRhT2ZMZW5ndGgoX0luX29wdF8gSVdlYkRvd25s
b2FkKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgZGlkUmVjZWl2ZVJlc3BvbnNlKF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl9vcHRf
IElXZWJVUkxSZXNwb25zZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShfSW5fb3B0XyBJV2ViRG93bmxvYWQq
LCBfSW5fIEJTVFIgZW5jb2RpbmdUeXBlLCBfT3V0XyBCT09MKiBzaG91bGREZWNvZGUpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3aWxsUmVzdW1lV2l0aFJlc3BvbnNl
KF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl9vcHRfIElXZWJVUkxSZXNwb25zZSosIGxvbmcg
bG9uZyBmcm9tQnl0ZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdp
bGxTZW5kUmVxdWVzdChfSW5fb3B0XyBJV2ViRG93bmxvYWQqLCBfSW5fb3B0XyBJV2ViTXV0YWJs
ZVVSTFJlcXVlc3QqLCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2Us
IF9DT01fT3V0cHRyX29wdF8gSVdlYk11dGFibGVVUkxSZXF1ZXN0KiogZmluYWxSZXF1ZXN0KTsK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQmVnaW4oX0luX29wdF8g
SVdlYkRvd25sb2FkKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRp
ZEZpbmlzaChfSW5fb3B0XyBJV2ViRG93bmxvYWQqKTsKKworcHJpdmF0ZToKKyAgICBVTE9ORyBt
X3JlZkNvdW50IHsgMCB9OworICAgIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cmIG1fY2xpZW50
OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvV2ViS2l0TGVnYWN5
QnJvd3NlcldpbmRvdy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL1dlYktpdExlZ2Fj
eUJyb3dzZXJXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkZWNjYmJmODk3Yjk5ZGU3OGI0ZThmMTE0
NzkyYWFhOThiM2EwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4t
d2tsL1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuY3BwCkBAIC0wLDAgKzEsODcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFt
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgor
I2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKKworI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkNvbW1vbi5oIgorI2luY2x1ZGUgIk1pbmlC
cm93c2VyTGVnYWN5TGliUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3NlcldlYkhvc3Qu
aCIKKyNpbmNsdWRlICJQcmludFdlYlVJRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWREZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIldlYkRvd25sb2FkRGVsZWdhdGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0NPTVB0ci5oPgorI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEku
aD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxm
dW5jdGlvbmFsPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8V2ViS2l0
TGVnYWN5L0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Cit9CisKK3N0
YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNpemUgPSAxMDsKKworUmVmPFdlYktpdExlZ2FjeUJy
b3dzZXJXaW5kb3c+IFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OmNyZWF0ZShCcm93c2VyV2lu
ZG93Q2xpZW50JiBjbGllbnQsIEhXTkQgbWFpblduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldykK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93KGNs
aWVudCwgbWFpblduZCwgdXNlTGF5ZXJlZFdlYlZpZXcpKTsKK30KKworV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdzo6V2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyhCcm93c2VyV2luZG93Q2xpZW50
JiBjbGllbnQsIEhXTkQgbWFpblduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldykKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1faE1haW5XbmQobWFpblduZCkKKyAgICAsIG1fdXNlTGF5
ZXJlZFdlYlZpZXcodXNlTGF5ZXJlZFdlYlZpZXcpCit7Cit9CisKK1dlYktpdExlZ2FjeUJyb3dz
ZXJXaW5kb3c6On5XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93KCkKK3sKKyAgICBtX2RlZmF1bHRO
b3RpZmljYXRpb25DZW50ZXItPnJlbW92ZU9ic2VydmVyKG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIs
IF9ic3RyX3QoV2ViVmlld1Byb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKSwgbV93
ZWJWaWV3KTsKKyAgICBtX2RlZmF1bHROb3RpZmljYXRpb25DZW50ZXItPnJlbW92ZU9ic2VydmVy
KG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIsIF9ic3RyX3QoV2ViVmlld1Byb2dyZXNzRmluaXNoZWRO
b3RpZmljYXRpb24pLCBtX3dlYlZpZXcpOworfQorCitIUkVTVUxUIFdlYktpdExlZ2FjeUJyb3dz
ZXJXaW5kb3c6OmluaXQoKQoreworICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5j
ZShDTFNJRF9XZWJWaWV3LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmbV93ZWJWaWV3LkdldEludGVyZmFjZVB0cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIG1fd2ViVmlld1ByaXZhdGUgPSBtX3dlYlZpZXc7Cisg
ICAgaWYgKCFtX3dlYlZpZXdQcml2YXRlKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9
IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKG1fd2Vi
SGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJIaXN0b3J5LkdldEludGVy
ZmFjZVB0cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKwor
ICAgIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViQ29yZVN0YXRpc3RpY3MsIDAs
IF9fdXVpZG9mKG1fc3RhdGlzdGljcyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9zdGF0
aXN0aWNzLkdldEludGVyZmFjZVB0cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViQ2Fj
aGUsIDAsIF9fdXVpZG9mKG1fd2ViQ2FjaGUpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1f
d2ViQ2FjaGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgSVdlYk5vdGlmaWNhdGlvbkNlbnRlclB0ciBub3RpZmljYXRp
b25DZW50ZXI7CisgICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJOb3RpZmlj
YXRpb25DZW50ZXIsIDAsIF9fdXVpZG9mKG5vdGlmaWNhdGlvbkNlbnRlciksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbm90aWZpY2F0aW9uQ2VudGVyLkdldEludGVyZmFjZVB0cigpKSk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gbm90aWZp
Y2F0aW9uQ2VudGVyLT5kZWZhdWx0Q2VudGVyKCZtX2RlZmF1bHROb3RpZmljYXRpb25DZW50ZXIu
R2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICBpZiAoIXNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkpCisgICAgICAg
IHJldHVybiBFX0ZBSUw7CisKKyAgICBpZiAoIXNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCkpCisg
ICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBpZiAoIXNldENhY2hlRm9sZGVyKCkpCisgICAg
ICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBhdXRvIHdlYkhvc3QgPSBuZXcgTWluaUJyb3dzZXJX
ZWJIb3N0KHRoaXMpOworCisgICAgaHIgPSBtX3dlYlZpZXctPnNldEZyYW1lTG9hZERlbGVnYXRl
KHdlYkhvc3QpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICBociA9IG1fd2ViVmlld1ByaXZhdGUtPnNldEZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSh3ZWJI
b3N0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgbV9u
b3RpZmljYXRpb25PYnNlcnZlciA9IHdlYkhvc3Q7CisgICAgaHIgPSBtX2RlZmF1bHROb3RpZmlj
YXRpb25DZW50ZXItPmFkZE9ic2VydmVyKG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIsIF9ic3RyX3Qo
V2ViVmlld1Byb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKSwgbV93ZWJWaWV3KTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX2Rl
ZmF1bHROb3RpZmljYXRpb25DZW50ZXItPmFkZE9ic2VydmVyKG1fbm90aWZpY2F0aW9uT2JzZXJ2
ZXIsIF9ic3RyX3QoV2ViVmlld1Byb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24pLCBtX3dlYlZp
ZXcpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9
IHNldFVJRGVsZWdhdGUobmV3IFByaW50V2ViVUlEZWxlZ2F0ZSgqdGhpcykpOworICAgIGlmIChG
QUlMRUQgKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBzZXRBY2Nlc3NpYmls
aXR5RGVsZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSgqdGhpcykpOworICAgIGlmIChG
QUlMRUQgKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBzZXRSZXNvdXJjZUxv
YWREZWxlZ2F0ZShuZXcgUmVzb3VyY2VMb2FkRGVsZWdhdGUodGhpcykpOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IHNldERvd25sb2FkRGVsZWdh
dGUobmV3IFdlYkRvd25sb2FkRGVsZWdhdGUoKnRoaXMpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgUkVDVCBjbGllbnRSZWN0OworICAgIDo6R2V0Q2xp
ZW50UmVjdChtX2hNYWluV25kLCAmY2xpZW50UmVjdCk7CisgICAgaWYgKHVzZXNMYXllcmVkV2Vi
VmlldygpKQorICAgICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2lu
ZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dp
bmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKKworICAgIGhyID0gcHJlcGFyZVZp
ZXdzKG1faE1haW5XbmQsIGNsaWVudFJlY3QpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICByZXR1cm4gaHI7CisKKyAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpCisgICAgICAgIHN1
YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpOworCisgICAgcmV0dXJuIGhyOworfQorCitib29sIFdl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNldENhY2hlRm9sZGVyKCkKK3sKKyAgICBfYnN0cl90
IGFwcERhdGFGb2xkZXI7CisgICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGFwcERhdGFGb2xkZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcHBEYXRhRm9sZGVyICs9IEwiXFxjYWNo
ZSI7CisgICAgd2ViQ2FjaGUoKS0+c2V0Q2FjaGVGb2xkZXIoYXBwRGF0YUZvbGRlcik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworSFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpw
cmVwYXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0KQoreworICAg
IGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgSFJFU1VMVCBo
ciA9IG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhtYWluV25kKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX3dlYlZpZXctPmluaXRXaXRoRnJh
bWUoY2xpZW50UmVjdCwgMCwgMCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQobV91c2VM
YXllcmVkV2ViVmlldyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VXNlc0xheWVyZWRXaW5kb3cobV91c2VM
YXllcmVkV2ViVmlldyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld1dpbmRvdygmbV92aWV3V25kKTsKKwor
ICAgIHJldHVybiBocjsKK30KKworc3RhdGljIFdORFBST0MgZ0RlZldlYktpdFByb2M7CisKK3N0
YXRpYyBMUkVTVUxUIENBTExCQUNLIHZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkg
eworICAgIGNhc2UgV01fTkNISVRURVNUOgorICAgICAgICBjb25zdGV4cHIgaW50IGRyYWdCYXJI
ZWlnaHQgPSAzMDsKKyAgICAgICAgUkVDVCB3aW5kb3c7CisgICAgICAgIDo6R2V0V2luZG93UmVj
dChoV25kLCAmd2luZG93KTsKKyAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50
IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lvbiB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCisgICAgICAg
IC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkg
dGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKKyAgICAgICAgLy8gdW5kZXIgdGhlIG1vdXNlLiBI
b3dldmVyLCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKKyAg
ICAgICAgLy8gMzAgbG9naWNhbCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMg
YW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBX
aGVuIHdlIGFyZSB3aXRoaW4gdGhpcyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2lu
ZG93cyB3ZSB3YW50IHRvCisgICAgICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdl
cmUgdGhlIHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cuCisgICAgICAgIGludCB5ID0gSElX
T1JEKGxQYXJhbSk7CisgICAgICAgIGZsb2F0IHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IgPSBk
cmFnQmFySGVpZ2h0ICogV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7
CisgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5IDwgd2luZG93LnRvcCArIHNjYWxl
ZERyYWdCYXJIZWlnaHRGYWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKKyAg
ICB9CisgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKGdEZWZXZWJLaXRQcm9jLCBoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dzo6c3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCkKK3sKKyNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8
IGRlZmluZWQgX1dJTjY0CisgICAgZ0RlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdO
RFBST0M+KDo6R2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQykpOworICAg
IDo6U2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRf
Y2FzdDxMT05HX1BUUj4odmlld1duZFByb2MpKTsKKyNlbHNlCisgICAgZ0RlZldlYktpdFByb2Mg
PSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZyhtX3ZpZXdXbmQsIEdX
TF9XTkRQUk9DKSk7CisgICAgOjpTZXRXaW5kb3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBST0Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHZpZXdXbmRQcm9jKSk7CisjZW5kaWYKK30KKwor
SFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZXRVSURlbGVnYXRlKElXZWJVSURl
bGVnYXRlKiB1aURlbGVnYXRlKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPnNldFVJRGVsZWdh
dGUodWlEZWxlZ2F0ZSk7Cit9CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6
c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRBY2Nlc3NpYmlsaXR5
RGVsZWdhdGUoYWNjZXNzaWJpbGl0eURlbGVnYXRlKTsKK30KKworSFJFU1VMVCBXZWJLaXRMZWdh
Y3lCcm93c2VyV2luZG93OjpzZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2Fk
RGVsZWdhdGUqIHJlc291cmNlTG9hZERlbGVnYXRlKQoreworICAgIHJldHVybiBtX3dlYlZpZXct
PnNldFJlc291cmNlTG9hZERlbGVnYXRlKHJlc291cmNlTG9hZERlbGVnYXRlKTsKK30KKworSFJF
U1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZXREb3dubG9hZERlbGVnYXRlKElXZWJE
b3dubG9hZERlbGVnYXRlUHRyIGRvd25sb2FkRGVsZWdhdGUpCit7CisgICAgcmV0dXJuIG1fd2Vi
Vmlldy0+c2V0RG93bmxvYWREZWxlZ2F0ZShkb3dubG9hZERlbGVnYXRlKTsKK30KKworSVdlYkZy
YW1lUHRyIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6Om1haW5GcmFtZSgpCit7CisgICAgSVdl
YkZyYW1lUHRyIGZyYW1lUHRyOworICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZVB0ci5H
ZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lUHRyOworfQorCitib29sIFdlYktp
dExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkKK3sK
KyAgICBJV2ViUHJlZmVyZW5jZXNQdHIgdG1wUHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRChX
ZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJQcmVmZXJlbmNlcywgMCwgSUlEX0lXZWJQcmVm
ZXJlbmNlcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0bXBQcmVmZXJlbmNlcy5HZXRJbnRl
cmZhY2VQdHIoKSkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKEZBSUxFRCh0
bXBQcmVmZXJlbmNlcy0+c3RhbmRhcmRQcmVmZXJlbmNlcygmbV9zdGFuZGFyZFByZWZlcmVuY2Vz
LkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNldFRvRGVmYXVs
dFByZWZlcmVuY2VzKCkKK3sKKyAgICBtX3ByZWZzUHJpdmF0ZSA9IG1fc3RhbmRhcmRQcmVmZXJl
bmNlczsKKyAgICBpZiAoIW1fcHJlZnNQcml2YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyNpZiBVU0UoQ0cpCisgICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRBVkZvdW5kYXRpb25F
bmFibGVkKFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZChUUlVFKTsKKyNlbmRpZgorCisgICAgbV9wcmVmc1ByaXZhdGUtPnNldEZ1bGxT
Y3JlZW5FbmFibGVkKFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRTaG93RGVidWdCb3Jk
ZXJzKEZBTFNFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKEZB
TFNFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKEZBTFNFKTsK
KworICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChUUlVFKTsKKyAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRFbmFibGVk
KFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21G
aWxlVVJMcyhGQUxTRSk7CisgICAgbV9wcmVmc1ByaXZhdGUtPnNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyhUUlVFKTsKKworICAgIG1fcHJlZnNQcml2YXRlLT5zZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKFRSVUUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHVw
ZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0oSE1FTlUgbWVudSwgSVdlYkhpc3RvcnlJdGVtJiBo
aXN0b3J5SXRlbSwgaW50IGN1cnJlbnRIaXN0b3J5SXRlbSkKK3sKKyAgICBVSU5UIG1lbnVJRCA9
IElETV9ISVNUT1JZX0xJTkswICsgY3VycmVudEhpc3RvcnlJdGVtOworCisgICAgTUVOVUlURU1J
TkZPIG1lbnVJdGVtSW5mbyB7IH07CisgICAgbWVudUl0ZW1JbmZvLmNiU2l6ZSA9IHNpemVvZihN
RU5VSVRFTUlORk8pOworICAgIG1lbnVJdGVtSW5mby5mTWFzayA9IE1JSU1fVFlQRTsKKyAgICBt
ZW51SXRlbUluZm8uZlR5cGUgPSBNRlRfU1RSSU5HOworCisgICAgX2JzdHJfdCB0aXRsZTsKKyAg
ICBoaXN0b3J5SXRlbS50aXRsZSh0aXRsZS5HZXRBZGRyZXNzKCkpOworICAgIG1lbnVJdGVtSW5m
by5kd1R5cGVEYXRhID0gc3RhdGljX2Nhc3Q8TFBXU1RSPih0aXRsZSk7CisKKyAgICA6OlNldE1l
bnVJdGVtSW5mbyhtZW51LCBtZW51SUQsIEZBTFNFLCAmbWVudUl0ZW1JbmZvKTsKKyAgICA6OkVu
YWJsZU1lbnVJdGVtKG1lbnUsIG1lbnVJRCwgTUZfQllDT01NQU5EIHwgTUZfRU5BQkxFRCk7Cit9
CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2hvd0xhc3RWaXNpdGVkU2l0ZXMo
SVdlYlZpZXcmIHdlYlZpZXcpCit7CisgICAgSE1FTlUgbWVudSA9IDo6R2V0TWVudShtX2hNYWlu
V25kKTsKKworICAgIElXZWJCYWNrRm9yd2FyZExpc3RQdHIgYmFja0ZvcndhcmRMaXN0OworICAg
IEhSRVNVTFQgaHIgPSB3ZWJWaWV3LmJhY2tGb3J3YXJkTGlzdCgmYmFja0ZvcndhcmRMaXN0Lkdl
dEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50IGNhcGFjaXR5ID0gMDsKKyAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNp
dHkoJmNhcGFjaXR5KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IGJhY2tDb3VudCA9IDA7CisgICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0
Q291bnQoJmJhY2tDb3VudCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybjsK
KworICAgIFVJTlQgYmFja1NldHRpbmcgPSBNRl9CWUNPTU1BTkQgfCAoKGJhY2tDb3VudCkgPyBN
Rl9FTkFCTEVEIDogTUZfRElTQUJMRUQpOworICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgSURN
X0hJU1RPUllfQkFDS1dBUkQsIGJhY2tTZXR0aW5nKTsKKworICAgIGludCBmb3J3YXJkQ291bnQg
PSAwOworICAgIGhyID0gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCZmb3J3YXJk
Q291bnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBVSU5U
IGZvcndhcmRTZXR0aW5nID0gTUZfQllDT01NQU5EIHwgKChmb3J3YXJkQ291bnQpID8gTUZfRU5B
QkxFRCA6IE1GX0RJU0FCTEVEKTsKKyAgICA6OkVuYWJsZU1lbnVJdGVtKG1lbnUsIElETV9ISVNU
T1JZX0ZPUldBUkQsIGZvcndhcmRTZXR0aW5nKTsKKworICAgIElXZWJIaXN0b3J5SXRlbVB0ciBj
dXJyZW50SXRlbTsKKyAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oJmN1cnJl
bnRJdGVtLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaHIgPSBtX3dlYkhpc3RvcnktPmFkZEl0ZW1zKDEsICZjdXJyZW50SXRl
bS5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
bjsKKworICAgIElXZWJIaXN0b3J5UHJpdmF0ZVB0ciB3ZWJIaXN0b3J5KG1fd2ViSGlzdG9yeSk7
CisgICAgaWYgKCF3ZWJIaXN0b3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgdG90YWxM
aXN0Q291bnQgPSAwOworICAgIGhyID0gd2ViSGlzdG9yeS0+YWxsSXRlbXMoJnRvdGFsTGlzdENv
dW50LCAwKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9o
aXN0b3J5SXRlbXMucmVzaXplKHRvdGFsTGlzdENvdW50KTsKKworICAgIHN0ZDo6dmVjdG9yPElX
ZWJIaXN0b3J5SXRlbSo+IGhpc3RvcnlUb0xvYWQodG90YWxMaXN0Q291bnQpOworICAgIGhyID0g
d2ViSGlzdG9yeS0+YWxsSXRlbXMoJnRvdGFsTGlzdENvdW50LCBoaXN0b3J5VG9Mb2FkLmRhdGEo
KSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBp
ID0gMDsKKyAgICBmb3IgKGF1dG8mIGN1ciA6IGhpc3RvcnlUb0xvYWQpIHsKKyAgICAgICAgbV9o
aXN0b3J5SXRlbXNbaV0uQXR0YWNoKGN1cik7CisgICAgICAgICsraTsKKyAgICB9CisKKyAgICBp
bnQgYWxsSXRlbXNPZmZzZXQgPSAwOworICAgIGlmICh0b3RhbExpc3RDb3VudCA+IG1heEhpc3Rv
cnlTaXplKQorICAgICAgICBhbGxJdGVtc09mZnNldCA9IHRvdGFsTGlzdENvdW50IC0gbWF4SGlz
dG9yeVNpemU7CisKKyAgICBpbnQgY3VycmVudEhpc3RvcnlJdGVtID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1faGlzdG9yeUl0ZW1zLnNpemUoKSAmJiAoYWxsSXRlbXNPZmZzZXQgKyBj
dXJyZW50SGlzdG9yeUl0ZW0pIDwgbV9oaXN0b3J5SXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgdXBkYXRlTWVudUl0ZW1Gb3JIaXN0b3J5SXRlbShtZW51LCAqKG1faGlzdG9yeUl0ZW1zW2Fs
bEl0ZW1zT2Zmc2V0ICsgY3VycmVudEhpc3RvcnlJdGVtXSksIGN1cnJlbnRIaXN0b3J5SXRlbSk7
CisgICAgICAgICsrY3VycmVudEhpc3RvcnlJdGVtOworICAgIH0KKworICAgIC8vIEhpZGUgYW55
IGhpc3Rvcnkgd2UgYXJlbid0IHVzaW5nIHlldC4KKyAgICBmb3IgKGludCBpID0gY3VycmVudEhp
c3RvcnlJdGVtOyBpIDwgbWF4SGlzdG9yeVNpemU7ICsraSkKKyAgICAgICAgOjpFbmFibGVNZW51
SXRlbShtZW51LCBJRE1fSElTVE9SWV9MSU5LMCArIGksIE1GX0JZQ09NTUFORCB8IE1GX0RJU0FC
TEVEKTsKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpsYXVuY2hJbnNwZWN0
b3IoKQoreworICAgIGlmICghbV93ZWJWaWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFTVUNDRUVERUQobV93ZWJWaWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZtX2luc3BlY3Rv
ci5HZXRJbnRlcmZhY2VQdHIoKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3Rv
ci0+c2hvdygpOworfQorCit2b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6Om9wZW5Qcm94
eVNldHRpbmdzKCkKK3sKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpuYXZp
Z2F0ZUZvcndhcmRPckJhY2t3YXJkKFVJTlQgbWVudUlEKQoreworICAgIGlmICghbV93ZWJWaWV3
KQorICAgICAgICByZXR1cm47CisKKyAgICBCT09MIHdlbnRCYWNrT3JGb3J3YXJkID0gRkFMU0U7
CisgICAgaWYgKElETV9ISVNUT1JZX0ZPUldBUkQgPT0gbWVudUlEKQorICAgICAgICBtX3dlYlZp
ZXctPmdvRm9yd2FyZCgmd2VudEJhY2tPckZvcndhcmQpOworICAgIGVsc2UKKyAgICAgICAgbV93
ZWJWaWV3LT5nb0JhY2soJndlbnRCYWNrT3JGb3J3YXJkKTsKK30KKwordm9pZCBXZWJLaXRMZWdh
Y3lCcm93c2VyV2luZG93OjpuYXZpZ2F0ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCkKK3sKKyAgICBp
ZiAoIW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGhpc3RvcnlFbnRyeSA9
IG1lbnVJRCAtIElETV9ISVNUT1JZX0xJTkswOworICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hp
c3RvcnlJdGVtcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIElXZWJIaXN0b3J5SXRl
bVB0ciBkZXNpcmVkSGlzdG9yeUl0ZW0gPSBtX2hpc3RvcnlJdGVtc1toaXN0b3J5RW50cnldOwor
ICAgIGlmICghZGVzaXJlZEhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBCT09M
IHN1Y2NlZWRlZCA9IEZBTFNFOworICAgIG1fd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShk
ZXNpcmVkSGlzdG9yeUl0ZW0sICZzdWNjZWVkZWQpOworCisgICAgX2JzdHJfdCBmcmFtZVVSTDsK
KyAgICBkZXNpcmVkSGlzdG9yeUl0ZW0tPlVSTFN0cmluZyhmcmFtZVVSTC5HZXRBZGRyZXNzKCkp
OworCisgICAgbV9jbGllbnQuYWN0aXZlVVJMQ2hhbmdlZChmcmFtZVVSTC5HZXRCU1RSKCkpOwor
fQorCitib29sIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OmdvQmFjaygpCit7CisgICAgQk9P
TCB3ZW50QmFjayA9IEZBTFNFOworICAgIG1fd2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFjayk7Cisg
ICAgcmV0dXJuIHdlbnRCYWNrOworfQorCitib29sIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6
OmdvRm9yd2FyZCgpCit7CisgICAgQk9PTCB3ZW50Rm9yd2FyZCA9IEZBTFNFOworICAgIG1fd2Vi
Vmlldy0+Z29Gb3J3YXJkKCZ3ZW50Rm9yd2FyZCk7CisgICAgcmV0dXJuIHdlbnRGb3J3YXJkOwor
fQorCitIUkVTVUxUIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OmxvYWRVUkwoY29uc3QgQlNU
UiYgcGFzc2VkVVJMKQoreworICAgIGlmICghcGFzc2VkVVJMKQorICAgICAgICByZXR1cm4gRV9J
TlZBTElEQVJHOworCisgICAgSVdlYkZyYW1lUHRyIGZyYW1lOworICAgIEhSRVNVTFQgaHIgPSBt
X3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBJV2ViTXV0YWJsZVVSTFJlcXVl
c3RQdHIgcmVxdWVzdDsKKyAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYk11
dGFibGVVUkxSZXF1ZXN0LCAwLCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoqKSZy
ZXF1ZXN0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
aHIgPSByZXF1ZXN0LT5pbml0V2l0aFVSTChwYXNzZWRVUkwsIFdlYlVSTFJlcXVlc3RVc2VQcm90
b2NvbENhY2hlUG9saWN5LCA2MCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIF9ic3RyX3QgbWV0aG9kQlN0cihMIkdFVCIpOworICAgIGhyID0gcmVxdWVz
dC0+c2V0SFRUUE1ldGhvZChtZXRob2RCU3RyKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBmcmFtZS0+bG9hZFJlcXVlc3QocmVxdWVzdCk7CisK
KyAgICByZXR1cm4gaHI7Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0
VXNlckFnZW50KFVJTlQgbWVudUlEKQoreworICAgIF9ic3RyX3QgY3VzdG9tVXNlckFnZW50Owor
CisgICAgc3dpdGNoIChtZW51SUQpIHsKKyAgICBjYXNlIElETV9VQV9ERUZBVUxUOgorICAgICAg
ICAvLyBTZXQgdG8gbnVsbCB1c2VyIGFnZW50CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURN
X1VBX1NBRkFSSToKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFj
aW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hU
TUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTEuMS4yIFNhZmFyaS82MDUuMS4xNSI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSURNX1VBX1NBRkFSSV9JT1NfSVBIT05FOgorICAgICAgICBjdXN0
b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTFfNF8x
IGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykg
VmVyc2lvbi8xMS4wIE1vYmlsZS8xNUUxNDggU2FmYXJpLzYwNC4xIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJRE1fVUFfU0FGQVJJX0lPU19JUEFEOgorICAgICAgICBjdXN0b21Vc2VyQWdl
bnQgPSBMIk1vemlsbGEvNS4wIChpUGFkOyBDUFUgaVBob25lIE9TIDExXzRfMSBsaWtlIE1hYyBP
UyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTEu
MCBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SURNX1VBX0lFXzExOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChX
aW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdl
Y2tvIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfRURHRToKKyAgICAgICAgY3Vz
dG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0
KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNTguMC4zMDI5
LjExMCBTYWZhcmkvNTM3LjM2IEVkZ2UvMTYuMTYyOTkiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElETV9VQV9DSFJPTUVfTUFDOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemls
bGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzEzXzYpIEFwcGxlV2ViS2l0LzUz
Ny4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS82Ny4wLjMzOTYuOTkgU2FmYXJpLzUzNy4z
NiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0NIUk9NRV9XSU46CisgICAgICAg
IGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7
IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzY3LjAu
MzM5Ni45OSBTYWZhcmkvNTM3LjM2IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFf
RklSRUZPWF9NQUM6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKE1h
Y2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuMTM7IHJ2OjYxLjApIEdlY2tvLzIwMTAwMTAxIEZp
cmVmb3gvNjEuMCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0ZJUkVGT1hfV0lO
OgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEw
LjA7IFdPVzY0OyBydjo2MS4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzYxLjAiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElETV9VQV9PVEhFUjoKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlQoMCk7IC8vIFdlIHNob3VsZCBuZXZlciBoaXQgdGhpcyBjYXNlCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzZXRVc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTsKK30KKwordm9p
ZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZXRVc2VyQWdlbnQoX2JzdHJfdCYgY3VzdG9t
VXNlckFnZW50KQoreworICAgIGlmICghd2ViVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB3ZWJWaWV3KCktPnNldEN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQuR2V0QlNUUigp
KTsKK30KKworX2JzdHJfdCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojp1c2VyQWdlbnQoKQor
eworICAgIF9ic3RyX3QgdXNlckFnZW50OworICAgIGlmIChGQUlMRUQod2ViVmlldygpLT5jdXN0
b21Vc2VyQWdlbnQoJnVzZXJBZ2VudC5HZXRCU1RSKCkpKSkKKyAgICAgICAgcmV0dXJuIF9ic3Ry
X3QoTCItIFVua25vd24gLTogQ2FsbCBmYWlsZWQuIik7CisKKyAgICByZXR1cm4gdXNlckFnZW50
OworfQorCit2b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnJlbG9hZCgpCit7CisgICAg
SVdlYklCQWN0aW9uc1B0ciB3ZWJBY3Rpb25zKG1fd2ViVmlldyk7CisgICAgaWYgKCF3ZWJBY3Rp
b25zKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJBY3Rpb25zLT5yZWxvYWQobnVsbHB0cik7
Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6cmVzZXRab29tKCkKK3sKKyAg
ICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnMobV93ZWJWaWV3KTsKKyAgICBpZiAoIXdlYkFj
dGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYkFjdGlvbnMtPnJlc2V0UGFnZVpvb20o
bnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6em9vbUluKCkK
K3sKKyAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnMobV93ZWJWaWV3KTsKKyAgICBpZiAo
IXdlYkFjdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYkFjdGlvbnMtPnpvb21QYWdl
SW4obnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6em9vbU91
dCgpCit7CisgICAgSVdlYklCQWN0aW9uc1B0ciB3ZWJBY3Rpb25zKG1fd2ViVmlldyk7CisgICAg
aWYgKCF3ZWJBY3Rpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJBY3Rpb25zLT56b29t
UGFnZU91dChudWxscHRyKTsKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpz
aG93TGF5ZXJUcmVlKCkKK3sKKyAgICBJV2ViVmlld1ByaXZhdGUzUHRyIHdlYlZpZXdQcml2YXRl
KG1fd2ViVmlldyk7CisgICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJDVVJSRU5UIFRSRUU6XG4iKTsKKworICAgIF9ic3Ry
X3QgbGF5ZXJUcmVlQnN0cjsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXdQcml2YXRlLT5sYXllclRy
ZWVBc1N0cmluZyhsYXllclRyZWVCc3RyLkdldEFkZHJlc3MoKSkpKQorICAgICAgICBPdXRwdXRE
ZWJ1Z1N0cmluZyhMIiAgICBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGxheWVyIHRyZWUuXG4iKTsK
KyAgICBlbHNlCisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKGxheWVyVHJlZUJzdHIpOworICAg
IE91dHB1dERlYnVnU3RyaW5nKEwiXG5cbiIpOworfQorCitzdGF0aWMgQk9PTCBDQUxMQkFDSyBB
Ym9ydFByb2MoSERDIGhEQywgaW50IEVycm9yKQoreworICAgIE1TRyBtc2c7CisgICAgd2hpbGUg
KDo6UGVla01lc3NhZ2UoJm1zZywgMCwgMCwgMCwgUE1fUkVNT1ZFKSkgeworICAgICAgICA6OlRy
YW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwor
ICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgSERDIGdldFByaW50ZXJEQygp
Cit7CisgICAgUFJJTlRETEcgcGRsZzsKKyAgICBtZW1zZXQoJnBkbGcsIDAsIHNpemVvZihQUklO
VERMRykpOworICAgIHBkbGcubFN0cnVjdFNpemUgPSBzaXplb2YoUFJJTlRETEcpOworICAgIHBk
bGcuRmxhZ3MgPSBQRF9QUklOVFNFVFVQIHwgUERfUkVUVVJOREM7CisKKyAgICA6OlByaW50RGxn
KCZwZGxnKTsKKworICAgIHJldHVybiBwZGxnLmhEQzsKK30KKworc3RhdGljIHZvaWQgaW5pdERv
Y1N0cnVjdChET0NJTkZPKiBkaSwgY29uc3Qgd2NoYXJfdCogZG9jbmFtZSkKK3sKKyAgICBtZW1z
ZXQoZGksIDAsIHNpemVvZihET0NJTkZPKSk7CisgICAgZGktPmNiU2l6ZSA9IHNpemVvZihET0NJ
TkZPKTsKKyAgICBkaS0+bHBzekRvY05hbWUgPSBkb2NuYW1lOworfQorCit2b2lkIFdlYktpdExl
Z2FjeUJyb3dzZXJXaW5kb3c6OnByaW50KCkKK3sKKyAgICBIREMgcHJpbnREQyA9IGdldFByaW50
ZXJEQygpOworICAgIGlmICghcHJpbnREQykgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJF
cnJvciBjcmVhdGluZyBwcmludGluZyBEQyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9P
Syk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoOjpTZXRBYm9ydFByb2MocHJp
bnREQywgQWJvcnRQcm9jKSA9PSBTUF9FUlJPUikgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwg
TCJFcnJvciBzZXR0aW5nIHVwIEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBN
Ql9PSyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJV2ViRnJhbWVQdHIgZnJhbWUg
PSBtYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
V2ViRnJhbWVQcml2YXRlUHRyIGZyYW1lUHJpdmF0ZShmcmFtZSk7CisgICAgaWYgKCFmcmFtZVBy
aXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGlu
Z01vZGUoVFJVRSwgcHJpbnREQyk7CisKKyAgICBVSU5UIHBhZ2VDb3VudCA9IDA7CisgICAgZnJh
bWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50KHByaW50REMsICZwYWdlQ291bnQpOworCisg
ICAgRE9DSU5GTyBkaTsKKyAgICBpbml0RG9jU3RydWN0KCZkaSwgTCJXZWJLaXQgRG9jIik7Cisg
ICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOworCisgICAgLy8gRklYTUU6IE5lZWQgQ29yZUdy
YXBoaWNzIGltcGxlbWVudGF0aW9uCisgICAgdm9pZCogZ3JhcGhpY3NDb250ZXh0ID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8PSBwYWdlQ291bnQ7ICsrcGFnZSkgeworICAg
ICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKKyAgICAgICAgZnJhbWVQcml2YXRlLT5zcG9vbFBh
Z2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIDo6RW5k
UGFnZShwcmludERDKTsKKyAgICB9CisKKyAgICBmcmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdN
b2RlKEZBTFNFLCBwcmludERDKTsKKworICAgIDo6RW5kRG9jKHByaW50REMpOworICAgIDo6RGVs
ZXRlREMocHJpbnREQyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFs
b2csIFVJTlQgZmllbGQsIF9ic3RyX3QgdmFsdWUpCit7CisgICAgOjpTZXREbGdJdGVtVGV4dChk
aWFsb2csIGZpZWxkLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdO
RCBkaWFsb2csIFVJTlQgZmllbGQsIFVJTlQgdmFsdWUpCit7CisgICAgU3RyaW5nIHZhbHVlU3Ry
ID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1ZSk7CisKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIudXRmOCgpLmRhdGEoKSkpOworfQorCitzdGF0aWMg
dm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBJUHJvcGVydHlCYWdQ
dHIgc3RhdGlzdGljcywgY29uc3QgX2JzdHJfdCYga2V5KQoreworICAgIF92YXJpYW50X3QgdmFy
OworICAgIFZfVlQoJnZhcikgPSBWVF9VSTg7CisgICAgaWYgKEZBSUxFRChzdGF0aXN0aWNzLT5S
ZWFkKGtleSwgJnZhci5HZXRWQVJJQU5UKCksIG51bGxwdHIpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gVl9VSTgoJnZhcik7CisgICAgU3RyaW5n
IHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1ZSk7CisKKyAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIudXRmOCgpLmRhdGEoKSkpOworfQor
CisjaWYgVVNFKENGKQorc3RhdGljIHZvaWQgc2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlO
VCBmaWVsZCwgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVUlO
VCYgdG90YWwpCit7CisgICAgQ0ZOdW1iZXJSZWYgY291bnROdW0gPSBzdGF0aWNfY2FzdDxDRk51
bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwga2V5KSk7CisgICAgaWYg
KCFjb3VudE51bSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBD
Rk51bWJlckdldFZhbHVlKGNvdW50TnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY291bnQpOworCisg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIGZpZWxkLCBzdGF0aWNfY2FzdDxVSU5UPihjb3VudCkp
OworICAgIHRvdGFsICs9IGNvdW50OworfQorI2VuZGlmCisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdzo6dXBkYXRlU3RhdGlzdGljcyhIV05EIGRpYWxvZykKK3sKKyAgICBJV2ViQ29y
ZVN0YXRpc3RpY3NQdHIgd2ViQ29yZVN0YXRpc3RpY3MgPSBzdGF0aXN0aWNzKCk7CisgICAgaWYg
KCF3ZWJDb3JlU3RhdGlzdGljcykKKyAgICAgICAgcmV0dXJuOworCisgICAgSVByb3BlcnR5QmFn
UHRyIHN0YXRpc3RpY3M7CisgICAgSFJFU1VMVCBociA9IHdlYkNvcmVTdGF0aXN0aWNzLT5tZW1v
cnlTdGF0aXN0aWNzKCZzdGF0aXN0aWNzLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRmFzdE1hbGxvYy4KKyAgICBzZXRX
aW5kb3dUZXh0KGRpYWxvZywgSURDX1JFU0VSVkVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxv
Y1Jlc2VydmVkVk1CeXRlcyIpOworICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ09NTUlU
VEVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY0NvbW1pdHRlZFZNQnl0ZXMiKTsKKyAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0ZSRUVfTElTVF9CWVRFUywgc3RhdGlzdGljcywgIkZh
c3RNYWxsb2NGcmVlTGlzdEJ5dGVzIik7CisKKyAgICAvLyBXZWJDb3JlIENhY2hlLgorI2lmIFVT
RShDRikKKyAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUgPSB0aGlzLT53ZWJDYWNoZSgpOworCisg
ICAgaW50IGRpY3RDb3VudCA9IDY7CisgICAgSVByb3BlcnR5QmFnKiBjYWNoZURpY3RbNl0gPSB7
IDAgfTsKKyAgICBpZiAoRkFJTEVEKHdlYkNhY2hlLT5zdGF0aXN0aWNzKCZkaWN0Q291bnQsIGNh
Y2hlRGljdCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8Q0ZEaWN0aW9uYXJ5UHJv
cGVydHlCYWc+IGNvdW50cywgc2l6ZXMsIGxpdmVTaXplcywgZGVjb2RlZFNpemVzLCBwdXJnYWJs
ZVNpemVzOworICAgIGNvdW50cy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFy
eVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzBdKSk7CisgICAgc2l6ZXMuYWRvcHRSZWYocmVpbnRl
cnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFsxXSkpOworICAg
IGxpdmVTaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5
QmFnKj4oY2FjaGVEaWN0WzJdKSk7CisgICAgZGVjb2RlZFNpemVzLmFkb3B0UmVmKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbM10pKTsKKyAgICBw
dXJnYWJsZVNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVy
dHlCYWcqPihjYWNoZURpY3RbNF0pKTsKKworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBpbWFnZXNL
ZXkgPSBDRlNUUigiaW1hZ2VzIik7CisgICAgc3RhdGljIENGU3RyaW5nUmVmIHN0eWxlc2hlZXRz
S2V5ID0gQ0ZTVFIoInN0eWxlIHNoZWV0cyIpOworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB4c2xL
ZXkgPSBDRlNUUigieHNsIik7CisgICAgc3RhdGljIENGU3RyaW5nUmVmIHNjcmlwdHNLZXkgPSBD
RlNUUigic2NyaXB0cyIpOworCisgICAgaWYgKGNvdW50cykgeworICAgICAgICBVSU5UIHRvdGFs
T2JqZWN0cyA9IDA7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX09C
SkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxPYmplY3Rz
KTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfT0JKRUNUX0NPVU5ULCBj
b3VudHMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsT2JqZWN0cyk7CisgICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX09CSkVDVF9DT1VOVCwgY291bnRzLT5k
aWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19KU0NfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgc2Ny
aXB0c0tleSwgdG90YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19UT1RBTF9PQkpFQ1RfQ09VTlQsIHRvdGFsT2JqZWN0cyk7CisgICAgfQorCisgICAgaWYgKHNp
emVzKSB7CisgICAgICAgIFVJTlQgdG90YWxCeXRlcyA9IDA7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSU1BR0VTX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNL
ZXksIHRvdGFsQnl0ZXMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19C
WVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsQnl0ZXMpOwor
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9CWVRFUywgc2l6ZXMtPmRpY3Rp
b25hcnkoKSwgeHNsS2V5LCB0b3RhbEJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19KU0NfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFs
Qnl0ZXMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0JZVEVTLCB0
b3RhbEJ5dGVzKTsKKyAgICB9CisKKyAgICBpZiAobGl2ZVNpemVzKSB7CisgICAgICAgIFVJTlQg
dG90YWxMaXZlQnl0ZXMgPSAwOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lN
QUdFU19MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3Rh
bExpdmVCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0xJVkVf
Q09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxMaXZl
Qnl0ZXMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9MSVZFX0NPVU5U
LCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+
ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfTElWRV9DT1VOVCwgdG90YWxMaXZlQnl0ZXMpOwor
ICAgIH0KKworICAgIGlmIChkZWNvZGVkU2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbERlY29k
ZWQgPSAwOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19ERUNPREVE
X0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbERlY29k
ZWQpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19ERUNPREVEX0NPVU5U
LCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsRGVjb2Rl
ZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0RFQ09ERURfQ09VTlQs
IGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsRGVjb2RlZCk7CisgICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0RFQ09ERURfQ09VTlQsIGRlY29kZWRT
aXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbERlY29kZWQpOworICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0RFQ09ERUQsIHRvdGFsRGVjb2RlZCk7Cisg
ICAgfQorCisgICAgaWYgKHB1cmdhYmxlU2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbFB1cmdh
YmxlID0gMDsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfUFVSR0VB
QkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxQ
dXJnYWJsZSk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX1BVUkdFQUJM
RV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90
YWxQdXJnYWJsZSk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX1BVUkdF
QUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsUHVy
Z2FibGUpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19QVVJHRUFCTEVf
Q09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxQdXJn
YWJsZSk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfUFVSR0VBQkxF
LCB0b3RhbFB1cmdhYmxlKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIEphdmFTY3JpcHQgSGVh
cC4KKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19IRUFQX1NJWkUsIHN0YXRpc3Rp
Y3MsICJKYXZhU2NyaXB0SGVhcFNpemUiKTsKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X0pTQ19IRUFQX0ZSRUUsIHN0YXRpc3RpY3MsICJKYXZhU2NyaXB0RnJlZVNpemUiKTsKKworICAg
IFVJTlQgY291bnQ7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNj
cmlwdE9iamVjdHNDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2cs
IElEQ19UT1RBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3
ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudCgmY291bnQpKSkK
KyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19HTE9CQUxfSlNDX0hFQVBfT0JKRUNU
UywgY291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RzQ291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfUFJPVEVDVEVEX0pTQ19IRUFQX09CSkVDVFMsIGNvdW50KTsKKworICAgIC8v
IEZvbnQgYW5kIEdseXBoIENhY2hlcy4KKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0
aWNzLT5jYWNoZWRGb250RGF0YUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0
KGRpYWxvZywgSURDX1RPVEFMX0ZPTlRfT0JKRUNUUywgY291bnQpOworICAgIGlmIChTVUNDRUVE
RUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudCgmY291bnQp
KSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTkFDVElWRV9GT05UX09CSkVD
VFMsIGNvdW50KTsKKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5nbHlwaFBh
Z2VDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19HTFlQ
SF9QQUdFUywgY291bnQpOworCisgICAgLy8gU2l0ZSBJY29uIERhdGFiYXNlLgorICAgIGlmIChT
VUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25QYWdlVVJMTWFwcGluZ0NvdW50KCZjb3Vu
dCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1BBR0VfVVJMX01BUFBJTkdT
LCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJldGFp
bmVkUGFnZVVSTENvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywg
SURDX1JFVEFJTkVEX1BBR0VfVVJMUywgY291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29y
ZVN0YXRpc3RpY3MtPmljb25SZWNvcmRDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93
VGV4dChkaWFsb2csIElEQ19TSVRFX0lDT05fUkVDT1JEUywgY291bnQpOworICAgIGlmIChTVUND
RUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25zV2l0aERhdGFDb3VudCgmY291bnQpKSkKKyAg
ICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19TSVRFX0lDT05TX1dJVEhfREFUQSwgY291
bnQpOworfQorCit2b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNldFByZWZlcmVuY2Uo
VUlOVCBtZW51SUQsIGJvb2wgZW5hYmxlKQoreworICAgIGlmICghc3RhbmRhcmRQcmVmZXJlbmNl
cygpIHx8ICFwcml2YXRlUHJlZmVyZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dp
dGNoIChtZW51SUQpIHsKKyAgICBjYXNlIElETV9BVkZPVU5EQVRJT046CisgICAgICAgIHN0YW5k
YXJkUHJlZmVyZW5jZXMoKS0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChlbmFibGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElETV9BQ0NfQ09NUE9TSVRJTkc6CisgICAgICAgIHByaXZhdGVQ
cmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChlbmFibGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9XS19GVUxMU0NSRUVOOgorICAgICAgICBwcml2
YXRlUHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKKyAgICAgICAgcHJpdmF0
ZVByZWZlcmVuY2VzKCktPnNldFNob3dEZWJ1Z0JvcmRlcnMoZW5hYmxlKTsKKyAgICAgICAgcHJp
dmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3dSZXBhaW50Q291bnRlcihlbmFibGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElETV9ERUJVR19JTkZPX0xBWUVSOgorICAgICAgICBwcml2YXRl
UHJlZmVyZW5jZXMoKS0+c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGVuYWJsZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0lOVkVSVF9DT0xPUlM6CisgICAgICAgIHByaXZh
dGVQcmVmZXJlbmNlcygpLT5zZXRTaG91bGRJbnZlcnRDb2xvcnMoZW5hYmxlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJRE1fRElTQUJMRV9JTUFHRVM6CisgICAgICAgIHN0YW5kYXJkUHJl
ZmVyZW5jZXMoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCFlbmFibGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElETV9ESVNBQkxFX1NUWUxFUzoKKyAgICAgICAgcHJpdmF0ZVBy
ZWZlcmVuY2VzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCFlbmFibGUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElETV9ESVNBQkxFX0pBVkFTQ1JJUFQ6CisgICAgICAgIHN0
YW5kYXJkUHJlZmVyZW5jZXMoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoIWVuYWJsZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSURNX0RJU0FCTEVfTE9DQUxfRklMRV9SRVNUUklDVElPTlM6
CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMcyhlbmFibGUpOworICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9XZWJLaXRMZWdhY3lCcm93
c2VyV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIyNjkwOWFhY2I2Y2VkZmQ2MGU4MzdlM2U0MTIwMjgx
YTM4YjMxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQnJvd3NlcldpbmRvd0NsaWVudC5oIgorI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9X
ZWJLaXQuaD4KKyNpbmNsdWRlIDxjb21pcC5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworX0NPTV9TTUFSVFBU
Ul9UWVBFREVGKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUsIElJRF9JQWNjZXNzaWJpbGl0eURlbGVn
YXRlKTsKK19DT01fU01BUlRQVFJfVFlQRURFRihJV2ViQmFja0ZvcndhcmRMaXN0LCBJSURfSVdl
YkJhY2tGb3J3YXJkTGlzdCk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkNhY2hlLCBJSURf
SVdlYkNhY2hlKTsKK19DT01fU01BUlRQVFJfVFlQRURFRihJV2ViQ29yZVN0YXRpc3RpY3MsIElJ
RF9JV2ViQ29yZVN0YXRpc3RpY3MpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJEYXRhU291
cmNlLCBJSURfSVdlYkRhdGFTb3VyY2UpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJEb3du
bG9hZERlbGVnYXRlLCBJSURfSVdlYkRvd25sb2FkRGVsZWdhdGUpOworX0NPTV9TTUFSVFBUUl9U
WVBFREVGKElXZWJGcmFtZSwgSUlEX0lXZWJGcmFtZSk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYo
SVdlYkZyYW1lMiwgSUlEX0lXZWJGcmFtZTIpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJG
cmFtZUxvYWREZWxlZ2F0ZSwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0ZSk7CitfQ09NX1NNQVJU
UFRSX1RZUEVERUYoSVdlYkZyYW1lUHJpdmF0ZSwgSUlEX0lXZWJGcmFtZVByaXZhdGUpOworX0NP
TV9TTUFSVFBUUl9UWVBFREVGKElXZWJIaXN0b3J5LCBJSURfSVdlYkhpc3RvcnkpOworX0NPTV9T
TUFSVFBUUl9UWVBFREVGKElXZWJIaXN0b3J5SXRlbSwgSUlEX0lXZWJIaXN0b3J5SXRlbSk7Citf
Q09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkhpc3RvcnlQcml2YXRlLCBJSURfSVdlYkhpc3RvcnlQ
cml2YXRlKTsKK19DT01fU01BUlRQVFJfVFlQRURFRihJV2ViSUJBY3Rpb25zLCBJSURfSVdlYklC
QWN0aW9ucyk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkluc3BlY3RvciwgSUlEX0lXZWJJ
bnNwZWN0b3IpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJLaXRNZXNzYWdlTG9vcCwgSUlE
X0lXZWJLaXRNZXNzYWdlTG9vcCk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYk11dGFibGVV
UkxSZXF1ZXN0LCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0KTsKK19DT01fU01BUlRQVFJfVFlQ
RURFRihJV2ViTm90aWZpY2F0aW9uQ2VudGVyLCBJSURfSVdlYk5vdGlmaWNhdGlvbkNlbnRlcik7
CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyLCBJSURfSVdl
Yk5vdGlmaWNhdGlvbk9ic2VydmVyKTsKK19DT01fU01BUlRQVFJfVFlQRURFRihJV2ViUHJlZmVy
ZW5jZXMsIElJRF9JV2ViUHJlZmVyZW5jZXMpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJQ
cmVmZXJlbmNlc1ByaXZhdGUzLCBJSURfSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMpOworX0NPTV9T
TUFSVFBUUl9UWVBFREVGKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSwgSUlEX0lXZWJSZXNvdXJj
ZUxvYWREZWxlZ2F0ZSk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYlVJRGVsZWdhdGUsIElJ
RF9JV2ViVUlEZWxlZ2F0ZSk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYlZpZXcsIElJRF9J
V2ViVmlldyk7CitfQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYlZpZXdQcml2YXRlMiwgSUlEX0lX
ZWJWaWV3UHJpdmF0ZTIpOworX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJWaWV3UHJpdmF0ZTMs
IElJRF9JV2ViVmlld1ByaXZhdGUzKTsKKworY2xhc3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dyA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c+IGNyZWF0ZShCcm93
c2VyV2luZG93Q2xpZW50JiwgSFdORCBtYWluV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3ID0g
ZmFsc2UpOworCisgICAgfldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3coKTsKKworICAgIEhSRVNV
TFQgaW5pdCgpOworICAgIEhXTkQgaHduZCgpIHsgcmV0dXJuIG1fdmlld1duZDsgfQorCisgICAg
SFJFU1VMVCBsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCk7CisgICAgdm9pZCByZWxvYWQo
KTsKKyAgICB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoVUlOVCBtZW51SUQpOworICAg
IHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQpOworICAgIHZvaWQgc2V0UHJlZmVy
ZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpOworICAgIGJvb2wgdXNlc0xheWVyZWRXZWJW
aWV3KCkgY29uc3QgeyByZXR1cm4gbV91c2VMYXllcmVkV2ViVmlldzsgfQorCisgICAgdm9pZCBw
cmludCgpOworICAgIHZvaWQgbGF1bmNoSW5zcGVjdG9yKCk7CisgICAgdm9pZCBvcGVuUHJveHlT
ZXR0aW5ncygpOworCisgICAgX2JzdHJfdCB1c2VyQWdlbnQoKTsKKyAgICB2b2lkIHNldFVzZXJB
Z2VudChVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBzZXRVc2VyQWdlbnQoX2JzdHJfdCYgY3VzdG9t
VUFTdHJpbmcpOworCisgICAgdm9pZCBzaG93TGF5ZXJUcmVlKCk7CisgICAgdm9pZCB1cGRhdGVT
dGF0aXN0aWNzKEhXTkQgZGlhbG9nKTsKKworICAgIHZvaWQgcmVzZXRab29tKCk7CisgICAgdm9p
ZCB6b29tSW4oKTsKKyAgICB2b2lkIHpvb21PdXQoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQWNjZXNzaWJpbGl0eURlbGVnYXRlOworICAgIGZyaWVuZCBjbGFzcyBNaW5pQnJvd3Nl
cldlYkhvc3Q7CisgICAgZnJpZW5kIGNsYXNzIFByaW50V2ViVUlEZWxlZ2F0ZTsKKyAgICBmcmll
bmQgY2xhc3MgV2ViRG93bmxvYWREZWxlZ2F0ZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VM
b2FkRGVsZWdhdGU7CisKKyAgICBIUkVTVUxUIHByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNv
bnN0IFJFQ1QmIGNsaWVudFJlY3QpOworCisgICAgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJ
V2ViVmlldyYpOworICAgIGJvb2wgc2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMoKTsKKyAg
ICBib29sIHNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCk7CisKKyAgICBIUkVTVUxUIHNldFVJRGVs
ZWdhdGUoSVdlYlVJRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldEFjY2Vzc2liaWxpdHlEZWxl
Z2F0ZShJQWNjZXNzaWJpbGl0eURlbGVnYXRlKik7CisgICAgSFJFU1VMVCBzZXRSZXNvdXJjZUxv
YWREZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldERv
d25sb2FkRGVsZWdhdGUoSVdlYkRvd25sb2FkRGVsZWdhdGVQdHIpOworCisgICAgSVdlYlByZWZl
cmVuY2VzUHRyIHN0YW5kYXJkUHJlZmVyZW5jZXMoKSB7IHJldHVybiBtX3N0YW5kYXJkUHJlZmVy
ZW5jZXM7ICB9CisgICAgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTNQdHIgcHJpdmF0ZVByZWZlcmVu
Y2VzKCkgeyByZXR1cm4gbV9wcmVmc1ByaXZhdGU7IH0KKyAgICBJV2ViRnJhbWVQdHIgbWFpbkZy
YW1lKCk7CisgICAgSVdlYkNvcmVTdGF0aXN0aWNzUHRyIHN0YXRpc3RpY3MoKSB7IHJldHVybiBt
X3N0YXRpc3RpY3M7IH0KKyAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUoKSB7IHJldHVybiBtX3dl
YkNhY2hlOyAgfQorICAgIElXZWJWaWV3UHRyIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7
IH0KKworICAgIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuICEhbV93ZWJWaWV3OyB9
CisgICAgYm9vbCBnb0JhY2soKTsKKyAgICBib29sIGdvRm9yd2FyZCgpOworCisgICAgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdyhCcm93c2VyV2luZG93Q2xpZW50JiwgSFdORCBtYWluV25kLCBi
b29sIHVzZUxheWVyZWRXZWJWaWV3KTsKKyAgICB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRv
dygpOworICAgIGJvb2wgc2V0Q2FjaGVGb2xkZXIoKTsKKworICAgIEJyb3dzZXJXaW5kb3dDbGll
bnQmIG1fY2xpZW50OworICAgIHN0ZDo6dmVjdG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0
b3J5SXRlbXM7CisKKyAgICBJV2ViVmlld1B0ciBtX3dlYlZpZXc7CisgICAgSVdlYlZpZXdQcml2
YXRlMlB0ciBtX3dlYlZpZXdQcml2YXRlOworCisgICAgSVdlYkhpc3RvcnlQdHIgbV93ZWJIaXN0
b3J5OworICAgIElXZWJJbnNwZWN0b3JQdHIgbV9pbnNwZWN0b3I7CisgICAgSVdlYlByZWZlcmVu
Y2VzUHRyIG1fc3RhbmRhcmRQcmVmZXJlbmNlczsKKyAgICBJV2ViUHJlZmVyZW5jZXNQcml2YXRl
M1B0ciBtX3ByZWZzUHJpdmF0ZTsKKyAgICBJV2ViTm90aWZpY2F0aW9uQ2VudGVyUHRyIG1fZGVm
YXVsdE5vdGlmaWNhdGlvbkNlbnRlcjsKKyAgICBJV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXJQdHIg
bV9ub3RpZmljYXRpb25PYnNlcnZlcjsKKworICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciBtX3N0
YXRpc3RpY3M7CisgICAgSVdlYkNhY2hlUHRyIG1fd2ViQ2FjaGU7CisKKyAgICBIV05EIG1faE1h
aW5XbmQgeyBudWxscHRyIH07CisgICAgSFdORCBtX3ZpZXdXbmQgeyBudWxscHRyIH07CisKKyAg
ICBib29sIG1fdXNlTGF5ZXJlZFdlYlZpZXc7Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luLXdrbC9XaW5NYWluLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvV2lu
TWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjNmRkYzYyYjI2ZTQ3NzBmMzRkZmZkZDY1MTFkZjhkNzky
NDdlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvV2luTWFp
bi5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgs
IDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA5MSkKKworI2luY2x1ZGUgInN0ZGFm
eC5oIgorCisjaW5jbHVkZSAiQ29tbW9uLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2lu
Y2x1ZGUgIk1pbmlCcm93c2VyTGVnYWN5TGliUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJNaW5pQnJv
d3NlclJlcGxhY2UuaCIKKyNpbmNsdWRlICJXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgiCisj
aW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5oPgorI2luY2x1ZGUgPHd0Zi93aW4v
U29mdExpbmtpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
b3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKK1NPRlRfTElOS19MSUJSQVJZKHVzZXIzMik7CitT
T0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dCwg
Qk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRFWFQpKTsKKworaW50IFdJ
TkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5zdGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5D
RSBoUHJldkluc3RhbmNlLCBfSW5fIExQV1NUUiBscHN0ckNtZExpbmUsIF9Jbl8gaW50IG5DbWRT
aG93KQoreworI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCisgICAgX0NydFNldFJlcG9ydEZpbGUo
X0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKKyAgICBfQ3J0U2V0UmVwb3J0TW9kZShf
Q1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFKTsKKyNlbmRpZgorCisgICAgTVNHIG1zZyB7IH07
CisgICAgSEFDQ0VMIGhBY2NlbFRhYmxlOworCisgICAgSU5JVENPTU1PTkNPTlRST0xTRVggSW5p
dEN0cmxFeDsKKworICAgIEluaXRDdHJsRXguZHdTaXplID0gc2l6ZW9mKElOSVRDT01NT05DT05U
Uk9MU0VYKTsKKyAgICBJbml0Q3RybEV4LmR3SUNDICA9IDB4MDAwMDQwMDA7IC8vIElDQ19TVEFO
REFSRF9DTEFTU0VTOworICAgIEluaXRDb21tb25Db250cm9sc0V4KCZJbml0Q3RybEV4KTsKKwor
ICAgIGF1dG8gb3B0aW9ucyA9IHBhcnNlQ29tbWFuZExpbmUoKTsKKworICAgIGlmIChvcHRpb25z
LnVzZUZ1bGxEZXNrdG9wKQorICAgICAgICBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpOworCisg
ICAgLy8gSW5pdCBDT00KKyAgICBPbGVJbml0aWFsaXplKG51bGxwdHIpOworCisgICAgaWYgKFNl
dFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0UHRyKCkpCisgICAgICAgIFNldFByb2Nlc3NEcGlB
d2FyZW5lc3NDb250ZXh0UHRyKCkoRFBJX0FXQVJFTkVTU19DT05URVhUX1BFUl9NT05JVE9SX0FX
QVJFX1YyKTsKKyAgICBlbHNlCisgICAgICAgIDo6U2V0UHJvY2Vzc0RQSUF3YXJlKCk7CisKKyAg
ICBhdXRvIGZhY3RvcnkgPSBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpjcmVhdGU7CisgICAg
YXV0byYgbWFpbldpbmRvdyA9IE1haW5XaW5kb3c6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICBI
UkVTVUxUIGhyID0gbWFpbldpbmRvdy5pbml0KGZhY3RvcnksIGhJbnN0LCBvcHRpb25zLnVzZXNM
YXllcmVkV2ViVmlldyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsK
KworICAgIFNob3dXaW5kb3cobWFpbldpbmRvdy5od25kKCksIG5DbWRTaG93KTsKKworICAgIGhB
Y2NlbFRhYmxlID0gTG9hZEFjY2VsZXJhdG9ycyhoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElEQ19N
SU5JQlJPV1NFUkxFR0FDWSkpOworCisgICAgaWYgKG9wdGlvbnMucmVxdWVzdGVkVVJMLmxlbmd0
aCgpKQorICAgICAgICBtYWluV2luZG93LmxvYWRVUkwob3B0aW9ucy5yZXF1ZXN0ZWRVUkwuR2V0
QlNUUigpKTsKKyAgICBlbHNlCisgICAgICAgIG1haW5XaW5kb3cuYnJvd3NlcldpbmRvdygpLT5s
b2FkVVJMKF9ic3RyX3QoZGVmYXVsdFVSTCkuR2V0QlNUUigpKTsKKworI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUwOSkKKworICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgorICAgIF9fdHJ5IHsK
KyAgICAgICAgSVdlYktpdE1lc3NhZ2VMb29wUHRyIG1lc3NhZ2VMb29wOworCisgICAgICAgIGhy
ID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViS2l0TWVzc2FnZUxvb3AsIDAsIElJRF9J
V2ViS2l0TWVzc2FnZUxvb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbWVzc2FnZUxvb3Au
R2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAg
ICBnb3RvIGV4aXQ7CisKKyAgICAgICAgbWVzc2FnZUxvb3AtPnJ1bihoQWNjZWxUYWJsZSk7Cisg
ICAgfSBfX2V4Y2VwdChjcmVhdGVDcmFzaFJlcG9ydChHZXRFeGNlcHRpb25JbmZvcm1hdGlvbigp
KSwgRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB9CisKK2V4aXQ6CisgICAgc2h1dERvd25X
ZWJLaXQoKTsKKyNpZmRlZiBfQ1JUREJHX01BUF9BTExPQworICAgIF9DcnREdW1wTWVtb3J5TGVh
a3MoKTsKKyNlbmRpZgorCisgICAgLy8gU2h1dCBkb3duIENPTS4KKyAgICBPbGVVbmluaXRpYWxp
emUoKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1zZy53UGFyYW0pOworfQorCitl
eHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5jaGVyRW50
cnlQb2ludChISU5TVEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBX
U1RSIGxwc3RyQ21kTGluZSwgaW50IG5DbWRTaG93KQoreworICAgIHJldHVybiB3V2luTWFpbiho
SW5zdGFuY2UsIGhQcmV2SW5zdGFuY2UsIGxwc3RyQ21kTGluZSwgbkNtZFNob3cpOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luLXdrbC9yZXNvdXJjZS5oIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luLXdrbC9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OGZhYzdlYThkYzE5YjMy
ZjQ5Y2Q2NGQ5MTc0ZmIwMGY2MGY5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci93aW4td2tsL3Jlc291cmNlLmgKQEAgLTAsMCArMSwyOCBAQAorLy97e05PX0RFUEVOREVO
Q0lFU319CisvLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgor
Ly8gVXNlZCBieSBXaW5MYXVuY2hlci5yYworLy8KKyNkZWZpbmUgSURDX01ZSUNPTiAgICAgICAg
ICAgICAgICAgICAgICAyCisjZGVmaW5lIElERF9XSU5MQVVOQ0hFUl9ESUFMT0cgICAgICAgICAg
MTAyCisjZGVmaW5lIElEU19BUFBfVElUTEUgICAgICAgICAgICAgICAgICAgMTAzCisjZGVmaW5l
IElERF9BQk9VVEJPWCAgICAgICAgICAgICAgICAgICAgMTAzCisjZGVmaW5lIElETV9BQk9VVCAg
ICAgICAgICAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIElETV9FWElUICAgICAgICAgICAgICAg
ICAgICAgICAgMTA1CisjZGVmaW5lIElETV9QUklOVCAgICAgICAgICAgICAgICAgICAgICAgMTA2
CisjZGVmaW5lIElESV9XSU5MQVVOQ0hFUiAgICAgICAgICAgICAgICAgMTA3CisjZGVmaW5lIElE
SV9TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgMTA4CisjZGVmaW5lIElEQ19XSU5MQVVOQ0hF
UiAgICAgICAgICAgICAgICAgMTA5CisjZGVmaW5lIElEUl9NQUlORlJBTUUgICAgICAgICAgICAg
ICAgICAgMTI4CisjZGVmaW5lIElEQ19TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgLTEKKwor
Ly8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKKy8vIAorI2lmZGVmIEFQU1RV
RElPX0lOVk9LRUQKKyNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworI2RlZmluZSBf
QVBTX05PX01GQyAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgX0FQU19ORVhUX1JFU09V
UkNFX1ZBTFVFICAgICAgICAxMjkKKyNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAg
ICAgICAzMjc3MQorI2RlZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDAK
KyNkZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMTAKKyNlbmRpZgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL3NtYWxsLmljbyBiL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi13a2wvc21hbGwuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NTFhYTNhYWY4
MGFkZjliNzc2MGUyZWI4ZGU5NWE1YzNlNTNkZjYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDIz
NTU4CnpjbWVJNDMwemd4K1F1SkhLdHhiZTVnYnUqMDMwQjUkVnlHY0RHU0ZPYWxrWSYyTHV2QzVw
cCg3JjJYTmw5Nj1Aegp6TlhHSDJgfERPI254KTNud1VxNDNBPl9OPSt3SHNZZSRVIzZlUG1TaEQm
cF5CPjJ1eVN5bGJzQHVZSVB5Ji13I2MKenBjLTZVWUMpeCtFckRnVXdROEJsWjdoSVVSUkIqPFhu
dXpyZlE/bF98Tkw/X3BuRHpWWnpAbC0wKUE/IWBANyYhCnpPVz43ZXg8QVlHYCR1MmgtdiFlKyoz
T1lZOF92bGcoVVk8T0VBTl5qMHNjcDFxeztBK1N0PTV6UG9ITGtYI1hMaQp6YXVvbG1EbjEtM2xH
dDEqZyVuTiFwKF9mZGZZMW56Vm90d1RtTHRySSEzQGA8KEU1Y0lVJXgoaj5aI1R9QVhHMioKej1e
d2VHVEk1fklucSNyPzNRWlJoNT5Wdnk3QXFEeSpeaTsxcDZCWTc8d0JMbV5QSk9ZRFN3PjtMUVNY
Wns7Zz5NCno/Zm01QTxtbCV+S09YYDVkQyhWSnBaN3RuU3xgNWNVP1FkN3BHciR9cm13Pk0hMXVK
fjE0Q1A1LTttYldKR2VGMAp6X2l1ck4hKDZHQkk1NHlvNGgoQ0J7an5lKDZFbSRoaipWPUZxcHZv
ezUkZSMwN0wrVTJgd3ZGa244czhTI0Vmbz0KejxEKjs8TyhsPGEjdEdqQlI2YF87Wkc/bnpqZDV5
e0JUXjxoO1V0d2ohNU0jZnkldHApcihkZyEpWERZbTwmNWUkCnpeTSpZPl58IX1ve3RvekxUMXxa
N1VsYVNNeFooNUZnS15SaWxtKEtodnx2a283aTVYfTM2P2xJKSlHZ2tsYXM2OQp6VnhTZSQ9MzMr
MTBCZkFediUpdVhZO2I7ZEhHQ2FWNGU2b1BhZHd0MVBFRTdMI1NqTzRHYGtLeTMza0cjXlAxeUsK
emN4KEpeUmE8PHpzM1UmYT04Y1BNZGdBOCg1JX5TbzB7a29XRW5FeCYmZCZpcG9YUXZgZ0UzSUZY
fkIlO08kJUo0Cnp7V2oxN0E1Rkt3c1ZOcnBWVnFSN3VMV2JII3drQmIjPlRpKz85NS1KSnZHSVdL
MEpuVHM7dnNeRGNYeSk9akskdwp6PWxtZX5lMENNflNNNjFpN0UrWnk2IVZ2OCg/WUNwWHw1SCUz
JGJTMjF7ZGJxOzhJOTZUbmU+QzhqbS05byptTXwKej8ycn4jMUsmflVeQndUQHlnSytJIzFVREc4
c0lPJSZpRSp9QStFMSRqYkdOYSFTKGZSYXM5b3Z4YmE+KVRCWXs1Cnp4eG9gUnE5fG9JRHRZMD9y
akUjMXQhIXU5K31zNT53fDIjaSZENTV6JXkrfWg/SnJRPmFmOX5PNHpBXm45PU5yJAp6N2pFdDln
UFhnJkAkMjNKeFY0OSh5fFF+NGVtT2lJLSlIXzZkSD1xS29CWWhscTVlKyZQV19BZWdaZnxVLV8p
Tn0KejlAUkpDM01TN3ZwP3lYTDFxQzQ+QU9RYVV7K0tqcjUrK1daaHpTIVd6fU1Gb1c1PHJnPStV
RHdZU2dJR1VLMFBXCno+V3hvJkkrMSFHJHpaSG4jJDtgITk4LTw8YzZMP2xSNFBscThtVUl4Z0dZ
fVpKd19jcGJvbFZHeVFMI1g0Xn5lIwp6UiNXYU88KHM/cElBKVYtZUNuPGFNSCp8VDhmISUjSX5M
NzxXbDJZQ3JXemZocXMhKjMyNlJkX0k+eWpISXl5I34KemQhXnw1c202TFNGKV8hSyU4O1Yjcld6
WlUoTl8lQCg8cyYwO0NSZ09HN1BQYCM1N0RiST4jUTVFd2d7S1JISTk1CnpZPz1MSW8yRDlAI0t5
KnpiXk8+U21IdX5JRTQ0bD88STI0THYyaVVeampvQV9XbktUY0lNLUJUXlRmbyZXNUBYYQp6b3s1
ZXY5PSpUMjNhM25vQHB6O2YraTNCWnIyYCReUDhuTzUhUVpxWGJabmhzWV5ENTU/byV8PCNLY3l+
I3ZVZDYKem1LMCFPVnZsNndeSlZwP1UqWmVOIyVHbCtZa0RyKCp5YThFTkgzbD1jSjRVIzhRKUdi
WFptJjs9UjREUD1GQ3B4CnpDe3IzWVpkQG0mbmQzVXFjQUR+OXg1WGJBQztOO1YtQz1QMUZgbiVg
K1ljRyk+RGdoLTtLODF6KVdMSmA7NHdxbgp6X1pyWiVMbXpMP3d5M2tEX2xMJWpaQGxgbipZSUpK
PThvPz1LVm1eZGM9dEs4WFROU3JVSzF4d29mYjUhfDRXUEoKejQ7Jk89NXVlY1N0dDhgJiRvJlUp
QDdsWD4qWEVzai1nfGZCal91cEZacnglXm5ednF7e3IwTTVPUDgtJWBPZG5pCno0ZWsxX3BVd35X
UzMoeGYzd35La0JtRGRWUlNMfmRmcjApYk9mN3NJQG4lQD9sbTE9YzBwZDRaJlQwMkhtQFJIMgp6
KXdlOzV7STcoUyowZDAldHdSO3dMc0F8IyNuLVg0YnVONzBzYFRzQmdATWJweGtuSDYhUVBqZlYt
S35QK1ZBNnYKel9sTEU/eyRYd2k/ZUI/JmdFfUlscEM+fD81QTwlMiY7ZWRwSWwzM2Q0SWhrQT83
UWNzI0BOZG5ZV3NiZih7ZGFvCnpqdUFTKjY5TSFlR3QzN0cpNEN5WCMqMnViLVY+aWoxPnZ1byFt
enMreilLZ0xAYjd7ekhxT0U0OHYtJCF6SjMjWQp6djZ1SmJjNiRUNmRRKktVPTY1cHghS19ZNW4k
YTJDcipfOXpuYFlzJk8rZ3F0K3l7cFQwcStsPjFfSndPS004N3cKemp8MUR8elhDandJQD00RXdv
a3xEUlRGU3crWiNCKWJxM0NEblRhdiVtb2wzM3lhY1FxO0Q5cUI/KVlxT1RWKDg8CnpoT3swMklP
YDgydT5Ic3xVWXBLJCNrc0luXyVmOCZ2M3NXPVl0S31pcDl5XloxfnIzSGBCfkkjOzJpRFE9QGpl
RQp6c1A7S2xfJV4lfEU9OVFGYCheSVBUSXI2VEgqYFNgdWk1Xnd3K305P2RKZnJ9ZGc4e09BOz54
RWhpaXU/PEh2bnwKenhKO2VwYyZXVDVLMG43Mj1MNChvbiRycnw1IVUjNXVecH1+dmdoQHRKK0Qw
fSs2IVMwSVFPUEtHOXYzQkdxTnRfCnpofElUPz5MWVV6d2IrVCk4Q2k9UEFadGtqV0t2bTY4WHt8
SEJpdmxtM3xZJlg7XnNQNitHaEI1ZUprOTJ3PjVJMgp6KyRqKEl4fWhDMTgyN0Q+OWRLKD8yanAo
KWhAOHpHQCFRVCQkbDJOJXgzK2V8P1FKfEpPPGo/KntXJWByMyVJP2oKejJmbHJXKlJLYSgjZzgh
b0lKQUUhI2B9KU5tR2VpQ14+cmU/SjhQaG5KJU5pfkNMcnpXQiY0NHxpUyV6eUI4QGlmCnpuYERh
UjNtQHxPXjwhbEk/Sk45flp6YG8tdiRtaTlyKl4lbj96O3ZEMlchYDwrTE9IVXExWHpmSm89UCR4
MEk0bgp6KD9NTVopK215az80NTBHdEc3eEBkQ0pEUjR3SXUqKWhZIzNKdTlwRikjfXp0TkAtLSFR
ZnkzfERSYnZCIVFmUnAKekRXJFEmcHVXYml5NkNxVmdQfCRnOHllIXtgUTVqSzZtTXVeblV2RHBr
UHYlM3R8WDUqZ0Rjekg4eHJHNjl3RS1xCnpxR2VKX0o0NTJ9PEh0KUZKfnF6YSRAWHByTHk0YHR6
QV5NKmA/R2d4QDZQdEZjV0hsdD9Pbjk/NStnNz8qQn5qeQp6K2hFfUZtMj9GMGhKSFBoUXU/cXpU
Wj1FaWFmNntSK2d+b19fPlF5UGh3WCNkenJnSUtZK09RSUJITGVpSXd8RVAKeiZWVDAranZMfiYp
cmRSSmV9LXZuQUlKNipRLVo8cElAXjhrb2JZMH5zY2F0YGVlfT93ZzlxT34kYUx0KUElMDZlCnpi
YT5ESDFOLSp3LWdSdjImWkx3OTliM0QzeE89I3t4dypUIXdRK096QGJHQmNkMD98biYkI3NOXzJT
OC1sPEFgZgp6NDtsWElATF9Ndm1AI0pmQEtIbURrTVFxNWRDSkp3Q1VyT2d8S3l+VUgmPGBseWxH
PDh4LUR6byp8XzFvXntiWXoKelQoUzc9YnhZVTJKSz1mMW5MR0lFM0xke0tHQ1hZRmZfYjN9Qmk+
ckZYI1JxRWF7fmlJZzYwSXdwMClrYXp4ZUpvCnpnWCNOJj5HM2soOVpwa2BrNDY/OHlHcF9OUjk8
fmd4JTBiMj5FQmM2aDZOKnM7KmEwezJXeTZPIzdaQThxKHU1NQp6WG1BZyM5YFpDK1FCazl4I25T
UXBhNENLcFIhc0NwIz5zdG5YUjxmbV9WWSY4JHpBeEBaQEVhQS0zMSRfX1FkK3YKemAoVypxS0Rj
c2ZKMSYyKTEyO2Uzal9sTn1JT1MpRFE8SWZ5O0tTR0tZMypxcHM5Tnx1JE9XSDx3IXY0K3lKSzZ9
Cno3K2Y9TSNfdF5TKWF3cW9vVld4clFLN2lIKzcmO29aSDUwez1aPFNASkBDYEopWWBWVnd5cXQx
UWQte3UqVmNSRAp6JURjfVhKRX03LVp5a1dfJXlZUHdAZm9odHsqJlh+TmRGTDUoIVc0PCk7WlJs
VyZSQVpGSkhue21oPEZLLWtaKGkKeko9KGt5QDdIb2s1ZnY0TUJ9PGtkQXxlNns3Y05BMmMoX2A9
JTJjQG1Qd1dafEV9Qzk/YDR3flc4UlRQU1loelEqCnojKzBnN3ZHJWRFdGxnP3haQnckV1VFUmxp
VkVfTDhAPkJsLSlxUUZXXmZzcnl5PShaP0ZJMkFTPDU7bFYkSEIqVwp6cG0kJCRoaEZ1M1RIYX56
K3FZTDtBRSR1PjJRWmwpMkc7UnUpM2ZedlVBbnkzck9VSERwNn5qY3Q1MGl9Q1hFfDYKelpQSzcm
cXZwKz92VCpiMSteTTV5YHdtWmdkQVBUMGAlSF54aVhMNkR2V091KjYweHg7dTZWI1EyezByOGFk
Q3koCnpFbjtJdVYmZzxDbGhwZ3tvIT4yOHA0akk+VyNDVzUzT0YmIUNzQXJ+Um90dG9nSE0+JnNA
Uz5ES3F8N2h8M1NEOQp6cUY5WGlZd2ZnbU5VSlJGaFklKDFvNnhMWSlAPztRS0pNTSU5WnYxfTs+
MH4yIXIjfTB6cDB6V2B4Tkg5VWVEaigKemd9PVhSUXRqbX17X2R+RXErO2JCNm0kSUNtcl5MIWxI
JF5qcGBeQ1FRT0VyPj1KPmZecnJnKV5LUnNzZF5EKVFJCnplTHVvfDgwS1RwXlNiPns9WCUpdilw
TFJTbUNXJlR8QkBFSmlucFQxVHl6YiVtJnpQSl9nNHdgej9oRmdgUmQxXwp6PldqNyY5am07e0Rt
THkxR3NuKzhWcEAhUHRTVE5vdVdXaDhjZHorV3tNXzRTai1Qd2pEcztSPms0TFIzX3VpU34Kej1Z
Qmxse3dlSmtscjhGQyhhSWAqP2pKUEEmcG4wMHk8Z2ZmQ3xsOXVFZ0Z4Q3BaZ3JtQHBJcCE3UWMl
OU5yKyM/Cnokby1uO19fPUA2OTYkSHBScnZLK0B2RTVpPz8wOUNtK3Z7TlQ+dFcyQDFwTk5tRnIp
eil9TVJhTVpJc1ReUCpKcgp6ZHt2fmZpY2lJPVYlRmIzeGxmLXByY319Mnw1YmNTRHJQLT9AJkBf
UW5+YzhScy0pKkRmLU0qJWBIMEgrJWxaNzIKenZpe0VHUU9yI2g7ZHhTODRDV3gyQXdNSkJue2Ik
fmZ5VSUmM059QCE9WH05cURIdFI8QW1SM2xWfm9FVSpgUl89CnprM0RgQmoyP0g8eWRKMkV4bjh8
YEZecz1DYDZqKHV2I017d3E+dUc1dFVtNjhqLX5ma0cxc3FPVXlHbVlsd1BnYgp6Mk9ZYVNgc3Nu
SG5Eekx7ZiQ3eTFIdlUyWnZPc1JsOTZ5PTFxUmtiKU8jVilmelp1eSlBPjtLI2lKWUsle1lJPHoK
elB4NklBLWNaUSYzN0pENyg8a0goWD81azckSV99Y3R6TmhFUU5DSlJ6UTAhMT54KWA3bWFoRE0x
PFB0fHQqck9FCno8NGN5MUY8SmB3TTxMJiotYW41cGVyS3xWTFZpKW1Da3B2UUF4bFhNU19vTjFB
eTtZMm8ye3krU1Q/b01zKHp8Wgp6ZnFLMllwakJnUWVSTituelJHaGhhK2dCQlFwak95Rl82QyRA
fFQpRlN4K0lLRCYkSXFUJXdUQVJHKGptN3szJFEKek4rQXlePFNkMmtyO3FeXnZYYF9oenNZPXY0
YT5CMXQlY205a2FaTllrRDRYX0RDOXFkKyQ4LT5CNVRRaEJ9PEo+CnpQTHBGUChUNV55JCRWOElB
MWRUUmg1ViM4ND4/Z0dCZyhPPTNifFMjbW5oXkNnKUZJJXZzQjtUSG1kbF5hU0dXPgp6QUAzO1U5
ZmNnRWtjU2o8a1V8YnAlYWZmSGEqeyRtUXBpP1A5ZmUkX2tlP0tDbHRQfFQkV2BWYDx4M1ZoT2Qt
YzkKejxUWnUtQ2lDczZfQ20lfSRhKUduUGEpNEs8VUVDSkM7aHlIOUgpQHU2dGNFTDdGTmkyM0s+
KXRLWCl5fENNeUo5CnpXTUdBaXNnTlpWR053WklSTEk3YkVTP3VLdUEwY0lOLT4zMDZTQXRNRTU4
cH1TZFBLNU59SCEoeT9RUSRTUFIpIwp6RXc9Y0g7OXA4bXlWRU9FPHFBfTt6Pn5aSnJZfTNpSWc/
MHJQJiVMVEJwPX04aEBJPEorUFc2NFNOcFZGc0dnTEMKem1TZChlbTlfJSpZXmR7cWRlSHF6NHhD
VEQ2NGN6fHNtMFZ2WVE9ciU5czJJMj9zdCNUNCkhNkQxamh+aVQldU5YCnpjbThFKkheLWRDJihf
VVorX2l2SXghWE47bj9DbT98RUM/WlpMMz1EPE5SJk9ka09oNEF0eHJ9ejZ5ISNteWpWNwp6dlNk
UTA/N0BeamhCZ2w4QWN3fWVub0RCYFlYaiVeQjFjeTBiKCM4Mm5TN0E7OCpIZ2dfdEJ2NCkyYyt5
T2pee20KejskQk8lQmcxQkA8ZkRFY1JKWjFhNjU0ZDFgPzMwWDxtSUdjYiZFdks/P0lNTXQ1Jn07
PiVUWHY8OS14VTxFdW53CnpQbj5PYCV9LXVXdDVhKkU9Mlo2XilOaXAkND82fW1yYj1XM3I5cE1t
e04oPyVJPD0wZntaWCFpSzBvPEh1REB4MQp6R0tsOCszKkt2YSp2R0VNKTh7QWFYcjctdXFjKj5L
UTFkXkVkRyNeJWBOPk80THAjJilsY19CQ2BOP2NiQmgmb3UKejxUfWZKZXNaSklzME8mdDhaOTJ6
ezU3cWktNnRnNVRIXjhSJnFlKipKdUlzeEJSP3koXjUtV2JZbzFAdHB9K25nCnojcF9VaXt+P2Ju
d1FOa3NQZnBpN3puWig/eXoyUy11I1FgZXR0VD9VPUswQTBZdGAhZ01fK1NnQUopQTNuaWlhJgp6
eXM+JEhhPiNtRTQ+WjNYYkoyTCErTnQrK1clWG16Q25FREt3ZSMxWEVWTiMmOWtYN3oqQmE+YUR0
fnAoTzdkNTgKenROTWJMTUlqNHFvfVYxR3M/dCk/VnxiV2x7aio8OUw+fThiS04pVio8bUxFQ0Nm
cXpmUyNsdTxFbzdwRmpJPHs1CnooeFFvRmIzVlVMXklfaVh0OTxmaFlEKlMhKmgyblYkWF8jbWY9
VSRmKitOZDZfbWUqc0dUaD09X2JLaURoZktWWAp6dy0rK3tMT3glfTxfajVwbFR+RzFzeENpSW1m
eEg9YD5IeU1UKSZYbjdqcEtwcWJHejZ6bVZrQHsoUyU7bW9NYj0KemdgQj1QSXkkUVBVQ0Z9Pnhx
MmFnRlhab3ErYFcqdypETmBGQXVCSXI8dSNHTEhgVE05SmlhRktgbGg8c0VHemojCnokbG5YdWRt
KjxrPG5WPUR6Vkw0aDJ6aGVoLSR+SD9ubF4yRWZiJSF+YXUjeVEhVjgmcEE+JUcmLUQhSVdgRjl9
YAp6RkojX0BqSiVNUW16LUB+c1YraTNVZFlMN0IxPHBpPnhGRStrZypyQ19zbn19ZWFZVm8qP0oq
WUZaPiQ7IW9PSnsKentRQ2dCLSkxRkY0aT9pbXprUFp6ezRSdnJ7aDdJPnNnVXV7JUxzU0slYjBK
VW1sMC0xUm5OOzxQPW5Tc0ZKb1R5Cnp5dnpqLWQ2e2dfNDZtNyY4QnIlTUJjZWBqIz09Xjs+R1NQ
ISgtK2pwTyVKb3BPYEIoKGRucEstKCZ5UmFVSjZGOwp6Y2huRV9rJFd2MWY0e29HOypUJDhWeDV8
c3MhV2YwMUB5T18kbnVOQkxaNEd2YilWdTZ4OWY3UkQzdDN7UlBGbmEKekB+PSoqeldmVXM4a1lQ
UFpDU0w0ZSlCMXhUfFRYblNNK1U+eXx7Tz84JW00dnR6SXJfQlZLZzV2Q1B9YCozZFJ9CnomYSF7
TiNuPiU+a1UxOHohJFFfcSRtZVEjUlczPW9aPWtuRm1nPTgmViZgcU9VZ35wMU4mbFd3bnBIbVBi
OVlXMwp6dyt6KWs8SFEhTmVfMjElKU1xQzdVPHZOcVRJPklQKHh3T01BSlg1e3xBKnZfX3VaZHR2
Vjt3MnJPa2dlQ0NjMWkKeiNhNVElQW1jM0lnSWEzK2ZCSW0oeCZPV1RzX35VbnxIeE5Oe2NvSCQj
bXtQT1VEZXZeRHk+ZXtGTWhlMVk1aWl1CnpaPEQ8aWFAYXkxVGdZbF9COHo8fCZwSTtOKUU3ZElU
Z1kkQSttcE1ldE1pdksrMihoJDwzZiZIJGRsKkdLYFdDcgp6ciZYI1U8alJHN3hzWHA2YV8rSjxZ
fit7aEtsSWB9YF9vc354WmxvUisybmZtQGBsJjF1NWlBN2J5PFYhUzY0UV4KemVwUXYxKjFpN1lx
VDFLOW1wTmEqdyVxQ1o0PVlANm9RZCVJKWl+MkdmYzxUJCRDQEoxamxYU357c1BxZlNhbDltCkZg
YWpRY0M9bWJ2CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci93aW4td2tsL3N0ZGFmeC5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL3N0
ZGFmeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M0ZTVlNTJhMTZhMzAwZTM2ZjRmOWQ4YzVjNDkwNjM0ZWQw
MjI1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi13a2wvc3RkYWZ4
LmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisvLyBzdGRhZnguY3BwIDogc291cmNlIGZpbGUgdGhhdCBpbmNsdWRlcyBq
dXN0IHRoZSBzdGFuZGFyZCBpbmNsdWRlcworLy8gU3Bpbm5lcmV0LnBjaCB3aWxsIGJlIHRoZSBw
cmUtY29tcGlsZWQgaGVhZGVyCisvLyBzdGRhZngub2JqIHdpbGwgY29udGFpbiB0aGUgcHJlLWNv
bXBpbGVkIHR5cGUgaW5mb3JtYXRpb24KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorCisvLyBUT0RP
OiByZWZlcmVuY2UgYW55IGFkZGl0aW9uYWwgaGVhZGVycyB5b3UgbmVlZCBpbiBTVERBRlguSAor
Ly8gYW5kIG5vdCBpbiB0aGlzIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi13a2wvc3RkYWZ4LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL3N0ZGFmeC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY0MTQxMzU3ZTFhODFiNTliMThmNTNlZmU0MmVlYTJhOTNhN2ZiNDEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4td2tsL3N0ZGFmeC5oCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKy8v
IHN0ZGFmeC5oIDogaW5jbHVkZSBmaWxlIGZvciBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBmaWxl
cywKKy8vIG9yIHByb2plY3Qgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGZy
ZXF1ZW50bHksIGJ1dAorLy8gYXJlIGNoYW5nZWQgaW5mcmVxdWVudGx5CisvLworCisjcHJhZ21h
IG9uY2UKKworI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkgJiYgSEFWRV9DT05GSUdfSCAmJiBk
ZWZpbmVkKEJVSUxESU5HX1dJVEhfQ01BS0UpCisjaW5jbHVkZSAiY21ha2Vjb25maWcuaCIKKyNl
bmRpZgorCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gLy8gRXhjbHVkZSByYXJlbHktdXNl
ZCBzdHVmZiBmcm9tIFdpbmRvd3MgaGVhZGVycworCisvLyBOZWVkZWQgZm9yIGxpbWl0IGRlZmlu
ZXMsIGxpa2UgSU5UTUFYX01BWCwgd2hpY2ggaXMgdXNlZCBieSB0aGUgc3RkIEMrKyBsaWJyYXJ5
CisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UworI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjb21kZWYuaD4KKyNp
bmNsdWRlIDxjb21pcC5oPgorI2luY2x1ZGUgPGNvbW1jdHJsLmg+CisjaW5jbHVkZSA8Y29tbWRs
Zy5oPgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRl
IDxtZW1vcnkuaD4KKyNpbmNsdWRlIDxvYmpiYXNlLmg+CisjaW5jbHVkZSA8c2hlbGxhcGkuaD4K
KyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHRjaGFyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUg
PHdpbmluZXQuaD4KKyNpbmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiAwCisvLyBWaXN1YWwgU3R1ZGlvIExlYWsgRGV0ZWN0aW9uCisv
LyA8aHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tVVMvbGlicmFyeS9lNWV3YjFoMy5hc3B4
PgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX0RFQlVHKQorI2RlZmluZSBfQ1JU
REJHX01BUF9BTExPQworI2luY2x1ZGUgPGNydGRiZy5oPgorI2VuZGlmCisjZW5kaWYKKworI2Rl
ZmluZSBXRUJDT1JFX0VYUE9SVCBXVEZfSU1QT1JUCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZDI1ZjlmN2I0OTdhNmM5ZGVkM2IyNDI3ZWQ5N2FjZTgzY2ZiMzNmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9B
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAic3RkYWZ4LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgiCi0KLSNp
bmNsdWRlICJXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgiCi0jaW5jbHVkZSA8V2ViS2l0TGVn
YWN5L1dlYktpdENPTUFQSS5oPgotI2luY2x1ZGUgPGNvbW1jdHJsLmg+Ci0jaW5jbHVkZSA8Y29t
bWRsZy5oPgotI2luY2x1ZGUgPG9iamJhc2UuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0jaW5j
bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3aW5pbmV0Lmg+Ci0KLUhSRVNVTFQgQWNjZXNzaWJp
bGl0eURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0
cl8gdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBpZiAoSXNFcXVh
bElJRChyaWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SUFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxJ
SUQocmlpZCwgSUlEX0lBY2Nlc3NpYmlsaXR5RGVsZWdhdGUpKQotICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Ci0KLSAgICBBZGRSZWYoKTsKLSAgICByZXR1
cm4gU19PSzsKLX0KLQotVUxPTkcgQWNjZXNzaWJpbGl0eURlbGVnYXRlOjpBZGRSZWYoKQotewot
ICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0KLVVMT05HIEFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZTo6UmVsZWFzZSgpCi17Ci0gICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwotICAgIGlm
ICghbmV3UmVmKQotICAgICAgICBkZWxldGUgdGhpczsKLSAgICByZXR1cm4gbmV3UmVmOwotfQot
Ci1IUkVTVUxUIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZTo6ZmlyZUZyYW1lTG9hZFN0YXJ0ZWRFdmVu
dHMoKQotewotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIEFjY2Vzc2liaWxpdHlEZWxl
Z2F0ZTo6ZmlyZUZyYW1lTG9hZEZpbmlzaGVkRXZlbnRzKCkKLXsKLSAgICByZXR1cm4gU19PSzsK
LX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdh
dGUuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdlZDY5M2ZlNzg3MjA0NmVmNzM3Y2M5Nzk1Mzdi
MWZmYzMxNTY0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWNjZXNzaWJpbGl0eURlbGVnYXRlX2gKLSNkZWZp
bmUgQWNjZXNzaWJpbGl0eURlbGVnYXRlX2gKLQotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJL
aXQuaD4KLQotY2xhc3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzsKLQotY2xhc3MgQWNjZXNz
aWJpbGl0eURlbGVnYXRlIDogcHVibGljIElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUgewotcHVibGlj
OgotICAgIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBj
bGllbnQpCi0gICAgICAgIDogbV9jbGllbnQoY2xpZW50KSB7IH0KLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NP
TV9PdXRwdHJfIHZvaWQqKiBwcHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBS
ZWxlYXNlKCk7Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZmlyZUZy
YW1lTG9hZFN0YXJ0ZWRFdmVudHMoKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgZmlyZUZyYW1lTG9hZEZpbmlzaGVkRXZlbnRzKCk7Ci1wcml2YXRlOgotICAgIFVMT05H
IG1fcmVmQ291bnQgeyAwIH07Ci0gICAgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgbV9jbGll
bnQ7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93
c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93c2VyV2luZG93LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzMmRkMmFhMjk4M2VmYWZhYWQzMmE2ZDFm
MDNkOTI4YTkzZGY0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3NlcldpbmRvdy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJzdGRhZnguaCIKLSNpbmNsdWRlICJCcm93c2VyV2luZG93
LmgiCi0KLSNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCi0KLXZvaWQgQnJvd3Nl
cldpbmRvdzo6c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQotewotICAgIF9ic3RyX3QgY3VzdG9t
VXNlckFnZW50OwotCi0gICAgc3dpdGNoIChtZW51SUQpIHsKLSAgICBjYXNlIElETV9VQV9ERUZB
VUxUOgotICAgICAgICAvLyBTZXQgdG8gbnVsbCB1c2VyIGFnZW50Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURNX1VBX1NBRkFSSToKLSAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3pp
bGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC82
MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTEuMS4yIFNhZmFyaS82MDUuMS4x
NSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX1NBRkFSSV9JT1NfSVBIT05FOgot
ICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhv
bmUgT1MgMTFfNF8xIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwg
bGlrZSBHZWNrbykgVmVyc2lvbi8xMS4wIE1vYmlsZS8xNUUxNDggU2FmYXJpLzYwNC4xIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfU0FGQVJJX0lPU19JUEFEOgotICAgICAgICBj
dXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGFkOyBDUFUgaVBob25lIE9TIDExXzRf
MSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28p
IFZlcnNpb24vMTEuMCBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMSI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURNX1VBX0lFXzExOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1v
emlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IFRyaWRlbnQvNy4wOyBydjox
MS4wKSBsaWtlIEdlY2tvIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfRURHRToK
LSAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4w
OyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJv
bWUvNTguMC4zMDI5LjExMCBTYWZhcmkvNTM3LjM2IEVkZ2UvMTYuMTYyOTkiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIElETV9VQV9DSFJPTUVfTUFDOgotICAgICAgICBjdXN0b21Vc2VyQWdl
bnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzEzXzYpIEFw
cGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS82Ny4wLjMzOTYuOTkg
U2FmYXJpLzUzNy4zNiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX0NIUk9NRV9X
SU46Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQg
MTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykg
Q2hyb21lLzY3LjAuMzM5Ni45OSBTYWZhcmkvNTM3LjM2IjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRE1fVUFfRklSRUZPWF9NQUM6Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96
aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuMTM7IHJ2OjYxLjApIEdlY2tv
LzIwMTAwMTAxIEZpcmVmb3gvNjEuMCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VB
X0ZJUkVGT1hfV0lOOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChX
aW5kb3dzIE5UIDEwLjA7IFdPVzY0OyBydjo2MS4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzYx
LjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9PVEhFUjoKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlQoMCk7IC8vIFdlIHNob3VsZCBuZXZlciBoaXQgdGhpcyBjYXNlCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRVc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50
KTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93c2VyV2luZG93Lmgg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3NlcldpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1NjRkZDZjMjliOTUwYTIxM2Q4M2EzOTdjZjVlZGMxOGFmMTcwZjI5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9Ccm93c2VyV2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0KLWNsYXNzIEJyb3dzZXJXaW5kb3dDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBwcm9ncmVzc0NoYW5nZWQoZG91YmxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByb2dy
ZXNzRmluaXNoZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFjdGl2ZVVSTENoYW5nZWQoc3Rk
Ojp3c3RyaW5nKSA9IDA7Ci19OwotCi1jbGFzcyBCcm93c2VyV2luZG93IDogcHVibGljIFJlZkNv
dW50ZWQ8QnJvd3NlcldpbmRvdz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkJyb3dzZXJXaW5k
b3coKSB7IH07Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgaW5pdCgpID0gMDsKLSAgICB2aXJ0dWFs
IEhXTkQgaHduZCgpID0gMDsKLQotICAgIHZpcnR1YWwgSFJFU1VMVCBsb2FkVVJMKGNvbnN0IEJT
VFImIHBhc3NlZFVSTCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoVUlOVCBtZW51SUQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcmludCgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbGF1bmNoSW5zcGVjdG9yKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuUHJveHlTZXR0
aW5ncygpID0gMDsKLQotICAgIHZpcnR1YWwgX2JzdHJfdCB1c2VyQWdlbnQoKSA9IDA7Ci0gICAg
dm9pZCBzZXRVc2VyQWdlbnQoVUlOVCBtZW51SUQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRVc2Vy
QWdlbnQoX2JzdHJfdCYgY3VzdG9tVUFTdHJpbmcpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBz
aG93TGF5ZXJUcmVlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhX
TkQgZGlhbG9nKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXRab29tKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB6b29tSW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHpvb21PdXQoKSA9
IDA7Ci19OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Jyb3dzZXJXaW5kb3dD
bGllbnQuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93c2VyV2luZG93Q2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzlkMGFmMzQwYjk4YzYxNjZjNjk4MjMwZmI5NjgxYjhhNDE3NjQ0MAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93c2VyV2luZG93Q2xpZW50LmgK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworY2xhc3MgQnJvd3NlcldpbmRvd0NsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHByb2dyZXNzQ2hhbmdlZChkb3VibGUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJvZ3Jlc3NGaW5pc2hlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWN0aXZlVVJMQ2hhbmdlZChzdGQ6OndzdHJpbmcpID0gMDsKK307CmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
Q01ha2VMaXN0cy50eHQKaW5kZXggNjMxOTA3YTUxNDMzZTBmMWRjMDVkOThhYjgwYWFjMGI0MGUz
MGViZi4uYTExZTJkMmNhYTJmODYxZWFmNGJkMDc2NGQ5Yzk2MzhjY2JiMmRhYSAxMDA2NDQKLS0t
IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dApAQCAtMSwzMSArMSwyMyBAQAogc2V0KE1pbmlCcm93
c2VyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAke1BBTF9GUkFNRVdPUktfSEVBREVSU19ESVJ9
CiAgICAgJHtXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlNfRElSfQotICAgICR7V2Vi
S2l0TGVnYWN5X0ZSQU1FV09SS19IRUFERVJTX0RJUn0KICAgICAke1dlYktpdF9GUkFNRVdPUktf
SEVBREVSU19ESVJ9CiAgICAgJHtXZWJLaXRfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSU19ESVJ9
CiApCiAKIHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCi0gICAgQWNjZXNzaWJpbGl0eURlbGVnYXRl
LmNwcAotICAgIEJyb3dzZXJXaW5kb3cuY3BwCiAgICAgQ29tbW9uLmNwcAogICAgIE1haW5XaW5k
b3cuY3BwCi0gICAgUHJpbnRXZWJVSURlbGVnYXRlLmNwcAotICAgIFJlc291cmNlTG9hZERlbGVn
YXRlLmNwcAotICAgIFdlYkRvd25sb2FkRGVsZWdhdGUuY3BwCiAgICAgTWluaUJyb3dzZXJMaWIu
cmMKLSAgICBNaW5pQnJvd3NlcldlYkhvc3QuY3BwCi0gICAgV2ViS2l0TGVnYWN5QnJvd3Nlcldp
bmRvdy5jcHAKKyAgICBXZWJLaXRCcm93c2VyV2luZG93LmNwcAogICAgIFdpbk1haW4uY3BwCiAg
ICAgc3RkYWZ4LmNwcAogKQogCiBzZXQoTWluaUJyb3dzZXJfTElCUkFSSUVTCiAgICAgRGJnSGVs
cAorICAgIFdlYktpdAogICAgIFdlYktpdDo6V1RGCi0gICAgV2ViS2l0TGVnYWN5Ci0gICAgV2Vi
S2l0TGVnYWN5R1VJRAogICAgIGNvbWN0bDMyCiAgICAgY29tc3VwcAogICAgIGNvbXN1cHB3CkBA
IC0zOCwxNCArMzAsNiBAQCBpZiAoVVNFX0NGKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFC
TEVfV0VCS0lUKQotICAgIGFkZF9kZWZpbml0aW9ucygtREVOQUJMRV9XRUJLSVQpCi0gICAgbGlz
dChBUFBFTkQgTWluaUJyb3dzZXJfU09VUkNFUwotICAgICAgICBXZWJLaXRCcm93c2VyV2luZG93
LmNwcAotICAgICkKLSAgICBsaXN0KEFQUEVORCBNaW5pQnJvd3Nlcl9MSUJSQVJJRVMgV2ViS2l0
KQotZW5kaWYgKCkKLQogc2V0KENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hB
UkVEX0xJTktFUl9GTEFHU30gJHtNU1ZDX1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCiBzZXQoQ01B
S0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvRU5UUlk6d1dp
bk1haW5DUlRTdGFydHVwIikKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Nv
bW1vbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcAppbmRleCBmOGVmNmMw
NmE4NjJjZjNmODI0ZTE1MzZlM2IzODMzNGNiZjcwM2JlLi4xNmNjNGE2ZWRkYjVmMDYxNTVkZjE0
ZjJiMDQ4MTQ4OTVmN2ZkZTcyIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcApAQCAtMjY3LDE2
ICsyNjcsOCBAQCBDb21tYW5kTGluZU9wdGlvbnMgcGFyc2VDb21tYW5kTGluZSgpCiAgICAgaW50
IGFyZ2MgPSAwOwogICAgIFdDSEFSKiogYXJndiA9IENvbW1hbmRMaW5lVG9Bcmd2VyhHZXRDb21t
YW5kTGluZVcoKSwgJmFyZ2MpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7
Ci0gICAgICAgIGlmICghd2NzaWNtcChhcmd2W2ldLCBMIi0tdHJhbnNwYXJlbnQiKSkKLSAgICAg
ICAgICAgIG9wdGlvbnMudXNlc0xheWVyZWRXZWJWaWV3ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBp
ZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLWRlc2t0b3AiKSkKKyAgICAgICAgaWYgKCF3Y3NpY21w
KGFyZ3ZbaV0sIEwiLS1kZXNrdG9wIikpCiAgICAgICAgICAgICBvcHRpb25zLnVzZUZ1bGxEZXNr
dG9wID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXdrMSIp
IHx8ICF3Y3NpY21wKGFyZ3ZbaV0sIEwiLS1sZWdhY3kiKSkKLSAgICAgICAgICAgIG9wdGlvbnMu
d2luZG93VHlwZSA9IEJyb3dzZXJXaW5kb3dUeXBlOjpXZWJLaXRMZWdhY3k7Ci0jaWYgRU5BQkxF
KFdFQktJVCkKLSAgICAgICAgZWxzZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXdrMiIpIHx8
ICF3Y3NpY21wKGFyZ3ZbaV0sIEwiLS13ZWJraXQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMud2lu
ZG93VHlwZSA9IEJyb3dzZXJXaW5kb3dUeXBlOjpXZWJLaXQ7Ci0jZW5kaWYKICAgICAgICAgZWxz
ZSBpZiAoIW9wdGlvbnMucmVxdWVzdGVkVVJMKQogICAgICAgICAgICAgb3B0aW9ucy5yZXF1ZXN0
ZWRVUkwgPSBhcmd2W2ldOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9Db21tb24uaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaAppbmRleCBmOTk5ZTEz
NTIyZDRlZDg0ZDFiOWZjY2JjNGYxOTk4MzEzZDQ5OGI0Li5jMmJmMjliZTVhM2U3YTY4YmFiNmE4
ODNjYjdjYTQ0NGY0Y2U1NmQzIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5oCkBAIC0yNSwyOSArMjUs
MTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJzdGRhZnguaCIKLSNpbmNsdWRlICJN
YWluV2luZG93LmgiCi0jaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgotCi1l
bnVtIGNsYXNzIEJyb3dzZXJXaW5kb3dUeXBlIHsKLSAgICBXZWJLaXQsCi0gICAgV2ViS2l0TGVn
YWN5Ci19OworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBzdHJ1Y3QgQ29tbWFuZExpbmVP
cHRpb25zIHsKLSAgICBib29sIHVzZXNMYXllcmVkV2ViVmlldyB7IH07CiAgICAgYm9vbCB1c2VG
dWxsRGVza3RvcCB7IH07Ci0gICAgQnJvd3NlcldpbmRvd1R5cGUgd2luZG93VHlwZTsKICAgICBf
YnN0cl90IHJlcXVlc3RlZFVSTDsKLQotICAgIENvbW1hbmRMaW5lT3B0aW9ucygpCi0jaWYgRU5B
QkxFKFdFQktJVCkKLSAgICAgICAgOiB3aW5kb3dUeXBlKEJyb3dzZXJXaW5kb3dUeXBlOjpXZWJL
aXQpCi0jZWxzZQotICAgICAgICA6IHdpbmRvd1R5cGUoQnJvd3NlcldpbmRvd1R5cGU6OldlYktp
dExlZ2FjeSkKLSNlbmRpZgotICAgIHsKLSAgICB9CiB9OwogCiBzdHJ1Y3QgQ3JlZGVudGlhbCB7
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAKaW5kZXggYjU2ZDE0ZDMzNmJiYTYzOTRh
NGNiNDhlNTFmZTk4ODZhNWNmZjY5Yy4uYTVhYmVlNjIwNTJkYTQxZmRhYjAzNmM4MmZkZGJlNmZm
MDI0OWMwMSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3Bw
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcApAQCAtMjgsMTIgKzI4
LDExIEBACiAKICNpbmNsdWRlICJDb21tb24uaCIKICNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJl
c291cmNlLmgiCi0jaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgotI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSAiV2ViS2l0QnJv
d3NlcldpbmRvdy5oIgogI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpZiBFTkFCTEUoV0VCS0lUKQot
I2luY2x1ZGUgIldlYktpdEJyb3dzZXJXaW5kb3cuaCIKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xMDAsNyArOTksNyBAQCBSZWY8TWFpbldpbmRvdz4gTWFpbldpbmRvdzo6Y3Jl
YXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNYWluV2luZG93KCkpOwogfQogCi1ib29s
IE1haW5XaW5kb3c6OmluaXQoQnJvd3NlcldpbmRvd0ZhY3RvcnkgZmFjdG9yeSwgSElOU1RBTkNF
IGhJbnN0YW5jZSwgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXcpCitib29sIE1haW5XaW5kb3c6Omlu
aXQoQnJvd3NlcldpbmRvd0ZhY3RvcnkgZmFjdG9yeSwgSElOU1RBTkNFIGhJbnN0YW5jZSkKIHsK
ICAgICByZWdpc3RlckNsYXNzKGhJbnN0YW5jZSk7CiAKQEAgLTExMiwxMCArMTExLDYgQEAgYm9v
bCBNYWluV2luZG93Ojppbml0KEJyb3dzZXJXaW5kb3dGYWN0b3J5IGZhY3RvcnksIEhJTlNUQU5D
RSBoSW5zdGFuY2UsIGJvb2wgdXMKICAgICBpZiAoIW1faE1haW5XbmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotI2lmICFFTkFCTEUoV0VCS0lUKQotICAgIEVuYWJsZU1lbnVJdGVtKEdldE1l
bnUobV9oTWFpblduZCksIElETV9ORVdfV0VCS0lUX1dJTkRPVywgTUZfR1JBWUVEKTsKLSNlbmRp
ZgotCiAgICAgbV9oQmFja0J1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPCIs
IFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19URVhULCAwLCAwLCAwLCAwLCBtX2hNYWluV25k
LCByZWludGVycHJldF9jYXN0PEhNRU5VPihJRE1fSElTVE9SWV9CQUNLV0FSRCksIGhJbnN0YW5j
ZSwgMCk7CiAgICAgbV9oRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIs
IEwiPiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIG1faE1h
aW5XbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8SE1FTlU+KElETV9ISVNUT1JZX0ZPUldBUkQpLCBoSW5z
dGFuY2UsIDApOwogICAgIG1faFJlbG9hZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRP
TiIsIEwi4oa6IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwg
bV9oTWFpblduZCwgcmVpbnRlcnByZXRfY2FzdDxITUVOVT4oSURNX1JFTE9BRCksIGhJbnN0YW5j
ZSwgMCk7CkBAIC0xMjUsNyArMTIwLDcgQEAgYm9vbCBNYWluV2luZG93Ojppbml0KEJyb3dzZXJX
aW5kb3dGYWN0b3J5IGZhY3RvcnksIEhJTlNUQU5DRSBoSW5zdGFuY2UsIGJvb2wgdXMKICAgICBE
ZWZFZGl0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0ciht
X2hVUkxCYXJXbmQsIEdXTFBfV05EUFJPQykpOwogICAgIFNldFdpbmRvd0xvbmdQdHIobV9oVVJM
QmFyV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9j
KSk7CiAKLSAgICBtX2Jyb3dzZXJXaW5kb3cgPSBmYWN0b3J5KCp0aGlzLCBtX2hNYWluV25kLCB1
c2VzTGF5ZXJlZFdlYlZpZXcpOworICAgIG1fYnJvd3NlcldpbmRvdyA9IGZhY3RvcnkoKnRoaXMs
IG1faE1haW5XbmQpOwogICAgIGlmICghbV9icm93c2VyV2luZG93KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgSFJFU1VMVCBociA9IG1fYnJvd3NlcldpbmRvdy0+aW5pdCgpOwpAQCAtMTU0
LDcgKzE0OSw3IEBAIHZvaWQgTWFpbldpbmRvdzo6cmVzaXplU3ViVmlld3MoKQogICAgIE1vdmVX
aW5kb3cobV9oVVJMQmFyV25kLCB3aWR0aCAqIDMsIDAsIHJjQ2xpZW50LnJpZ2h0IC0gd2lkdGgg
KiA1LCBoZWlnaHQsIFRSVUUpOwogICAgIE1vdmVXaW5kb3cobV9oUHJvZ3Jlc3NJbmRpY2F0b3Is
IHJjQ2xpZW50LnJpZ2h0IC0gd2lkdGggKiAyLCAwLCB3aWR0aCAqIDIsIGhlaWdodCwgVFJVRSk7
CiAKLSAgICBpZiAobV9icm93c2VyV2luZG93LT51c2VzTGF5ZXJlZFdlYlZpZXcoKSB8fCAhbV9i
cm93c2VyV2luZG93LT5od25kKCkpCisgICAgaWYgKCFtX2Jyb3dzZXJXaW5kb3ctPmh3bmQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIE1vdmVXaW5kb3cobV9icm93c2VyV2luZG93LT5od25kKCks
IDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSAtIGhlaWdodCwgVFJV
RSk7CiB9CkBAIC0xODUsMjAgKzE4MCwxMiBAQCBMUkVTVUxUIENBTExCQUNLIE1haW5XaW5kb3c6
OlduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQQogICAg
ICAgICBjYXNlIElEQ19VUkxfQkFSOgogICAgICAgICAgICAgdGhpc1dpbmRvdy0+b25VUkxCYXJF
bnRlcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFdFQktJVCkKICAgICAgICAg
Y2FzZSBJRE1fTkVXX1dFQktJVF9XSU5ET1c6IHsKICAgICAgICAgICAgIGF1dG8mIG5ld1dpbmRv
dyA9IE1haW5XaW5kb3c6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKICAgICAgICAgICAgIG5ld1dpbmRv
dy5pbml0KFdlYktpdEJyb3dzZXJXaW5kb3c6OmNyZWF0ZSwgaEluc3QpOwogICAgICAgICAgICAg
U2hvd1dpbmRvdyhuZXdXaW5kb3cuaHduZCgpLCBTV19TSE9XKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBJRE1fTkVXX1dFQktJVExFR0FDWV9X
SU5ET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIG5ld1dpbmRvdyA9IE1haW5XaW5kb3c6OmNyZWF0
ZSgpLmxlYWtSZWYoKTsKLSAgICAgICAgICAgIG5ld1dpbmRvdy5pbml0KFdlYktpdExlZ2FjeUJy
b3dzZXJXaW5kb3c6OmNyZWF0ZSwgaEluc3QpOwotICAgICAgICAgICAgU2hvd1dpbmRvdyhuZXdX
aW5kb3cuaHduZCgpLCBTV19TSE9XKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAg
ICAgICAgIGNhc2UgSURNX0NMT1NFX1dJTkRPVzoKICAgICAgICAgICAgIFBvc3RNZXNzYWdlKGhX
bmQsIFdNX0NMT1NFLCAwLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9N
YWluV2luZG93LmgKaW5kZXggZmJhN2Y2NzBmODk1MzU2M2Q4ZDBkMmI4ZDQyYTYzNmM2NTNmOWQ1
Zi4uYTU2MmJlODFjZTRkNjI0YzNhOGU0MmVkNDI5ZGQyYzkwYzYyZThlMyAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vTWFpbldpbmRvdy5oCkBAIC0yNSwyNCArMjUsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvd0NsaWVu
dC5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUg
PHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAorY2xhc3MgV2ViS2l0QnJvd3NlcldpbmRvdzsKKwogY2xhc3MgTWFpbldpbmRvdyBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1haW5XaW5kb3c+LCBwdWJsaWMgQnJvd3NlcldpbmRv
d0NsaWVudCB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQnJvd3NlcldpbmRvd0ZhY3RvcnkgPSBzdGQ6
OmZ1bmN0aW9uPFJlZjxCcm93c2VyV2luZG93PihCcm93c2VyV2luZG93Q2xpZW50JiwgSFdORCBt
YWluV25kLCBib29sIHVzZXNMYXllcmVkV2ViVmlldyk+OworICAgIHVzaW5nIEJyb3dzZXJXaW5k
b3dGYWN0b3J5ID0gc3RkOjpmdW5jdGlvbjxSZWY8V2ViS2l0QnJvd3NlcldpbmRvdz4oQnJvd3Nl
cldpbmRvd0NsaWVudCYsIEhXTkQgbWFpblduZCk+OwogCiAgICAgc3RhdGljIFJlZjxNYWluV2lu
ZG93PiBjcmVhdGUoKTsKIAogICAgIH5NYWluV2luZG93KCk7Ci0gICAgYm9vbCBpbml0KEJyb3dz
ZXJXaW5kb3dGYWN0b3J5LCBISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXllcmVkV2Vi
VmlldyA9IGZhbHNlKTsKKyAgICBib29sIGluaXQoQnJvd3NlcldpbmRvd0ZhY3RvcnksIEhJTlNU
QU5DRSBoSW5zdGFuY2UpOwogCiAgICAgdm9pZCByZXNpemVTdWJWaWV3cygpOwogICAgIEhXTkQg
aHduZCgpIGNvbnN0IHsgcmV0dXJuIG1faE1haW5XbmQ7IH0KLSAgICBCcm93c2VyV2luZG93KiBi
cm93c2VyV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9icm93c2VyV2luZG93LmdldCgpOyB9Cisg
ICAgV2ViS2l0QnJvd3NlcldpbmRvdyogYnJvd3NlcldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
YnJvd3NlcldpbmRvdy5nZXQoKTsgfQogCiAgICAgdm9pZCBsb2FkVVJMKHN0ZDo6d3N0cmluZyk7
CiAgICAgCkBAIC03Miw1ICs3NCw1IEBAIHByaXZhdGU6CiAgICAgSFdORCBtX2hQcm9ncmVzc0lu
ZGljYXRvciB7IG51bGxwdHIgfTsKICAgICBIV05EIG1faENhY2hlV25kIHsgbnVsbHB0ciB9Owog
ICAgIEhHRElPQkogbV9oVVJMQmFyRm9udCB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8QnJvd3Nl
cldpbmRvdz4gbV9icm93c2VyV2luZG93OworICAgIFJlZlB0cjxXZWJLaXRCcm93c2VyV2luZG93
PiBtX2Jyb3dzZXJXaW5kb3c7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L01pbmlCcm93c2VyTGliLnJjIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGli
LnJjCmluZGV4IDI0NWM5YmJmYmQ3YzhhNTc0YTcwNGY0Y2NmNzkwYzAzODI2Mjc5MGMuLjIxNzQy
Y2ZlZmQ2ZjhmZTExYzQzMDFiZDRjNzVmYWE0NTRkYzEwYWEgMTAwNzU1Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYi5yYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4vTWluaUJyb3dzZXJMaWIucmMKQEAgLTQ1LDcgKzQ1LDYgQEAgQkVHSU4KICAgICAgICAgTUVO
VUlURU0gIiZQcmludFx0Q3RybC1QIiwgICAgICAgICAgICAgIElETV9QUklOVA0KICAgICAgICAg
TUVOVUlURU0gIkUmeGl0IiwgICAgICAgICAgICAgICAgICAgICAgIElETV9FWElUDQogICAgICAg
ICBNRU5VSVRFTSAiTmV3IFdlYktpdCBXaW5kb3ciLCAgICAgICAgICAgSURNX05FV19XRUJLSVRf
V0lORE9XDQotICAgICAgICBNRU5VSVRFTSAiTmV3IFdlYktpdExlZ2FjeSBXaW5kb3ciLCAgICAg
SURNX05FV19XRUJLSVRMRUdBQ1lfV0lORE9XDQogICAgICAgICBNRU5VSVRFTSAiQ2xvc2VcdEN0
cmwtVyIsICAgICAgICAgICAgICAgSURNX0NMT1NFX1dJTkRPVw0KICAgICBFTkQNCiAgICAgUE9Q
VVAgIiZWaWV3Ig0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nl
ckxpYlJlc291cmNlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJMaWJSZXNv
dXJjZS5oCmluZGV4IGQ0YjA2YjJlYjUzNzg5ZjNhNjQyZTg3ODNkMjlmMTU1MWRjMjQyZTYuLjJj
Y2EwMjhlYWY3Yzk2ZGM4MDE3MWYxZGQ1ZGNkODgyNmY5N2RkYjkgMTAwNzU1Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmgKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliUmVzb3VyY2UuaApAQCAtMTIxLDEwICsxMjEsOSBA
QAogI2RlZmluZSBJRENfUFJPWFlfRElTQUJMRSAgICAgICAgICAgICAgIDEwNjEKICNkZWZpbmUg
SURDX1NFUlZFUl9UUlVTVF9URVhUICAgICAgICAgICAxMDYyCiAjZGVmaW5lIElETV9ORVdfV0VC
S0lUX1dJTkRPVyAgICAgICAgICAgMzI3NzYKLSNkZWZpbmUgSURNX05FV19XRUJLSVRMRUdBQ1lf
V0lORE9XICAgICAzMjc3NwotI2RlZmluZSBJRE1fUFJPWFlfU0VUVElOR1MgICAgICAgICAgICAg
IDMyNzc4Ci0jZGVmaW5lIElETV9SRUxPQUQgICAgICAgICAgICAgICAgICAgICAgMzI3NzkKLSNk
ZWZpbmUgSURNX0NMT1NFX1dJTkRPVyAgICAgICAgICAgICAgICAzMjc4MAorI2RlZmluZSBJRE1f
UFJPWFlfU0VUVElOR1MgICAgICAgICAgICAgIDMyNzc3CisjZGVmaW5lIElETV9SRUxPQUQgICAg
ICAgICAgICAgICAgICAgICAgMzI3NzgKKyNkZWZpbmUgSURNX0NMT1NFX1dJTkRPVyAgICAgICAg
ICAgICAgICAzMjc4OQogI2RlZmluZSBJRENfU1RBVElDICAgICAgICAgICAgICAgICAgICAgIC0x
CiAKIC8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3RzCmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9NaW5pQnJvd3NlcldlYkhvc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1YjEyOTVjYjJhM2Y0OGUyOTU0YTgxZjEzMTYyN2I5ZTM0YWRjY2ZiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9NaW5pQnJvd3NlcldlYkhvc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50
IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAic3Rk
YWZ4LmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXJXZWJIb3N0LmgiCi0KLSNpbmNsdWRlICJXZWJL
aXRMZWdhY3lCcm93c2VyV2luZG93LmgiCi0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdC5o
PgotCi1IUkVTVUxUIE1pbmlCcm93c2VyV2ViSG9zdDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKF9J
bl9vcHRfIElXZWJWaWV3KiB3ZWJWaWV3LCBfSW5fb3B0XyBJV2ViRnJhbWUqIGZyYW1lKQotewot
ICAgIHJldHVybiBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZSh3ZWJWaWV3LCBm
cmFtZSk7Ci19Ci0KLUhSRVNVTFQgTWluaUJyb3dzZXJXZWJIb3N0OjpkaWRGYWlsUHJvdmlzaW9u
YWxMb2FkV2l0aEVycm9yKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkVycm9yICpl
cnJvciwgX0luX29wdF8gSVdlYkZyYW1lKikKLXsKLSAgICBfYnN0cl90IGVycm9yRGVzY3JpcHRp
b247Ci0gICAgSFJFU1VMVCBociA9IEVfUE9JTlRFUjsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAg
IGhyID0gZXJyb3ItPmxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yRGVzY3JpcHRpb24uR2V0QWRk
cmVzcygpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9
IEwiRmFpbGVkIHRvIGxvYWQgcGFnZSBhbmQgdG8gbG9jYWxpemUgZXJyb3IgZGVzY3JpcHRpb24u
IjsKLQotICAgIGlmIChfd2NzaWNtcChlcnJvckRlc2NyaXB0aW9uLCBMIkNhbmNlbGxlZCIpKQot
ICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIHN0YXRpY19jYXN0PExQQ1dTVFI+KGVycm9yRGVzY3Jp
cHRpb24pLCBMIkVycm9yIiwgTUJfQVBQTE1PREFMIHwgTUJfT0spOwotCi0gICAgcmV0dXJuIFNf
T0s7Ci19Ci0KLUhSRVNVTFQgTWluaUJyb3dzZXJXZWJIb3N0OjpkaWRDaGFuZ2VMb2NhdGlvbldp
dGhpblBhZ2VGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyogd2ViVmlldywgX0luX29wdF8gSVdl
YkZyYW1lKiBmcmFtZSkKLXsKLSAgICBJV2ViRnJhbWUyUHRyIGZyYW1lMihmcmFtZSk7Ci0gICAg
aWYgKCFmcmFtZTIpCi0gICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOwotICAgIEJPT0wgaXNN
YWluRnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IGZyYW1lMi0+aXNNYWluRnJhbWUoJmlzTWFpbkZy
YW1lKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIGlmICgh
aXNNYWluRnJhbWUpCi0gICAgICAgIHJldHVybiBTX09LOwotICAgIF9ic3RyX3QgdXJsOwotICAg
IGhyID0gd2ViVmlldy0+bWFpbkZyYW1lVVJMKHVybC5HZXRBZGRyZXNzKCkpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgbV9jbGllbnQtPm1fY2xpZW50LmFj
dGl2ZVVSTENoYW5nZWQodXJsLkdldEJTVFIoKSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhS
RVNVTFQgTWluaUJyb3dzZXJXZWJIb3N0OjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlk
LCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkK
LSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAg
ICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKLSAgICAgICAgKnBwdk9iamVj
dCA9IHN0YXRpY19jYXN0PElXZWJGcmFtZUxvYWREZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2Ug
aWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViRnJhbWVMb2FkRGVsZWdhdGUpKQotICAgICAg
ICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkZyYW1lTG9hZERlbGVnYXRlKj4odGhpcyk7
Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0
ZVByaXZhdGUpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkZyYW1lTG9h
ZERlbGVnYXRlUHJpdmF0ZSo+KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQs
IElJRF9JV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyKj4odGhpcyk7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKLQotICAgIEFkZFJlZigpOwotICAgIHJldHVybiBT
X09LOwotfQotCi1VTE9ORyBNaW5pQnJvd3NlcldlYkhvc3Q6OkFkZFJlZigpCi17Ci0gICAgcmV0
dXJuICsrbV9yZWZDb3VudDsKLX0KLQotVUxPTkcgTWluaUJyb3dzZXJXZWJIb3N0OjpSZWxlYXNl
KCkKLXsKLSAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7Ci0gICAgaWYgKCFuZXdSZWYp
Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIHJldHVybiBuZXdSZWY7Ci19Ci0KLUhSRVNVTFQg
TWluaUJyb3dzZXJXZWJIb3N0OjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUoX0luX29wdF8gSVdlYlZp
ZXcqIHdlYlZpZXcsIF9Jbl9vcHRfIElXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCFmcmFt
ZSB8fCAhd2ViVmlldykKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNob3dMYXN0VmlzaXRlZFNpdGVzKCp3ZWJWaWV3KTsK
LQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIE1pbmlCcm93c2VyV2ViSG9zdDo6ZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRf
IElXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgTWlu
aUJyb3dzZXJXZWJIb3N0OjpkaWRGYWlsTG9hZFdpdGhFcnJvcihfSW5fb3B0XyBJV2ViVmlldyos
IF9Jbl9vcHRfIElXZWJFcnJvciosIF9Jbl9vcHRfIElXZWJGcmFtZSopCi17Ci0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KLUhSRVNVTFQgTWluaUJyb3dzZXJXZWJIb3N0OjpkaWRIYW5kbGVPbmxvYWRF
dmVudHNGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyogc2VuZGVyLCBfSW5fb3B0XyBJV2ViRnJh
bWUqIGZyYW1lKQotewotICAgIElXZWJEYXRhU291cmNlUHRyIGRhdGFTb3VyY2U7Ci0gICAgSFJF
U1VMVCBociA9IGZyYW1lLT5kYXRhU291cmNlKCZkYXRhU291cmNlLkdldEludGVyZmFjZVB0cigp
KTsKLSAgICBpZiAoRkFJTEVEKGhyKSB8fCAhZGF0YVNvdXJjZSkKLSAgICAgICAgaHIgPSBmcmFt
ZS0+cHJvdmlzaW9uYWxEYXRhU291cmNlKCZkYXRhU291cmNlLkdldEludGVyZmFjZVB0cigpKTsK
LSAgICBpZiAoRkFJTEVEKGhyKSB8fCAhZGF0YVNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhyOwot
Ci0gICAgSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRyIHJlcXVlc3Q7Ci0gICAgaHIgPSBkYXRhU291
cmNlLT5yZXF1ZXN0KCZyZXF1ZXN0LkdldEludGVyZmFjZVB0cigpKTsKLSAgICBpZiAoRkFJTEVE
KGhyKSB8fCAhcmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgX2JzdHJfdCBmcmFt
ZVVSTDsKLSAgICBociA9IHJlcXVlc3QtPm1haW5Eb2N1bWVudFVSTChmcmFtZVVSTC5HZXRBZGRy
ZXNzKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBy
ZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBNaW5pQnJvd3NlcldlYkhvc3Q6Om9uTm90aWZ5KF9J
bl9vcHRfIElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKLXsKLSAgICBfYnN0cl90IG5h
bWU7Ci0gICAgSFJFU1VMVCBociA9IG5vdGlmaWNhdGlvbi0+bmFtZShuYW1lLkdldEFkZHJlc3Mo
KSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLSAgICBpZiAobmFt
ZSA9PSBfYnN0cl90KFdlYlZpZXdQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbikp
IHsKLSAgICAgICAgSVVua25vd25QdHIgb2JqZWN0OwotICAgICAgICBociA9IG5vdGlmaWNhdGlv
bi0+Z2V0T2JqZWN0KCZvYmplY3QuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBocjsKLSAgICAgICAgSVdlYlZpZXdQdHIgd2Vi
VmlldyhvYmplY3QpOwotICAgICAgICBpZiAoIXdlYlZpZXcpCi0gICAgICAgICAgICByZXR1cm4g
RV9OT0lOVEVSRkFDRTsKLSAgICAgICAgZG91YmxlIHByb2dyZXNzOwotICAgICAgICBociA9IHdl
YlZpZXctPmVzdGltYXRlZFByb2dyZXNzKCZwcm9ncmVzcyk7Ci0gICAgICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICAgICAgcmV0dXJuIGhyOwotICAgICAgICBtX2NsaWVudC0+bV9jbGllbnQu
cHJvZ3Jlc3NDaGFuZ2VkKHByb2dyZXNzKTsKLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gX2JzdHJf
dChXZWJWaWV3UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbikpCi0gICAgICAgIG1fY2xpZW50
LT5tX2NsaWVudC5wcm9ncmVzc0ZpbmlzaGVkKCk7Ci0gICAgCi0gICAgcmV0dXJuIFNfT0s7Ci19
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0Lmgg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc2OTg1YTMxM2U4ZDM1OTI4NjNhODc1N2VjOTczNDM3NzM4OTdm
MDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
TWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyV2ViSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxNC0yMDE1IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgInJlc291cmNlLmgiCi0jaW5j
bHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdC5oPgotI2luY2x1ZGUgPGNvbXV0aWwuaD4KLQotY2xh
c3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzsKLQotY2xhc3MgTWluaUJyb3dzZXJXZWJIb3N0
IDogcHVibGljIElXZWJGcmFtZUxvYWREZWxlZ2F0ZSwgcHVibGljIElXZWJGcmFtZUxvYWREZWxl
Z2F0ZVByaXZhdGUsIHB1YmxpYyBJV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIgewotcHVibGljOgot
ICAgIE1pbmlCcm93c2VyV2ViSG9zdChXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93KiBjbGllbnQp
Ci0gICAgICAgIDogbV9jbGllbnQoY2xpZW50KSB7IH0KLQotICAgIC8vIElVbmtub3duCi0gICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVG
SUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KTsKLSAgICB2aXJ0dWFsIFVM
T05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgUmVsZWFzZSgpOwotCi0gICAgLy8gSVdlYkZyYW1lTG9hZERlbGVnYXRlCi0g
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViRnJhbWUqKTsKLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0
XyBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IoX0luX29wdF8gSVdl
YlZpZXcqLCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBfSW5fb3B0XyBJV2ViRnJhbWUqKTsKLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ29tbWl0TG9hZEZvckZyYW1lKF9J
bl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZyYW1lKik7Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVUaXRsZShfSW5fb3B0XyBJV2ViVmlldyos
IF9Jbl8gQlNUUiB0aXRsZSwgX0luX29wdF8gSVdlYkZyYW1lKikgeyByZXR1cm4gU19PSzsgfQot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDaGFuZ2VJY29ucyhfSW5f
b3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUljb24oX0luX29w
dF8gSVdlYlZpZXcqLCBfSW5fIEhCSVRNQVAsIF9Jbl9vcHRfIElXZWJGcmFtZSopIHsgcmV0dXJu
IFNfT0s7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmluaXNo
TG9hZEZvckZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkZyYW1lKik7Ci0g
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxMb2FkV2l0aEVycm9y
KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYkVycm9yKiwgX0luX29wdF8gSVdlYkZy
YW1lKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENoYW5nZUxv
Y2F0aW9uV2l0aGluUGFnZUZvckZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdl
YkZyYW1lKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxQZXJm
b3JtQ2xpZW50UmVkaXJlY3RUb1VSTChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gQlNUUiB1cmws
IGRvdWJsZSBkZWxheVNlY29uZHMsIERBVEUgZmlyZURhdGUsIF9Jbl9vcHRfIElXZWJGcmFtZSop
IHsgcmV0dXJuIFNfT0s7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9v
cHRfIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgd2lsbENsb3NlRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0
XyBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9Ci0gICAgdmlydHVhbCAvKiBbbG9jYWxdICov
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKElX
ZWJWaWV3KiwgSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZikgIHsgcmV0dXJuIFNfT0s7IH0KLSAg
ICB2aXJ0dWFsIC8qIFtsb2NhbF0gKi8gSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDbGVh
cldpbmRvd09iamVjdChJV2ViVmlldyosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIElXZWJG
cmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KLQotICAgIC8vIElXZWJGcmFtZUxvYWREZWxlZ2F0ZVBy
aXZhdGUKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqIHNlbmRlciwgX0luX29wdF8gSVdl
YkZyYW1lKikgeyByZXR1cm4gU19PSzsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBkaWRGaXJzdExheW91dEluRnJhbWUoX0luX29wdF8gSVdlYlZpZXcqIHNlbmRlciwg
X0luX29wdF8gSVdlYkZyYW1lKikgeyByZXR1cm4gU19PSzsgfQotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZShfSW5fb3B0
XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJGcmFtZSopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRJbkZyYW1lKF9J
bl9vcHRfIElXZWJWaWV3KiBzZW5kZXIsIF9Jbl9vcHRfIElXZWJGcmFtZSopICB7IHJldHVybiBT
X09LOyB9Ci0KLSAgICAvLyBJV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIKLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgb25Ob3RpZnkoX0luX29wdF8gSVdlYk5vdGlmaWNhdGlv
biopOwotCi1wcml2YXRlOgotICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07Ci0gICAgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdyogbV9jbGllbnQgeyBudWxscHRyIH07Ci19OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci93aW4vUHJpbnRXZWJVSURlbGVnYXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2M1OGM0ODUxNTAxOWUwYTM3MDgwY2ViYjkyZjQ1NzIyMjQ3NTcxZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci93aW4vUHJpbnRXZWJVSURlbGVnYXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0u
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3Rl
bnNlbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAic3RkYWZ4LmgiCi0jaW5jbHVkZSAiUHJpbnRXZWJVSURlbGVn
YXRlLmgiCi0KLSNpbmNsdWRlICJDb21tb24uaCIKLSNpbmNsdWRlICJNYWluV2luZG93LmgiCi0j
aW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgotI2luY2x1ZGUgPFdlYktpdExl
Z2FjeS9XZWJLaXRDT01BUEkuaD4KLSNpbmNsdWRlIDxjb21pcC5oPgotI2luY2x1ZGUgPGNvbW1j
dHJsLmg+Ci0jaW5jbHVkZSA8Y29tbWRsZy5oPgotI2luY2x1ZGUgPG9iamJhc2UuaD4KLSNpbmNs
dWRlIDxzaGx3YXBpLmg+Ci0jaW5jbHVkZSA8d2luaW5ldC5oPgotCi0jaWYgVVNFKENGKQotI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotc3RhdGlj
IGNvbnN0IGludCBNQVJHSU4gPSAyMDsKLQotSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OnJ1
bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5f
IEJTVFIgbWVzc2FnZSkKLXsKLSAgICA6Ok1lc3NhZ2VCb3hXKDAsIG1lc3NhZ2UsIEwiSmF2YVNj
cmlwdCBBbGVydCIsIE1CX09LKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBQcmlu
dFdlYlVJRGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZShfSW5f
b3B0XyBJV2ViVmlldyosIF9Jbl8gQlNUUiBtZXNzYWdlLCBfT3V0XyBCT09MKiByZXN1bHQpCi17
Ci0gICAgKnJlc3VsdCA9IDo6TWVzc2FnZUJveFcoMCwgbWVzc2FnZSwgTCJKYXZhU2NyaXB0IENv
bmZpcm0iLCBNQl9PS0NBTkNFTCkgPT0gSURPSzsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJF
U1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdChfSW5fb3B0
XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBfQ09NX091dHB0
cl9vcHRfIElXZWJWaWV3KiogbmV3V2ViVmlldykKLXsKLSAgICBpZiAoIW5ld1dlYlZpZXcpCi0g
ICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKm5ld1dlYlZpZXcgPSBudWxscHRyOwotICAg
IGlmICghcmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgIGF1dG8mIG5l
d1dpbmRvdyA9IE1haW5XaW5kb3c6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICBib29sIG9rID0g
bmV3V2luZG93LmluaXQoV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6Y3JlYXRlLCBoSW5zdCk7
Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLSAgICBTaG93V2luZG93KG5l
d1dpbmRvdy5od25kKCksIFNXX1NIT1cpOwotCi0gICAgYXV0byYgbmV3QnJvd3NlcldpbmRvdyA9
ICpzdGF0aWNfY2FzdDxXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Kj4obmV3V2luZG93LmJyb3dz
ZXJXaW5kb3coKSk7Ci0gICAgKm5ld1dlYlZpZXcgPSBuZXdCcm93c2VyV2luZG93LndlYlZpZXco
KS5EZXRhY2goKTsKLSAgICBJV2ViRnJhbWVQdHIgZnJhbWU7Ci0gICAgSFJFU1VMVCBocjsKLSAg
ICBociA9ICgqbmV3V2ViVmlldyktPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkp
OwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgaHIgPSBmcmFt
ZS0+bG9hZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJl
dHVybiBocjsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1zdGF0aWMgSFdORCBnZXRIYW5kbGVG
cm9tV2ViVmlldyhJV2ViVmlldyogd2ViVmlldykKLXsKLSAgICBJV2ViVmlld1ByaXZhdGUyUHRy
IHdlYlZpZXdQcml2YXRlKHdlYlZpZXcpOwotICAgIGlmICghd2ViVmlld1ByaXZhdGUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSFdORCB3ZWJWaWV3V2luZG93ID0gbnVsbHB0cjsK
LSAgICBIUkVTVUxUIGhyID0gd2ViVmlld1ByaXZhdGUtPnZpZXdXaW5kb3coJndlYlZpZXdXaW5k
b3cpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiB3ZWJWaWV3V2luZG93OwotfQotCi1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6
d2ViVmlld0Nsb3NlKF9Jbl9vcHRfIElXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIEhXTkQgaG9z
dFdpbmRvdzsKLSAgICBIUkVTVUxUIGhyID0gd2ViVmlldy0+aG9zdFdpbmRvdygmaG9zdFdpbmRv
dyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIDo6RGVz
dHJveVdpbmRvdyhob3N0V2luZG93KTsKLQotICAgIGlmIChob3N0V2luZG93ID09IG1fbW9kYWxE
aWFsb2dQYXJlbnQpCi0gICAgICAgIG1fbW9kYWxEaWFsb2dQYXJlbnQgPSBudWxscHRyOwotCi0g
ICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjpzZXRGcmFt
ZShfSW5fb3B0XyBJV2ViVmlldyogd2ViVmlldywgX0luXyBSRUNUKiByZWN0KQotewotICAgIGlm
IChtX21vZGFsRGlhbG9nUGFyZW50KQotICAgICAgICA6Ok1vdmVXaW5kb3cobV9tb2RhbERpYWxv
Z1BhcmVudCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQs
IHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCwgRkFMU0UpOwotCi0gICAgOjpNb3ZlV2luZG93KGdl
dEhhbmRsZUZyb21XZWJWaWV3KHdlYlZpZXcpLCAwLCAwLCByZWN0LT5yaWdodCAtIHJlY3QtPmxl
ZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCwgRkFMU0UpOwotCi0gICAgcmV0dXJuIFNfT0s7
Ci19Ci0KLUhSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjp3ZWJWaWV3RnJhbWUoX0luX29wdF8g
SVdlYlZpZXcqIHdlYlZpZXcsIF9PdXRfIFJFQ1QqIHJlY3QpCi17Ci0gICAgaWYgKCE6OkdldFdp
bmRvd1JlY3QoZ2V0SGFuZGxlRnJvbVdlYlZpZXcod2ViVmlldyksIHJlY3QpKQotICAgICAgICBy
ZXR1cm4gRV9GQUlMOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgUHJpbnRXZWJV
SURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8g
dm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBpZiAoSXNFcXVhbElJ
RChyaWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SVdlYlVJRGVsZWdhdGUqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJ
RF9JV2ViVUlEZWxlZ2F0ZSkpCi0gICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2Vi
VUlEZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZB
Q0U7Ci0KLSAgICBBZGRSZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgUHJpbnRX
ZWJVSURlbGVnYXRlOjpBZGRSZWYoKQotewotICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0K
LVVMT05HIFByaW50V2ViVUlEZWxlZ2F0ZTo6UmVsZWFzZSgpCi17Ci0gICAgVUxPTkcgbmV3UmVm
ID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAgICAgICBkZWxldGUgdGhpczsK
LSAgICByZXR1cm4gbmV3UmVmOwotfQotCi1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6d2Vi
Vmlld1ByaW50aW5nTWFyZ2luUmVjdChfSW5fb3B0XyBJV2ViVmlldyogdmlldywgX091dF8gUkVD
VCogcmVjdCkKLXsKLSAgICBpZiAoIXZpZXcgfHwgIXJlY3QpCi0gICAgICAgIHJldHVybiBFX1BP
SU5URVI7Ci0KLSAgICBJV2ViRnJhbWVQdHIgbWFpbkZyYW1lOwotICAgIGlmIChGQUlMRUQodmll
dy0+bWFpbkZyYW1lKCZtYWluRnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpKSkKLSAgICAgICAgcmV0
dXJuIEVfRkFJTDsKLQotICAgIElXZWJGcmFtZVByaXZhdGVQdHIgcHJpdmF0ZUZyYW1lKG1haW5G
cmFtZSk7Ci0gICAgaWYgKCFwcml2YXRlRnJhbWUpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0K
LSAgICBwcml2YXRlRnJhbWUtPmZyYW1lQm91bmRzKHJlY3QpOwotCi0gICAgcmVjdC0+bGVmdCAr
PSBNQVJHSU47Ci0gICAgcmVjdC0+dG9wICs9IE1BUkdJTjsKLSAgICBIREMgZGMgPSA6OkdldERD
KDApOwotICAgIHJlY3QtPnJpZ2h0ID0gKDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkg
KiA2LjUpIC0gTUFSR0lOOwotICAgIHJlY3QtPmJvdHRvbSA9ICg6OkdldERldmljZUNhcHMoZGMs
IExPR1BJWEVMU1kpICogMTEpIC0gTUFSR0lOOwotICAgIDo6UmVsZWFzZURDKDAsIGRjKTsKLQot
ICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6d2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKF9Jbl9vcHRfIElXZWJWaWV3KiwgV2ViRHJhZ1NvdXJjZUFj
dGlvbiwgX0luXyBMUFBPSU5ULCBfSW5fb3B0XyBJRGF0YU9iamVjdCosIF9DT01fT3V0cHRyX29w
dF8gSURhdGFPYmplY3QqKiByZXN1bHQpCi17Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJl
dHVybiBFX1BPSU5URVI7Ci0gICAgKnJlc3VsdCA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIEVfTk9U
SU1QTDsKLX0KLQotSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OndlYlZpZXdIZWFkZXJIZWln
aHQoX0luX29wdF8gSVdlYlZpZXcqIHdlYlZpZXcsIF9PdXRfIGZsb2F0KiBoZWlnaHQpCi17Ci0g
ICAgaWYgKCF3ZWJWaWV3IHx8ICFoZWlnaHQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0K
LSAgICBIREMgZGMgPSA6OkdldERDKDApOwotCi0gICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljOwot
ICAgIDo6R2V0VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljKTsKLSAgICA6OlJlbGVhc2VEQygw
LCBkYyk7Ci0KLSAgICAqaGVpZ2h0ID0gMS4xICogdGV4dE1ldHJpYy50bUhlaWdodDsKLQotICAg
IHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6d2ViVmlld0Zv
b3RlckhlaWdodChfSW5fb3B0XyBJV2ViVmlldyogd2ViVmlldywgX091dF8gZmxvYXQqIGhlaWdo
dCkKLXsKLSAgICBpZiAoIXdlYlZpZXcgfHwgIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKLQotICAgIEhEQyBkYyA9IDo6R2V0REMoMCk7Ci0KLSAgICBURVhUTUVUUklDIHRleHRN
ZXRyaWM7Ci0gICAgOjpHZXRUZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpOwotICAgIDo6UmVs
ZWFzZURDKDAsIGRjKTsKLQotICAgICpoZWlnaHQgPSAxLjEgKiB0ZXh0TWV0cmljLnRtSGVpZ2h0
OwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjpk
cmF3SGVhZGVySW5SZWN0KF9Jbl9vcHRfIElXZWJWaWV3KiB3ZWJWaWV3LCBfSW5fIFJFQ1QqIHJl
Y3QsIFVMT05HX1BUUiBkcmF3aW5nQ29udGV4dCkKLXsKLSAgICBpZiAoIXdlYlZpZXcgfHwgIXJl
Y3QpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICAvLyBUdXJuIG9mZiBoZWFkZXIg
Zm9yIG5vdy4KLSAgICBIREMgZGMgPSByZWludGVycHJldF9jYXN0PEhEQz4oZHJhd2luZ0NvbnRl
eHQpOwotCi0gICAgSEdESU9CSiBoRm9udCA9IDo6R2V0U3RvY2tPYmplY3QoQU5TSV9WQVJfRk9O
VCk7Ci0gICAgSEdESU9CSiBoT2xkRm9udCA9IDo6U2VsZWN0T2JqZWN0KGRjLCBoRm9udCk7Ci0K
LSAgICBMUENXU1RSIGhlYWRlciA9IEwiW1NhbXBsZSBIZWFkZXJdIjsKLSAgICBzaXplX3QgbGVu
Z3RoID0gd2NzbGVuKGhlYWRlcik7Ci0KLSAgICBpbnQgcmMgPSA6OkRyYXdUZXh0VyhkYywgaGVh
ZGVyLCBsZW5ndGgsIHJlY3QsIERUX0xFRlQgfCBEVF9OT0NMSVAgfCBEVF9WQ0VOVEVSIHwgRFRf
U0lOR0xFTElORSk7Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMsIGhPbGRGb250KTsKLQotICAgIGlm
ICghcmMpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICA6Ok1vdmVUb0V4KGRjLCByZWN0
LT5sZWZ0LCByZWN0LT5ib3R0b20sIDApOwotICAgIEhHRElPQkogaFBlbiA9IDo6R2V0U3RvY2tP
YmplY3QoQkxBQ0tfUEVOKTsKLSAgICBIR0RJT0JKIGhPbGRQZW4gPSA6OlNlbGVjdE9iamVjdChk
YywgaFBlbik7Ci0gICAgOjpMaW5lVG8oZGMsIHJlY3QtPnJpZ2h0LCByZWN0LT5ib3R0b20pOwot
ICAgIDo6U2VsZWN0T2JqZWN0KGRjLCBoT2xkUGVuKTsKLQotICAgIHJldHVybiBTX09LOwotfQot
Ci1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6ZHJhd0Zvb3RlckluUmVjdChfSW5fb3B0XyBJ
V2ViVmlldyogd2ViVmlldywgX0luXyBSRUNUKiByZWN0LCBVTE9OR19QVFIgZHJhd2luZ0NvbnRl
eHQsIFVJTlQgcGFnZUluZGV4LCBVSU5UIHBhZ2VDb3VudCkKLXsKLSAgICBpZiAoIXdlYlZpZXcg
fHwgIXJlY3QpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBIREMgZGMgPSByZWlu
dGVycHJldF9jYXN0PEhEQz4oZHJhd2luZ0NvbnRleHQpOwotCi0gICAgSEdESU9CSiBoRm9udCA9
IDo6R2V0U3RvY2tPYmplY3QoQU5TSV9WQVJfRk9OVCk7Ci0gICAgSEdESU9CSiBoT2xkRm9udCA9
IDo6U2VsZWN0T2JqZWN0KGRjLCBoRm9udCk7Ci0KLSAgICBMUENXU1RSIGZvb3RlciA9IEwiW1Nh
bXBsZSBGb290ZXJdIjsKLSAgICBzaXplX3QgbGVuZ3RoID0gd2NzbGVuKGZvb3Rlcik7Ci0KLSAg
ICAvLyBBZGQgYSBsaW5lLCAxLzEwdGggaW5jaCBhYm92ZSB0aGUgZm9vdGVyIHRleHQgZnJvbSBs
ZWZ0IG1hcmdpbiB0byByaWdodCBtYXJnaW4uCi0gICAgOjpNb3ZlVG9FeChkYywgcmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCAwKTsKLSAgICBIR0RJT0JKIGhQZW4gPSA6OkdldFN0b2NrT2JqZWN0KEJM
QUNLX1BFTik7Ci0gICAgSEdESU9CSiBoT2xkUGVuID0gOjpTZWxlY3RPYmplY3QoZGMsIGhQZW4p
OwotICAgIDo6TGluZVRvKGRjLCByZWN0LT5yaWdodCwgcmVjdC0+dG9wKTsKLSAgICA6OlNlbGVj
dE9iamVjdChkYywgaE9sZFBlbik7Ci0KLSAgICBpbnQgcmMgPSA6OkRyYXdUZXh0VyhkYywgZm9v
dGVyLCBsZW5ndGgsIHJlY3QsIERUX0xFRlQgfCBEVF9OT0NMSVAgfCBEVF9WQ0VOVEVSIHwgRFRf
U0lOR0xFTElORSk7Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMsIGhPbGRGb250KTsKLQotICAgIGlm
ICghcmMpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQot
SFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OmNhblJ1bk1vZGFsKF9Jbl9vcHRfIElXZWJWaWV3
KiwgX091dF8gQk9PTCogY2FuUnVuQm9vbGVhbikKLXsKLSAgICBpZiAoIWNhblJ1bkJvb2xlYW4p
Ci0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmNhblJ1bkJvb2xlYW4gPSBUUlVFOwot
ICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6cnVuTW9k
YWwoX0luX29wdF8gSVdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgSVdlYlZpZXdQdHIgcHJvdGVj
dG9yKHdlYlZpZXcpOwotCi0gICAgYXV0byBtb2RhbERpYWxvZ093bmVyID0gOjpHZXRXaW5kb3co
bV9tb2RhbERpYWxvZ1BhcmVudCwgR1dfT1dORVIpOwotICAgIGF1dG8gdG9wTGV2ZWxQYXJlbnQg
PSA6OkdldEFuY2VzdG9yKG1vZGFsRGlhbG9nT3duZXIsIEdBX1JPT1QpOwotCi0gICAgOjpFbmFi
bGVXaW5kb3codG9wTGV2ZWxQYXJlbnQsIEZBTFNFKTsKLQotICAgIHdoaWxlICg6OklzV2luZG93
KGdldEhhbmRsZUZyb21XZWJWaWV3KHdlYlZpZXcpKSkgewotI2lmIFVTRShDRikKLSAgICAgICAg
Q0ZSdW5Mb29wUnVuSW5Nb2RlKGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwgMCwgdHJ1ZSk7Ci0jZW5k
aWYKLSAgICAgICAgTVNHIG1zZzsKLSAgICAgICAgaWYgKCE6OkdldE1lc3NhZ2UoJm1zZywgMCwg
MCwgMCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2Uo
Jm1zZyk7Ci0gICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOyAgICAgICAgCi0gICAgfQot
Ci0gICAgOjpFbmFibGVXaW5kb3codG9wTGV2ZWxQYXJlbnQsIFRSVUUpOwotCi0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KLUhSRVNVTFQgUHJpbnRXZWJVSURlbGVnYXRlOjpjcmVhdGVNb2RhbERpYWxv
ZyhfSW5fb3B0XyBJV2ViVmlldyogc2VuZGVyLCBfSW5fb3B0XyBJV2ViVVJMUmVxdWVzdCogcmVx
dWVzdCwgX0NPTV9PdXRwdHJfb3B0XyBJV2ViVmlldyoqIG5ld1dlYlZpZXcpCi17Ci0gICAgaWYg
KCFuZXdXZWJWaWV3KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgIAotICAgIElXZWJW
aWV3UHRyIHdlYlZpZXc7Ci0gICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENM
U0lEX1dlYlZpZXcsIDAsIElJRF9JV2ViVmlldywgKHZvaWQqKikmd2ViVmlldyk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIG1fbW9kYWxEaWFsb2dQYXJl
bnQgPSA6OkNyZWF0ZVdpbmRvdyhMIlNUQVRJQyIsIEwiTW9kYWxEaWFsb2ciLCBXU19PVkVSTEFQ
UEVEIHwgV1NfVklTSUJMRSwgMCwgMCwgMCwgMCwgZ2V0SGFuZGxlRnJvbVdlYlZpZXcoc2VuZGVy
KSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICBociA9IHdlYlZpZXctPnNldEhv
c3RXaW5kb3cobV9tb2RhbERpYWxvZ1BhcmVudCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybiBocjsKLQotICAgIFJFQ1QgY2xpZW50UmVjdCA9IHsgMCwgMCwgMCwgMCB9Owot
ICAgIGhyID0gd2ViVmlldy0+aW5pdFdpdGhGcmFtZShjbGllbnRSZWN0LCAwLCBfYnN0cl90KEwi
IikpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBJV2Vi
VUlEZWxlZ2F0ZVB0ciB1aURlbGVnYXRlOwotICAgIGhyID0gc2VuZGVyLT51aURlbGVnYXRlKCZ1
aURlbGVnYXRlKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0g
ICAgd2ViVmlldy0+c2V0VUlEZWxlZ2F0ZSh1aURlbGVnYXRlKTsKLQotICAgICpuZXdXZWJWaWV3
ID0gd2ViVmlldy5EZXRhY2goKTsKLQotICAgIHJldHVybiBTX09LOwotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5YjM4MjY0OTgyOGMzYzhhNTI0NWJjODVjZDU0YTc1Mjc1N2FjOWFkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9QcmludFdlYlVJRGVsZWdhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIFByaW50V2ViVUlEZWxlZ2F0ZV9oCi0jZGVmaW5lIFByaW50V2ViVUlEZWxlZ2F0
ZV9oCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+Ci0KLWNsYXNzIFdlYktpdExl
Z2FjeUJyb3dzZXJXaW5kb3c7Ci0KLWNsYXNzIFByaW50V2ViVUlEZWxlZ2F0ZSA6IHB1YmxpYyBJ
V2ViVUlEZWxlZ2F0ZSB7Ci1wdWJsaWM6Ci0gICAgUHJpbnRXZWJVSURlbGVnYXRlKFdlYktpdExl
Z2FjeUJyb3dzZXJXaW5kb3cmIGNsaWVudCkKLSAgICAgICAgOiBtX2NsaWVudChjbGllbnQpIHsg
fQotCi0gICAgLy8gSVVua25vd24KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBw
cHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7
Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7Ci0KLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0
KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYlVSTFJlcXVlc3QqLCBfQ09NX091dHB0
cl9vcHRfIElXZWJWaWV3KiopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSB3ZWJWaWV3U2hvdyhfSW5fb3B0XyBJV2ViVmlldyopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJWaWV3Q2xvc2UoX0luX29w
dF8gSVdlYlZpZXcqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2Vi
Vmlld0ZvY3VzKF9Jbl9vcHRfIElXZWJWaWV3KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlZpZXdVbmZvY3VzKF9Jbl9vcHRf
IElXZWJWaWV3KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHdlYlZpZXdGaXJzdFJlc3BvbmRlcihfSW5fb3B0XyBJV2ViVmlldyos
IF9PdXRfIEhXTkQqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIG1ha2VGaXJzdFJlc3BvbmRlcihfSW5fb3B0XyBJV2ViVmlldyos
IF9Jbl8gSFdORCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHNldFN0YXR1c1RleHQoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJT
VFIpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSB3ZWJWaWV3U3RhdHVzVGV4dChfSW5fb3B0XyBJV2ViVmlldyosIF9fZGVyZWZfb3B0
X291dCBCU1RSKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHdlYlZpZXdBcmVUb29sYmFyc1Zpc2libGUoX0luX29wdF8gSVdlYlZp
ZXcqLCBfT3V0XyBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHNldFRvb2xiYXJzVmlzaWJsZShfSW5fb3B0XyBJV2ViVmll
dyosIEJPT0wpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSB3ZWJWaWV3SXNTdGF0dXNCYXJWaXNpYmxlKF9Jbl9vcHRfIElXZWJWaWV3
KiwgX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBzZXRTdGF0dXNCYXJWaXNpYmxlKF9Jbl9vcHRfIElXZWJWaWV3
KiwgQk9PTCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIHdlYlZpZXdJc1Jlc2l6YWJsZShfSW5fb3B0XyBJV2ViVmlldyosIF9PdXRf
IEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgc2V0UmVzaXphYmxlKF9Jbl9vcHRfIElXZWJWaWV3KiwgQk9PTCkgeyByZXR1
cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNl
dEZyYW1lKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBSRUNUKik7Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlZpZXdGcmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9P
dXRfIFJFQ1QqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q29u
dGVudFJlY3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIFJFQ1QqKSB7IHJldHVybiBFX05PVElN
UEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld0NvbnRl
bnRSZWN0KF9Jbl9vcHRfIElXZWJWaWV3KiwgX091dF8gUkVDVCopIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBydW5KYXZhU2NyaXB0
QWxlcnRQYW5lbFdpdGhNZXNzYWdlKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBCU1RSKTsKLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcnVuSmF2YVNjcmlwdENvbmZpcm1Q
YW5lbFdpdGhNZXNzYWdlKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBCU1RSLCBfT3V0XyBCT09M
Kik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJ1bkphdmFTY3JpcHRU
ZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJTVFIsIF9J
bl8gQlNUUiwgX19kZXJlZl9vcHRfb3V0IEJTVFIqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcnVuQmVmb3JlVW5sb2FkQ29uZmly
bVBhbmVsV2l0aE1lc3NhZ2UoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIEJTVFIsIElXZWJGcmFt
ZSosIF9PdXRfIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRM
aXN0ZW5lcihfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lciopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChfSW5fb3B0XyBJV2ViVmlldyos
IF9Jbl9vcHRfIElQcm9wZXJ0eUJhZyosIFVJTlQpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjb250ZXh0TWVudUl0ZW1zRm9yRWxl
bWVudChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElQcm9wZXJ0eUJhZyosIF9Jbl8gSE1F
TlUsIF9PdXRfIEhNRU5VKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW0oX0luX29wdF8g
SVdlYlZpZXcqLCBVSU5ULCBCT09MLCBfT3V0XyBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNob3VsZFBlcmZvcm1BY3Rp
b24oX0luX29wdF8gSVdlYlZpZXcqLCBVSU5ULCBVSU5UKSB7IHJldHVybiBFX05PVElNUEw7IH0K
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTWFza0ZvckRyYWdnaW5nSW5mbyhfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElEYXRh
T2JqZWN0KiwgX0luX29wdF8gV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKikgeyByZXR1cm4gRV9O
T1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKF9Jbl9vcHRfIElXZWJWaWV3KiwgV2ViRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLCBfSW5fb3B0XyBJRGF0YU9iamVjdCopIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkcmFnU291cmNlQWN0aW9u
TWFza0ZvclBvaW50KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBMUFBPSU5ULCBfT3V0XyBXZWJE
cmFnU291cmNlQWN0aW9uKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihfSW5fb3B0
XyBJV2ViVmlldyosIFdlYkRyYWdTb3VyY2VBY3Rpb24sIF9Jbl8gTFBQT0lOVCwgX0luX29wdF8g
SURhdGFPYmplY3QqLCBfQ09NX091dHB0cl9vcHRfIElEYXRhT2JqZWN0KiopOwotICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChfSW5f
b3B0XyBJV2ViVmlldyosIHZvaWQqLCBJUHJvcGVydHlCYWcqKSB7IHJldHVybiBFX05PVElNUEw7
IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgaGFzQ3VzdG9tTWVudUlt
cGxlbWVudGF0aW9uKF9PdXRfIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdHJhY2tDdXN0b21Qb3B1cE1lbnUoX0luX29w
dF8gSVdlYlZpZXcqLCBfSW5fIEhNRU5VLCBfSW5fIExQUE9JTlQpIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBtZWFzdXJlQ3VzdG9t
TWVudUl0ZW0oSVdlYlZpZXcqLCB2b2lkKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRyYXdDdXN0b21NZW51SXRlbShJV2ViVmll
dyosIHZvaWQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgYWRkQ3VzdG9tTWVudURyYXdpbmdEYXRhKF9Jbl9vcHRfIElXZWJWaWV3
KiwgX0luXyBITUVOVSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGNsZWFuVXBDdXN0b21NZW51RHJhd2luZ0RhdGEoX0luX29wdF8g
SVdlYlZpZXcqLCBfSW5fIEhNRU5VKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2FuVGFrZUZvY3VzKF9Jbl9vcHRfIElXZWJWaWV3
KiwgQk9PTCwgX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0YWtlRm9jdXMoX0luX29wdF8gSVdlYlZpZXcqLCBC
T09MKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgcmVnaXN0ZXJVbmRvV2l0aFRhcmdldChfSW5fb3B0XyBJV2ViVW5kb1RhcmdldCos
IF9Jbl8gQlNUUiwgX0luX29wdF8gSVVua25vd24qKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlQWxsQWN0aW9uc1dpdGhU
YXJnZXQoX0luX29wdF8gSVdlYlVuZG9UYXJnZXQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QWN0aW9uVGl0bGUoX0luXyBC
U1RSKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgdW5kbygpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSByZWRvKCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhblVuZG8oX091dF8gQk9PTCopIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBj
YW5SZWRvKF9PdXRfIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcHJpbnRGcmFtZShfSW5fb3B0XyBJV2ViVmlldyosIF9J
bl9vcHRfIElXZWJGcmFtZSopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBmdHBEaXJlY3RvcnlUZW1wbGF0ZVBhdGgoX0luX29wdF8g
SVdlYlZpZXcqLCBfX2RlcmVmX29wdF9vdXQgQlNUUiopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJWaWV3SGVhZGVySGVpZ2h0
KF9Jbl9vcHRfIElXZWJWaWV3KiwgX091dF8gZmxvYXQqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld0Zvb3RlckhlaWdodChfSW5fb3B0XyBJV2ViVmlldyos
IF9PdXRfIGZsb2F0Kik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRy
YXdIZWFkZXJJblJlY3QoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fIFJFQ1QqLCBVTE9OR19QVFIp
OwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkcmF3Rm9vdGVySW5SZWN0
KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luXyBSRUNUKiwgVUxPTkdfUFRSLCBVSU5ULCBVSU5UKTsK
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViVmlld1ByaW50aW5nTWFy
Z2luUmVjdChfSW5fb3B0XyBJV2ViVmlldyosIF9PdXRfIFJFQ1QqKTsKLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2FuUnVuTW9kYWwoX0luX29wdF8gSVdlYlZpZXcqLCBf
T3V0XyBCT09MKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNyZWF0
ZU1vZGFsRGlhbG9nKF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdF8gSVdlYlVSTFJlcXVlc3Qq
LCBfQ09NX091dHB0cl9vcHRfIElXZWJWaWV3KiopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBydW5Nb2RhbChfSW5fb3B0XyBJV2ViVmlldyopOwotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBpc01lbnVCYXJWaXNpYmxlKF9Jbl9vcHRfIElXZWJW
aWV3KiwgX091dF8gQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRNZW51QmFyVmlzaWJsZShfSW5fb3B0XyBJV2ViVmll
dyosIEJPT0wpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBydW5EYXRhYmFzZVNpemVMaW1pdFByb21wdChfSW5fb3B0XyBJV2ViVmll
dyosIF9Jbl8gQlNUUiwgX0luX29wdF8gSVdlYkZyYW1lKiwgX091dF8gQk9PTCopIHsgcmV0dXJu
IEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYWlu
dEN1c3RvbVNjcm9sbGJhcihfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gSERDLCBSRUNULCBXZWJT
Y3JvbGxCYXJDb250cm9sU2l6ZSwgV2ViU2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBXZWJTY3JvbGxi
YXJDb250cm9sUGFydCwgQk9PTCwgZmxvYXQsIGZsb2F0LCBXZWJTY3JvbGxiYXJDb250cm9sUGFy
dE1hc2spIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBwYWludEN1c3RvbVNjcm9sbENvcm5lcihfSW5fb3B0XyBJV2ViVmlldyosIF9J
bl8gSERDLCBSRUNUKSB7IHJldHVybiBFX05PVElNUEw7IH0KLQotcHJpdmF0ZToKLSAgICBVTE9O
RyBtX3JlZkNvdW50IHsgMCB9OwotICAgIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cmIG1fY2xp
ZW50OwotICAgIEhXTkQgbV9tb2RhbERpYWxvZ1BhcmVudCB7IG51bGxwdHIgfTsKLX07Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVn
YXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMWRmMTRjNzI0MDE2ZjVmZWZmZjA5NmJl
YzVlOThjZTQyNDk5ZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5j
bHVkZSAic3RkYWZ4LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKLQotI2lu
Y2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJL
aXRDT01BUEkuaD4KLSNpbmNsdWRlIDxjb21pcC5oPgotI2luY2x1ZGUgPGNvbW1jdHJsLmg+Ci0j
aW5jbHVkZSA8Y29tbWRsZy5oPgotI2luY2x1ZGUgPG9iamJhc2UuaD4KLSNpbmNsdWRlIDxzaGx3
YXBpLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHdpbmluZXQuaD4KLQotSFJFU1VM
VCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwg
X0NPTV9PdXRwdHJfIHZvaWQqKiBwcHZPYmplY3QpCi17Ci0gICAgaWYgKCFwcHZPYmplY3QpCi0g
ICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnBwdk9iamVjdCA9IG51bGxwdHI7Ci0gICAg
aWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSkKLSAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2Ug
aWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSkpCi0gICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqPih0
aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOwotCi0gICAgQWRk
UmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLVVMT05HIFJlc291cmNlTG9hZERlbGVnYXRl
OjpBZGRSZWYoKQotewotICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0KLVVMT05HIFJlc291
cmNlTG9hZERlbGVnYXRlOjpSZWxlYXNlKCkKLXsKLSAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVm
Q291bnQ7Ci0gICAgaWYgKCFuZXdSZWYpCi0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIHJldHVy
biBuZXdSZWY7Ci19Ci0KLUhSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmlkZW50aWZpZXJG
b3JJbml0aWFsUmVxdWVzdChfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHRfIElXZWJVUkxSZXF1
ZXN0KiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
Ci17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxl
Z2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZywg
X0luX29wdF8gSVdlYlVSTFJlcXVlc3QqLCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9uc2UqLCBfSW5f
b3B0XyBJV2ViRGF0YVNvdXJjZSosIF9DT01fT3V0cHRyX29wdF8gSVdlYlVSTFJlcXVlc3QqKiBy
ZXN1bHQpCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBSZXNvdXJjZUxv
YWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKF9Jbl9vcHRfIElX
ZWJWaWV3KiwgdW5zaWduZWQgbG9uZywgX0luX29wdF8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKiBjaGFsbGVuZ2UsIF9Jbl9vcHRfIElXZWJEYXRhU291cmNlKikKLXsKLSAgICBDT01Q
dHI8SVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyPiBzZW5kZXI7Ci0gICAgaWYg
KCFjaGFsbGVuZ2UgfHwgRkFJTEVEKGNoYWxsZW5nZS0+c2VuZGVyKCZzZW5kZXIpKSkKLSAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIENPTVB0cjxJV2ViVVJMUHJvdGVjdGlvblNwYWNlPiBw
cm90ZWN0aW9uU3BhY2U7Ci0gICAgaWYgKEZBSUxFRChjaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFj
ZSgmcHJvdGVjdGlvblNwYWNlKSkpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICBCU1RS
IHJlYWxtOwotICAgIGlmIChGQUlMRUQocHJvdGVjdGlvblNwYWNlLT5yZWFsbSgmcmVhbG0pKSkK
LSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIGlmIChhdXRvIGNyZWRlbnRpYWwgPSBhc2tD
cmVkZW50aWFsKG1fY2xpZW50LT5od25kKCksIHN0ZDo6d3N0cmluZyhyZWFsbSkpKSB7Ci0gICAg
ICAgIENPTVB0cjxJV2ViVVJMQ3JlZGVudGlhbD4gd2tDcmVkZW50aWFsOwotICAgICAgICBpZiAo
RkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYlVSTENyZWRlbnRpYWwsIDAsIElJ
RF9JV2ViVVJMQ3JlZGVudGlhbCwgKHZvaWQqKikmd2tDcmVkZW50aWFsKSkpCi0gICAgICAgICAg
ICByZXR1cm4gRV9GQUlMOwotICAgICAgICB3a0NyZWRlbnRpYWwtPmluaXRXaXRoVXNlcihfYnN0
cl90KGNyZWRlbnRpYWwtPnVzZXJuYW1lLmNfc3RyKCkpLCBfYnN0cl90KGNyZWRlbnRpYWwtPnBh
c3N3b3JkLmNfc3RyKCkpLCBXZWJVUkxDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKTsK
LQotICAgICAgICBzZW5kZXItPnVzZUNyZWRlbnRpYWwod2tDcmVkZW50aWFsLmdldCgpLCBjaGFs
bGVuZ2UpOwotICAgICAgICByZXR1cm4gU19PSzsKLSAgICB9Ci0KLSAgICByZXR1cm4gRV9GQUlM
OwotfQotCi1IUkVTVUxUIFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRDYW5jZWxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcsIF9Jbl9vcHRf
IElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSosIF9Jbl9vcHRfIElXZWJEYXRhU291cmNl
KikKLXsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFJlc291cmNlTG9hZERl
bGVnYXRlOjpkaWRSZWNlaXZlUmVzcG9uc2UoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBs
b25nLCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9uc2UqLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSop
Ci17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxl
Z2F0ZTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25l
ZCBsb25nLCBVSU5ULCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopCi17Ci0gICAgcmV0dXJuIEVf
Tk9USU1QTDsKLX0KLQotSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkRmluaXNoTG9h
ZGluZ0Zyb21EYXRhU291cmNlKF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1Q
TDsKLX0KLQotSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkRmFpbExvYWRpbmdXaXRo
RXJyb3IoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIF9Jbl9v
cHRfIElXZWJFcnJvciosIF9Jbl9vcHRfIElXZWJEYXRhU291cmNlKikKLXsKLSAgICByZXR1cm4g
RV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFJlc291cmNlTG9hZERlbGVnYXRlOjpwbHVnSW5GYWls
ZWRXaXRoRXJyb3IoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBfSW5f
b3B0XyBJV2ViRGF0YVNvdXJjZSopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIGIvVG9v
bHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVmYjk3MjIyMDYyZGEzOGVkZGExMGJkN2UyMTBlZjgyYjlkMjEyZjUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
OSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoK
LSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0q
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBSZXNvdXJjZUxv
YWREZWxlZ2F0ZV9oCi0jZGVmaW5lIFJlc291cmNlTG9hZERlbGVnYXRlX2gKLQotI2luY2x1ZGUg
PFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KLQotY2xhc3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dzsKLQotY2xhc3MgUmVzb3VyY2VMb2FkRGVsZWdhdGUgOiBwdWJsaWMgSVdlYlJlc291cmNlTG9h
ZERlbGVnYXRlIHsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZUxvYWREZWxlZ2F0ZShXZWJLaXRMZWdh
Y3lCcm93c2VyV2luZG93KiBjbGllbnQpCi0gICAgICAgIDogbV9jbGllbnQoY2xpZW50KSB7IH0K
LQotICAgIC8vIElVbmtub3duCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2
T2JqZWN0KTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwot
ICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOwotCi0gICAgLy8g
SVdlYlJlc291cmNlTG9hZERlbGVnYXRlCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChfSW5fb3B0XyBJV2ViVmlldyosIF9J
bl9vcHRfIElXZWJVUkxSZXF1ZXN0KiwgX0luX29wdF8gSVdlYkRhdGFTb3VyY2UqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSB3aWxsU2VuZFJlcXVlc3QoX0luX29wdF8gSVdlYlZpZXcqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIF9Jbl9vcHRfIElXZWJVUkxSZXF1ZXN0KiwgX0luX29wdF8gSVdlYlVSTFJlc3BvbnNl
KiByZWRpcmVjdFJlc3BvbnNlLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSosIF9DT01fT3V0cHRy
X29wdF8gSVdlYlVSTFJlcXVlc3QqKiBuZXdSZXF1ZXN0KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKF9Jbl9v
cHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBfSW5fb3B0XyBJV2ViVVJM
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UqLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopOwotICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
X0luX29wdF8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKiwgX0luX29wdF8gSVdlYkRh
dGFTb3VyY2UqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVj
ZWl2ZVJlc3BvbnNlKF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9uc2UqLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopOwot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlQ29udGVudExl
bmd0aChfSW5fb3B0XyBJV2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgVUlOVCBs
ZW5ndGgsIF9Jbl9vcHRfIElXZWJEYXRhU291cmNlKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZShfSW5fb3B0XyBJ
V2ViVmlldyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgX0luX29wdF8gIElXZWJEYXRhU291
cmNlKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxMb2Fk
aW5nV2l0aEVycm9yKF9Jbl9vcHRfIElXZWJWaWV3KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBfSW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopOwotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwbHVnSW5GYWlsZWRXaXRoRXJyb3IoX0lu
X29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBfSW5fb3B0XyBJV2ViRGF0YVNv
dXJjZSopOwotCi1wcml2YXRlOgotICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07Ci0gICAgV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdyogbV9jbGllbnQ7Ci19OwotCi0jZW5kaWYgLy8gUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3du
bG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3dubG9hZERlbGVn
YXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzMmUxMWM1MmU1YzY4MzBk
MjVjN2EyYmMyZmZlNDM4YzQ5MzdjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0q
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwot
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA5MSkKLQotI2luY2x1ZGUgInN0ZGFmeC5oIgot
I2luY2x1ZGUgIldlYkRvd25sb2FkRGVsZWdhdGUuaCIKLQotI2luY2x1ZGUgIldlYktpdExlZ2Fj
eUJyb3dzZXJXaW5kb3cuaCIKLSNpbmNsdWRlIDxzaGxvYmouaD4KLQotV2ViRG93bmxvYWREZWxl
Z2F0ZTo6V2ViRG93bmxvYWREZWxlZ2F0ZShXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBjbGll
bnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVdlYkRvd25sb2FkRGVsZWdhdGU6
On5XZWJEb3dubG9hZERlbGVnYXRlKCkKLXsKLX0KLQotSFJFU1VMVCBXZWJEb3dubG9hZERlbGVn
YXRlOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoq
IHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLQotICAgIGlmIChJc0VxdWFsR1VJRChy
aWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdl
YkRvd25sb2FkRGVsZWdhdGUqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlk
LCBJSURfSVdlYkRvd25sb2FkRGVsZWdhdGUpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SVdlYkRvd25sb2FkRGVsZWdhdGUqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBFX05PSU5URVJGQUNFOwotCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19
Ci0KLVVMT05HIFdlYkRvd25sb2FkRGVsZWdhdGU6OkFkZFJlZigpCi17Ci0gICAgcmV0dXJuICsr
bV9yZWZDb3VudDsKLX0KLQotVUxPTkcgV2ViRG93bmxvYWREZWxlZ2F0ZTo6UmVsZWFzZSgpCi17
Ci0gICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAg
ICAgICBkZWxldGUgdGhpczsKLSAgICByZXR1cm4gbmV3UmVmOwotfQotCi1IUkVTVUxUIFdlYkRv
d25sb2FkRGVsZWdhdGU6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKF9J
bl9vcHRfIElXZWJEb3dubG9hZCogZG93bmxvYWQsIF9Jbl8gQlNUUiBmaWxlbmFtZSkKLXsKLSAg
ICBpZiAoIWRvd25sb2FkKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgd2NoYXJf
dCBkZXNrdG9wRGlyZWN0b3J5W01BWF9QQVRIXTsKLSAgICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVy
UGF0aFcoMCwgQ1NJRExfREVTS1RPUCwgMCwgMCwgZGVza3RvcERpcmVjdG9yeSkpKQotICAgICAg
ICByZXR1cm4gRV9GQUlMOwotCi0gICAgX2JzdHJfdCBkZXN0aW5hdGlvbiA9IF9ic3RyX3QoZGVz
a3RvcERpcmVjdG9yeSkgKyBMIlxcIiArIDo6UGF0aEZpbmRGaWxlTmFtZVcoZmlsZW5hbWUpOwot
Ci0gICAgaWYgKDo6UGF0aEZpbGVFeGlzdHMoZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4g
RV9GQUlMOwotCi0gICAgZG93bmxvYWQtPnNldERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCBUUlVF
KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJEb3dubG9hZERlbGVnYXRlOjpk
aWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRv
d25sb2FkLCBfSW5fb3B0XyBJV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UqIGNoYWxsZW5n
ZSkKLXsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFdlYkRvd25sb2FkRGVs
ZWdhdGU6OmRpZENyZWF0ZURlc3RpbmF0aW9uKF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93bmxv
YWQsIF9Jbl8gQlNUUiBkZXN0aW5hdGlvbikKLXsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQot
Ci1IUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZEZhaWxXaXRoRXJyb3IoX0luX29wdF8g
SVdlYkRvd25sb2FkKiBkb3dubG9hZCwgX0luX29wdF8gSVdlYkVycm9yKiBlcnJvcikKLXsKLSAg
ICBpZiAoIWRvd25sb2FkKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgZG93bmxv
YWQtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJEb3dubG9h
ZERlbGVnYXRlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoX0luX29wdF8gSVdl
YkRvd25sb2FkKiBkb3dubG9hZCwgX0luX29wdF8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKiBjaGFsbGVuZ2UpCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBX
ZWJEb3dubG9hZERlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKF9Jbl9vcHRfIElXZWJE
b3dubG9hZCogZG93bmxvYWQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gRV9OT1RJ
TVBMOwotfQotCi1IUkVTVUxUIFdlYkRvd25sb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNwb25z
ZShfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25sb2FkLCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9u
c2UqIHJlc3BvbnNlKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLUhSRVNVTFQgV2Vi
RG93bmxvYWREZWxlZ2F0ZTo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoX0luX29w
dF8gSVdlYkRvd25sb2FkKiBkb3dubG9hZCwgX0luXyBCU1RSIGVuY29kaW5nVHlwZSwgX091dF8g
Qk9PTCogc2hvdWxkRGVjb2RlKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLUhSRVNV
TFQgV2ViRG93bmxvYWREZWxlZ2F0ZTo6d2lsbFJlc3VtZVdpdGhSZXNwb25zZShfSW5fb3B0XyBJ
V2ViRG93bmxvYWQqIGRvd25sb2FkLCBfSW5fb3B0XyBJV2ViVVJMUmVzcG9uc2UqIHJlc3BvbnNl
LCBsb25nIGxvbmcgZnJvbUJ5dGUpCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJF
U1VMVCBXZWJEb3dubG9hZERlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QoX0luX29wdF8gSVdlYkRv
d25sb2FkKiBkb3dubG9hZCwgX0luX29wdF8gSVdlYk11dGFibGVVUkxSZXF1ZXN0KiByZXF1ZXN0
LAotICAgIF9Jbl9vcHRfIElXZWJVUkxSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSwgX0NPTV9P
dXRwdHJfb3B0XyBJV2ViTXV0YWJsZVVSTFJlcXVlc3QqKiBmaW5hbFJlcXVlc3QpCi17Ci0gICAg
aWYgKCFmaW5hbFJlcXVlc3QpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmZpbmFs
UmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBX
ZWJEb3dubG9hZERlbGVnYXRlOjpkaWRCZWdpbihfSW5fb3B0XyBJV2ViRG93bmxvYWQqIGRvd25s
b2FkKQotewotICAgIGlmICghZG93bmxvYWQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0K
LSAgICBkb3dubG9hZC0+QWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQg
V2ViRG93bmxvYWREZWxlZ2F0ZTo6ZGlkRmluaXNoKF9Jbl9vcHRfIElXZWJEb3dubG9hZCogZG93
bmxvYWQpCi17Ci0gICAgaWYgKCFkb3dubG9hZCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
LQotICAgIGRvd25sb2FkLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5oIGIvVG9vbHMv
TWluaUJyb3dzZXIvd2luL1dlYkRvd25sb2FkRGVsZWdhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWExODFhYTI4OWEyY2UxNmFiOWM1ZjcxNTMxNjhjODVkODlhMWFkOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAs
MCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaWZuZGVmIFdlYkRvd25sb2FkRGVsZWdhdGVf
aAotI2RlZmluZSBXZWJEb3dubG9hZERlbGVnYXRlX2gKLQotI2luY2x1ZGUgPFdlYktpdExlZ2Fj
eS9XZWJLaXQuaD4KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+Ci0KLWNs
YXNzIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c7Ci0KLWNsYXNzIFdlYkRvd25sb2FkRGVsZWdh
dGUgOiBwdWJsaWMgSVdlYkRvd25sb2FkRGVsZWdhdGUgewotcHVibGljOgotICAgIFdlYkRvd25s
b2FkRGVsZWdhdGUoV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgY2xpZW50KTsKLSAgICB2aXJ0
dWFsIH5XZWJEb3dubG9hZERlbGVnYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJf
IHZvaWQqKiBwcHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
QWRkUmVmKCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7
Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoX0luX29wdF8gSVdlYkRvd25sb2FkKiwgX0luXyBCU1RS
IGZpbGVuYW1lKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoX0luX29wdF8gSVdlYkRvd25sb2FkKiwgX0luX29w
dF8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKik7Ci0gICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZENyZWF0ZURlc3RpbmF0aW9uKF9Jbl9vcHRfIElXZWJEb3du
bG9hZCosIF9Jbl8gQlNUUiBkZXN0aW5hdGlvbik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGRpZEZhaWxXaXRoRXJyb3IoX0luX29wdF8gSVdlYkRvd25sb2FkKiwgX0lu
X29wdF8gSVdlYkVycm9yKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViRG93bmxvYWQq
LCBfSW5fb3B0XyBJV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UqKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChfSW5fb3B0
XyBJV2ViRG93bmxvYWQqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlUmVzcG9uc2UoX0luX29wdF8gSVdlYkRvd25sb2Fk
KiwgX0luX29wdF8gSVdlYlVSTFJlc3BvbnNlKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIHNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKF9Jbl9vcHRfIElX
ZWJEb3dubG9hZCosIF9Jbl8gQlNUUiBlbmNvZGluZ1R5cGUsIF9PdXRfIEJPT0wqIHNob3VsZERl
Y29kZSk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxSZXN1bWVX
aXRoUmVzcG9uc2UoX0luX29wdF8gSVdlYkRvd25sb2FkKiwgX0luX29wdF8gSVdlYlVSTFJlc3Bv
bnNlKiwgbG9uZyBsb25nIGZyb21CeXRlKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgd2lsbFNlbmRSZXF1ZXN0KF9Jbl9vcHRfIElXZWJEb3dubG9hZCosIF9Jbl9vcHRf
IElXZWJNdXRhYmxlVVJMUmVxdWVzdCosIF9Jbl9vcHRfIElXZWJVUkxSZXNwb25zZSogcmVkaXJl
Y3RSZXNwb25zZSwgX0NPTV9PdXRwdHJfb3B0XyBJV2ViTXV0YWJsZVVSTFJlcXVlc3QqKiBmaW5h
bFJlcXVlc3QpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRCZWdp
bihfSW5fb3B0XyBJV2ViRG93bmxvYWQqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZGlkRmluaXNoKF9Jbl9vcHRfIElXZWJEb3dubG9hZCopOwotCi1wcml2YXRlOgot
ICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07Ci0gICAgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dyYgbV9jbGllbnQ7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9XZWJLaXRCcm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJL
aXRCcm93c2VyV2luZG93LmNwcAppbmRleCA3MWM0M2U2NjkxMzk1Yjc4NzE0MGNhMDYwMzU1MGFh
YzFjODUxM2Q1Li42ZDA2MTZkMWY0N2U4N2E1NTNkZDFlZjBiYTg0Y2ViM2MxMDE5YjJhIDEwMDY0
NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5jcHAKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwCkBAIC0yNSw4
ICsyNSw4IEBACiAjaW5jbHVkZSAic3RkYWZ4LmgiCiAjaW5jbHVkZSAiV2ViS2l0QnJvd3Nlcldp
bmRvdy5oIgogCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgogI2luY2x1ZGUgIk1pbmlCcm93c2Vy
TGliUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dE
SVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmg+
CkBAIC0xMDcsNyArMTA3LDcgQEAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGNyZWF0ZVdLVVJMKGNv
bnN0IHN0ZDo6d3N0cmluZyYgc3RyKQogICAgIHJldHVybiBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHV0ZjguZGF0YSgpKSk7CiB9CiAKLVJlZjxCcm93c2VyV2luZG93PiBXZWJL
aXRCcm93c2VyV2luZG93OjpjcmVhdGUoQnJvd3NlcldpbmRvd0NsaWVudCYgY2xpZW50LCBIV05E
IG1haW5XbmQsIGJvb2wpCitSZWY8V2ViS2l0QnJvd3NlcldpbmRvdz4gV2ViS2l0QnJvd3Nlcldp
bmRvdzo6Y3JlYXRlKEJyb3dzZXJXaW5kb3dDbGllbnQmIGNsaWVudCwgSFdORCBtYWluV25kKQog
ewogICAgIGF1dG8gY29uZiA9IGFkb3B0V0soV0tQYWdlQ29uZmlndXJhdGlvbkNyZWF0ZSgpKTsK
IApAQCAtMjU0LDYgKzI1NCw1MCBAQCB2b2lkIFdlYktpdEJyb3dzZXJXaW5kb3c6Om9wZW5Qcm94
eVNldHRpbmdzKCkKIAogfQogCit2b2lkIFdlYktpdEJyb3dzZXJXaW5kb3c6OnNldFVzZXJBZ2Vu
dChVSU5UIG1lbnVJRCkKK3sKKyAgICBfYnN0cl90IGN1c3RvbVVzZXJBZ2VudDsKKworICAgIHN3
aXRjaCAobWVudUlEKSB7CisgICAgY2FzZSBJRE1fVUFfREVGQVVMVDoKKyAgICAgICAgLy8gU2V0
IHRvIG51bGwgdXNlciBhZ2VudAorICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9TQUZB
Ukk6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKE1hY2ludG9zaDsg
SW50ZWwgTWFjIE9TIFggMTBfMTNfNikgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtl
IEdlY2tvKSBWZXJzaW9uLzExLjEuMiBTYWZhcmkvNjA1LjEuMTUiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TX0lQSE9ORToKKyAgICAgICAgY3VzdG9tVXNlckFn
ZW50ID0gTCJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDExXzRfMSBsaWtlIE1h
YyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24v
MTEuMCBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMSI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSURNX1VBX1NBRkFSSV9JT1NfSVBBRDoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJN
b3ppbGxhLzUuMCAoaVBhZDsgQ1BVIGlQaG9uZSBPUyAxMV80XzEgbGlrZSBNYWMgT1MgWCkgQXBw
bGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzExLjAgTW9iaWxl
LzE1RTE0OCBTYWZhcmkvNjA0LjEiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9J
RV8xMToKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBO
VCAxMC4wOyBXaW42NDsgeDY0OyBUcmlkZW50LzcuMDsgcnY6MTEuMCkgbGlrZSBHZWNrbyI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0VER0U6CisgICAgICAgIGN1c3RvbVVzZXJB
Z2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVX
ZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzU4LjAuMzAyOS4xMTAgU2Fm
YXJpLzUzNy4zNiBFZGdlLzE2LjE2Mjk5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1f
VUFfQ0hST01FX01BQzoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAo
TWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC81MzcuMzYgKEtI
VE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjcuMC4zMzk2Ljk5IFNhZmFyaS81MzcuMzYiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9DSFJPTUVfV0lOOgorICAgICAgICBjdXN0b21V
c2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFw
cGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS82Ny4wLjMzOTYuOTkg
U2FmYXJpLzUzNy4zNiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0ZJUkVGT1hf
TUFDOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7
IEludGVsIE1hYyBPUyBYIDEwLjEzOyBydjo2MS4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzYx
LjAiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9GSVJFRk9YX1dJTjoKKyAgICAg
ICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXT1c2
NDsgcnY6NjEuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82MS4wIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJRE1fVUFfT1RIRVI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKDAp
OyAvLyBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7Cit9CisKIHZvaWQgV2ViS2l0
QnJvd3NlcldpbmRvdzo6c2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVBU3RyaW5nKQogewog
ICAgIGF1dG8gcGFnZSA9IFdLVmlld0dldFBhZ2UobV92aWV3LmdldCgpKTsKQEAgLTM4NCw3ICs0
MjgsNyBAQCBib29sIFdlYktpdEJyb3dzZXJXaW5kb3c6OmNhblRydXN0U2VydmVyQ2VydGlmaWNh
dGUoV0tQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdAogV0tQYWdlUmVmIFdlYktpdEJyb3dzZXJX
aW5kb3c6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYgY29uZmlndXJhdGlvbiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb24s
IFdLV2luZG93RmVhdHVyZXNSZWYgd2luZG93RmVhdHVyZXMsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCiB7CiAgICAgYXV0byYgbmV3V2luZG93ID0gTWFpbldpbmRvdzo6Y3JlYXRlKCkubGVha1Jl
ZigpOwotICAgIGF1dG8gZmFjdG9yeSA9IFtjb25maWd1cmF0aW9uXShCcm93c2VyV2luZG93Q2xp
ZW50JiBjbGllbnQsIEhXTkQgbWFpblduZCwgYm9vbCkgLT4gYXV0byB7CisgICAgYXV0byBmYWN0
b3J5ID0gW2NvbmZpZ3VyYXRpb25dKEJyb3dzZXJXaW5kb3dDbGllbnQmIGNsaWVudCwgSFdORCBt
YWluV25kKSAtPiBhdXRvIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViS2l0QnJv
d3NlcldpbmRvdyhjbGllbnQsIGNvbmZpZ3VyYXRpb24sIG1haW5XbmQpKTsKICAgICB9OwogICAg
IGJvb2wgb2sgPSBuZXdXaW5kb3cuaW5pdChmYWN0b3J5LCBoSW5zdCk7CmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuaAppbmRleCBlOGVmZTNjMjgzOGE5YmI1NTNh
MWM1OWZmNmMxZmIyNWQyZjk2NTAwLi42ZWVjNDQ1MWU2ZDM2YmZhMjQ4MzUyNTQ1NGMyYzgyNWU1
M2E4NDc0IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3Nlcldp
bmRvdy5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93LmgK
QEAgLTI0LDQyICsyNCw0NiBAQAogICovCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJyb3dz
ZXJXaW5kb3cuaCIKKyNpbmNsdWRlICJCcm93c2VyV2luZG93Q2xpZW50LmgiCiAjaW5jbHVkZSAi
Q29tbW9uLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0L1dlYktpdDJfQy5oPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLWNsYXNzIFdlYktpdEJyb3dz
ZXJXaW5kb3cgOiBwdWJsaWMgQnJvd3NlcldpbmRvdyB7CitjbGFzcyBXZWJLaXRCcm93c2VyV2lu
ZG93IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0QnJvd3NlcldpbmRvdz4gewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8QnJvd3NlcldpbmRvdz4gY3JlYXRlKEJyb3dzZXJXaW5kb3dDbGllbnQm
LCBIV05EIG1haW5XbmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZpZXcgPSBmYWxzZSk7CisgICAgc3Rh
dGljIFJlZjxXZWJLaXRCcm93c2VyV2luZG93PiBjcmVhdGUoQnJvd3NlcldpbmRvd0NsaWVudCYs
IEhXTkQgbWFpblduZCk7CiAKLXByaXZhdGU6Ci0gICAgV2ViS2l0QnJvd3NlcldpbmRvdyhCcm93
c2VyV2luZG93Q2xpZW50JiwgV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgSFdORCBtYWluV25kKTsK
KyAgICB+V2ViS2l0QnJvd3NlcldpbmRvdygpIHsgfTsKKworICAgIEhSRVNVTFQgaW5pdCgpOwor
ICAgIEhXTkQgaHduZCgpOwogCi0gICAgSFJFU1VMVCBpbml0KCkgb3ZlcnJpZGU7Ci0gICAgSFdO
RCBod25kKCkgb3ZlcnJpZGU7CisgICAgSFJFU1VMVCBsb2FkVVJMKGNvbnN0IEJTVFImIHVybCk7
CisgICAgdm9pZCByZWxvYWQoKTsKKyAgICB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQo
VUlOVCBtZW51SUQpOworICAgIHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQpOwor
ICAgIHZvaWQgc2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpOwogCi0gICAg
SFJFU1VMVCBsb2FkVVJMKGNvbnN0IEJTVFImIHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxv
YWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoVUlOVCBt
ZW51SUQpIG92ZXJyaWRlOwotICAgIHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFi
bGUpIG92ZXJyaWRlOworICAgIHZvaWQgcHJpbnQoKTsKKyAgICB2b2lkIGxhdW5jaEluc3BlY3Rv
cigpOworICAgIHZvaWQgb3BlblByb3h5U2V0dGluZ3MoKTsKIAotICAgIHZvaWQgcHJpbnQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGxhdW5jaEluc3BlY3RvcigpIG92ZXJyaWRlOwotICAgIHZvaWQg
b3BlblByb3h5U2V0dGluZ3MoKSBvdmVycmlkZTsKKyAgICBfYnN0cl90IHVzZXJBZ2VudCgpOwor
ICAgIHZvaWQgc2V0VXNlckFnZW50KFVJTlQgbWVudUlEKTsKKyAgICB2b2lkIHNldFVzZXJBZ2Vu
dChfYnN0cl90Jik7CiAKLSAgICBfYnN0cl90IHVzZXJBZ2VudCgpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0VXNlckFnZW50KF9ic3RyX3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dMYXllclRy
ZWUoKTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBkaWFsb2cpOwogCi0gICAgdm9p
ZCBzaG93TGF5ZXJUcmVlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhX
TkQgZGlhbG9nKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc2V0Wm9vbSgpOworICAgIHZvaWQgem9v
bUluKCk7CisgICAgdm9pZCB6b29tT3V0KCk7CiAKLSAgICB2b2lkIHJlc2V0Wm9vbSgpIG92ZXJy
aWRlOwotICAgIHZvaWQgem9vbUluKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB6b29tT3V0KCkgb3Zl
cnJpZGU7Citwcml2YXRlOgorICAgIFdlYktpdEJyb3dzZXJXaW5kb3coQnJvd3NlcldpbmRvd0Ns
aWVudCYsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIEhXTkQgbWFpblduZCk7CiAKICAgICB2b2lk
IHVwZGF0ZVByb3h5U2V0dGluZ3MoKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmODFhOWJlMzlmM2Y2ZDg4YTViYTNhNDE4YWY1ZDVlODRjOGZjMTQ2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzLTIwMTUgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBC
cmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
InN0ZGFmeC5oIgotI2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKLQotI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIkNvbW1vbi5oIgotI2lu
Y2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJNaW5pQnJvd3Nlcldl
Ykhvc3QuaCIKLSNpbmNsdWRlICJQcmludFdlYlVJRGVsZWdhdGUuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldlYkRvd25sb2FkRGVsZWdhdGUuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRD
T01BUEkuaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNs
dWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0j
aW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYg
VVNFKENGKQotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9DRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZy5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWZsb2F0IGRldmljZVNjYWxlRmFjdG9y
Rm9yV2luZG93KEhXTkQpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IG1heEhpc3RvcnlTaXplID0g
MTA7Ci0KLVJlZjxCcm93c2VyV2luZG93PiBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpjcmVh
dGUoQnJvd3NlcldpbmRvd0NsaWVudCYgY2xpZW50LCBIV05EIG1haW5XbmQsIGJvb2wgdXNlTGF5
ZXJlZFdlYlZpZXcpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdyhjbGllbnQsIG1haW5XbmQsIHVzZUxheWVyZWRXZWJWaWV3KSk7Ci19Ci0KLVdl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3coQnJvd3Nl
cldpbmRvd0NsaWVudCYgY2xpZW50LCBIV05EIG1haW5XbmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZp
ZXcpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2hNYWluV25kKG1haW5XbmQpCi0g
ICAgLCBtX3VzZUxheWVyZWRXZWJWaWV3KHVzZUxheWVyZWRXZWJWaWV3KQotewotfQotCi1XZWJL
aXRMZWdhY3lCcm93c2VyV2luZG93Ojp+V2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdygpCi17Ci0g
ICAgbV9kZWZhdWx0Tm90aWZpY2F0aW9uQ2VudGVyLT5yZW1vdmVPYnNlcnZlcihtX25vdGlmaWNh
dGlvbk9ic2VydmVyLCBfYnN0cl90KFdlYlZpZXdQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlm
aWNhdGlvbiksIG1fd2ViVmlldyk7Ci0gICAgbV9kZWZhdWx0Tm90aWZpY2F0aW9uQ2VudGVyLT5y
ZW1vdmVPYnNlcnZlcihtX25vdGlmaWNhdGlvbk9ic2VydmVyLCBfYnN0cl90KFdlYlZpZXdQcm9n
cmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKSwgbV93ZWJWaWV3KTsKLX0KLQotSFJFU1VMVCBXZWJL
aXRMZWdhY3lCcm93c2VyV2luZG93Ojppbml0KCkKLXsKLSAgICBIUkVTVUxUIGhyID0gV2ViS2l0
Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJWaWV3LCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBtX3dlYlZpZXdQcml2YXRlID0g
bV93ZWJWaWV3OwotICAgIGlmICghbV93ZWJWaWV3UHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIGhy
OwotCi0gICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBf
X3V1aWRvZihtX3dlYkhpc3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViSGlz
dG9yeS5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm4gaHI7Ci0KLSAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkNvcmVT
dGF0aXN0aWNzLCAwLCBfX3V1aWRvZihtX3N0YXRpc3RpY3MpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJm1fc3RhdGlzdGljcy5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNl
KENMU0lEX1dlYkNhY2hlLCAwLCBfX3V1aWRvZihtX3dlYkNhY2hlKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZtX3dlYkNhY2hlLkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYgKEZBSUxF
RChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIElXZWJOb3RpZmljYXRpb25DZW50ZXJQ
dHIgbm90aWZpY2F0aW9uQ2VudGVyOwotICAgIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xT
SURfV2ViTm90aWZpY2F0aW9uQ2VudGVyLCAwLCBfX3V1aWRvZihub3RpZmljYXRpb25DZW50ZXIp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vdGlmaWNhdGlvbkNlbnRlci5HZXRJbnRlcmZh
Y2VQdHIoKSkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAg
ICBociA9IG5vdGlmaWNhdGlvbkNlbnRlci0+ZGVmYXVsdENlbnRlcigmbV9kZWZhdWx0Tm90aWZp
Y2F0aW9uQ2VudGVyLkdldEludGVyZmFjZVB0cigpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIGhyOwotCi0gICAgaWYgKCFzZWVkSW5pdGlhbERlZmF1bHRQcmVmZXJlbmNl
cygpKQotICAgICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgaWYgKCFzZXRUb0RlZmF1bHRQcmVm
ZXJlbmNlcygpKQotICAgICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgaWYgKCFzZXRDYWNoZUZv
bGRlcigpKQotICAgICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgYXV0byB3ZWJIb3N0ID0gbmV3
IE1pbmlCcm93c2VyV2ViSG9zdCh0aGlzKTsKLQotICAgIGhyID0gbV93ZWJWaWV3LT5zZXRGcmFt
ZUxvYWREZWxlZ2F0ZSh3ZWJIb3N0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIGhyOwotCi0gICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT5zZXRGcmFtZUxvYWREZWxlZ2F0
ZVByaXZhdGUod2ViSG9zdCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBo
cjsKLQotICAgIG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIgPSB3ZWJIb3N0OwotICAgIGhyID0gbV9k
ZWZhdWx0Tm90aWZpY2F0aW9uQ2VudGVyLT5hZGRPYnNlcnZlcihtX25vdGlmaWNhdGlvbk9ic2Vy
dmVyLCBfYnN0cl90KFdlYlZpZXdQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbiks
IG1fd2ViVmlldyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIGhyID0gbV9kZWZhdWx0Tm90aWZpY2F0aW9uQ2VudGVyLT5hZGRPYnNlcnZlcihtX25vdGlm
aWNhdGlvbk9ic2VydmVyLCBfYnN0cl90KFdlYlZpZXdQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0
aW9uKSwgbV93ZWJWaWV3KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhy
OwotCi0gICAgaHIgPSBzZXRVSURlbGVnYXRlKG5ldyBQcmludFdlYlVJRGVsZWdhdGUoKnRoaXMp
KTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0g
c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKG5ldyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoKnRoaXMp
KTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0g
c2V0UmVzb3VyY2VMb2FkRGVsZWdhdGUobmV3IFJlc291cmNlTG9hZERlbGVnYXRlKHRoaXMpKTsK
LSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBzZXRE
b3dubG9hZERlbGVnYXRlKG5ldyBXZWJEb3dubG9hZERlbGVnYXRlKCp0aGlzKSk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIFJFQ1QgY2xpZW50UmVjdDsK
LSAgICA6OkdldENsaWVudFJlY3QobV9oTWFpblduZCwgJmNsaWVudFJlY3QpOwotICAgIGlmICh1
c2VzTGF5ZXJlZFdlYlZpZXcoKSkKLSAgICAgICAgY2xpZW50UmVjdCA9IHsgc193aW5kb3dQb3Np
dGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24ueCArIHNfd2luZG93
U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5IH07Ci0KLSAgICBo
ciA9IHByZXBhcmVWaWV3cyhtX2hNYWluV25kLCBjbGllbnRSZWN0KTsKLSAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldygp
KQotICAgICAgICBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3coKTsKLQotICAgIHJldHVybiBocjsK
LX0KLQotYm9vbCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZXRDYWNoZUZvbGRlcigpCi17
Ci0gICAgX2JzdHJfdCBhcHBEYXRhRm9sZGVyOwotICAgIGlmICghZ2V0QXBwRGF0YUZvbGRlcihh
cHBEYXRhRm9sZGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXBwRGF0YUZvbGRl
ciArPSBMIlxcY2FjaGUiOwotICAgIHdlYkNhY2hlKCktPnNldENhY2hlRm9sZGVyKGFwcERhdGFG
b2xkZXIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUhSRVNVTFQgV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdzo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50
UmVjdCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQot
ICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cobWFpblduZCk7Ci0gICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0gbV93ZWJWaWV3
LT5pbml0V2l0aEZyYW1lKGNsaWVudFJlY3QsIDAsIDApOwotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IG1fd2ViVmlld1ByaXZhdGUtPnNldFRyYW5z
cGFyZW50KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7Ci0KLSAgICBociA9IG1fd2ViVmlld1ByaXZhdGUtPnNldFVzZXNMYXllcmVk
V2luZG93KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7Ci0KLSAgICBociA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdXaW5kb3coJm1f
dmlld1duZCk7Ci0KLSAgICByZXR1cm4gaHI7Ci19Ci0KLXN0YXRpYyBXTkRQUk9DIGdEZWZXZWJL
aXRQcm9jOwotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB2aWV3V25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICBjYXNlIFdNX05DSElUVEVTVDoKLSAgICAgICAgY29uc3RleHBy
IGludCBkcmFnQmFySGVpZ2h0ID0gMzA7Ci0gICAgICAgIFJFQ1Qgd2luZG93OwotICAgICAgICA6
OkdldFdpbmRvd1JlY3QoaFduZCwgJndpbmRvdyk7Ci0gICAgICAgIC8vIEZvciB0ZXN0aW5nIG91
ciB0cmFuc3BhcmVudCB3aW5kb3csIHdlIG5lZWQgYSByZWdpb24gdG8gdXNlIGFzIGEgaGFuZGxl
IGZvcgotICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxk
IGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUgd2hhdCdzCi0gICAgICAgIC8vIHVuZGVy
IHRoZSBtb3VzZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4g
YXJiaXRyYXJ5Ci0gICAgICAgIC8vIDMwIGxvZ2ljYWwgcGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9m
IHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gV2hlbiB3ZSBhcmUgd2l0aGluIHRoaXMgYmFkLCByZXR1cm4gSFRfQ0FQVElP
TiB0byB0ZWxsIFdpbmRvd3Mgd2Ugd2FudCB0bwotICAgICAgICAvLyB0cmVhdCB0aGlzIHJlZ2lv
biBhcyBpZiBpdCB3ZXJlIHRoZSB0aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93LgotICAgICAg
ICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOwotICAgICAgICBmbG9hdCBzY2FsZWREcmFnQmFySGVp
Z2h0RmFjdG9yID0gZHJhZ0JhckhlaWdodCAqIFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KGhXbmQpOwotICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRv
dy50b3AgKyBzY2FsZWREcmFnQmFySGVpZ2h0RmFjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiBI
VENBUFRJT047Ci0gICAgfQotICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhnRGVmV2ViS2l0UHJv
YywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQotCi12b2lkIFdlYktpdExlZ2Fj
eUJyb3dzZXJXaW5kb3c6OnN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCi17Ci0jaWYgZGVmaW5l
ZCBfTV9BTUQ2NCB8fCBkZWZpbmVkIF9XSU42NAotICAgIGdEZWZXZWJLaXRQcm9jID0gcmVpbnRl
cnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdpbmRvd0xvbmdQdHIobV92aWV3V25kLCBHV0xQX1dO
RFBST0MpKTsKLSAgICA6OlNldFdpbmRvd0xvbmdQdHIobV92aWV3V25kLCBHV0xQX1dORFBST0Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHZpZXdXbmRQcm9jKSk7Ci0jZWxzZQotICAgIGdE
ZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdpbmRvd0xvbmco
bV92aWV3V25kLCBHV0xfV05EUFJPQykpOwotICAgIDo6U2V0V2luZG93TG9uZyhtX3ZpZXdXbmQs
IEdXTF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPih2aWV3V25kUHJvYykpOwot
I2VuZGlmCi19Ci0KLUhSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0VUlEZWxl
Z2F0ZShJV2ViVUlEZWxlZ2F0ZSogdWlEZWxlZ2F0ZSkKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3
LT5zZXRVSURlbGVnYXRlKHVpRGVsZWdhdGUpOwotfQotCi1IUkVTVUxUIFdlYktpdExlZ2FjeUJy
b3dzZXJXaW5kb3c6OnNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShJQWNjZXNzaWJpbGl0eURlbGVn
YXRlKiBhY2Nlc3NpYmlsaXR5RGVsZWdhdGUpCi17Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0
QWNjZXNzaWJpbGl0eURlbGVnYXRlKGFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSk7Ci19Ci0KLUhSRVNV
TFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0UmVzb3VyY2VMb2FkRGVsZWdhdGUoSVdl
YlJlc291cmNlTG9hZERlbGVnYXRlKiByZXNvdXJjZUxvYWREZWxlZ2F0ZSkKLXsKLSAgICByZXR1
cm4gbV93ZWJWaWV3LT5zZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShyZXNvdXJjZUxvYWREZWxlZ2F0
ZSk7Ci19Ci0KLUhSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0RG93bmxvYWRE
ZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9hZERlbGVnYXRlKQotewotICAg
IHJldHVybiBtX3dlYlZpZXctPnNldERvd25sb2FkRGVsZWdhdGUoZG93bmxvYWREZWxlZ2F0ZSk7
Ci19Ci0KLUlXZWJGcmFtZVB0ciBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjptYWluRnJhbWUo
KQotewotICAgIElXZWJGcmFtZVB0ciBmcmFtZVB0cjsKLSAgICBtX3dlYlZpZXctPm1haW5GcmFt
ZSgmZnJhbWVQdHIuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIHJldHVybiBmcmFtZVB0cjsKLX0K
LQotYm9vbCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZWVkSW5pdGlhbERlZmF1bHRQcmVm
ZXJlbmNlcygpCi17Ci0gICAgSVdlYlByZWZlcmVuY2VzUHRyIHRtcFByZWZlcmVuY2VzOwotICAg
IGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViUHJlZmVyZW5jZXMsIDAs
IElJRF9JV2ViUHJlZmVyZW5jZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdG1wUHJlZmVy
ZW5jZXMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChGQUlMRUQodG1wUHJlZmVyZW5jZXMtPnN0YW5kYXJkUHJlZmVyZW5jZXMoJm1fc3RhbmRh
cmRQcmVmZXJlbmNlcy5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93
OjpzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpCi17Ci0gICAgbV9wcmVmc1ByaXZhdGUgPSBtX3N0
YW5kYXJkUHJlZmVyZW5jZXM7Ci0gICAgaWYgKCFtX3ByZWZzUHJpdmF0ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0jaWYgVVNFKENHKQotICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0
QVZGb3VuZGF0aW9uRW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoVFJVRSk7Ci0jZW5kaWYKLQotICAgIG1fcHJlZnNQcml2
YXRlLT5zZXRGdWxsU2NyZWVuRW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0
U2hvd0RlYnVnQm9yZGVycyhGQUxTRSk7Ci0gICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3dSZXBh
aW50Q291bnRlcihGQUxTRSk7Ci0gICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3VsZEludmVydENv
bG9ycyhGQUxTRSk7Ci0KLSAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseShUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoVFJVRSk7Ci0gICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHMoRkFMU0UpOwotICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoVFJVRSk7Ci0KLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChUUlVFKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgdm9pZCB1cGRhdGVNZW51SXRlbUZvckhpc3RvcnlJdGVtKEhNRU5VIG1lbnUsIElXZWJI
aXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0sIGludCBjdXJyZW50SGlzdG9yeUl0ZW0pCi17Ci0gICAg
VUlOVCBtZW51SUQgPSBJRE1fSElTVE9SWV9MSU5LMCArIGN1cnJlbnRIaXN0b3J5SXRlbTsKLQot
ICAgIE1FTlVJVEVNSU5GTyBtZW51SXRlbUluZm8geyB9OwotICAgIG1lbnVJdGVtSW5mby5jYlNp
emUgPSBzaXplb2YoTUVOVUlURU1JTkZPKTsKLSAgICBtZW51SXRlbUluZm8uZk1hc2sgPSBNSUlN
X1RZUEU7Ci0gICAgbWVudUl0ZW1JbmZvLmZUeXBlID0gTUZUX1NUUklORzsKLQotICAgIF9ic3Ry
X3QgdGl0bGU7Ci0gICAgaGlzdG9yeUl0ZW0udGl0bGUodGl0bGUuR2V0QWRkcmVzcygpKTsKLSAg
ICBtZW51SXRlbUluZm8uZHdUeXBlRGF0YSA9IHN0YXRpY19jYXN0PExQV1NUUj4odGl0bGUpOwot
Ci0gICAgOjpTZXRNZW51SXRlbUluZm8obWVudSwgbWVudUlELCBGQUxTRSwgJm1lbnVJdGVtSW5m
byk7Ci0gICAgOjpFbmFibGVNZW51SXRlbShtZW51LCBtZW51SUQsIE1GX0JZQ09NTUFORCB8IE1G
X0VOQUJMRUQpOwotfQotCi12b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNob3dMYXN0
VmlzaXRlZFNpdGVzKElXZWJWaWV3JiB3ZWJWaWV3KQotewotICAgIEhNRU5VIG1lbnUgPSA6Okdl
dE1lbnUobV9oTWFpblduZCk7Ci0KLSAgICBJV2ViQmFja0ZvcndhcmRMaXN0UHRyIGJhY2tGb3J3
YXJkTGlzdDsKLSAgICBIUkVTVUxUIGhyID0gd2ViVmlldy5iYWNrRm9yd2FyZExpc3QoJmJhY2tG
b3J3YXJkTGlzdC5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGludCBjYXBhY2l0eSA9IDA7Ci0gICAgaHIgPSBiYWNrRm9yd2Fy
ZExpc3QtPmNhcGFjaXR5KCZjYXBhY2l0eSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCBiYWNrQ291bnQgPSAwOwotICAgIGhyID0gYmFja0ZvcndhcmRM
aXN0LT5iYWNrTGlzdENvdW50KCZiYWNrQ291bnQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBVSU5UIGJhY2tTZXR0aW5nID0gTUZfQllDT01NQU5EIHwgKChi
YWNrQ291bnQpID8gTUZfRU5BQkxFRCA6IE1GX0RJU0FCTEVEKTsKLSAgICA6OkVuYWJsZU1lbnVJ
dGVtKG1lbnUsIElETV9ISVNUT1JZX0JBQ0tXQVJELCBiYWNrU2V0dGluZyk7Ci0KLSAgICBpbnQg
Zm9yd2FyZENvdW50ID0gMDsKLSAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RD
b3VudCgmZm9yd2FyZENvdW50KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVUlOVCBmb3J3YXJkU2V0dGluZyA9IE1GX0JZQ09NTUFORCB8ICgoZm9yd2FyZENv
dW50KSA/IE1GX0VOQUJMRUQgOiBNRl9ESVNBQkxFRCk7Ci0gICAgOjpFbmFibGVNZW51SXRlbSht
ZW51LCBJRE1fSElTVE9SWV9GT1JXQVJELCBmb3J3YXJkU2V0dGluZyk7Ci0KLSAgICBJV2ViSGlz
dG9yeUl0ZW1QdHIgY3VycmVudEl0ZW07Ci0gICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmN1cnJl
bnRJdGVtKCZjdXJyZW50SXRlbS5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRCho
cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhyID0gbV93ZWJIaXN0b3J5LT5hZGRJdGVtcygx
LCAmY3VycmVudEl0ZW0uR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJV2ViSGlzdG9yeVByaXZhdGVQdHIgd2ViSGlzdG9yeSht
X3dlYkhpc3RvcnkpOwotICAgIGlmICghd2ViSGlzdG9yeSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IHRvdGFsTGlzdENvdW50ID0gMDsKLSAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1z
KCZ0b3RhbExpc3RDb3VudCwgMCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faGlzdG9yeUl0ZW1zLnJlc2l6ZSh0b3RhbExpc3RDb3VudCk7Ci0KLSAgICBz
dGQ6OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW0qPiBoaXN0b3J5VG9Mb2FkKHRvdGFsTGlzdENvdW50
KTsKLSAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgaGlzdG9y
eVRvTG9hZC5kYXRhKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChhdXRvJiBjdXIgOiBoaXN0b3J5VG9Mb2FkKSB7
Ci0gICAgICAgIG1faGlzdG9yeUl0ZW1zW2ldLkF0dGFjaChjdXIpOwotICAgICAgICArK2k7Ci0g
ICAgfQotCi0gICAgaW50IGFsbEl0ZW1zT2Zmc2V0ID0gMDsKLSAgICBpZiAodG90YWxMaXN0Q291
bnQgPiBtYXhIaXN0b3J5U2l6ZSkKLSAgICAgICAgYWxsSXRlbXNPZmZzZXQgPSB0b3RhbExpc3RD
b3VudCAtIG1heEhpc3RvcnlTaXplOwotCi0gICAgaW50IGN1cnJlbnRIaXN0b3J5SXRlbSA9IDA7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2hpc3RvcnlJdGVtcy5zaXplKCkgJiYgKGFsbEl0
ZW1zT2Zmc2V0ICsgY3VycmVudEhpc3RvcnlJdGVtKSA8IG1faGlzdG9yeUl0ZW1zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHVwZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0obWVudSwgKihtX2hp
c3RvcnlJdGVtc1thbGxJdGVtc09mZnNldCArIGN1cnJlbnRIaXN0b3J5SXRlbV0pLCBjdXJyZW50
SGlzdG9yeUl0ZW0pOwotICAgICAgICArK2N1cnJlbnRIaXN0b3J5SXRlbTsKLSAgICB9Ci0KLSAg
ICAvLyBIaWRlIGFueSBoaXN0b3J5IHdlIGFyZW4ndCB1c2luZyB5ZXQuCi0gICAgZm9yIChpbnQg
aSA9IGN1cnJlbnRIaXN0b3J5SXRlbTsgaSA8IG1heEhpc3RvcnlTaXplOyArK2kpCi0gICAgICAg
IDo6RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfTElOSzAgKyBpLCBNRl9CWUNPTU1B
TkQgfCBNRl9ESVNBQkxFRCk7Ci19Ci0KLXZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6
bGF1bmNoSW5zcGVjdG9yKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlld1ByaXZhdGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghU1VDQ0VFREVEKG1fd2ViVmlld1ByaXZhdGUtPmluc3BlY3Rv
cigmbV9pbnNwZWN0b3IuR2V0SW50ZXJmYWNlUHRyKCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pbnNwZWN0b3ItPnNob3coKTsKLX0KLQotdm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2lu
ZG93OjpvcGVuUHJveHlTZXR0aW5ncygpCi17Ci19Ci0KLXZvaWQgV2ViS2l0TGVnYWN5QnJvd3Nl
cldpbmRvdzo6bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChVSU5UIG1lbnVJRCkKLXsKLSAgICBp
ZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQk9PTCB3ZW50QmFja09yRm9y
d2FyZCA9IEZBTFNFOwotICAgIGlmIChJRE1fSElTVE9SWV9GT1JXQVJEID09IG1lbnVJRCkKLSAg
ICAgICAgbV93ZWJWaWV3LT5nb0ZvcndhcmQoJndlbnRCYWNrT3JGb3J3YXJkKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fd2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFja09yRm9yd2FyZCk7Ci19Ci0KLXZv
aWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6bmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51
SUQpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBo
aXN0b3J5RW50cnkgPSBtZW51SUQgLSBJRE1fSElTVE9SWV9MSU5LMDsKLSAgICBpZiAoaGlzdG9y
eUVudHJ5ID4gbV9oaXN0b3J5SXRlbXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
V2ViSGlzdG9yeUl0ZW1QdHIgZGVzaXJlZEhpc3RvcnlJdGVtID0gbV9oaXN0b3J5SXRlbXNbaGlz
dG9yeUVudHJ5XTsKLSAgICBpZiAoIWRlc2lyZWRIaXN0b3J5SXRlbSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQk9PTCBzdWNjZWVkZWQgPSBGQUxTRTsKLSAgICBtX3dlYlZpZXctPmdvVG9CYWNr
Rm9yd2FyZEl0ZW0oZGVzaXJlZEhpc3RvcnlJdGVtLCAmc3VjY2VlZGVkKTsKLQotICAgIF9ic3Ry
X3QgZnJhbWVVUkw7Ci0gICAgZGVzaXJlZEhpc3RvcnlJdGVtLT5VUkxTdHJpbmcoZnJhbWVVUkwu
R2V0QWRkcmVzcygpKTsKLQotICAgIG1fY2xpZW50LmFjdGl2ZVVSTENoYW5nZWQoZnJhbWVVUkwu
R2V0QlNUUigpKTsKLX0KLQotYm9vbCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpnb0JhY2so
KQotewotICAgIEJPT0wgd2VudEJhY2sgPSBGQUxTRTsKLSAgICBtX3dlYlZpZXctPmdvQmFjaygm
d2VudEJhY2spOwotICAgIHJldHVybiB3ZW50QmFjazsKLX0KLQotYm9vbCBXZWJLaXRMZWdhY3lC
cm93c2VyV2luZG93Ojpnb0ZvcndhcmQoKQotewotICAgIEJPT0wgd2VudEZvcndhcmQgPSBGQUxT
RTsKLSAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEZvcndhcmQpOwotICAgIHJldHVybiB3
ZW50Rm9yd2FyZDsKLX0KLQotSFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpsb2Fk
VVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKLXsKLSAgICBpZiAoIXBhc3NlZFVSTCkKLSAgICAg
ICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKLQotICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICBI
UkVTVUxUIGhyID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigp
KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgSVdlYk11
dGFibGVVUkxSZXF1ZXN0UHRyIHJlcXVlc3Q7Ci0gICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5j
ZShDTFNJRF9XZWJNdXRhYmxlVVJMUmVxdWVzdCwgMCwgSUlEX0lXZWJNdXRhYmxlVVJMUmVxdWVz
dCwgKHZvaWQqKikmcmVxdWVzdCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKLQotICAgIGhyID0gcmVxdWVzdC0+aW5pdFdpdGhVUkwocGFzc2VkVVJMLCBXZWJVUkxS
ZXF1ZXN0VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApOwotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBfYnN0cl90IG1ldGhvZEJTdHIoTCJHRVQiKTsKLSAg
ICBociA9IHJlcXVlc3QtPnNldEhUVFBNZXRob2QobWV0aG9kQlN0cik7Ci0gICAgaWYgKEZBSUxF
RChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0gZnJhbWUtPmxvYWRSZXF1ZXN0
KHJlcXVlc3QpOwotCi0gICAgcmV0dXJuIGhyOwotfQotCi12b2lkIFdlYktpdExlZ2FjeUJyb3dz
ZXJXaW5kb3c6OnNldFVzZXJBZ2VudChfYnN0cl90JiBjdXN0b21Vc2VyQWdlbnQpCi17Ci0gICAg
aWYgKCF3ZWJWaWV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYlZpZXcoKS0+c2V0Q3Vz
dG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudC5HZXRCU1RSKCkpOwotfQotCi1fYnN0cl90IFdl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnVzZXJBZ2VudCgpCi17Ci0gICAgX2JzdHJfdCB1c2Vy
QWdlbnQ7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3KCktPmN1c3RvbVVzZXJBZ2VudCgmdXNlckFn
ZW50LkdldEJTVFIoKSkpKQotICAgICAgICByZXR1cm4gX2JzdHJfdChMIi0gVW5rbm93biAtOiBD
YWxsIGZhaWxlZC4iKTsKLQotICAgIHJldHVybiB1c2VyQWdlbnQ7Ci19Ci0KLXZvaWQgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdzo6cmVsb2FkKCkKLXsKLSAgICBJV2ViSUJBY3Rpb25zUHRyIHdl
YkFjdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoIXdlYkFjdGlvbnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHdlYkFjdGlvbnMtPnJlbG9hZChudWxscHRyKTsKLX0KLQotdm9pZCBXZWJLaXRM
ZWdhY3lCcm93c2VyV2luZG93OjpyZXNldFpvb20oKQotewotICAgIElXZWJJQkFjdGlvbnNQdHIg
d2ViQWN0aW9ucyhtX3dlYlZpZXcpOwotICAgIGlmICghd2ViQWN0aW9ucykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgd2ViQWN0aW9ucy0+cmVzZXRQYWdlWm9vbShudWxscHRyKTsKLX0KLQotdm9p
ZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojp6b29tSW4oKQotewotICAgIElXZWJJQkFjdGlv
bnNQdHIgd2ViQWN0aW9ucyhtX3dlYlZpZXcpOwotICAgIGlmICghd2ViQWN0aW9ucykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgd2ViQWN0aW9ucy0+em9vbVBhZ2VJbihudWxscHRyKTsKLX0KLQot
dm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojp6b29tT3V0KCkKLXsKLSAgICBJV2ViSUJB
Y3Rpb25zUHRyIHdlYkFjdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoIXdlYkFjdGlvbnMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHdlYkFjdGlvbnMtPnpvb21QYWdlT3V0KG51bGxwdHIpOwot
fQotCi12b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNob3dMYXllclRyZWUoKQotewot
ICAgIElXZWJWaWV3UHJpdmF0ZTNQdHIgd2ViVmlld1ByaXZhdGUobV93ZWJWaWV3KTsKLSAgICBp
ZiAoIXdlYlZpZXdQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdXRwdXREZWJ1Z1N0
cmluZyhMIkNVUlJFTlQgVFJFRTpcbiIpOwotCi0gICAgX2JzdHJfdCBsYXllclRyZWVCc3RyOwot
ICAgIGlmIChGQUlMRUQod2ViVmlld1ByaXZhdGUtPmxheWVyVHJlZUFzU3RyaW5nKGxheWVyVHJl
ZUJzdHIuR2V0QWRkcmVzcygpKSkpCi0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiICAgIEZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgbGF5ZXIgdHJlZS5cbiIpOwotICAgIGVsc2UKLSAgICAgICAg
T3V0cHV0RGVidWdTdHJpbmcobGF5ZXJUcmVlQnN0cik7Ci0gICAgT3V0cHV0RGVidWdTdHJpbmco
TCJcblxuIik7Ci19Ci0KLXN0YXRpYyBCT09MIENBTExCQUNLIEFib3J0UHJvYyhIREMgaERDLCBp
bnQgRXJyb3IpCi17Ci0gICAgTVNHIG1zZzsKLSAgICB3aGlsZSAoOjpQZWVrTWVzc2FnZSgmbXNn
LCAwLCAwLCAwLCBQTV9SRU1PVkUpKSB7Ci0gICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNn
KTsKLSAgICAgICAgOjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyBIREMgZ2V0UHJpbnRlckRDKCkKLXsKLSAgICBQUklOVERMRyBw
ZGxnOwotICAgIG1lbXNldCgmcGRsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7Ci0gICAgcGRsZy5s
U3RydWN0U2l6ZSA9IHNpemVvZihQUklOVERMRyk7Ci0gICAgcGRsZy5GbGFncyA9IFBEX1BSSU5U
U0VUVVAgfCBQRF9SRVRVUk5EQzsKLQotICAgIDo6UHJpbnREbGcoJnBkbGcpOwotCi0gICAgcmV0
dXJuIHBkbGcuaERDOwotfQotCi1zdGF0aWMgdm9pZCBpbml0RG9jU3RydWN0KERPQ0lORk8qIGRp
LCBjb25zdCB3Y2hhcl90KiBkb2NuYW1lKQotewotICAgIG1lbXNldChkaSwgMCwgc2l6ZW9mKERP
Q0lORk8pKTsKLSAgICBkaS0+Y2JTaXplID0gc2l6ZW9mKERPQ0lORk8pOwotICAgIGRpLT5scHN6
RG9jTmFtZSA9IGRvY25hbWU7Ci19Ci0KLXZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6
cHJpbnQoKQotewotICAgIEhEQyBwcmludERDID0gZ2V0UHJpbnRlckRDKCk7Ci0gICAgaWYgKCFw
cmludERDKSB7Ci0gICAgICAgIDo6TWVzc2FnZUJveCgwLCBMIkVycm9yIGNyZWF0aW5nIHByaW50
aW5nIERDIiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICg6OlNldEFib3J0UHJvYyhwcmludERDLCBBYm9ydFByb2MpID09
IFNQX0VSUk9SKSB7Ci0gICAgICAgIDo6TWVzc2FnZUJveCgwLCBMIkVycm9yIHNldHRpbmcgdXAg
QWJvcnRQcm9jIiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIElXZWJGcmFtZVB0ciBmcmFtZSA9IG1haW5GcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIElXZWJGcmFtZVByaXZhdGVQdHIg
ZnJhbWVQcml2YXRlKGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZnJhbWVQcml2YXRlLT5zZXRJblByaW50aW5nTW9kZShUUlVFLCBwcmludERD
KTsKLQotICAgIFVJTlQgcGFnZUNvdW50ID0gMDsKLSAgICBmcmFtZVByaXZhdGUtPmdldFByaW50
ZWRQYWdlQ291bnQocHJpbnREQywgJnBhZ2VDb3VudCk7Ci0KLSAgICBET0NJTkZPIGRpOwotICAg
IGluaXREb2NTdHJ1Y3QoJmRpLCBMIldlYktpdCBEb2MiKTsKLSAgICA6OlN0YXJ0RG9jKHByaW50
REMsICZkaSk7Ci0KLSAgICAvLyBGSVhNRTogTmVlZCBDb3JlR3JhcGhpY3MgaW1wbGVtZW50YXRp
b24KLSAgICB2b2lkKiBncmFwaGljc0NvbnRleHQgPSAwOwotICAgIGZvciAoc2l6ZV90IHBhZ2Ug
PSAxOyBwYWdlIDw9IHBhZ2VDb3VudDsgKytwYWdlKSB7Ci0gICAgICAgIDo6U3RhcnRQYWdlKHBy
aW50REMpOwotICAgICAgICBmcmFtZVByaXZhdGUtPnNwb29sUGFnZXMocHJpbnREQywgcGFnZSwg
cGFnZSwgZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgOjpFbmRQYWdlKHByaW50REMpOwotICAg
IH0KLQotICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoRkFMU0UsIHByaW50REMp
OwotCi0gICAgOjpFbmREb2MocHJpbnREQyk7Ci0gICAgOjpEZWxldGVEQyhwcmludERDKTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBmaWVsZCwgX2Jz
dHJfdCB2YWx1ZSkKLXsKLSAgICA6OlNldERsZ0l0ZW1UZXh0KGRpYWxvZywgZmllbGQsIHZhbHVl
KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBmaWVs
ZCwgVUlOVCB2YWx1ZSkKLXsKLSAgICBTdHJpbmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVt
YmVyKHZhbHVlKTsKLQotICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2
YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQo
SFdORCBkaWFsb2csIFVJTlQgZmllbGQsIElQcm9wZXJ0eUJhZ1B0ciBzdGF0aXN0aWNzLCBjb25z
dCBfYnN0cl90JiBrZXkpCi17Ci0gICAgX3ZhcmlhbnRfdCB2YXI7Ci0gICAgVl9WVCgmdmFyKSA9
IFZUX1VJODsKLSAgICBpZiAoRkFJTEVEKHN0YXRpc3RpY3MtPlJlYWQoa2V5LCAmdmFyLkdldFZB
UklBTlQoKSwgbnVsbHB0cikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFyKTsKLSAgICBTdHJpbmcgdmFsdWVTdHIgPSBXVEY6OlN0
cmluZzo6bnVtYmVyKHZhbHVlKTsKLQotICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBmaWVsZCwg
X2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLSNpZiBVU0UoQ0YpCi1zdGF0
aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBDRkRpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBVSU5UJiB0b3RhbCkKLXsKLSAgICBD
Rk51bWJlclJlZiBjb3VudE51bSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKLSAgICBpZiAoIWNvdW50TnVtKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgY291bnQgPSAwOwotICAgIENGTnVtYmVyR2V0VmFsdWUoY291
bnROdW0sIGtDRk51bWJlckludFR5cGUsICZjb3VudCk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgZmllbGQsIHN0YXRpY19jYXN0PFVJTlQ+KGNvdW50KSk7Ci0gICAgdG90YWwgKz0gY291
bnQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojp1cGRhdGVT
dGF0aXN0aWNzKEhXTkQgZGlhbG9nKQotewotICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciB3ZWJD
b3JlU3RhdGlzdGljcyA9IHN0YXRpc3RpY3MoKTsKLSAgICBpZiAoIXdlYkNvcmVTdGF0aXN0aWNz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljczsKLSAg
ICBIUkVTVUxUIGhyID0gd2ViQ29yZVN0YXRpc3RpY3MtPm1lbW9yeVN0YXRpc3RpY3MoJnN0YXRp
c3RpY3MuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGYXN0TWFsbG9jLgotICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJ
RENfUkVTRVJWRURfVk0sIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIik7
Ci0gICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DT01NSVRURURfVk0sIHN0YXRpc3RpY3Ms
ICJGYXN0TWFsbG9jQ29tbWl0dGVkVk1CeXRlcyIpOwotICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfRlJFRV9MSVNUX0JZVEVTLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0
ZXMiKTsKLQotICAgIC8vIFdlYkNvcmUgQ2FjaGUuCi0jaWYgVVNFKENGKQotICAgIElXZWJDYWNo
ZVB0ciB3ZWJDYWNoZSA9IHRoaXMtPndlYkNhY2hlKCk7Ci0KLSAgICBpbnQgZGljdENvdW50ID0g
NjsKLSAgICBJUHJvcGVydHlCYWcqIGNhY2hlRGljdFs2XSA9IHsgMCB9OwotICAgIGlmIChGQUlM
RUQod2ViQ2FjaGUtPnN0YXRpc3RpY3MoJmRpY3RDb3VudCwgY2FjaGVEaWN0KSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gY291bnRzLCBz
aXplcywgbGl2ZVNpemVzLCBkZWNvZGVkU2l6ZXMsIHB1cmdhYmxlU2l6ZXM7Ci0gICAgY291bnRz
LmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNo
ZURpY3RbMF0pKTsKLSAgICBzaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlv
bmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzFdKSk7Ci0gICAgbGl2ZVNpemVzLmFkb3B0UmVm
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMl0p
KTsKLSAgICBkZWNvZGVkU2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFszXSkpOwotICAgIHB1cmdhYmxlU2l6ZXMuYWRvcHRS
ZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFs0
XSkpOwotCi0gICAgc3RhdGljIENGU3RyaW5nUmVmIGltYWdlc0tleSA9IENGU1RSKCJpbWFnZXMi
KTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc3R5bGVzaGVldHNLZXkgPSBDRlNUUigic3R5bGUg
c2hlZXRzIik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIHhzbEtleSA9IENGU1RSKCJ4c2wiKTsK
LSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2NyaXB0c0tleSA9IENGU1RSKCJzY3JpcHRzIik7Ci0K
LSAgICBpZiAoY291bnRzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxPYmplY3RzID0gMDsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfT0JKRUNUX0NPVU5ULCBjb3VudHMt
PmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbE9iamVjdHMpOwotICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0NTU19PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgp
LCBzdHlsZXNoZWV0c0tleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19YU0xfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5
LCB0b3RhbE9iamVjdHMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19P
QkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbE9iamVj
dHMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX09CSkVDVF9DT1VO
VCwgdG90YWxPYmplY3RzKTsKLSAgICB9Ci0KLSAgICBpZiAoc2l6ZXMpIHsKLSAgICAgICAgVUlO
VCB0b3RhbEJ5dGVzID0gMDsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFH
RVNfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxCeXRlcyk7Ci0g
ICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0JZVEVTLCBzaXplcy0+ZGljdGlv
bmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfWFNMX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRv
dGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19CWVRFUywg
c2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxCeXRlcyk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfQllURVMsIHRvdGFsQnl0ZXMpOwotICAgIH0K
LQotICAgIGlmIChsaXZlU2l6ZXMpIHsKLSAgICAgICAgVUlOVCB0b3RhbExpdmVCeXRlcyA9IDA7
Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0xJVkVfQ09VTlQsIGxp
dmVTaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5k
aWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlv
bmFyeSgpLCB4c2xLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlw
dHNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19UT1RBTF9MSVZFX0NPVU5ULCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgfQotCi0gICAgaWYgKGRl
Y29kZWRTaXplcykgewotICAgICAgICBVSU5UIHRvdGFsRGVjb2RlZCA9IDA7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXpl
cy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGlj
dGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19YU0xfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0
aW9uYXJ5KCksIHhzbEtleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCks
IHNjcmlwdHNLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfVE9UQUxfREVDT0RFRCwgdG90YWxEZWNvZGVkKTsKLSAgICB9Ci0KLSAgICBpZiAocHVy
Z2FibGVTaXplcykgewotICAgICAgICBVSU5UIHRvdGFsUHVyZ2FibGUgPSAwOwotICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxl
U2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNp
emVzLT5kaWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJs
ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXpl
cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAgICAgc2V0
V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9QVVJHRUFCTEUsIHRvdGFsUHVyZ2FibGUpOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgLy8gSmF2YVNjcmlwdCBIZWFwLgotICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfU0laRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRIZWFw
U2l6ZSIpOwotICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfRlJFRSwgc3Rh
dGlzdGljcywgIkphdmFTY3JpcHRGcmVlU2l6ZSIpOwotCi0gICAgVUlOVCBjb3VudDsKLSAgICBp
ZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCZj
b3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0pTQ19IRUFQ
X09CSkVDVFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5q
YXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0dMT0JBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7Ci0gICAgaWYg
KFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHND
b3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QUk9URUNU
RURfSlNDX0hFQVBfT0JKRUNUUywgY291bnQpOwotCi0gICAgLy8gRm9udCBhbmQgR2x5cGggQ2Fj
aGVzLgotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRh
Q291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxf
Rk9OVF9PQkpFQ1RTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGlj
cy0+Y2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0lOQUNUSVZFX0ZPTlRfT0JKRUNUUywgY291bnQpOwotICAgIGlm
IChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmdseXBoUGFnZUNvdW50KCZjb3VudCkpKQot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0dMWVBIX1BBR0VTLCBjb3VudCk7Ci0K
LSAgICAvLyBTaXRlIEljb24gRGF0YWJhc2UuCi0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3Rh
dGlzdGljcy0+aWNvblBhZ2VVUkxNYXBwaW5nQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfUEFHRV9VUkxfTUFQUElOR1MsIGNvdW50KTsKLSAgICBpZiAo
U1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5pY29uUmV0YWluZWRQYWdlVVJMQ291bnQoJmNv
dW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVUQUlORURfUEFHRV9V
UkxTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJl
Y29yZENvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJ
VEVfSUNPTl9SRUNPUkRTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlz
dGljcy0+aWNvbnNXaXRoRGF0YUNvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0
KGRpYWxvZywgSURDX1NJVEVfSUNPTlNfV0lUSF9EQVRBLCBjb3VudCk7Ci19Ci0KLXZvaWQgV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBl
bmFibGUpCi17Ci0gICAgaWYgKCFzdGFuZGFyZFByZWZlcmVuY2VzKCkgfHwgIXByaXZhdGVQcmVm
ZXJlbmNlcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1lbnVJRCkgewotICAg
IGNhc2UgSURNX0FWRk9VTkRBVElPTjoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5z
ZXRBVkZvdW5kYXRpb25FbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SURNX0FDQ19DT01QT1NJVElORzoKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46Ci0gICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5z
ZXRGdWxsU2NyZWVuRW5hYmxlZChlbmFibGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElE
TV9DT01QT1NJVElOR19CT1JERVJTOgotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0
U2hvd0RlYnVnQm9yZGVycyhlbmFibGUpOwotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+
c2V0U2hvd1JlcGFpbnRDb3VudGVyKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SURNX0RFQlVHX0lORk9fTEFZRVI6Ci0gICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRT
aG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoZW5hYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRE1fSU5WRVJUX0NPTE9SUzoKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNl
dFNob3VsZEludmVydENvbG9ycyhlbmFibGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElE
TV9ESVNBQkxFX0lNQUdFUzoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoIWVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SURNX0RJU0FCTEVfU1RZTEVTOgotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoIWVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSURNX0RJU0FCTEVfSkFWQVNDUklQVDoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygp
LT5zZXRKYXZhU2NyaXB0RW5hYmxlZCghZW5hYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRE1fRElTQUJMRV9MT0NBTF9GSUxFX1JFU1RSSUNUSU9OUzoKLSAgICAgICAgcHJpdmF0ZVBy
ZWZlcmVuY2VzKCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZSk7
Ci0gICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoZW5hYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY4NGU1Y2RlMGJhYWEwOGRhYjFmYzc3NzcxZTRhNjJhMDhhNWRmNzgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKLSNp
bmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8Y29taXAuaD4KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLQot
X0NPTV9TTUFSVFBUUl9UWVBFREVGKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUsIElJRF9JQWNjZXNz
aWJpbGl0eURlbGVnYXRlKTsKLV9DT01fU01BUlRQVFJfVFlQRURFRihJV2ViQmFja0ZvcndhcmRM
aXN0LCBJSURfSVdlYkJhY2tGb3J3YXJkTGlzdCk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdl
YkNhY2hlLCBJSURfSVdlYkNhY2hlKTsKLV9DT01fU01BUlRQVFJfVFlQRURFRihJV2ViQ29yZVN0
YXRpc3RpY3MsIElJRF9JV2ViQ29yZVN0YXRpc3RpY3MpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVG
KElXZWJEYXRhU291cmNlLCBJSURfSVdlYkRhdGFTb3VyY2UpOwotX0NPTV9TTUFSVFBUUl9UWVBF
REVGKElXZWJEb3dubG9hZERlbGVnYXRlLCBJSURfSVdlYkRvd25sb2FkRGVsZWdhdGUpOwotX0NP
TV9TTUFSVFBUUl9UWVBFREVGKElXZWJGcmFtZSwgSUlEX0lXZWJGcmFtZSk7Ci1fQ09NX1NNQVJU
UFRSX1RZUEVERUYoSVdlYkZyYW1lMiwgSUlEX0lXZWJGcmFtZTIpOwotX0NPTV9TTUFSVFBUUl9U
WVBFREVGKElXZWJGcmFtZUxvYWREZWxlZ2F0ZSwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0ZSk7
Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkZyYW1lUHJpdmF0ZSwgSUlEX0lXZWJGcmFtZVBy
aXZhdGUpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJIaXN0b3J5LCBJSURfSVdlYkhpc3Rv
cnkpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJIaXN0b3J5SXRlbSwgSUlEX0lXZWJIaXN0
b3J5SXRlbSk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkhpc3RvcnlQcml2YXRlLCBJSURf
SVdlYkhpc3RvcnlQcml2YXRlKTsKLV9DT01fU01BUlRQVFJfVFlQRURFRihJV2ViSUJBY3Rpb25z
LCBJSURfSVdlYklCQWN0aW9ucyk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYkluc3BlY3Rv
ciwgSUlEX0lXZWJJbnNwZWN0b3IpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJLaXRNZXNz
YWdlTG9vcCwgSUlEX0lXZWJLaXRNZXNzYWdlTG9vcCk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYo
SVdlYk11dGFibGVVUkxSZXF1ZXN0LCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0KTsKLV9DT01f
U01BUlRQVFJfVFlQRURFRihJV2ViTm90aWZpY2F0aW9uQ2VudGVyLCBJSURfSVdlYk5vdGlmaWNh
dGlvbkNlbnRlcik7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYk5vdGlmaWNhdGlvbk9ic2Vy
dmVyLCBJSURfSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyKTsKLV9DT01fU01BUlRQVFJfVFlQRURF
RihJV2ViUHJlZmVyZW5jZXMsIElJRF9JV2ViUHJlZmVyZW5jZXMpOwotX0NPTV9TTUFSVFBUUl9U
WVBFREVGKElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzLCBJSURfSVdlYlByZWZlcmVuY2VzUHJpdmF0
ZTMpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSwgSUlE
X0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYlVJ
RGVsZWdhdGUsIElJRF9JV2ViVUlEZWxlZ2F0ZSk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdl
YlZpZXcsIElJRF9JV2ViVmlldyk7Ci1fQ09NX1NNQVJUUFRSX1RZUEVERUYoSVdlYlZpZXdQcml2
YXRlMiwgSUlEX0lXZWJWaWV3UHJpdmF0ZTIpOwotX0NPTV9TTUFSVFBUUl9UWVBFREVGKElXZWJW
aWV3UHJpdmF0ZTMsIElJRF9JV2ViVmlld1ByaXZhdGUzKTsKLQotY2xhc3MgV2ViS2l0TGVnYWN5
QnJvd3NlcldpbmRvdyA6IHB1YmxpYyBCcm93c2VyV2luZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEJyb3dzZXJXaW5kb3c+IGNyZWF0ZShCcm93c2VyV2luZG93Q2xpZW50JiwgSFdORCBt
YWluV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3ID0gZmFsc2UpOwotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGU7Ci0gICAgZnJpZW5kIGNsYXNzIE1p
bmlCcm93c2VyV2ViSG9zdDsKLSAgICBmcmllbmQgY2xhc3MgUHJpbnRXZWJVSURlbGVnYXRlOwot
ICAgIGZyaWVuZCBjbGFzcyBXZWJEb3dubG9hZERlbGVnYXRlOwotICAgIGZyaWVuZCBjbGFzcyBS
ZXNvdXJjZUxvYWREZWxlZ2F0ZTsKLQotICAgIEhSRVNVTFQgaW5pdCgpOwotICAgIEhSRVNVTFQg
cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCk7Ci0KLSAg
ICBIUkVTVUxUIGxvYWRVUkwoY29uc3QgQlNUUiYgcGFzc2VkVVJMKTsKLSAgICB2b2lkIHJlbG9h
ZCgpOwotCi0gICAgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYpOwotICAgIHZv
aWQgbGF1bmNoSW5zcGVjdG9yKCk7Ci0gICAgdm9pZCBvcGVuUHJveHlTZXR0aW5ncygpOwotICAg
IHZvaWQgbmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChVSU5UIG1lbnVJRCk7Ci0gICAgdm9pZCBu
YXZpZ2F0ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCk7Ci0gICAgYm9vbCBzZWVkSW5pdGlhbERlZmF1
bHRQcmVmZXJlbmNlcygpOwotICAgIGJvb2wgc2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMoKTsKLQot
ICAgIEhSRVNVTFQgc2V0VUlEZWxlZ2F0ZShJV2ViVUlEZWxlZ2F0ZSopOwotICAgIEhSRVNVTFQg
c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqKTsKLSAgICBI
UkVTVUxUIHNldFJlc291cmNlTG9hZERlbGVnYXRlKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSop
OwotICAgIEhSRVNVTFQgc2V0RG93bmxvYWREZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0
cik7Ci0KLSAgICBJV2ViUHJlZmVyZW5jZXNQdHIgc3RhbmRhcmRQcmVmZXJlbmNlcygpIHsgcmV0
dXJuIG1fc3RhbmRhcmRQcmVmZXJlbmNlczsgIH0KLSAgICBJV2ViUHJlZmVyZW5jZXNQcml2YXRl
M1B0ciBwcml2YXRlUHJlZmVyZW5jZXMoKSB7IHJldHVybiBtX3ByZWZzUHJpdmF0ZTsgfQotICAg
IElXZWJGcmFtZVB0ciBtYWluRnJhbWUoKTsKLSAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgc3Rh
dGlzdGljcygpIHsgcmV0dXJuIG1fc3RhdGlzdGljczsgfQotICAgIElXZWJDYWNoZVB0ciB3ZWJD
YWNoZSgpIHsgcmV0dXJuIG1fd2ViQ2FjaGU7ICB9Ci0gICAgSVdlYlZpZXdQdHIgd2ViVmlldygp
IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3dlYlZpZXc7IH0KLSAgICBib29sIHVzZXNMYXllcmVkV2ViVmlldygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlTGF5ZXJlZFdlYlZpZXc7IH0KLSAgICBib29sIGdvQmFjaygpOwotICAg
IGJvb2wgZ29Gb3J3YXJkKCk7Ci0KLSAgICB2b2lkIHNldFVzZXJBZ2VudChfYnN0cl90JiBjdXN0
b21VQVN0cmluZyk7Ci0gICAgX2JzdHJfdCB1c2VyQWdlbnQoKTsKLQotICAgIHZvaWQgcmVzZXRa
b29tKCk7Ci0gICAgdm9pZCB6b29tSW4oKTsKLSAgICB2b2lkIHpvb21PdXQoKTsKLQotICAgIHZv
aWQgc2hvd0xheWVyVHJlZSgpOwotCi0gICAgSFdORCBod25kKCkgeyByZXR1cm4gbV92aWV3V25k
OyB9Ci0KLSAgICB2b2lkIHByaW50KCk7Ci0gICAgdm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhXTkQg
ZGlhbG9nKTsKLSAgICB2b2lkIHNldFByZWZlcmVuY2UoVUlOVCBtZW51SUQsIGJvb2wgZW5hYmxl
KTsKLQotICAgIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3coQnJvd3NlcldpbmRvd0NsaWVudCYs
IEhXTkQgbWFpblduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldyk7Ci0gICAgfldlYktpdExlZ2Fj
eUJyb3dzZXJXaW5kb3coKTsKLSAgICB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpOwot
ICAgIGJvb2wgc2V0Q2FjaGVGb2xkZXIoKTsKLQotICAgIEJyb3dzZXJXaW5kb3dDbGllbnQmIG1f
Y2xpZW50OwotICAgIHN0ZDo6dmVjdG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRl
bXM7Ci0KLSAgICBJV2ViVmlld1B0ciBtX3dlYlZpZXc7Ci0gICAgSVdlYlZpZXdQcml2YXRlMlB0
ciBtX3dlYlZpZXdQcml2YXRlOwotCi0gICAgSVdlYkhpc3RvcnlQdHIgbV93ZWJIaXN0b3J5Owot
ICAgIElXZWJJbnNwZWN0b3JQdHIgbV9pbnNwZWN0b3I7Ci0gICAgSVdlYlByZWZlcmVuY2VzUHRy
IG1fc3RhbmRhcmRQcmVmZXJlbmNlczsKLSAgICBJV2ViUHJlZmVyZW5jZXNQcml2YXRlM1B0ciBt
X3ByZWZzUHJpdmF0ZTsKLSAgICBJV2ViTm90aWZpY2F0aW9uQ2VudGVyUHRyIG1fZGVmYXVsdE5v
dGlmaWNhdGlvbkNlbnRlcjsKLSAgICBJV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXJQdHIgbV9ub3Rp
ZmljYXRpb25PYnNlcnZlcjsKLQotICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciBtX3N0YXRpc3Rp
Y3M7Ci0gICAgSVdlYkNhY2hlUHRyIG1fd2ViQ2FjaGU7Ci0KLSAgICBIV05EIG1faE1haW5XbmQg
eyBudWxscHRyIH07Ci0gICAgSFdORCBtX3ZpZXdXbmQgeyBudWxscHRyIH07Ci0KLSAgICBib29s
IG1fdXNlTGF5ZXJlZFdlYlZpZXc7Ci19OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1dpbk1haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3BwCmluZGV4
IGNiNGFjOGYzMDdjNjVlYzllOGZiN2YzYjJmZGUwYzhjODk0MjU0ZmYuLjlkZWE0MGQ5NDhlY2Y1
OTlmN2E0NzNkOTdmNjIzOTNkODVhYWUxMzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9XaW5NYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAK
QEAgLTI5LDE1ICsyOSwxNiBAQAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwOTEpCiAKICNp
bmNsdWRlICJzdGRhZnguaCIKKwogI2luY2x1ZGUgIkNvbW1vbi5oIgorI2luY2x1ZGUgIk1haW5X
aW5kb3cuaCIKICNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCiAjaW5jbHVkZSAi
TWluaUJyb3dzZXJSZXBsYWNlLmgiCi0jaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dy5oIgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEkuaD4KKyNpbmNsdWRlICJX
ZWJLaXRCcm93c2VyV2luZG93LmgiCiAjaW5jbHVkZSA8d3RmL3dpbi9Tb2Z0TGlua2luZy5oPgog
Ci0jaWYgRU5BQkxFKFdFQktJVCkKLSNpbmNsdWRlICJXZWJLaXRCcm93c2VyV2luZG93LmgiCisj
aWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAj
ZW5kaWYKIAogU09GVF9MSU5LX0xJQlJBUlkodXNlcjMyKTsKQEAgLTcyLDEzICs3Myw5IEBAIGlu
dCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5fb3B0XyBISU5T
VEFOQ0UgaFByZXZJbnN0YW5jZSwKICAgICBlbHNlCiAgICAgICAgIDo6U2V0UHJvY2Vzc0RQSUF3
YXJlKCk7CiAKLSAgICBhdXRvIGZhY3RvcnkgPSBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpj
cmVhdGU7Ci0jaWYgRU5BQkxFKFdFQktJVCkKLSAgICBpZiAob3B0aW9ucy53aW5kb3dUeXBlID09
IEJyb3dzZXJXaW5kb3dUeXBlOjpXZWJLaXQpCi0gICAgICAgIGZhY3RvcnkgPSBXZWJLaXRCcm93
c2VyV2luZG93OjpjcmVhdGU7Ci0jZW5kaWYKKyAgICBhdXRvIGZhY3RvcnkgPSBXZWJLaXRCcm93
c2VyV2luZG93OjpjcmVhdGU7CiAgICAgYXV0byYgbWFpbldpbmRvdyA9IE1haW5XaW5kb3c6OmNy
ZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICBIUkVTVUxUIGhyID0gbWFpbldpbmRvdy5pbml0KGZhY3Rv
cnksIGhJbnN0LCBvcHRpb25zLnVzZXNMYXllcmVkV2ViVmlldyk7CisgICAgSFJFU1VMVCBociA9
IG1haW5XaW5kb3cuaW5pdChmYWN0b3J5LCBoSW5zdCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAg
ICAgICAgIGdvdG8gZXhpdDsKIApAQCAtOTUsMTggKzkyLDE4IEBAIGludCBXSU5BUEkgd1dpbk1h
aW4oX0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5fb3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0
YW5jZSwKIAogICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgogICAgIF9fdHJ5IHsKLSAgICAgICAg
SVdlYktpdE1lc3NhZ2VMb29wUHRyIG1lc3NhZ2VMb29wOwotCi0gICAgICAgIGhyID0gV2ViS2l0
Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViS2l0TWVzc2FnZUxvb3AsIDAsIElJRF9JV2ViS2l0TWVz
c2FnZUxvb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbWVzc2FnZUxvb3AuR2V0SW50ZXJm
YWNlUHRyKCkpKTsKLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICAgICAgbWVzc2FnZUxvb3AtPnJ1bihoQWNjZWxUYWJsZSk7Ci0KKyAgICAgICAg
d2hpbGUgKEdldE1lc3NhZ2UoJm1zZywgbnVsbHB0ciwgMCwgMCkpIHsKKyNpZiBVU0UoQ0YpCisg
ICAgICAgICAgICBDRlJ1bkxvb3BSdW5Jbk1vZGUoa0NGUnVuTG9vcERlZmF1bHRNb2RlLCAwLCB0
cnVlKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFUcmFuc2xhdGVBY2NlbGVyYXRvcihtc2cu
aHduZCwgaEFjY2VsVGFibGUsICZtc2cpKSB7CisgICAgICAgICAgICAgICAgVHJhbnNsYXRlTWVz
c2FnZSgmbXNnKTsKKyAgICAgICAgICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9IF9fZXhjZXB0KGNyZWF0ZUNyYXNoUmVwb3J0KEdl
dEV4Y2VwdGlvbkluZm9ybWF0aW9uKCkpLCBFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSKSB7IH0K
IAogZXhpdDoKLSAgICBzaHV0RG93bldlYktpdCgpOwogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9D
CiAgICAgX0NydER1bXBNZW1vcnlMZWFrcygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vc3RkYWZ4LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vc3RkYWZ4LmgK
aW5kZXggMWFlZDI0NDVlNGUwMGRmYzliOGZhOGJlZjIyMzZlMTlhYTE3ZmMyNy4uZjQxNDEzNTdl
MWE4MWI1OWIxOGY1M2VmZTQyZWVhMmE5M2E3ZmI0MSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL3N0ZGFmeC5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9zdGRhZnguaApA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgImNtYWtlY29uZmlnLmgiCiAjZW5kaWYKIAotI2Rl
ZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAgICAgICAvLyBFeGNsdWRlIHJhcmVseS11c2VkIHN0
dWZmIGZyb20gV2luZG93cyBoZWFkZXJzCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gLy8g
RXhjbHVkZSByYXJlbHktdXNlZCBzdHVmZiBmcm9tIFdpbmRvd3MgaGVhZGVycwogCiAvLyBOZWVk
ZWQgZm9yIGxpbWl0IGRlZmluZXMsIGxpa2UgSU5UTUFYX01BWCwgd2hpY2ggaXMgdXNlZCBieSB0
aGUgc3RkIEMrKyBsaWJyYXJ5CiAjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKQEAgLTY1LDcg
KzY1LDYgQEAKIC8vIDxodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi1VUy9saWJyYXJ5L2U1
ZXdiMWgzLmFzcHg+CiAjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfREVCVUcpCiAj
ZGVmaW5lIF9DUlREQkdfTUFQX0FMTE9DCi0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8
Y3J0ZGJnLmg+CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Ub29scy9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBiZGQ4YTc0NjBiODg1YWRiYmFm
YjliZmMwZWRiYTNjYzg4YTI1Yzk3Li5kY2M5M2MyYjdlZTUyZDJjOWZlOTkyMjZiNDI0NWQ0MzFi
YTBhNmNjIDEwMDY0NAotLS0gYS9Ub29scy9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Ub29scy9Q
bGF0Zm9ybVdpbi5jbWFrZQpAQCAtMiw5ICsyLDEwIEBAIGFkZF9zdWJkaXJlY3RvcnkoSW1hZ2VE
aWZmKQogCiBpZiAoRU5BQkxFX1dFQktJVF9MRUdBQ1kpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShE
dW1wUmVuZGVyVHJlZSkKLSAgICBhZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2VyL3dpbikKKyAg
ICBhZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2VyL3dpbi13a2wpCiBlbmRpZiAoKQogCiBpZiAo
RU5BQkxFX1dFQktJVCkKICAgICBhZGRfc3ViZGlyZWN0b3J5KFdlYktpdFRlc3RSdW5uZXIpCisg
ICAgYWRkX3N1YmRpcmVjdG9yeShNaW5pQnJvd3Nlci93aW4pCiBlbmRpZiAoKQo=
</data>
<flag name="review"
          id="399907"
          type_id="1"
          status="-"
          setter="fujii"
    />
    <flag name="commit-queue"
          id="399933"
          type_id="3"
          status="-"
          setter="fujii"
    />
          </attachment>
      

    </bug>

</bugzilla>