<?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>136518</bug_id>
          
          <creation_ts>2014-09-03 17:13:33 -0700</creation_ts>
          <short_desc>Fixed indentations and some style warnings in JavaScriptCore/runtime</short_desc>
          <delta_ts>2014-09-04 12:10:54 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033099</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-09-03 17:13:33 -0700</bug_when>
    <thetext>Formatting only change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033102</commentid>
    <comment_count>1</comment_count>
      <attachid>237603</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-09-03 17:22:48 -0700</bug_when>
    <thetext>Created attachment 237603
the patch

Changes are cosmetic only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033256</commentid>
    <comment_count>2</comment_count>
      <attachid>237603</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-09-04 11:34:51 -0700</bug_when>
    <thetext>Comment on attachment 237603
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033267</commentid>
    <comment_count>3</comment_count>
      <attachid>237603</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-04 12:10:50 -0700</bug_when>
    <thetext>Comment on attachment 237603
the patch

Clearing flags on attachment: 237603

Committed r173269: &lt;http://trac.webkit.org/changeset/173269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033268</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-04 12:10:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237603</attachid>
            <date>2014-09-03 17:22:48 -0700</date>
            <delta_ts>2014-09-04 12:10:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-136518.patch</filename>
            <type>text/plain</type>
            <size>303309</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE0LTA5LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXhlZCBpbmRlbnRhdGlvbnMgYW5kIHNvbWUgc3R5bGUgd2FybmluZ3MgaW4gSmF2YVNjcmlwdENv
cmUvcnVudGltZS4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNjUxOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHNvIHJlbW92ZWQg
c29tZSBzdXBlcmZsb3VzIHNwYWNlcy4gIFRoZXJlIGFyZSBubyBzZW1hbnRpYyBjaGFuZ2VzLgor
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9Db25z
dHJ1Y3REYXRhLmg6CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaDoKKyAgICAg
ICAgKiBydW50aW1lL0RhdGVJbnN0YW5jZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUluc3Rh
bmNlQ2FjaGUuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuaDoKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAgICAgICogcnVudGltZS9F
cnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50
aW1lL0dldHRlclNldHRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
TG9jay5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0pTV3JhcHBlck9i
amVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgICogcnVudGltZS9N
YXRoT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgICogcnVu
dGltZS9OdW1lcmljU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmg6CisgICAgICAgICogcnVudGltZS9Qcm90ZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0Lmg6CisgICAg
ICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU21h
bGxTdHJpbmdzLmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorCiAyMDE0LTA5LTAzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE2NzMyNSk6IChudWxsKSBlbnRyeSBh
ZGRlZCB0byBYY29kZSBwcm9qZWN0IGZpbGUgd2hlbiBKU0JvdW5kRnVuY3Rpb24uaCB3YXMgcmVt
b3ZlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAko
cmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNSArMjcsMTUgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAgICAgCi0gICAgc3RydWN0IFBhcnNlckVycm9yOwotICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
LSAgICBjbGFzcyBKU1Njb3BlOwotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci0gICAgY2xhc3MgVk07
CitzdHJ1Y3QgUGFyc2VyRXJyb3I7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU1Njb3BlOwor
Y2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFZNOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBjaGVja1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUg
dGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKK0pTX0VYUE9S
VF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2Vy
RXJyb3ImKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOworSlNfRVhQT1JUX1BS
SVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCksIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc3RydWN0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyOSAr
MzQsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBBcmdMaXN0OwotICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7Ci0gICAgY2xhc3Mg
SlNPYmplY3Q7Ci0gICAgY2xhc3MgSlNTY29wZTsKLQotICAgIGVudW0gQ29uc3RydWN0VHlwZSB7
Ci0gICAgICAgIENvbnN0cnVjdFR5cGVOb25lLAotICAgICAgICBDb25zdHJ1Y3RUeXBlSG9zdCwK
LSAgICAgICAgQ29uc3RydWN0VHlwZUpTCi0gICAgfTsKLQotICAgIHVuaW9uIENvbnN0cnVjdERh
dGEgewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgTmF0aXZlRnVuY3Rpb24gZnVuY3Rp
b247Ci0gICAgICAgIH0gbmF0aXZlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBKU1Njb3Bl
KiBzY29wZTsKLSAgICAgICAgfSBqczsKLSAgICB9OworY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4
ZWNTdGF0ZTsKK2NsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEpTT2JqZWN0OworY2xh
c3MgSlNTY29wZTsKKworZW51bSBDb25zdHJ1Y3RUeXBlIHsKKyAgICBDb25zdHJ1Y3RUeXBlTm9u
ZSwKKyAgICBDb25zdHJ1Y3RUeXBlSG9zdCwKKyAgICBDb25zdHJ1Y3RUeXBlSlMKK307CisKK3Vu
aW9uIENvbnN0cnVjdERhdGEgeworICAgIHN0cnVjdCB7CisgICAgICAgIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmN0aW9uOworICAgIH0gbmF0aXZlOworICAgIHN0cnVjdCB7CisgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlOworICAgICAgICBKU1Njb3BlKiBzY29wZTsK
KyAgICB9IGpzOworfTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0
VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzkgKzI1
LDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKK2Ns
YXNzIERhdGVQcm90b3R5cGU7CiAKLSAgICBjbGFzcyBEYXRlQ29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEludGVybmFs
RnVuY3Rpb24gQmFzZTsKLQotICAgICAgICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRGF0ZUNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERhdGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIERh
dGVDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5m
aW5pc2hDcmVhdGlvbih2bSwgZGF0ZVByb3RvdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gY29u
c3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBERUNMQVJFX0lORk87Ci0KLSAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICAgICAgfQot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgRGF0ZVBy
b3RvdHlwZSopOwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1
cmVGbGFnczsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIERhdGVDb25zdHJ1Y3RvcihWTSYsIFN0
cnVjdHVyZSopOwotICAgICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENh
bGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CitjbGFzcyBEYXRlQ29uc3RydWN0b3IgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0
aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIERhdGVDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxEYXRlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBEYXRlQ29uc3RydWN0b3Iodm0s
IHN0cnVjdHVyZSk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZGF0
ZVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgRGF0ZVBy
b3RvdHlwZSopOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZs
YWdzOworCitwcml2YXRlOgorICAgIERhdGVDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwor
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgfTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworfTsKIAotICAgIEpTT2JqZWN0KiBjb25zdHJ1
Y3REYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOworSlNP
YmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBB
cmdMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDY5ICsyNSw2OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIERhdGVJ
bnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewotICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgRGF0ZUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGRvdWJsZSk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIERhdGVJ
bnN0YW5jZSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGRvdWJsZSBkYXRl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRlSW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPih2bS5oZWFwKSkgRGF0ZUluc3RhbmNl
KHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZt
LCBkYXRlKTsKLSAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBEYXRlSW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRlSW5zdGFuY2UqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPih2bS5oZWFwKSkgRGF0ZUluc3Rh
bmNlKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGRvdWJsZSBpbnRlcm5hbE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsVmFsdWUoKS5h
c051bWJlcigpOyB9Ci0KLSAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgICAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhICYmIG1fZGF0YS0+bV9n
cmVnb3JpYW5EYXRlVGltZUNhY2hlZEZvck1TID09IGludGVybmFsTnVtYmVyKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWU7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5E
YXRlVGltZVVUQyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtX2RhdGEgJiYgbV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVUaW1lVVRDQ2FjaGVkRm9yTVMg
PT0gaW50ZXJuYWxOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJm1fZGF0YS0+bV9j
YWNoZWRHcmVnb3JpYW5EYXRlVGltZVVUQzsKLSAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVH
cmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
KiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGNhbGN1bGF0ZUdyZWdv
cmlhbkRhdGVUaW1lVVRDKEV4ZWNTdGF0ZSopIGNvbnN0OworY2xhc3MgRGF0ZUluc3RhbmNlIDog
cHVibGljIEpTV3JhcHBlck9iamVjdCB7Citwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgRGF0ZUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBk
b3VibGUpOwogCi0gICAgICAgIG11dGFibGUgUmVmUHRyPERhdGVJbnN0YW5jZURhdGE+IG1fZGF0
YTsKLSAgICB9OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUpOworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJhc2U7CiAKLSAgICBpbmxpbmUgRGF0
ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBEYXRl
SW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBkb3VibGUgZGF0
ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKERhdGVJ
bnN0YW5jZTo6aW5mbygpKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFu
Y2UqPihhc09iamVjdCh2YWx1ZSkpOworICAgICAgICBEYXRlSW5zdGFuY2UqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPih2bS5oZWFwKSkgRGF0ZUlu
c3RhbmNlKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIGRhdGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgc3RhdGlj
IERhdGVJbnN0YW5jZSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBEYXRlSW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8RGF0ZUluc3RhbmNlPih2bS5oZWFwKSkgRGF0ZUluc3RhbmNlKHZtLCBzdHJ1Y3R1cmUp
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCisgICAgZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLmFzTnVtYmVyKCk7IH0KKworICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CisKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YSAmJiBtX2Rh
dGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUyA9PSBpbnRlcm5hbE51bWJlcigpKQor
ICAgICAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWU7Cisg
ICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZShleGVjKTsKKyAgICB9CisK
KyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWVVVEMoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEtPm1f
Z3JlZ29yaWFuRGF0ZVRpbWVVVENDYWNoZWRGb3JNUyA9PSBpbnRlcm5hbE51bWJlcigpKQorICAg
ICAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEM7Cisg
ICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGNh
bGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTX0VYUE9S
VF9QUklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRl
VGltZVVUQyhFeGVjU3RhdGUqKSBjb25zdDsKKworICAgIG11dGFibGUgUmVmUHRyPERhdGVJbnN0
YW5jZURhdGE+IG1fZGF0YTsKK307CisKK0RhdGVJbnN0YW5jZSogYXNEYXRlSW5zdGFuY2UoSlNW
YWx1ZSk7CisKK2lubGluZSBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUgdmFs
dWUpCit7CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoRGF0ZUluc3RhbmNl
OjppbmZvKCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4oYXNPYmpl
Y3QodmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBEYXRlSW5z
dGFuY2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2VDYWNoZS5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlSW5zdGFuY2VDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw1OSAr
MzUsNTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBEYXRlSW5zdGFuY2VEYXRh
IDogcHVibGljIFJlZkNvdW50ZWQ8RGF0ZUluc3RhbmNlRGF0YT4gewotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZUluc3RhbmNlRGF0YT4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGVJbnN0YW5jZURhdGEpOyB9Ci0KLSAgICAgICAgZG91YmxlIG1f
Z3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUzsKLSAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUg
bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZTsKLSAgICAgICAgZG91YmxlIG1fZ3JlZ29yaWFuRGF0
ZVRpbWVVVENDYWNoZWRGb3JNUzsKLSAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgbV9jYWNoZWRH
cmVnb3JpYW5EYXRlVGltZVVUQzsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIERhdGVJbnN0YW5j
ZURhdGEoKQotICAgICAgICAgICAgOiBtX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9yTVMoUE5h
TikKLSAgICAgICAgICAgICwgbV9ncmVnb3JpYW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TKFBOYU4p
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBjbGFzcyBEYXRlSW5zdGFuY2VD
YWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZv
aWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNhY2hlU2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIG1fY2FjaGVbaV0ua2V5ID0gUE5hTjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgRGF0ZUluc3RhbmNlRGF0YSogYWRkKGRvdWJs
ZSBkKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZUVudHJ5JiBlbnRyeSA9IGxvb2t1cChk
KTsKLSAgICAgICAgICAgIGlmIChkID09IGVudHJ5LmtleSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZW50cnkudmFsdWUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGVudHJ5LmtleSA9IGQ7Ci0gICAg
ICAgICAgICBlbnRyeS52YWx1ZSA9IERhdGVJbnN0YW5jZURhdGE6OmNyZWF0ZSgpOworY2xhc3Mg
RGF0ZUluc3RhbmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGVJbnN0YW5jZURhdGE+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlSW5zdGFuY2VEYXRhPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGF0ZUluc3RhbmNlRGF0YSk7IH0KKworICAgIGRvdWJs
ZSBtX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9yTVM7CisgICAgR3JlZ29yaWFuRGF0ZVRpbWUg
bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZTsKKyAgICBkb3VibGUgbV9ncmVnb3JpYW5EYXRlVGlt
ZVVUQ0NhY2hlZEZvck1TOworICAgIEdyZWdvcmlhbkRhdGVUaW1lIG1fY2FjaGVkR3JlZ29yaWFu
RGF0ZVRpbWVVVEM7CisKK3ByaXZhdGU6CisgICAgRGF0ZUluc3RhbmNlRGF0YSgpCisgICAgICAg
IDogbV9ncmVnb3JpYW5EYXRlVGltZUNhY2hlZEZvck1TKFBOYU4pCisgICAgICAgICwgbV9ncmVn
b3JpYW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TKFBOYU4pCisgICAgeworICAgIH0KK307CisKK2Ns
YXNzIERhdGVJbnN0YW5jZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBEYXRlSW5zdGFuY2VDYWNoZSgp
CisgICAgeworICAgICAgICByZXNldCgpOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoKQorICAg
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZVNpemU7ICsraSkKKyAgICAg
ICAgICAgIG1fY2FjaGVbaV0ua2V5ID0gUE5hTjsKKyAgICB9CisKKyAgICBEYXRlSW5zdGFuY2VE
YXRhKiBhZGQoZG91YmxlIGQpCisgICAgeworICAgICAgICBDYWNoZUVudHJ5JiBlbnRyeSA9IGxv
b2t1cChkKTsKKyAgICAgICAgaWYgKGQgPT0gZW50cnkua2V5KQogICAgICAgICAgICAgcmV0dXJu
IGVudHJ5LnZhbHVlLmdldCgpOwotICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNhY2hlU2l6ZSA9IDE2OwotCi0gICAgICAgIHN0cnVjdCBDYWNo
ZUVudHJ5IHsKLSAgICAgICAgICAgIGRvdWJsZSBrZXk7Ci0gICAgICAgICAgICBSZWZQdHI8RGF0
ZUluc3RhbmNlRGF0YT4gdmFsdWU7Ci0gICAgICAgIH07CisgICAgICAgIGVudHJ5LmtleSA9IGQ7
CisgICAgICAgIGVudHJ5LnZhbHVlID0gRGF0ZUluc3RhbmNlRGF0YTo6Y3JlYXRlKCk7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZS5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjYWNoZVNpemUgPSAxNjsKKworICAgIHN0cnVjdCBDYWNoZUVudHJ5
IHsKKyAgICAgICAgZG91YmxlIGtleTsKKyAgICAgICAgUmVmUHRyPERhdGVJbnN0YW5jZURhdGE+
IHZhbHVlOworICAgIH07CiAKLSAgICAgICAgQ2FjaGVFbnRyeSYgbG9va3VwKGRvdWJsZSBkKSB7
IHJldHVybiBtX2NhY2hlW1dURjo6RmxvYXRIYXNoPGRvdWJsZT46Omhhc2goZCkgJiAoY2FjaGVT
aXplIC0gMSldOyB9CisgICAgQ2FjaGVFbnRyeSYgbG9va3VwKGRvdWJsZSBkKSB7IHJldHVybiBt
X2NhY2hlW1dURjo6RmxvYXRIYXNoPGRvdWJsZT46Omhhc2goZCkgJiAoY2FjaGVTaXplIC0gMSld
OyB9CiAKLSAgICAgICAgc3RkOjphcnJheTxDYWNoZUVudHJ5LCBjYWNoZVNpemU+IG1fY2FjaGU7
Ci0gICAgfTsKKyAgICBzdGQ6OmFycmF5PENhY2hlRW50cnksIGNhY2hlU2l6ZT4gbV9jYWNoZTsK
K307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDM0ICsyNSwzNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIE9iamVjdFBy
b3RvdHlwZTsKK2NsYXNzIE9iamVjdFByb3RvdHlwZTsKIAotICAgIGNsYXNzIERhdGVQcm90b3R5
cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKLSAgICBwcml2YXRlOgotICAgICAgICBEYXRlUHJv
dG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYg
RGF0ZUluc3RhbmNlIEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRlUHJvdG90eXBlKiBwcm90b3R5cGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEYXRlUHJvdG90eXBlPih2bS5oZWFwKSkgRGF0ZVBy
b3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAg
REVDTEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IERhdGVJbnN0YW5jZTo6U3RydWN0dXJlRmxhZ3M7Ci0gICAgfTsKK2NsYXNzIERhdGVQcm90b3R5
cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKK3ByaXZhdGU6CisgICAgRGF0ZVByb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBEYXRlSW5zdGFuY2UgQmFz
ZTsKKworICAgIHN0YXRpYyBEYXRlUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IERhdGVQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERh
dGVQcm90b3R5cGU+KHZtLmhlYXApKSBEYXRlUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICByZXR1cm4gcHJvdG90eXBlOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgRGF0ZUluc3RhbmNlOjpTdHJ1
Y3R1cmVGbGFnczsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwMiArMzAs
MTAyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNs
YXNzIFZNOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNzIEpTT2JqZWN0Owot
ICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci0gICAgY2xhc3MgU3RydWN0dXJlOwotCi0gICAgLy8gTWV0
aG9kcyB0byBjcmVhdGUgYSByYW5nZSBvZiBpbnRlcm5hbCBlcnJvcnMuCi0gICAgSlNPYmplY3Qq
IGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgSlNPYmpl
Y3QqIGNyZWF0ZUV2YWxFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotICAg
IEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihKU0dsb2JhbE9iamVjdCopOwotICAgIEpTT2JqZWN0KiBjcmVh
dGVVUklFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotICAgIC8vIEV4ZWNT
dGF0ZSB3cmFwcGVycy4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZUV2YWxF
cnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNy
ZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIE1ldGhvZHMgdG8gYWRkIAotICAg
IGJvb2wgaGFzRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlcnJvcik7Ci0gICAgLy8g
RXhlY1N0YXRlIHdyYXBwZXJzLgotICAgIEpTT2JqZWN0KiBhZGRFcnJvckluZm8oRXhlY1N0YXRl
KiwgSlNPYmplY3QqIGVycm9yLCBpbnQgbGluZSwgY29uc3QgU291cmNlQ29kZSYpOwotCi0gICAg
Ly8gTWV0aG9kcyB0byB0aHJvdyBFcnJvcnMuCi0KLSAgICAvLyBDb252ZW5pZW5jZSB3cmFwcGVy
cywgY3JlYXRlIGFuIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGEgZGVmYXVsdCBtZXNzYWdlLgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUq
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dTeW50YXhFcnJvcihFeGVj
U3RhdGUqKTsKLQotICAgIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBh
biBFbmNvZGVkSlNWYWx1ZS4KLSAgICBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpKTsgfQotICAgIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMpKTsgfQotICAgIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihl
eGVjLCBlcnJvck1lc3NhZ2UpKTsgfQotICAgIAotICAgIGNsYXNzIFN0cmljdE1vZGVUeXBlRXJy
b3JGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwcml2YXRlOgotICAg
ICAgICBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICAgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsK
LQotICAgICAgICBzdGF0aWMgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKiBjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPih2
bS5oZWFwKSkgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKHZtLCBzdHJ1Y3R1cmUsIG1lc3Nh
Z2UpOwotICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBTdHJpbmcoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0VGhyb3dUeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzdGF0aWNfY2FzdDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qPihleGVjLT5j
YWxsZWUoKSktPm1fbWVzc2FnZSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBzdGF0aWMgQ29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0g
Y29uc3RydWN0VGhyb3dUeXBlRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlw
ZUhvc3Q7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc3RhdGljX2Nhc3Q8U3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5tX21lc3NhZ2UpOwotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxE
YXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
YWxsVGhyb3dUeXBlRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKSAKLSAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCi0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFN0cmluZyBtX21lc3NhZ2U7Ci0gICAgfTsKK2NsYXNzIEV4ZWNTdGF0ZTsK
K2NsYXNzIFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU09iamVjdDsKK2NsYXNz
IFNvdXJjZUNvZGU7CitjbGFzcyBTdHJ1Y3R1cmU7CisKKy8vIE1ldGhvZHMgdG8gY3JlYXRlIGEg
cmFuZ2Ugb2YgaW50ZXJuYWwgZXJyb3JzLgorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRl
U3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK0pTT2JqZWN0KiBj
cmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK0pTT2JqZWN0
KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihKU0dsb2JhbE9iamVjdCopOworSlNPYmpl
Y3QqIGNyZWF0ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CisvLyBF
eGVjU3RhdGUgd3JhcHBlcnMuCitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlRXZhbEVycm9y
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3ludGF4RXJyb3Io
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSop
OworSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwor
CisvLyBNZXRob2RzIHRvIGFkZCAKK2Jvb2wgaGFzRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiBlcnJvcik7CisvLyBFeGVjU3RhdGUgd3JhcHBlcnMuCitKU09iamVjdCogYWRkRXJyb3JJ
bmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlcnJvciwgaW50IGxpbmUsIGNvbnN0IFNvdXJjZUNv
ZGUmKTsKKworLy8gTWV0aG9kcyB0byB0aHJvdyBFcnJvcnMuCisKKy8vIENvbnZlbmllbmNlIHdy
YXBwZXJzLCBjcmVhdGUgYW4gdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggYSBkZWZhdWx0IG1lc3Nh
Z2UuCitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
Kik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dTeW50YXhFcnJvcihFeGVjU3Rh
dGUqKTsKKworLy8gQ29udmVuaWVuY2Ugd3JhcHBlcnMsIHdyYXAgcmVzdWx0IGFzIGFuIEVuY29k
ZWRKU1ZhbHVlLgoraW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KK2lubGluZSBFbmNvZGVkSlNWYWx1ZSB0
aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMpKTsgfQoraW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1U
eXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkp
OyB9CisKK2NsYXNzIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5h
bEZ1bmN0aW9uIHsKK3ByaXZhdGU6CisgICAgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAg
ICAgOiBJbnRlcm5hbEZ1bmN0aW9uKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9tZXNzYWdl
KG1lc3NhZ2UpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAg
IHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPih2bS5oZWFwKSkgU3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uKHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOworICAgICAgICBmdW5j
dGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uOworICAgIH0KKworICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHN0YXRpY19jYXN0PFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlv
bio+KGV4ZWMtPmNhbGxlZSgpKS0+bV9tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7CisgICAgfQorCisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorICAg
IHsKKyAgICAgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RUaHJv
d1R5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworICAgIH0KKwor
ICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBz
dGF0aWNfY2FzdDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSkt
Pm1fbWVzc2FnZSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYgY2FsbERhdGEpCisgICAgeworICAgICAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
YWxsVGhyb3dUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpIAorICAgIHsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsgCisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX21lc3NhZ2U7Cit9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwzNCArMjYsMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFcnJv
clByb3RvdHlwZTsKK2NsYXNzIEVycm9yUHJvdG90eXBlOwogCi0gICAgY2xhc3MgRXJyb3JDb25z
dHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBFcnJvckNv
bnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90
b3R5cGUqIGVycm9yUHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFcnJvckNvbnN0
cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEVycm9yQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBFcnJvckNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBlcnJvclByb3RvdHlwZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBE
RUNMQVJFX0lORk87Ci0KLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
IAotICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOyAKLSAgICAgICAgfQorY2xhc3MgRXJyb3JDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rp
b24gQmFzZTsKKworICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgRXJyb3JDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxFcnJvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgRXJyb3JDb25zdHJ1Y3Rv
cih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZt
LCBlcnJvclByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOyAKKyAgICB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBFcnJvclByb3RvdHlwZSopOworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBFcnJvclByb3RvdHlwZSopOwogICAgICAgICAKLSAgICBwcml2YXRlOgot
ICAgICAgICBFcnJvckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHN0YXRp
YyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYp
OwotICAgICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKLSAgICB9OworcHJpdmF0ZToKKyAgICBFcnJvckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCos
IENhbGxEYXRhJik7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMTczMjQy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw0MCArMjcsNDAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBFcnJvckluc3RhbmNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgREVD
TEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEVycm9ySW5zdGFu
Y2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVycm9ySW5zdGFuY2UqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4odm0uaGVhcCkpIEVycm9ySW5z
dGFuY2Uodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIG1lc3NhZ2UsIHN0YWNrVHJhY2UpOwotICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UsIFZlY3Rv
cjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBtZXNz
YWdlLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCBzdGFja1RyYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXBwZW5k
U291cmNlVG9NZXNzYWdlKCkgeyByZXR1cm4gbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2U7IH0KLSAg
ICAgICAgdm9pZCBzZXRBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSB7IG1fYXBwZW5kU291cmNlVG9N
ZXNzYWdlID0gdHJ1ZTsgfQotICAgICAgICB2b2lkIGNsZWFyQXBwZW5kU291cmNlVG9NZXNzYWdl
KCkgeyBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZSA9IGZhbHNlOyB9CitjbGFzcyBFcnJvckluc3Rh
bmNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3Rh
bmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBF
cnJvckluc3RhbmNlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IFZlY3RvcjxT
dGFja0ZyYW1lPigpKQorICAgIHsKKyAgICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPih2bS5oZWFwKSkgRXJyb3JJ
bnN0YW5jZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtLCBtZXNzYWdlLCBzdGFja1RyYWNlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAg
IH0KKworICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4g
c3RhY2tUcmFjZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRlZmluZWQoKSA/IFN0
cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIHN0YWNrVHJhY2Up
OworICAgIH0KKworICAgIGJvb2wgYXBwZW5kU291cmNlVG9NZXNzYWdlKCkgeyByZXR1cm4gbV9h
cHBlbmRTb3VyY2VUb01lc3NhZ2U7IH0KKyAgICB2b2lkIHNldEFwcGVuZFNvdXJjZVRvTWVzc2Fn
ZSgpIHsgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2UgPSB0cnVlOyB9CisgICAgdm9pZCBjbGVhckFw
cGVuZFNvdXJjZVRvTWVzc2FnZSgpIHsgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2UgPSBmYWxzZTsg
fQogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBFcnJvckluc3RhbmNlKFZNJiwg
U3RydWN0dXJlKik7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShWTSYs
IFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBT
dHJpbmcmLCBWZWN0b3I8U3RhY2tGcmFtZT4gPSBWZWN0b3I8U3RhY2tGcmFtZT4oKSk7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdGFja0ZyYW1l
PiA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKTsKIAotICAgICAgICBib29sIG1fYXBwZW5kU291cmNl
VG9NZXNzYWdlOwotICAgIH07CisgICAgYm9vbCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZTsKK307
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDM1ICsyNSwzNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIE9iamVjdFBy
b3RvdHlwZTsKK2NsYXNzIE9iamVjdFByb3RvdHlwZTsKIAotICAgIGNsYXNzIEVycm9yUHJvdG90
eXBlIDogcHVibGljIEVycm9ySW5zdGFuY2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRl
ZiBFcnJvckluc3RhbmNlIEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIEVycm9yUHJvdG90eXBlKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgRXJyb3JQcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEVycm9yUHJvdG90eXBlPih2bS5oZWFwKSkg
RXJyb3JQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmZp
bmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIHByb3Rv
dHlwZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEVycm9yUHJvdG90eXBlKFZNJiwg
U3RydWN0dXJlKik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCopOwotCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEVycm9ySW5zdGFuY2U6OlN0cnVjdHVyZUZs
YWdzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICB9OworY2xhc3MgRXJyb3JQcm90b3R5cGUgOiBwdWJsaWMgRXJyb3JJbnN0YW5jZSB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBFcnJvckluc3RhbmNlIEJhc2U7CisKKyAgICBzdGF0aWMgRXJy
b3JQcm90b3R5cGUqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRXJyb3JQcm90b3R5cGUqIHBy
b3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEVycm9yUHJvdG90eXBlPih2bS5o
ZWFwKSkgRXJyb3JQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIHByb3RvdHlwZS0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwcm90b3R5
cGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEVycm9y
UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBFcnJvckluc3RhbmNlOjpTdHJ1
Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE3MzI0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksMzcgKzI5LDM3IEBAIGNsYXNzIFRleHRQb3NpdGlvbjsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKK2NsYXNzIEZ1
bmN0aW9uUHJvdG90eXBlOwogCi0gICAgY2xhc3MgRnVuY3Rpb25Db25zdHJ1Y3RvciA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSW50ZXJu
YWxGdW5jdGlvbiBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkNvbnN0cnVjdG9yKiBj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1
bmN0aW9uUHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBGdW5jdGlvbkNvbnN0cnVj
dG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBGdW5jdGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBmdW5jdGlvblByb3Rv
dHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAg
ICAgICBERUNMQVJFX0lORk87Ci0KLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpIAotICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOyAKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
RnVuY3Rpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwotICAgICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgRnVuY3Rpb25Qcm90b3R5cGUqKTsKLSAgICAgICAgc3RhdGljIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7Ci0gICAg
ICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwotICAg
IH07CitjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
eworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCisgICAgc3Rh
dGljIEZ1bmN0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCisgICAgeworICAgICAg
ICBGdW5jdGlvbkNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEZ1bmN0aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBGdW5jdGlvbkNvbnN0cnVjdG9y
KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IGZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKSAKKyAgICB7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7IAorICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkNvbnN0cnVjdG9yKFZN
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEZ1bmN0aW9uUHJv
dG90eXBlKik7CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7Cit9OwogCi0gICAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IElkZW50
aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFdURjo6
VGV4dFBvc2l0aW9uJik7Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOworSlNPYmplY3QqIGNvbnN0cnVj
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYsIGNv
bnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNv
bnN0IFdURjo6VGV4dFBvc2l0aW9uJik7CitKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVk
Q2hlY2soRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0JiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFdURjo6VGV4dFBvc2l0aW9uJik7CitK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxF
bmFibGVkQ2hlY2soRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0Jiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFdURjo6VGV4dFBvc2l0aW9u
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDE3MzI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDMzICsyNSwzMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNs
YXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1
YmxpYzoKLSAgICAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7Ci0KLSAgICAgICAg
c3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUHJvdG90eXBlPih2bS5oZWFw
KSkgRnVuY3Rpb25Qcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5
cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHJv
dG90eXBlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJv
cGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTRnVuY3Rpb24qKiBjYWxsRnVu
Y3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
REVDTEFSRV9JTkZPOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1
bmN0aW9uUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwotICAgIH07CitjbGFzcyBGdW5jdGlv
blByb3RvdHlwZSA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAgIHN0YXRpYyBGdW5jdGlvblByb3RvdHlw
ZSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBG
dW5jdGlvblByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
RnVuY3Rpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBGdW5jdGlvblByb3RvdHlwZSh2bSwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgU3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4gcHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQgYWRkRnVuY3Rpb25Q
cm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbioqIGNhbGxG
dW5jdGlvbiwgSlNGdW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pOworCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitw
cml2YXRlOgorICAgIEZ1bmN0aW9uUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDYgKzMwLDEw
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNP
YmplY3Q7CiAKLSAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIHZhbHVlIG9iamVjdCB3aGljaCBz
dG9yZXMgZ2V0dGVyIGFuZCBzZXR0ZXIgZnVuY3Rpb25zCi0gICAgLy8gZm9yIGEgcHJvcGVydHku
IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgb25jZSBhIGdl
dHRlcgotICAgIC8vIG9yIHNldHRlciBpcyBzZXQgdG8gYSBub24tbnVsbCB2YWx1ZSwgdGhlbiB0
aGV5IGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGlzIG1lYW5zCi0gICAgLy8gdGhhdCBpZiBhIHByb3Bl
cnR5IGhvbGRpbmcgYSBHZXR0ZXJTZXR0ZXIgcmVmZXJlbmNlIGlzIGNvbnN0YW50LWluZmVycmVk
IGFuZAotICAgIC8vIHRoYXQgY29uc3RhbnQgaXMgb2JzZXJ2ZWQgdG8gaGF2ZSBhIG5vbi1udWxs
IHNldHRlciAob3IgZ2V0dGVyKSB0aGVuIHdlIGNhbgotICAgIC8vIGNvbnN0YW50IGZvbGQgdGhh
dCBzZXR0ZXIgKG9yIGdldHRlcikuCi0gICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVibGljIEpT
Q2VsbCB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0KLSAgICBwcml2YXRlOiAgICAgICAg
Ci0gICAgICAgIEdldHRlclNldHRlcihWTSYgdm0pCi0gICAgICAgICAgICA6IEpTQ2VsbCh2bSwg
dm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgICAgICBzdGF0
aWMgR2V0dGVyU2V0dGVyKiBjcmVhdGUoVk0mIHZtKQotICAgICAgICB7Ci0gICAgICAgICAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEdl
dHRlclNldHRlcj4odm0uaGVhcCkpIEdldHRlclNldHRlcih2bSk7Ci0gICAgICAgICAgICBnZXR0
ZXJTZXR0ZXItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgICAgIHJldHVybiBnZXR0ZXJT
ZXR0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9Ci0gICAgICAgIAotICAgICAgICBKU09iamVjdCog
Z2V0dGVyQ29uY3VycmVudGx5KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGdldHRlcigpOwotICAgICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBTZXQgdGhlIGdldHRlci4gSXQncyBvbmx5IHZhbGlkIHRvIGNhbGwgdGhpcyBpZiB5b3Un
dmUgbmV2ZXIgc2V0IHRoZSBnZXR0ZXIgb24gdGhpcwotICAgICAgICAvLyBvYmplY3QuCi0gICAg
ICAgIHZvaWQgc2V0R2V0dGVyKFZNJiB2bSwgSlNPYmplY3QqIGdldHRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZ2V0dGVyKTsKLSAgICAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBtX2dldHRlci5zZXRNYXlCZU51bGwodm0s
IHRoaXMsIGdldHRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBz
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQotICAgICAgICAKLSAgICAg
ICAgSlNPYmplY3QqIHNldHRlckNvbmN1cnJlbnRseSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0KiByZXN1bHQgPSBzZXR0ZXIoKTsKLSAgICAgICAgICAgIFdURjo6bG9h
ZExvYWRGZW5jZSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gU2V0IHRoZSBzZXR0ZXIuIEl0J3Mgb25seSB2YWxpZCB0byBjYWxs
IHRoaXMgaWYgeW91J3ZlIG5ldmVyIHNldCB0aGUgc2V0dGVyIG9uIHRoaXMKLSAgICAgICAgLy8g
b2JqZWN0LgotICAgICAgICB2b2lkIHNldFNldHRlcihWTSYgdm0sIEpTT2JqZWN0KiBzZXR0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3NldHRlcik7Ci0gICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgbV9zZXR0ZXIuc2V0
TWF5QmVOdWxsKHZtLCB0aGlzLCBzZXR0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBHZXR0ZXJTZXR0ZXIqIHdpdGhHZXR0ZXIoVk0mLCBKU09iamVjdCogZ2V0dGVyKTsKLSAgICAg
ICAgR2V0dGVyU2V0dGVyKiB3aXRoU2V0dGVyKFZNJiwgSlNPYmplY3QqIHNldHRlcik7Ci0gICAg
ICAgIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oR2V0dGVyU2V0dGVyVHlwZSksIGluZm8oKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHZXR0ZXIoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldHRlclNldHRl
ciwgbV9nZXR0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2V0dGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihHZXR0ZXJTZXR0ZXIsIG1fc2V0dGVyKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBtX2dldHRlcjsKLSAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBt
X3NldHRlcjsgIAotICAgIH07Ci0KLSAgICBHZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpT
VmFsdWUpOworLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCB2YWx1ZSBvYmplY3Qgd2hpY2ggc3RvcmVz
IGdldHRlciBhbmQgc2V0dGVyIGZ1bmN0aW9ucworLy8gZm9yIGEgcHJvcGVydHkuIEluc3RhbmNl
cyBvZiB0aGlzIGNsYXNzIGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgb25jZSBhIGdldHRlcgorLy8g
b3Igc2V0dGVyIGlzIHNldCB0byBhIG5vbi1udWxsIHZhbHVlLCB0aGVuIHRoZXkgY2Fubm90IGJl
IGNoYW5nZWQuIFRoaXMgbWVhbnMKKy8vIHRoYXQgaWYgYSBwcm9wZXJ0eSBob2xkaW5nIGEgR2V0
dGVyU2V0dGVyIHJlZmVyZW5jZSBpcyBjb25zdGFudC1pbmZlcnJlZCBhbmQKKy8vIHRoYXQgY29u
c3RhbnQgaXMgb2JzZXJ2ZWQgdG8gaGF2ZSBhIG5vbi1udWxsIHNldHRlciAob3IgZ2V0dGVyKSB0
aGVuIHdlIGNhbgorLy8gY29uc3RhbnQgZm9sZCB0aGF0IHNldHRlciAob3IgZ2V0dGVyKS4KK2Ns
YXNzIEdldHRlclNldHRlciA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CisKK3ByaXZhdGU6ICAgICAgICAKKyAgICBHZXR0ZXJTZXR0ZXIoVk0mIHZtKQorICAgICAgICA6
IEpTQ2VsbCh2bSwgdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKQorICAgIHsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEdldHRl
clNldHRlciogY3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2V0dGVyU2V0dGVyPih2bS5o
ZWFwKSkgR2V0dGVyU2V0dGVyKHZtKTsKKyAgICAgICAgZ2V0dGVyU2V0dGVyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXI7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgSlNP
YmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CisKKyAgICBK
U09iamVjdCogZ2V0dGVyQ29uY3VycmVudGx5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBnZXR0ZXIoKTsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBnZXR0ZXIuIEl0
J3Mgb25seSB2YWxpZCB0byBjYWxsIHRoaXMgaWYgeW91J3ZlIG5ldmVyIHNldCB0aGUgZ2V0dGVy
IG9uIHRoaXMKKyAgICAvLyBvYmplY3QuCisgICAgdm9pZCBzZXRHZXR0ZXIoVk0mIHZtLCBKU09i
amVjdCogZ2V0dGVyKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZ2V0dGVyKTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9nZXR0ZXIuc2V0TWF5
QmVOdWxsKHZtLCB0aGlzLCBnZXR0ZXIpOworICAgIH0KKworICAgIEpTT2JqZWN0KiBzZXR0ZXIo
KSBjb25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQogCi0gICAgaW5saW5lIEdldHRlclNl
dHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYWx1ZSB2YWx1ZSkKKyAgICBKU09iamVjdCogc2V0dGVy
Q29uY3VycmVudGx5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKHZhbHVlLmFzQ2VsbCgpLT5pc0dldHRlclNldHRlcigpKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdldHRlclNldHRlcio+KHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IHNldHRlcigpOworICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGNhbGxH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcik7Ci0g
ICAgdm9pZCBjYWxsU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0
ZXJTZXR0ZXIsIEpTVmFsdWUgdmFsdWUsIEVDTUFNb2RlKTsKKyAgICAvLyBTZXQgdGhlIHNldHRl
ci4gSXQncyBvbmx5IHZhbGlkIHRvIGNhbGwgdGhpcyBpZiB5b3UndmUgbmV2ZXIgc2V0IHRoZSBz
ZXR0ZXIgb24gdGhpcworICAgIC8vIG9iamVjdC4KKyAgICB2b2lkIHNldFNldHRlcihWTSYgdm0s
IEpTT2JqZWN0KiBzZXR0ZXIpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zZXR0
ZXIpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX3NldHRlci5z
ZXRNYXlCZU51bGwodm0sIHRoaXMsIHNldHRlcik7CisgICAgfQorCisgICAgR2V0dGVyU2V0dGVy
KiB3aXRoR2V0dGVyKFZNJiwgSlNPYmplY3QqIGdldHRlcik7CisgICAgR2V0dGVyU2V0dGVyKiB3
aXRoU2V0dGVyKFZNJiwgSlNPYmplY3QqIHNldHRlcik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEdldHRlclNldHRlclR5cGUp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHZXR0ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXR0ZXJTZXR0ZXIsIG1f
Z2V0dGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2V0dGVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0dGVyU2V0dGVyLCBtX3Nl
dHRlcik7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdyaXRl
QmFycmllcjxKU09iamVjdD4gbV9nZXR0ZXI7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBt
X3NldHRlcjsgIAorfTsKKworR2V0dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVlKTsK
KworaW5saW5lIEdldHRlclNldHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS5hc0NlbGwoKS0+aXNH
ZXR0ZXJTZXR0ZXIoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdldHRlclNldHRlcio+KHZh
bHVlLmFzQ2VsbCgpKTsKK30KKworSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpOwordm9pZCBjYWxsU2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpTVmFsdWUsIEVDTUFNb2Rl
KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTgzICsy
OSwxODMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBFeGVjU3RhdGU7CiAKLSAgICBjbGFzcyBJZGVudGlmaWVyIHsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIFN0cnVjdHVyZTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIElkZW50aWZpZXIoKSB7IH0KLSAg
ICAgICAgZW51bSBFbXB0eUlkZW50aWZpZXJGbGFnIHsgRW1wdHlJZGVudGlmaWVyIH07Ci0gICAg
ICAgIElkZW50aWZpZXIoRW1wdHlJZGVudGlmaWVyRmxhZykgOiBtX3N0cmluZyhTdHJpbmdJbXBs
OjplbXB0eSgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbWljKCkpOyB9Ci0KLSAg
ICAgICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgICAgICB0
ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgICAgIElkZW50aWZpZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkg
OiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwo
KS0+aXNBdG9taWMoKSk7IH0KLSAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMp
W2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyBBU1NF
UlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b21pYygpKTsgfQotCi0gICAgICAgIElkZW50aWZpZXIo
RXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHJl
cCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0KLSAgICAgICAgSWRl
bnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQo
ZXhlYywgcy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbWljKCkpOyB9
Ci0KLSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgp
LT5pc0F0b21pYygpKTsgfQotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIq
IHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFTU0VSVCht
X3N0cmluZy5pbXBsKCktPmlzQXRvbWljKCkpOyB9Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZt
LCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0
cmluZy5pbXBsKCktPmlzQXRvbWljKCkpOyB9Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBj
b25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKHZtLCBzLmltcGwoKSkpIHsgQVNTRVJUKG1f
c3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0KLQotICAgICAgICBjb25zdCBTdHJpbmcmIHN0
cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Ci0gICAgICAgIFN0cmluZ0ltcGwqIGlt
cGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pbXBsKCk7IH0KLSAgICAgICAgCi0gICAgICAg
IGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKTsgfQotICAgICAg
ICAKLSAgICAgICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmFzY2lp
KCk7IH0KLSAgICAgICAgQ1N0cmluZyB1dGY4KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudXRm
OCgpOyB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKGNvbnN0IFBy
aXZhdGVOYW1lJiBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHJlc3Vs
dDsKLSAgICAgICAgICAgIHJlc3VsdC5tX3N0cmluZyA9IG5hbWUudWlkKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIg
Y3JlYXRlTENoYXJGcm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkg
eyByZXR1cm4gSWRlbnRpZmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KLQotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgeSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlm
aWVyIGZyb20oRXhlY1N0YXRlKiBleGVjLCBpbnQgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVudGlm
aWVyIGZyb20oRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb20oVk0qLCB1bnNpZ25lZCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbShWTSosIGludCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSosIGRv
dWJsZSB5KTsKLQotICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLmlzRW1wdHkoKTsgfQotICAgICAgICAKLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBJZGVudGlmaWVyJik7Ci0K
LSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
TENoYXIqKTsKLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgY2hhciopOwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBMQ2hhciopOwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBjaGFyKik7Ci0gICAgCi0gICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciopOwotICAgICAgICBzdGF0
aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsg
cmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihiKSk7IH07Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0lt
cGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7IH0KLQotICAgICAgICAvLyBPbmx5IHRvIGJl
IHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMuCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNoYXIqKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0
ZSosIGNvbnN0IGNoYXIqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU3RyaW5nIG1fc3RyaW5nOwotCi0g
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLSAgICAgICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgdWludDMyX3QgdG9VSW50MzJGcm9tQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sJiBvayk7Ci0KLSAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyBy
ZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KLSAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsg
cmV0dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQotCi0gICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBU
KiwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZDgo
Vk0qLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoVCk7CitjbGFzcyBJZGVudGlmaWVyIHsKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlOwor
cHVibGljOgorICAgIElkZW50aWZpZXIoKSB7IH0KKyAgICBlbnVtIEVtcHR5SWRlbnRpZmllckZs
YWcgeyBFbXB0eUlkZW50aWZpZXIgfTsKKyAgICBJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZs
YWcpIDogbV9zdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1w
bCgpLT5pc0F0b21pYygpKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+
IGFkZChFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0
cmluZ0ltcGw+IGFkZChWTSosIFN0cmluZ0ltcGwqKTsKKyAgICAvLyBPbmx5IHRvIGJlIHVzZWQg
d2l0aCBzdHJpbmcgbGl0ZXJhbHMuCisgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgorICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykp
IHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0KKyAgICB0ZW1wbGF0ZTx1
bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IGNo
YXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwgY2hh
cmFjdGVycykpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0KIAotI2lm
bmRlZiBOREVCVUcKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tD
dXJyZW50QXRvbWljU3RyaW5nVGFibGUoRXhlY1N0YXRlKik7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21pY1N0cmluZ1RhYmxlKFZNKik7Ci0j
ZWxzZQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0
YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21pY1N0cmluZ1RhYmxlKEV4ZWNTdGF0ZSopOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lk
IGNoZWNrQ3VycmVudEF0b21pY1N0cmluZ1RhYmxlKFZNKik7Ci0jZW5kaWYKLSAgICB9OworICAg
IElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmco
YWRkKGV4ZWMsIHJlcCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0K
KyAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3Ry
aW5nKGFkZChleGVjLCBzLmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9t
aWMoKSk7IH0KIAotICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJZGVudGlmaWVy
OjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoTENoYXIpCi0gICAgewotICAgICAgICBBU1NF
UlQobWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID09IDB4ZmYpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVu
Z3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1w
bCgpLT5pc0F0b21pYygpKTsgfQorICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciog
cywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1f
c3RyaW5nLmltcGwoKS0+aXNBdG9taWMoKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNKiB2bSwgU3Ry
aW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZCh2bSwgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcu
aW1wbCgpLT5pc0F0b21pYygpKTsgfQorICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJp
bmcmIHMpIDogbV9zdHJpbmcoYWRkKHZtLCBzLmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmlt
cGwoKS0+aXNBdG9taWMoKSk7IH0KIAotICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9v
bCBJZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgYykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOwotICAgIH0K
KyAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Cisg
ICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmltcGwoKTsgfQog
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgaWYgKGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICBUIGMgPSBzWzBdOwotICAgICAgICAg
ICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gKnZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuICpTdHJpbmdJ
bXBsOjplbXB0eSgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFk
ZChzLCBsZW5ndGgpOwotICAgIH0KKyAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmcubGVuZ3RoKCk7IH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRl
bnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjplcXVhbChhLCBiKTsKLSAgICB9CisgICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmFzY2lpKCk7IH0KKyAgICBDU3RyaW5nIHV0ZjgoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy51dGY4KCk7IH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikKKyAgICBzdGF0aWMgSWRl
bnRpZmllciBmcm9tKGNvbnN0IFByaXZhdGVOYW1lJiBuYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuICFJZGVudGlmaWVyOjplcXVhbChhLCBiKTsKKyAgICAgICAgSWRlbnRpZmllciByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3N0cmluZyA9IG5hbWUudWlkKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlm
aWVyJiBhLCBjb25zdCBMQ2hhciogYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVy
OjplcXVhbChhLCBiKTsKLSAgICB9CisgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJG
cm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1cm4gSWRl
bnRpZmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KIAotICAgIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgY2hhciogYikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oYikpOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFJ
ZGVudGlmaWVyOjplcXVhbChhLCBiKTsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIElkZW50aWZpZXIgZnJvbShFeGVjU3RhdGUqLCB1bnNpZ25lZCB5KTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSosIGludCB5KTsKKyAg
ICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSosIGRvdWJsZSB5KTsKKyAgICBzdGF0
aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgdW5zaWduZWQgeSk7CisgICAgc3RhdGljIElkZW50aWZp
ZXIgZnJvbShWTSosIGludCB5KTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91
YmxlIHkpOwogCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiBh
LCBjb25zdCBjaGFyKiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFJZGVudGlmaWVyOjplcXVh
bChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOwotICAgIH0KLSAgICAKLSAg
ICBpbmxpbmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJpbmdJbXBsKiByLCBjb25z
dCBMQ2hhciogcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMpOwotICAg
IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9
CiAKLSAgICBpbmxpbmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJpbmdJbXBsKiBy
LCBjb25zdCBMQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFdURjo6ZXF1YWwociwgcywgbGVuZ3RoKTsKLSAgICB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50aWZpZXImKTsKIAot
ICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNv
bnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1cm4gV1RG
OjplcXVhbChyLCBzLCBsZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBzdHJ1Y3QgSWRlbnRpZmll
clJlcEhhc2ggOiBQdHJIYXNoPFJlZlB0cjxTdHJpbmdJbXBsPj4gewotICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIGtleSkgeyByZXR1cm4ga2V5
LT5leGlzdGluZ0hhc2goKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChTdHJpbmdJ
bXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdIYXNoKCk7IH0KLSAgICB9OwotCi0gICAg
c3RydWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewot
ICAgICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJ
c1plcm8gPSBmYWxzZTsKLSAgICB9OworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IExDaGFyKik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciopOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
IT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IExDaGFyKik7CisgICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciopOworCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7CisgICAgc3RhdGljIGlu
bGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVy
biBJZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikp
OyB9OworICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCosIGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiA6
OmVxdWFsKGEsIGIpOyB9CisKKyAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0
ZXJhbHMuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4g
YWRkKFZNKiwgY29uc3QgY2hhciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNz
UmVmPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zdHJp
bmc7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CisgICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgdWludDMyX3QgdG9VSW50MzJGcm9tQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sJiBvayk7CisKKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKSB7IHJldHVy
biBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmltcGwoKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBl
cXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBUKiwgaW50IGxlbmd0
aCk7CisgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFQpOworCisgICAgc3RhdGlj
IFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBTdHJpbmdJbXBsKik7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50
QXRvbWljU3RyaW5nVGFibGUoRXhlY1N0YXRlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgY2hlY2tDdXJyZW50QXRvbWljU3RyaW5nVGFibGUoVk0qKTsKKyNlbHNlCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBjaGVj
a0N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZShFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21p
Y1N0cmluZ1RhYmxlKFZNKik7CisjZW5kaWYKK307CisKK3RlbXBsYXRlIDw+IEFMV0FZU19JTkxJ
TkUgYm9vbCBJZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoTENoYXIpCit7
CisgICAgQVNTRVJUKG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9PSAweGZmKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElkZW50aWZpZXI6
OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhciBjKQoreworICAgIHJldHVybiAoYyA8
PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K1Bhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgY29uc3QgVCogcywg
aW50IGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgVCBjID0gc1sw
XTsKKyAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKKyAgICAgICAg
ICAgIHJldHVybiAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7
CisgICAgfQorICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gKlN0cmluZ0ltcGw6OmVt
cHR5KCk7CisKKyAgICByZXR1cm4gKkF0b21pY1N0cmluZzo6YWRkKHMsIGxlbmd0aCk7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRp
ZmllciYgYikKK3sKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgYik7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmll
ciYgYikKK3sKKyAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIGIpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKQor
eworICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChhLCBiKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIHJl
dHVybiBJZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
YikpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImIGEsIGNv
bnN0IExDaGFyKiBiKQoreworICAgIHJldHVybiAhSWRlbnRpZmllcjo6ZXF1YWwoYSwgYik7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgY2hh
ciogYikKK3sKKyAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihiKSk7Cit9CisKK2lubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQoreworICAgIHJldHVybiBXVEY6
OmVxdWFsKHIsIHMpOworfQorCitpbmxpbmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBT
dHJpbmdJbXBsKiByLCBjb25zdCBMQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJl
dHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7Cit9CisKK2lubGluZSBib29sIElkZW50aWZp
ZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcywgbGVuZ3RoKTsKK30KKworc3Ry
dWN0IElkZW50aWZpZXJSZXBIYXNoIDogUHRySGFzaDxSZWZQdHI8U3RyaW5nSW1wbD4+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIGtleSkgeyBy
ZXR1cm4ga2V5LT5leGlzdGluZ0hhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFN0
cmluZ0ltcGwqIGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ0hhc2goKTsgfQorfTsKKworc3Ry
dWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4geworICAg
IHN0YXRpYyBpbnQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgaW50LCBJ
ZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4+LCBJZGVudGlm
aWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBJZGVudGlmaWVyTWFwOwotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmdJbXBsKiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxTdHJpbmdJ
bXBsKj4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IEJvcnJvd2VkSWRlbnRpZmllck1h
cDsKK3R5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRlbnRpZmllclJl
cEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+PiwgSWRlbnRpZmllck1hcEluZGV4
SGFzaFRyYWl0cz4gSWRlbnRpZmllck1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwg
aW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIElkZW50aWZp
ZXJNYXBJbmRleEhhc2hUcmFpdHM+IEJvcnJvd2VkSWRlbnRpZmllck1hcDsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIC8vIFRoaXMgZnVuY3Rp
b24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2Fs
bCBpdCByZXBlYXRlZGx5LgotICAgIC8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBy
dWxlOiBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbnkgdGhyZWFkLCBldmVu
IHJlZW50cmFudGx5LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVh
ZGluZygpOworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRo
cmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCisvLyBEYXJ3aW4gaXMgYW4g
ZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZy
b20gYW55IHRocmVhZCwgZXZlbiByZWVudHJhbnRseS4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQg
aW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDE3MzI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNDAgKzI5LDQwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xh
c3MgRnVuY3Rpb25Qcm90b3R5cGU7CitjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKIAotICAgIGNs
YXNzIEludGVybmFsRnVuY3Rpb24gOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworY2xh
c3MgSW50ZXJuYWxGdW5jdGlvbiA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7Ci0gICAgICAg
IGNvbnN0IFN0cmluZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKLSAgICAgICAgY29uc3QgU3Ry
aW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBjb25zdCBTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7CisgICAgY29uc3QgU3RyaW5nIGRp
c3BsYXlOYW1lKEV4ZWNTdGF0ZSopOworICAgIGNvbnN0IFN0cmluZyBjYWxjdWxhdGVkRGlzcGxh
eU5hbWUoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykgCi0gICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsgCi0gICAgICAgIH0KKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KSAKKyAgICB7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsgCisgICAgfQogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU09iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEludGVybmFsRnVuY3Rpb24oVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJbnRlcm5hbEZ1bmN0aW9uKFZNJiwg
U3RydWN0dXJlKik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICAgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0gICAgfTsKKyAg
ICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CiAK
LSAgICBJbnRlcm5hbEZ1bmN0aW9uKiBhc0ludGVybmFsRnVuY3Rpb24oSlNWYWx1ZSk7CitJbnRl
cm5hbEZ1bmN0aW9uKiBhc0ludGVybmFsRnVuY3Rpb24oSlNWYWx1ZSk7CiAKLSAgICBpbmxpbmUg
SW50ZXJuYWxGdW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyhJbnRlcm5hbEZ1bmN0
aW9uOjppbmZvKCkpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rp
b24qPihhc09iamVjdCh2YWx1ZSkpOwotICAgIH0KK2lubGluZSBJbnRlcm5hbEZ1bmN0aW9uKiBh
c0ludGVybmFsRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYXNPYmplY3Qo
dmFsdWUpLT5pbmhlcml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KHZhbHVlKSk7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDUwICszMCw1MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEpTQVBJ
VmFsdWVXcmFwcGVyIDogcHVibGljIEpTQ2VsbCB7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpz
QVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhBUElWYWx1ZVdyYXBw
ZXJUeXBlLCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKSwgaW5mbygpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLSAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBlciA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFwKSkgSlNBUElWYWx1ZVdyYXBwZXIo
ZXhlYyk7Ci0gICAgICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgICAg
IG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVl
LmlzQ2VsbCgpKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSlNBUElWYWx1
ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+dm0o
KSwgZXhlYy0+dm0oKS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQotICAgICAgICB7Ci0gICAg
ICAgIH0KK2NsYXNzIEpTQVBJVmFsdWVXcmFwcGVyIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJp
ZW5kIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92YWx1ZTsKLSAgICB9OworICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlLmdldCgpOyB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6
OmNyZWF0ZShleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEFQSVZhbHVlV3JhcHBlclR5cGUs
IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpLCBpbmZvKCkpOwogICAgIH0KIAorICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIAorICAgIHsKKyAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpTQVBJVmFs
dWVXcmFwcGVyKGV4ZWMpOworICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlvbih2bSwgdmFs
dWUpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgbV92YWx1ZS5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0NlbGwoKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEpTQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgOiBK
U0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQor
ICAgIHsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKK307CisK
K2lubGluZSBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVjLCB2
YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNBUElWYWx1ZVdy
YXBwZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNjAgKzMyLDE2MCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwotICAgIGNsYXNzIEZ1bmN0aW9u
RXhlY3V0YWJsZTsKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKLSAgICBjbGFzcyBKU0Fj
dGl2YXRpb247Ci0gICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci0gICAgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwotICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0gICAgY2xhc3MgU291
cmNlQ29kZTsKLSAgICBuYW1lc3BhY2UgREZHIHsKLSAgICBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsK
LSAgICBjbGFzcyBKSVRDb21waWxlcjsKLSAgICB9CitjbGFzcyBFeGVjdXRhYmxlQmFzZTsKK2Ns
YXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOworY2xhc3Mg
SlNBY3RpdmF0aW9uOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CitjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xhc3MgU291cmNlQ29kZTsKK25h
bWVzcGFjZSBERkcgeworY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CitjbGFzcyBKSVRDb21waWxlcjsK
K30KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJ
VkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGdldENh
bGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVjdCopOworSlNfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVj
dCopOwogICAgIAotICAgIGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVP
YmplY3QgewotICAgICAgICBmcmllbmQgY2xhc3MgSklUOwotICAgICAgICBmcmllbmQgY2xhc3Mg
REZHOjpTcGVjdWxhdGl2ZUpJVDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGls
ZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBWTTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5v
SW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yKTsKLQotICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
KFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkK
LSAgICAgICAgewotICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhl
Y3V0YWJsZSwgc2NvcGUpOwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUo
KS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1
bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgICAgIAotICAgICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgICAgICAKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nIG5hbWUoRXhlY1N0YXRlKik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKLSAgICAgICAgY29uc3QgU3RyaW5n
IGNhbGN1bGF0ZWREaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKLQotICAgICAgICBKU1Njb3BlKiBz
Y29wZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25J
bmxpbmUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zY29wZS5nZXQoKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIGZvciBob3N0IGZ1bmN0aW5zLCBp
biB3aGljaCBjYXNlIGl0Ci0gICAgICAgIC8vIHdpbGwgcmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1
ZS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvcgotICAgICAgICAvLyBvcHRpbWl6ZWQgcGF0
aHMgaW4gd2hpY2ggdGhlIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgZm9yCi0gICAgICAg
IC8vIGhvc3QgZnVuY3Rpb25zLCBhbmQgY2hlY2tpbmcgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMg
YSBob3N0Ci0gICAgICAgIC8vIGZ1bmN0aW9uIGlzIGRlZW1lZCB0b28gZXhwZW5zaXZlLgotICAg
ICAgICBKU1Njb3BlKiBzY29wZVVuY2hlY2tlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX3Njb3BlLmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0U2NvcGUoVk0m
IHZtLCBKU1Njb3BlKiBzY29wZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpc0hv
c3RGdW5jdGlvbk5vbklubGluZSgpKTsKLSAgICAgICAgICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlz
LCBzY29wZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBhZGROYW1lU2NvcGVJZk5lZWRlZChW
TSYpOwotCi0gICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9Ci0KLSAgICAgICAgLy8gVG8gY2FsbCBlaXRoZXIgb2Yg
dGhlc2UgbWV0aG9kcyBpbmNsdWRlIEV4ZWN1dGFibGUuaAotICAgICAgICBib29sIGlzSG9zdEZ1
bmN0aW9uKCkgY29uc3Q7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSoganNFeGVjdXRhYmxl
KCkgY29uc3Q7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU291cmNlQ29kZSog
c291cmNlQ29kZSgpIGNvbnN0OwotCi0gICAgICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0KLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rp
b25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAotICAgICAgICB9Ci0KLSAgICAgICAg
TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24oKTsKLSAgICAgICAgTmF0aXZlRnVuY3Rpb24g
bmF0aXZlQ29uc3RydWN0b3IoKTsKLQotICAgICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0KLSAgICAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZUNoYWluKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mRXhlY3V0YWJs
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5j
dGlvbiwgbV9leGVjdXRhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fYWxsb2NhdGlvblByb2Zp
bGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIGFsbG9j
YXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2FsbG9jYXRpb25Qcm9maWxlLmlz
TnVsbCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWxsb2NhdGlvblByb2ZpbGUo
ZXhlYywgaW5saW5lQ2FwYWNpdHkpOwotICAgICAgICAgICAgcmV0dXJuICZtX2FsbG9jYXRpb25Q
cm9maWxlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIGFsbG9jYXRp
b25TdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2FsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOyB9
Ci0KLSAgICAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50U2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0hvc3RPckJ1aWx0aW5G
dW5jdGlvbigpIGNvbnN0OwotICAgICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Q7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUo
KSBjb25zdDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Z1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgSlNGdW5jdGlvbihWTSYsIEZ1
bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247Ci0KLSAgICAg
ICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIGNyZWF0ZUFsbG9jYXRpb25Qcm9maWxlKEV4ZWNT
dGF0ZSosIHNpemVfdCBpbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0KLSAgICAg
ICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxKU1Njb3BlPiBtX3Njb3BlOwotICAgICAgICBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSBtX2FsbG9jYXRpb25Qcm9maWxlOwotICAgICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1f
YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OwotICAgIH07CitjbGFzcyBKU0Z1bmN0aW9uIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAg
IGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOworICAgIGZyaWVuZCBjbGFzcyBERkc6
OkpJVENvbXBpbGVyOworICAgIGZyaWVuZCBjbGFzcyBWTTsKKworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmlu
c2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yKTsKKworICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgIHsKKyAg
ICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwor
ICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0
aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJp
bmcgbmFtZShFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZGlzcGxh
eU5hbWUoRXhlY1N0YXRlKik7CisgICAgY29uc3QgU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFt
ZShFeGVjU3RhdGUqKTsKKworICAgIEpTU2NvcGUqIHNjb3BlKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CisgICAgICAgIHJldHVybiBtX3Njb3Bl
LmdldCgpOworICAgIH0KKyAgICAvLyBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIGZvciBob3N0
IGZ1bmN0aW5zLCBpbiB3aGljaCBjYXNlIGl0CisgICAgLy8gd2lsbCByZXR1cm4gYW4gYXJiaXRy
YXJ5IHZhbHVlLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yCisgICAgLy8gb3B0aW1pemVk
IHBhdGhzIGluIHdoaWNoIHRoZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgbWF0dGVyIGZvcgorICAg
IC8vIGhvc3QgZnVuY3Rpb25zLCBhbmQgY2hlY2tpbmcgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMg
YSBob3N0CisgICAgLy8gZnVuY3Rpb24gaXMgZGVlbWVkIHRvbyBleHBlbnNpdmUuCisgICAgSlNT
Y29wZSogc2NvcGVVbmNoZWNrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGUuZ2V0
KCk7CisgICAgfQorICAgIHZvaWQgc2V0U2NvcGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CisgICAgICAg
IG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7CisgICAgfQorICAgIHZvaWQgYWRkTmFtZVNj
b3BlSWZOZWVkZWQoVk0mKTsKKworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CisKKyAgICAvLyBUbyBjYWxsIGVpdGhl
ciBvZiB0aGVzZSBtZXRob2RzIGluY2x1ZGUgRXhlY3V0YWJsZS5oCisgICAgYm9vbCBpc0hvc3RG
dW5jdGlvbigpIGNvbnN0OworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSoganNFeGVjdXRhYmxlKCkg
Y29uc3Q7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTb3VyY2VDb2RlKiBzb3VyY2VD
b2RlKCkgY29uc3Q7CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7IAorICAgIH0KKworICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7Cisg
ICAgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IoKTsKKworICAgIHN0YXRpYyBDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAg
IHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworCisgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZUNoYWluKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSk7CisgICAgfQor
CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZFeGVjdXRhYmxlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRp
b25Qcm9maWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5j
dGlvbiwgbV9hbGxvY2F0aW9uUHJvZmlsZSk7CisgICAgfQorCisgICAgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9hbGxvY2F0aW9uUHJv
ZmlsZS5pc051bGwoKSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWxsb2NhdGlvblByb2Zp
bGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gJm1fYWxsb2NhdGlvblBy
b2ZpbGU7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkgeyBy
ZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgSW5saW5lV2F0
Y2hwb2ludFNldCYgYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKKyAgICB9CisKKyAgICBi
b29sIGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc0J1aWx0aW5G
dW5jdGlvbigpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rp
b25Ob25JbmxpbmUoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Z1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU0Z1bmN0aW9uKFZNJiwgRnVuY3Rp
b25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOworCisgICAgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUqIGNyZWF0ZUFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSosIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOworCisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisKKyAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOworICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgbmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworCisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVC
YXNlPiBtX2V4ZWN1dGFibGU7CisgICAgV3JpdGVCYXJyaWVyPEpTU2NvcGU+IG1fc2NvcGU7Cisg
ICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgbV9hbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBJbmxp
bmVXYXRjaHBvaW50U2V0IG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OworfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTE2ICszMSwxMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICAvLyBUbyBtYWtlIGl0IHNhZmUgdG8gdXNlIEphdmFTY3JpcHQgb24gbXVs
dGlwbGUgdGhyZWFkcywgaXQgaXMKLSAgICAvLyBpbXBvcnRhbnQgdG8gbG9jayBiZWZvcmUgZG9p
bmcgYW55dGhpbmcgdGhhdCBhbGxvY2F0ZXMgYQotICAgIC8vIEphdmFTY3JpcHQgZGF0YSBzdHJ1
Y3R1cmUgb3IgdGhhdCBpbnRlcmFjdHMgd2l0aCBzaGFyZWQgc3RhdGUKLSAgICAvLyBzdWNoIGFz
IHRoZSBwcm90ZWN0IGNvdW50IGhhc2ggdGFibGUuIFRoZSBzaW1wbGVzdCB3YXkgdG8gbG9jawot
ICAgIC8vIGlzIHRvIGNyZWF0ZSBhIGxvY2FsIEpTTG9ja0hvbGRlciBvYmplY3QgaW4gdGhlIHNj
b3BlIHdoZXJlIHRoZSBsb2NrIAotICAgIC8vIG11c3QgYmUgaGVsZCBhbmQgcGFzcyBpdCB0aGUg
Y29udGV4dCB0aGF0IHJlcXVpcmVzIHByb3RlY3Rpb24uIAotICAgIC8vIFRoZSBsb2NrIGlzIHJl
Y3Vyc2l2ZSBzbyBuZXN0aW5nIGlzIG9rLiBUaGUgSlNMb2NrIAotICAgIC8vIG9iamVjdCBhbHNv
IGFjdHMgYXMgYSBjb252ZW5pZW5jZSBzaG9ydC1oYW5kIGZvciBydW5uaW5nIGltcG9ydGFudAot
ICAgIC8vIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgotCi0gICAgLy8gVG8gYXZvaWQgZGVhZGxv
Y2ssIHNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gdGVtcG9yYXJpbHkKLSAgICAvLyByZWxl
YXNlIHRoZSBsb2NrLiBTaW5jZSBpdCBpcyByZWN1cnNpdmUgeW91IGFjdHVhbGx5IGhhdmUgdG8K
LSAgICAvLyByZWxlYXNlIGFsbCBsb2NrcyBoZWxkIGJ5IHlvdXIgdGhyZWFkLiBUaGlzIGlzIHNh
ZmUgdG8gZG8gaWYKLSAgICAvLyB5b3UgYXJlIGV4ZWN1dGluZyBjb2RlIHRoYXQgZG9lc24ndCBy
ZXF1aXJlIHRoZSBsb2NrLCBhbmQgeW91Ci0gICAgLy8gcmVhY3F1aXJlIHRoZSByaWdodCBudW1i
ZXIgb2YgbG9ja3MgYXQgdGhlIGVuZC4gWW91IGNhbiBkbyB0aGlzCi0gICAgLy8gYnkgY29uc3Ry
dWN0aW5nIGEgbG9jYWxseSBzY29wZWQgSlNMb2NrOjpEcm9wQWxsTG9ja3Mgb2JqZWN0LiBUaGUg
Ci0gICAgLy8gRHJvcEFsbExvY2tzIG9iamVjdCB0YWtlcyBjYXJlIHRvIHJlbGVhc2UgdGhlIEpT
TG9jayBvbmx5IGlmIHlvdXIKLSAgICAvLyB0aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0
aC4KLQotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBWTTsKLQotICAgIC8vIFRoaXMg
Y2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbGVnYWN5
IHNpbmdsZSAKLSAgICAvLyBzaGFyZWQgVk0uCi0gICAgY2xhc3MgR2xvYmFsSlNMb2NrIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2xvYmFsSlNMb2NrKTsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdsb2JhbEpTTG9jaygpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB+R2xvYmFsSlNMb2NrKCk7CisvLyBUbyBtYWtlIGl0IHNhZmUgdG8gdXNlIEph
dmFTY3JpcHQgb24gbXVsdGlwbGUgdGhyZWFkcywgaXQgaXMKKy8vIGltcG9ydGFudCB0byBsb2Nr
IGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCisvLyBKYXZhU2NyaXB0IGRh
dGEgc3RydWN0dXJlIG9yIHRoYXQgaW50ZXJhY3RzIHdpdGggc2hhcmVkIHN0YXRlCisvLyBzdWNo
IGFzIHRoZSBwcm90ZWN0IGNvdW50IGhhc2ggdGFibGUuIFRoZSBzaW1wbGVzdCB3YXkgdG8gbG9j
aworLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrSG9sZGVyIG9iamVjdCBpbiB0aGUgc2Nv
cGUgd2hlcmUgdGhlIGxvY2sgCisvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRl
eHQgdGhhdCByZXF1aXJlcyBwcm90ZWN0aW9uLiAKKy8vIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBz
byBuZXN0aW5nIGlzIG9rLiBUaGUgSlNMb2NrIAorLy8gb2JqZWN0IGFsc28gYWN0cyBhcyBhIGNv
bnZlbmllbmNlIHNob3J0LWhhbmQgZm9yIHJ1bm5pbmcgaW1wb3J0YW50CisvLyBpbml0aWFsaXph
dGlvbiByb3V0aW5lcy4KKworLy8gVG8gYXZvaWQgZGVhZGxvY2ssIHNvbWV0aW1lcyBpdCBpcyBu
ZWNlc3NhcnkgdG8gdGVtcG9yYXJpbHkKKy8vIHJlbGVhc2UgdGhlIGxvY2suIFNpbmNlIGl0IGlz
IHJlY3Vyc2l2ZSB5b3UgYWN0dWFsbHkgaGF2ZSB0bworLy8gcmVsZWFzZSBhbGwgbG9ja3MgaGVs
ZCBieSB5b3VyIHRocmVhZC4gVGhpcyBpcyBzYWZlIHRvIGRvIGlmCisvLyB5b3UgYXJlIGV4ZWN1
dGluZyBjb2RlIHRoYXQgZG9lc24ndCByZXF1aXJlIHRoZSBsb2NrLCBhbmQgeW91CisvLyByZWFj
cXVpcmUgdGhlIHJpZ2h0IG51bWJlciBvZiBsb2NrcyBhdCB0aGUgZW5kLiBZb3UgY2FuIGRvIHRo
aXMKKy8vIGJ5IGNvbnN0cnVjdGluZyBhIGxvY2FsbHkgc2NvcGVkIEpTTG9jazo6RHJvcEFsbExv
Y2tzIG9iamVjdC4gVGhlIAorLy8gRHJvcEFsbExvY2tzIG9iamVjdCB0YWtlcyBjYXJlIHRvIHJl
bGVhc2UgdGhlIEpTTG9jayBvbmx5IGlmIHlvdXIKKy8vIHRocmVhZCBhY3F1aXJlZCBpdCB0byBi
ZWdpbiB3aXRoLgorCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBWTTsKKworLy8gVGhpcyBjbGFz
cyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsZWdhY3kgc2lu
Z2xlIAorLy8gc2hhcmVkIFZNLgorY2xhc3MgR2xvYmFsSlNMb2NrIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IEdsb2JhbEpTTG9jaygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5HbG9iYWxKU0xvY2soKTsK
KworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKK3ByaXZhdGU6CisgICAgc3RhdGljIHN0
ZDo6bXV0ZXgqIHNfc2hhcmVkSW5zdGFuY2VNdXRleDsKK307CisKK2NsYXNzIEpTTG9ja0hvbGRl
ciB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKFZNKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKFZNJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSopOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkpTTG9ja0hvbGRlcigpOworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoKTsKKworICAgIFJlZlB0
cjxWTT4gbV92bTsKK307CisKK2NsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKU0xvY2s+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOworcHVibGlj
OgorICAgIEpTTG9jayhWTSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0xvY2soKTsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgdW5sb2NrKCk7CisKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEV4ZWNTdGF0ZSopOworICAg
IHN0YXRpYyB2b2lkIHVubG9jayhFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgdm9pZCBsb2NrKFZN
Jik7CisgICAgc3RhdGljIHZvaWQgdW5sb2NrKFZNJik7CisKKyAgICBWTSogdm0oKSB7IHJldHVy
biBtX3ZtOyB9CisKKyAgICBib29sIGhhc0V4Y2x1c2l2ZVRocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzRXhjbHVzaXZlVGhyZWFkOyB9CisgICAgc3RkOjp0aHJlYWQ6OmlkIGV4Y2x1c2l2ZVRo
cmVhZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9oYXNFeGNsdXNpdmVUaHJlYWQp
OworICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZElEOworICAgIH0KKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEV4Y2x1c2l2ZVRocmVhZChzdGQ6OnRocmVhZDo6aWQpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIAotICAg
ICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3Rh
dGljIHN0ZDo6bXV0ZXgqIHNfc2hhcmVkSW5zdGFuY2VNdXRleDsKLSAgICB9OworICAgIHZvaWQg
d2lsbERlc3Ryb3lWTShWTSopOwogCi0gICAgY2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAgICBjbGFz
cyBEcm9wQWxsTG9ja3MgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9j
a3MpOwogICAgIHB1YmxpYzoKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVy
KFZNKik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihWTSYpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhFeGVjU3RhdGUqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKFZNKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIERyb3BBbGxMb2NrcyhWTSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFs
bExvY2tzKCk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigpOwot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICB2b2lkIHNldERyb3BE
ZXB0aCh1bnNpZ25lZCBkZXB0aCkgeyBtX2Ryb3BEZXB0aCA9IGRlcHRoOyB9CisgICAgICAgIHVu
c2lnbmVkIGRyb3BEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcERlcHRoOyB9CiAKKyAgICBw
cml2YXRlOgorICAgICAgICBpbnRwdHJfdCBtX2Ryb3BwZWRMb2NrQ291bnQ7CiAgICAgICAgIFJl
ZlB0cjxWTT4gbV92bTsKKyAgICAgICAgdW5zaWduZWQgbV9kcm9wRGVwdGg7CiAgICAgfTsKIAot
ICAgIGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsK
LSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNMb2NrKTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEpTTG9jayhWTSopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrKCk7Ci0K
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgdW5sb2NrKCk7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVj
U3RhdGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOwotICAgICAg
ICBzdGF0aWMgdm9pZCBsb2NrKFZNJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhWTSYp
OwotCi0gICAgICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KLQotICAgICAgICBib29sIGhh
c0V4Y2x1c2l2ZVRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRXhjbHVzaXZlVGhyZWFkOyB9
Ci0gICAgICAgIHN0ZDo6dGhyZWFkOjppZCBleGNsdXNpdmVUaHJlYWQoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9oYXNFeGNsdXNpdmVUaHJlYWQpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fb3duZXJUaHJlYWRJRDsKLSAgICAgICAgfQotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEV4Y2x1c2l2ZVRocmVhZChzdGQ6OnRocmVhZDo6aWQpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7Ci0K
LSAgICAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7Ci0KLSAgICAgICAgY2xhc3MgRHJvcEFs
bExvY2tzIHsKLSAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyb3BBbGxMb2Nrcyk7
Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxM
b2NrcyhFeGVjU3RhdGUqKTsKLSAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxM
b2NrcyhWTSopOwotICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKFZN
Jik7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0RHJvcERlcHRoKHVuc2lnbmVkIGRlcHRoKSB7
IG1fZHJvcERlcHRoID0gZGVwdGg7IH0KLSAgICAgICAgICAgIHVuc2lnbmVkIGRyb3BEZXB0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJvcERlcHRoOyB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAg
ICAgICAgIGludHB0cl90IG1fZHJvcHBlZExvY2tDb3VudDsKLSAgICAgICAgICAgIFJlZlB0cjxW
TT4gbV92bTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fZHJvcERlcHRoOwotICAgICAgICB9Owot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBsb2NrKGludHB0cl90IGxvY2tDb3VudCk7Ci0g
ICAgICAgIHZvaWQgdW5sb2NrKGludHB0cl90IHVubG9ja0NvdW50KTsKLQotICAgICAgICB2b2lk
IGRpZEFjcXVpcmVMb2NrKCk7Ci0gICAgICAgIHZvaWQgd2lsbFJlbGVhc2VMb2NrKCk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tzKERyb3BBbGxMb2NrcyopOwotICAgICAgICB2b2lk
IGdyYWJBbGxMb2NrcyhEcm9wQWxsTG9ja3MqLCB1bnNpZ25lZCBsb2NrQ291bnQpOwotCi0gICAg
ICAgIHN0ZDo6bXV0ZXggbV9sb2NrOwotICAgICAgICBzdGQ6OnRocmVhZDo6aWQgbV9vd25lclRo
cmVhZElEOwotICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgdW5zaWduZWQg
bV9sb2NrRHJvcERlcHRoOwotICAgICAgICBib29sIG1faGFzRXhjbHVzaXZlVGhyZWFkOwotICAg
ICAgICBWTSogbV92bTsKLSAgICAgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fZW50cnlBdG9taWNT
dHJpbmdUYWJsZTsgCi0gICAgfTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NrKGludHB0cl90IGxv
Y2tDb3VudCk7CisgICAgdm9pZCB1bmxvY2soaW50cHRyX3QgdW5sb2NrQ291bnQpOworCisgICAg
dm9pZCBkaWRBY3F1aXJlTG9jaygpOworICAgIHZvaWQgd2lsbFJlbGVhc2VMb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBkcm9wQWxsTG9ja3MoRHJvcEFsbExvY2tzKik7CisgICAgdm9pZCBncmFiQWxs
TG9ja3MoRHJvcEFsbExvY2tzKiwgdW5zaWduZWQgbG9ja0NvdW50KTsKKworICAgIHN0ZDo6bXV0
ZXggbV9sb2NrOworICAgIHN0ZDo6dGhyZWFkOjppZCBtX293bmVyVGhyZWFkSUQ7CisgICAgaW50
cHRyX3QgbV9sb2NrQ291bnQ7CisgICAgdW5zaWduZWQgbV9sb2NrRHJvcERlcHRoOworICAgIGJv
b2wgbV9oYXNFeGNsdXNpdmVUaHJlYWQ7CisgICAgVk0qIG1fdm07CisgICAgQXRvbWljU3RyaW5n
VGFibGUqIG1fZW50cnlBdG9taWNTdHJpbmdUYWJsZTsgCit9OwogCiB9IC8vIG5hbWVzcGFjZQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5o
CShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05v
dEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDUyICszMyw1MiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotICAgIC8vIFRoaXMgdW5ob2x5IGNsYXNzIGlzIHVzZWQgdG8gYWxsb3cgdXMg
dG8gYXZvaWQgbXVsdGlwbGUgZXhjZXB0aW9uIGNoZWNrcwotICAgIC8vIGluIGNlcnRhaW4gU3F1
aXJyZWxGaXNoIGJ5dGVjb2RlcyAtLSBlZmZlY3RpdmVseSBpdCBqdXN0IHNpbGVudGx5IGNvbnN1
bWVzCi0gICAgLy8gYW55IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSByZXN1bHQgb2YgYSBm
YWlsZWQgdG9PYmplY3QgY2FsbC4KLSAgICBjbGFzcyBKU05vdEFuT2JqZWN0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewotICAgIHByaXZhdGU6Ci0gICAgICAgIGV4cGxpY2l0IEpTTm90QW5P
YmplY3QoVk0mIHZtKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS5ub3RB
bk9iamVjdFN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAot
ICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAg
ICAgICAgc3RhdGljIEpTTm90QW5PYmplY3QqIGNyZWF0ZShWTSYgdm0pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpTTm90QW5PYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTTm90QW5PYmplY3Q+KHZtLmhlYXApKSBKU05vdEFuT2JqZWN0KHZtKTsKLSAgICAgICAg
ICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBERUNMQVJFX0lORk87Ci0KLSAgICAg
cHJpdmF0ZToKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgICAgIC8vIEpT
VmFsdWUgbWV0aG9kcwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3Qg
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKLQotICAgICAg
ICAvLyBKU09iamVjdCBtZXRob2RzCi0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworLy8g
VGhpcyB1bmhvbHkgY2xhc3MgaXMgdXNlZCB0byBhbGxvdyB1cyB0byBhdm9pZCBtdWx0aXBsZSBl
eGNlcHRpb24gY2hlY2tzCisvLyBpbiBjZXJ0YWluIFNxdWlycmVsRmlzaCBieXRlY29kZXMgLS0g
ZWZmZWN0aXZlbHkgaXQganVzdCBzaWxlbnRseSBjb25zdW1lcworLy8gYW55IG9wZXJhdGlvbnMg
cGVyZm9ybWVkIG9uIHRoZSByZXN1bHQgb2YgYSBmYWlsZWQgdG9PYmplY3QgY2FsbC4KK2NsYXNz
IEpTTm90QW5PYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRlOgorICAg
IGV4cGxpY2l0IEpTTm90QW5PYmplY3QoVk0mIHZtKQorICAgICAgICA6IEpTTm9uRmluYWxPYmpl
Y3Qodm0sIHZtLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdldCgpKQorICAgIHsKKyAgICB9CisKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBK
U05vdEFuT2JqZWN0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgSlNOb3RBbk9iamVj
dCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOb3RBbk9iamVjdD4odm0u
aGVhcCkpIEpTTm90QW5PYmplY3Qodm0pOworICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKK3By
aXZhdGU6CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIC8vIEpTVmFsdWUgbWV0aG9kcworICAg
IHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOworCisgICAgLy8gSlNPYmplY3QgbWV0aG9kcworICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAK
LSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwotICAgIH07CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDQwICszMCwzOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIFN0cmluZ2lm
aWVyOworY2xhc3MgU3RyaW5naWZpZXI7CiAKLSAgICBjbGFzcyBKU09OT2JqZWN0IDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIEpTT05PYmplY3QqIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OT2Jq
ZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU09OT2JqZWN0Pih2bS5o
ZWFwKSkgSlNPTk9iamVjdCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAg
cHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEpTT05PYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKK2NsYXNzIEpTT05PYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0
aWMgSlNPTk9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBKU09OT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU09OT2JqZWN0Pih2bS5oZWFwKSkgSlNPTk9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7Cisg
ICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworcHJp
dmF0ZToKKyAgICBKU09OT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKK307CiAKLSAgICB9OworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBK
U09OUGFyc2UoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU19FWFBPUlRfUFJJVkFURSBT
dHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25lZCBpbmRlbnQp
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBKU09OUGFyc2UoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIEpTT05TdHJpbmdp
ZnkoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgdW5zaWduZWQgaW5kZW50KTsKLQotICAgIHZvaWQgZXNj
YXBlU3RyaW5nVG9CdWlsZGVyKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKK3ZvaWQg
ZXNjYXBlU3RyaW5nVG9CdWlsZGVyKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDY2OSArMzMsNjY5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSlNTdHJpbmc7Ci0gICAgY2xhc3MgSlNS
b3BlU3RyaW5nOwotICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIEpTU3Ry
aW5nKiBqc0VtcHR5U3RyaW5nKFZNKik7Ci0gICAgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhl
Y1N0YXRlKik7Ci0gICAgSlNTdHJpbmcqIGpzU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7IC8v
IHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwotICAgIEpTU3RyaW5n
KiBqc1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gcmV0dXJucyBlbXB0eSBz
dHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCi0KLSAgICBKU1N0cmluZyoganNTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci0gICAgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEV4ZWNTdGF0ZSosIFVDaGFyKTsKLSAgICBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0KTsK
LSAgICBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIC8vIE5vbi10cml2aWFsIHN0cmluZ3MgYXJlIHR3byBvciBtb3JlIGNoYXJhY3RlcnMg
bG9uZy4KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFuIGp1c3QgY2FsbGlu
ZyBqc1N0cmluZy4KLSAgICBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNKiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKLQotICAgIC8vIFNob3VsZCBiZSB1c2VkIGZvciBzdHJpbmdzIHRoYXQg
YXJlIG93bmVkIGJ5IGFuIG9iamVjdCB0aGF0IHdpbGwKLSAgICAvLyBsaWtlbHkgb3V0bGl2ZSB0
aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNoIGFzIHRoZSBwYXJzZSB0cmVlIG9yIGEKLSAgICAv
LyBET00gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBTdHJpbmcKLSAgICBKU1N0cmluZyoganNPd25l
ZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotICAgIEpTU3RyaW5nKiBqc093bmVkU3RyaW5n
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworY2xhc3MgSlNTdHJpbmc7CitjbGFzcyBKU1Jv
cGVTdHJpbmc7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBKU1JvcGVTdHJp
bmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOworSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qKTsK
K0pTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSopOworSlNTdHJpbmcqIGpzU3RyaW5n
KFZNKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBu
dWxsIHN0cmluZworSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYp
OyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKIAotICAgIGNs
YXNzIEpTU3RyaW5nIDogcHVibGljIEpTQ2VsbCB7Ci0gICAgcHVibGljOgotICAgICAgICBmcmll
bmQgY2xhc3MgSklUOwotICAgICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBTcGVjaWFsaXplZFRodW5rSklUOwotICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3Ry
aW5nOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwotICAgICAgICBmcmllbmQgY2xh
c3MgU2xvdFZpc2l0b3I7Ci0gICAgICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwotCi0g
ICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lt
bW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKK0pTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhWTSosIFVDaGFyKTsKK0pT
U3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBVQ2hhcik7CitKU1N0
cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
JiwgdW5zaWduZWQgb2Zmc2V0KTsKK0pTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSosIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKK0pTU3RyaW5nKiBqc1N1
YnN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBKU1N0cmluZyhWTSYgdm0sIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCi0gICAgICAgICAgICA6IEpTQ2VsbCh2bSwgdm0u
c3RyaW5nU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgLCBtX2ZsYWdzKDApCi0gICAgICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQorLy8gTm9uLXRyaXZp
YWwgc3RyaW5ncyBhcmUgdHdvIG9yIG1vcmUgY2hhcmFjdGVycyBsb25nLgorLy8gVGhlc2UgZnVu
Y3Rpb25zIGFyZSBmYXN0ZXIgdGhhbiBqdXN0IGNhbGxpbmcganNTdHJpbmcuCitKU1N0cmluZyog
anNOb250cml2aWFsU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNOb250
cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIEpTU3Ry
aW5nKFZNJiB2bSkKLSAgICAgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpCi0gICAgICAgICAgICAsIG1fZmxhZ3MoMCkKLSAgICAgICAgewotICAgICAgICB9Cisv
LyBTaG91bGQgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3Qg
dGhhdCB3aWxsCisvLyBsaWtlbHkgb3V0bGl2ZSB0aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNo
IGFzIHRoZSBwYXJzZSB0cmVlIG9yIGEKKy8vIERPTSBvYmplY3QgdGhhdCBjb250YWlucyBhIFN0
cmluZworSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKK0pTU3Ry
aW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBzaXplX3QgbGVuZ3RoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKLSAgICAgICAgICAg
IHZtLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7Ci0gICAgICAgIH0KK0pTUm9wZVN0
cmluZyoganNTdHJpbmdCdWlsZGVyKFZNKik7CiAKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3N0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAg
ICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKLSAgICAgICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKLSAgICAgICAgICAgIHZt
Lm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7Ci0gICAgICAgIH0KK2NsYXNzIEpTU3Ry
aW5nIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAg
ICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJpZW5kIGNsYXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7
CisgICAgZnJpZW5kIGNsYXNzIEpTUm9wZVN0cmluZzsKKyAgICBmcmllbmQgY2xhc3MgTWFya1N0
YWNrOworICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICBmcmllbmQgc3RydWN0IFRo
dW5rSGVscGVyczsKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHNldElzOEJpdCh0cnVl
KTsKLSAgICAgICAgICAgIHZtLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTU3RyaW5n
KiBjcmVhdGUoVk0mIHZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgg
PSB2YWx1ZS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPj0g
MCk7Ci0gICAgICAgICAgICBzaXplX3QgY29zdCA9IHZhbHVlLT5jb3N0KCk7Ci0gICAgICAgICAg
ICBKU1N0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KHZtLmhlYXApKSBKU1N0cmluZyh2bSwgdmFsdWUpOwotICAgICAgICAgICAgbmV3U3RyaW5n
LT5maW5pc2hDcmVhdGlvbih2bSwgbGVuZ3RoLCBjb3N0KTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXdTdHJpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVIYXNP
dGhlck93bmVyKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSB2YWx1ZS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBKU1N0cmluZyogbmV3U3RyaW5nID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0cmluZyh2bSwg
dmFsdWUpOwotICAgICAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSwgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7Ci0gICAgICAgIH0KKyAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVl
OworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAgICAgSWRlbnRpZmll
ciB0b0lkZW50aWZpZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEF0b21pY1N0cmluZyB0
b0F0b21pY1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgQXRvbWljU3RyaW5nSW1w
bCogdG9FeGlzdGluZ0F0b21pY1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgY29u
c3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiB0cnlHZXRWYWx1ZSgpIGNvbnN0OwotICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiB0cnlHZXRW
YWx1ZUltcGwoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KLQotICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHRvQm9vbGVhbigpIGNvbnN0OwotICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwotICAgICAgICBK
U09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAg
ICAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICAgICAgCi0g
ICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Citwcml2YXRlOgorICAgIEpTU3RyaW5nKFZNJiB2bSwg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgLCBtX2ZsYWdzKDApCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5z
aWduZWQgaSkgeyByZXR1cm4gaSA8IG1fbGVuZ3RoOyB9Ci0gICAgICAgIEpTU3RyaW5nKiBnZXRJ
bmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CisgICAgSlNTdHJpbmcoVk0mIHZtKQorICAgICAg
ICA6IEpTQ2VsbCh2bSwgdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICAsIG1fZmxh
Z3MoMCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgICAgICB9CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIHNp
emVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIG1fbGVuZ3RoID0gbGVu
Z3RoOworICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKKyAgICAg
ICAgdm0ubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKKyAgICB9CiAKLSAgICAgICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1N0cmluZywgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZGbGFn
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9mbGFncyk7IH0KLSAgICAg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlZhbHVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTU3RyaW5nLCBtX3ZhbHVlKTsgfQotCi0gICAgICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0K
LSAgICAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3Ry
ZWFtJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKLQotICAgICAgICBlbnVtIHsKLSAgICAgICAgICAgIEhhc2hDb25zTG9jayA9IDF1
IDw8IDIsCi0gICAgICAgICAgICBJc0hhc2hDb25zU2luZ2xldG9uID0gMXUgPDwgMSwKLSAgICAg
ICAgICAgIElzOEJpdCA9IDF1Ci0gICAgICAgIH07Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgICAgIGZyaWVuZCBj
bGFzcyBKU1ZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNSb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZS5pc051bGwoKTsgfQotICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxhZ3MgJiBJczhCaXQ7IH0KLSAgICAgICAgdm9pZCBzZXRJczhCaXQoYm9v
bCBmbGFnKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAg
ICAgICAgICBtX2ZsYWdzIHw9IElzOEJpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2ZsYWdzICY9IH5JczhCaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBzaG91bGRU
cnlIYXNoQ29ucygpOwotICAgICAgICBib29sIGlzSGFzaENvbnNTaW5nbGV0b24oKSBjb25zdCB7
IHJldHVybiBtX2ZsYWdzICYgSXNIYXNoQ29uc1NpbmdsZXRvbjsgfQotICAgICAgICB2b2lkIGNs
ZWFySGFzaENvbnNTaW5nbGV0b24oKSB7IG1fZmxhZ3MgJj0gfklzSGFzaENvbnNTaW5nbGV0b247
IH0KLSAgICAgICAgdm9pZCBzZXRIYXNoQ29uc1NpbmdsZXRvbigpIHsgbV9mbGFncyB8PSBJc0hh
c2hDb25zU2luZ2xldG9uOyB9Ci0gICAgICAgIGJvb2wgdHJ5SGFzaENvbnNMb2NrKCk7Ci0gICAg
ICAgIHZvaWQgcmVsZWFzZUhhc2hDb25zTG9jaygpOwotCi0gICAgICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9mbGFnczsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNl
bnRlZCBlaXRoZXIgYnkgYSBTdHJpbmcgb3IgYSByb3BlIG9mIGZpYmVycy4KLSAgICAgICAgdW5z
aWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIG11dGFibGUgU3RyaW5nIG1fdmFsdWU7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3N0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKKyAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgc2V0
SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgICAgIEhlYXA6OmhlYXAodGhp
cyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKKyAgICAgICAgdm0ubV9uZXdTdHJpbmdz
U2luY2VMYXN0SGFzaENvbnMrKzsKKyAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7Citwcm90
ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAg
c2V0SXM4Qml0KHRydWUpOworICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cysrOworICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2
bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CisgICAgICAgIGludDMyX3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPj0gMCk7CisgICAgICAgIHNpemVfdCBjb3N0ID0gdmFs
dWUtPmNvc3QoKTsKKyAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTU3RyaW5nPih2bS5oZWFwKSkgSlNTdHJpbmcodm0sIHZhbHVlKTsKKyAg
ICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSwgbGVuZ3RoLCBjb3N0KTsKKyAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICB9CisgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVI
YXNPdGhlck93bmVyKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSB2YWx1ZS0+
bGVuZ3RoKCk7CisgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCB2YWx1ZSk7CisgICAg
ICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIGxlbmd0aCk7CisgICAgICAgIHJldHVy
biBuZXdTdHJpbmc7CisgICAgfQorCisgICAgSWRlbnRpZmllciB0b0lkZW50aWZpZXIoRXhlY1N0
YXRlKikgY29uc3Q7CisgICAgQXRvbWljU3RyaW5nIHRvQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSop
IGNvbnN0OworICAgIEF0b21pY1N0cmluZ0ltcGwqIHRvRXhpc3RpbmdBdG9taWNTdHJpbmcoRXhl
Y1N0YXRlKikgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25z
dDsKKyAgICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CisgICAgY29uc3QgU3Ry
aW5nSW1wbCogdHJ5R2V0VmFsdWVJbXBsKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAgICBib29sIGdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OworICAgIEpTT2Jq
ZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIGRv
dWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKKworICAgIGJvb2wgZ2V0U3RyaW5nUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
Ym9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAg
Ym9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV9sZW5ndGg7IH0KKyAg
ICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQpOworCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KIAotICAgICAgICBTdHJpbmcmIHN0cmluZygp
IHsgQVNTRVJUKCFpc1JvcGUoKSk7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9s
ZW5ndGgpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkZsYWdzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX2ZsYWdzKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZWYWx1ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV92YWx1ZSk7
IH0KIAotICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKik7Ci0gICAgICAgIGZyaWVuZCBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShj
b25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGVudW0geworICAgICAgICBIYXNoQ29u
c0xvY2sgPSAxdSA8PCAyLAorICAgICAgICBJc0hhc2hDb25zU2luZ2xldG9uID0gMXUgPDwgMSwK
KyAgICAgICAgSXM4Qml0ID0gMXUKICAgICB9OwogCi0gICAgY2xhc3MgSlNSb3BlU3RyaW5nIDog
cHVibGljIEpTU3RyaW5nIHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgICAg
IGZyaWVuZCBKU1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOworICAgIGZyaWVuZCBj
bGFzcyBKU1ZhbHVlOwogCi0gICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKLSAgICAgICAgcHVi
bGljOgotICAgICAgICAgICAgUm9wZUJ1aWxkZXIoVk0mIHZtKQotICAgICAgICAgICAgICAgIDog
bV92bSh2bSkKLSAgICAgICAgICAgICAgICAsIG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZ2
bSkpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICB9CisgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmlzTnVsbCgp
OyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSXM4Qml0OyB9
CisgICAgdm9pZCBzZXRJczhCaXQoYm9vbCBmbGFnKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGZsYWcpCisgICAgICAgICAgICBtX2ZsYWdzIHw9IElzOEJpdDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9mbGFncyAmPSB+SXM4Qml0OworICAgIH0KKyAgICBib29sIHNob3VsZFRyeUhh
c2hDb25zKCk7CisgICAgYm9vbCBpc0hhc2hDb25zU2luZ2xldG9uKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFncyAmIElzSGFzaENvbnNTaW5nbGV0b247IH0KKyAgICB2b2lkIGNsZWFySGFzaENvbnNT
aW5nbGV0b24oKSB7IG1fZmxhZ3MgJj0gfklzSGFzaENvbnNTaW5nbGV0b247IH0KKyAgICB2b2lk
IHNldEhhc2hDb25zU2luZ2xldG9uKCkgeyBtX2ZsYWdzIHw9IElzSGFzaENvbnNTaW5nbGV0b247
IH0KKyAgICBib29sIHRyeUhhc2hDb25zTG9jaygpOworICAgIHZvaWQgcmVsZWFzZUhhc2hDb25z
TG9jaygpOwogCi0gICAgICAgICAgICBib29sIGFwcGVuZChKU1N0cmluZyoganNTdHJpbmcpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1faW5kZXggPT0gSlNSb3BlU3RyaW5n
OjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgZXhwYW5kKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fanNTdHJpbmctPmxl
bmd0aCgpICsganNTdHJpbmctPmxlbmd0aCgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9qc1N0cmluZyA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+YXBwZW5kKG1f
dm0sIG1faW5kZXgrKywganNTdHJpbmcpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQorICAgIG11dGFibGUgdW5zaWduZWQgbV9mbGFnczsKIAotICAgICAgICAg
ICAgSlNSb3BlU3RyaW5nKiByZWxlYXNlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2pzU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBKU1JvcGVTdHJp
bmcqIHRtcCA9IG1fanNTdHJpbmc7Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9IDA7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgIH0KKyAgICAvLyBBIHN0cmlu
ZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBTdHJpbmcgb3IgYSByb3BlIG9mIGZpYmVycy4K
KyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3ZhbHVlOwogCi0g
ICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2pzU3RyaW5nLT5t
X2xlbmd0aDsgfQorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB2b2lkIGV4cGFuZCgpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgVk0mIG1fdm07Ci0gICAgICAgICAgICBKU1JvcGVT
dHJpbmcqIG1fanNTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgbV9pbmRleDsKLSAgICAgICAg
fTsKLSAgICAgICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTUm9wZVN0cmluZyhWTSYg
dm0pCi0gICAgICAgICAgICA6IEpTU3RyaW5nKHZtKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAg
ICBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwog
Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1N0cmluZyogczEsIEpTU3Ry
aW5nKiBzMikKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7Ci0gICAg
ICAgICAgICBzZXRJc1N1YnN0cmluZyhmYWxzZSk7Ci0gICAgICAgICAgICBmaWJlcigwKS5zZXQo
dm0sIHRoaXMsIHMxKTsKLSAgICAgICAgICAgIGZpYmVyKDEpLnNldCh2bSwgdGhpcywgczIpOwot
ICAgICAgICAgICAgZmliZXIoMikuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMiwgSlNTdHJpbmcqIHMzKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5s
ZW5ndGgoKSArIHMzLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHNldElzOEJpdChzMS0+aXM4Qml0
KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOwotICAgICAgICAgICAgc2V0SXNT
dWJzdHJpbmcoZmFsc2UpOwotICAgICAgICAgICAgZmliZXIoMCkuc2V0KHZtLCB0aGlzLCBzMSk7
Ci0gICAgICAgICAgICBmaWJlcigxKS5zZXQodm0sIHRoaXMsIHMyKTsKLSAgICAgICAgICAgIGZp
YmVyKDIpLnNldCh2bSwgdGhpcywgczMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTdHJpbmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJhc2UtPmlzUm9wZSgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVCghc3VtT3ZlcmZsb3dzPGludDMyX3Q+KG9mZnNldCwgbGVuZ3RoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IGJhc2UtPmxlbmd0aCgpKTsKLSAg
ICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgc2V0SXM4Qml0KGJhc2Ut
PmlzOEJpdCgpKTsKLSAgICAgICAgICAgIHNldElzU3Vic3RyaW5nKHRydWUpOwotICAgICAgICAg
ICAgc3Vic3RyaW5nQmFzZSgpLnNldCh2bSwgdGhpcywgYmFzZSk7Ci0gICAgICAgICAgICBzdWJz
dHJpbmdPZmZzZXQoKSA9IG9mZnNldDsKLSAgICAgICAgfQorICAgIFN0cmluZyYgc3RyaW5nKCkg
eyBBU1NFUlQoIWlzUm9wZSgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICAgICAgewotICAgICAgICAgICAgSlNTdHJpbmc6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgICAgIHNldElzU3Vic3RyaW5nKGZhbHNlKTsKLSAg
ICAgICAgICAgIGZpYmVyKDApLmNsZWFyKCk7Ci0gICAgICAgICAgICBmaWJlcigxKS5jbGVhcigp
OwotICAgICAgICAgICAgZmliZXIoMikuY2xlYXIoKTsKLSAgICAgICAgfQorICAgIGZyaWVuZCBK
U1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKKyAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworfTsKIAotICAgICAgICB2b2lkIGFwcGVuZChW
TSYgdm0sIHNpemVfdCBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmaWJlcihpbmRleCkuc2V0KHZtLCB0aGlzLCBqc1N0cmluZyk7Ci0gICAgICAgICAg
ICBtX2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5ndGg7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihtX2xlbmd0aCkgPj0gMCk7Ci0gICAgICAgICAgICBz
ZXRJczhCaXQoaXM4Qml0KCkgJiYganNTdHJpbmctPmlzOEJpdCgpKTsKLSAgICAgICAgfQorY2xh
c3MgSlNSb3BlU3RyaW5nIDogcHVibGljIEpTU3RyaW5nIHsKKyAgICBmcmllbmQgY2xhc3MgSlNT
dHJpbmc7CiAKLSAgICAgICAgc3RhdGljIEpTUm9wZVN0cmluZyogY3JlYXRlTnVsbChWTSYgdm0p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5n
KHZtKTsKLSAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICAgICAgcmV0dXJuIG5ld1N0cmluZzsKLSAgICAgICAgfQorICAgIGZyaWVuZCBKU1JvcGVTdHJp
bmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOwogCisgICAgY2xhc3MgUm9wZUJ1aWxkZXIgewogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoVk0mIHZtLCBKU1N0cmlu
ZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgUm9wZUJ1aWxkZXIoVk0mIHZtKQorICAgICAg
ICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAgICAgLCBtX2pzU3RyaW5nKGpzU3RyaW5nQnVpbGRl
cigmdm0pKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNS
b3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKLSAgICAgICAgICAgIG5ld1N0
cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIHMxLCBzMik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3
U3RyaW5nOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2
bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKworICAgICAgICBi
b29sIGFwcGVuZChKU1N0cmluZyoganNTdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpT
Um9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3Bl
U3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKLSAgICAgICAgICAgIG5ld1N0cmlu
Zy0+ZmluaXNoQ3JlYXRpb24odm0sIHMxLCBzMiwgczMpOwotICAgICAgICAgICAgcmV0dXJuIG5l
d1N0cmluZzsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJ
bnRlcm5hbFJvcGVMZW5ndGgpCisgICAgICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9qc1N0cmluZy0+bGVuZ3RoKCkgKyBqc1N0cmlu
Zy0+bGVuZ3RoKCkpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fanNTdHJpbmctPmFwcGVuZChtX3ZtLCBtX2luZGV4KyssIGpzU3RyaW5nKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZShWTSYgdm0sIEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKKworICAgICAgICBKU1JvcGVTdHJpbmcqIHJlbGVhc2UoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0cmluZyh2bSk7
Ci0gICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtLCBiYXNlLCBvZmZzZXQs
IGxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9qc1N0cmluZyk7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIHRtcCA9
IG1fanNTdHJpbmc7CisgICAgICAgICAgICBtX2pzU3RyaW5nID0gMDsKKyAgICAgICAgICAgIHJl
dHVybiB0bXA7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZpc2l0RmliZXJzKFNsb3RWaXNp
dG9yJik7Ci0gICAgICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZp
YmVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1JvcGVTdHJpbmcsIHUpOyB9CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3Ro
OyB9CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoID0gMzsKLSAgICAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBKU1Zh
bHVlIGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1bnNp
Z25lZCk7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVj
U3RhdGUqLCBKU1ZhbHVlKTsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29s
dmVSb3BlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHJlc29sdmVSb3BlVG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEF0b21pY1N0cmluZ0ltcGwqIHJlc29sdmVSb3BlVG9FeGlzdGluZ0F0
b21pY1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgdm9pZCByZXNvbHZlUm9wZVNs
b3dDYXNlOChMQ2hhciopIGNvbnN0OwotICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2Uo
VUNoYXIqKSBjb25zdDsKLSAgICAgICAgdm9pZCBvdXRPZk1lbW9yeShFeGVjU3RhdGUqKSBjb25z
dDsKLSAgICAgICAgdm9pZCByZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciopIGNvbnN0OwotICAg
ICAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoTENoYXIqKSBjb25zdDsK
LSAgICAgICAgdm9pZCByZXNvbHZlUm9wZUludGVybmFsMTYoVUNoYXIqKSBjb25zdDsKLSAgICAg
ICAgdm9pZCByZXNvbHZlUm9wZUludGVybmFsMTZOb1N1YnN0cmluZyhVQ2hhciopIGNvbnN0Owot
ICAgICAgICB2b2lkIGNsZWFyRmliZXJzKCkgY29uc3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIGdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQpOwotICAgICAgICAKLSAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU1N0cmluZz4m
IGZpYmVyKHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
aXNTdWJzdHJpbmcoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHNfbWF4SW50ZXJuYWxSb3Bl
TGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiB1W2ldLnN0cmluZzsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU1N0cmluZz4mIHN1YnN0cmluZ0Jhc2Uo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdVsxXS5zdHJpbmc7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVpbnRwdHJfdCYgc3Vic3RyaW5nT2Zmc2V0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVbMl0ubnVtYmVyOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdWludHB0cl90IG5vdFN1YnN0cmluZ1NlbnRpbmVs
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHN0YXRpYyB1aW50cHRyX3Qgc3Vic3RyaW5nU2VudGluZWwoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9v
bCBpc1N1YnN0cmluZygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1WzBd
Lm51bWJlciA9PSBzdWJzdHJpbmdTZW50aW5lbCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICB2b2lkIHNldElzU3Vic3RyaW5nKGJvb2wgaXNTdWJzdHJpbmcpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVbMF0ubnVtYmVyID0gaXNTdWJzdHJpbmcgPyBzdWJzdHJpbmdTZW50aW5lbCgp
IDogbm90U3Vic3RyaW5nU2VudGluZWwoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGV4cGFu
ZCgpOwogCi0gICAgICAgIG11dGFibGUgdW5pb24gewotICAgICAgICAgICAgdWludHB0cl90IG51
bWJlcjsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNTdHJpbmc+IHN0cmluZzsKLSAg
ICAgICAgfSB1W3NfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoXTsKKyAgICAgICAgVk0mIG1fdm07Cisg
ICAgICAgIEpTUm9wZVN0cmluZyogbV9qc1N0cmluZzsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7
CiAgICAgfTsKIAotCi0gICAgaW5saW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjp0cnlH
ZXRWYWx1ZUltcGwoKSBjb25zdAorcHJpdmF0ZToKKyAgICBKU1JvcGVTdHJpbmcoVk0mIHZtKQor
ICAgICAgICA6IEpTU3RyaW5nKHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUuaW1w
bCgpOwogICAgIH0KIAotICAgIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKTsKLQotICAgIGlu
bGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCiAgICAgewotICAgICAg
ICBBU1NFUlQodmFsdWUuYXNDZWxsKCktPmlzU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4ganND
YXN0PEpTU3RyaW5nKj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
OworICAgICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7CisgICAg
ICAgIHNldElzU3Vic3RyaW5nKGZhbHNlKTsKKyAgICAgICAgZmliZXIoMCkuc2V0KHZtLCB0aGlz
LCBzMSk7CisgICAgICAgIGZpYmVyKDEpLnNldCh2bSwgdGhpcywgczIpOworICAgICAgICBmaWJl
cigyKS5jbGVhcigpOwogICAgIH0KIAotICAgIGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmlu
ZyhWTSogdm0pCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzMSwg
SlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMpCiAgICAgewotICAgICAgICByZXR1cm4gdm0tPnNt
YWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpICsgczMt
Pmxlbmd0aCgpOworICAgICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQo
KSAmJiAgczMtPmlzOEJpdCgpKTsKKyAgICAgICAgc2V0SXNTdWJzdHJpbmcoZmFsc2UpOworICAg
ICAgICBmaWJlcigwKS5zZXQodm0sIHRoaXMsIHMxKTsKKyAgICAgICAgZmliZXIoMSkuc2V0KHZt
LCB0aGlzLCBzMik7CisgICAgICAgIGZpYmVyKDIpLnNldCh2bSwgdGhpcywgczMpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZN
KiB2bSwgVUNoYXIgYykKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTdHJpbmcq
IGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAg
aWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIHZt
LT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwotICAgICAgICByZXR1cm4g
SlNTdHJpbmc6OmNyZWF0ZSgqdm0sIFN0cmluZygmYywgMSkuaW1wbCgpKTsKKyAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBBU1NFUlQoIWJhc2UtPmlzUm9wZSgpKTsK
KyAgICAgICAgQVNTRVJUKCFzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0LCBsZW5ndGgpKTsK
KyAgICAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBiYXNlLT5sZW5ndGgoKSk7CisgICAg
ICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgICAgICBzZXRJczhCaXQoYmFzZS0+aXM4Qml0KCkp
OworICAgICAgICBzZXRJc1N1YnN0cmluZyh0cnVlKTsKKyAgICAgICAgc3Vic3RyaW5nQmFzZSgp
LnNldCh2bSwgdGhpcywgYmFzZSk7CisgICAgICAgIHN1YnN0cmluZ09mZnNldCgpID0gb2Zmc2V0
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZz
ZXQpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzLmxlbmd0aCgpKSk7Ci0gICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KG9m
ZnNldCk7Ci0gICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAg
ICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsK
LSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGVT
dWJzdHJpbmdTaGFyaW5nSW1wbChzLmltcGwoKSwgb2Zmc2V0LCAxKSk7CisgICAgICAgIEpTU3Ry
aW5nOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHNldElzU3Vic3RyaW5nKGZhbHNlKTsK
KyAgICAgICAgZmliZXIoMCkuY2xlYXIoKTsKKyAgICAgICAgZmliZXIoMSkuY2xlYXIoKTsKKyAg
ICAgICAgZmliZXIoMikuY2xlYXIoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpz
Tm9udHJpdmlhbFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKKyAgICB2b2lkIGFwcGVu
ZChWTSYgdm0sIHNpemVfdCBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHMubGVuZ3RoKCkgPiAxKTsKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGUoKnZtLCBzLmltcGwoKSk7CisgICAgICAgIGZpYmVyKGluZGV4KS5zZXQodm0sIHRoaXMsIGpz
U3RyaW5nKTsKKyAgICAgICAgbV9sZW5ndGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihtX2xlbmd0aCkgPj0gMCk7Cisg
ICAgICAgIHNldElzOEJpdChpczhCaXQoKSAmJiBqc1N0cmluZy0+aXM4Qml0KCkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBKU1N0cmluZzo6dG9JZGVudGlmaWVyKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBjcmVhdGVOdWxs
KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIHRvQXRvbWlj
U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmco
dm0pOworICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEF0b21pY1N0cmluZyBK
U1N0cmluZzo6dG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorcHVibGljOgor
ICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmlu
ZyogczIpCiAgICAgewotICAgICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGVUb0F0b21pY1N0cmlu
ZyhleGVjKTsKLSAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhtX3ZhbHVlKTsKKyAgICAgICAg
SlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Jv
cGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmcodm0pOworICAgICAgICBuZXdTdHJpbmct
PmZpbmlzaENyZWF0aW9uKHZtLCBzMSwgczIpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwog
ICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nSW1wbCogSlNTdHJpbmc6OnRv
RXhpc3RpbmdBdG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHN0YXRpYyBK
U1N0cmluZyogY3JlYXRlKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3Ry
aW5nKiBzMykKICAgICB7Ci0gICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGVUb0V4
aXN0aW5nQXRvbWljU3RyaW5nKGV4ZWMpOwotICAgICAgICBpZiAobV92YWx1ZS5pbXBsKCktPmlz
QXRvbWljKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1w
bCo+KG1fdmFsdWUuaW1wbCgpKTsKLSAgICAgICAgaWYgKEF0b21pY1N0cmluZ0ltcGwqIGV4aXN0
aW5nQXRvbWljU3RyaW5nID0gQXRvbWljU3RyaW5nOjpmaW5kKG1fdmFsdWUuaW1wbCgpKSkgewot
ICAgICAgICAgICAgbV92YWx1ZSA9ICpleGlzdGluZ0F0b21pY1N0cmluZzsKLSAgICAgICAgICAg
IHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOwotICAgICAgICAgICAgcmV0dXJu
IGV4aXN0aW5nQXRvbWljU3RyaW5nOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0cmluZyh2bSk7CisgICAgICAg
IG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIHMxLCBzMiwgczMpOworICAgICAgICByZXR1
cm4gbmV3U3RyaW5nOwogICAgIH0KIAotICAgIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5n
Ojp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVh
dGUoVk0mIHZtLCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiAgICAgewotICAgICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoZXhlYyk7Ci0gICAgICAg
IHJldHVybiBtX3ZhbHVlOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0cmlu
Zyh2bSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIGJhc2UsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKLSAgICBpbmxp
bmUgY29uc3QgU3RyaW5nJiBKU1N0cmluZzo6dHJ5R2V0VmFsdWUoKSBjb25zdAorICAgIHZvaWQg
dmlzaXRGaWJlcnMoU2xvdFZpc2l0b3ImKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaWJlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSb3BlU3RyaW5nLCB1KTsgfQor
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoID0gMzsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5
KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdW5zaWduZWQpOworICAgIGZyaWVuZCBKU1ZhbHVlIGpz
U3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVzb2x2ZVJvcGUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZXNvbHZlUm9wZVRvQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEF0b21pY1N0cmluZ0ltcGwqIHJlc29sdmVSb3Bl
VG9FeGlzdGluZ0F0b21pY1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICB2b2lkIHJlc29s
dmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7CisgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dD
YXNlKFVDaGFyKikgY29uc3Q7CisgICAgdm9pZCBvdXRPZk1lbW9yeShFeGVjU3RhdGUqKSBjb25z
dDsKKyAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKikgY29uc3Q7CisgICAgdm9p
ZCByZXNvbHZlUm9wZUludGVybmFsOE5vU3Vic3RyaW5nKExDaGFyKikgY29uc3Q7CisgICAgdm9p
ZCByZXNvbHZlUm9wZUludGVybmFsMTYoVUNoYXIqKSBjb25zdDsKKyAgICB2b2lkIHJlc29sdmVS
b3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKFVDaGFyKikgY29uc3Q7CisgICAgdm9pZCBjbGVhckZp
YmVycygpIGNvbnN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIGdldEluZGV4
U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQpOworCisgICAgV3JpdGVCYXJyaWVyQmFzZTxK
U1N0cmluZz4mIGZpYmVyKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoaXNS
b3BlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlz
KS0+cmVzb2x2ZVJvcGUoMCk7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgICAgICBBU1NF
UlQoIWlzU3Vic3RyaW5nKCkpOworICAgICAgICBBU1NFUlQoaSA8IHNfbWF4SW50ZXJuYWxSb3Bl
TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHVbaV0uc3RyaW5nOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKKyAgICBXcml0ZUJhcnJpZXJCYXNlPEpTU3RyaW5nPiYgc3Vic3RyaW5nQmFzZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICBpZiAoaXNS
b3BlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNSb3BlU3RyaW5nKj4odGhp
cyktPmdldEluZGV4U2xvd0Nhc2UoZXhlYywgaSk7Ci0gICAgICAgIEFTU0VSVChpIDwgbV92YWx1
ZS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhl
eGVjLCBtX3ZhbHVlLCBpKTsKKyAgICAgICAgcmV0dXJuIHVbMV0uc3RyaW5nOwogICAgIH0KIAot
ICAgIGlubGluZSBKU1N0cmluZyoganNTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCisg
ICAgdWludHB0cl90JiBzdWJzdHJpbmdPZmZzZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgaW50
IHNpemUgPSBzLmxlbmd0aCgpOwotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICByZXR1
cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwotICAgICAgICBpZiAoc2l6ZSA9PSAx
KSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gcy5jaGFyYWN0ZXJBdCgwKTsKLSAgICAgICAgICAg
IGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgICAgICByZXR1
cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBzLmltcGwoKSk7CisgICAgICAg
IHJldHVybiB1WzJdLm51bWJlcjsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHN0YXRpYyB1aW50cHRyX3Qgbm90U3Vic3RyaW5nU2VudGluZWwo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cy0+bGVuZ3RoKCkpKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocy0+bGVuZ3RoKCkpKTsKLSAgICAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkpKTsKLSAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdm0uc21h
bGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHMtPnZhbHVlKGV4ZWMpOyAvLyBGb3Ig
ZWZmZWN0LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSBzdHJpbmcgdGhhdCBpcyB1c2VkIGFz
IGEgc3Vic3RyaW5nIGJhc2UgaXMgbm90IGEgcm9wZS4KLSAgICAgICAgcmV0dXJuIEpTUm9wZVN0
cmluZzo6Y3JlYXRlKHZtLCBzLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgaW5saW5l
IEpTU3RyaW5nKiBqc1N1YnN0cmluZzgoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA8
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwotICAgICAgICBBU1NFUlQobGVu
Z3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsK
LSAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpOwotICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAg
IFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoYyA8PSBt
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6OmNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsOChzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhW
TSogdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgc3RhdGljIHVpbnRwdHJfdCBzdWJzdHJpbmdTZW50aW5lbCgpCiAgICAgewotICAgICAg
ICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7Ci0g
ICAgICAgIEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkp
KTsKLSAgICAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocy5sZW5ndGgoKSkpOwotICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
biB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MSkgewotICAgICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQob2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwg
U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwocy5pbXBsKCksIG9mZnNldCwg
bGVuZ3RoKSk7CisgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgIGlubGluZSBKU1N0cmlu
ZyoganNPd25lZFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKKyAgICBib29sIGlzU3Vi
c3RyaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGludCBzaXplID0gcy5sZW5ndGgoKTsKLSAg
ICAgICAgaWYgKCFzaXplKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKLSAgICAgICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICAgICAgVUNoYXIg
YyA9IHMuY2hhcmFjdGVyQXQoMCk7Ci0gICAgICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIHMuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIHVb
MF0ubnVtYmVyID09IHN1YnN0cmluZ1NlbnRpbmVsKCk7CiAgICAgfQogCi0gICAgaW5saW5lIEpT
Um9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKFZNKiB2bSkKKyAgICB2b2lkIHNldElzU3Vic3Ry
aW5nKGJvb2wgaXNTdWJzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5n
OjpjcmVhdGVOdWxsKCp2bSk7CisgICAgICAgIHVbMF0ubnVtYmVyID0gaXNTdWJzdHJpbmcgPyBz
dWJzdHJpbmdTZW50aW5lbCgpIDogbm90U3Vic3RyaW5nU2VudGluZWwoKTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVy
biBqc0VtcHR5U3RyaW5nKCZleGVjLT52bSgpKTsgfQotICAgIGlubGluZSBKU1N0cmluZyoganNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJuIGpzU3RyaW5n
KCZleGVjLT52bSgpLCBzKTsgfQotICAgIGlubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBVQ2hhciBjKSB7IHJldHVybiBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZygmZXhlYy0+dm0oKSwgYyk7IH0KLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nOChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nOCgmZXhlYy0+dm0oKSwgcywg
b2Zmc2V0LCBsZW5ndGgpOyB9Ci0gICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nKCZleGVjLT52bSgpLCBzLCBvZmZzZXQsIGxlbmd0
aCk7IH0KLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVj
LT52bSgpLCBzKTsgfQotICAgIGlubGluZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNPd25lZFN0cmluZygmZXhlYy0+
dm0oKSwgcyk7IH0KKyAgICBtdXRhYmxlIHVuaW9uIHsKKyAgICAgICAgdWludHB0cl90IG51bWJl
cjsKKyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU1N0cmluZz4gc3RyaW5nOworICAgIH0gdVtz
X21heEludGVybmFsUm9wZUxlbmd0aF07Cit9OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNT
dHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlU2xvd0Nhc2UoVk0mLCBTdHJpbmdJbXBsJik7CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzLmltcGwoKTsKLSAgICAgICAgaWYg
KCFzdHJpbmdJbXBsIHx8ICFzdHJpbmdJbXBsLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKCZ2bSk7CitpbmxpbmUgY29uc3QgU3RyaW5nSW1wbCogSlNTdHJpbmc6
OnRyeUdldFZhbHVlSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWUuaW1wbCgpOwor
fQogCi0gICAgICAgIGlmIChzdHJpbmdJbXBsLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAg
ICBVQ2hhciBzaW5nbGVDaGFyYWN0ZXIgPSAoKnN0cmluZ0ltcGwpWzB1XTsKLSAgICAgICAgICAg
IGlmIChzaW5nbGVDaGFyYWN0ZXIgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAg
ICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNpbmdsZUNoYXJhY3RlcikpOwotICAgICAgICB9CitK
U1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKEpTU3RyaW5nKiBsYXN0
Q2FjaGVkU3RyaW5nID0gdm0ubGFzdENhY2hlZFN0cmluZy5nZXQoKSkgewotICAgICAgICAgICAg
aWYgKGxhc3RDYWNoZWRTdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpID09IHN0cmluZ0ltcGwpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RDYWNoZWRTdHJpbmc7Ci0gICAgICAgIH0KK2lubGlu
ZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUu
YXNDZWxsKCktPmlzU3RyaW5nKCkpOworICAgIHJldHVybiBqc0Nhc3Q8SlNTdHJpbmcqPih2YWx1
ZS5hc0NlbGwoKSk7Cit9CiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlU2xvd0Nh
c2Uodm0sICpzdHJpbmdJbXBsKTsKLSAgICB9CitpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJp
bmcoVk0qIHZtKQoreworICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7
Cit9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzLnN0cmluZygpKTsKLSAgICB9CitBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhWTSogdm0sIFVDaGFyIGMpCit7
CisgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQorICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7CisgICAgcmV0dXJuIEpT
U3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJpbmcoJmMsIDEpLmltcGwoKSk7Cit9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAg
ICB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSwganNOdW1iZXIobV9sZW5ndGgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CitBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJh
Y3RlclN1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQg
b2Zmc2V0KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEFTU0VSVChvZmZzZXQg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOworICAgIFVDaGFyIGMgPSBzLmNo
YXJhY3RlckF0KG9mZnNldCk7CisgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KQorICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmco
Yyk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGVT
dWJzdHJpbmdTaGFyaW5nSW1wbChzLmltcGwoKSwgb2Zmc2V0LCAxKSk7Cit9CiAKLSAgICAgICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgICAgIGlmIChpIDwgbV9s
ZW5ndGgpIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7IC8vIE5vIG5lZWQgZm9yIGFuIGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJvdmUgdGVzdCB3b3Vs
ZCBhbHdheXMgZmFpbCEKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0
ZSB8IFJlYWRPbmx5LCBnZXRJbmRleChleGVjLCBpKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQoraW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qIHZt
LCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgQVNTRVJUKHMubGVuZ3RoKCkgPiAxKTsKKyAgICBy
ZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0sIHMuaW1wbCgpKTsKK30KIAotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIEpT
U3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPCBtX2xlbmd0aCkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBE
b250RGVsZXRlIHwgUmVhZE9ubHksIGdldEluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KK0FMV0FZU19JTkxJTkUgSWRlbnRpZmll
ciBKU1N0cmluZzo6dG9JZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSWRlbnRpZmllcihleGVjLCB0b0F0b21pY1N0cmluZyhleGVjKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgQXRvbWljU3RyaW5nIEpTU3RyaW5nOjp0b0F0b21pY1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0Cit7CisgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyhleGVj
KTsKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKG1fdmFsdWUpOworfQogCi0gICAgICAgIHJldHVy
biBmYWxzZTsKK0FMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nSW1wbCogSlNTdHJpbmc6OnRvRXhp
c3RpbmdBdG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGlmIChpc1Jv
cGUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRo
aXMpLT5yZXNvbHZlUm9wZVRvRXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYyk7CisgICAgaWYgKG1f
dmFsdWUuaW1wbCgpLT5pc0F0b21pYygpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRv
bWljU3RyaW5nSW1wbCo+KG1fdmFsdWUuaW1wbCgpKTsKKyAgICBpZiAoQXRvbWljU3RyaW5nSW1w
bCogZXhpc3RpbmdBdG9taWNTdHJpbmcgPSBBdG9taWNTdHJpbmc6OmZpbmQobV92YWx1ZS5pbXBs
KCkpKSB7CisgICAgICAgIG1fdmFsdWUgPSAqZXhpc3RpbmdBdG9taWNTdHJpbmc7CisgICAgICAg
IHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm4gZXhp
c3RpbmdBdG9taWNTdHJpbmc7CiAgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAg
aW5saW5lIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYg
di5hc0NlbGwoKS0+dHlwZSgpID09IFN0cmluZ1R5cGU7IH0KK2lubGluZSBjb25zdCBTdHJpbmcm
IEpTU3RyaW5nOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgaWYgKGlzUm9w
ZSgpKQorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVz
b2x2ZVJvcGUoZXhlYyk7CisgICAgcmV0dXJuIG1fdmFsdWU7Cit9CiAKLSAgICAvLyAtLS0gSlNW
YWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChpc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gYXNJbnQzMigp
OwotICAgICAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBhc0RvdWJsZSgp
ID4gMC4wIHx8IGFzRG91YmxlKCkgPCAwLjA7IC8vIGZhbHNlIGZvciBOYU4KLSAgICAgICAgaWYg
KGlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFzQ2VsbCgpLT50b0Jvb2xlYW4oZXhlYyk7
Ci0gICAgICAgIHJldHVybiBpc1RydWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQg
YWxsIGNvbnZlcnQgdG8gZmFsc2UuCitpbmxpbmUgY29uc3QgU3RyaW5nJiBKU1N0cmluZzo6dHJ5
R2V0VmFsdWUoKSBjb25zdAoreworICAgIGlmIChpc1JvcGUoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlKDApOworICAgIHJldHVy
biBtX3ZhbHVlOworfQorCitpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCit7CisgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsK
KyAgICBpZiAoaXNSb3BlKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1JvcGVTdHJp
bmcqPih0aGlzKS0+Z2V0SW5kZXhTbG93Q2FzZShleGVjLCBpKTsKKyAgICBBU1NFUlQoaSA8IG1f
dmFsdWUubGVuZ3RoKCkpOworICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhl
eGVjLCBtX3ZhbHVlLCBpKTsKK30KKworaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhWTSogdm0s
IGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpbnQgc2l6ZSA9IHMubGVuZ3RoKCk7CisgICAgaWYg
KCFzaXplKQorICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwor
ICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQoMCk7
CisgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKKyAgICAgICAgICAg
IHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKICAgICB9
CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBzLmltcGwoKSk7Cit9CiAKLSAgICBp
bmxpbmUgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJuIHRvU3RyaW5nU2xvd0Nhc2Uo
ZXhlYyk7CitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VS
VChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMtPmxlbmd0aCgpKSk7CisgICAgQVNT
RVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkpKTsKKyAgICBB
U1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5ndGgo
KSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICBzLT52YWx1ZShleGVj
KTsgLy8gRm9yIGVmZmVjdC4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgc3RyaW5nIHRoYXQg
aXMgdXNlZCBhcyBhIHN1YnN0cmluZyBiYXNlIGlzIG5vdCBhIHJvcGUuCisgICAgcmV0dXJuIEpT
Um9wZVN0cmluZzo6Y3JlYXRlKHZtLCBzLCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK2lubGluZSBK
U1N0cmluZyoganNTdWJzdHJpbmc4KFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CisgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOworICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGgg
PD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAo
bGVuZ3RoID09IDEpIHsKKyAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQob2Zmc2V0KTsK
KyAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQorICAgICAgICAgICAg
cmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0K
KyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbDgocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSk7
Cit9CiAKLSAgICBpbmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgcmV0dXJuIHRvV1RGU3RyaW5nU2xvd0Nhc2UoZXhlYyk7CitpbmxpbmUgSlNTdHJpbmcq
IGpzU3Vic3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzLmxlbmd0aCgpKSk7CisgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocy5sZW5ndGgoKSkpOworICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAobGVuZ3RoID09
IDEpIHsKKyAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQob2Zmc2V0KTsKKyAgICAgICAg
aWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIHZt
LT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0KKyAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGVT
dWJzdHJpbmdTaGFyaW5nSW1wbChzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKK30KIAotICAg
IEFMV0FZU19JTkxJTkUgU3RyaW5nIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZyhjb25z
dCBKU1ZhbHVlJiB2YWx1ZSwgRXhlY1N0YXRlKiBleGVjKQotICAgIHsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAg
IHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAg
aWYgKHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdm0ubnVtZXJpY1N0cmlu
Z3MuYWRkKHZhbHVlLmFzRG91YmxlKCkpOwotICAgICAgICBpZiAodmFsdWUuaXNUcnVlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ZhbHNlKCkpCi0gICAgICAgICAgICByZXR1cm4gdm0ucHJv
cGVydHlOYW1lcy0+ZmFsc2VLZXl3b3JkLnN0cmluZygpOwotICAgICAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+bnVsbEtleXdvcmQu
c3RyaW5nKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
cmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CitpbmxpbmUgSlNT
dHJpbmcqIGpzT3duZWRTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaW50
IHNpemUgPSBzLmxlbmd0aCgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIHZtLT5z
bWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAg
IFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KDApOworICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoYyk7CiAgICAgfQorICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcigqdm0sIHMuaW1wbCgpKTsKK30KIAotICAgIEFMV0FZU19JTkxJTkUgU3Ry
aW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nSW5saW5lKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpLT52YWx1ZShleGVjKTsKK2lubGluZSBKU1JvcGVTdHJp
bmcqIGpzU3RyaW5nQnVpbGRlcihWTSogdm0pCit7CisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6
Y3JlYXRlTnVsbCgqdm0pOworfQorCitpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVjLT52bSgpKTsgfQoraW5s
aW5lIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykg
eyByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMtPnZtKCksIGMpOyB9CitpbmxpbmUgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nOChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nOCgmZXhlYy0+
dm0oKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJpbmcoJmV4ZWMtPnZtKCksIHMsIG9mZnNldCwg
bGVuZ3RoKTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhl
Yy0+dm0oKSwgcyk7IH0KK2lubGluZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNPd25lZFN0cmluZygmZXhlYy0+dm0o
KSwgcyk7IH0KKworSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
U2xvd0Nhc2UoVk0mLCBTdHJpbmdJbXBsJik7CisKK0FMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpz
U3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHMuaW1w
bCgpOworICAgIGlmICghc3RyaW5nSW1wbCB8fCAhc3RyaW5nSW1wbC0+bGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7CisKKyAgICBpZiAoc3RyaW5nSW1wbC0+bGVu
Z3RoKCkgPT0gMSkgeworICAgICAgICBVQ2hhciBzaW5nbGVDaGFyYWN0ZXIgPSAoKnN0cmluZ0lt
cGwpWzB1XTsKKyAgICAgICAgaWYgKHNpbmdsZUNoYXJhY3RlciA8PSBtYXhTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzaW5nbGVDaGFyYWN0ZXIpKTsK
KyAgICB9CisKKyAgICBpZiAoSlNTdHJpbmcqIGxhc3RDYWNoZWRTdHJpbmcgPSB2bS5sYXN0Q2Fj
aGVkU3RyaW5nLmdldCgpKSB7CisgICAgICAgIGlmIChsYXN0Q2FjaGVkU3RyaW5nLT50cnlHZXRW
YWx1ZUltcGwoKSA9PSBzdHJpbmdJbXBsKQorICAgICAgICAgICAgcmV0dXJuIGxhc3RDYWNoZWRT
dHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlU2xvd0Nhc2Uodm0s
ICpzdHJpbmdJbXBsKTsKK30KKworQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmdXaXRo
Q2FjaGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9taWNTdHJpbmcmIHMpCit7CisgICAgcmV0
dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMuc3RyaW5nKCkpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSwg
anNOdW1iZXIobV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPCBtX2xlbmd0
aCkgeworICAgICAgICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOyAvLyBO
byBuZWVkIGZvciBhbiBleHBsaWNpdCBjaGVjaywgdGhlIGFib3ZlIHRlc3Qgd291bGQgYWx3YXlz
IGZhaWwhCisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCBnZXRJbmRleChleGVjLCBpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJp
bmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9sZW5ndGgpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIGdldElu
ZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSB2
KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxsKCktPnR5cGUoKSA9PSBTdHJpbmdUeXBl
OyB9CisKKy8vIC0tLSBKU1ZhbHVlIGlubGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKSBjb25z
dAoreworICAgIGlmIChpc0ludDMyKCkpCisgICAgICAgIHJldHVybiBhc0ludDMyKCk7CisgICAg
aWYgKGlzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBhc0RvdWJsZSgpID4gMC4wIHx8IGFzRG91
YmxlKCkgPCAwLjA7IC8vIGZhbHNlIGZvciBOYU4KKyAgICBpZiAoaXNDZWxsKCkpCisgICAgICAg
IHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBpc1RydWUoKTsg
Ly8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2UuCit9CisK
K2lubGluZSBKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAoreworICAgIGlmIChpc1N0cmluZygpKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTU3RyaW5n
Kj4oYXNDZWxsKCkpOworICAgIHJldHVybiB0b1N0cmluZ1Nsb3dDYXNlKGV4ZWMpOworfQorCitp
bmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K3sKKyAgICBpZiAoaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3Ry
aW5nKj4oYXNDZWxsKCkpLT52YWx1ZShleGVjKTsKKyAgICByZXR1cm4gdG9XVEZTdHJpbmdTbG93
Q2FzZShleGVjKTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmcgaW5saW5lSlNWYWx1ZU5vdFN0
cmluZ3RvU3RyaW5nKGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICByZXR1cm4gdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlLmFzSW50MzIoKSk7CisgICAgaWYg
KHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQo
dmFsdWUuYXNEb3VibGUoKSk7CisgICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQorICAgICAgICByZXR1
cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7CisgICAgaWYgKHZhbHVl
LmlzRmFsc2UoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmZhbHNlS2V5d29y
ZC5zdHJpbmcoKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB2bS5w
cm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdv
cmQuc3RyaW5nKCk7CisgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmdJbmxpbmUo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGlmIChpc1N0cmluZygpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOwogCi0g
ICAgICAgIHJldHVybiBpbmxpbmVKU1ZhbHVlTm90U3RyaW5ndG9TdHJpbmcoKnRoaXMsIGV4ZWMp
OwotICAgIH0KKyAgICByZXR1cm4gaW5saW5lSlNWYWx1ZU5vdFN0cmluZ3RvU3RyaW5nKCp0aGlz
LCBleGVjKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsODkgKzM0LDg5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxOyAvLyBXZWJDb3JlIHVz
ZXMgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB0byBtYWtlIGRvY3VtZW50LmFsbCB1bmRldGVjdGFi
bGUuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltcGxlbWVudHNIYXNJbnN0YW5jZSA9IDEg
PDwgMTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgPSAx
IDw8IDI7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UgPSAxIDw8IDM7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzRW52aXJvbm1lbnRS
ZWNvcmQgPSAxIDw8IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCA9IDEgPDwgNTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyA9IDEg
PDwgNjsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzID0gMSA8PCA4OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmcgPSAxIDw8IDk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCA9IDEgPDwgMTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cyA9IDEgPDwgMTE7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUlzSW1tb3J0YWwgPSAxIDw8IDEyOwotCi0gICAgY2xhc3Mg
VHlwZUluZm8gewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB1aW50OF90IElubGluZVR5
cGVGbGFnczsKLSAgICAgICAgdHlwZWRlZiB1aW50OF90IE91dE9mTGluZVR5cGVGbGFnczsKLQot
ICAgICAgICBUeXBlSW5mbyhKU1R5cGUgdHlwZSwgdW5zaWduZWQgZmxhZ3MgPSAwKQotICAgICAg
ICAgICAgOiBUeXBlSW5mbyh0eXBlLCBmbGFncyAmIDB4ZmYsIGZsYWdzID4+IDgpCi0gICAgICAg
IHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZUluZm8oSlNUeXBlIHR5cGUsIElu
bGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MsIE91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxp
bmVUeXBlRmxhZ3MpCi0gICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBt
X2ZsYWdzKGlubGluZVR5cGVGbGFncykKLSAgICAgICAgICAgICwgbV9mbGFnczIob3V0T2ZMaW5l
VHlwZUZsYWdzKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBObyBvYmplY3QgdGhhdCBkb2Vz
bid0IEltcGxlbWVudHNIYXNJbnN0YW5jZSBzaG91bGQgb3ZlcnJpZGUgaXQhCi0gICAgICAgICAg
ICBBU1NFUlQoKG1fZmxhZ3MgJiAoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFz
SW5zdGFuY2UpKSAhPSBPdmVycmlkZXNIYXNJbnN0YW5jZSk7Ci0gICAgICAgICAgICAvLyBJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIG1lYW5zIChJbXBsZW1lbnRzSGFzSW5zdGFuY2UgJiAh
T3ZlcnJpZGVzSGFzSW5zdGFuY2UpCi0gICAgICAgICAgICBpZiAoKG1fZmxhZ3MgJiAoSW1wbGVt
ZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UpKSA9PSBJbXBsZW1lbnRzSGFz
SW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgbV9mbGFncyB8PSBJbXBsZW1lbnRzRGVmYXVsdEhh
c0luc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1R5cGU+KG1fdHlwZSk7IH0KLSAgICAgICAgYm9vbCBpc09iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIGlzT2JqZWN0KHR5cGUoKSk7IH0KLSAgICAgICAgc3RhdGljIGJv
b2wgaXNPYmplY3QoSlNUeXBlIHR5cGUpIHsgcmV0dXJuIHR5cGUgPj0gT2JqZWN0VHlwZTsgfQot
ICAgICAgICBib29sIGlzRmluYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRmlu
YWxPYmplY3RUeXBlOyB9Ci0gICAgICAgIGJvb2wgaXNOdW1iZXJPYmplY3QoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gTnVtYmVyT2JqZWN0VHlwZTsgfQotICAgICAgICBib29sIGlzTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBOYW1lSW5zdGFuY2VUeXBlOyB9Ci0KLSAgICAgICAg
dW5zaWduZWQgZmxhZ3MoKSBjb25zdCB7IHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
ZmxhZ3MyKSA8PCA4KSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2ZsYWdzKTsgfQotICAgICAg
ICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxh
Z3MxKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOyB9Ci0gICAgICAgIGJvb2wgaW1wbGVtZW50c0hh
c0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJbXBsZW1lbnRzSGFzSW5z
dGFuY2UpOyB9Ci0gICAgICAgIGJvb2wgaXNFbnZpcm9ubWVudFJlY29yZCgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczEoSXNFbnZpcm9ubWVudFJlY29yZCk7IH0KLSAgICAgICAgYm9vbCBv
dmVycmlkZXNIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJp
ZGVzSGFzSW5zdGFuY2UpOyB9Ci0gICAgICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoSW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZSk7IH0KLSAgICAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSBj
b25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5lVHlwZUZsYWdz
KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdChJ
bmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90OyB9Ci0gICAgICAgIGJvb2wgaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czEoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyk7IH0KLSAgICAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXRPbkZsYWdzMihPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKTsgfQotICAg
ICAgICBib29sIHByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczIoUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKTsgfQotICAgICAgICBib29sIGhhc0lt
cHVyZUdldE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoSGFz
SW1wdXJlR2V0T3duUHJvcGVydHlTbG90KTsgfQotICAgICAgICBib29sIG5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoTmV3SW1w
dXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKTsgfQotICAgICAgICBib29sIHN0cnVjdHVyZUlz
SW1tb3J0YWwoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFN0cnVjdHVyZUlzSW1tb3J0
YWwpOyB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBmbGFnc09mZnNldCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZUluZm8sIG1fZmxhZ3Mp
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB0eXBlT2Zmc2V0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlSW5mbywgbV90
eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxh
Z3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgICAgIE91dE9mTGluZVR5cGVGbGFn
cyBvdXRPZkxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzMjsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAg
ICAgICAgCi0gICAgICAgIGJvb2wgaXNTZXRPbkZsYWdzMSh1bnNpZ25lZCBmbGFnKSBjb25zdCB7
IEFTU0VSVChmbGFnIDw9ICgxIDw8IDcpKTsgcmV0dXJuIG1fZmxhZ3MgJiBmbGFnOyB9Ci0gICAg
ICAgIGJvb2wgaXNTZXRPbkZsYWdzMih1bnNpZ25lZCBmbGFnKSBjb25zdCB7IEFTU0VSVChmbGFn
ID49ICgxIDw8IDgpKTsgcmV0dXJuIG1fZmxhZ3MyICYgKGZsYWcgPj4gOCk7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBjaGFyIG1fdHlwZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBtX2ZsYWdzOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIG1fZmxhZ3MyOwotICAgIH07CitzdGF0aWMgY29uc3QgdW5z
aWduZWQgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IDE7IC8vIFdlYkNvcmUgdXNlcyBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIHRvIG1ha2UgZG9jdW1lbnQuYWxsIHVuZGV0ZWN0YWJsZS4KK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgPSAxIDw8IDE7CitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgPSAxIDw8IDI7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9IDEgPDwgMzsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3JkID0gMSA8PCA0Oworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCA9IDEgPDwgNTsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvID0gMSA8PCA2OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQg
SGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90ID0gMSA8PCAxMDsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMgPSAxIDw8IDExOworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUlzSW1tb3J0YWwgPSAxIDw8IDEyOworCitjbGFzcyBU
eXBlSW5mbyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB1aW50OF90IElubGluZVR5cGVGbGFnczsK
KyAgICB0eXBlZGVmIHVpbnQ4X3QgT3V0T2ZMaW5lVHlwZUZsYWdzOworCisgICAgVHlwZUluZm8o
SlNUeXBlIHR5cGUsIHVuc2lnbmVkIGZsYWdzID0gMCkKKyAgICAgICAgOiBUeXBlSW5mbyh0eXBl
LCBmbGFncyAmIDB4ZmYsIGZsYWdzID4+IDgpCisgICAgeworICAgIH0KKworICAgIFR5cGVJbmZv
KEpTVHlwZSB0eXBlLCBJbmxpbmVUeXBlRmxhZ3MgaW5saW5lVHlwZUZsYWdzLCBPdXRPZkxpbmVU
eXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fZmxhZ3MoaW5saW5lVHlwZUZsYWdzKQorICAgICAgICAsIG1fZmxhZ3MyKG91dE9m
TGluZVR5cGVGbGFncykKKyAgICB7CisgICAgICAgIC8vIE5vIG9iamVjdCB0aGF0IGRvZXNuJ3Qg
SW1wbGVtZW50c0hhc0luc3RhbmNlIHNob3VsZCBvdmVycmlkZSBpdCEKKyAgICAgICAgQVNTRVJU
KChtX2ZsYWdzICYgKEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNl
KSkgIT0gT3ZlcnJpZGVzSGFzSW5zdGFuY2UpOworICAgICAgICAvLyBJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlIG1lYW5zIChJbXBsZW1lbnRzSGFzSW5zdGFuY2UgJiAhT3ZlcnJpZGVzSGFz
SW5zdGFuY2UpCisgICAgICAgIGlmICgobV9mbGFncyAmIChJbXBsZW1lbnRzSGFzSW5zdGFuY2Ug
fCBPdmVycmlkZXNIYXNJbnN0YW5jZSkpID09IEltcGxlbWVudHNIYXNJbnN0YW5jZSkKKyAgICAg
ICAgICAgIG1fZmxhZ3MgfD0gSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZTsKKyAgICB9CisK
KyAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTVHlwZT4obV90
eXBlKTsgfQorICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiBpc09iamVjdCh0eXBl
KCkpOyB9CisgICAgc3RhdGljIGJvb2wgaXNPYmplY3QoSlNUeXBlIHR5cGUpIHsgcmV0dXJuIHR5
cGUgPj0gT2JqZWN0VHlwZTsgfQorICAgIGJvb2wgaXNGaW5hbE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGU7IH0KKyAgICBib29sIGlzTnVtYmVyT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IE51bWJlck9iamVjdFR5cGU7IH0KKyAgICBib29s
IGlzTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBOYW1lSW5zdGFuY2VUeXBlOyB9CisK
KyAgICB1bnNpZ25lZCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9mbGFnczIpIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZmxhZ3MpOyB9Cisg
ICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZs
YWdzMShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsgfQorICAgIGJvb2wgaW1wbGVtZW50c0hhc0lu
c3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UpOyB9CisgICAgYm9vbCBpc0Vudmlyb25tZW50UmVjb3JkKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXRPbkZsYWdzMShJc0Vudmlyb25tZW50UmVjb3JkKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzSGFz
SW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0hhc0luc3Rh
bmNlKTsgfQorICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczEoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSk7IH0KKyAg
ICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsgcmV0dXJuIG92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdChpbmxpbmVUeXBlRmxhZ3MoKSk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7
IHJldHVybiBmbGFncyAmIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsgfQorICAgIGJvb2wg
aW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyk7IH0KKyAgICBib29sIG92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyk7
IH0KKyAgICBib29sIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczIoSGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KTsgfQorICAgIGJvb2wg
bmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMihOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMpOyB9CisgICAgYm9vbCBz
dHJ1Y3R1cmVJc0ltbW9ydGFsKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMihTdHJ1Y3R1
cmVJc0ltbW9ydGFsKTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBmbGFnc09mZnNldCgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVJbmZvLCBtX2ZsYWdzKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IHR5cGVPZmZzZXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlSW5mbywgbV90eXBlKTsKKyAgICB9CisKKyAg
ICBJbmxpbmVUeXBlRmxhZ3MgaW5saW5lVHlwZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFn
czsgfQorICAgIE91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZsYWdzMjsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CisKKyAgICBib29sIGlzU2V0T25GbGFnczEodW5zaWduZWQgZmxhZykg
Y29uc3QgeyBBU1NFUlQoZmxhZyA8PSAoMSA8PCA3KSk7IHJldHVybiBtX2ZsYWdzICYgZmxhZzsg
fQorICAgIGJvb2wgaXNTZXRPbkZsYWdzMih1bnNpZ25lZCBmbGFnKSBjb25zdCB7IEFTU0VSVChm
bGFnID49ICgxIDw8IDgpKTsgcmV0dXJuIG1fZmxhZ3MyICYgKGZsYWcgPj4gOCk7IH0KKworICAg
IHVuc2lnbmVkIGNoYXIgbV90eXBlOworICAgIHVuc2lnbmVkIGNoYXIgbV9mbGFnczsKKyAgICB1
bnNpZ25lZCBjaGFyIG1fZmxhZ3MyOworfTsKIAogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMTczMjQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYyICsyNiw2MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIC8v
IFRoaXMgY2xhc3MgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIGNsYXNzZXMgc3VjaCBhcyBTdHJpbmcs
Ci0gICAgLy8gTnVtYmVyLCBCb29sZWFuIGFuZCBEYXRlIHdoaWNoIGFyZSB3cmFwcGVycyBmb3Ig
cHJpbWl0aXZlIHR5cGVzLgotICAgIGNsYXNzIEpTV3JhcHBlck9iamVjdCA6IHB1YmxpYyBKU0Rl
c3RydWN0aWJsZU9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZShzaXplX3QgaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoaW5saW5lQ2FwYWNpdHksICFpbmxpbmVDYXBhY2l0eSk7Ci0gICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKEpTV3JhcHBlck9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU1ZhbHVl
IGludGVybmFsVmFsdWUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKFZN
JiwgSlNWYWx1ZSk7Ci0KLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
IAotICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGludGVybmFsVmFsdWVPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXcmFw
cGVyT2JqZWN0LCBtX2ludGVybmFsVmFsdWUpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW50ZXJuYWxWYWx1ZUNlbGxPZmZzZXQoKQotICAgICAgICB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbFZhbHVlT2Zmc2V0KCk7Ci0jZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIGludGVybmFsVmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCk7Ci0jZW5kaWYKLSAgICAgICAgfQot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqKTsKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIGNsYXNzZXMg
c3VjaCBhcyBTdHJpbmcsCisvLyBOdW1iZXIsIEJvb2xlYW4gYW5kIERhdGUgd2hpY2ggYXJlIHdy
YXBwZXJzIGZvciBwcmltaXRpdmUgdHlwZXMuCitjbGFzcyBKU1dyYXBwZXJPYmplY3QgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNEZXN0cnVj
dGlibGVPYmplY3QgQmFzZTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbnRlcm5hbFZhbHVlOwotICAgIH07Ci0K
LSAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdCh2bSwgc3Ry
dWN0dXJlKQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IGlubGluZUNh
cGFjaXR5KQogICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmxpbmVDYXBhY2l0eSwgIWlu
bGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihKU1dyYXBwZXJPYmplY3QpOwog
ICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbnRlcm5hbFZhbHVlLmdldCgpOwor
ICAgIEpTVmFsdWUgaW50ZXJuYWxWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW50ZXJuYWxW
YWx1ZShWTSYsIEpTVmFsdWUpOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpIAorICAgIHsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnNldElu
dGVybmFsVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW50ZXJuYWxWYWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dyYXBwZXJP
YmplY3QsIG1faW50ZXJuYWxWYWx1ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGludGVybmFs
VmFsdWVDZWxsT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAg
IEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgICAgIG1faW50ZXJuYWxWYWx1ZS5zZXQo
dm0sIHRoaXMsIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gaW50
ZXJuYWxWYWx1ZU9mZnNldCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGludGVybmFsVmFsdWVP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCk7CisjZW5kaWYKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBKU1dy
YXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0
ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbnRlcm5hbFZhbHVlOworfTsKKworaW5s
aW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdCh2bSwgc3RydWN0dXJlKQorewor
fQorCitpbmxpbmUgSlNWYWx1ZSBKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ludGVybmFsVmFsdWUuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lk
IEpTV3JhcHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzT2JqZWN0KCkpOwor
ICAgIG1faW50ZXJuYWxWYWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1dyYXBwZXJPYmplY3RfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyOTEg
KzMzLDI5MiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewotICAgIHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCB2
YWx1ZTsKLSAgICAgICAgY29uc3QgaW50MTZfdCBuZXh0OwotICAgIH07CiAKLSAgICAvLyBGSVhN
RTogVGhlcmUgaXMgbm8gcmVhc29uIHRoaXMgZ2V0IGZ1bmN0aW9uIGNhbid0IGJlIHNpbXBsZXIu
Ci0gICAgLy8gaWUuIHR5cGVkZWYgSlNWYWx1ZSAoKkdldEZ1bmN0aW9uKShFeGVjU3RhdGUqLCBK
U09iamVjdCogYmFzZU9iamVjdCkKLSAgICB0eXBlZGVmIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIEdldEZ1bmN0aW9uOwotICAgIHR5cGVkZWYgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmMgUHV0RnVuY3Rpb247Ci0gICAgdHlwZWRlZiBGdW5jdGlvbkV4ZWN1dGFibGUqICgqQnVpbHRp
bkdlbmVyYXRvcikoVk0mKTsKLQotICAgIC8vIEhhc2ggdGFibGUgZ2VuZXJhdGVkIGJ5IHRoZSBj
cmVhdGVfaGFzaF90YWJsZSBzY3JpcHQuCi0gICAgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHsKLSAg
ICAgICAgY29uc3QgY2hhciogbV9rZXk7IC8vIHByb3BlcnR5IG5hbWUKLSAgICAgICAgdW5zaWdu
ZWQgbV9hdHRyaWJ1dGVzOyAvLyBKU09iamVjdCBhdHRyaWJ1dGVzCi0gICAgICAgIEludHJpbnNp
YyBtX2ludHJpbnNpYzsKLSAgICAgICAgaW50cHRyX3QgbV92YWx1ZTE7Ci0gICAgICAgIGludHB0
cl90IG1fdmFsdWUyOwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXM7IH0KLQotICAgICAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29u
c3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYgRnVuY3Rpb24pOyByZXR1cm4gbV9pbnRyaW5zaWM7
IH0KLSAgICAgICAgQnVpbHRpbkdlbmVyYXRvciBidWlsdGluR2VuZXJhdG9yKCkgY29uc3QgeyBB
U1NFUlQobV9hdHRyaWJ1dGVzICYgQnVpbHRpbik7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1
aWx0aW5HZW5lcmF0b3I+KG1fdmFsdWUxKTsgfQotICAgICAgICBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAmIEZ1bmN0aW9uKTsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KG1fdmFsdWUxKTsgfQotICAgICAgICB1bnNp
Z25lZCBjaGFyIGZ1bmN0aW9uTGVuZ3RoKCkgY29uc3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYg
RnVuY3Rpb24pOyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV92YWx1ZTIpOyB9
CitzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCB7CisgICAgY29uc3QgaW50MTZfdCB2YWx1ZTsKKyAg
ICBjb25zdCBpbnQxNl90IG5leHQ7Cit9OworCisvLyBGSVhNRTogVGhlcmUgaXMgbm8gcmVhc29u
IHRoaXMgZ2V0IGZ1bmN0aW9uIGNhbid0IGJlIHNpbXBsZXIuCisvLyBpZS4gdHlwZWRlZiBKU1Zh
bHVlICgqR2V0RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0KQordHlw
ZWRlZiBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBHZXRGdW5jdGlvbjsKK3R5cGVkZWYgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgUHV0RnVuY3Rpb247Cit0eXBlZGVmIEZ1bmN0aW9u
RXhlY3V0YWJsZSogKCpCdWlsdGluR2VuZXJhdG9yKShWTSYpOworCisvLyBIYXNoIHRhYmxlIGdl
bmVyYXRlZCBieSB0aGUgY3JlYXRlX2hhc2hfdGFibGUgc2NyaXB0Lgorc3RydWN0IEhhc2hUYWJs
ZVZhbHVlIHsKKyAgICBjb25zdCBjaGFyKiBtX2tleTsgLy8gcHJvcGVydHkgbmFtZQorICAgIHVu
c2lnbmVkIG1fYXR0cmlidXRlczsgLy8gSlNPYmplY3QgYXR0cmlidXRlcworICAgIEludHJpbnNp
YyBtX2ludHJpbnNpYzsKKyAgICBpbnRwdHJfdCBtX3ZhbHVlMTsKKyAgICBpbnRwdHJfdCBtX3Zh
bHVlMjsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXM7IH0KKworICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IEFTU0VSVChtX2F0
dHJpYnV0ZXMgJiBGdW5jdGlvbik7IHJldHVybiBtX2ludHJpbnNpYzsgfQorICAgIEJ1aWx0aW5H
ZW5lcmF0b3IgYnVpbHRpbkdlbmVyYXRvcigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAm
IEJ1aWx0aW4pOyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdWlsdGluR2VuZXJhdG9yPihtX3Zh
bHVlMSk7IH0KKyAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbigpIGNvbnN0IHsgQVNTRVJUKG1f
YXR0cmlidXRlcyAmIEZ1bmN0aW9uKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KG1fdmFsdWUxKTsgfQorICAgIHVuc2lnbmVkIGNoYXIgZnVuY3Rpb25MZW5ndGgoKSBj
b25zdCB7IEFTU0VSVChtX2F0dHJpYnV0ZXMgJiBGdW5jdGlvbik7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihtX3ZhbHVlMik7IH0KKworICAgIEdldEZ1bmN0aW9uIHByb3BlcnR5
R2V0dGVyKCkgY29uc3QgeyBBU1NFUlQoIShtX2F0dHJpYnV0ZXMgJiBCdWlsdGluT3JGdW5jdGlv
bk9yQ29uc3RhbnQpKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R2V0RnVuY3Rpb24+KG1fdmFs
dWUxKTsgfQorICAgIFB1dEZ1bmN0aW9uIHByb3BlcnR5UHV0dGVyKCkgY29uc3QgeyBBU1NFUlQo
IShtX2F0dHJpYnV0ZXMgJiBCdWlsdGluT3JGdW5jdGlvbk9yQ29uc3RhbnQpKTsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UHV0RnVuY3Rpb24+KG1fdmFsdWUyKTsgfQorCisgICAgaW50cHRyX3Qg
Y29uc3RhbnRJbnRlZ2VyKCkgY29uc3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYgQ29uc3RhbnRJ
bnRlZ2VyKTsgcmV0dXJuIG1fdmFsdWUxOyB9CisKKyAgICBpbnRwdHJfdCBsZXhlclZhbHVlKCkg
Y29uc3QgeyBBU1NFUlQoIW1fYXR0cmlidXRlcyk7IHJldHVybiBtX3ZhbHVlMTsgfQorfTsKKwor
c3RydWN0IEhhc2hUYWJsZSB7CisgICAgbXV0YWJsZSBpbnQgbnVtYmVyT2ZWYWx1ZXM7CisgICAg
aW50IGluZGV4TWFzazsKKyAgICBib29sIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOwor
CisgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlczsgLy8gRml4ZWQgdmFsdWVzIGdlbmVy
YXRlZCBieSBzY3JpcHQuCisgICAgbXV0YWJsZSBjb25zdCBjaGFyKioga2V5czsgLy8gVGFibGUg
YWxsb2NhdGVkIGF0IHJ1bnRpbWUuCisgICAgY29uc3QgQ29tcGFjdEhhc2hJbmRleCogaW5kZXg7
CiAKLSAgICAgICAgR2V0RnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSBjb25zdCB7IEFTU0VSVCgh
KG1fYXR0cmlidXRlcyAmIEJ1aWx0aW5PckZ1bmN0aW9uT3JDb25zdGFudCkpOyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxHZXRGdW5jdGlvbj4obV92YWx1ZTEpOyB9Ci0gICAgICAgIFB1dEZ1bmN0
aW9uIHByb3BlcnR5UHV0dGVyKCkgY29uc3QgeyBBU1NFUlQoIShtX2F0dHJpYnV0ZXMgJiBCdWls
dGluT3JGdW5jdGlvbk9yQ29uc3RhbnQpKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHV0RnVu
Y3Rpb24+KG1fdmFsdWUyKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSGFzaFRhYmxlIGNvcHkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgY29weSBkeW5hbWljIHRhYmxlIHNpbmNlIGl0
J3MgdGhyZWFkIHNwZWNpZmljLgorICAgICAgICBIYXNoVGFibGUgcmVzdWx0ID0geyBudW1iZXJP
ZlZhbHVlcywgaW5kZXhNYXNrLCBoYXNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcywgdmFsdWVz
LCAwLCBpbmRleCB9OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBp
bnRwdHJfdCBjb25zdGFudEludGVnZXIoKSBjb25zdCB7IEFTU0VSVChtX2F0dHJpYnV0ZXMgJiBD
b25zdGFudEludGVnZXIpOyByZXR1cm4gbV92YWx1ZTE7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgaW5pdGlhbGl6ZUlmTmVlZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgha2V5cykK
KyAgICAgICAgICAgIGNyZWF0ZVRhYmxlKCk7CisgICAgfQogCi0gICAgICAgIGludHB0cl90IGxl
eGVyVmFsdWUoKSBjb25zdCB7IEFTU0VSVCghbV9hdHRyaWJ1dGVzKTsgcmV0dXJuIG1fdmFsdWUx
OyB9Ci0gICAgfTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZVRhYmxlKCkgY29u
c3Q7CiAKLSAgICBzdHJ1Y3QgSGFzaFRhYmxlIHsKLSAgICAgICAgbXV0YWJsZSBpbnQgbnVtYmVy
T2ZWYWx1ZXM7Ci0gICAgICAgIGludCBpbmRleE1hc2s7Ci0gICAgICAgIGJvb2wgaGFzU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXM7Ci0KLSAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZh
bHVlczsgLy8gRml4ZWQgdmFsdWVzIGdlbmVyYXRlZCBieSBzY3JpcHQuCi0gICAgICAgIG11dGFi
bGUgY29uc3QgY2hhcioqIGtleXM7IC8vIFRhYmxlIGFsbG9jYXRlZCBhdCBydW50aW1lLgotICAg
ICAgICBjb25zdCBDb21wYWN0SGFzaEluZGV4KiBpbmRleDsKKyAgICAvLyBGaW5kIGFuIGVudHJ5
IGluIHRoZSB0YWJsZSwgYW5kIHJldHVybiB0aGUgZW50cnkuCisgICAgQUxXQVlTX0lOTElORSBj
b25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCgpOworCisgICAgICAgIFN0cmlu
Z0ltcGwqIGltcGwgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgICAgIGlmICghaW1wbCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIEFTU0VSVChrZXlzKTsKKworICAgICAgICBp
bnQgaW5kZXhFbnRyeSA9IGltcGwtPmV4aXN0aW5nSGFzaCgpICYgaW5kZXhNYXNrOworICAgICAg
ICBpbnQgdmFsdWVJbmRleCA9IGluZGV4W2luZGV4RW50cnldLnZhbHVlOworICAgICAgICBpZiAo
dmFsdWVJbmRleCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoV1RGOjplcXVhbChpbXBsLCBrZXlzW3ZhbHVlSW5k
ZXhdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJnZhbHVlc1t2YWx1ZUluZGV4XTsKKworICAg
ICAgICAgICAgaW5kZXhFbnRyeSA9IGluZGV4W2luZGV4RW50cnldLm5leHQ7CisgICAgICAgICAg
ICBpZiAoaW5kZXhFbnRyeSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIHZhbHVlSW5kZXggPSBpbmRleFtpbmRleEVudHJ5XS52YWx1ZTsKKyAgICAg
ICAgICAgIEFTU0VSVCh2YWx1ZUluZGV4ICE9IC0xKTsKKyAgICAgICAgfTsKKyAgICB9CiAKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBIYXNoVGFibGUgY29weSgpIGNvbnN0CisgICAgY2xhc3MgQ29u
c3RJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBDb25zdEl0ZXJhdG9yKGNvbnN0IEhh
c2hUYWJsZSogdGFibGUsIGludCBwb3NpdGlvbikKKyAgICAgICAgICAgIDogbV90YWJsZSh0YWJs
ZSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAgICAgewotICAgICAg
ICAgICAgLy8gRG9uJ3QgY29weSBkeW5hbWljIHRhYmxlIHNpbmNlIGl0J3MgdGhyZWFkIHNwZWNp
ZmljLgotICAgICAgICAgICAgSGFzaFRhYmxlIHJlc3VsdCA9IHsgbnVtYmVyT2ZWYWx1ZXMsIGlu
ZGV4TWFzaywgaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMsIHZhbHVlcywgMCwgaW5kZXgg
fTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBza2lwSW52YWxpZEtl
eXMoKTsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
SWZOZWVkZWQoKSBjb25zdAorICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWUoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWtleXMpCi0gICAgICAgICAgICAgICAgY3JlYXRl
VGFibGUoKTsKKyAgICAgICAgICAgIHJldHVybiAmbV90YWJsZS0+dmFsdWVzW21fcG9zaXRpb25d
OwogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVUYWJs
ZSgpIGNvbnN0OwotCi0gICAgICAgIC8vIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRhYmxlLCBhbmQg
cmV0dXJuIHRoZSBlbnRyeS4KLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBIYXNoVGFibGVW
YWx1ZSogZW50cnkoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICAgICAgY29u
c3QgY2hhcioga2V5KCkKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVk
KCk7CisgICAgICAgICAgICByZXR1cm4gbV90YWJsZS0+a2V5c1ttX3Bvc2l0aW9uXTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gcHJvcGVydHlOYW1lLnVpZCgp
OwotICAgICAgICAgICAgaWYgKCFpbXBsKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAKLSAgICAgICAgICAgIEFTU0VSVChrZXlzKTsKLQotICAgICAgICAgICAgaW50IGluZGV4
RW50cnkgPSBpbXBsLT5leGlzdGluZ0hhc2goKSAmIGluZGV4TWFzazsKLSAgICAgICAgICAgIGlu
dCB2YWx1ZUluZGV4ID0gaW5kZXhbaW5kZXhFbnRyeV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAo
dmFsdWVJbmRleCA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoV1RGOjplcXVhbChpbXBsLCBr
ZXlzW3ZhbHVlSW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbdmFs
dWVJbmRleF07Ci0KLSAgICAgICAgICAgICAgICBpbmRleEVudHJ5ID0gaW5kZXhbaW5kZXhFbnRy
eV0ubmV4dDsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXhFbnRyeSA9PSAtMSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgdmFsdWVJbmRleCA9
IGluZGV4W2luZGV4RW50cnldLnZhbHVlOwotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUlu
ZGV4ICE9IC0xKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBjbGFzcyBD
b25zdEl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgQ29uc3RJdGVyYXRv
cihjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBpbnQgcG9zaXRpb24pCi0gICAgICAgICAgICAgICAg
OiBtX3RhYmxlKHRhYmxlKQotICAgICAgICAgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBza2lwSW52YWxpZEtleXMoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJm1fdGFibGUtPnZhbHVlc1ttX3Bv
c2l0aW9uXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgY2hhcioga2V5KCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV90YWJsZS0+a2V5c1ttX3Bv
c2l0aW9uXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFs
dWUqIG9wZXJhdG9yLT4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fdGFibGUgPT0gb3RoZXIubV90YWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fcG9zaXRpb24gIT0gb3RoZXIubV9wb3NpdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gPCBtX3RhYmxlLT5udW1iZXJP
ZlZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICAgICAgICAg
IHNraXBJbnZhbGlkS2V5cygpOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdm9pZCBza2lwSW52YWxp
ZEtleXMoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9u
IDw9IG1fdGFibGUtPm51bWJlck9mVmFsdWVzKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobV9w
b3NpdGlvbiA8IG1fdGFibGUtPm51bWJlck9mVmFsdWVzICYmICFtX3RhYmxlLT5rZXlzW21fcG9z
aXRpb25dKQotICAgICAgICAgICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1fcG9zaXRpb24gPD0gbV90YWJsZS0+bnVtYmVyT2ZWYWx1ZXMpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1fdGFi
bGU7Ci0gICAgICAgICAgICBpbnQgbV9wb3NpdGlvbjsKLSAgICAgICAgfTsKKyAgICAgICAgY29u
c3QgSGFzaFRhYmxlVmFsdWUqIG9wZXJhdG9yLT4oKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgfQogCi0gICAgICAgIENvbnN0SXRlcmF0b3IgYmVnaW4o
KSBjb25zdAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RJdGVyYXRvciYgb3Ro
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgICAg
ICAgICAgcmV0dXJuIENvbnN0SXRlcmF0b3IodGhpcywgMCk7CisgICAgICAgICAgICBBU1NFUlQo
bV90YWJsZSA9PSBvdGhlci5tX3RhYmxlKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Bvc2l0aW9u
ICE9IG90aGVyLm1fcG9zaXRpb247CiAgICAgICAgIH0KLSAgICAgICAgQ29uc3RJdGVyYXRvciBl
bmQoKSBjb25zdAorCisgICAgICAgIENvbnN0SXRlcmF0b3ImIG9wZXJhdG9yKysoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpbml0aWFsaXplSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIHJldHVy
biBDb25zdEl0ZXJhdG9yKHRoaXMsIG51bWJlck9mVmFsdWVzKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX3Bvc2l0aW9uIDwgbV90YWJsZS0+bnVtYmVyT2ZWYWx1ZXMpOworICAgICAgICAgICAgKytt
X3Bvc2l0aW9uOworICAgICAgICAgICAgc2tpcEludmFsaWRLZXlzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIENvbnZl
cnQgdGhlIGhhc2ggdGFibGUga2V5cyB0byBpZGVudGlmaWVycy4KLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjcmVhdGVUYWJsZSgpIGNvbnN0OwotICAgIH07CisgICAgICAgIHZvaWQg
c2tpcEludmFsaWRLZXlzKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcG9zaXRp
b24gPD0gbV90YWJsZS0+bnVtYmVyT2ZWYWx1ZXMpOworICAgICAgICAgICAgd2hpbGUgKG1fcG9z
aXRpb24gPCBtX3RhYmxlLT5udW1iZXJPZlZhbHVlcyAmJiAhbV90YWJsZS0+a2V5c1ttX3Bvc2l0
aW9uXSkKKyAgICAgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgICAgICBBU1NFUlQo
bV9wb3NpdGlvbiA8PSBtX3RhYmxlLT5udW1iZXJPZlZhbHVlcyk7CisgICAgICAgIH0KIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSGFzaFRhYmxlVmFsdWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBtX3RhYmxlOwor
ICAgICAgICBpbnQgbV9wb3NpdGlvbjsKKyAgICB9OwogCi0gICAgLyoqCi0gICAgICogVGhpcyBt
ZXRob2QgZG9lcyBpdCBhbGwgKGxvb2tpbmcgaW4gdGhlIGhhc2h0YWJsZSwgY2hlY2tpbmcgZm9y
IGZ1bmN0aW9uCi0gICAgICogb3ZlcnJpZGVzLCBjcmVhdGluZyB0aGUgZnVuY3Rpb24gb3IgcmV0
cmlldmluZyBmcm9tIGNhY2hlLCBjYWxsaW5nCi0gICAgICogZ2V0VmFsdWVQcm9wZXJ0eSBpbiBj
YXNlIG9mIGEgbm9uLWZ1bmN0aW9uIHByb3BlcnR5LCBmb3J3YXJkaW5nIHRvIHBhcmVudCBpZgot
ICAgICAqIHVua25vd24gcHJvcGVydHkpLgotICAgICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBU
aGlzSW1wLCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlJiB0YWJsZSwgVGhpc0ltcCog
dGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
ICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgY29uc3QgSGFz
aFRhYmxlVmFsdWUqIGVudHJ5ID0gdGFibGUuZW50cnkocHJvcGVydHlOYW1lKTsKLQotICAgICAg
ICBpZiAoIWVudHJ5KSAvLyBub3QgZm91bmQsIGZvcndhcmQgdG8gcGFyZW50Ci0gICAgICAgICAg
ICByZXR1cm4gUGFyZW50SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iaiwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKLQotICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEJ1
aWx0aW5PckZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHNldFVwU3RhdGljRnVuY3Rpb25T
bG90KGV4ZWMsIGVudHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotCi0gICAgICAg
IGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgQ29uc3RhbnRJbnRlZ2VyKSB7Ci0gICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmosIGVudHJ5LT5hdHRyaWJ1dGVzKCksIGpzTnVtYmVyKGVu
dHJ5LT5jb25zdGFudEludGVnZXIoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iaiwgZW50
cnktPmF0dHJpYnV0ZXMoKSwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiBD
b25zdEl0ZXJhdG9yKHRoaXMsIDApOwogICAgIH0KLQotICAgIC8qKgotICAgICAqIFNpbXBsaWZp
ZWQgdmVyc2lvbiBvZiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3QgaW4gY2FzZSB0aGVyZSBhcmUgb25s
eSBmdW5jdGlvbnMuCi0gICAgICogVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIGdldFN0YXRpY1Byb3Bl
cnR5U2xvdCBhbGxvd3MgJ3RoaXMnIHRvIGF2b2lkIGltcGxlbWVudGluZwotICAgICAqIGEgZHVt
bXkgZ2V0VmFsdWVQcm9wZXJ0eS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50
SW1wPgotICAgIGlubGluZSBib29sIGdldFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIEpTT2JqZWN0KiB0aGlzT2JqLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisgICAgQ29uc3RJdGVyYXRvciBl
bmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKFBhcmVudEltcDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSB0YWJsZS5l
bnRyeShwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVj
LCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgaW5pdGlhbGl6
ZUlmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiBDb25zdEl0ZXJhdG9yKHRoaXMsIG51bWJlck9m
VmFsdWVzKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2Yg
Z2V0U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25s
eSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVy
dHlTbG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAgICAgKi8KLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAgIGlubGluZSBi
b29sIGdldFN0YXRpY1ZhbHVlU2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hUYWJsZSYg
dGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRy
eSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgaWYgKCFlbnRyeSkgLy8g
bm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAgICAgICAgcmV0dXJuIFBhcmVudElt
cDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Citwcml2YXRlOgorICAgIC8vIENvbnZlcnQgdGhlIGhhc2ggdGFibGUga2V5cyB0byBpZGVudGlm
aWVycy4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVRhYmxlKCkgY29uc3Q7Cit9
OworCitKU19FWFBPUlRfUFJJVkFURSBib29sIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNT
dGF0ZSosIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisKKy8qKgorICogVGhpcyBtZXRob2QgZG9lcyBpdCBh
bGwgKGxvb2tpbmcgaW4gdGhlIGhhc2h0YWJsZSwgY2hlY2tpbmcgZm9yIGZ1bmN0aW9uCisgKiBv
dmVycmlkZXMsIGNyZWF0aW5nIHRoZSBmdW5jdGlvbiBvciByZXRyaWV2aW5nIGZyb20gY2FjaGUs
IGNhbGxpbmcKKyAqIGdldFZhbHVlUHJvcGVydHkgaW4gY2FzZSBvZiBhIG5vbi1mdW5jdGlvbiBw
cm9wZXJ0eSwgZm9yd2FyZGluZyB0byBwYXJlbnQgaWYKKyAqIHVua25vd24gcHJvcGVydHkpLgor
ICovCit0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgoraW5saW5lIGJv
b2wgZ2V0U3RhdGljUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxl
JiB0YWJsZSwgVGhpc0ltcCogdGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRh
YmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7CiAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0aW9uKSk7CisgICAgaWYgKCFlbnRyeSkgLy8gbm90IGZv
dW5kLCBmb3J3YXJkIHRvIHBhcmVudAorICAgICAgICByZXR1cm4gUGFyZW50SW1wOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIAotICAgICAg
ICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIENvbnN0YW50SW50ZWdlcikgewotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqLCBlbnRyeS0+YXR0cmlidXRlcygpLCBqc051bWJlcihl
bnRyeS0+Y29uc3RhbnRJbnRlZ2VyKCkpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9CisgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluT3JGdW5jdGlvbikK
KyAgICAgICAgcmV0dXJuIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGV4ZWMsIGVudHJ5LCB0aGlz
T2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogCi0gICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3Vz
dG9tKHRoaXNPYmosIGVudHJ5LT5hdHRyaWJ1dGVzKCksIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigp
KTsKKyAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIENvbnN0YW50SW50ZWdlcikgeworICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmosIGVudHJ5LT5hdHRyaWJ1dGVzKCksIGpzTnVtYmVy
KGVudHJ5LT5jb25zdGFudEludGVnZXIoKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpbmxpbmUgdm9pZCBwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hU
YWJsZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAg
IC8vIElmIHRoaXMgaXMgYSBmdW5jdGlvbiBwdXQgaXQgYXMgYW4gb3ZlcnJpZGUgcHJvcGVydHku
Ci0gICAgICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgQnVpbHRpbk9yRnVuY3Rpb24pIHsK
LSAgICAgICAgICAgIGlmIChKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPihzbG90LnRoaXNWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUmVhZE9ubHkpKSB7Ci0gICAgICAgICAgICBl
bnRyeS0+cHJvcGVydHlQdXR0ZXIoKShleGVjLCBiYXNlLCBKU1ZhbHVlOjplbmNvZGUoc2xvdC50
aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOwotICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b21Qcm9wZXJ0eShiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgfQor
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmosIGVudHJ5LT5hdHRyaWJ1dGVzKCks
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisg
KiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhl
cmUgYXJlIG9ubHkgZnVuY3Rpb25zLgorICogVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIGdldFN0YXRp
Y1Byb3BlcnR5U2xvdCBhbGxvd3MgJ3RoaXMnIHRvIGF2b2lkIGltcGxlbWVudGluZworICogYSBk
dW1teSBnZXRWYWx1ZVByb3BlcnR5LgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50SW1wPgor
aW5saW5lIGJvb2wgZ2V0U3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SGFzaFRhYmxlJiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoUGFyZW50SW1wOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICAvKioKLSAgICAgKiBUaGlzIG9uZSBpcyBmb3IgInB1dCIuCi0g
ICAgICogSXQgbG9va3MgdXAgYSBoYXNoIGVudHJ5IGZvciB0aGUgcHJvcGVydHkgdG8gYmUgc2V0
LiAgSWYgYW4gZW50cnkKLSAgICAgKiBpcyBmb3VuZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0
dXJucyB0cnVlLCBlbHNlIGl0IHJldHVybnMgZmFsc2UuCi0gICAgICovCi0gICAgaW5saW5lIGJv
b2wgbG9va3VwUHV0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVl
KiBlbnRyeSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7CisgICAgY29uc3QgSGFzaFRhYmxl
VmFsdWUqIGVudHJ5ID0gdGFibGUuZW50cnkocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIWVudHJ5
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2V0VXBTdGF0aWNGdW5jdGlv
blNsb3QoZXhlYywgZW50cnksIHRoaXNPYmosIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKKy8q
KgorICogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGdldFN0YXRpY1Byb3BlcnR5U2xvdCBpbiBjYXNl
IHRoZXJlIGFyZSBubyBmdW5jdGlvbnMsIG9ubHkgInZhbHVlcyIuCisgKiBVc2luZyB0aGlzIGlu
c3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVu
Y0ltcCBjbGFzcy4KKyAqLwordGVtcGxhdGUgPGNsYXNzIFRoaXNJbXAsIGNsYXNzIFBhcmVudElt
cD4KK2lubGluZSBib29sIGdldFN0YXRpY1ZhbHVlU2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEhhc2hUYWJsZSYgdGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSog
ZW50cnkgPSB0YWJsZS5lbnRyeShwcm9wZXJ0eU5hbWUpOwogCi0gICAgICAgIGlmICghZW50cnkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFlbnRyeSkgLy8gbm90IGZvdW5k
LCBmb3J3YXJkIHRvIHBhcmVudAorICAgICAgICByZXR1cm4gUGFyZW50SW1wOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIAotICAgICAgICBw
dXRFbnRyeShleGVjLCBlbnRyeSwgYmFzZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0aW9uKSk7CisK
KyAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIENvbnN0YW50SW50ZWdlcikgeworICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmosIGVudHJ5LT5hdHRyaWJ1dGVzKCksIGpzTnVtYmVyKGVu
dHJ5LT5jb25zdGFudEludGVnZXIoKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZlZhbHVlcz4KLSAgICBpbmxpbmUgdm9pZCBy
ZWlmeVN0YXRpY1Byb3BlcnRpZXMoVk0mIHZtLCBjb25zdCBIYXNoVGFibGVWYWx1ZSAoJnZhbHVl
cylbbnVtYmVyT2ZWYWx1ZXNdLCBKU09iamVjdCYgdGhpc09iaikKLSAgICB7Ci0gICAgICAgIEJh
dGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIHRyYW5zaXRpb25PcHRpbWl6ZXIodm0sICZ0aGlzT2Jq
KTsKLSAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewotICAgICAgICAgICAgaWYg
KCF2YWx1ZS5tX2tleSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAg
Ci0gICAgICAgIAotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoJnZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odmFsdWUubV9rZXkpLCBzdHJsZW4odmFsdWUubV9r
ZXkpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpc09iai5wdXREaXJlY3RCdWlsdGluRnVuY3Rpb24odm0sIHRoaXNP
YmouZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgdmFsdWUuYnVpbHRpbkdlbmVyYXRvcigp
KHZtKSwgdmFsdWUuYXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIEZ1bmN0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iai5wdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2
bSwgdGhpc09iai5nbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZS5mdW5jdGlvbkxl
bmd0aCgpLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mdW5jdGlvbigpLCB2YWx1ZS5pbnRy
aW5zaWMoKSwgdmFsdWUuYXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIENv
bnN0YW50SW50ZWdlcikgewotICAgICAgICAgICAgICAgIHRoaXNPYmoucHV0RGlyZWN0KHZtLCBw
cm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHZhbHVlLmNvbnN0YW50SW50ZWdlcigpKSwgdmFsdWUuYXR0
cmlidXRlcygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29yKSB7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqLCBlbnRyeS0+YXR0cmlidXRlcygpLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIHB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIC8vIElmIHRoaXMgaXMgYSBmdW5jdGlvbiBwdXQgaXQgYXMgYW4gb3ZlcnJpZGUgcHJvcGVy
dHkuCisgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluT3JGdW5jdGlvbikgewor
ICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4oc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgfSBlbHNlIGlmICghKGVudHJ5
LT5hdHRyaWJ1dGVzKCkgJiBSZWFkT25seSkpIHsKKyAgICAgICAgZW50cnktPnByb3BlcnR5UHV0
dGVyKCkoZXhlYywgYmFzZSwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1Zh
bHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21Qcm9wZXJ0eShiYXNl
LCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7CisgICAgfSBlbHNlIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworfQorCisvKioKKyAqIFRoaXMgb25lIGlzIGZvciAicHV0Ii4K
KyAqIEl0IGxvb2tzIHVwIGEgaGFzaCBlbnRyeSBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHNldC4g
IElmIGFuIGVudHJ5CisgKiBpcyBmb3VuZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0
cnVlLCBlbHNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK2lubGluZSBib29sIGxvb2t1cFB1dChF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBiYXNl
LCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBIYXNoVGFibGUmIHRhYmxlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5ID0gdGFibGUuZW50cnko
cHJvcGVydHlOYW1lKTsKKworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHB1dEVudHJ5KGV4ZWMsIGVudHJ5LCBiYXNlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXM+CitpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnRpZXMoVk0mIHZtLCBjb25zdCBI
YXNoVGFibGVWYWx1ZSAoJnZhbHVlcylbbnVtYmVyT2ZWYWx1ZXNdLCBKU09iamVjdCYgdGhpc09i
aikKK3sKKyAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciB0cmFuc2l0aW9uT3B0aW1pemVy
KHZtLCAmdGhpc09iaik7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAgICAg
ICBpZiAoIXZhbHVlLm1fa2V5KQorICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAg
IAorCisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKCZ2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KHZhbHVlLm1fa2V5KSwgc3RybGVuKHZhbHVlLm1fa2V5KSk7CisgICAg
ICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluKSB7CisgICAgICAgICAgICB0aGlz
T2JqLnB1dERpcmVjdEJ1aWx0aW5GdW5jdGlvbih2bSwgdGhpc09iai5nbG9iYWxPYmplY3QoKSwg
cHJvcGVydHlOYW1lLCB2YWx1ZS5idWlsdGluR2VuZXJhdG9yKCkodm0pLCB2YWx1ZS5hdHRyaWJ1
dGVzKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
Q3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBDdXN0b21HZXR0ZXJTZXR0
ZXI6OmNyZWF0ZSh2bSwgdmFsdWUucHJvcGVydHlHZXR0ZXIoKSwgdmFsdWUucHJvcGVydHlQdXR0
ZXIoKSk7Ci0gICAgICAgICAgICB0aGlzT2JqLnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBw
cm9wZXJ0eU5hbWUsIGN1c3RvbUdldHRlclNldHRlciwgdmFsdWUuYXR0cmlidXRlcygpKTsKKyAg
ICAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSB7CisgICAgICAgICAgICB0
aGlzT2JqLnB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzT2JqLmdsb2JhbE9iamVjdCgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLmZ1bmN0aW9uTGVuZ3RoKCksCisgICAgICAgICAgICAgICAg
dmFsdWUuZnVuY3Rpb24oKSwgdmFsdWUuaW50cmluc2ljKCksIHZhbHVlLmF0dHJpYnV0ZXMoKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5h
dHRyaWJ1dGVzKCkgJiBDb25zdGFudEludGVnZXIpIHsKKyAgICAgICAgICAgIHRoaXNPYmoucHV0
RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHZhbHVlLmNvbnN0YW50SW50ZWdlcigp
KSwgdmFsdWUuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29yKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdldHRlclNl
dHRlciA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCB2YWx1ZS5wcm9wZXJ0eUdldHRl
cigpLCB2YWx1ZS5wcm9wZXJ0eVB1dHRlcigpKTsKKyAgICAgICAgdGhpc09iai5wdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgcHJvcGVydHlOYW1lLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIHZhbHVl
LmF0dHJpYnV0ZXMoKSk7CiAgICAgfQorfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gMTcz
MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwzMSArMjUsMzEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBNYXRoT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIE1hdGhPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKLQotICAgIHB1YmxpYzoKLSAg
ICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIE1h
dGhPYmplY3QqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBNYXRoT2JqZWN0KiBv
YmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNYXRoT2JqZWN0Pih2bS5oZWFwKSkg
TWF0aE9iamVjdCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLSAgICB9OworY2xh
c3MgTWF0aE9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3ByaXZhdGU6CisgICAg
TWF0aE9iamVjdChWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgTWF0aE9iamVjdCogY3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBNYXRoT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxNYXRoT2JqZWN0Pih2bS5oZWFwKSkgTWF0aE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw0MSArMjYsNDEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFcnJvckluc3Rh
bmNlOwotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwotICAgIGNsYXNzIE5hdGl2ZUVycm9y
UHJvdG90eXBlOwotCi0gICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSW50ZXJuYWxG
dW5jdGlvbiBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogY29uc3Ry
dWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9y
Pih2bS5oZWFwKSkgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGVTdHJ1Y3R1cmUsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERUNMQVJFX0lORk87Ci0KLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2Vycm9yU3RydWN0
dXJlLmdldCgpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwotICAgICAgICBzdGF0aWMgQ29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKK2NsYXNzIEVy
cm9ySW5zdGFuY2U7CitjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKK2NsYXNzIE5hdGl2ZUVycm9y
UHJvdG90eXBlOworCitjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNl
OworCisgICAgc3RhdGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAg
ICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgbmFtZSk7CisgICAg
ICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBTdHJ1
Y3R1cmUqIGVycm9yU3RydWN0dXJlKCkgeyByZXR1cm4gbV9lcnJvclN0cnVjdHVyZS5nZXQoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisKK3ByaXZhdGU6CisgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSop
OworICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBD
YWxsRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Vycm9yU3RydWN0
dXJlOwotICAgIH07CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9lcnJvclN0cnVjdHVy
ZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDE3
MzI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDI1ICsyNCwyNiBAQAogI2luY2x1ZGUgIkVycm9y
UHJvdG90eXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3I7CiAKLSAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBFcnJv
clByb3RvdHlwZSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUo
Vk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgRXJy
b3JQcm90b3R5cGUgQmFzZTsKLQotICAgICAgICBzdGF0aWMgTmF0aXZlRXJyb3JQcm90b3R5cGUq
IGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBOYXRpdmVFcnJvclByb3RvdHlwZSog
cHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5
cGU+KHZtLmhlYXApKSBOYXRpdmVFcnJvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgbmFtZSwg
Y29uc3RydWN0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKLSAgICAgICAgfQot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWVBbmRNZXNzYWdlLCBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yKik7Ci0gICAgfTsKK2NsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I7CisKK2NsYXNz
IE5hdGl2ZUVycm9yUHJvdG90eXBlIDogcHVibGljIEVycm9yUHJvdG90eXBlIHsKK3ByaXZhdGU6
CisgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgRXJyb3JQcm90b3R5cGUgQmFzZTsKKworICAgIHN0YXRpYyBOYXRpdmVFcnJv
clByb3RvdHlwZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IpCisgICAgeworICAgICAgICBOYXRpdmVFcnJvclByb3RvdHlw
ZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90
b3R5cGU+KHZtLmhlYXApKSBOYXRpdmVFcnJvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBj
b25zdHJ1Y3Rvcik7CisgICAgICAgIHJldHVybiBwcm90b3R5cGU7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lQW5kTWVzc2FnZSwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNDAgKzI1LDQwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgTnVt
YmVyUHJvdG90eXBlOworY2xhc3MgTnVtYmVyUHJvdG90eXBlOwogCi0gICAgY2xhc3MgTnVtYmVy
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKLQotICAgICAgICBzdGF0aWMgTnVt
YmVyQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOdW1i
ZXJQcm90b3R5cGUqIG51bWJlclByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgTnVt
YmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
TnVtYmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBOdW1iZXJDb25zdHJ1Y3Rvcih2bSwgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgbnVtYmVy
UHJvdG90eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotCi0gICAgICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAKLSAg
ICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOyAKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0geyBOYU5WYWx1ZSwgTmVnSW5maW5pdHks
IFBvc0luZmluaXR5LCBNYXhWYWx1ZSwgTWluVmFsdWUgfTsKLQotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE51bWJlclByb3RvdHlwZSopOwotICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBJbnRlcm5hbEZ1bmN0aW9uOjpT
dHJ1Y3R1cmVGbGFnczsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE51bWJlckNvbnN0cnVjdG9y
KFZNJiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwotICAgICAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKLSAgICB9OworY2xhc3MgTnVtYmVy
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgTnVtYmVyQ29uc3RydWN0
b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOdW1iZXJQcm90b3R5cGUq
IG51bWJlclByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE51bWJlckNvbnN0cnVjdG9yKiBjb25z
dHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE51bWJlckNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgTnVtYmVyQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGNvbnN0
cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgbnVtYmVyUHJvdG90eXBlKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgSlNWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29u
c3Q7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKSAKKyAgICB7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsgCisgICAgfQorCisgICAgZW51bSB7IE5hTlZhbHVlLCBOZWdJbmZpbml0eSwgUG9zSW5m
aW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIE51bWJlclByb3RvdHlwZSopOworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOworCitw
cml2YXRlOgorICAgIE51bWJlckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwzMCArMjUsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBOdW1iZXJPYmpl
Y3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIE51
bWJlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJh
c2U7Ci0KLSAgICAgICAgc3RhdGljIE51bWJlck9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE51bWJlck9iamVjdCogbnVt
YmVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0Pih2bS5oZWFwKSkg
TnVtYmVyT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbnVtYmVyLT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0gICAgfTsKK2NsYXNz
IE51bWJlck9iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgeworcHJvdGVjdGVkOgorICAg
IE51bWJlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJhc2U7CisKKyAg
ICBzdGF0aWMgTnVtYmVyT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIE51bWJlck9iamVjdCogbnVtYmVyID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0Pih2bS5oZWFwKSkgTnVtYmVyT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpOworICAgICAgICBudW1iZXItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOdW1i
ZXJPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CitKU19FWFBPUlRfUFJJVkFURSBOdW1iZXJP
YmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSwzMiArMjUsMzIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBO
dW1iZXJQcm90b3R5cGUgOiBwdWJsaWMgTnVtYmVyT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHR5cGVkZWYgTnVtYmVyT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIE51bWJlclBy
b3RvdHlwZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE51bWJlclByb3RvdHlw
ZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TnVtYmVyUHJvdG90eXBl
Pih2bS5oZWFwKSkgTnVtYmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
cHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAg
IHJldHVybiBwcm90b3R5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERFQ0xBUkVf
SU5GTzsKLQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBO
dW1iZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTnVt
YmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgfTsKK2NsYXNzIE51bWJlclByb3RvdHlwZSA6IHB1YmxpYyBOdW1iZXJP
YmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgTnVtYmVyT2JqZWN0IEJhc2U7CisKKyAgICBz
dGF0aWMgTnVtYmVyUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIE51bWJlclBy
b3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TnVtYmVyUHJv
dG90eXBlPih2bS5oZWFwKSkgTnVtYmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBy
ZXR1cm4gcHJvdG90eXBlOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVy
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE51bWJlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAg
TnVtYmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1lcmljU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWVyaWNTdHJpbmdzLmgJKHJldmlzaW9uIDE3MzI0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWVyaWNTdHJpbmdzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDY3ICszMiw2NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNs
YXNzIE51bWVyaWNTdHJpbmdzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
U3RyaW5nIGFkZChkb3VibGUgZCkKLSAgICAgICAgewotICAgICAgICAgICAgQ2FjaGVFbnRyeTxk
b3VibGU+JiBlbnRyeSA9IGxvb2t1cChkKTsKLSAgICAgICAgICAgIGlmIChkID09IGVudHJ5Lmtl
eSAmJiAhZW50cnkudmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlOwotICAgICAgICAgICAgZW50cnkua2V5ID0gZDsKLSAgICAgICAgICAgIGVudHJ5LnZh
bHVlID0gU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoZCk7CitjbGFzcyBOdW1lcmlj
U3RyaW5ncyB7CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSBTdHJpbmcgYWRkKGRvdWJsZSBk
KQorICAgIHsKKyAgICAgICAgQ2FjaGVFbnRyeTxkb3VibGU+JiBlbnRyeSA9IGxvb2t1cChkKTsK
KyAgICAgICAgaWYgKGQgPT0gZW50cnkua2V5ICYmICFlbnRyeS52YWx1ZS5pc051bGwoKSkKICAg
ICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFMV0FZ
U19JTkxJTkUgU3RyaW5nIGFkZChpbnQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpKSA8IGNhY2hlU2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbG9va3VwU21hbGxTdHJpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpKTsKLSAgICAgICAg
ICAgIENhY2hlRW50cnk8aW50PiYgZW50cnkgPSBsb29rdXAoaSk7Ci0gICAgICAgICAgICBpZiAo
aSA9PSBlbnRyeS5rZXkgJiYgIWVudHJ5LnZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBlbnRyeS52YWx1ZTsKLSAgICAgICAgICAgIGVudHJ5LmtleSA9IGk7Ci0gICAgICAg
ICAgICBlbnRyeS52YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGkpOworICAgICAgICBlbnRyeS5rZXkg
PSBkOworICAgICAgICBlbnRyeS52YWx1ZSA9IFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2Ny
aXB0KGQpOworICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBTdHJpbmcgYWRkKGludCBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpKSA8IGNhY2hlU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBsb29rdXBTbWFs
bFN0cmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkpOworICAgICAgICBDYWNoZUVudHJ5PGlu
dD4mIGVudHJ5ID0gbG9va3VwKGkpOworICAgICAgICBpZiAoaSA9PSBlbnRyeS5rZXkgJiYgIWVu
dHJ5LnZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQUxXQVlTX0lOTElORSBTdHJpbmcgYWRkKHVuc2lnbmVkIGkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpIDwgY2FjaGVTaXplKQotICAgICAgICAgICAgICAg
IHJldHVybiBsb29rdXBTbWFsbFN0cmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkpOwotICAg
ICAgICAgICAgQ2FjaGVFbnRyeTx1bnNpZ25lZD4mIGVudHJ5ID0gbG9va3VwKGkpOwotICAgICAg
ICAgICAgaWYgKGkgPT0gZW50cnkua2V5ICYmICFlbnRyeS52YWx1ZS5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7Ci0gICAgICAgICAgICBlbnRyeS5rZXkgPSBp
OwotICAgICAgICAgICAgZW50cnkudmFsdWUgPSBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAgICAg
ZW50cnkua2V5ID0gaTsKKyAgICAgICAgZW50cnkudmFsdWUgPSBTdHJpbmc6Om51bWJlcihpKTsK
KyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
U3RyaW5nIGFkZCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgaWYgKGkgPCBjYWNoZVNpemUp
CisgICAgICAgICAgICByZXR1cm4gbG9va3VwU21hbGxTdHJpbmcoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGkpKTsKKyAgICAgICAgQ2FjaGVFbnRyeTx1bnNpZ25lZD4mIGVudHJ5ID0gbG9va3VwKGkp
OworICAgICAgICBpZiAoaSA9PSBlbnRyeS5rZXkgJiYgIWVudHJ5LnZhbHVlLmlzTnVsbCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwotICAgICAgICB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjYWNoZVNpemUgPSA2NDsKLQotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdHJ1Y3QgQ2FjaGVFbnRyeSB7Ci0gICAgICAg
ICAgICBUIGtleTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgfTsKLQotICAg
ICAgICBDYWNoZUVudHJ5PGRvdWJsZT4mIGxvb2t1cChkb3VibGUgZCkgeyByZXR1cm4gZG91Ymxl
Q2FjaGVbV1RGOjpGbG9hdEhhc2g8ZG91YmxlPjo6aGFzaChkKSAmIChjYWNoZVNpemUgLSAxKV07
IH0KLSAgICAgICAgQ2FjaGVFbnRyeTxpbnQ+JiBsb29rdXAoaW50IGkpIHsgcmV0dXJuIGludENh
Y2hlW1dURjo6SW50SGFzaDxpbnQ+OjpoYXNoKGkpICYgKGNhY2hlU2l6ZSAtIDEpXTsgfQotICAg
ICAgICBDYWNoZUVudHJ5PHVuc2lnbmVkPiYgbG9va3VwKHVuc2lnbmVkIGkpIHsgcmV0dXJuIHVu
c2lnbmVkQ2FjaGVbV1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChpKSAmIChjYWNoZVNpemUg
LSAxKV07IH0KLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBTdHJpbmcmIGxvb2t1cFNtYWxs
U3RyaW5nKHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgY2Fj
aGVTaXplKTsKLSAgICAgICAgICAgIGlmIChzbWFsbEludENhY2hlW2ldLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHNtYWxsSW50Q2FjaGVbaV0gPSBTdHJpbmc6Om51bWJlcihpKTsKLSAgICAg
ICAgICAgIHJldHVybiBzbWFsbEludENhY2hlW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rk
OjphcnJheTxDYWNoZUVudHJ5PGRvdWJsZT4sIGNhY2hlU2l6ZT4gZG91YmxlQ2FjaGU7Ci0gICAg
ICAgIHN0ZDo6YXJyYXk8Q2FjaGVFbnRyeTxpbnQ+LCBjYWNoZVNpemU+IGludENhY2hlOwotICAg
ICAgICBzdGQ6OmFycmF5PENhY2hlRW50cnk8dW5zaWduZWQ+LCBjYWNoZVNpemU+IHVuc2lnbmVk
Q2FjaGU7Ci0gICAgICAgIHN0ZDo6YXJyYXk8U3RyaW5nLCBjYWNoZVNpemU+IHNtYWxsSW50Q2Fj
aGU7CisgICAgICAgIGVudHJ5LmtleSA9IGk7CisgICAgICAgIGVudHJ5LnZhbHVlID0gU3RyaW5n
OjpudW1iZXIoaSk7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKKyAgICB9Citwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2FjaGVTaXplID0gNjQ7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBDYWNoZUVudHJ5IHsKKyAgICAgICAgVCBrZXk7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZTsKICAgICB9OwogCisgICAgQ2FjaGVFbnRyeTxkb3VibGU+JiBs
b29rdXAoZG91YmxlIGQpIHsgcmV0dXJuIGRvdWJsZUNhY2hlW1dURjo6RmxvYXRIYXNoPGRvdWJs
ZT46Omhhc2goZCkgJiAoY2FjaGVTaXplIC0gMSldOyB9CisgICAgQ2FjaGVFbnRyeTxpbnQ+JiBs
b29rdXAoaW50IGkpIHsgcmV0dXJuIGludENhY2hlW1dURjo6SW50SGFzaDxpbnQ+OjpoYXNoKGkp
ICYgKGNhY2hlU2l6ZSAtIDEpXTsgfQorICAgIENhY2hlRW50cnk8dW5zaWduZWQ+JiBsb29rdXAo
dW5zaWduZWQgaSkgeyByZXR1cm4gdW5zaWduZWRDYWNoZVtXVEY6OkludEhhc2g8dW5zaWduZWQ+
OjpoYXNoKGkpICYgKGNhY2hlU2l6ZSAtIDEpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
U3RyaW5nJiBsb29rdXBTbWFsbFN0cmluZyh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBjYWNoZVNpemUpOworICAgICAgICBpZiAoc21hbGxJbnRDYWNoZVtpXS5pc051bGwo
KSkKKyAgICAgICAgICAgIHNtYWxsSW50Q2FjaGVbaV0gPSBTdHJpbmc6Om51bWJlcihpKTsKKyAg
ICAgICAgcmV0dXJuIHNtYWxsSW50Q2FjaGVbaV07CisgICAgfQorCisgICAgc3RkOjphcnJheTxD
YWNoZUVudHJ5PGRvdWJsZT4sIGNhY2hlU2l6ZT4gZG91YmxlQ2FjaGU7CisgICAgc3RkOjphcnJh
eTxDYWNoZUVudHJ5PGludD4sIGNhY2hlU2l6ZT4gaW50Q2FjaGU7CisgICAgc3RkOjphcnJheTxD
YWNoZUVudHJ5PHVuc2lnbmVkPiwgY2FjaGVTaXplPiB1bnNpZ25lZENhY2hlOworICAgIHN0ZDo6
YXJyYXk8U3RyaW5nLCBjYWNoZVNpemU+IHNtYWxsSW50Q2FjaGU7Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIE51bWVyaWNTdHJpbmdzX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
MTczMjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNjIgKzI3LDYyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi0gICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOworY2xhc3MgT2JqZWN0UHJvdG90eXBlOwog
Ci0gICAgY2xhc3MgT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKLQot
ICAgICAgICBzdGF0aWMgT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgT2JqZWN0Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8T2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBPYmplY3RDb25z
dHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hD
cmVhdGlvbih2bSwgb2JqZWN0UHJvdG90eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1
Y3RvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0K
LSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE9iamVjdFByb3RvdHlwZSopOwotICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIE9iamVjdENvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7Ci0gICAg
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwotICAgICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKLSAgICB9OworY2xhc3MgT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJh
c2U7CiAKLSAgICBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIE9iamVjdENvbnN0cnVj
dG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBl
KiBvYmplY3RQcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgIE9iamVjdENvbnN0cnVjdG9yKiBjb25z
dHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iamVjdENvbnN0cnVjdG9yPih2
bS5oZWFwKSkgT2JqZWN0Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGNvbnN0
cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgb2JqZWN0UHJvdG90eXBlKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdG9yOwogICAgIH0KIAotICAgIGlubGluZSBKU09iamVjdCogY29uc3RydWN0
RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIFByb3RvdHlwZU1h
cCYgcHJvdG90eXBlTWFwID0gZ2xvYmFsT2JqZWN0LT52bSgpLnByb3RvdHlwZU1hcDsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1
cmVGb3JQcm90b3R5cGUoCi0gICAgICAgICAgICBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsK
LSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7Ci0g
ICAgfQorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICBpbmxpbmUgSlNPYmpl
Y3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBw
cm90b3R5cGUsIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKLSAgICB9
CisgICAgREVDTEFSRV9JTkZPOwogCi0gICAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0
eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgT2JqZWN0UHJvdG90eXBlKik7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CisKK3By
aXZhdGU6CisgICAgT2JqZWN0Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0
aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEm
KTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsK
K307CisKK2lubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSk7Cit9CisKK2lubGluZSBKU09iamVjdCogY29uc3RydWN0
RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBl
TWFwID0gZ2xvYmFsT2JqZWN0LT52bSgpLnByb3RvdHlwZU1hcDsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSgK
KyAgICAgICAgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7Cit9CisKK2lubGluZSBKU09iamVjdCogY29u
c3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlKQor
eworICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBwcm90b3R5cGUsIEpTRmlu
YWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEpTT2JqZWN0
KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2Jq
ZWN0UHJvdG90eXBlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9i
amVjdENvbnN0cnVjdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MjcgKzI1LDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgT2JqZWN0UHJvdG90
eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CitjbGFzcyBPYmplY3RQcm90b3R5cGUgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIE9iamVjdFByb3RvdHlwZSogY3JlYXRlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgT2JqZWN0UHJvdG90eXBl
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCi0gICAgICAgIERF
Q0xBUkVfSU5GTzsKKyAgICBERUNMQVJFX0lORk87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KIAotICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7Citwcm90ZWN0ZWQ6
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBw
cml2YXRlOgotICAgICAgICBPYmplY3RQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB9
OworcHJpdmF0ZToKKyAgICBPYmplY3RQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKK307CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNzMyNDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNzAgKzI5LDcyIEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKLSAgICAvLyBTZWUg
RVM1LjEgOS4xMgotICAgIGJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFs
dWUpOworY2xhc3MgR2V0dGVyU2V0dGVyOworCisvLyBTZWUgRVM1LjEgOS4xMgorYm9vbCBzYW1l
VmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisKK2NsYXNzIFByb3BlcnR5RGVz
Y3JpcHRvciB7CitwdWJsaWM6CisgICAgUHJvcGVydHlEZXNjcmlwdG9yKCkKKyAgICAgICAgOiBt
X2F0dHJpYnV0ZXMoZGVmYXVsdEF0dHJpYnV0ZXMpCisgICAgICAgICwgbV9zZWVuQXR0cmlidXRl
cygwKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVydHlEZXNjcmlwdG9yKEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAg
LCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgLCBtX3NlZW5BdHRyaWJ1dGVzKEVu
dW1lcmFibGVQcmVzZW50IHwgQ29uZmlndXJhYmxlUHJlc2VudCB8IFdyaXRhYmxlUHJlc2VudCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkpOworICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNDdXN0b21HZXR0
ZXJTZXR0ZXIoKSk7CisgICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgd3JpdGFibGUo
KSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVudW1lcmFibGUoKSBjb25zdDsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGNvbmZpZ3VyYWJsZSgpIGNvbnN0OworICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgaXNEYXRhRGVzY3JpcHRvcigpIGNvbnN0OworICAgIGJvb2wg
aXNHZW5lcmljRGVzY3JpcHRvcigpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGdldHRl
cigpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0dGVyKCkgY29uc3Q7
CisgICAgSlNPYmplY3QqIGdldHRlck9iamVjdCgpIGNvbnN0OworICAgIEpTT2JqZWN0KiBzZXR0
ZXJPYmplY3QoKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFVuZGVmaW5l
ZCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGVzY3JpcHRvcihKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1c3Rv
bURlc2NyaXB0b3IodW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRBY2Nlc3NvckRlc2NyaXB0b3IoR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRXcml0YWJsZShi
b29sKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVudW1lcmFibGUoYm9vbCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDb25maWd1cmFibGUoYm9vbCk7CisgICAgdm9p
ZCBzZXRWYWx1ZShKU1ZhbHVlIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0U2V0dGVyKEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0R2V0dGVyKEpTVmFsdWUpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICEobV92YWx1ZSB8fCBtX2dldHRlciB8fCBtX3NldHRlciB8fCBtX3NlZW5BdHRyaWJ1
dGVzKTsgfQorICAgIGJvb2wgd3JpdGFibGVQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWVu
QXR0cmlidXRlcyAmIFdyaXRhYmxlUHJlc2VudDsgfQorICAgIGJvb2wgZW51bWVyYWJsZVByZXNl
bnQoKSBjb25zdCB7IHJldHVybiBtX3NlZW5BdHRyaWJ1dGVzICYgRW51bWVyYWJsZVByZXNlbnQ7
IH0KKyAgICBib29sIGNvbmZpZ3VyYWJsZVByZXNlbnQoKSBjb25zdCB7IHJldHVybiBtX3NlZW5B
dHRyaWJ1dGVzICYgQ29uZmlndXJhYmxlUHJlc2VudDsgfQorICAgIGJvb2wgc2V0dGVyUHJlc2Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGVyOyB9CisgICAgYm9vbCBnZXR0ZXJQcmVzZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9nZXR0ZXI7IH0KKyAgICBib29sIGVxdWFsVG8oRXhlY1N0YXRlKiwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBhdHRyaWJ1
dGVzRXF1YWwoY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3Q7CisgICAgdW5z
aWduZWQgYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgY3VycmVudCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMg
dW5zaWduZWQgZGVmYXVsdEF0dHJpYnV0ZXM7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgZW51bSB7IFdyaXRhYmxl
UHJlc2VudCA9IDEsIEVudW1lcmFibGVQcmVzZW50ID0gMiwgQ29uZmlndXJhYmxlUHJlc2VudCA9
IDR9OworICAgIC8vIE1heSBiZSBhIGdldHRlci9zZXR0ZXIKKyAgICBKU1ZhbHVlIG1fdmFsdWU7
CisgICAgSlNWYWx1ZSBtX2dldHRlcjsKKyAgICBKU1ZhbHVlIG1fc2V0dGVyOworICAgIHVuc2ln
bmVkIG1fYXR0cmlidXRlczsKKyAgICB1bnNpZ25lZCBtX3NlZW5BdHRyaWJ1dGVzOworfTsKIAot
ICAgIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IoKQotICAgICAgICAgICAgOiBtX2F0dHJpYnV0ZXMoZGVmYXVsdEF0dHJp
YnV0ZXMpCi0gICAgICAgICAgICAsIG1fc2VlbkF0dHJpYnV0ZXMoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvcihKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgICAgICAgICAg
LCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICwgbV9zZWVuQXR0cmlidXRl
cyhFbnVtZXJhYmxlUHJlc2VudCB8IENvbmZpZ3VyYWJsZVByZXNlbnQgfCBXcml0YWJsZVByZXNl
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3ZhbHVlKTsKLSAgICAgICAgICAg
IEFTU0VSVCghbV92YWx1ZS5pc0dldHRlclNldHRlcigpKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
bV92YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICAgICAgfQotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIHdyaXRhYmxlKCkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZW51bWVyYWJsZSgpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGNvbmZpZ3VyYWJsZSgpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGlzRGF0YURlc2NyaXB0b3IoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0dlbmVyaWNEZXNj
cmlwdG9yKCkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGdl
dHRlcigpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHNldHRlcigp
IGNvbnN0OwotICAgICAgICBKU09iamVjdCogZ2V0dGVyT2JqZWN0KCkgY29uc3Q7Ci0gICAgICAg
IEpTT2JqZWN0KiBzZXR0ZXJPYmplY3QoKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRVbmRlZmluZWQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXREZXNjcmlwdG9yKEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1c3RvbURlc2NyaXB0b3IodW5zaWduZWQgYXR0
cmlidXRlcyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWNjZXNzb3JEZXNj
cmlwdG9yKEdldHRlclNldHRlciogYWNjZXNzb3IsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFdyaXRhYmxlKGJvb2wpOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVudW1lcmFibGUoYm9vbCk7Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0Q29uZmlndXJhYmxlKGJvb2wpOwotICAgICAgICB2b2lkIHNl
dFZhbHVlKEpTVmFsdWUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0U2V0dGVyKEpTVmFsdWUpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEdldHRlcihKU1ZhbHVlKTsKLSAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIShtX3ZhbHVlIHx8IG1fZ2V0dGVyIHx8IG1fc2V0dGVyIHx8IG1fc2Vl
bkF0dHJpYnV0ZXMpOyB9Ci0gICAgICAgIGJvb2wgd3JpdGFibGVQcmVzZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWVuQXR0cmlidXRlcyAmIFdyaXRhYmxlUHJlc2VudDsgfQotICAgICAgICBib29s
IGVudW1lcmFibGVQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuQXR0cmlidXRlcyAmIEVu
dW1lcmFibGVQcmVzZW50OyB9Ci0gICAgICAgIGJvb2wgY29uZmlndXJhYmxlUHJlc2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VlbkF0dHJpYnV0ZXMgJiBDb25maWd1cmFibGVQcmVzZW50OyB9Ci0g
ICAgICAgIGJvb2wgc2V0dGVyUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGVyOyB9Ci0g
ICAgICAgIGJvb2wgZ2V0dGVyUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9Ci0g
ICAgICAgIGJvb2wgZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIGF0dHJpYnV0ZXNFcXVhbChjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgY3VycmVudCkg
Y29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyB1bnNp
Z25lZCBkZWZhdWx0QXR0cmlidXRlczsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYpeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgZW51bSB7IFdyaXRh
YmxlUHJlc2VudCA9IDEsIEVudW1lcmFibGVQcmVzZW50ID0gMiwgQ29uZmlndXJhYmxlUHJlc2Vu
dCA9IDR9OwotICAgICAgICAvLyBNYXkgYmUgYSBnZXR0ZXIvc2V0dGVyCi0gICAgICAgIEpTVmFs
dWUgbV92YWx1ZTsKLSAgICAgICAgSlNWYWx1ZSBtX2dldHRlcjsKLSAgICAgICAgSlNWYWx1ZSBt
X3NldHRlcjsKLSAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzOwotICAgICAgICB1bnNpZ25l
ZCBtX3NlZW5BdHRyaWJ1dGVzOwotICAgIH07CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3RlY3QuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywz
OSArMjcsMzkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBpbmxpbmUgdm9pZCBnY1Byb3Rl
Y3QoSlNDZWxsKiB2YWwpIAotICAgIHsKLSAgICAgICAgSGVhcDo6aGVhcCh2YWwpLT5wcm90ZWN0
KHZhbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgZ2NVbnByb3RlY3QoSlNDZWxsKiB2YWwp
Ci0gICAgewotICAgICAgICBIZWFwOjpoZWFwKHZhbCktPnVucHJvdGVjdCh2YWwpOwotICAgIH0K
LQotICAgIGlubGluZSB2b2lkIGdjUHJvdGVjdE51bGxUb2xlcmFudChKU0NlbGwqIHZhbCkgCi0g
ICAgewotICAgICAgICBpZiAodmFsKSAKLSAgICAgICAgICAgIGdjUHJvdGVjdCh2YWwpOwotICAg
IH0KLQotICAgIGlubGluZSB2b2lkIGdjVW5wcm90ZWN0TnVsbFRvbGVyYW50KEpTQ2VsbCogdmFs
KSAKLSAgICB7Ci0gICAgICAgIGlmICh2YWwpIAotICAgICAgICAgICAgZ2NVbnByb3RlY3QodmFs
KTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZvaWQgZ2NQcm90ZWN0KEpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAg
ICBnY1Byb3RlY3QodmFsdWUuYXNDZWxsKCkpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIGdj
VW5wcm90ZWN0KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgJiYgdmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBnY1VucHJvdGVjdCh2YWx1ZS5hc0NlbGwoKSk7Ci0g
ICAgfQoraW5saW5lIHZvaWQgZ2NQcm90ZWN0KEpTQ2VsbCogdmFsKSAKK3sKKyAgICBIZWFwOjpo
ZWFwKHZhbCktPnByb3RlY3QodmFsKTsKK30KKworaW5saW5lIHZvaWQgZ2NVbnByb3RlY3QoSlND
ZWxsKiB2YWwpCit7CisgICAgSGVhcDo6aGVhcCh2YWwpLT51bnByb3RlY3QodmFsKTsKK30KKwor
aW5saW5lIHZvaWQgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KEpTQ2VsbCogdmFsKSAKK3sKKyAgICBp
ZiAodmFsKSAKKyAgICAgICAgZ2NQcm90ZWN0KHZhbCk7Cit9CisKK2lubGluZSB2b2lkIGdjVW5w
cm90ZWN0TnVsbFRvbGVyYW50KEpTQ2VsbCogdmFsKSAKK3sKKyAgICBpZiAodmFsKSAKKyAgICAg
ICAgZ2NVbnByb3RlY3QodmFsKTsKK30KKworaW5saW5lIHZvaWQgZ2NQcm90ZWN0KEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBnY1By
b3RlY3QodmFsdWUuYXNDZWxsKCkpOworfQorCitpbmxpbmUgdm9pZCBnY1VucHJvdGVjdChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
Z2NVbnByb3RlY3QodmFsdWUuYXNDZWxsKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90
LmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4NiArMzMsODUgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi0gICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAgY2xhc3MgSlNGdW5j
dGlvbjsKK2NsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNGdW5jdGlvbjsKICAgICAKLSAgICBjbGFz
cyBQdXRQcm9wZXJ0eVNsb3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgVW5j
YWNoYWJsZSwgRXhpc3RpbmdQcm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3BlcnR5LCBD
dXN0b21Qcm9wZXJ0eSB9OwotICAgICAgICBlbnVtIENvbnRleHQgeyBVbmtub3duQ29udGV4dCwg
UHV0QnlJZCwgUHV0QnlJZEV2YWwgfTsKLSAgICAgICAgdHlwZWRlZiB2b2lkICgqUHV0VmFsdWVG
dW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwotCi0gICAgICAgIFB1dFByb3BlcnR5U2xvdChKU1Zh
bHVlIHRoaXNWYWx1ZSwgYm9vbCBpc1N0cmljdE1vZGUgPSBmYWxzZSwgQ29udGV4dCBjb250ZXh0
ID0gVW5rbm93bkNvbnRleHQpCi0gICAgICAgICAgICA6IG1fdHlwZShVbmNhY2hhYmxlKQotICAg
ICAgICAgICAgLCBtX2Jhc2UoMCkKLSAgICAgICAgICAgICwgbV90aGlzVmFsdWUodGhpc1ZhbHVl
KQotICAgICAgICAgICAgLCBtX2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCi0gICAgICAgICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAgICAgLCBtX3B1dEZ1bmN0aW9uKG51bGxw
dHIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0RXhpc3RpbmdQcm9w
ZXJ0eShKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3R5cGUgPSBFeGlzdGluZ1Byb3BlcnR5OwotICAgICAgICAgICAgbV9iYXNl
ID0gYmFzZTsKLSAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBzZXROZXdQcm9wZXJ0eShKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBOZXdQcm9wZXJ0eTsKLSAg
ICAgICAgICAgIG1fYmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHkoSlNPYmplY3QqIGJh
c2UsIFB1dFZhbHVlRnVuYyBmdW5jdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbV90eXBl
ID0gQ3VzdG9tUHJvcGVydHk7Ci0gICAgICAgICAgICBtX2Jhc2UgPSBiYXNlOwotICAgICAgICAg
ICAgbV9wdXRGdW5jdGlvbiA9IGZ1bmN0aW9uOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIHNldENhY2hlYWJsZVNldHRlcihKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBTZXR0ZXJQcm9wZXJ0eTsK
LSAgICAgICAgICAgIG1fYmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNl
dDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0VGhpc1ZhbHVlKEpTVmFsdWUgdGhpc1Zh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3RoaXNWYWx1ZSA9IHRoaXNWYWx1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3B1dEZ1bmN0aW9uOyB9Ci0KLSAgICAgICAgQ29udGV4dCBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dD4obV9jb250ZXh0KTsgfQotCi0gICAgICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBKU09iamVjdCogYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGhpc1ZhbHVlOyB9Ci0KLSAgICAgICAgYm9vbCBpc1N0cmljdE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQotICAgICAgICBib29sIGlzQ2Fj
aGVhYmxlUHV0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IE5ld1Byb3BlcnR5IHx8IG1fdHlw
ZSA9PSBFeGlzdGluZ1Byb3BlcnR5OyB9Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGVTZXR0ZXIo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyUHJvcGVydHk7IH0KLSAgICAgICAgYm9v
bCBpc0NhY2hlYWJsZUN1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21Qcm9w
ZXJ0eTsgfQotCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIEpTT2JqZWN0KiBtX2Jhc2U7
Ci0gICAgICAgIEpTVmFsdWUgbV90aGlzVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OwotICAgICAgICBib29sIG1faXNTdHJpY3RNb2RlOwotICAgICAgICB1aW50OF90IG1f
Y29udGV4dDsKLSAgICAgICAgUHV0VmFsdWVGdW5jIG1fcHV0RnVuY3Rpb247Ci0KLSAgICB9Owor
Y2xhc3MgUHV0UHJvcGVydHlTbG90IHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeyBVbmNhY2hh
YmxlLCBFeGlzdGluZ1Byb3BlcnR5LCBOZXdQcm9wZXJ0eSwgU2V0dGVyUHJvcGVydHksIEN1c3Rv
bVByb3BlcnR5IH07CisgICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRleHQsIFB1dEJ5SWQs
IFB1dEJ5SWRFdmFsIH07CisgICAgdHlwZWRlZiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3Rh
dGUqLCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpOworCisgICAgUHV0UHJvcGVydHlTbG90KEpTVmFsdWUgdGhpc1ZhbHVlLCBi
b29sIGlzU3RyaWN0TW9kZSA9IGZhbHNlLCBDb250ZXh0IGNvbnRleHQgPSBVbmtub3duQ29udGV4
dCkKKyAgICAgICAgOiBtX3R5cGUoVW5jYWNoYWJsZSkKKyAgICAgICAgLCBtX2Jhc2UoMCkKKyAg
ICAgICAgLCBtX3RoaXNWYWx1ZSh0aGlzVmFsdWUpCisgICAgICAgICwgbV9pc1N0cmljdE1vZGUo
aXNTdHJpY3RNb2RlKQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
cHV0RnVuY3Rpb24obnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRFeGlzdGlu
Z1Byb3BlcnR5KEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgewor
ICAgICAgICBtX3R5cGUgPSBFeGlzdGluZ1Byb3BlcnR5OworICAgICAgICBtX2Jhc2UgPSBiYXNl
OworICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICB2b2lkIHNldE5ld1By
b3BlcnR5KEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBtX3R5cGUgPSBOZXdQcm9wZXJ0eTsKKyAgICAgICAgbV9iYXNlID0gYmFzZTsKKyAgICAg
ICAgbV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0
eShKU09iamVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
bV90eXBlID0gQ3VzdG9tUHJvcGVydHk7CisgICAgICAgIG1fYmFzZSA9IGJhc2U7CisgICAgICAg
IG1fcHV0RnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldENhY2hlYWJs
ZVNldHRlcihKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgbV90eXBlID0gU2V0dGVyUHJvcGVydHk7CisgICAgICAgIG1fYmFzZSA9IGJhc2U7Cisg
ICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQgc2V0VGhpc1ZhbHVl
KEpTVmFsdWUgdGhpc1ZhbHVlKQorICAgIHsKKyAgICAgICAgbV90aGlzVmFsdWUgPSB0aGlzVmFs
dWU7CisgICAgfQorCisgICAgUHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcHV0RnVuY3Rpb247IH0KKworICAgIENvbnRleHQgY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PENvbnRleHQ+KG1fY29udGV4dCk7IH0KKworICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEpTT2JqZWN0KiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYXNlOyB9CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3RoaXNWYWx1ZTsgfQorCisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2lzU3RyaWN0TW9kZTsgfQorICAgIGJvb2wgaXNDYWNoZWFibGVQdXQoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gTmV3UHJvcGVydHkgfHwgbV90eXBlID09IEV4aXN0aW5nUHJvcGVydHk7IH0K
KyAgICBib29sIGlzQ2FjaGVhYmxlU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFNl
dHRlclByb3BlcnR5OyB9CisgICAgYm9vbCBpc0NhY2hlYWJsZUN1c3RvbSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZSA9PSBDdXN0b21Qcm9wZXJ0eTsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgY2Fj
aGVkT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7CisgICAgSlNPYmplY3QqIG1fYmFzZTsKKyAg
ICBKU1ZhbHVlIG1fdGhpc1ZhbHVlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAg
IGJvb2wgbV9pc1N0cmljdE1vZGU7CisgICAgdWludDhfdCBtX2NvbnRleHQ7CisgICAgUHV0VmFs
dWVGdW5jIG1fcHV0RnVuY3Rpb247Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDE3MzI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw5OSArMzcsMTAxIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgc3RydWN0IFJlZ0V4
cFJlcHJlc2VudGF0aW9uOwotICAgIGNsYXNzIFZNOworc3RydWN0IFJlZ0V4cFJlcHJlc2VudGF0
aW9uOworY2xhc3MgVk07CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyByZWdF
eHBGbGFncyhjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJl
Z0V4cEZsYWdzKGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUmVnRXhwIDogcHVibGljIEpT
Q2VsbCB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworY2xhc3Mg
UmVnRXhwIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnRXhwKiBjcmVhdGUoVk0m
LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnRXhwKiBjcmVh
dGUoVk0mLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAotICAgICAgICBib29sIGdsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3Mg
JiBGbGFnR2xvYmFsOyB9Ci0gICAgICAgIGJvb2wgaWdub3JlQ2FzZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmxhZ3MgJiBGbGFnSWdub3JlQ2FzZTsgfQotICAgICAgICBib29sIG11bHRpbGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBGbGFnTXVsdGlsaW5lOyB9CisgICAgYm9vbCBnbG9iYWwo
KSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgRmxhZ0dsb2JhbDsgfQorICAgIGJvb2wgaWdub3Jl
Q2FzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBGbGFnSWdub3JlQ2FzZTsgfQorICAgIGJv
b2wgbXVsdGlsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIEZsYWdNdWx0aWxpbmU7IH0K
IAotICAgICAgICBjb25zdCBTdHJpbmcmIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRl
cm5TdHJpbmc7IH0KKyAgICBjb25zdCBTdHJpbmcmIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBt
X3BhdHRlcm5TdHJpbmc7IH0KIAotICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biAhbV9jb25zdHJ1Y3Rpb25FcnJvciAmJiBtX2ZsYWdzICE9IEludmFsaWRGbGFnczsgfQotICAg
ICAgICBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVj
dGlvbkVycm9yOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fY29uc3Ry
dWN0aW9uRXJyb3IgJiYgbV9mbGFncyAhPSBJbnZhbGlkRmxhZ3M7IH0KKyAgICBjb25zdCBjaGFy
KiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdGlvbkVycm9yOyB9CiAK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IG1hdGNoKFZNJiwgY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3ZlY3Rvcik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1hdGNoUmVzdWx0IG1hdGNoKFZNJiwgY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQpOwotICAgICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBpbnQgbWF0Y2goVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVj
dG9yPGludCwgMzI+JiBvdmVjdG9yKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNYXRjaFJlc3Vs
dCBtYXRjaChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKKyAgICB1
bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7
IH0KIAotICAgICAgICBib29sIGhhc0NvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zdGF0ZSAhPSBOb3RDb21waWxlZDsKLSAgICAgICAgfQorICAgIGJvb2wgaGFzQ29kZSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGF0ZSAhPSBOb3RDb21waWxlZDsKKyAgICB9CisK
KyAgICB2b2lkIGludmFsaWRhdGVDb2RlKCk7CiAKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlQ29k
ZSgpOwotICAgICAgICAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAgIHZvaWQg
cHJpbnRUcmFjZURhdGEoKTsKKyAgICB2b2lkIHByaW50VHJhY2VEYXRhKCk7CiAjZW5kaWYKIAot
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgICAgIFJlZ0V4cEtl
eSBrZXkoKSB7IHJldHVybiBSZWdFeHBLZXkobV9mbGFncywgbV9wYXR0ZXJuU3RyaW5nKTsgfQot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNo
ZTsKLSAgICAgICAgUmVnRXhwKFZNJiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOwotCi0g
ICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0ZVdpdGhvdXRDYWNoaW5nKFZNJiwgY29uc3QgU3Ry
aW5nJiwgUmVnRXhwRmxhZ3MpOwotCi0gICAgICAgIGVudW0gUmVnRXhwU3RhdGUgewotICAgICAg
ICAgICAgUGFyc2VFcnJvciwKLSAgICAgICAgICAgIEpJVENvZGUsCi0gICAgICAgICAgICBCeXRl
Q29kZSwKLSAgICAgICAgICAgIE5vdENvbXBpbGVkCi0gICAgICAgIH0gbV9zdGF0ZTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgUmVnRXhwS2V5IGtleSgpIHsgcmV0dXJuIFJlZ0V4cEtleShtX2ZsYWdzLCBt
X3BhdHRlcm5TdHJpbmcpOyB9CiAKLSAgICAgICAgdm9pZCBjb21waWxlKFZNKiwgWWFycjo6WWFy
ckNoYXJTaXplKTsKLSAgICAgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnkoVk0mLCBZYXJyOjpZ
YXJyQ2hhclNpemUpOworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICAgICAgdm9pZCBjb21waWxl
TWF0Y2hPbmx5KFZNKiwgWWFycjo6WWFyckNoYXJTaXplKTsKLSAgICAgICAgdm9pZCBjb21waWxl
SWZOZWNlc3NhcnlNYXRjaE9ubHkoVk0mLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVnRXhw
Q2FjaGU7CisgICAgUmVnRXhwKFZNJiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOworCisg
ICAgc3RhdGljIFJlZ0V4cCogY3JlYXRlV2l0aG91dENhY2hpbmcoVk0mLCBjb25zdCBTdHJpbmcm
LCBSZWdFeHBGbGFncyk7CisKKyAgICBlbnVtIFJlZ0V4cFN0YXRlIHsKKyAgICAgICAgUGFyc2VF
cnJvciwKKyAgICAgICAgSklUQ29kZSwKKyAgICAgICAgQnl0ZUNvZGUsCisgICAgICAgIE5vdENv
bXBpbGVkCisgICAgfTsKKworICAgIFJlZ0V4cFN0YXRlIG1fc3RhdGU7CisKKyAgICB2b2lkIGNv
bXBpbGUoVk0qLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgIHZvaWQgY29tcGlsZUlmTmVjZXNz
YXJ5KFZNJiwgWWFycjo6WWFyckNoYXJTaXplKTsKKworICAgIHZvaWQgY29tcGlsZU1hdGNoT25s
eShWTSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7CisgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnlN
YXRjaE9ubHkoVk0mLCBZYXJyOjpZYXJyQ2hhclNpemUpOwogCiAjaWYgRU5BQkxFKFlBUlJfSklU
X0RFQlVHKQotICAgICAgICB2b2lkIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihjb25zdCBT
dHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGludCogb2Zmc2V0VmVjdG9yLCBpbnQgaml0UmVzdWx0
KTsKKyAgICB2b2lkIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRPZmZzZXQsIGludCogb2Zmc2V0VmVjdG9yLCBpbnQgaml0UmVzdWx0KTsKICNlbmRp
ZgogCi0gICAgICAgIFN0cmluZyBtX3BhdHRlcm5TdHJpbmc7Ci0gICAgICAgIFJlZ0V4cEZsYWdz
IG1fZmxhZ3M7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1fY29uc3RydWN0aW9uRXJyb3I7Ci0gICAg
ICAgIHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CisgICAgU3RyaW5nIG1fcGF0dGVyblN0cmlu
ZzsKKyAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOworICAgIGNvbnN0IGNoYXIqIG1fY29uc3RydWN0
aW9uRXJyb3I7CisgICAgdW5zaWduZWQgbV9udW1TdWJwYXR0ZXJuczsKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCi0gICAgICAgIGRvdWJsZSBtX3J0TWF0Y2hPbmx5VG90YWxTdWJqZWN0U3Ry
aW5nTGVuOwotICAgICAgICBkb3VibGUgbV9ydE1hdGNoVG90YWxTdWJqZWN0U3RyaW5nTGVuOwot
ICAgICAgICB1bnNpZ25lZCBtX3J0TWF0Y2hPbmx5Q2FsbENvdW50OwotICAgICAgICB1bnNpZ25l
ZCBtX3J0TWF0Y2hPbmx5Rm91bmRDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9ydE1hdGNoQ2Fs
bENvdW50OwotICAgICAgICB1bnNpZ25lZCBtX3J0TWF0Y2hGb3VuZENvdW50OworICAgIGRvdWJs
ZSBtX3J0TWF0Y2hPbmx5VG90YWxTdWJqZWN0U3RyaW5nTGVuOworICAgIGRvdWJsZSBtX3J0TWF0
Y2hUb3RhbFN1YmplY3RTdHJpbmdMZW47CisgICAgdW5zaWduZWQgbV9ydE1hdGNoT25seUNhbGxD
b3VudDsKKyAgICB1bnNpZ25lZCBtX3J0TWF0Y2hPbmx5Rm91bmRDb3VudDsKKyAgICB1bnNpZ25l
ZCBtX3J0TWF0Y2hDYWxsQ291bnQ7CisgICAgdW5zaWduZWQgbV9ydE1hdGNoRm91bmRDb3VudDsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQotICAgICAgICBZYXJyOjpZYXJyQ29kZUJs
b2NrIG1fcmVnRXhwSklUQ29kZTsKKyAgICBZYXJyOjpZYXJyQ29kZUJsb2NrIG1fcmVnRXhwSklU
Q29kZTsKICNlbmRpZgotICAgICAgICBPd25QdHI8WWFycjo6Qnl0ZWNvZGVQYXR0ZXJuPiBtX3Jl
Z0V4cEJ5dGVjb2RlOwotICAgIH07CisgICAgT3duUHRyPFlhcnI6OkJ5dGVjb2RlUGF0dGVybj4g
bV9yZWdFeHBCeXRlY29kZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAko
cmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU0ICszMCw1NCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEpTU3RyaW5nOwotICAgIGNsYXNzIFJlZ0V4cE1hdGNo
ZXNBcnJheTsKK2NsYXNzIEpTU3RyaW5nOworY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5OwogCi0g
ICAgLy8gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIHVzZWQgdG8gdHJhY2sgdGhlIGNhY2hlZCByZXN1
bHRzIG9mIHRoZSBsYXN0Ci0gICAgLy8gbWF0Y2gsIHN0b3JlcyBvbiB0aGUgUmVnRXhwIGNvbnN0
cnVjdG9yIChlLmcuICQmLCAkXywgJDEsICQyIC4uLikuCi0gICAgLy8gVGhlc2UgdmFsdWVzIHdp
bGwgYmUgbGF6aWx5IGdlbmVyYXRlZCBvbiBkZW1hbmQsIHNvIHRoZSBjYWNoZWQgcmVzdWx0Ci0g
ICAgLy8gbWF5IGJlIGluIGEgbGF6eSBvciByZWlmaWVkIHN0YXRlLiBBIGxhenkgc3RhdGUgaXMg
aW5kaWNhdGVkIGJ5IGEKLSAgICAvLyB2YWx1ZSBvZiBtX3Jlc3VsdCBpbmRpY2F0aW5nIGEgc3Vj
Y2Vzc2Z1bCBtYXRjaCwgYW5kIGEgcmVpZmllZCBzdGF0ZQotICAgIC8vIGlzIGluZGljYXRlZCBi
eSBzZXR0aW5nIG1fcmVzdWx0IHRvIE1hdGNoUmVzdWx0OjpmYWlsZWQoKS4KLSAgICAvLyBGb2xs
b3dpbmcgYSBzdWNjZXNzZnVsIG1hdGNoLCBtX3Jlc3VsdCwgbV9sYXN0SW5wdXQgYW5kIG1fbGFz
dFJlZ0V4cAotICAgIC8vIGNhbiBiZSB1c2VkIHRvIHJlaWZ5IHRoZSByZXN1bHRzIGZyb20gdGhl
IG1hdGNoLCBmb2xsb3dpbmcgcmVpZmljYXRpb24KLSAgICAvLyBtX3JlaWZpZWRSZXN1bHQgYW5k
IG1fcmVpZmllZElucHV0IGhvbGQgdGhlIGNhY2hlZCByZXN1bHRzLgotICAgIGNsYXNzIFJlZ0V4
cENhY2hlZFJlc3VsdCB7Ci0gICAgcHVibGljOgotICAgICAgICBSZWdFeHBDYWNoZWRSZXN1bHQo
Vk0mIHZtLCBKU09iamVjdCogb3duZXIsIFJlZ0V4cCogZW1wdHlSZWdFeHApCi0gICAgICAgICAg
ICA6IG1fcmVzdWx0KDAsIDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGFzdElucHV0LnNl
dCh2bSwgb3duZXIsIGpzRW1wdHlTdHJpbmcoJnZtKSk7Ci0gICAgICAgICAgICBtX2xhc3RSZWdF
eHAuc2V0KHZtLCBvd25lciwgZW1wdHlSZWdFeHApOwotICAgICAgICB9Ci0KLSAgICAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlY29yZChWTSYgdm0sIEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiBy
ZWdFeHAsIEpTU3RyaW5nKiBpbnB1dCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KHZtLCBvd25lciwgcmVnRXhwKTsKLSAgICAgICAg
ICAgIG1fbGFzdElucHV0LnNldCh2bSwgb3duZXIsIGlucHV0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0ID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBs
YXN0UmVzdWx0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBvd25lcik7Ci0gICAgICAgIHZvaWQgc2V0
SW5wdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqIG93bmVyLCBKU1N0cmluZyopOwotCi0gICAgICAg
IEpTU3RyaW5nKiBpbnB1dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG1fcmVzdWx0
IHNob3dhcyBhIG1hdGNoIHRoZW4gd2UncmUgaW4gYSBsYXp5IHN0YXRlLCBzbyBtX2xhc3RJbnB1
dAotICAgICAgICAgICAgLy8gaXMgdGhlIG1vc3QgcmVjZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBw
cm9wZXJ0eS4gSWYgbm90IHRoZW4gd2UgaGF2ZQotICAgICAgICAgICAgLy8gcmVpZmllZCwgaW4g
d2hpY2ggY2FzZSBtX3JlaWZpZWRJbnB1dCB3aWxsIGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUu
Ci0gICAgICAgICAgICByZXR1cm4gbV9yZXN1bHQgPyBtX2xhc3RJbnB1dC5nZXQoKSA6IG1fcmVp
ZmllZElucHV0LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXRjaFJlc3VsdCBtX3Jl
c3VsdDsKLSAgICAgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX2xhc3RJbnB1dDsKLSAgICAg
ICAgV3JpdGVCYXJyaWVyPFJlZ0V4cD4gbV9sYXN0UmVnRXhwOwotICAgICAgICBXcml0ZUJhcnJp
ZXI8UmVnRXhwTWF0Y2hlc0FycmF5PiBtX3JlaWZpZWRSZXN1bHQ7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4gbV9yZWlmaWVkSW5wdXQ7Ci0gICAgfTsKKy8vIFJlZ0V4cENhY2hlZFJl
c3VsdCBpcyB1c2VkIHRvIHRyYWNrIHRoZSBjYWNoZWQgcmVzdWx0cyBvZiB0aGUgbGFzdAorLy8g
bWF0Y2gsIHN0b3JlcyBvbiB0aGUgUmVnRXhwIGNvbnN0cnVjdG9yIChlLmcuICQmLCAkXywgJDEs
ICQyIC4uLikuCisvLyBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBsYXppbHkgZ2VuZXJhdGVkIG9uIGRl
bWFuZCwgc28gdGhlIGNhY2hlZCByZXN1bHQKKy8vIG1heSBiZSBpbiBhIGxhenkgb3IgcmVpZmll
ZCBzdGF0ZS4gQSBsYXp5IHN0YXRlIGlzIGluZGljYXRlZCBieSBhCisvLyB2YWx1ZSBvZiBtX3Jl
c3VsdCBpbmRpY2F0aW5nIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgYW5kIGEgcmVpZmllZCBzdGF0ZQor
Ly8gaXMgaW5kaWNhdGVkIGJ5IHNldHRpbmcgbV9yZXN1bHQgdG8gTWF0Y2hSZXN1bHQ6OmZhaWxl
ZCgpLgorLy8gRm9sbG93aW5nIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgbV9yZXN1bHQsIG1fbGFzdElu
cHV0IGFuZCBtX2xhc3RSZWdFeHAKKy8vIGNhbiBiZSB1c2VkIHRvIHJlaWZ5IHRoZSByZXN1bHRz
IGZyb20gdGhlIG1hdGNoLCBmb2xsb3dpbmcgcmVpZmljYXRpb24KKy8vIG1fcmVpZmllZFJlc3Vs
dCBhbmQgbV9yZWlmaWVkSW5wdXQgaG9sZCB0aGUgY2FjaGVkIHJlc3VsdHMuCitjbGFzcyBSZWdF
eHBDYWNoZWRSZXN1bHQgeworcHVibGljOgorICAgIFJlZ0V4cENhY2hlZFJlc3VsdChWTSYgdm0s
IEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiBlbXB0eVJlZ0V4cCkKKyAgICAgICAgOiBtX3Jlc3Vs
dCgwLCAwKQorICAgIHsKKyAgICAgICAgbV9sYXN0SW5wdXQuc2V0KHZtLCBvd25lciwganNFbXB0
eVN0cmluZygmdm0pKTsKKyAgICAgICAgbV9sYXN0UmVnRXhwLnNldCh2bSwgb3duZXIsIGVtcHR5
UmVnRXhwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVjb3JkKFZNJiB2bSwg
SlNPYmplY3QqIG93bmVyLCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIGlucHV0LCBNYXRjaFJl
c3VsdCByZXN1bHQpCisgICAgeworICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KHZtLCBvd25lciwg
cmVnRXhwKTsKKyAgICAgICAgbV9sYXN0SW5wdXQuc2V0KHZtLCBvd25lciwgaW5wdXQpOworICAg
ICAgICBtX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisKKyAgICBSZWdFeHBNYXRjaGVzQXJyYXkq
IGxhc3RSZXN1bHQoRXhlY1N0YXRlKiwgSlNPYmplY3QqIG93bmVyKTsKKyAgICB2b2lkIHNldElu
cHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBvd25lciwgSlNTdHJpbmcqKTsKKworICAgIEpTU3Ry
aW5nKiBpbnB1dCgpCisgICAgeworICAgICAgICAvLyBJZiBtX3Jlc3VsdCBzaG93YXMgYSBtYXRj
aCB0aGVuIHdlJ3JlIGluIGEgbGF6eSBzdGF0ZSwgc28gbV9sYXN0SW5wdXQKKyAgICAgICAgLy8g
aXMgdGhlIG1vc3QgcmVjZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBwcm9wZXJ0eS4gSWYgbm90IHRo
ZW4gd2UgaGF2ZQorICAgICAgICAvLyByZWlmaWVkLCBpbiB3aGljaCBjYXNlIG1fcmVpZmllZElu
cHV0IHdpbGwgY29udGFpbiB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIG1fcmVz
dWx0ID8gbV9sYXN0SW5wdXQuZ2V0KCkgOiBtX3JlaWZpZWRJbnB1dC5nZXQoKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBN
YXRjaFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbGFzdElu
cHV0OworICAgIFdyaXRlQmFycmllcjxSZWdFeHA+IG1fbGFzdFJlZ0V4cDsKKyAgICBXcml0ZUJh
cnJpZXI8UmVnRXhwTWF0Y2hlc0FycmF5PiBtX3JlaWZpZWRSZXN1bHQ7CisgICAgV3JpdGVCYXJy
aWVyPEpTU3RyaW5nPiBtX3JlaWZpZWRJbnB1dDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwMCArMzAsMTAw
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlOworY2xh
c3MgUmVnRXhwUHJvdG90eXBlOwogCi0gICAgY2xhc3MgUmVnRXhwQ29uc3RydWN0b3IgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEludGVy
bmFsRnVuY3Rpb24gQmFzZTsKK2NsYXNzIFJlZ0V4cENvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNl
OwogCi0gICAgICAgIHN0YXRpYyBSZWdFeHBDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFJlZ0V4
cENvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7Ci0gICAgICAgICAg
ICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHJlZ0V4cFByb3RvdHlwZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLQotICAgICAgICBERUNMQVJFX0lORk87Ci0K
LSAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9ybU1hdGNoKFZNJiwgUmVnRXhwKiwgSlNTdHJpbmcq
LCBjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpOwotICAgICAg
ICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0Y2goVk0mLCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0
IFN0cmluZyYsIGludCBzdGFydE9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBzZXRNdWx0aWxpbmUo
Ym9vbCBtdWx0aWxpbmUpIHsgbV9tdWx0aWxpbmUgPSBtdWx0aWxpbmU7IH0KLSAgICAgICAgYm9v
bCBtdWx0aWxpbmUoKSBjb25zdCB7IHJldHVybiBtX211bHRpbGluZTsgfQotCi0gICAgICAgIEpT
VmFsdWUgZ2V0QmFja3JlZihFeGVjU3RhdGUqLCB1bnNpZ25lZCk7Ci0gICAgICAgIEpTVmFsdWUg
Z2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU1ZhbHVlIGdldExlZnRDb250ZXh0
KEV4ZWNTdGF0ZSopOwotICAgICAgICBKU1ZhbHVlIGdldFJpZ2h0Q29udGV4dChFeGVjU3RhdGUq
KTsKLQotICAgICAgICB2b2lkIHNldElucHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0
cmluZykgeyBtX2NhY2hlZFJlc3VsdC5zZXRJbnB1dChleGVjLCB0aGlzLCBzdHJpbmcpOyB9Ci0g
ICAgICAgIEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0LmlucHV0KCk7
IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBSZWdFeHBQcm90b3R5cGUqKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvcihWTSYsIFN0
cnVjdHVyZSosIFJlZ0V4cFByb3RvdHlwZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwotICAgICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENh
bGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0KLSAgICAgICAgUmVnRXhwQ2FjaGVkUmVzdWx0
IG1fY2FjaGVkUmVzdWx0OwotICAgICAgICBib29sIG1fbXVsdGlsaW5lOwotICAgICAgICBWZWN0
b3I8aW50LCAzMj4gbV9vdmVjdG9yOwotICAgIH07Ci0KLSAgICBSZWdFeHBDb25zdHJ1Y3Rvciog
YXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlKTsKLQotICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RS
ZWdFeHAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0JiwgYm9vbCBj
YWxsQXNDb25zdHJ1Y3RvciA9IGZhbHNlKTsKLQotICAgIGlubGluZSBSZWdFeHBDb25zdHJ1Y3Rv
ciogYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZWdFeHBD
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cFBy
b3RvdHlwZSogcmVnRXhwUHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGFzT2JqZWN0
KHZhbHVlKS0+aW5oZXJpdHMoUmVnRXhwQ29uc3RydWN0b3I6OmluZm8oKSkpOwotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihhc09iamVjdCh2YWx1ZSkpOwor
ICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSZWdFeHBDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFJlZ0V4cENvbnN0cnVjdG9y
KHZtLCBzdHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5m
aW5pc2hDcmVhdGlvbih2bSwgcmVnRXhwUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdG9yOwogICAgIH0KIAotICAgIC8qIAotICAgICAgVG8gZmFjaWxpdGF0ZSByZXN1bHQgY2Fj
aGluZywgZXhlYygpLCB0ZXN0KCksIG1hdGNoKCksIHNlYXJjaCgpLCBhbmQgcmVwbGFjZSgpIGRp
cGF0Y2ggcmVndWxhcgotICAgICAgZXhwcmVzc2lvbiBtYXRjaGluZyB0aHJvdWdoIHRoZSBwZXJm
b3JtTWF0Y2ggZnVuY3Rpb24uIFdlIHVzZSBjYWNoZWQgcmVzdWx0cyB0byBjYWxjdWxhdGUsIAot
ICAgICAgZS5nLiwgUmVnRXhwLmxhc3RNYXRjaCBhbmQgUmVnRXhwLmxlZnRQYXJlbi4KLSAgICAq
LwotICAgIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZv
cm1NYXRjaChWTSYgdm0sIFJlZ0V4cCogcmVnRXhwLCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBT
dHJpbmcmIGlucHV0LCBpbnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBpbnQgcG9zaXRpb24g
PSByZWdFeHAtPm1hdGNoKHZtLCBpbnB1dCwgc3RhcnRPZmZzZXQsIG1fb3ZlY3Rvcik7Ci0KLSAg
ICAgICAgaWYgKG92ZWN0b3IpCi0gICAgICAgICAgICAqb3ZlY3RvciA9IG1fb3ZlY3Rvci5kYXRh
KCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IC0xKQotICAgICAgICAgICAgcmV0dXJu
IE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
Ci0gICAgICAgIEFTU0VSVCghbV9vdmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVCht
X292ZWN0b3JbMF0gPT0gcG9zaXRpb24pOwotICAgICAgICBBU1NFUlQobV9vdmVjdG9yWzFdID49
IHBvc2l0aW9uKTsKLSAgICAgICAgc2l6ZV90IGVuZCA9IG1fb3ZlY3RvclsxXTsKKyAgICBERUNM
QVJFX0lORk87CiAKLSAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZtLCB0aGlzLCByZWdF
eHAsIHN0cmluZywgTWF0Y2hSZXN1bHQocG9zaXRpb24sIGVuZCkpOworICAgIE1hdGNoUmVzdWx0
IHBlcmZvcm1NYXRjaChWTSYsIFJlZ0V4cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKTsKKyAgICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0
Y2goVk0mLCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNl
dCk7CiAKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHBvc2l0aW9uLCBlbmQpOwotICAgIH0K
LSAgICBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cENvbnN0cnVjdG9yOjpwZXJmb3Jt
TWF0Y2goVk0mIHZtLCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3Ry
aW5nJiBpbnB1dCwgaW50IHN0YXJ0T2Zmc2V0KQotICAgIHsKLSAgICAgICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gcmVnRXhwLT5tYXRjaCh2bSwgaW5wdXQsIHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgICAgIG1fY2FjaGVkUmVzdWx0LnJlY29yZCh2bSwgdGhpcywg
cmVnRXhwLCBzdHJpbmcsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQor
ICAgIHZvaWQgc2V0TXVsdGlsaW5lKGJvb2wgbXVsdGlsaW5lKSB7IG1fbXVsdGlsaW5lID0gbXVs
dGlsaW5lOyB9CisgICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdCB7IHJldHVybiBtX211bHRpbGlu
ZTsgfQorCisgICAgSlNWYWx1ZSBnZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKyAg
ICBKU1ZhbHVlIGdldExhc3RQYXJlbihFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlIGdldExlZnRD
b250ZXh0KEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgZ2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0
ZSopOworCisgICAgdm9pZCBzZXRJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJp
bmcpIHsgbV9jYWNoZWRSZXN1bHQuc2V0SW5wdXQoZXhlYywgdGhpcywgc3RyaW5nKTsgfQorICAg
IEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0LmlucHV0KCk7IH0KKwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWdFeHBQcm90b3R5cGUq
KTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAg
ICBSZWdFeHBDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cFByb3RvdHlwZSopOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgc3RhdGljIENvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGlj
IENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CisKKyAgICBSZWdFeHBD
YWNoZWRSZXN1bHQgbV9jYWNoZWRSZXN1bHQ7CisgICAgYm9vbCBtX211bHRpbGluZTsKKyAgICBW
ZWN0b3I8aW50LCAzMj4gbV9vdmVjdG9yOworfTsKKworUmVnRXhwQ29uc3RydWN0b3IqIGFzUmVn
RXhwQ29uc3RydWN0b3IoSlNWYWx1ZSk7CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0JiwgYm9vbCBjYWxsQXNDb25z
dHJ1Y3RvciA9IGZhbHNlKTsKKworaW5saW5lIFJlZ0V4cENvbnN0cnVjdG9yKiBhc1JlZ0V4cENv
bnN0cnVjdG9yKEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+
aW5oZXJpdHMoUmVnRXhwQ29uc3RydWN0b3I6OmluZm8oKSkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHZhbHVlKSk7Cit9CisKKy8qIAorICAg
VG8gZmFjaWxpdGF0ZSByZXN1bHQgY2FjaGluZywgZXhlYygpLCB0ZXN0KCksIG1hdGNoKCksIHNl
YXJjaCgpLCBhbmQgcmVwbGFjZSgpIGRpcGF0Y2ggcmVndWxhcgorICAgZXhwcmVzc2lvbiBtYXRj
aGluZyB0aHJvdWdoIHRoZSBwZXJmb3JtTWF0Y2ggZnVuY3Rpb24uIFdlIHVzZSBjYWNoZWQgcmVz
dWx0cyB0byBjYWxjdWxhdGUsIAorICAgZS5nLiwgUmVnRXhwLmxhc3RNYXRjaCBhbmQgUmVnRXhw
LmxlZnRQYXJlbi4KKyovCitBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cENvbnN0cnVj
dG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmlu
ZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKQor
eworICAgIGludCBwb3NpdGlvbiA9IHJlZ0V4cC0+bWF0Y2godm0sIGlucHV0LCBzdGFydE9mZnNl
dCwgbV9vdmVjdG9yKTsKKworICAgIGlmIChvdmVjdG9yKQorICAgICAgICAqb3ZlY3RvciA9IG1f
b3ZlY3Rvci5kYXRhKCk7CisKKyAgICBpZiAocG9zaXRpb24gPT0gLTEpCisgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisKKyAgICBBU1NFUlQoIW1fb3ZlY3Rvci5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChtX292ZWN0b3JbMF0gPT0gcG9zaXRpb24pOworICAgIEFTU0VSVCht
X292ZWN0b3JbMV0gPj0gcG9zaXRpb24pOworICAgIHNpemVfdCBlbmQgPSBtX292ZWN0b3JbMV07
CisKKyAgICBtX2NhY2hlZFJlc3VsdC5yZWNvcmQodm0sIHRoaXMsIHJlZ0V4cCwgc3RyaW5nLCBN
YXRjaFJlc3VsdChwb3NpdGlvbiwgZW5kKSk7CisKKyAgICByZXR1cm4gTWF0Y2hSZXN1bHQocG9z
aXRpb24sIGVuZCk7Cit9CitBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cENvbnN0cnVj
dG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmlu
ZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0T2Zmc2V0KQoreworICAgIE1hdGNoUmVz
dWx0IHJlc3VsdCA9IHJlZ0V4cC0+bWF0Y2godm0sIGlucHV0LCBzdGFydE9mZnNldCk7CisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZtLCB0aGlzLCByZWdF
eHAsIHN0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMTMgKzI2LDExMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIFJlZ0V4cE1h
dGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWdF
eHBNYXRjaGVzQXJyYXkoVk0mLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5n
KiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwotCi0gICAgICAgIGVudW0gUmVpZmllZFN0YXRlIHsg
UmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwotCi0gICAgcHVibGljOgot
ICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLQotICAgICAgICBzdGF0aWMgUmVnRXhwTWF0
Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJl
c3VsdCk7Ci0KLSAgICAgICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwotICAg
ICAgICBKU1N0cmluZyogcmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopOwotCi0gICAgICAgIERFQ0xB
UkVfSU5GTzsKLQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCksIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0g
ICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0KLSAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlaWZ5
QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUmVpZmllZEFsbCkKLSAgICAgICAgICAgICAgICByZWlm
eUFsbFByb3BlcnRpZXMoZXhlYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVpZnlNYXRjaFByb3BlcnR5SWZOZWNlc3NhcnkoRXhlY1N0YXRlKiBleGVjKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBSZWlmaWVkTm9uZSkKLSAgICAgICAg
ICAgICAgICByZWlmeU1hdGNoUHJvcGVydHkoZXhlYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihvYmplY3QpOwotICAgICAgICAgICAgdGhpc09iamVj
dC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVz
QXJyYXkqPihvYmplY3QpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSkKLSAgICAgICAg
ICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShleGVjKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeU1hdGNo
UHJvcGVydHlJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdiwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBNYXRj
aGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7
Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShl
eGVjKTsKLSAgICAgICAgICAgIEpTQXJyYXk6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHYsIHNsb3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9p
ZCBwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdiwgYm9vbCBzaG91bGRUaHJvdykKLSAgICAgICAgewotICAgICAg
ICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNo
ZXNBcnJheSo+KGNlbGwpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0
aWVzSWZOZWNlc3NhcnkoZXhlYyk7Ci0gICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdiwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRj
aGVzQXJyYXkqPihjZWxsKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVy
dGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNo
ZXNBcnJheSo+KGNlbGwpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0
aWVzSWZOZWNlc3NhcnkoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFyciwgRW51bWVyYXRp
b25Nb2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0
Y2hlc0FycmF5Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJv
cGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwotICAgICAgICAgICAgSlNBcnJheTo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnIsIG1vZGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRj
aGVzQXJyYXkqPihvYmplY3QpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9w
ZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNo
b3VsZFRocm93KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVpZnlBbGxQcm9wZXJ0aWVz
KEV4ZWNTdGF0ZSopOwotICAgICAgICB2b2lkIHJlaWZ5TWF0Y2hQcm9wZXJ0eShFeGVjU3RhdGUq
KTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1faW5wdXQ7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxSZWdFeHA+IG1fcmVnRXhwOwotICAgICAgICBNYXRjaFJlc3VsdCBtX3Jlc3Vs
dDsKLSAgICAgICAgUmVpZmllZFN0YXRlIG1fc3RhdGU7CitjbGFzcyBSZWdFeHBNYXRjaGVzQXJy
YXkgOiBwdWJsaWMgSlNBcnJheSB7Citwcml2YXRlOgorICAgIFJlZ0V4cE1hdGNoZXNBcnJheShW
TSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRj
aFJlc3VsdCk7CisKKyAgICBlbnVtIFJlaWZpZWRTdGF0ZSB7IFJlaWZpZWROb25lLCBSZWlmaWVk
TWF0Y2gsIFJlaWZpZWRBbGwgfTsKKworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheSBCYXNl
OworCisgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOworCisgICAgSlNTdHJpbmcqIGxlZnRDb250
ZXh0KEV4ZWNTdGF0ZSopOworICAgIEpTU3RyaW5nKiByaWdodENvbnRleHQoRXhlY1N0YXRlKik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KEV4
ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IFJlaWZpZWRBbGwp
CisgICAgICAgICAgICByZWlmeUFsbFByb3BlcnRpZXMoZXhlYyk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlaWZ5TWF0Y2hQcm9wZXJ0eUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSog
ZXhlYykKKyAgICB7CisgICAgICAgIGlmIChtX3N0YXRlID09IFJlaWZpZWROb25lKQorICAgICAg
ICAgICAgcmVpZnlNYXRjaFByb3BlcnR5KGV4ZWMpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICB7CisgICAg
ICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVz
QXJyYXkqPihvYmplY3QpOworICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJ
Zk5lY2Vzc2FyeShleGVjKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKKyAgICB7CisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxSZWdFeHBNYXRjaGVzQXJyYXkqPihvYmplY3QpOworICAgICAgICBpZiAocHJvcGVydHlOYW1l
KQorICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnko
ZXhlYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5TWF0Y2hQ
cm9wZXJ0eUlmTmVjZXNzYXJ5KGV4ZWMpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2LCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCisgICAgeworICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7CisgICAgICAgIHRoaXNPYmplY3Qt
PnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgICAgICBKU0FycmF5Ojpw
dXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2LCBzbG90KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdiwgYm9vbCBzaG91bGRUaHJvdykKKyAgICB7
CisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBN
YXRjaGVzQXJyYXkqPihjZWxsKTsKKyAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0
aWVzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2LCBzaG91bGRUaHJvdyk7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBSZWdFeHBNYXRjaGVz
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwor
ICAgICAgICByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkKKyAgICB7CisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKKyAgICAgICAgdGhpc09iamVjdC0+cmVpZnlB
bGxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgIHJldHVybiBKU0FycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFyciwgRW51bWVyYXRpb25N
b2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgUmVn
RXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+
KG9iamVjdCk7CisgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNz
YXJ5KGV4ZWMpOworICAgICAgICBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIGFyciwgbW9kZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCisgICAgeworICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0KTsKKyAgICAgICAgdGhpc09i
amVjdC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgIHJldHVy
biBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworICAgIH0KKworICAgIHZvaWQgcmVpZnlBbGxQcm9w
ZXJ0aWVzKEV4ZWNTdGF0ZSopOworICAgIHZvaWQgcmVpZnlNYXRjaFByb3BlcnR5KEV4ZWNTdGF0
ZSopOworCisgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX2lucHV0OworICAgIFdyaXRlQmFy
cmllcjxSZWdFeHA+IG1fcmVnRXhwOworICAgIE1hdGNoUmVzdWx0IG1fcmVzdWx0OworICAgIFJl
aWZpZWRTdGF0ZSBtX3N0YXRlOwogfTsKIAogaW5saW5lIGJvb2wgaXNSZWdFeHBNYXRjaGVzQXJy
YXkoSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsODMgKzI2LDgz
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotICAgIGNsYXNzIFJlZ0V4cE9iamVjdCA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBSZWdFeHBPYmplY3QqIGNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKLSAgICAgICAg
ewotICAgICAgICAgICAgUmVnRXhwT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxSZWdFeHBPYmplY3Q+KHZtLmhlYXApKSBSZWdFeHBPYmplY3Qodm0sIHN0cnVjdHVy
ZSwgcmVnRXhwKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgfQorY2xhc3MgUmVnRXhwT2JqZWN0IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOwogCi0gICAgICAgIHZvaWQgc2V0UmVnRXhwKFZNJiB2bSwgUmVnRXhwKiBy
KSB7IG1fcmVnRXhwLnNldCh2bSwgdGhpcywgcik7IH0KLSAgICAgICAgUmVnRXhwKiByZWdFeHAo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cC5nZXQoKTsgfQorICAgIHN0YXRpYyBSZWdFeHBPYmpl
Y3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkK
KyAgICB7CisgICAgICAgIFJlZ0V4cE9iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8UmVnRXhwT2JqZWN0Pih2bS5oZWFwKSkgUmVnRXhwT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUsIHJlZ0V4cCk7CisgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAg
ICByZXR1cm4gb2JqZWN0OworICAgIH0KKworICAgIHZvaWQgc2V0UmVnRXhwKFZNJiB2bSwgUmVn
RXhwKiByKSB7IG1fcmVnRXhwLnNldCh2bSwgdGhpcywgcik7IH0KKyAgICBSZWdFeHAqIHJlZ0V4
cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRM
YXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbGFzdEluZGV4KQotICAgICAgICB7Cisg
ICAgdm9pZCBzZXRMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbGFzdEluZGV4KQor
ICAgIHsKKyAgICAgICAgbV9sYXN0SW5kZXguc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJl
cihsYXN0SW5kZXgpKTsKKyAgICAgICAgaWYgKExJS0VMWShtX2xhc3RJbmRleElzV3JpdGFibGUp
KQogICAgICAgICAgICAgbV9sYXN0SW5kZXguc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJl
cihsYXN0SW5kZXgpKTsKLSAgICAgICAgICAgIGlmIChMSUtFTFkobV9sYXN0SW5kZXhJc1dyaXRh
YmxlKSkKLSAgICAgICAgICAgICAgICBtX2xhc3RJbmRleC5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGpzTnVtYmVyKGxhc3RJbmRleCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGxhc3RJbmRleCwgYm9vbCBzaG91bGRUaHJvdykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKExJS0VMWShtX2xhc3RJbmRleElzV3JpdGFibGUpKQotICAgICAgICAgICAgICAg
IG1fbGFzdEluZGV4LnNldChleGVjLT52bSgpLCB0aGlzLCBsYXN0SW5kZXgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgfQot
ICAgICAgICBKU1ZhbHVlIGdldExhc3RJbmRleCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2xhc3RJbmRleC5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
dGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpIHsgcmV0dXJuIG1hdGNoKGV4
ZWMsIHN0cmluZyk7IH0KLSAgICAgICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
Kik7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9
Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVj
dChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXRjaFJlc3VsdCBt
YXRjaChFeGVjU3RhdGUqLCBKU1N0cmluZyopOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxSZWdF
eHA+IG1fcmVnRXhwOwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9sYXN0SW5kZXg7
Ci0gICAgICAgIGJvb2wgbV9sYXN0SW5kZXhJc1dyaXRhYmxlOwotICAgIH07CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgfQorICAgIHZvaWQgc2V0TGFzdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBsYXN0SW5kZXgsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgeworICAg
ICAgICBpZiAoTElLRUxZKG1fbGFzdEluZGV4SXNXcml0YWJsZSkpCisgICAgICAgICAgICBtX2xh
c3RJbmRleC5zZXQoZXhlYy0+dm0oKSwgdGhpcywgbGFzdEluZGV4KTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIH0KKyAgICBKU1ZhbHVlIGdldExh
c3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXN0SW5kZXguZ2V0KCk7
CisgICAgfQogCi0gICAgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlKTsKKyAg
ICBib29sIHRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKSB7IHJldHVybiBt
YXRjaChleGVjLCBzdHJpbmcpOyB9CisgICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKik7CiAKLSAgICBpbmxpbmUgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVl
IHZhbHVlKQorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQg
cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFs
dWUpLT5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpOwotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAorcHJvdGVjdGVk
OgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJl
Z0V4cCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworCitwcml2YXRlOgorICAgIE1hdGNoUmVzdWx0IG1hdGNo
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CisKKyAgICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX3Jl
Z0V4cDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9sYXN0SW5kZXg7CisgICAgYm9vbCBt
X2xhc3RJbmRleElzV3JpdGFibGU7Cit9OworCitSZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0
KEpTVmFsdWUpOworCitpbmxpbmUgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVl
IHZhbHVlKQoreworICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKFJlZ0V4cE9i
amVjdDo6aW5mbygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFz
T2JqZWN0KHZhbHVlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gUmVn
RXhwT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzEgKzI2
LDMxIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlIDog
cHVibGljIFJlZ0V4cE9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIFJlZ0V4
cE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBSZWdFeHBQcm90b3R5cGUqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKLSAgICAgICAgewot
ICAgICAgICAgICAgUmVnRXhwUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSZWdFeHBQcm90b3R5cGU+KHZtLmhlYXApKSBSZWdFeHBQcm90b3R5cGUodm0s
IHN0cnVjdHVyZSwgcmVnRXhwKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgREVDTEFSRV9JTkZPOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgUmVnRXhwUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IFJlZ0V4cE9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIH07CitjbGFzcyBSZWdF
eHBQcm90b3R5cGUgOiBwdWJsaWMgUmVnRXhwT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFJlZ0V4cE9iamVjdCBCYXNlOworCisgICAgc3RhdGljIFJlZ0V4cFByb3RvdHlwZSogY3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgIHsKKyAg
ICAgICAgUmVnRXhwUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxSZWdFeHBQcm90b3R5cGU+KHZtLmhlYXApKSBSZWdFeHBQcm90b3R5cGUodm0sIHN0cnVj
dHVyZSwgcmVnRXhwKTsKKyAgICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIHJldHVybiBwcm90b3R5cGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgUmVnRXhwUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgUmVnRXhwT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShy
ZXZpc2lvbiAxNzMyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0
cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNjUgKzQ3LDY1IEBAIGNsYXNzIFN0cmluZ0lt
cGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwotICAg
IGNsYXNzIFZNOwotICAgIGNsYXNzIEpTU3RyaW5nOwotICAgIGNsYXNzIFNtYWxsU3RyaW5nc1N0
b3JhZ2U7Ci0gICAgY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKLQotICAgIGNsYXNzIFNtYWxsU3Ry
aW5ncyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsU3RyaW5ncyk7Ci0gICAg
cHVibGljOgotICAgICAgICBTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgflNtYWxsU3RyaW5ncygp
OwotCi0gICAgICAgIEpTU3RyaW5nKiBlbXB0eVN0cmluZygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2VtcHR5U3RyaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNTdHJpbmcq
IHNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJd
OwotICAgICAgICB9CitjbGFzcyBIZWFwUm9vdFZpc2l0b3I7CitjbGFzcyBWTTsKK2NsYXNzIEpT
U3RyaW5nOworY2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZTsKK2NsYXNzIFNsb3RWaXNpdG9yOwor
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsK
KworY2xhc3MgU21hbGxTdHJpbmdzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbWFsbFN0
cmluZ3MpOworcHVibGljOgorICAgIFNtYWxsU3RyaW5ncygpOworICAgIH5TbWFsbFN0cmluZ3Mo
KTsKKworICAgIEpTU3RyaW5nKiBlbXB0eVN0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4g
bV9lbXB0eVN0cmluZzsKKyAgICB9CisKKyAgICBKU1N0cmluZyogc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdOworICAgIH0KIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBXVEY6OlN0cmluZ0ltcGwqIHNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNp
Z25lZCBjaGFyIGNoYXJhY3Rlcik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV1RGOjpTdHJpbmdJ
bXBsKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpOwog
Ci0gICAgICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZt
X3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KKyAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJh
Y3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAK
LSAgICAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgICAgICB2b2lk
IHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlhbGl6
ZUNvbW1vblN0cmluZ3MoVk0mKTsKKyAgICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90
VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklU
SU9OKG5hbWUpIFwKLSAgICAgICAgSlNTdHJpbmcqIG5hbWUjI1N0cmluZygpIGNvbnN0IFwKLSAg
ICAgICAgeyBcCi0gICAgICAgICAgICByZXR1cm4gbV8jI25hbWU7IFwKLSAgICAgICAgfQotICAg
ICAgICBKU0NfQ09NTU9OX1NUUklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05fU1RSSU5HU19BQ0NF
U1NPUl9ERUZJTklUSU9OKQorICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAg
ICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIG1fIyNuYW1lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0KKyAgICBKU0NfQ09NTU9OX1NUUklOR1NfRUFDSF9OQU1FKEpT
Q19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKQogI3VuZGVmIEpTQ19DT01NT05f
U1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OCiAKLSAgICAgICAgSlNTdHJpbmcqIG51bGxPYmpl
Y3RTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX251bGxPYmplY3RTdHJpbmc7IH0KLSAgICAgICAg
SlNTdHJpbmcqIHVuZGVmaW5lZE9iamVjdFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZWZp
bmVkT2JqZWN0U3RyaW5nOyB9CisgICAgSlNTdHJpbmcqIG51bGxPYmplY3RTdHJpbmcoKSBjb25z
dCB7IHJldHVybiBtX251bGxPYmplY3RTdHJpbmc7IH0KKyAgICBKU1N0cmluZyogdW5kZWZpbmVk
T2JqZWN0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV91bmRlZmluZWRPYmplY3RTdHJpbmc7IH0K
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaW5nbGVDaGFy
YWN0ZXJTdHJpbmdDb3VudCA9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyArIDE7Citwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudCA9
IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyArIDE7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhWTSopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhWTSosIHVuc2lnbmVkIGNoYXIpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmcoVk0qKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhWTSosIHVu
c2lnbmVkIGNoYXIpOwogCi0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShWTSogdm0sIEpTU3RyaW5n
KiYgc3RyaW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkgY29uc3Q7CisgICAgdm9pZCBpbml0aWFsaXpl
KFZNKiwgSlNTdHJpbmcqJiwgY29uc3QgY2hhciogdmFsdWUpIGNvbnN0OwogCi0gICAgICAgIEpT
U3RyaW5nKiBtX2VtcHR5U3RyaW5nOworICAgIEpTU3RyaW5nKiBtX2VtcHR5U3RyaW5nOwogI2Rl
ZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0RFQ0xBUkFUSU9OKG5hbWUpIEpTU3Ry
aW5nKiBtXyMjbmFtZTsKLSAgICAgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0Nf
Q09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0RFQ0xBUkFUSU9OKQorICAgIEpTQ19DT01NT05fU1RS
SU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9ERUNMQVJBVElPTikK
ICN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0RFQ0xBUkFUSU9OCi0gICAgICAg
IEpTU3RyaW5nKiBtX251bGxPYmplY3RTdHJpbmc7Ci0gICAgICAgIEpTU3RyaW5nKiBtX3VuZGVm
aW5lZE9iamVjdFN0cmluZzsKLSAgICAgICAgSlNTdHJpbmcqIG1fc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nc1tzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudF07Ci0gICAgICAgIE93blB0cjxTbWFsbFN0
cmluZ3NTdG9yYWdlPiBtX3N0b3JhZ2U7Ci0gICAgfTsKKyAgICBKU1N0cmluZyogbV9udWxsT2Jq
ZWN0U3RyaW5nOworICAgIEpTU3RyaW5nKiBtX3VuZGVmaW5lZE9iamVjdFN0cmluZzsKKyAgICBK
U1N0cmluZyogbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW3NpbmdsZUNoYXJhY3RlclN0cmluZ0Nv
dW50XTsKKyAgICBPd25QdHI8U21hbGxTdHJpbmdzU3RvcmFnZT4gbV9zdG9yYWdlOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMzkgKzI1LDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgU3Ry
aW5nUHJvdG90eXBlOworY2xhc3MgU3RyaW5nUHJvdG90eXBlOwogCi0gICAgY2xhc3MgU3RyaW5n
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKLQotICAgICAgICBzdGF0aWMgU3Ry
aW5nQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJp
bmdQcm90b3R5cGUqIHN0cmluZ1Byb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgU3Ry
aW5nQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
U3RyaW5nQ29uc3RydWN0b3I+KHZtLmhlYXApKSBTdHJpbmdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgc3RyaW5n
UHJvdG90eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICAgICAgfQot
Ci0gICAgICAgIERFQ0xBUkVfSU5GTzsKLQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgU3RyaW5nQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cmluZ1Byb3RvdHlwZSopOwotICAgICAg
ICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmKTsKLSAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CitjbGFzcyBTdHJpbmdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAg
IHN0YXRpYyBTdHJpbmdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cmluZ1Byb3RvdHlwZSogc3RyaW5nUHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
U3RyaW5nQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8U3RyaW5nQ29uc3RydWN0b3I+KHZtLmhlYXApKSBTdHJpbmdDb25zdHJ1Y3Rvcih2bSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBzdHJpbmdQ
cm90b3R5cGUpOworICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3Ry
dWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nQ29uc3RydWN0b3IoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RyaW5nUHJvdG90eXBlKik7
CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CiAKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB9Owor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cit9OwogICAgIAotICAgIEpTQ2VsbCogSlND
X0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiwgaW50MzJfdCk7CitKU0Nl
bGwqIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
MCArMjYsNjAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBTdHJpbmdPYmplY3Qg
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYg
SlNXcmFwcGVyT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBqc0VtcHR5U3RyaW5nKCZ2bSk7Ci0gICAgICAgICAgICBTdHJp
bmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVj
dD4odm0uaGVhcCkpIFN0cmluZ09iamVjdCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG9i
amVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cmluZyk7Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1N0cmluZyogc3RyaW5nKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFN0cmluZ09iamVjdD4odm0uaGVhcCkpIFN0cmluZ09iamVjdCh2bSwgc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cmluZyk7Ci0gICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBTdHJpbmdPYmpl
Y3QqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKLQotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7Ci0KLSAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgICAgICBKU1N0cmluZyog
aW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3RyaW5nKEpTV3JhcHBlck9iamVjdDo6
aW50ZXJuYWxWYWx1ZSgpKTt9Ci0KLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICAgICAgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTdHJpbmcqKTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBw
ZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJp
bmdPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB9OworY2xhc3MgU3RyaW5nT2JqZWN0IDog
cHVibGljIEpTV3JhcHBlck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU1dyYXBwZXJP
YmplY3QgQmFzZTsKIAotICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3QoSlNWYWx1ZSk7
CisgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNFbXB0eVN0cmluZygm
dm0pOworICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cmluZ09iamVjdD4odm0uaGVhcCkpIFN0cmluZ09iamVjdCh2bSwgc3RydWN0dXJl
KTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RyaW5nKTsKKyAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBzdHJpbmcpCisgICAgeworICAg
ICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0
cmluZ09iamVjdD4odm0uaGVhcCkpIFN0cmluZ09iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyopOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIGlubGluZSBTdHJpbmdPYmplY3QqIGFz
U3RyaW5nT2JqZWN0KEpTVmFsdWUgdmFsdWUpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBKU1N0cmluZyogaW50ZXJu
YWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3RyaW5nKEpTV3JhcHBlck9iamVjdDo6aW50ZXJu
YWxWYWx1ZSgpKTt9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKFN0cmluZ09iamVj
dDo6aW5mbygpKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPihh
c09iamVjdCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nT2JqZWN0
KiBjb25zdHJ1Y3RTdHJpbmcoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworcHJvdGVj
dGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1N0
cmluZyopOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBT
dHJpbmdPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKK307CisKK1N0cmluZ09iamVjdCogYXNTdHJp
bmdPYmplY3QoSlNWYWx1ZSk7CisKK2lubGluZSBTdHJpbmdPYmplY3QqIGFzU3RyaW5nT2JqZWN0
KEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMo
U3RyaW5nT2JqZWN0OjppbmZvKCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKK30KKworSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nT2Jq
ZWN0KiBjb25zdHJ1Y3RTdHJpbmcoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDE3MzI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwyOSArMjUsMjggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBPYmplY3RQcm90
b3R5cGU7CitjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKLSAgICBjbGFzcyBTdHJpbmdQcm90b3R5
cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKLSAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmdQ
cm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKK2NsYXNzIFN0cmluZ1Byb3RvdHlwZSA6IHB1Ymxp
YyBTdHJpbmdPYmplY3QgeworcHJpdmF0ZToKKyAgICBTdHJpbmdQcm90b3R5cGUoVk0mLCBTdHJ1
Y3R1cmUqKTsKIAotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBTdHJpbmdPYmplY3QgQmFz
ZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFN0cmluZ09iamVjdCBCYXNlOwogCi0gICAgICAgIHN0
YXRpYyBTdHJpbmdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CisgICAgc3RhdGljIFN0cmluZ1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQogCi0gICAgICAgIERFQ0xBUkVfSU5GTzsKLSAgICAgICAg
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyopOwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBTdHJpbmdPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgIERFQ0xBUkVf
SU5GTzsKIAotICAgIH07Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBTdHJpbmdPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTczMjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNTgg
KzM3LDU4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwotICAgIGNsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKK2NsYXNzIFN0cnVjdHVyZTsKIAotICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluIDogcHVibGlj
IEpTQ2VsbCB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CitjbGFzcyBTdHJ1Y3R1cmVDaGFp
biA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogaGVhZCkKLSAgICAgICAgeyAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPih2bS5o
ZWFwKSkgU3RydWN0dXJlQ2hhaW4odm0sIHZtLnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgp
KTsKLSAgICAgICAgICAgIGNoYWluLT5maW5pc2hDcmVhdGlvbih2bSwgaGVhZCk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2hhaW47Ci0gICAgICAgIH0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4qIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIERFQ0xBUkVfSU5GTzsKLQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1t
b3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOwotICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIGhlYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gMDsK
LSAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gaGVhZDsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0
KGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpKS0+c3RydWN0dXJlKCkpCi0gICAgICAgICAgICAg
ICAgKytzaXplOwotICAgIAotICAgICAgICAgICAgbV92ZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+W10+KHNpemUgKyAxKTsKLQotICAgICAgICAgICAgc2l6
ZV90IGkgPSAwOwotICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAw
IDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgICAgICAgICBtX3ZlY3RvcltpKytdLnNldCh2bSwgdGhpcywgY3VycmVudCk7Ci0gICAg
ICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbihWTSYsIFN0cnVjdHVy
ZSopOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT5bXT4g
bV92ZWN0b3I7Ci0gICAgfTsKKyAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogaGVhZCkKKyAgICB7IAorICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVDaGFpbj4odm0uaGVhcCkp
IFN0cnVjdHVyZUNoYWluKHZtLCB2bS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIGNoYWluLT5maW5pc2hDcmVhdGlvbih2bSwgaGVhZCk7CisgICAgICAgIHJldHVybiBj
aGFpbjsKKyAgICB9CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGhlYWQoKSB7IHJldHVy
biBtX3ZlY3Rvci5nZXQoKTsgfQorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRh
bFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBoZWFkKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50
ID0gaGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpLmlz
TnVsbCgpID8gMCA6IGFzT2JqZWN0KGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpKS0+c3RydWN0
dXJlKCkpCisgICAgICAgICAgICArK3NpemU7CisKKyAgICAgICAgbV92ZWN0b3IgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+W10+KHNpemUgKyAxKTsKKworICAgICAg
ICBzaXplX3QgaSA9IDA7CisgICAgICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gaGVhZDsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpID8g
MCA6IGFzT2JqZWN0KGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpKS0+c3RydWN0dXJlKCkpCisg
ICAgICAgICAgICBtX3ZlY3RvcltpKytdLnNldCh2bSwgdGhpcywgY3VycmVudCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAg
ICBTdHJ1Y3R1cmVDaGFpbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPltdPiBtX3ZlY3RvcjsKK307CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3MzI0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDUzNCArNzAsNTM0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3M7Ci0gICAgY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwot
ICAgIGNsYXNzIENhbGxFZGdlTG9nOwotICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBD
b2RlQ2FjaGU7Ci0gICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7Ci0gICAgY2xhc3MgRXhlY1N0
YXRlOwotICAgIGNsYXNzIEhhbmRsZVN0YWNrOwotICAgIGNsYXNzIFR5cGVQcm9maWxlcjsKLSAg
ICBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7Ci0gICAgY2xhc3MgSWRlbnRpZmllcjsKLSAgICBjbGFz
cyBJbnRlcnByZXRlcjsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFzcyBKU09i
amVjdDsKLSAgICBjbGFzcyBLZXl3b3JkczsKLSAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci0gICAgY2xhc3MgTGVnYWN5UHJvZmlsZXI7Ci0gICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJs
ZTsKLSAgICBjbGFzcyBQYXJzZXJBcmVuYTsKLSAgICBjbGFzcyBSZWdFeHBDYWNoZTsKLSAgICBj
bGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwotICAgIGNs
YXNzIFNvdXJjZVByb3ZpZGVyQ2FjaGU7Ci0gICAgc3RydWN0IFN0YWNrRnJhbWU7Ci0gICAgY2xh
c3MgU3RyaW5naWZpZXI7Ci0gICAgY2xhc3MgU3RydWN0dXJlOworY2xhc3MgQXJpdHlDaGVja0Zh
aWxSZXR1cm5UaHVua3M7CitjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CitjbGFzcyBDYWxsRWRn
ZUxvZzsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIENvZGVDYWNoZTsKK2NsYXNzIENvbW1vbklk
ZW50aWZpZXJzOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSGFuZGxlU3RhY2s7CitjbGFzcyBU
eXBlUHJvZmlsZXI7CitjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CitjbGFzcyBJZGVudGlmaWVyOwor
Y2xhc3MgSW50ZXJwcmV0ZXI7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTT2JqZWN0
OworY2xhc3MgS2V5d29yZHM7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBM
ZWdhY3lQcm9maWxlcjsKK2NsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CitjbGFzcyBQYXJzZXJBcmVu
YTsKK2NsYXNzIFJlZ0V4cENhY2hlOworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKK2NsYXNzIFNv
dXJjZVByb3ZpZGVyOworY2xhc3MgU291cmNlUHJvdmlkZXJDYWNoZTsKK3N0cnVjdCBTdGFja0Zy
YW1lOworY2xhc3MgU3RyaW5naWZpZXI7CitjbGFzcyBTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQotICAgIGNsYXNzIFJlZ0V4cDsKK2NsYXNzIFJlZ0V4cDsKICNlbmRpZgot
ICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwotICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVC
bG9jazsKLSAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKLSAgICBjbGFzcyBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7Ci0gICAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyOwotICAg
IGNsYXNzIFZNRW50cnlTY29wZTsKLSAgICBjbGFzcyBXYXRjaHBvaW50OwotICAgIGNsYXNzIFdh
dGNocG9pbnRTZXQ7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRXZh
bENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgVmlydHVhbFJlZ2lzdGVyOworY2xhc3MgVk1F
bnRyeVNjb3BlOworY2xhc3MgV2F0Y2hwb2ludDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBuYW1lc3BhY2UgREZHIHsKLSAgICBjbGFzcyBMb25nTGl2
ZWRTdGF0ZTsKLSAgICB9CituYW1lc3BhY2UgREZHIHsKK2NsYXNzIExvbmdMaXZlZFN0YXRlOwor
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogI2lmIEVOQUJMRShGVExfSklUKQotICAgIG5h
bWVzcGFjZSBGVEwgewotICAgIGNsYXNzIFRodW5rczsKLSAgICB9CituYW1lc3BhY2UgRlRMIHsK
K2NsYXNzIFRodW5rczsKK30KICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBuYW1lc3Bh
Y2UgQ29tbW9uU2xvd1BhdGhzIHsKLSAgICBzdHJ1Y3QgQXJpdHlDaGVja0RhdGE7Ci0gICAgfQot
ICAgIG5hbWVzcGFjZSBQcm9maWxlciB7Ci0gICAgY2xhc3MgRGF0YWJhc2U7CituYW1lc3BhY2Ug
Q29tbW9uU2xvd1BhdGhzIHsKK3N0cnVjdCBBcml0eUNoZWNrRGF0YTsKK30KK25hbWVzcGFjZSBQ
cm9maWxlciB7CitjbGFzcyBEYXRhYmFzZTsKK30KKworc3RydWN0IEhhc2hUYWJsZTsKK3N0cnVj
dCBJbnN0cnVjdGlvbjsKKworc3RydWN0IExvY2FsVGltZU9mZnNldENhY2hlIHsKKyAgICBMb2Nh
bFRpbWVPZmZzZXRDYWNoZSgpCisgICAgICAgIDogc3RhcnQoMC4wKQorICAgICAgICAsIGVuZCgt
MS4wKQorICAgICAgICAsIGluY3JlbWVudCgwLjApCisgICAgewogICAgIH0KIAotICAgIHN0cnVj
dCBIYXNoVGFibGU7Ci0gICAgc3RydWN0IEluc3RydWN0aW9uOwotCi0gICAgc3RydWN0IExvY2Fs
VGltZU9mZnNldENhY2hlIHsKLSAgICAgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUoKQotICAgICAg
ICAgICAgOiBzdGFydCgwLjApCi0gICAgICAgICAgICAsIGVuZCgtMS4wKQotICAgICAgICAgICAg
LCBpbmNyZW1lbnQoMC4wKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXQgPSBMb2NhbFRpbWVP
ZmZzZXQoKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gMC4wOwotICAgICAgICAgICAgZW5kID0gLTEu
MDsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IDAuMDsKLSAgICAgICAgfQorICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ID0gTG9jYWxUaW1lT2Zmc2V0KCk7CisgICAgICAg
IHN0YXJ0ID0gMC4wOworICAgICAgICBlbmQgPSAtMS4wOworICAgICAgICBpbmNyZW1lbnQgPSAw
LjA7CisgICAgfQogCi0gICAgICAgIExvY2FsVGltZU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGRv
dWJsZSBzdGFydDsKLSAgICAgICAgZG91YmxlIGVuZDsKLSAgICAgICAgZG91YmxlIGluY3JlbWVu
dDsKLSAgICB9OworICAgIExvY2FsVGltZU9mZnNldCBvZmZzZXQ7CisgICAgZG91YmxlIHN0YXJ0
OworICAgIGRvdWJsZSBlbmQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CiAKLSAgICBjbGFz
cyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogCiAjaWYgQ09N
UElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhwdXNoKQogI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQyMDApIC8vIERpc2FibGUgInplcm8tc2l6ZWQgYXJyYXkgaW4gc3RydWN0L3VuaW9uIiB3
YXJuaW5nCiAjZW5kaWYKLSAgICBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7Ci0gICAgICAgIFNjcmF0
Y2hCdWZmZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1Lm1fYWN0aXZlTGVuZ3RoID0gMDsK
LSAgICAgICAgfQorc3RydWN0IFNjcmF0Y2hCdWZmZXIgeworICAgIFNjcmF0Y2hCdWZmZXIoKQor
ICAgIHsKKyAgICAgICAgdS5tX2FjdGl2ZUxlbmd0aCA9IDA7CisgICAgfQogCi0gICAgICAgIHN0
YXRpYyBTY3JhdGNoQnVmZmVyKiBjcmVhdGUoc2l6ZV90IHNpemUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IG5ldyAoZmFzdE1hbGxvYyhTY3JhdGNoQnVm
ZmVyOjphbGxvY2F0aW9uU2l6ZShzaXplKSkpIFNjcmF0Y2hCdWZmZXI7CisgICAgc3RhdGljIFNj
cmF0Y2hCdWZmZXIqIGNyZWF0ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIFNjcmF0Y2hC
dWZmZXIqIHJlc3VsdCA9IG5ldyAoZmFzdE1hbGxvYyhTY3JhdGNoQnVmZmVyOjphbGxvY2F0aW9u
U2l6ZShzaXplKSkpIFNjcmF0Y2hCdWZmZXI7CiAKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgICAgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1cm4gc2l6
ZW9mKFNjcmF0Y2hCdWZmZXIpICsgYnVmZmVyU2l6ZTsgfQotICAgICAgICB2b2lkIHNldEFjdGl2
ZUxlbmd0aChzaXplX3QgYWN0aXZlTGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBhY3RpdmVM
ZW5ndGg7IH0KLSAgICAgICAgc2l6ZV90IGFjdGl2ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHUu
bV9hY3RpdmVMZW5ndGg7IH07Ci0gICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRyKCkgeyBy
ZXR1cm4gJnUubV9hY3RpdmVMZW5ndGg7IH07Ci0gICAgICAgIHZvaWQqIGRhdGFCdWZmZXIoKSB7
IHJldHVybiBtX2J1ZmZlcjsgfQotCi0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIHNpemVf
dCBtX2FjdGl2ZUxlbmd0aDsKLSAgICAgICAgICAgIGRvdWJsZSBwYWQ7IC8vIE1ha2Ugc3VyZSBt
X2J1ZmZlciBpcyBkb3VibGUgYWxpZ25lZC4KLSAgICAgICAgfSB1OworICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IGJ1ZmZlclNpemUpIHsgcmV0dXJuIHNpemVvZihTY3Jh
dGNoQnVmZmVyKSArIGJ1ZmZlclNpemU7IH0KKyAgICB2b2lkIHNldEFjdGl2ZUxlbmd0aChzaXpl
X3QgYWN0aXZlTGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBhY3RpdmVMZW5ndGg7IH0KKyAg
ICBzaXplX3QgYWN0aXZlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdS5tX2FjdGl2ZUxlbmd0aDsg
fTsKKyAgICBzaXplX3QqIGFjdGl2ZUxlbmd0aFB0cigpIHsgcmV0dXJuICZ1Lm1fYWN0aXZlTGVu
Z3RoOyB9OworICAgIHZvaWQqIGRhdGFCdWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQorCisg
ICAgdW5pb24geworICAgICAgICBzaXplX3QgbV9hY3RpdmVMZW5ndGg7CisgICAgICAgIGRvdWJs
ZSBwYWQ7IC8vIE1ha2Ugc3VyZSBtX2J1ZmZlciBpcyBkb3VibGUgYWxpZ25lZC4KKyAgICB9IHU7
CiAjaWYgQ1BVKE1JUFMpICYmIChkZWZpbmVkIFdURl9NSVBTX0FSQ0hfUkVWICYmIFdURl9NSVBT
X0FSQ0hfUkVWID09IDIpCi0gICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdIF9fYXR0cmlidXRlX18o
KGFsaWduZWQoOCkpKTsKKyAgICB2b2lkKiBtX2J1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGln
bmVkKDgpKSk7CiAjZWxzZQotICAgICAgICB2b2lkKiBtX2J1ZmZlclswXTsKKyAgICB2b2lkKiBt
X2J1ZmZlclswXTsKICNlbmRpZgotICAgIH07Cit9OwogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJh
Z21hIHdhcm5pbmcocG9wKQogI2VuZGlmCiAKLSAgICBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxWTT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gV2ViQ29yZSBoYXMg
YSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7Ci0gICAgICAgIC8vIGVpdGhl
ciBjcmVhdGUoKSBvciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQot
ICAgICAgICAvLyBvbiBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIFZNIChpdCB1c2Vz
IHRoZQotICAgICAgICAvLyB0aHJlYWQncyBkZWZhdWx0IHN0cmluZyB1bmlxdWluZyB0YWJsZSBm
cm9tIHd0ZlRocmVhZERhdGEpLgotICAgICAgICAvLyBBUEkgY29udGV4dHMgY3JlYXRlZCB1c2lu
ZyB0aGUgbmV3IGNvbnRleHQgZ3JvdXAgYXdhcmUgaW50ZXJmYWNlCi0gICAgICAgIC8vIGNyZWF0
ZSBBUElDb250ZXh0R3JvdXAgb2JqZWN0cyB3aGljaCByZXF1aXJlIGxlc3MgbG9ja2luZyBvZiBK
U0MKLSAgICAgICAgLy8gdGhhbiB0aGUgb2xkIHNpbmdsZXRvbiBBUElTaGFyZWQgVk0gY3JlYXRl
ZCBmb3IgdXNlIGJ5Ci0gICAgICAgIC8vIHRoZSBvcmlnaW5hbCBBUEkuCi0gICAgICAgIGVudW0g
Vk1UeXBlIHsgRGVmYXVsdCwgQVBJQ29udGV4dEdyb3VwLCBBUElTaGFyZWQgfTsKLSAgICAgICAg
Ci0gICAgICAgIHN0cnVjdCBDbGllbnREYXRhIHsKLSAgICAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgfkNsaWVudERhdGEoKSA9IDA7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYm9v
bCBpc1NoYXJlZEluc3RhbmNlKCkgeyByZXR1cm4gdm1UeXBlID09IEFQSVNoYXJlZDsgfQotICAg
ICAgICBib29sIHVzaW5nQVBJKCkgeyByZXR1cm4gdm1UeXBlICE9IERlZmF1bHQ7IH0KLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2hhcmVkSW5zdGFuY2VFeGlzdHMoKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFZNJiBzaGFyZWRJbnN0YW5jZSgpOwot
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVhdGUo
SGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
UGFzc1JlZlB0cjxWTT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IFNt
YWxsSGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwotCi0gICAgICAgIHZv
aWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMo
KS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9Ci0gICAgICAgIAotICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKK2NsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiB7CitwdWJsaWM6CisgICAgLy8gV2ViQ29yZSBoYXMg
YSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CisgICAgLy8gZWl0aGVyIGNy
ZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCisgICAg
Ly8gb24gYSB0aHJlYWQsIHRoaXMgaXMgdGhlICdkZWZhdWx0JyBWTSAoaXQgdXNlcyB0aGUKKyAg
ICAvLyB0aHJlYWQncyBkZWZhdWx0IHN0cmluZyB1bmlxdWluZyB0YWJsZSBmcm9tIHd0ZlRocmVh
ZERhdGEpLgorICAgIC8vIEFQSSBjb250ZXh0cyBjcmVhdGVkIHVzaW5nIHRoZSBuZXcgY29udGV4
dCBncm91cCBhd2FyZSBpbnRlcmZhY2UKKyAgICAvLyBjcmVhdGUgQVBJQ29udGV4dEdyb3VwIG9i
amVjdHMgd2hpY2ggcmVxdWlyZSBsZXNzIGxvY2tpbmcgb2YgSlNDCisgICAgLy8gdGhhbiB0aGUg
b2xkIHNpbmdsZXRvbiBBUElTaGFyZWQgVk0gY3JlYXRlZCBmb3IgdXNlIGJ5CisgICAgLy8gdGhl
IG9yaWdpbmFsIEFQSS4KKyAgICBlbnVtIFZNVHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRHcm91
cCwgQVBJU2hhcmVkIH07CisKKyAgICBzdHJ1Y3QgQ2xpZW50RGF0YSB7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkNsaWVudERhdGEoKSA9IDA7CisgICAgfTsKKworICAgIGJv
b2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsgcmV0dXJuIHZtVHlwZSA9PSBBUElTaGFyZWQ7IH0KKyAg
ICBib29sIHVzaW5nQVBJKCkgeyByZXR1cm4gdm1UeXBlICE9IERlZmF1bHQ7IH0KKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVhdGUoSGVhcFR5cGUgPSBTbWFs
bEhlYXApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVh
dGVMZWFrZWQoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZN
PiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5WTSgpOworCisgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFk
cygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRz
KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CiAKLSAgICBw
dWJsaWM6CitwdWJsaWM6CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAgICAgLy8gZXhlY3V0
YWJsZUFsbG9jYXRvciBzaG91bGQgYmUgZGVzdHJ1Y3RlZCBhZnRlciB0aGUgaGVhcCwgYXMgdGhl
IGhlYXAgY2FuIGNhbGwgZXhlY3V0YWJsZUFsbG9jYXRvcgotICAgICAgICAvLyBpbiBpdHMgZGVz
dHJ1Y3Rvci4KLSAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIC8vIGV4ZWN1dGFibGVBbGxvY2F0b3Igc2hvdWxkIGJlIGRlc3RydWN0ZWQgYWZ0ZXIg
dGhlIGhlYXAsIGFzIHRoZSBoZWFwIGNhbiBjYWxsIGV4ZWN1dGFibGVBbGxvY2F0b3IKKyAgICAv
LyBpbiBpdHMgZGVzdHJ1Y3Rvci4KKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVB
bGxvY2F0b3I7CiAjZW5kaWYKIAotICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBh
ZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1
cmUgdGhhdCBpdCdzCi0gICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3Rz
IHRoYXQgcmVmZXJlbmNlIGl0LgotICAgICAgICBIZWFwIGhlYXA7Ci0gICAgICAgIAorICAgIC8v
IFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVBbGxvY2F0b3IgYW5kIGJl
Zm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKKyAgICAvLyBkZXN0cnVjdGVk
IGFmdGVyIGFsbCB0aGUgb2JqZWN0cyB0aGF0IHJlZmVyZW5jZSBpdC4KKyAgICBIZWFwIGhlYXA7
CisKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3Rh
dGU+IGRmZ1N0YXRlOworICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBkZmdTdGF0ZTsK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgCi0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsRWRnZUxvZz4gY2FsbEVkZ2VMb2c7Ci0gICAgICAgIENhbGxFZGdlTG9nJiBlbnN1
cmVDYWxsRWRnZUxvZygpOwotCi0gICAgICAgIFZNVHlwZSB2bVR5cGU7Ci0gICAgICAgIENsaWVu
dERhdGEqIGNsaWVudERhdGE7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1l
OwotICAgICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZTsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFdhdGNoZG9nPiB3YXRjaGRvZzsKLQotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1
Y3R1cmVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVE
YXRhU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3JTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVj
dHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7Ci0g
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOwot
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJl
OwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7Ci0gICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGN1c3RvbUdldHRlclNldHRlclN0cnVjdHVyZTsKLSAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gSlNTY29wZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
ZXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbmF0aXZlRXhl
Y3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFi
bGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxl
U3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKLSAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3ltYm9sVGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBhcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTdHJ1Y3R1cmU7Ci0gICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJl
OwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9ja1N0
cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9ja1N0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0
cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbWFwRGF0YVN0cnVjdHVyZTsKLSAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbEVkZ2VMb2c+IGNhbGxFZGdlTG9nOworICAgIENhbGxFZGdlTG9nJiBl
bnN1cmVDYWxsRWRnZUxvZygpOworCisgICAgVk1UeXBlIHZtVHlwZTsKKyAgICBDbGllbnREYXRh
KiBjbGllbnREYXRhOworICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAgIEV4
ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaGRvZz4gd2F0
Y2hkb2c7CisKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CisgICAg
U3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7CisgICAgU3Ryb25n
PFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOworICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBub3RB
bk9iamVjdFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVy
YXRvclN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRlclNldHRlclN0cnVjdHVy
ZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBjdXN0b21HZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBKU1Njb3BlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4ZWN1dGFi
bGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gbmF0aXZlRXhlY3V0YWJsZVN0cnVj
dHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFRh
YmxlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0
dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmU7
CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tT
dHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
a1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJl
OworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1hcERhdGFTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQotICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmU7Ci0gICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKKyAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwogI2VuZGlmCi0gICAgICAgIFN0cm9uZzxKU0Nl
bGw+IGl0ZXJhdGlvblRlcm1pbmF0b3I7Ci0gICAgICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJv
cGVydHlOYW1lRW51bWVyYXRvcjsKKyAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5h
dG9yOworICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAot
ICAgICAgICBBdG9taWNTdHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKLSAgICAgICAg
Q29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7Ci0gICAgICAgIGNvbnN0IE1hcmtlZEFy
Z3VtZW50QnVmZmVyKiBlbXB0eUxpc3Q7IC8vIExpc3RzIGFyZSBzdXBwb3NlZCB0byBiZSBhbGxv
Y2F0ZWQgb24gdGhlIHN0YWNrIHRvIGhhdmUgdGhlaXIgZWxlbWVudHMgcHJvcGVybHkgbWFya2Vk
LCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaGVyZSAtIGJ1dCB0aGlzIGxpc3QgaGFzIG5vdGhpbmcg
dG8gbWFyay4KLSAgICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKLSAgICAgICAgTnVt
ZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7Ci0gICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRh
dGVJbnN0YW5jZUNhY2hlOwotICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICAgICAgV2Vha0dDTWFwPFN0cmlu
Z0ltcGwqLCBKU1N0cmluZywgUHRySGFzaDxTdHJpbmdJbXBsKj4+IHN0cmluZ0NhY2hlOwotICAg
ICAgICBTdHJvbmc8SlNTdHJpbmc+IGxhc3RDYWNoZWRTdHJpbmc7Ci0KLSAgICAgICAgQXRvbWlj
U3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9hdG9taWNT
dHJpbmdUYWJsZTsgfQotCi0gICAgICAgIHZvaWQgc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShib29s
IGluRGVmaW5lT3duUHJvcGVydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5EZWZpbmVP
d25Qcm9wZXJ0eSA9IGluRGVmaW5lT3duUHJvcGVydHk7Ci0gICAgICAgIH0KKyAgICBBdG9taWNT
dHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKKyAgICBDb21tb25JZGVudGlmaWVycyog
cHJvcGVydHlOYW1lczsKKyAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciogZW1wdHlMaXN0
OyAvLyBMaXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB0byBo
YXZlIHRoZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNl
IGhlcmUgLSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRvIG1hcmsuCisgICAgU21hbGxTdHJp
bmdzIHNtYWxsU3RyaW5nczsKKyAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKKyAg
ICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNoZTsKKyAgICBXVEY6OlNpbXBsZVN0
YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKKyAgICBX
ZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTU3RyaW5nLCBQdHJIYXNoPFN0cmluZ0ltcGwqPj4gc3Ry
aW5nQ2FjaGU7CisgICAgU3Ryb25nPEpTU3RyaW5nPiBsYXN0Q2FjaGVkU3RyaW5nOwogCi0gICAg
ICAgIGJvb2wgaXNJbkRlZmluZU93blByb3BlcnR5KCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKLSAgICAgICAgfQorICAgIEF0b21pY1N0cmlu
Z1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXRvbWljU3RyaW5n
VGFibGU7IH0KKworICAgIHZvaWQgc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShib29sIGluRGVmaW5l
T3duUHJvcGVydHkpCisgICAgeworICAgICAgICBtX2luRGVmaW5lT3duUHJvcGVydHkgPSBpbkRl
ZmluZU93blByb3BlcnR5OworICAgIH0KKworICAgIGJvb2wgaXNJbkRlZmluZU93blByb3BlcnR5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luRGVmaW5lT3duUHJvcGVydHk7CisgICAgfQog
Ci0gICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVkUHJvZmlsZXIoKSB7IHJldHVybiBtX2Vu
YWJsZWRQcm9maWxlcjsgfQotICAgICAgICB2b2lkIHNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQ
cm9maWxlciopOworICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVkUHJvZmlsZXIoKSB7IHJldHVy
biBtX2VuYWJsZWRQcm9maWxlcjsgfQorICAgIHZvaWQgc2V0RW5hYmxlZFByb2ZpbGVyKExlZ2Fj
eVByb2ZpbGVyKik7CiAKLSAgICAgICAgdm9pZCogZW5hYmxlZFByb2ZpbGVyQWRkcmVzcygpIHsg
cmV0dXJuICZtX2VuYWJsZWRQcm9maWxlcjsgfQorICAgIHZvaWQqIGVuYWJsZWRQcm9maWxlckFk
ZHJlc3MoKSB7IHJldHVybiAmbV9lbmFibGVkUHJvZmlsZXI7IH0KIAogI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KKyAgICBi
b29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlSklUOyB9CiAjZWxzZQotICAgICAgICBi
b29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkKKyAg
ICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQotICAgICAgICBib29sIGNhblVzZVJlZ0V4
cEpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlUmVnRXhwSklUOyB9CisgICAgYm9vbCBjYW5Vc2VSZWdF
eHBKSVQoKSB7IHJldHVybiBtX2NhblVzZVJlZ0V4cEpJVDsgfQogI2Vsc2UKLSAgICAgICAgYm9v
bCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5
CisgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnBy
ZXRlciBvbmx5CiAjZW5kaWYKIAotICAgICAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBhZGRTb3Vy
Y2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKik7Ci0gICAgICAgIHZvaWQgY2xlYXJTb3Vy
Y2VQcm92aWRlckNhY2hlcygpOworICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFkZFNvdXJjZVBy
b3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqKTsKKyAgICB2b2lkIGNsZWFyU291cmNlUHJvdmlk
ZXJDYWNoZXMoKTsKIAotICAgICAgICBQcm90b3R5cGVNYXAgcHJvdG90eXBlTWFwOworICAgIFBy
b3RvdHlwZU1hcCBwcm90b3R5cGVNYXA7CiAKLSAgICAgICAgT3duUHRyPFBhcnNlckFyZW5hPiBw
YXJzZXJBcmVuYTsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4sIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPj4gU291cmNlUHJvdmlkZXJDYWNoZU1hcDsK
LSAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZU1hcCBzb3VyY2VQcm92aWRlckNhY2hlTWFwOwot
ICAgICAgICBPd25QdHI8S2V5d29yZHM+IGtleXdvcmRzOwotICAgICAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXI7CisgICAgT3duUHRyPFBhcnNlckFyZW5hPiBwYXJzZXJBcmVuYTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyQ2FjaGU+PiBTb3VyY2VQcm92aWRlckNhY2hlTWFwOworICAgIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVNYXAgc291cmNlUHJvdmlkZXJDYWNoZU1hcDsKKyAgICBPd25QdHI8S2V5d29yZHM+IGtleXdv
cmRzOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQotICAg
ICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKLSAg
ICAgICAgfQotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZl
RnVuY3Rpb24sIEludHJpbnNpYyk7Ci0gICAgICAgIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M+IGFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOwor
ICAgIE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOworICAgIH0KKyAgICBOYXRp
dmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyk7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M+IGFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb21tb25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhPiBhcml0eUNoZWNr
RGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0
YT4gYXJpdHlDaGVja0RhdGE7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxGVEw6OlRodW5rcz4gZnRsVGh1bmtzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGVEw6
OlRodW5rcz4gZnRsVGh1bmtzOwogI2VuZGlmCi0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdl
dEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
OworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZXhjZXB0aW9uT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihWTSwgbV9leGNlcHRpb24pOwotICAgICAgICB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBleGNlcHRpb25PZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWTSwgbV9leGNlcHRpb24pOworICAgIH0KIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZt
RW50cnlGcmFtZUZvclRocm93T2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihWTSwgdm1FbnRyeUZyYW1lRm9yVGhyb3cpOwotICAgICAgICB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCB2bUVudHJ5RnJhbWVGb3JUaHJvd09mZnNldCgpCisgICAgewor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB2bUVudHJ5RnJhbWVGb3JUaHJvdyk7
CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wVk1FbnRyeUZyYW1lT2Zmc2V0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgdG9w
Vk1FbnRyeUZyYW1lKTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wVk1FbnRy
eUZyYW1lT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0s
IHRvcFZNRW50cnlGcmFtZSk7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgY2Fs
bEZyYW1lRm9yVGhyb3dPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZNLCBjYWxsRnJhbWVGb3JUaHJvdyk7Ci0gICAgICAgIH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IGNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxGcmFtZUZvclRocm93KTsKKyAgICB9CiAKLSAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvd09mZnNldCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93KTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdGFyZ2V0
TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIH0KIAotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb25TdGFjaygpOwotICAgICAgICB2b2lkIGdldEV4
Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFt
ZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25JbmZvKEpTVmFs
dWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFj
ayk7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRp
b247IH0KLSAgICAgICAgSlNWYWx1ZSogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1f
ZXhjZXB0aW9uOyB9Ci0gICAgICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYg
ZXhjZXB0aW9uU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvblN0YWNrOyB9Ci0KLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUq
LCBKU1ZhbHVlKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci0gICAgICAgIAotICAgICAgICB2b2lkKiBz
dGFja1BvaW50ZXJBdFZNRW50cnkoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrUG9pbnRlckF0Vk1F
bnRyeTsgfQotICAgICAgICB2b2lkIHNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckV4Y2VwdGlvbigpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb25TdGFjaygpOworICAgIHZvaWQgZ2V0RXhjZXB0
aW9uSW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYg
ZXhjZXB0aW9uU3RhY2spOworICAgIHZvaWQgc2V0RXhjZXB0aW9uSW5mbyhKU1ZhbHVlJiBleGNl
cHRpb24sIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2spOworICAg
IEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb247IH0KKyAgICBK
U1ZhbHVlKiBhZGRyZXNzT2ZFeGNlcHRpb24oKSB7IHJldHVybiAmbV9leGNlcHRpb247IH0KKyAg
ICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9leGNlcHRpb25TdGFjazsgfQogCi0gICAgICAgIHNpemVfdCByZXNlcnZl
ZFpvbmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZXNlcnZlZFpvbmVTaXplOyB9Ci0gICAgICAg
IHNpemVfdCB1cGRhdGVSZXNlcnZlZFpvbmVTaXplKHNpemVfdCByZXNlcnZlZFpvbmVTaXplKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlv
bihFeGVjU3RhdGUqLCBKU09iamVjdCopOworCisgICAgdm9pZCogc3RhY2tQb2ludGVyQXRWTUVu
dHJ5KCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1BvaW50ZXJBdFZNRW50cnk7IH0KKyAgICB2b2lk
IHNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKik7CisKKyAgICBzaXplX3QgcmVzZXJ2ZWRa
b25lU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRab25lU2l6ZTsgfQorICAgIHNpemVf
dCB1cGRhdGVSZXNlcnZlZFpvbmVTaXplKHNpemVfdCByZXNlcnZlZFpvbmVTaXplKTsKIAogI2lm
IEVOQUJMRShGVExfSklUKQotICAgICAgICB2b2lkIHVwZGF0ZUZUTExhcmdlc3RTdGFja1NpemUo
c2l6ZV90KTsKLSAgICAgICAgdm9pZCoqIGFkZHJlc3NPZkZUTFN0YWNrTGltaXQoKSB7IHJldHVy
biAmbV9mdGxTdGFja0xpbWl0OyB9CisgICAgdm9pZCB1cGRhdGVGVExMYXJnZXN0U3RhY2tTaXpl
KHNpemVfdCk7CisgICAgdm9pZCoqIGFkZHJlc3NPZkZUTFN0YWNrTGltaXQoKSB7IHJldHVybiAm
bV9mdGxTdGFja0xpbWl0OyB9CiAjZW5kaWYKIAogI2lmICFFTkFCTEUoSklUKQotICAgICAgICB2
b2lkKiBqc1N0YWNrTGltaXQoKSB7IHJldHVybiBtX2pzU3RhY2tMaW1pdDsgfQotICAgICAgICB2
b2lkIHNldEpTU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2pzU3RhY2tMaW1pdCA9IGxpbWl0
OyB9CisgICAgdm9pZCoganNTdGFja0xpbWl0KCkgeyByZXR1cm4gbV9qc1N0YWNrTGltaXQ7IH0K
KyAgICB2b2lkIHNldEpTU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2pzU3RhY2tMaW1pdCA9
IGxpbWl0OyB9CiAjZW5kaWYKLSAgICAgICAgdm9pZCogc3RhY2tMaW1pdCgpIHsgcmV0dXJuIG1f
c3RhY2tMaW1pdDsgfQotICAgICAgICB2b2lkKiogYWRkcmVzc09mU3RhY2tMaW1pdCgpIHsgcmV0
dXJuICZtX3N0YWNrTGltaXQ7IH0KKyAgICB2b2lkKiBzdGFja0xpbWl0KCkgeyByZXR1cm4gbV9z
dGFja0xpbWl0OyB9CisgICAgdm9pZCoqIGFkZHJlc3NPZlN0YWNrTGltaXQoKSB7IHJldHVybiAm
bV9zdGFja0xpbWl0OyB9CiAKLSAgICAgICAgYm9vbCBpc1NhZmVUb1JlY3Vyc2Uoc2l6ZV90IG5l
ZWRlZFN0YWNrSW5CeXRlcyA9IDApIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCh3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKLSAgICAgICAg
ICAgIGludDhfdCogY3VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJmN1cnIpOwotICAg
ICAgICAgICAgaW50OF90KiBsaW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4obV9zdGFj
a0xpbWl0KTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0ICYmIHN0YXRpY19jYXN0
PHNpemVfdD4oY3VyciAtIGxpbWl0KSA+PSBuZWVkZWRTdGFja0luQnl0ZXM7Ci0gICAgICAgIH0K
KyAgICBib29sIGlzU2FmZVRvUmVjdXJzZShzaXplX3QgbmVlZGVkU3RhY2tJbkJ5dGVzID0gMCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5pc0dy
b3dpbmdEb3dud2FyZCgpKTsKKyAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQ4X3QqPigmY3Vycik7CisgICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9j
YXN0PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7CisgICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0
ICYmIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyciAtIGxpbWl0KSA+PSBuZWVkZWRTdGFja0luQnl0
ZXM7CisgICAgfQogCi0gICAgICAgIHZvaWQqIGxhc3RTdGFja1RvcCgpIHsgcmV0dXJuIG1fbGFz
dFN0YWNrVG9wOyB9Ci0gICAgICAgIHZvaWQgc2V0TGFzdFN0YWNrVG9wKHZvaWQqIGxhc3RTdGFj
a1RvcCkgeyBtX2xhc3RTdGFja1RvcCA9IGxhc3RTdGFja1RvcDsgfQorICAgIHZvaWQqIGxhc3RT
dGFja1RvcCgpIHsgcmV0dXJuIG1fbGFzdFN0YWNrVG9wOyB9CisgICAgdm9pZCBzZXRMYXN0U3Rh
Y2tUb3Aodm9pZCogbGFzdFN0YWNrVG9wKSB7IG1fbGFzdFN0YWNrVG9wID0gbGFzdFN0YWNrVG9w
OyB9CiAKLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0FycmF5Q2xhc3NJbmZvOwot
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGpzRmluYWxPYmplY3RDbGFzc0luZm87Cisg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0FycmF5Q2xhc3NJbmZvOworICAgIGNvbnN0IENs
YXNzSW5mbyogY29uc3QganNGaW5hbE9iamVjdENsYXNzSW5mbzsKIAotICAgICAgICBKU1ZhbHVl
IGhvc3RDYWxsUmV0dXJuVmFsdWU7Ci0gICAgICAgIEV4ZWNTdGF0ZSogbmV3Q2FsbEZyYW1lUmV0
dXJuVmFsdWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lRm9yVGhyb3c7Ci0g
ICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lRm9yVGhyb3c7Ci0gICAgICAgIHZvaWQqIHRhcmdl
dE1hY2hpbmVQQ0ZvclRocm93OwotICAgICAgICBJbnN0cnVjdGlvbiogdGFyZ2V0SW50ZXJwcmV0
ZXJQQ0ZvclRocm93OwotICAgICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7Ci0gICAgICAgIHZv
aWQqIG9zckV4aXRKdW1wRGVzdGluYXRpb247Ci0gICAgICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVy
Kj4gc2NyYXRjaEJ1ZmZlcnM7Ci0gICAgICAgIHNpemVfdCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZl
cjsKLSAgICAgICAgCi0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNpemUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzaXplID4g
c2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFn
YWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZwotICAgICAgICAg
ICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5p
bmcgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29t
ZXdoZXJlIGFyb3VuZAotICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXpl
KSAqIDQuCi0gICAgICAgICAgICAgICAgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgPSBzaXplICog
MjsKLQotICAgICAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIG5ld0J1ZmZlciA9IFNjcmF0Y2hC
dWZmZXI6OmNyZWF0ZShzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobmV3QnVmZmVyKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVy
cy5hcHBlbmQobmV3QnVmZmVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2NyYXRj
aEJ1ZmZlciogcmVzdWx0ID0gc2NyYXRjaEJ1ZmZlcnMubGFzdCgpOwotICAgICAgICAgICAgcmVz
dWx0LT5zZXRBY3RpdmVMZW5ndGgoMCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9CisgICAgSlNWYWx1ZSBob3N0Q2FsbFJldHVyblZhbHVlOworICAgIEV4ZWNTdGF0ZSog
bmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWU7CisgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWVG
b3JUaHJvdzsKKyAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZUZvclRocm93OworICAgIHZvaWQqIHRh
cmdldE1hY2hpbmVQQ0ZvclRocm93OworICAgIEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRl
clBDRm9yVGhyb3c7CisgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4OworICAgIHZvaWQqIG9zckV4
aXRKdW1wRGVzdGluYXRpb247CisgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBzY3JhdGNoQnVm
ZmVyczsKKyAgICBzaXplX3Qgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXI7CisKKyAgICBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAg
IGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChzaXplID4g
c2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5nCisgICAgICAgICAgICAv
LyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9tZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQg
dGhlCisgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3Vu
ZAorICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUpICogNC4KKyAgICAgICAg
ICAgIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyID0gc2l6ZSAqIDI7CisKKyAgICAgICAgICAgIFNj
cmF0Y2hCdWZmZXIqIG5ld0J1ZmZlciA9IFNjcmF0Y2hCdWZmZXI6OmNyZWF0ZShzaXplT2ZMYXN0
U2NyYXRjaEJ1ZmZlcik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdWZmZXIpOwor
ICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKG5ld0J1ZmZlcik7CisgICAgICAgIH0K
KworICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBzY3JhdGNoQnVmZmVycy5sYXN0KCk7
CisgICAgICAgIHJlc3VsdC0+c2V0QWN0aXZlTGVuZ3RoKDApOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAotICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CisgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYpOwogCi0gICAgICAgIFZNRW50cnlTY29wZSogZW50cnlTY29wZTsKKyAgICBW
TUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKLSAgICAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0
cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHM7CisgICAgSGFzaFNldDxKU09iamVjdCo+
IHN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHM7CiAKLSAgICAgICAgTG9jYWxUaW1l
T2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zmc2V0Q2FjaGU7Ci0gICAgICAgIAotICAgICAgICBTdHJp
bmcgY2FjaGVkRGF0ZVN0cmluZzsKLSAgICAgICAgZG91YmxlIGNhY2hlZERhdGVTdHJpbmdWYWx1
ZTsKKyAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIAotICAg
ICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0g
ICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxl
cjsKLSAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7Ci0gICAgICAgIEJ1bXBQb2lu
dGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOworICAgIFN0cmluZyBjYWNoZWREYXRlU3Ry
aW5nOworICAgIGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CisKKyAgICBPd25QdHI8UHJv
ZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgUmVmUHRyPFR5cGVk
QXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOworICAgIFJlZ0V4cENhY2hl
KiBtX3JlZ0V4cENhY2hlOworICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2Nh
dG9yOwogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgICAgICB0eXBlZGVmIExpc3RI
YXNoU2V0PFJlZ0V4cCo+IFJUVHJhY2VMaXN0OwotICAgICAgICBSVFRyYWNlTGlzdCogbV9ydFRy
YWNlTGlzdDsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZ0V4cCo+IFJUVHJhY2VMaXN0Owor
ICAgIFJUVHJhY2VMaXN0KiBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCiAKLSAgICAgICAgYm9vbCBo
YXNFeGNsdXNpdmVUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPmhhc0V4Y2x1c2l2
ZVRocmVhZCgpOyB9Ci0gICAgICAgIHN0ZDo6dGhyZWFkOjppZCBleGNsdXNpdmVUaHJlYWQoKSBj
b25zdCB7IHJldHVybiBtX2FwaUxvY2stPmV4Y2x1c2l2ZVRocmVhZCgpOyB9Ci0gICAgICAgIHZv
aWQgc2V0RXhjbHVzaXZlVGhyZWFkKHN0ZDo6dGhyZWFkOjppZCB0aHJlYWRJZCkgeyBtX2FwaUxv
Y2stPnNldEV4Y2x1c2l2ZVRocmVhZCh0aHJlYWRJZCk7IH0KKyAgICBib29sIGhhc0V4Y2x1c2l2
ZVRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+aGFzRXhjbHVzaXZlVGhyZWFkKCk7
IH0KKyAgICBzdGQ6OnRocmVhZDo6aWQgZXhjbHVzaXZlVGhyZWFkKCkgY29uc3QgeyByZXR1cm4g
bV9hcGlMb2NrLT5leGNsdXNpdmVUaHJlYWQoKTsgfQorICAgIHZvaWQgc2V0RXhjbHVzaXZlVGhy
ZWFkKHN0ZDo6dGhyZWFkOjppZCB0aHJlYWRJZCkgeyBtX2FwaUxvY2stPnNldEV4Y2x1c2l2ZVRo
cmVhZCh0aHJlYWRJZCk7IH0KIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2V0
RGF0ZUNhY2hlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNldERhdGVDYWNoZSgp
OwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTYW1wbGluZygpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3BTYW1wbGluZygpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAg
ICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0K
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0U2FtcGxpbmcoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHN0b3BTYW1wbGluZygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKik7CisgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENh
Y2hlKCkgeyByZXR1cm4gbV9yZWdFeHBDYWNoZTsgfQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKLSAgICAgICAgdm9pZCBhZGRSZWdFeHBUb1RyYWNlKFJlZ0V4cCopOworICAgIHZvaWQgYWRk
UmVnRXhwVG9UcmFjZShSZWdFeHAqKTsKICNlbmRpZgotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGR1bXBSZWdFeHBUcmFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVt
cFJlZ0V4cFRyYWNlKCk7CiAKLSAgICAgICAgYm9vbCBpc0NvbGxlY3RvckJ1c3koKSB7IHJldHVy
biBoZWFwLmlzQnVzeSgpOyB9Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoKTsKKyAgICBib29sIGlzQ29sbGVjdG9yQnVzeSgpIHsgcmV0dXJu
IGhlYXAuaXNCdXN5KCk7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KCk7CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgYm9v
bCBpc0luaXRpYWxpemluZ09iamVjdCgpIGNvbnN0OyAKLSAgICAgICAgdm9pZCBzZXRJbml0aWFs
aXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qKTsKKyAgICBib29sIGlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkgY29uc3Q7IAorICAgIHZvaWQgc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3Mo
Y29uc3QgQ2xhc3NJbmZvKik7CiAjZW5kaWYKIAotICAgICAgICB1bnNpZ25lZCBtX25ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29uczsKKyAgICB1bnNpZ25lZCBtX25ld1N0cmluZ3NTaW5jZUxhc3RI
YXNoQ29uczsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21pbk51bWJlck9mTmV3U3Ry
aW5nc1RvSGFzaENvbnMgPSAxMDA7CisKKyAgICBib29sIGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9I
YXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID4gc19taW5O
dW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9CisgICAgdm9pZCByZXNldE5ld1N0cmluZ3NT
aW5jZUxhc3RIYXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAwOyB9
CisKKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgY29uc3QgeyByZXR1
cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOyB9CisKKyAgICBKU0xv
Y2smIGFwaUxvY2soKSB7IHJldHVybiAqbV9hcGlMb2NrOyB9CisgICAgQ29kZUNhY2hlKiBjb2Rl
Q2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5nZXQoKTsgfQorCisgICAgdm9pZCB3YWl0Rm9y
Q29tcGlsYXRpb25zVG9Db21wbGV0ZSgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
aXNjYXJkQWxsQ29kZSgpOworCisgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIC8vIEZJWE1FOiBV
c2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsK
KworICAgIEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4g
bV9idWlsdGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0KKworICAgIGJvb2wgZW5hYmxlVHlwZVByb2Zp
bGVyKCk7CisgICAgYm9vbCBkaXNhYmxlVHlwZVByb2ZpbGVyKCk7CisgICAgVHlwZVByb2ZpbGVy
TG9nKiB0eXBlUHJvZmlsZXJMb2coKSB7IHJldHVybiBtX3R5cGVQcm9maWxlckxvZy5nZXQoKTsg
fQorICAgIFR5cGVQcm9maWxlciogdHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV90eXBlUHJvZmls
ZXIuZ2V0KCk7IH0KKyAgICBUeXBlTG9jYXRpb24qIG5leHRUeXBlTG9jYXRpb24oKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBUeXBlUHJvZmlsZXJEYXRhKCk7CisgICAgdm9pZCBp
bnZhbGlkYXRlVHlwZVNldENhY2hlKCk7CisgICAgR2xvYmFsVmFyaWFibGVJRCBnZXROZXh0VW5p
cXVlVmFyaWFibGVJRCgpIHsgcmV0dXJuIG1fbmV4dFVuaXF1ZVZhcmlhYmxlSUQrKzsgfQogCi0g
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFz
aENvbnMgPSAxMDA7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIENsZWFyRXhjZXB0aW9uU2NvcGU7CisgICAgZnJpZW5k
IGNsYXNzIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZTsKIAotICAgICAgICBib29sIGhhdmVFbm91
Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhh
c2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9Ci0gICAgICAgIHZv
aWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3RyaW5nc1NpbmNl
TGFzdEhhc2hDb25zID0gMDsgfQotCi0gICAgICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCk7IH0KLQotICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVybiAqbV9hcGlM
b2NrOyB9Ci0gICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hlKCkgeyByZXR1cm4gbV9jb2RlQ2Fj
aGUuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHdhaXRGb3JDb21waWxhdGlvbnNUb0NvbXBsZXRl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxD
b2RlKCk7Ci0KLSAgICAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0
eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOwotICAgICAgICAvLyBGSVhNRTogVXNl
IEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYp
OwotICAgICAgICAKLSAgICAgICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJs
ZXMoKSB7IHJldHVybiBtX2J1aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQotCi0gICAgICAgIGJv
b2wgZW5hYmxlVHlwZVByb2ZpbGVyKCk7Ci0gICAgICAgIGJvb2wgZGlzYWJsZVR5cGVQcm9maWxl
cigpOwotICAgICAgICBUeXBlUHJvZmlsZXJMb2cqIHR5cGVQcm9maWxlckxvZygpIHsgcmV0dXJu
IG1fdHlwZVByb2ZpbGVyTG9nLmdldCgpOyB9Ci0gICAgICAgIFR5cGVQcm9maWxlciogdHlwZVBy
b2ZpbGVyKCkgeyByZXR1cm4gbV90eXBlUHJvZmlsZXIuZ2V0KCk7IH0KLSAgICAgICAgVHlwZUxv
Y2F0aW9uKiBuZXh0VHlwZUxvY2F0aW9uKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcFR5cGVQcm9maWxlckRhdGEoKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlVHlwZVNl
dENhY2hlKCk7Ci0gICAgICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2V0TmV4dFVuaXF1ZVZhcmlhYmxl
SUQoKSB7IHJldHVybiBtX25leHRVbmlxdWVWYXJpYWJsZUlEKys7IH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlOwotICAgICAgICBmcmllbmQgY2xhc3MgUmVj
dXJzaXZlQWxsb2NhdGlvblNjb3BlOwotICAgICAgICAKLSAgICAgICAgVk0oVk1UeXBlLCBIZWFw
VHlwZSk7Ci0gICAgICAgIHN0YXRpYyBWTSomIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKLSAg
ICAgICAgdm9pZCBjcmVhdGVOYXRpdmVUaHVuaygpOworICAgIFZNKFZNVHlwZSwgSGVhcFR5cGUp
OworICAgIHN0YXRpYyBWTSomIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKKyAgICB2b2lkIGNy
ZWF0ZU5hdGl2ZVRodW5rKCk7CiAKLSAgICAgICAgdm9pZCB1cGRhdGVTdGFja0xpbWl0KCk7Cisg
ICAgdm9pZCB1cGRhdGVTdGFja0xpbWl0KCk7CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAg
ICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOworICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7
CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBib29sIG1fY2FuVXNlSklUOworICAg
IGJvb2wgbV9jYW5Vc2VKSVQ7CiAjZW5kaWYKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAg
IGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7CisgICAgYm9vbCBtX2NhblVzZVJlZ0V4cEpJVDsKICNl
bmRpZgogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBjb25zdCBDbGFzc0luZm8q
IG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRp
YWxpemluZ09iamVjdENsYXNzOwogI2VuZGlmCi0gICAgICAgIHZvaWQqIG1fc3RhY2tQb2ludGVy
QXRWTUVudHJ5OwotICAgICAgICBzaXplX3QgbV9yZXNlcnZlZFpvbmVTaXplOworICAgIHZvaWQq
IG1fc3RhY2tQb2ludGVyQXRWTUVudHJ5OworICAgIHNpemVfdCBtX3Jlc2VydmVkWm9uZVNpemU7
CiAjaWYgIUVOQUJMRShKSVQpCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB2b2lkKiBt
X3N0YWNrTGltaXQ7Ci0gICAgICAgICAgICB2b2lkKiBtX2pzU3RhY2tMaW1pdDsKLSAgICAgICAg
fTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB2b2lkKiBtX3N0YWNrTGltaXQ7CisgICAgICAgIHZv
aWQqIG1fanNTdGFja0xpbWl0OworICAgIH07CiAjZWxzZQotICAgICAgICB1bmlvbiB7Ci0gICAg
ICAgICAgICB2b2lkKiBtX3N0YWNrTGltaXQ7Ci0gICAgICAgICAgICB2b2lkKiBtX2pzU3RhY2tM
aW1pdDsKLSAgICAgICAgfTsKKyAgICB1bmlvbiB7CisgICAgICAgIHZvaWQqIG1fc3RhY2tMaW1p
dDsKKyAgICAgICAgdm9pZCogbV9qc1N0YWNrTGltaXQ7CisgICAgfTsKICNpZiBFTkFCTEUoRlRM
X0pJVCkKLSAgICAgICAgdm9pZCogbV9mdGxTdGFja0xpbWl0OwotICAgICAgICBzaXplX3QgbV9s
YXJnZXN0RlRMU3RhY2tTaXplOworICAgIHZvaWQqIG1fZnRsU3RhY2tMaW1pdDsKKyAgICBzaXpl
X3QgbV9sYXJnZXN0RlRMU3RhY2tTaXplOwogI2VuZGlmCiAjZW5kaWYKLSAgICAgICAgdm9pZCog
bV9sYXN0U3RhY2tUb3A7Ci0gICAgICAgIEpTVmFsdWUgbV9leGNlcHRpb247Ci0gICAgICAgIGJv
b2wgbV9pbkRlZmluZU93blByb3BlcnR5OwotICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2Nv
ZGVDYWNoZTsKLSAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwotICAg
ICAgICBPd25QdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAg
ICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7Ci0gICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2F0Y2hwb2ludFNldD4+IG1faW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50U2V0czsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4g
bV90eXBlUHJvZmlsZXI7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+
IG1fdHlwZVByb2ZpbGVyTG9nOwotICAgICAgICBHbG9iYWxWYXJpYWJsZUlEIG1fbmV4dFVuaXF1
ZVZhcmlhYmxlSUQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFnPFR5cGVMb2NhdGlvbj4+IG1fdHlwZUxvY2F0
aW9uSW5mbzsKLSAgICB9OworICAgIHZvaWQqIG1fbGFzdFN0YWNrVG9wOworICAgIEpTVmFsdWUg
bV9leGNlcHRpb247CisgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CisgICAgT3duUHRy
PENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CisgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFBy
b2ZpbGVyOworICAgIE93blB0cjxCdWlsdGluRXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFi
bGVzOworICAgIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2F0Y2hwb2ludFNldD4+IG1faW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50U2V0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyPiBtX3R5
cGVQcm9maWxlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyTG9nPiBtX3R5cGVQ
cm9maWxlckxvZzsKKyAgICBHbG9iYWxWYXJpYWJsZUlEIG1fbmV4dFVuaXF1ZVZhcmlhYmxlSUQ7
CisgICAgdW5zaWduZWQgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQ7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJhZzxUeXBlTG9jYXRpb24+PiBtX3R5cGVMb2NhdGlvbkluZm87Cit9OwogCiAjaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgaW5saW5lIGJvb2wgVk06OmlzSW5pdGlhbGl6aW5n
T2JqZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5pdGlhbGl6aW5nT2Jq
ZWN0Q2xhc3M7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgVk06OnNldEluaXRpYWxpemluZ09i
amVjdENsYXNzKGNvbnN0IENsYXNzSW5mbyogaW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MpCi0gICAg
ewotICAgICAgICBtX2luaXRpYWxpemluZ09iamVjdENsYXNzID0gaW5pdGlhbGl6aW5nT2JqZWN0
Q2xhc3M7Ci0gICAgfQoraW5saW5lIGJvb2wgVk06OmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09iamVjdENsYXNzOworfQorCitpbmxp
bmUgdm9pZCBWTTo6c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBp
bml0aWFsaXppbmdPYmplY3RDbGFzcykKK3sKKyAgICBtX2luaXRpYWxpemluZ09iamVjdENsYXNz
ID0gaW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7Cit9CiAjZW5kaWYKIAotICAgIGlubGluZSBIZWFw
KiBXZWFrU2V0OjpoZWFwKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV92bS0+aGVh
cDsKLSAgICB9CitpbmxpbmUgSGVhcCogV2Vha1NldDo6aGVhcCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICZtX3ZtLT5oZWFwOworfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBleHRlcm4gIkMiIHZv
aWQgc2FuaXRpemVTdGFja0ZvclZNSW1wbChWTSopOworZXh0ZXJuICJDIiB2b2lkIHNhbml0aXpl
U3RhY2tGb3JWTUltcGwoVk0qKTsKICNlbmRpZgogCi0gICAgdm9pZCBzYW5pdGl6ZVN0YWNrRm9y
Vk0oVk0qKTsKLSAgICB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0qKTsKK3ZvaWQgc2FuaXRpemVT
dGFja0ZvclZNKFZNKik7Cit2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0qKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>