<?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>47948</bug_id>
          
          <creation_ts>2010-10-19 16:24:44 -0700</creation_ts>
          <short_desc>Remove support for JSVALUE32 from JSC</short_desc>
          <delta_ts>2010-10-19 17:20:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>296512</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-19 16:24:44 -0700</bug_when>
    <thetext>Remove support for JSVALUE32 from JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296515</commentid>
    <comment_count>1</comment_count>
      <attachid>71221</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-19 16:26:12 -0700</bug_when>
    <thetext>Created attachment 71221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296527</commentid>
    <comment_count>2</comment_count>
      <attachid>71221</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-10-19 16:41:02 -0700</bug_when>
    <thetext>Comment on attachment 71221
Patch

rs=me

Do we need to turn off the JIT on WINCE, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296541</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-19 16:55:41 -0700</bug_when>
    <thetext>Committed r70111: &lt;http://trac.webkit.org/changeset/70111&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296553</commentid>
    <comment_count>4</comment_count>
      <attachid>71221</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-19 17:20:07 -0700</bug_when>
    <thetext>Comment on attachment 71221
Patch

I think JSNumberCell should go away ASAP, and there may be a number heap to go too?
The methods in JSNumberCell should also lose the deprecated ExecState* arguments.
r+, awesomez.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71221</attachid>
            <date>2010-10-19 16:26:12 -0700</date>
            <delta_ts>2010-10-19 17:20:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47948-20101019162611.patch</filename>
            <type>text/plain</type>
            <size>83780</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyYWI5YjdmYTlmYzcwYjBmZDdhODA2MmVhNWMzODk3YjMzYjM5YTJlLi4w
NmZhZWY5YTkxMTAyZWQyYWQyMzdmN2U5NWU3NDA4MzJiNzVjODRmIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsODQgQEAKKzIwMTAtMTAtMTkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
c3VwcG9ydCBmb3IgSlNWQUxVRTMyIGZyb20gSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk0OAorCisgICAgICAgIFJlbW92ZSBhbGwgdGhlIGNv
ZGUgZm9yIHN1cHBvcnRpbmcgSlNWQUxVRTMyIGZyb20gSlNDLgorCisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9K
SVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9sc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xzaGlm
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yc2hpZnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3JzaGlmdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91cnNo
aWZ0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF91cnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2pubGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2psZXNzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdGFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wb3N0X2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wb3N0X2RlYyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcmVfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3ByZV9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW9kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb29wX2lmX2xlc3NlcSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV4
dF9wbmFtZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogaml0
L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoK
KyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJuRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6dGFnUmV0dXJuQXNJbnQzMik6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0NvbGxlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OmlzUG9zc2libGVDZWxsKToKKyAgICAg
ICAgKEpTQzo6dHlwZU5hbWUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
cHJvdG90eXBlRm9yTG9va3VwKToKKyAgICAgICAgKiBydW50aW1lL0pTSW1tZWRpYXRlLmg6Cisg
ICAgICAgIChKU0M6OnJlaW50ZXJwcmV0SW50cHRyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpK
U0ltbWVkaWF0ZTo6aXNJbnRlZ2VyTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6
OmlzRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVJ
bnRlZ2VyTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmRvdWJsZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
SlNJbW1lZGlhdGU6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpmcm9t
TnVtYmVyT3V0c2lkZUludGVnZXJSYW5nZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpm
cm9tKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SlNGYXN0TWF0aDo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNOdW1iZXJDZWxsLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTTnVtYmVyQ2VsbC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OkpTT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50
aW1lL051bWJlck9iamVjdC5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEwLTEw
LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGVjOTM3NWYxZGRhNTk0
OTFkNmMyYzEzY2ViY2IwZGFjZjJiNzBjNTQuLjBlYWJkZjVhMjdhZDQ1NWFiMjU5NjI5ZmZjNjgz
ZjgzMjhhMmM3MDMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgc2FtcGxlSW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKTsKICNlbmRpZgogCi0jaWYgIVVTRShKU1ZBTFVFMzJfNjQpCisj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXRd
LmlzVXNlZCgpKQogICAgICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogI2VuZGlm
CkBAIC0xOTUsOSArMTk1LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
CiAgICAgICAgIHN3aXRjaCAobV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3Ry
dWN0aW9uLT51Lm9wY29kZSkpIHsKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9kZWxfYnlf
dmFsKQotI2lmIFVTRShKU1ZBTFVFMzIpCi0gICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfZGl2
KQotI2VuZGlmCiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfaW4pCiAgICAgICAgIERFRklO
RV9CSU5BUllfT1Aob3BfbGVzcykKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9sZXNzZXEp
CkBAIC0yMDcsNyArMjA0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICBERUZJTkVfVU5BUllfT1Aob3BfaXNfb2JqZWN0KQogICAgICAgICBERUZJTkVfVU5B
UllfT1Aob3BfaXNfc3RyaW5nKQogICAgICAgICBERUZJTkVfVU5BUllfT1Aob3BfaXNfdW5kZWZp
bmVkKQotI2lmICFVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IERFRklORV9VTkFSWV9PUChvcF9uZWdhdGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1VOQVJZ
X09QKG9wX3R5cGVvZikKQEAgLTIzMCw5ICsyMjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfYXJndW1lbnRzKQogICAg
ICAgICBERUZJTkVfT1Aob3BfZGVidWcpCiAgICAgICAgIERFRklORV9PUChvcF9kZWxfYnlfaWQp
Ci0jaWYgIVVTRShKU1ZBTFVFMzIpCiAgICAgICAgIERFRklORV9PUChvcF9kaXYpCi0jZW5kaWYK
ICAgICAgICAgREVGSU5FX09QKG9wX2VuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2VudGVyKQog
ICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2FjdGl2YXRpb24pCkBAIC0zNzcsNyArMzcyLDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBtX2NhbGxMaW5rSW5m
b0luZGV4ID0gMDsKIAogICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBp
dGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsK
LSNpZiAhVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAjZW5kaWYKIApAQCAtMzk5LDkgKzM5NCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9jb25zdHJ1Y3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jb252ZXJ0X3Ro
aXMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jb252ZXJ0X3RoaXNfc3RyaWN0KQot
I2lmICFVU0UoSlNWQUxVRTMyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGl2KQot
I2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9lcSkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2dldF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2dldF9hcmd1bWVudHNfbGVuZ3RoKQpAQCAtNTk5LDcgKzU5Miw3IEBAIEpJVENvZGUgSklUOjpw
cml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICByZXR1
cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKLSNpZiAhVVNFKEpTVkFMVUUzMl82
NCkKKyNpZiBVU0UoSlNWQUxVRTY0KQogdm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJl
Z2lzdGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBk
c3QpCiB7CiAgICAgbG9hZFB0cihBZGRyZXNzKHZhcmlhYmxlT2JqZWN0LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYXJpYWJsZU9iamVjdCwgZCkpLCBkc3QpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDRhMGRlYjIyMmUy
MTlmMmY2ZWIyMzM5ZDViOWQxYmRmYjdlOTUyMDUuLjNlZjA1MzgxN2FkNjliNDE0OGQzMjM2ODJh
MjQ4MjdiNTc3YzdjNDEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTUxNiw4ICs1MTYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50IFZSZWcp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0jZWxzZQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIo
cmVnKTsKQEAgLTUzNSw3ICs1MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCwg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAKLSNpZiAhVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShS
ZWdpc3RlcklEKTsKICAgICAgICAgSnVtcCBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGVKdW1w
SWZaZXJvKFJlZ2lzdGVySUQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKaW5kZXggZDc1ZjhiNTI5N2U1ZTBiM2I2NTU3NjNkN2IzOWEyYjcwODRlNDQwOC4uZDRmYTEy
ZjM1YjNhYmEwMDMwNzc5M2RhMGM4Y2EzYmFkY2JkN2E2ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aWYgRU5BQkxFKEpJVCkKLSNpZiAhVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBVU0UoSlNWQUxVRTY0
KQogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCkBAIC02MCwxMCAr
NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQocmVnVDApOwogICAgIGVtaXRGYXN0
QXJpdGhJbW1Ub0ludChyZWdUMik7CiAgICAgbHNoaWZ0MzIocmVnVDIsIHJlZ1QwKTsKLSNpZiBV
U0UoSlNWQUxVRTMyKQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCByZWdU
MCwgcmVnVDApKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotI2VuZGlm
CiAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKHJlZ1QwLCByZWdUMCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQpAQCAtNzQsMjAgKzcwLDEwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50CiAgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBVTlVTRURfUEFSQU0ob3AxKTsK
ICAgICBVTlVTRURfUEFSQU0ob3AyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotI2Vsc2UKLSAgICAvLyBJZiB3ZSBhcmUgbGltaXRlZCB0byAzMi1i
aXQgaW1tZWRpYXRlcyB0aGVyZSBpcyBhIHRoaXJkIHNsb3cgY2FzZSwgd2hpY2ggcmVxdWlyZWQg
dGhlIG9wZXJhbmRzIHRvIGhhdmUgYmVlbiByZWxvYWRlZC4KLSAgICBKdW1wIG5vdEltbTEgPSBn
ZXRTbG93Q2FzZShpdGVyKTsKLSAgICBKdW1wIG5vdEltbTIgPSBnZXRTbG93Q2FzZShpdGVyKTsK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUMCwgb3AyLCByZWdUMik7Ci0gICAgbm90SW1tMS5saW5rKHRoaXMpOwotICAgIG5vdElt
bTIubGluayh0aGlzKTsKLSNlbmRpZgogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9sc2hpZnQpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMik7CkBAIC0xMTAsMjAgKzk2LDExIEBAIHZvaWQgSklUOjpl
bWl0X29wX3JzaGlmdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QyKTsKICAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkpIHsKICAgICAgICAgICAgIEp1bXAg
bGhzSXNJbnQgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgICAgIC8vIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpICYmIFVTRShK
U1ZBTFVFNjQpID0+IDMgU2xvd0Nhc2VzCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7CiAgICAgICAgICAgICBhZGRQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVHJ1bmNhdGVEb3Vi
bGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkgJiYgIVVTRShKU1ZBTFVFNjQpID0+IDUgU2xvd0Nhc2VzIChvZiB3
aGljaCAxIElmTm90SlNDZWxsKQotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBvcDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoY2hlY2tTdHJ1Y3R1cmUo
cmVnVDAsIG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgICAg
ICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGws
IG1fdmFsdWUpKSwgZnBSZWdUMCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUcnVu
Y2F0ZURvdWJsZVRvSW50MzIoZnBSZWdUMCwgcmVnVDApKTsKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCByZWdUMCwgcmVnVDApKTsKLSNlbmRpZgogICAgICAg
ICAgICAgbGhzSXNJbnQubGluayh0aGlzKTsKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTMzLDE1
ICsxMTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICAgICAgfQogICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQocmVn
VDIpOwogICAgICAgICByc2hpZnQzMihyZWdUMiwgcmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzIp
Ci0gICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0jZW5kaWYKICAgICB9
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJl
Z1QwLCByZWdUMCk7Ci0jZWxzZQotICAgIG9yUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBl
TnVtYmVyKSwgcmVnVDApOwotI2VuZGlmCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQpOwogfQogCkBAIC0xNTksMTcgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9yc2hp
ZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50CiAg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSNlbHNl
Ci0gICAgICAgICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBvcDEpOwotICAgICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotI2VuZGlmCiAgICAgICAgICAgICAvLyBXZSdyZSByZWxvYWRpbmcgb3AxIHRv
IHJlZ1QwIGFzIHdlIGNhbiBubyBsb25nZXIgZ3VhcmFudGVlIHRoYXQKICAgICAgICAgICAgIC8v
IHdlIGhhdmUgbm90IG11bmdlZCB0aGUgb3BlcmFuZC4gIEl0IG1heSBoYXZlIGFscmVhZHkgYmVl
biBzaGlmdGVkCiAgICAgICAgICAgICAvLyBjb3JyZWN0bHksIGJ1dCBpdCBzdGlsbCB3aWxsIG5v
dCBoYXZlIGJlZW4gdGFnZ2VkLgpAQCAtMjA2LDEwICsxNjgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF91cnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIC8vIGFz
IGFuIGltbWVkaWF0ZSBpbnQuCiAgICAgICAgIGlmIChzaGlmdCA8IDAgfHwgIShzaGlmdCAmIDMx
KSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1t
MzIoMCkpKTsKLSNpZiBVU0UoSlNWQUxVRTMyKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgcmVnVDAsIHJlZ1QwKSk7Ci0gICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QwLCByZWdUMCk7Ci0jZW5kaWYKICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMiwxMCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRG
YXN0QXJpdGhJbW1Ub0ludChyZWdUMSk7CiAgICAgdXJzaGlmdDMyKHJlZ1QxLCByZWdUMCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBJbW0zMigwKSkpOwotI2lm
IFVTRShKU1ZBTFVFMzIpCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJl
Z1QwLCByZWdUMCkpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0jZW5k
aWYKICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnVDAsIHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQpAQCAtMjM5LDcgKzE5Myw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVuCiAgICAgICAgIGludCBzaGlmdCA9IGdldENvbnN0YW50
T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKICAgICAgICAgLy8gb3AxID0gcmVnVDAKICAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7CiAgICAgICAgICAg
ICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7IC8vIG9wMSBpcyBub3QgYSBkb3VibGUKQEAg
LTI1NSwxOCArMjA4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVuCiAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfcnNoaWZ0KSk7CiAgICAg
ICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOwogICAgICAgICB9Ci0jZW5kaWYgLy8gSlNWQUxV
RTY0CiAgICAgICAgIGlmIChzaGlmdCA8IDAgfHwgIShzaGlmdCAmIDMxKSkKICAgICAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZmFpbGVkIHRvIGJveCBpbiBob3QgcGF0aAotI2lmIFVT
RShKU1ZBTFVFMzIpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gQ291bGRuJ3QgYm94
IHJlc3VsdAotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gb3AxID0gcmVnVDAKICAg
ICAgICAgLy8gb3AyID0gcmVnVDEKICAgICAgICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludChvcDEpKSB7CiAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMy
IGNoZWNrIC0tIG9wMSBpcyBub3QgYW4gaW50Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGVt
aXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApKTsgLy8gb3AxIGlzIG5vdCBhIGRvdWJs
ZQpAQCAtMjgyLDE0ICsyMzAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW4KICAgICAgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfcnNoaWZ0
KSk7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKICAgICAgICAgICAgIH0K
LSNlbmRpZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGludDMyIGNoZWNrIC0gb3AyIGlzIG5vdCBhbiBpbnQKICAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBDYW4ndCByZXByZXNlbnQgdW5zaWduZWQgcmVzdWx0IGFzIGFuIGltbWVkaWF0
ZQotI2lmIFVTRShKU1ZBTFVFMzIpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gQ291
bGRuJ3QgYm94IHJlc3VsdAotI2VuZGlmCiAgICAgfQogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF91cnNoaWZ0KTsKQEAgLTMzMCwyMCArMjc0LDEyIEBAIHZvaWQg
SklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7Ci0j
ZWxzZQotICAgICAgICBpbnQzMl90IG9wMmltbSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KEpTSW1t
ZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpOwotI2VuZGlmCiAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIob3Ay
aW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZUludChvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7
CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRP
cGVyYW5kSW1tZWRpYXRlSW50KG9wMSk7Ci0jZWxzZQotICAgICAgICBpbnQzMl90IG9wMWltbSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9w
ZXJhbmQob3AxKSkpOwotI2VuZGlmCiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CkBA
IC0zODEsMTggKzMxNyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50CiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIAogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZO
b3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVnVDApOwogICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QwKTsKLSNlbHNlCi0gICAgICAgICAgICBKdW1wIGZhaWwxOwotICAgICAgICAgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDEpKQotICAgICAgICAgICAgICAg
IGZhaWwxID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7Ci0KLSAgICAgICAgICAgIEp1bXAg
ZmFpbDIgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1
cmUuZ2V0KCkpOwotICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOwotI2VuZGlmCiAKICAg
ICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQz
MigpOzsKIApAQCAtNDAzLDEzICszMzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudAogCiAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5s
ZXNzKSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgZmFpbDEubGluayh0aGlz
KTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKG9wMSkpCi0gICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgICAg
IGZhaWwyLmxpbmsodGhpcyk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CkBAIC00MjIsMTggKzM0Myw5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVn
VDEpOwogICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwog
ICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKLSNlbHNlCi0gICAg
ICAgICAgICBKdW1wIGZhaWwxOwotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZShvcDIpKQotICAgICAgICAgICAgICAgIGZhaWwxID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMSk7Ci0KLSAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBjaGVja1N0cnVjdHVy
ZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAg
ICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxs
LCBtX3ZhbHVlKSksIGZwUmVnVDEpOwotI2VuZGlmCiAKICAgICAgICAgICAgIGludDMyX3Qgb3Ax
aW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOzsKIApAQCAtNDQ0LDEzICsz
NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudAogCiAgICAgICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSk7CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSNlbHNlCi0gICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikpCi0gICAgICAgICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7Ci0j
ZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9qbGVzcyk7CkBAIC00NjMsNyArMzY5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnQK
ICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBKdW1wIGZhaWwx
ID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBKdW1w
IGZhaWwyID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSk7CiAgICAgICAgICAg
ICBKdW1wIGZhaWwzID0gZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtNDcx
LDM3ICszNzYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnQKICAgICAgICAgICAgIGFkZFB0
cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgICAgIG1vdmVQdHJUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEs
IGZwUmVnVDEpOwotI2Vsc2UKLSAgICAgICAgICAgIEp1bXAgZmFpbDE7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMSkpCi0gICAgICAgICAgICAg
ICAgZmFpbDEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKLQotICAgICAgICAgICAgSnVt
cCBmYWlsMjsKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlh
dGUob3AyKSkKLSAgICAgICAgICAgICAgICBmYWlsMiA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVn
VDEpOwotCi0gICAgICAgICAgICBKdW1wIGZhaWwzID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIG1f
Z2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIEp1bXAgZmFp
bDQgPSBjaGVja1N0cnVjdHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUu
Z2V0KCkpOwotICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOwotICAgICAgICAgICAgbG9h
ZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3Zh
bHVlKSksIGZwUmVnVDEpOwotI2VuZGlmCiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwg
ZnBSZWdUMCksIHRhcmdldCk7CiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsK
ICAgICAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDEpKQotICAgICAgICAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90
SW1tZWRpYXRlKG9wMikpCi0gICAgICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKLSAgICAg
ICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwot
I2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkBAIC01NDUs
MjAgKzQyNywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIp
KSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwotI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1t
ZWRpYXRlSW50KG9wMik7Ci0jZWxzZQotICAgICAgICBpbnQzMl90IG9wMmltbSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQob3Ay
KSkpOwotI2VuZGlmCiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihy
ZWdUMSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRD
b25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AxKTsKLSNlbHNlCi0gICAgICAgIGludDMyX3Qg
b3AxaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdldENv
bnN0YW50T3BlcmFuZChvcDEpKSk7Ci0jZW5kaWYKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihH
cmVhdGVyVGhhbiwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEp
OwpAQCAtNTk2LDE4ICs0NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cgogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZFB0cih0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMCk7Ci0jZWxzZQotICAgICAgICAgICAgSnVtcCBmYWlsMTsKLSAgICAgICAgICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AxKSkKLSAgICAgICAgICAg
ICAgICBmYWlsMSA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwotCi0gICAgICAgICAgICBK
dW1wIGZhaWwyID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3Ry
dWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVzcyhyZWdUMCwgT0JK
RUNUX09GRlNFVE9GKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSkpLCBmcFJlZ1QwKTsKLSNlbmRpZgog
CiAgICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFz
SW50MzIoKTsKIApAQCAtNjE4LDEzICs0ODMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cgog
CiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bf
am5sZXNzKSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgZmFpbDEubGluayh0
aGlzKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKG9wMSkpCi0gICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CkBAIC02MzcsMTggKzQ5Niw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAog
ICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIo
cmVnVDEpOwogICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEp
OwogICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKLSNlbHNlCi0g
ICAgICAgICAgICBKdW1wIGZhaWwxOwotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bk5vdEltbWVkaWF0ZShvcDIpKQotICAgICAgICAgICAgICAgIGZhaWwxID0gZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChyZWdUMSk7Ci0KLSAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBjaGVja1N0cnVj
dHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAg
ICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJD
ZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDEpOwotI2VuZGlmCiAKICAgICAgICAgICAgIGludDMyX3Qg
b3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwogCkBAIC02NTksMTMg
KzUwOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyCiAKICAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICAgICAg
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkKLSAgICAgICAg
ICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsK
LSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2psZXNzKTsKQEAgLTY3OCw3ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIEp1bXAgZmFp
bDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIEp1
bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKTsKICAgICAgICAg
ICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC02
ODYsMzcgKzUyOSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cgogICAgICAgICAgICAgYWRk
UHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZVB0clRv
RG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdU
MSwgZnBSZWdUMSk7Ci0jZWxzZQotICAgICAgICAgICAgSnVtcCBmYWlsMTsKLSAgICAgICAgICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AxKSkKLSAgICAgICAgICAg
ICAgICBmYWlsMSA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwotCi0gICAgICAgICAgICBK
dW1wIGZhaWwyOwotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVk
aWF0ZShvcDIpKQotICAgICAgICAgICAgICAgIGZhaWwyID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChy
ZWdUMSk7Ci0KLSAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwg
bV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAgICAgSnVtcCBm
YWlsNCA9IGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVy
ZS5nZXQoKSk7Ci0gICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9P
RkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7Ci0gICAgICAgICAgICBs
b2FkRG91YmxlKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1f
dmFsdWUpKSwgZnBSZWdUMSk7Ci0jZW5kaWYKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0
KTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RI
KG9wX2pubGVzcykpOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGZhaWwxLmxp
bmsodGhpcyk7CiAgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICAgICAgZmFp
bDMubGluayh0aGlzKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKG9wMSkpCi0gICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsK
LSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkK
LSAgICAgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwotICAgICAgICAgICAgZmFpbDMubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7Ci0jZW5kaWYKICAgICAgICAg
fQogCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKQEAgLTc2MCwyMCArNTgwLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ym9vbCBpbnZlcnQpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1l
ZGlhdGVJbnQob3AyKTsKLSNlbHNlCi0gICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIp
KSk7Ci0jZW5kaWYKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihpbnZlcnQgPyBHcmVhdGVyVGhh
biA6IExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAg
IH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChv
cDEpOwotI2Vsc2UKLSAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBzdGF0aWNfY2FzdDxpbnQzMl90
PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpKTsKLSNlbmRp
ZgogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludmVydCA/IExlc3NUaGFuIDogR3JlYXRlclRo
YW5PckVxdWFsLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
CkBAIC04MTIsMTggKzYyNCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVuCiAgICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKIAogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1w
SWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLSNlbHNlCi0gICAgICAgICAgICBKdW1wIGZhaWwxOwotICAgICAgICAgICAg
aWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDEpKQotICAgICAgICAgICAg
ICAgIGZhaWwxID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7Ci0KLSAgICAgICAgICAgIEp1
bXAgZmFpbDIgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1
Y3R1cmUuZ2V0KCkpOwotICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOwotI2VuZGlmCiAK
ICAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJ
bnQzMigpOzsKIApAQCAtODM0LDEzICs2MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbgog
CiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bf
am5sZXNzZXEpKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBmYWlsMS5saW5r
KHRoaXMpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJ
bW1lZGlhdGUob3AxKSkKLSAgICAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAgICAg
ICAgICAgZmFpbDIubGluayh0aGlzKTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOwpAQCAtODUzLDE4ICs2NTAs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVt
YmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QxKTsKICAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0jZWxz
ZQotICAgICAgICAgICAgSnVtcCBmYWlsMTsKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkKLSAgICAgICAgICAgICAgICBmYWlsMSA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwocmVnVDEpOwotCi0gICAgICAgICAgICBKdW1wIGZhaWwyID0gY2hlY2tT
dHJ1Y3R1cmUocmVnVDEsIG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpKTsKLSAg
ICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTTnVt
YmVyQ2VsbCwgbV92YWx1ZSkpLCBmcFJlZ1QxKTsKLSNlbmRpZgogCiAgICAgICAgICAgICBpbnQz
Ml90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTs7CiAKQEAgLTg3
NSwxMyArNjYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW4KIAogICAgICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pubGVzc2VxKSk7CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSNlbHNlCi0g
ICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikpCi0g
ICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWwyLmxpbmso
dGhpcyk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzc2VxKTsKQEAgLTg5NCw3ICs2NzYsNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAg
IEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKICAgICAg
ICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKTsK
ICAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdU
MSk7CkBAIC05MDIsMzcgKzY4MywxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbgogICAgICAg
ICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgICAgIG1vdmVQdHJUb0Rv
dWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0jZWxzZQotICAgICAgICAgICAgSnVtcCBmYWlsMTsKLSAg
ICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AxKSkKLSAg
ICAgICAgICAgICAgICBmYWlsMSA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwotCi0gICAg
ICAgICAgICBKdW1wIGZhaWwyOwotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZShvcDIpKQotICAgICAgICAgICAgICAgIGZhaWwyID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMSk7Ci0KLSAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBjaGVja1N0cnVjdHVy
ZShyZWdUMCwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAg
ICAgSnVtcCBmYWlsNCA9IGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBtX2dsb2JhbERhdGEtPm51bWJl
clN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAs
IE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7Ci0gICAg
ICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU051bWJl
ckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMSk7Ci0jZW5kaWYKIAogICAgICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGludmVydCA/IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQgOiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQp
OwogCiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3Bfam5sZXNzZXEpKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBmYWlsMS5s
aW5rKHRoaXMpOwogICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bk5vdEltbWVkaWF0ZShvcDEpKQotICAgICAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikp
Ci0gICAgICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWwzLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwotI2VuZGlmCiAgICAgICAg
IH0KIAogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkBAIC05NjMsMjUgKzcyMSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBpbnQzMl90IGltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpOwog
ICAgICAgICBhbmRQdHIoSW1tMzIoaW1tKSwgcmVnVDApOwogICAgICAgICBpZiAoaW1tID49IDAp
CiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7
Ci0jZWxzZQotICAgICAgICBhbmRQdHIoSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1l
ZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDEpKSkpLCByZWdUMCk7Ci0jZW5k
aWYKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgaW50MzJfdCBpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJ
bnQob3AyKTsKICAgICAgICAgYW5kUHRyKEltbTMyKGltbSksIHJlZ1QwKTsKICAgICAgICAgaWYg
KGltbSA+PSAwKQogICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdU
MCwgcmVnVDApOwotI2Vsc2UKLSAgICAgICAgYW5kUHRyKEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpKSwgcmVn
VDApOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CiAgICAgICAgIGFuZFB0cihyZWdUMSwgcmVnVDAp
OwpAQCAtMTAyMywxMyArNzczLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcG9zdF9pbmMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDApOwogICAgIG1vdmUocmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBJbW0zMigxKSwgcmVnVDEpKTsKICAg
ICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QxLCByZWdUMSk7Ci0jZWxzZQotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBJbW0zMigxIDw8IEpTSW1tZWRpYXRl
OjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSwgcmVnVDEpKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOwotI2VuZGlmCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QxKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CkBAIC0xMDU1
LDEzICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wb3N0X2RlYyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MCk7CiAgICAgbW92ZShyZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoU3ViMzIoWmVybywgSW1tMzIoMSksIHJlZ1QxKSk7CiAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhyZWdUMSwgcmVnVDEpOwotI2Vsc2UKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hTdWIzMihaZXJvLCBJbW0zMigxIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNo
aWZ0KSwgcmVnVDEpKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotI2Vu
ZGlmCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CkBAIC0xMDg1LDEzICs4MjUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcmVfaW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKDEpLCByZWdUMCkp
OwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDAsIHJlZ1QwKTsKLSNlbHNl
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKDEgPDwgSlNJbW1l
ZGlhdGU6OkludGVnZXJQYXlsb2FkU2hpZnQpLCByZWdUMCkpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QwLCByZWdUMCk7Ci0jZW5kaWYKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCk7CiB9CiAKQEAgLTExMTQsMTMgKzg0OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3ByZV9k
ZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRp
YXRlSW50ZWdlcihyZWdUMCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hTdWIzMihaZXJvLCBJbW0zMigxKSwgcmVnVDApKTsKICAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7Ci0jZWxzZQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKFplcm8sIEltbTMyKDEgPDwgSlNJbW1lZGlhdGU6OkludGVnZXJQYXlsb2FkU2hpZnQp
LCByZWdUMCkpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0jZW5kaWYK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CiB9CiAKQEAgLTExNTgsMjIgKzg4
OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDIpOwogCi0jaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIHJlZ1QyLCBJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1fZ2xvYmFsRGF0YSwgMCkpKSkpOwogICAg
IG1fYXNzZW1ibGVyLmNkcSgpOwogICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IocmVnVDIpOwotI2Vs
c2UKLSAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8ocmVnVDIpKTsKLSNpZiBD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgIG1fYXNzZW1ibGVyLmNkcSgpOwotICAgIG1fYXNz
ZW1ibGVyLmlkaXZsX3IocmVnVDIpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBtX2Fzc2VtYmxlci5kaXYocmVnVDAsIHJlZ1QyKTsK
LSAgICBtX2Fzc2VtYmxlci5tZmhpKHJlZ1QxKTsKLSNlbmRpZgotI2VuZGlmCiAgICAgZW1pdEZh
c3RBcml0aFJlVGFnSW1tZWRpYXRlKHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQpOwogfQpAQCAtMTE4MiwxOSArODk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4KIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSNlbHNl
Ci0gICAgSnVtcCBub3RJbW0xID0gZ2V0U2xvd0Nhc2UoaXRlcik7Ci0gICAgSnVtcCBub3RJbW0y
ID0gZ2V0U2xvd0Nhc2UoaXRlcik7Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIGVtaXRG
YXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOwotICAgIGVtaXRGYXN0QXJpdGhS
ZVRhZ0ltbWVkaWF0ZShyZWdUMiwgcmVnVDIpOwotICAgIG5vdEltbTEubGluayh0aGlzKTsKLSAg
ICBub3RJbW0yLmxpbmsodGhpcyk7Ci0jZW5kaWYKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfbW9kKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDIpOwpAQCAtMTI0OSw4ICs5NTYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5E
OiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IFVTRShK
U1ZBTFVFNjQpIChPUF9BREQsIE9QX1NVQiwgT1BfTVVMKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KIAogdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIG9w
Y29kZUlELCB1bnNpZ25lZCwgdW5zaWduZWQgb3AxLCB1bnNpZ25lZCBvcDIsIE9wZXJhbmRUeXBl
cykKQEAgLTE1NDMsMzEwICsxMjQ4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1YihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4KICAgICBj
b21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgcmVzdWx0LCBvcDEsIG9w
MiwgdHlwZXMsIGZhbHNlLCBmYWxzZSk7CiB9CiAKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCi0K
LS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogIVVTRShKU1ZBTFVFNjQp
IChPUF9BREQsIE9QX1NVQiwgT1BfTVVMKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KLQotdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIG9wY29kZUlELCB1
bnNpZ25lZCBkc3QsIHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0
eXBlcykKLXsKLSAgICBTdHJ1Y3R1cmUqIG51bWJlclN0cnVjdHVyZSA9IG1fZ2xvYmFsRGF0YS0+
bnVtYmVyU3RydWN0dXJlLmdldCgpOwotICAgIEp1bXAgd2FzSlNOdW1iZXJDZWxsMTsKLSAgICBK
dW1wIHdhc0pTTnVtYmVyQ2VsbDI7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMx
LCByZWdUMCwgc3JjMiwgcmVnVDEpOwotCi0gICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2Fi
bGUoKSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBBU1NFUlQodHlwZXMu
c2Vjb25kKCkubWlnaHRCZU51bWJlcigpKTsKLQotICAgICAgICAvLyBDaGVjayBvcDIgaXMgYSBu
dW1iZXIKLSAgICAgICAgSnVtcCBvcDJpbW0gPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihy
ZWdUMSk7Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgc3JjMik7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMSwgbnVtYmVyU3Ry
dWN0dXJlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAoMSkgSW4gdGhpcyBjYXNlIHNyYzIg
aXMgYSByZXVzYWJsZSBudW1iZXIgY2VsbC4KLSAgICAgICAgLy8gICAgIFNsb3cgY2FzZSBpZiBz
cmMxIGlzIG5vdCBhIG51bWJlciB0eXBlLgotICAgICAgICBKdW1wIG9wMWltbSA9IGVtaXRKdW1w
SWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIHNyYzEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoY2hlY2tTdHJ1Y3R1
cmUocmVnVDAsIG51bWJlclN0cnVjdHVyZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDFh
KSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNvIGEgbnVtYmVyIGNlbGwKLSAgICAgICAgbG9h
ZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3Zh
bHVlKSksIGZwUmVnVDApOwotICAgICAgICBKdW1wIGxvYWRlZERvdWJsZSA9IGp1bXAoKTsKLSAg
ICAgICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbiBpbW1lZGlhdGUKLSAgICAg
ICAgb3AxaW1tLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChyZWdU
MCk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAg
ICAgLy8gKDFjKQotICAgICAgICBsb2FkZWREb3VibGUubGluayh0aGlzKTsKLSAgICAgICAgaWYg
KG9wY29kZUlEID09IG9wX2FkZCkKLSAgICAgICAgICAgIGFkZERvdWJsZShBZGRyZXNzKHJlZ1Qx
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOwotICAg
ICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9zdWIpCi0gICAgICAgICAgICBzdWJEb3VibGUo
QWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSkpLCBm
cFJlZ1QwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbXVsKTsKLSAgICAgICAgICAgIG11bERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJDZWxsIGFuZCBqdW1wLgot
ICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSkpOwotICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMCk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgd2FzSlNOdW1i
ZXJDZWxsMiA9IGp1bXAoKTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdo
ZXJlIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAgIFR3byBzbG93
IGNhc2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qg
b3ZlcmZsb3dzLgotICAgICAgICBvcDJpbW0ubGluayh0aGlzKTsKLSAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0gICAgfSBlbHNlIGlmICh0eXBl
cy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAg
ICAgICBBU1NFUlQodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkpOwotCi0gICAgICAgIC8v
IENoZWNrIG9wMSBpcyBhIG51bWJlcgotICAgICAgICBKdW1wIG9wMWltbSA9IGVtaXRKdW1wSWZJ
bW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgpLmRlZmlu
aXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHNyYzEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoY2hlY2tTdHJ1Y3R1cmUo
cmVnVDAsIG51bWJlclN0cnVjdHVyZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDEpIElu
IHRoaXMgY2FzZSBzcmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAg
ICBTbG93IGNhc2UgaWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAgSnVtcCBv
cDJpbW0gPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0gICAgICAgIGlmICgh
dHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgc3JjMik7Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMSwgbnVtYmVyU3RydWN0dXJlKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAoMWEpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFsc28gYSBudW1iZXIg
Y2VsbAotICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMSk7Ci0gICAgICAgIEp1bXAgbG9hZGVkRG91
YmxlID0ganVtcCgpOwotICAgICAgICAvLyAoMWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFu
IGltbWVkaWF0ZQotICAgICAgICBvcDJpbW0ubGluayh0aGlzKTsKLSAgICAgICAgZW1pdEZhc3RB
cml0aEltbVRvSW50KHJlZ1QxKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEs
IGZwUmVnVDEpOwotICAgICAgICAvLyAoMWMpCi0gICAgICAgIGxvYWRlZERvdWJsZS5saW5rKHRo
aXMpOwotICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7Ci0gICAgICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9hZGQpCi0gICAgICAgICAgICBhZGREb3VibGUoZnBSZWdUMSwgZnBSZWdUMCk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAgICAgICAgICAgIHN1YkRvdWJsZShm
cFJlZ1QxLCBmcFJlZ1QwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgICAgIG11bERvdWJsZShmcFJlZ1QxLCBmcFJlZ1Qw
KTsKLSAgICAgICAgfQotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSkpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0
byB0aGUgSlNOdW1iZXJDZWxsIGFuZCBqdW1wLgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1Qw
LCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSkp
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgIHdhc0pTTnVt
YmVyQ2VsbDEgPSBqdW1wKCk7Ci0KLSAgICAgICAgLy8gKDIpIFRoaXMgaGFuZGxlcyBjYXNlcyB3
aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0gICAgICAgIC8vICAgICBUd28gc2xv
dyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0ZSwgb3IgdGhlIHN1YnRyYWN0
IG92ZXJmbG93cy4KLSAgICAgICAgb3AxaW1tLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwotICAgIH0gZWxzZQotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpIHsKLSAgICAgICAgZW1pdEZhc3RB
cml0aERlVGFnSW1tZWRpYXRlKHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIHJlZ1QxLCByZWdUMCkpOwotICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09
IG9wX3N1YikgewotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgcmVn
VDEsIHJlZ1QwKSk7Ci0gICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAvLyBj
b252ZXJ0IGVheCAmIGVkeCBmcm9tIEpTSW1tZWRpYXRlcyB0byBpbnRzLCBhbmQgY2hlY2sgaWYg
ZWl0aGVyIGFyZSB6ZXJvCi0gICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChyZWdUMSk7Ci0g
ICAgICAgIEp1bXAgb3AxWmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlpl
cm8ocmVnVDApOwotICAgICAgICBKdW1wIG9wMk5vblplcm8gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmVnVDEpOwotICAgICAgICBvcDFaZXJvLmxpbmsodGhpcyk7Ci0gICAgICAgIC8vIGlmIGVp
dGhlciBpbnB1dCBpcyB6ZXJvLCBhZGQgdGhlIHR3byB0b2dldGhlciwgYW5kIGNoZWNrIGlmIHRo
ZSByZXN1bHQgaXMgPCAwLgotICAgICAgICAvLyBJZiBpdCBpcywgd2UgaGF2ZSBhIHByb2JsZW0g
KE4gPCAwKSwgKE4gKiAwKSA9PSAtMCwgbm90IHJlcHJlc2VudGF0YmxlIGFzIGEgSlNJbW1lZGlh
dGUuCi0gICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoQWRkMzIoU2lnbmVkLCByZWdUMSwgcmVnVDIpKTsKLSAgICAgICAgLy8gU2tpcCB0aGUgYWJv
dmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBpcyB6ZXJvCi0gICAgICAgIG9wMk5vblplcm8ubGlu
ayh0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoTXVsMzIoT3ZlcmZsb3csIHJlZ1Qx
LCByZWdUMCkpOwotICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
ICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnVDAsIHJlZ1QwKTsKLSAgICB9Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgaWYgKHR5cGVzLnNlY29uZCgp
LmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgd2FzSlNO
dW1iZXJDZWxsMi5saW5rKHRoaXMpOwotICAgIGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVz
YWJsZSgpICYmIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICB3YXNKU051bWJlckNl
bGwxLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dD
YXNlKE9wY29kZUlEIG9wY29kZUlELCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRU
eXBlcyB0eXBlcykKLXsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgaWYgKHR5cGVzLnNl
Y29uZCgpLmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAg
ICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHNyYzEpOwotICAgICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVm
aW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIHNyYzIpOwotICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHNy
YzEpOwotICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICB9Ci0gICAgICAg
IGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHNyYzIpOwotICAgICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
LQotICAgIC8vIGFkZGl0aW9uYWwgZW50cnkgcG9pbnQgdG8gaGFuZGxlIC0wIGNhc2VzLgotICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9tdWwpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLQot
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIG9wY29kZUlEID09IG9wX2FkZCA/IGN0aV9v
cF9hZGQgOiBvcGNvZGVJRCA9PSBvcF9zdWIgPyBjdGlfb3Bfc3ViIDogY3RpX29wX211bCk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc3JjMSwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHNyYzIsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
dW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIE9wZXJhbmRU
eXBlcyB0eXBlcyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKTsKLQotICAgIGlmICghdHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgfHwg
IXR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkgewotICAgICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfYWRkKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
b3AxLCByZWdUMik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOwot
ICAgICAgICBzdHViQ2FsbC5jYWxsKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChv
cDEpIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSwgcmVnVDApKTsKLSAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1l
ZGlhdGVJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDApOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1Qw
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5
bG9hZFNoaWZ0KSwgcmVnVDApKTsKLSAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX2FkZCwgcmVzdWx0LCBvcDEsIG9w
MiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAg
IE9wZXJhbmRUeXBlcyB0eXBlcyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICBpZiAoIXR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJl
cigpIHx8ICF0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAg
IEp1bXAgbm90SW1tID0gZ2V0U2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLSAgICAgICAgc3ViMzIoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50
KG9wMSkgPDwgSlNJbW1lZGlhdGU6OkludGVnZXJQYXlsb2FkU2hpZnQpLCByZWdUMCk7Ci0gICAg
ICAgIG5vdEltbS5saW5rKHRoaXMpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfYWRkKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdUMik7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwu
Y2FsbChyZXN1bHQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AyKSkgewotICAgICAgICBKdW1wIG5vdEltbSA9IGdldFNsb3dDYXNlKGl0ZXIpOwotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIHN1YjMyKEltbTMyKGdldENvbnN0YW50
T3BlcmFuZEltbWVkaWF0ZUludChvcDIpIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNo
aWZ0KSwgcmVnVDApOwotICAgICAgICBub3RJbW0ubGluayh0aGlzKTsKLSAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2FkZCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyLCByZWdUMik7
Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwocmVzdWx0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBP
cGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZyb21JbnQoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIEFTU0VSVCh0eXBlcy5maXJzdCgpLm1pZ2h0QmVO
dW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpOwotICAgICAgICBjb21w
aWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX2FkZCwgaXRlciwgcmVzdWx0LCBvcDEsIG9wMiwg
dHlwZXMpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBGb3Igbm93LCBvbmx5IHBsYW50IGEgZmFzdCBpbnQgY2Fz
ZSBpZiB0aGUgY29uc3RhbnQgb3BlcmFuZCBpcyBncmVhdGVyIHRoYW4gemVyby4KLSAgICBpbnQz
Ml90IHZhbHVlOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpICYm
ICgodmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AxKSkgPiAwKSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwotICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgZW1pdEZh
c3RBcml0aERlVGFnSW1tZWRpYXRlKHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
TXVsMzIoT3ZlcmZsb3csIEltbTMyKHZhbHVlKSwgcmVnVDAsIHJlZ1QwKSk7Ci0gICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhSZVRh
Z0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCk7Ci0gICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDIpICYmICgodmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKSkgPiAw
KSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoTXVsMzIoT3ZlcmZsb3csIEltbTMyKHZhbHVlKSwgcmVnVDAsIHJlZ1QwKSk7Ci0gICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgICAgIGVtaXRGYXN0QXJp
dGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9w
KG9wX211bCwgcmVzdWx0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotCi0gICAgaWYgKChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEp
ICYmIChnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AxKSA+IDApKQotICAgICAgICB8
fCAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSAmJiAoZ2V0Q29uc3RhbnRPcGVy
YW5kSW1tZWRpYXRlSW50KG9wMikgPiAwKSkpIHsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4
dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0byBjaGVjayBmb3Ig
MCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgotICAgICAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbXVsKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQob3AxLCByZWdUMik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwg
cmVnVDIpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKHJlc3VsdCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCByZXN1bHQsIG9w
MSwgb3AyLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zdWIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9zdWIsIGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQs
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dD
YXNlKG9wX3N1YiwgaXRlciwgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
KTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gIVVT
RShKU1ZBTFVFMzJfNjQpCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDM2OGVhYjlkMTc2YmNkMmYwNjczY2Yy
ZTZkZTBhZmZlNzM2ZmNiOTMuLmZkZDBkNDcxZjMwYzExYjU3NjNmZWNmMmFiYTgwMGYxYjg1YzAx
NTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKIAogI2lmIEVOQUJMRShKSVQpCi0jaWYgIVVTRShKU1ZBTFVFMzJfNjQpCisjaWYg
VVNFKEpTVkFMVUU2NCkKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgpAQCAtMjU3LDUgKzI1Nyw1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gIVVTRShKU1ZBTFVFMzJfNjQpCisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmgKaW5kZXggZTJlNzdkYmNjNGEwMTU2YWYyZmRlZjgyMjFhZTk5NjcyNDJiNWM0
NC4uMGZlOTkyOTRhYmM3ZjVkNzJlNzQ1MGQyOTBiZmFiMjU2MzU4MzQ1MCAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC02Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwg
UmVnaXN0ZXJGCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3Rl
cklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVu
dHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSNpZiAhVVNFKEpTVkFMVUUzMl82NCkKKyNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKICNlbmRpZgog
fQpAQCAtODEsNyArODEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJh
Y3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkK
IHsKICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7Ci0jaWYgIVVTRShKU1ZBTFVFMzJfNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAjZW5kaWYKIH0KQEAgLTc1MCw3ICs3NTAsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVOdW1iZXIo
UmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51
bWJlcihyZWcpKTsKIH0KIAotI2lmICFVU0UoSlNWQUxVRTY0KQorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUo
UmVnaXN0ZXJJRCByZWcpCiB7CiAgICAgc3ViUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBl
TnVtYmVyKSwgcmVnKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBlYmQyMmJiZTdh
NWE4MTJmYjc5NGUxNThiOGU3NDMwZTQ4OTJiMWVjLi5hNDY4YzE4YmM0NGI4MWRkM2JkZTBjZmVj
NGViOTZkYjBkNjJjMzllIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0zOSw3ICsz
OSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgIVVTRShKU1ZBTFVFMzJfNjQpCisjaWYg
VVNFKEpTVkFMVUU2NCkKIAogI2RlZmluZSBSRUNPUkRfSlVNUF9UQVJHRVQodGFyZ2V0T2Zmc2V0
KSBcCiAgICBkbyB7IG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXQgKyAodGFyZ2V0T2Zmc2V0KV0u
dXNlZCgpOyB9IHdoaWxlIChmYWxzZSkKQEAgLTM2MSwxMSArMzYxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpOwot
I2Vsc2UKLSAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBzdGF0aWNfY2FzdDxpbnQzMl90PihKU0lt
bWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpKTsKLSNlbmRpZgogICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG9wMmlt
bSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwpAQCAtODEwLDEyICs4MDYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9iaXRub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1Qw
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG5vdDMyKHJlZ1QwKTsKICAgICBlbWl0RmFzdEFy
aXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7Ci0jZWxzZQotICAgIHhvclB0cihJbW0z
Mih+SlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpLCByZWdUMCk7Ci0jZW5kaWYKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQog
CkBAIC05NTEsMTEgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25leHRfcG5hbWUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoaXQpLCBy
ZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3MpKSwgcmVnVDIpOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDAsIFRpbWVzRWlnaHQpLCBy
ZWdUMik7Ci0jZWxzZQotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgVGltZXNG
b3VyKSwgcmVnVDIpOwotI2VuZGlmCiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDIpOwogCkBAIC0xNjEzLDcgKzE2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwog
ICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIAotI2VuZGlmIC8vICFVU0UoSlNWQUxVRTMyXzY0
KQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
Z2xvYmFsX2R5bmFtaWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDdjMTI5YTU5YmM1MzJiZGYz
OTZmNmVhMmRmZTExY2EwYTFiNjliNTMuLjJlZGM4NjAzNTgzYTVlZDMyODUyMWNhYjM2ZDU1YjUy
OWI0OWQ1ZGIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKEpJVCkKLSNp
ZiAhVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBVU0UoSlNWQUxVRTY0KQogI2luY2x1ZGUgIkpJVC5o
IgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCisKICAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdl
J3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiAgT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24n
dCBtYXR0ZXIuCiAgICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQz
MiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYK
ICAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMg
bGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KQEAgLTk3LDkgKzk3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNl
ZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFu
IHNpZ24KICAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRh
ZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdU
MSwgcmVnVDEpOwotI2Vsc2UKLSAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQocmVnVDEpOwotI2Vu
ZGlmCisKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0ciht
X2dsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkpOwogCkBAIC0yMDQsMTIgKzIwMiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4K
ICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotI2Vsc2UKLSAgICBlbWl0RmFz
dEFyaXRoSW1tVG9JbnQocmVnVDEpOwotI2VuZGlmCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5qc0FycmF5VlB0cikpKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpKSkpOwpAQCAtMTEwMyw1
ICsxMDk3LDUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHIKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKLSNlbmRpZiAvLyAhVVNFKEpTVkFMVUUzMl82NCkKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IGM4ODQxOTVl
OWMwOWRmZGRhNjIwNDlkYzcxZDFkZDI4NDRkNGI1ZmQuLmI5MWEwNzQ2MTY5MTk3OTZhMDZiYzUx
N2RhZjU0ZjcxOWZmZDg5ZDMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCkBAIC0xNDcsNyArMTQ3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAgICAgICBK
SVRTdHViQXJnIHJlc2VydmVkOyAvLyBVbnVzZWQKICAgICAgICAgSklUU3R1YkFyZyBhcmdzWzZd
OwotI2lmICFVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZv
aWQqIHBhZGRpbmc7IC8vIE1haW50YWluIDE2LWJ5dGUgc3RhY2sgYWxpZ25tZW50LgogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMDMxYmZhOGVjZTg5MjY3Nzg2
MDgwOTkyZWJjNjE3MWQxMmRkMWI2Zi4uNjQ1M2JhYjVkOGMwNDhlZDhmNmMzNDkzY2IwZjQxODFi
ZTMyZjRiMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTE2Niw3ICsxNjYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW5saW5lIEFkZHJlc3MgdGFnRm9yKHVuc2ln
bmVkIGluZGV4LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAjZW5kaWYK
IAotI2lmIFVTRShKU1ZBTFVFMzIpIHx8IFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgSnVtcCBlbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVn
KTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQg
cmVnKTsKICAgICAgICAgdm9pZCBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoUmVnaXN0ZXJJRCByZWcp
OwpAQCAtMjczLDM1ICsyNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICNlbmRpZgogCi0j
aWYgVVNFKEpTVkFMVUUzMikKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBS
ZWdpc3RlcklEIGRzdCkKLSAgICB7Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVy
bywgZHN0LCBJbW0zMihKU0ltbWVkaWF0ZTo6VGFnTWFzaykpOwotICAgIH0KLQotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCi0gICAgewotICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAg
ICBKdW1wIHJlc3VsdCA9IGJyYW5jaFRlc3QzMihaZXJvLCBkc3QsIEltbTMyKEpTSW1tZWRpYXRl
OjpUYWdUeXBlTnVtYmVyKSk7Ci0gICAgICAgIHJzaGlmdDMyKEltbTMyKEpTSW1tZWRpYXRlOjpJ
bnRlZ2VyUGF5bG9hZFNoaWZ0KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKHVuc2lnbmVkLCBGUFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpCi0gICAgewotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGp1bXAoKTsKLSAgICB9
Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0RmFzdEFy
aXRoSW1tVG9JbnQoUmVnaXN0ZXJJRCByZWcpCi0gICAgewotICAgICAgICByc2hpZnQzMihJbW0z
MihKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCksIHJlZyk7Ci0gICAgfQotICAgIAot
I2VuZGlmCi0KLSNpZiAhVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyBKU0ludGVyZmFjZUpJVDo6cGF5bG9hZEZv
cih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXpl
ZFRodW5rSklULmgKaW5kZXggNTc1MTVmYmYyYjE5MTJmMWRmOGQ3OTU3NDE1MmFhZjU0NDMxZWJm
MS4uNWM1OTNkOTlkODYwNDljMWJlNjk2NjlkYTYzZmU0YWQ5MmU5YTMwMiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC05NiwxNCArOTYsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIG1vdmVEb3VibGVUb1B0
cihzcmMsIHJlZ1QwKTsKICAgICAgICAgICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlZ1QwKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisjZWxzZQogICAgICAgICAgICAgc3Rv
cmVEb3VibGUoc3JjLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtKGludClzaXplb2Yo
ZG91YmxlKSkpOwogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSAtIHNpemVvZihkb3Vi
bGUpKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgLSBzaXpl
b2YoZG91YmxlKSksIHJlZ1QwKTsKLSNlbHNlCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0oc3Jj
KTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgbV9mYWls
dXJlcy5hcHBlbmQoanVtcCgpKTsKICNlbmRpZgogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICogKGludClzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICAgICAgcmV0KCk7CkBA
IC0xNDQsMTMgKzE0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgICAgIG9yUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIG1vdmUoSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWdUMSk7CiAjZWxzZQotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDAsIHJlZ1QwKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNhbid0IHRhZyB0aGUgcmVz
dWx0LCBnaXZlIHVwIGFuZCBqdW1wIHRvIHRoZSBzbG93IGNhc2UKLSAgICAgICAgICAgIG1fZmFp
bHVyZXMuYXBwZW5kKGJyYW5jaEFkZFB0cihPdmVyZmxvdywgcmVnVDAsIHJlZ1QwKSk7Ci0gICAg
ICAgICAgICBhZGRQdHIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpLCByZWdUMCk7
CisgICAgICAgICAgICBtb3ZlKEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogI2Vu
ZGlmCiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRl
eCA0YzdhMzU0YzQ4ZmI1ZDZiNThjMzY5NTRjY2I5ZWRlY2UyOTNkYTI4Li45YjQwZjEyMWVjMjIz
YTZhZmI1ZWQxMzhjNGQ3NmQ5MzFjZDkyNzI1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcApAQCAtOTIsNyArOTIsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNo
YXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkgfHwg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhLCBwb29sKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCiAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwpAQCAt
MTAxLDEwICsxMDAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvbwogICAgIGppdC5zcXJ0RG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZShnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBvb2wpOwotICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotI2VuZGlmCiB9CiAKIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CkBAIC0xMTIsNyArMTA3LDYgQEAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZUhhbGZDb25zdGFudCA9IC0wLjU7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKQogewotI2lmIFVTRShKU1ZBTFVFNjQpIHx8IFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMiwgZ2xvYmFsRGF0YSwgcG9v
bCk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAgICAgIHJldHVy
biBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwpAQCAtMTYxLDEwICsxNTUs
NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbAogICAgICAgICBqaXQuYXBwZW5kRmFpbHVyZShu
b25JbnRFeHBvbmVudCk7CiAKICAgICByZXR1cm4gaml0LmZpbmFsaXplKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocG9vbCk7
Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Ci0jZW5k
aWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCmluZGV4IDkzYjkxYmI3
OWQ1YTMxYWM5ZmM3ZTFiNWE4YjhhNzdkN2M1YjJjNWQuLmYzNDE2NDY1OGYxZmZlNjM3MWJiYTdk
NmZmY2QyNzIyZDNlYjEwZjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29s
bGVjdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKQEAg
LTY0MiwxOSArNjQyLDYgQEAgaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQog
Ly8gQ2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciBpc1Bvc3NpYmxlQ2Vs
bCB0byBiZSB2YWxpZC4KIENPTVBJTEVfQVNTRVJUKHNpemVvZihDb2xsZWN0b3JDZWxsKSAlIDIg
PT0gMCwgQ29sbGVjdG9yX2NlbGxfc2l6ZV9pc19wb3dlcl9vZl90d28pOwogCi0jaWYgVVNFKEpT
VkFMVUUzMikKLXN0YXRpYyBib29sIGlzSGFsZkNlbGxBbGlnbmVkKHZvaWQgKnApCi17Ci0gICAg
cmV0dXJuICgoKGludHB0cl90KShwKSAmIChDRUxMX01BU0sgPj4gMSkpID09IDApOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNQb3NzaWJsZUNlbGwodm9pZCogcCkKLXsKLSAgICByZXR1cm4g
aXNIYWxmQ2VsbEFsaWduZWQocCkgJiYgcDsKLX0KLQotI2Vsc2UKLQogc3RhdGljIGlubGluZSBi
b29sIGlzQ2VsbEFsaWduZWQodm9pZCAqcCkKIHsKICAgICByZXR1cm4gKCgoaW50cHRyX3QpKHAp
ICYgQ0VMTF9NQVNLKSA9PSAwKTsKQEAgLTY2NCw3ICs2NTEsNiBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNQb3NzaWJsZUNlbGwodm9pZCogcCkKIHsKICAgICByZXR1cm4gaXNDZWxsQWxpZ25lZChw
KSAmJiBwOwogfQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzIpCiAKIHZvaWQgSGVhcDo6bWFya0Nv
bnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwgdm9pZCogZW5k
KQogewpAQCAtMTE0NSwxMCArMTEzMSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTmFtZShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVy
biAic3RyaW5nIjsKLSNpZiBVU0UoSlNWQUxVRTMyKQotICAgIGlmIChjZWxsLT5pc051bWJlcigp
KQotICAgICAgICByZXR1cm4gIm51bWJlciI7Ci0jZW5kaWYKICAgICBpZiAoY2VsbC0+aXNHZXR0
ZXJTZXR0ZXIoKSkKICAgICAgICAgcmV0dXJuICJHZXR0ZXItU2V0dGVyIjsKICAgICBpZiAoY2Vs
bC0+aXNBUElWYWx1ZVdyYXBwZXIoKSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IGNmYTE0
NTQ4NzljMzA3NmE1ZGE4YWU4Y2ZhZjM3Mzg4ZGZjODQ4MWYuLjFhN2Y4YjJmZTRlMTQwMGMwYzhl
YjFjNzk5M2UyNjQwNTk0YzgzMTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtNzUsOSAr
NzUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFF1ZXJ5aW5n
IHRoZSB0eXBlLgotI2lmIFVTRShKU1ZBTFVFMzIpCi0gICAgICAgIGJvb2wgaXNOdW1iZXIoKSBj
b25zdDsKLSNlbmRpZgogICAgICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIGJv
b2wgaXNPYmplY3QoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGlzR2V0dGVyU2V0dGVy
KCkgY29uc3Q7CkBAIC0xNTYsMTMgKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAg
ICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyKQotICAgIGlubGluZSBib29sIEpTQ2VsbDo6aXNOdW1i
ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT50eXBlSW5mbygp
LnR5cGUoKSA9PSBOdW1iZXJUeXBlOwotICAgIH0KLSNlbmRpZgotCiAgICAgaW5saW5lIGJvb2wg
SlNDZWxsOjppc09iamVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGU7CkBAIC0yNTMsMTMgKzI0MywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotI2lmICFV
U0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgQUxXQVlTX0lOTElORSBK
U0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXND
ZWxsKCkpOwogICAgICAgICByZXR1cm4gbV9wdHI7CiAgICAgfQotI2VuZGlmIC8vICFVU0UoSlNW
QUxVRTMyXzY0KQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKICAgICBpbmxpbmUgSlNWYWx1
ZSBKU1ZhbHVlOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAKaW5kZXggMDczYjU0YzdiZjM4YmEzMzBhMDdhYTM0MWViNjRiNzcxNTZj
NTEyOS4uMTQwNGRkZmYyMDFlNTU3Mjc2MDE0NGIwYjc0ZDQwNDc5NTIyNDJiMSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMTMzLDkgKzEzMyw2IEBAIEpTR2xv
YmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBUaHJl
YWRTdGFja1R5cGUgdGhyZWFkCiAgICAgLCBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoR2V0dGVyU2V0
dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogICAgICwgYXBpV3JhcHBlclN0cnVjdHVy
ZShKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkKICAgICAsIGR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlKEpTQ2VsbDo6Y3JlYXRlRHVtbXlTdHJ1Y3R1cmUoKSkK
LSNpZiBVU0UoSlNWQUxVRTMyKQotICAgICwgbnVtYmVyU3RydWN0dXJlKEpTTnVtYmVyQ2VsbDo6
Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkKLSNlbmRpZgogICAgICwgaWRlbnRpZmllclRhYmxl
KGdsb2JhbERhdGFUeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50
aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCiAgICAgLCBwcm9wZXJ0eU5h
bWVzKG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKSkKICAgICAsIGVtcHR5TGlzdChuZXcgTWFy
a2VkQXJndW1lbnRCdWZmZXIpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAppbmRl
eCA2N2YyZWQ0YmE5NmY5NTFlYmU0ODk3YWQ3YjA5NTJiOWFiZWU2ZmZjLi43NzVkMDI2MWNkMDgz
N2M0ZWZmODU2ZTBkNTk1ZjFkZjMyOGIzOTg1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgKQEAgLTE1NCwxMCArMTU0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJl
ZlB0cjxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFJlZlB0cjxTdHJ1
Y3R1cmU+IGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlOwogCi0jaWYgVVNFKEpTVkFMVUUzMikK
LSAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbnVtYmVyU3RydWN0dXJlOwotI2VuZGlmCi0KICAg
ICAgICAgc3RhdGljIHZvaWQgc3RvcmVWUHRycygpOwogICAgICAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSB2b2lkKiBqc0FycmF5VlB0cjsKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgdm9p
ZCoganNCeXRlQXJyYXlWUHRyOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CmluZGV4IDNiOTk0MzkxMTgwMWNjY2E5OWRjOTdlMDkwZDg1MGIyNzg2MmMxNmIuLjM2ZmE3MGJh
ZTA1ODJlMjQ3YzUwNzRlYTBkN2JjMzJhN2RlYmYzNTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKQEAgLTM4NiwxNiArMzg2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGlmICh0eXBlSW5mbygpLnR5cGUoKSA9PSBPYmplY3RUeXBlKQogICAgICAgICAgICAg
cmV0dXJuIG1fcHJvdG90eXBlOwogCi0jaWYgVVNFKEpTVkFMVUUzMikKLSAgICAgICAgaWYgKHR5
cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsKLQotICAgICAgICBBU1NF
UlQodHlwZUluZm8oKS50eXBlKCkgPT0gTnVtYmVyVHlwZSk7Ci0gICAgICAgIHJldHVybiBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlclByb3RvdHlwZSgpOwotI2Vsc2UKICAgICAg
ICAgQVNTRVJUKHR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpOwogICAgICAgICByZXR1
cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsKLSNlbmRp
ZgogICAgIH0KIAogICAgIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5
cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tZWRpYXRlLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRp
YXRlLmgKaW5kZXggOTEyN2I2YTY0ODdhYTVlYWRlNTM3ZDg1ZGFmNjY0YjY4YzU5YWRhMi4uZmZh
NDQ2ZTA1Y2FlYWM2ZDIzNmQ5NjNlYTliYmE3NzZkZDI1MTNkOSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW1lZGlhdGUuaApAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBKU0ltbWVkaWF0ZV9o
CiAjZGVmaW5lIEpTSW1tZWRpYXRlX2gKIAotI2lmICFVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVT
RShKU1ZBTFVFNjQpCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgVVN0cmluZzsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgaW5saW5lIGludHB0cl90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoZG91YmxlIHZh
bHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6Yml0d2lzZV9jYXN0PGludHB0cl90Pih2
YWx1ZSk7CkBAIC01NCw3ICs1Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAg
cmV0dXJuIFdURjo6Yml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpOwogICAgIH0KLSNlbmRpZgog
CiAgICAgLyoKICAgICAgKiBBIEpTVmFsdWUqIGlzIGVpdGhlciBhIHBvaW50ZXIgdG8gYSBjZWxs
IChhIGhlYXAtYWxsb2NhdGVkIG9iamVjdCkgb3IgYW4gaW1tZWRpYXRlIChhIHR5cGUtdGFnZ2Vk
IApAQCAtMTU5LDE2ICsxNTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBK
U1ZhbHVlIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBsb25nIGkpOwog
ICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGxvbmcgbG9uZyBpKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIC8v
IElmIGFsbCBiaXRzIGluIHRoZSBtYXNrIGFyZSBzZXQsIHRoaXMgaW5kaWNhdGVzIGFuIGludGVn
ZXIgbnVtYmVyLAogICAgICAgICAvLyBpZiBhbnkgYnV0IG5vdCBhbGwgYXJlIHNldCB0aGlzIHZh
bHVlIGlzIGEgZG91YmxlIHByZWNpc2lvbiBudW1iZXIuCiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBUYWdUeXBlTnVtYmVyID0gMHhmZmZmMDAwMDAwMDAwMDAwbGw7CiAgICAgICAgIC8v
IFRoaXMgdmFsdWUgaXMgMl40OCwgdXNlZCB0byBlbmNvZGUgZG91YmxlcyBzdWNoIHRoYXQgdGhl
IGVuY29kZWQgdmFsdWUgd2lsbCBiZWdpbgogICAgICAgICAvLyB3aXRoIGEgMTYtYml0IHBhdHRl
cm4gd2l0aGluIHRoZSByYW5nZSAweDAwMDEuLjB4RkZGRS4KICAgICAgICAgc3RhdGljIGNvbnN0
IGludHB0cl90IERvdWJsZUVuY29kZU9mZnNldCA9IDB4MTAwMDAwMDAwMDAwMGxsOwotI2VsaWYg
VVNFKEpTVkFMVUUzMikKLSAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFRhZ1R5cGVOdW1i
ZXIgPSAweDE7IC8vIGJvdHRvbSBiaXQgc2V0IGluZGljYXRlcyBpbnRlZ2VyLCB0aGlzIGRvbWlu
YXRlcyB0aGUgZm9sbG93aW5nIGJpdAotI2VuZGlmCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnRw
dHJfdCBUYWdCaXRUeXBlT3RoZXIgICA9IDB4MjsgLy8gc2Vjb25kIGJpdCBzZXQgaW5kaWNhdGVz
IGltbWVkaWF0ZSBvdGhlciB0aGFuIGFuIGludGVnZXIKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dHB0cl90IFRhZ01hc2sgICAgICAgICAgID0gVGFnVHlwZU51bWJlciB8IFRhZ0JpdFR5cGVPdGhl
cjsKIApAQCAtMTgxLDExICsxNzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludHB0cl90IEZ1bGxUYWdUeXBlVW5kZWZpbmVkID0gVGFnQml0VHlwZU90aGVyIHwg
RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQ7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBG
dWxsVGFnVHlwZU51bGwgICAgICA9IFRhZ0JpdFR5cGVPdGhlcjsKIAotI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IEludGVnZXJQYXlsb2FkU2hpZnQgID0g
MDsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IEludGVnZXJQYXlsb2FkU2hp
ZnQgID0gMTsKLSNlbmRpZgogICAgICAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBFeHRlbmRlZFBh
eWxvYWRTaGlmdCA9IDQ7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEV4dGVuZGVk
UGF5bG9hZEJpdEJvb2xWYWx1ZSA9IDEgPDwgRXh0ZW5kZWRQYXlsb2FkU2hpZnQ7CkBAIC0yMDQs
MTkgKzE5NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIGlzSW50ZWdlck51bWJlcihKU1ZhbHVlIHYpCiAgICAgICAgIHsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2KSAmIFRhZ1R5cGVOdW1i
ZXIpID09IFRhZ1R5cGVOdW1iZXI7Ci0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIGlzTnVtYmVy
KHYpOwotI2VuZGlmCiAgICAgICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEb3VibGUoSlNWYWx1ZSB2KQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gaXNOdW1iZXIodikgJiYgIWlzSW50ZWdlck51bWJlcih2KTsKICAg
ICAgICAgfQotI2VuZGlmCiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc1Bv
c2l0aXZlSW50ZWdlck51bWJlcihKU1ZhbHVlIHYpCiAgICAgICAgIHsKQEAgLTI2MCwxMSArMjQ0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBhcmVCb3RoSW1tZWRpYXRlSW50ZWdlck51bWJlcnMoSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikK
ICAgICAgICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICByZXR1cm4gKHJhd1Zh
bHVlKHYxKSAmIHJhd1ZhbHVlKHYyKSAmIFRhZ1R5cGVOdW1iZXIpID09IFRhZ1R5cGVOdW1iZXI7
Ci0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYxKSAmIHJhd1ZhbHVlKHYyKSAm
IFRhZ1R5cGVOdW1iZXI7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBkb3Vi
bGUgdG9Eb3VibGUoSlNWYWx1ZSk7CkBAIC0yODUsMTMgKzI2NSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBvbmVJbW1lZGlhdGUoKTsKIAogICAgIHByaXZhdGU6
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5JbW1lZGlh
dGVJbnQgPSAoKC1JTlRfTUFYKSAtIDEpOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heElt
bWVkaWF0ZUludCA9IElOVF9NQVg7Ci0jZWxzZQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bkltbWVkaWF0ZUludCA9ICgoLUlOVF9NQVgpIC0gMSkgPj4gSW50ZWdlclBheWxvYWRTaGlmdDsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhJbW1lZGlhdGVJbnQgPSBJTlRfTUFYID4+IElu
dGVnZXJQYXlsb2FkU2hpZnQ7Ci0jZW5kaWYKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1heEltbWVkaWF0ZVVJbnQgPSBtYXhJbW1lZGlhdGVJbnQ7CiAKICAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBtYWtlVmFsdWUoaW50cHRyX3QgaW50ZWdlcikKQEAgLTMwMiwy
MSArMjc3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBXaXRoIFVTRShKU1ZBTFVF
NjQpIHdlIHdhbnQgdGhlIGFyZ3VtZW50IHRvIGJlIHplcm8gZXh0ZW5kZWQsIHNvIHRoZQogICAg
ICAgICAvLyBpbnRlZ2VyIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHRhZyBiaXRzIGluIHRo
ZSB1cHBlciB3b3JkLiAgSW4gdGhlIGRlZmF1bHQgZW5jb2RpbmcsCiAgICAgICAgIC8vIGlmIGlu
dHB0cl90IGlkIGxhcmdlciB0aGVuIGludDMyX3Qgd2Ugc2lnbiBleHRlbmQgdGhlIHZhbHVlIHRo
cm91Z2ggdGhlIHVwcGVyIHdvcmQuCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBtYWtlSW50KHVpbnQzMl90IHZhbHVlKQotI2Vsc2UKLSAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBtYWtlSW50KGludDMyX3QgdmFsdWUp
Ci0jZW5kaWYKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKSA8PCBJbnRlZ2VyUGF5bG9hZFNoaWZ0KSB8IFRhZ1R5cGVO
dW1iZXIpOwogICAgICAgICB9CiAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbWFrZURvdWJsZShkb3VibGUgdmFsdWUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmVpbnRlcnByZXREb3VibGVU
b0ludHB0cih2YWx1ZSkgKyBEb3VibGVFbmNvZGVPZmZzZXQpOwogICAgICAgICB9Ci0jZW5kaWYK
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbWFrZUJvb2wo
Ym9vbCBiKQogICAgICAgICB7CkBAIC0zMzYsMTIgKzMwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgc3RhdGljIEpTVmFsdWUgZnJv
bU51bWJlck91dHNpZGVJbnRlZ2VyUmFuZ2UoVCk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBkb3VibGUgZG91YmxlVmFsdWUoSlNWYWx1ZSB2KQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRJbnRwdHJUb0RvdWJsZShy
YXdWYWx1ZSh2KSAtIERvdWJsZUVuY29kZU9mZnNldCk7CiAgICAgICAgIH0KLSNlbmRpZgogCiAg
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW50VmFsdWUoSlNWYWx1ZSB2KQog
ICAgICAgICB7CkBAIC0zNzEsNyArMzM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFr
ZUludCgwKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU0ltbWVkaWF0ZTo6b25lSW1t
ZWRpYXRlKCkgeyByZXR1cm4gbWFrZUludCgxKTsgfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpbmxpbmUgYm9vbCBkb3VibGVUb0Jvb2xlYW4oZG91YmxlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgMC4wIHx8IHZhbHVlID4gMC4wOwpAQCAtMzgzLDEzICszNDksNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzTnVtYmVyKHYpID8gaXNJbnRlZ2Vy
TnVtYmVyKHYpID8gdiAhPSB6ZXJvSW1tZWRpYXRlKCkKICAgICAgICAgICAgIDogZG91YmxlVG9C
b29sZWFuKGRvdWJsZVZhbHVlKHYpKSA6IHYgPT0gdHJ1ZUltbWVkaWF0ZSgpOwogICAgIH0KLSNl
bHNlCi0gICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4oSlNWYWx1
ZSB2KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKLSAgICAgICAgcmV0
dXJuIGlzSW50ZWdlck51bWJlcih2KSA/IHYgIT0gemVyb0ltbWVkaWF0ZSgpIDogdiA9PSB0cnVl
SW1tZWRpYXRlKCk7Ci0gICAgfQotI2VuZGlmCiAKICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90
IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZSB2KQogICAgIHsKQEAgLTM5
OCwxOSArMzU3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaW50VmFsdWUo
dik7CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogICAgIGlubGluZSBKU1ZhbHVlIEpTSW1tZWRpYXRlOjpmcm9tTnVtYmVyT3V0c2lkZUludGVn
ZXJSYW5nZShUIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1ha2VEb3VibGUoc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwogICAgIH0KLSNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBpbmxpbmUgSlNWYWx1ZSBKU0ltbWVkaWF0ZTo6ZnJvbU51bWJlck91dHNpZGVJ
bnRlZ2VyUmFuZ2UoVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgfQot
I2VuZGlmCiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNJbW1lZGlhdGU6OmZyb20oY2hh
ciBpKQogICAgIHsKQEAgLTQzOSwxMCArMzkwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNJbW1lZGlhdGU6OmZyb20oaW50IGkpCiAgICAgewotI2lm
ICFVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoKGkgPCBtaW5JbW1lZGlhdGVJbnQpIHwgKGkg
PiBtYXhJbW1lZGlhdGVJbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXJPdXRzaWRl
SW50ZWdlclJhbmdlKGkpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAg
IH0KIApAQCAtNTA1LDE0ICs0NTIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChp
c0ludGVnZXJOdW1iZXIodikpCiAgICAgICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpZiAoaXNOdW1iZXIodikpIHsKICAgICAgICAgICAg
IEFTU0VSVChpc0RvdWJsZSh2KSk7CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlVmFsdWUodik7
CiAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgIEFTU0VSVCghaXNOdW1iZXIodikpOwotI2VuZGlm
CiAKICAgICAgICAgaWYgKHJhd1ZhbHVlKHYpID09IEZ1bGxUYWdUeXBlVW5kZWZpbmVkKQogICAg
ICAgICAgICAgcmV0dXJuIG5vbklubGluZU5hTigpOwpAQCAtNjcwLDExICs2MTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSByaWdodFNo
aWZ0SW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlIHZhbCwgSlNWYWx1ZSBzaGlmdCkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdFJzaGlmdCh2YWwsIHNoaWZ0KSB8fCBjYW5E
b0Zhc3RVcnNoaWZ0KHZhbCwgc2hpZnQpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAg
ICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFsdWUoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0
YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3
VmFsdWUodmFsKSkgPj4gKChKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoc2hpZnQpID4+IEpTSW1tZWRp
YXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSAmIDB4MWYpKSkgfCBKU0ltbWVkaWF0ZTo6VGFnVHlw
ZU51bWJlcik7Ci0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFs
dWUoKEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2YWwpID4+ICgoSlNJbW1lZGlhdGU6OnJhd1ZhbHVl
KHNoaWZ0KSA+PiBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCkgJiAweDFmKSkgfCBK
U0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcik7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKEpT
VmFsdWUgdikKQEAgLTcxOCw2ICs2NTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLSNlbmRpZiAvLyAhVVNFKEpTVkFMVUUzMl82NCkKKyNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQogCiAjZW5kaWYgLy8gSlNJbW1lZGlhdGVfaApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU051bWJlckNlbGwuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU051bWJlckNlbGwuY3BwCmluZGV4IDc3Mzg4ZTAwNmQ5NzNjNTVhNmE2Nzk2NjY5NDQ1OTcz
OTA2ZWEyZWEuLjZmYTZiMmE0NzE0NDhmYmFhYjJiMWQ4M2FjNGQ5OTZhNzQ2MjA4YzcgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxsLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5jcHAKQEAgLTIzLDc1ICsyMyw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNOdW1iZXJDZWxsLmgiCiAKLSNpZiBVU0Uo
SlNWQUxVRTMyKQotCi0jaW5jbHVkZSAiTnVtYmVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiVVN0cmlu
Zy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSlNWYWx1ZSBKU051bWJlckNlbGw6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SlNOdW1iZXJDZWxsKj4odGhpcyk7Ci19Ci0KLWJvb2wgSlNOdW1iZXJD
ZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUmIHZhbHVlKQotewotICAgIG51bWJlciA9IG1fdmFsdWU7Ci0gICAgdmFsdWUgPSB0aGlzOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEpTTnVtYmVyQ2VsbDo6dG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWUgPCAwLjAgfHwgbV92YWx1ZSA+IDAu
MDsgLy8gZmFsc2UgZm9yIE5hTgotfQotCi1kb3VibGUgSlNOdW1iZXJDZWxsOjp0b051bWJlcihF
eGVjU3RhdGUqKSBjb25zdAotewotICByZXR1cm4gbV92YWx1ZTsKLX0KLQotVVN0cmluZyBKU051
bWJlckNlbGw6OnRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFVTdHJp
bmc6Om51bWJlcihtX3ZhbHVlKTsKLX0KLQotSlNPYmplY3QqIEpTTnVtYmVyQ2VsbDo6dG9PYmpl
Y3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIHJldHVybiBjb25zdHJ1Y3ROdW1iZXIo
ZXhlYywgY29uc3RfY2FzdDxKU051bWJlckNlbGwqPih0aGlzKSk7Ci19Ci0KLUpTT2JqZWN0KiBK
U051bWJlckNlbGw6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvbnN0cnVjdE51bWJlcihleGVjLCBjb25zdF9jYXN0PEpTTnVtYmVyQ2VsbCo+KHRo
aXMpKTsKLX0KLQotYm9vbCBKU051bWJlckNlbGw6OmdldFVJbnQzMih1aW50MzJfdCYgdWludDMy
KSBjb25zdAotewotICAgIHVpbnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKTsK
LSAgICByZXR1cm4gdWludDMyID09IG1fdmFsdWU7Ci19Ci0KLUpTVmFsdWUgSlNOdW1iZXJDZWxs
OjpnZXRKU051bWJlcigpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLUpTVmFsdWUganNOdW1i
ZXJDZWxsKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCi17Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNOdW1iZXJDZWxsKGV4ZWMsIGQpOwotfQotCi1KU1ZhbHVlIGpzTnVtYmVyQ2VsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQotewotICAgIHJldHVybiBuZXcgKGdsb2Jh
bERhdGEpIEpTTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzIpCi0KIC8vIEtlZXAgb3VyIGV4cG9ydGVkIHN5
bWJvbHMgbGlzdHMgaGFwcHkuCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTA1LDQgKzM2LDMgQEAg
SlNWYWx1ZSBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzIpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051
bWJlckNlbGwuaAppbmRleCBjZGQyZDhjYTVhNDg2ZTk5MmQ4OGQxNjgzMmYwNjUxYWFkZjFhOTNj
Li5hMjVjNTMxY2JlNTM2MThhYTNiNjIxY2ExZmY5MGNiNzAxZmM1M2Y4IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOdW1iZXJDZWxsLmgKQEAgLTM1LDE2NyArMzUsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBleHRlcm4gY29uc3QgZG91YmxlIE5hTjsKICAgICBleHRlcm4gY29uc3QgZG91Ymxl
IEluZjsKIAotI2lmIFVTRShKU1ZBTFVFMzIpCi0gICAgSlNWYWx1ZSBqc051bWJlckNlbGwoRXhl
Y1N0YXRlKiwgZG91YmxlKTsKLQotICAgIGNsYXNzIElkZW50aWZpZXI7Ci0gICAgY2xhc3MgSlND
ZWxsOwotICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNzIEpTU3RyaW5nOwotICAgIGNsYXNz
IFByb3BlcnR5U2xvdDsKLQotICAgIHN0cnVjdCBDbGFzc0luZm87Ci0gICAgc3RydWN0IEluc3Ry
dWN0aW9uOwotCi0gICAgY2xhc3MgSlNOdW1iZXJDZWxsIDogcHVibGljIEpTQ2VsbCB7Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzTnVtYmVyQ2Vs
bChKU0dsb2JhbERhdGEqLCBkb3VibGUpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc051bWJl
ckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgZG91Ymxl
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBk
b3VibGUmIG51bWJlciwgSlNWYWx1ZSYgdmFsdWUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdG9C
b29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJl
cihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVj
U3RhdGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3Qo
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRKU051bWJlcigp
OwotCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgRXhlY1N0YXRlKiBl
eGVjKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXhlYy0+aGVhcCgpLT5hbGxvY2F0
ZU51bWJlcihzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3Qgc2l6ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZU51bWJlcihzaXplKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhOdW1iZXJUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBOZWVkc1RoaXND
b252ZXJzaW9uKSwgQW5vbnltb3VzU2xvdENvdW50KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgSlNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQot
ICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpKQot
ICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBKU051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi0gICAgICAg
ICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCkubnVtYmVyU3RydWN0dXJlLmdldCgpKQot
ICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0VUludDMyKHVpbnQzMl90JikgY29uc3Q7Ci0KLSAgICAgICAg
ZG91YmxlIG1fdmFsdWU7Ci0gICAgfTsKLQotICAgIEpTVmFsdWUganNOdW1iZXJDZWxsKEpTR2xv
YmFsRGF0YSosIGRvdWJsZSk7Ci0KLSAgICBpbmxpbmUgYm9vbCBpc051bWJlckNlbGwoSlNWYWx1
ZSB2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHYuaXNDZWxsKCkgJiYgdi5hc0NlbGwoKS0+aXNO
dW1iZXIoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNOdW1iZXJDZWxsKiBhc051bWJlckNlbGwo
SlNWYWx1ZSB2KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ2VsbCh2KSk7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU051bWJlckNlbGwqPih2LmFzQ2VsbCgpKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcs
IEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCi0gICAgewotICAgICAgICAqdGhpcyA9IGpzTnVt
YmVyQ2VsbChleGVjLCBkKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gSlNJ
bW1lZGlhdGU6OmZyb20oZCk7Ci0gICAgICAgICp0aGlzID0gdiA/IHYgOiBqc051bWJlckNlbGwo
ZXhlYywgZCk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBpbnQgaSkKLSAgICB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IEpTSW1tZWRpYXRlOjpm
cm9tKGkpOwotICAgICAgICAqdGhpcyA9IHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGkpOwot
ICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSkKLSAgICB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkp
OwotICAgICAgICAqdGhpcyA9IHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGkpOwotICAgIH0K
LQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBpKQot
ICAgIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgICAg
ICp0aGlzID0gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgaSk7Ci0gICAgfQotCi0gICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsb25nIGkpCi0g
ICAgewotICAgICAgICBKU1ZhbHVlIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKLSAgICAgICAg
KnRoaXMgPSB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgbG9uZyBpKQotICAgIHsK
LSAgICAgICAgSlNWYWx1ZSB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgICAgICp0aGlz
ID0gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0g
ICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBsb25nIGxvbmcgaSkKLSAgICB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IEpTSW1tZWRpYXRl
Ojpmcm9tKGkpOwotICAgICAgICAqdGhpcyA9IHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIHN0
YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIGQpCi0gICAgewotICAgICAgICBK
U1ZhbHVlIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKLSAgICAgICAgKnRoaXMgPSB2ID8gdiA6
IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBkKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1
ZTo6SlNWYWx1ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBpKQotICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgICAgICp0aGlzID0gdiA/
IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpKQotICAg
IHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgICAgICp0
aGlzID0gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7Ci0gICAgfQotCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGlzTnVtYmVyQ2VsbChhc1ZhbHVlKCkpOwotICAgIH0KLQotICAgIGlubGluZSBkb3VibGUg
SlNWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFzTnVtYmVy
Q2VsbChhc1ZhbHVlKCkpLT52YWx1ZSgpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzTnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6
aXNOdW1iZXIoYXNWYWx1ZSgpKSB8fCBpc0RvdWJsZSgpOwotICAgIH0KLQotICAgIGlubGluZSBk
b3VibGUgSlNWYWx1ZTo6dW5jaGVja2VkR2V0TnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc051bWJlcigpKTsKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0ltbWVk
aWF0ZShhc1ZhbHVlKCkpID8gSlNJbW1lZGlhdGU6OnRvRG91YmxlKGFzVmFsdWUoKSkgOiBhc0Rv
dWJsZSgpOwotICAgIH0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzIpCi0KICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJs
ZVRhZywgRXhlY1N0YXRlKiwgZG91YmxlIGQpCiAgICAgewpAQCAtMjk1LDcgKzEzNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAotI2lmIFVTRShKU1ZB
TFVFMzIpIHx8IFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkKIAogICAgIGlubGlu
ZSBKU1ZhbHVlOjpKU1ZhbHVlKEV4ZWNTdGF0ZSosIGNoYXIgaSkKICAgICB7CkBAIC0zNTEsNyAr
MTkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzIpIHx8IFVTRShKU1ZBTFVFNjQpCisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAppbmRleCBkYTk1ZjA3ZDQ0ZTBkOTQxZWIzYmY5ZDAwNzlhM2VhMTU5ODVlNzg5Li44OTgx
NDY5MDgwZDdmZjBhYzcyMDFjZjU5MzU2NzFjM2ZmMzg5YzUzIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCkBAIC0yNTMsOSArMjUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYyk7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsK
ICAgICAgICAgdm9pZCBpc1N0cmluZygpOwotI2lmIFVTRShKU1ZBTFVFMzIpCi0gICAgICAgIHZv
aWQgaXNOdW1iZXIoKTsKLSNlbmRpZgogCiAgICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIChpc1VzaW5nSW5saW5lU3RvcmFnZSgpID8g
bV9pbmxpbmVTdG9yYWdlIDogbV9leHRlcm5hbFN0b3JhZ2UpOyB9CiAgICAgICAgIFByb3BlcnR5
U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAoaXNVc2luZ0lubGluZVN0b3JhZ2Uo
KSA/IG1faW5saW5lU3RvcmFnZSA6IG1fZXh0ZXJuYWxTdG9yYWdlKTsgfQpAQCAtMzA0LDkgKzMw
MSw3IEBAIGlubGluZSBKU09iamVjdDo6SlNPYmplY3QoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmUpCiAgICAgQVNTRVJUKG1fc3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VD
YXBhY2l0eSgpID09IGlubGluZVN0b3JhZ2VDYXBhY2l0eSk7CiAgICAgQVNTRVJUKG1fc3RydWN0
dXJlLT5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChwcm90b3R5cGUoKS5pc051bGwoKSB8fCBIZWFw
OjpoZWFwKHRoaXMpID09IEhlYXA6OmhlYXAocHJvdG90eXBlKCkpKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KSB8fCBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0YoSlNP
YmplY3QsIG1faW5saW5lU3RvcmFnZSkgJSBzaXplb2YoZG91YmxlKSA9PSAwKTsKLSNlbmRpZgog
fQogCiBpbmxpbmUgSlNPYmplY3Q6On5KU09iamVjdCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFsdWUuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5o
CmluZGV4IGY3NzYxNTczZGU5MWY0MTA3N2Q5MzI5MTU3Y2M4NzhiNThkODFmOWUuLmI1ZGNiZWNm
MzdkMjZmZDQ5MzE2ZTIwODQzM2I3NjgxNThiZGJjYTMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5oCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVuY29kZShKU1ZhbHVlIHZhbHVlKTsKICAgICAgICAg
c3RhdGljIEpTVmFsdWUgZGVjb2RlKEVuY29kZWRKU1ZhbHVlIHB0cik7Ci0jaWYgIVVTRShKU1ZB
TFVFMzJfNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0
aWMgSlNWYWx1ZSBtYWtlSW1tZWRpYXRlKGludHB0cl90IHZhbHVlKTsKICAgICAgICAgaW50cHRy
X3QgaW1tZWRpYXRlVmFsdWUoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCmlu
ZGV4IDZjMThjZGQzYmZhNDQxY2E1ODhiZDhiN2NiYjdlOGM1ZWJkZmI3NDkuLmU4MmI1OTM0N2Ix
MWY0NjE0MjQzYmQwYTczMmNkM2YwMjJlNmM3YWQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJPYmplY3QuaApAQCAtMzcsMTEgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
IAogICAgIHByb3RlY3RlZDoKLSNpZiBVU0UoSlNWQUxVRTMyKQotICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNNYXJrQ2hpbGRyZW4gfCBKU1dy
YXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotI2Vsc2UKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKLSNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDFjMGE4MmQwNzUxMGRiYmZmZDlhNGQyNTk4NGZmODBhYTZiMDQ0NGIuLjVlNzY0MjM4
MDhmZGRhYzAyY2ZhNGY4MjJiZWIwMGI3ZjNlNWIxMTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBA
IC05MjQsMTkgKzkyNCwxNyBAQAogI2RlZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMAogI2Vu
ZGlmCiAKLSNpZiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkgJiYgIWRlZmluZWQoV1RGX1VT
RV9KU1ZBTFVFMzIpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KQorI2lmICFkZWZp
bmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkK
ICNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpKSkgXAogICAgIHx8
IChDUFUoSUE2NCkgJiYgIUNQVShJQTY0XzMyKSkgXAogICAgIHx8IENQVShBTFBIQSkgXAogICAg
IHx8IENQVShTUEFSQzY0KSBcCiAgICAgfHwgQ1BVKFBQQzY0KQogI2RlZmluZSBXVEZfVVNFX0pT
VkFMVUU2NCAxCi0jZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihNU1ZDKQot
I2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMiAxCiAjZWxzZQogI2RlZmluZSBXVEZfVVNFX0pTVkFM
VUUzMl82NCAxCiAjZW5kaWYKLSNlbmRpZiAvKiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkg
JiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzIpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxV
RTMyXzY0KSAqLworI2VuZGlmIC8qICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVm
aW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkgKi8KIAogI2lmICFkZWZpbmVkKEVOQUJMRV9SRVBB
SU5UX1RIUk9UVExJTkcpCiAjZGVmaW5lIEVOQUJMRV9SRVBBSU5UX1RIUk9UVExJTkcgMApAQCAt
OTc2LDEwICs5NzQsNiBAQAogICAgICNlbmRpZgogICAgICNlbmRpZgogCi0gICAgI2lmICFkZWZp
bmVkKEVOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpICYmIENQVShYODYpICYmIFVTRShK
U1ZBTFVFMzIpCi0gICAgI2RlZmluZSBFTkFCTEVfSklUX09QVElNSVpFX05BVElWRV9DQUxMIDAK
LSAgICAjZW5kaWYKLQogICAgICNpZm5kZWYgRU5BQkxFX0pJVF9PUFRJTUlaRV9DQUxMCiAgICAg
I2RlZmluZSBFTkFCTEVfSklUX09QVElNSVpFX0NBTEwgMQogICAgICNlbmRpZgo=
</data>
<flag name="review"
          id="61230"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>