<?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>129703</bug_id>
          
          <creation_ts>2014-03-04 14:11:08 -0800</creation_ts>
          <short_desc>Spam static branch prediction hints on JS bindings.</short_desc>
          <delta_ts>2014-03-04 14:37:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</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="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>alecflett</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kling</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>986969</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-04 14:11:08 -0800</bug_when>
    <thetext>Spam static branch prediction hints on JS bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986970</commentid>
    <comment_count>1</comment_count>
      <attachid>225812</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-04 14:12:55 -0800</bug_when>
    <thetext>Created attachment 225812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986976</commentid>
    <comment_count>2</comment_count>
      <attachid>225812</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-04 14:22:41 -0800</bug_when>
    <thetext>Comment on attachment 225812
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986990</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-04 14:37:10 -0800</bug_when>
    <thetext>Committed r165079: &lt;http://trac.webkit.org/changeset/165079&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225812</attachid>
            <date>2014-03-04 14:12:55 -0800</date>
            <delta_ts>2014-03-04 14:22:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129703.diff</filename>
            <type>text/plain</type>
            <size>202867</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGUxNzBlZTYuLmM2Y2M3YjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBACiAyMDE0LTAzLTA0ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KIAorICAgICAgICBTcGFtIHN0YXRpYyBicmFuY2ggcHJlZGlj
dGlvbiBoaW50cyBvbiBKUyBiaW5kaW5ncy4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzEyOTcwMz4KKworICAgICAgICBBZGQgTElLRUxZIGhpbnQgdG8ganNEeW5hbWljQ2FzdCBzaW5j
ZSBpdCdzIGFsd2F5cyB1c2VkIGluIGEgY29udGV4dAorICAgICAgICB3aGVyZSB3ZSBleHBlY3Qg
aXQgdG8gc3VjY2VlZCBhbmQgdGFrZXMgYW4gZXJyb3IgcGF0aCB3aGVuIGl0IGRvZXNuJ3QuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpqc0R5bmFtaWNDYXN0KToKKworMjAxNC0wMy0wNCAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgR2V0IHRvIFN0cnVj
dHVyZXMgbW9yZSBlZmZpY2llbnRseSBpbiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkuCiAgICAgICAg
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjk3MDI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKaW5kZXggNzU2MjJjYi4uYmIyNWQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKQEAgLTIxNSwxMyArMjE1LDE3IEBAIGlubGluZSBUbyBqc0Nhc3Qo
SlNWYWx1ZSBmcm9tKQogdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CiBpbmxp
bmUgVG8ganNEeW5hbWljQ2FzdChGcm9tKiBmcm9tKQogewotICAgIHJldHVybiBmcm9tLT5pbmhl
cml0cyhzdGQ6OnJlbW92ZV9wb2ludGVyPFRvPjo6dHlwZTo6aW5mbygpKSA/IHN0YXRpY19jYXN0
PFRvPihmcm9tKSA6IDA7CisgICAgaWYgKExJS0VMWShmcm9tLT5pbmhlcml0cyhzdGQ6OnJlbW92
ZV9wb2ludGVyPFRvPjo6dHlwZTo6aW5mbygpKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUbz4oZnJvbSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFRvPgogaW5saW5lIFRvIGpzRHluYW1pY0Nhc3QoSlNWYWx1ZSBmcm9tKQogewotICAgIHJldHVy
biBmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPmluaGVyaXRzKHN0ZDo6cmVtb3ZlX3Bv
aW50ZXI8VG8+Ojp0eXBlOjppbmZvKCkpID8gc3RhdGljX2Nhc3Q8VG8+KGZyb20uYXNDZWxsKCkp
IDogMDsKKyAgICBpZiAoTElLRUxZKGZyb20uaXNDZWxsKCkgJiYgZnJvbS5hc0NlbGwoKS0+aW5o
ZXJpdHMoc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6OmluZm8oKSkpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VG8+KGZyb20uYXNDZWxsKCkpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZDM2OWQ5Li42YjA1NWUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMDMtMDQgIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIFNwYW0gc3RhdGljIGJyYW5jaCBwcmVkaWN0
aW9uIGhpbnRzIG9uIEpTIGJpbmRpbmdzLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTI5NzAzPgorCisgICAgICAgIEFkZCBVTkxJS0VMWSBoaW50cyB0byBhbGwgIWNhc3RlZFRoaXMg
YW5kIGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHBhdGhzCisgICAgICAgIGluIHRoZSBKUyBiaW5kaW5n
cyBzaW5jZSB0aGV5IGFyZSBhbG1vc3QgYWx3YXlzIGdvaW5nIHRvIGdldCBza2lwcGVkLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0
aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdlbmVy
YXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1
Y3RvckRlZmluaXRpb24pOgorCiAyMDE0LTAzLTA0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU3VicGl4ZWwgcmVuZGVyaW5nOiBNYWtlIGJvcmRlci1yYWRpdXMg
cGFpbnRpbmcgZGV2aWNlIHBpeGVsIGF3YXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzY2FmNmRjLi4xYWU3YzVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
JGNsYXNzTmFtZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIpOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpIHtcbiIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGpzRHluYW1pY0Nh
c3Q8SlNET01XaW5kb3dTaGVsbCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSlcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGNhc3Rl
ZFRoaXMgPSBzaGVsbC0+d2luZG93KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7CkBAIC0yMTM4LDcgKzIxMzgsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCJ9ID0g
MTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRo
aXMpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUq
PihzbG90QmFzZSkpIHtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmlu
ZyhcIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJyRuYW1lJyBvbiBhIG5v
bi0kaW50ZXJmYWNlTmFtZSBvYmplY3QuXCIpKTtcbiIpOwpAQCAtMjM0NSwxMiArMjM0NSwxMiBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOyIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDwke2NsYXNzTmFtZX0qPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7XG4iKTsKICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghY2Fz
dGVkVGhpcykge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGpzRHlu
YW1pY0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgY2Fz
dGVkVGhpcyA9IHNoZWxsLT53aW5kb3coKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0ZWRUaGlzKSB7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm47XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAt
MjQ1NCwxMiArMjQ1NCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDwke2NsYXNzTmFtZX0qPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNh
c3RlZFRoaXMpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkge1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKEpTRE9NV2luZG93U2hl
bGwqIHNoZWxsID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgICAgIGNhc3RlZFRoaXMgPSBzaGVsbC0+d2luZG93KCk7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghY2FzdGVkVGhpcykge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIH1cbiIpOwpAQCAtMjUyOCw3ICsyNTI4LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUpIC4gIiBuYXRpdmVWYWx1ZSgiIC4gSlNWYWx1ZVRvTmF0aXZl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiKTtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKSkgewpAQCAtMjY4NCwx
NiArMjY4NCwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFt
ZSogY2FzdGVkVGhpcyA9IHRvSlNET01XaW5kb3coZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
cyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0ZWRUaGlzKVxuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ildvcmtlckdsb2JhbFNjb3BlIn0pIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSog
Y2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXMo
ZXhlYywgTm90U3RyaWN0TW9kZSkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghY2FzdGVkVGhpcylcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PCRjbGFzc05hbWUqPih0aGlzVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICghY2FzdGVkVGhpcylcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KIApA
QCAtMzE3Myw3ICszMTczLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciA9
IHRvWFBhdGhOU1Jlc29sdmVyKGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghcmVzb2x2ZXIpIHtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBjdXN0b21SZXNvbHZlciA9
IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoJGFy
Z3NJbmRleCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7
CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHJlc29sdmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKQEAgLTMyMDYsNyAr
MzIwNiw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgbXkgJG5h
dGl2ZVZhbHVlID0gIiR7bmFtZX1OYXRpdmVWYWx1ZSI7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgJGFyZ1R5cGUgJG5hbWUgPSAwO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgZG91YmxlICRuYXRpdmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpLnRvTnVtYmVyKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuXG4iKTsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXN0ZDo6aXNuYW4oJG5hdGl2ZVZhbHVlKSlcbiIp
OwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9IGNsYW1w
VG88JGFyZ1R5cGU+KCRuYXRpdmVWYWx1ZSk7XG5cbiIpOwpAQCAtMzIzMSw3ICszMjMxLDcgQEAg
c3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWZWN0b3I8JG5hdGl2ZUVsZW1lbnRU
eXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJndW1lbnRzPCRuYXRpdmVFbGVtZW50VHlwZT4oZXhlYywg
JGFyZ3NJbmRleCk7XG4iKTsKICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNv
bnZlcnNpb24gc3VjY2VlZGVkLgotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgfQogCkBA
IC0zMjQwLDcgKzMyNDAsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKIAogICAgICAg
ICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBjb25zdCBTdHJpbmcgJHtuYW1lfSgke2Fy
Z1ZhbHVlfS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6ICR7YXJnVmFsdWV9LnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKIAogICAgICAgICAgICAgbXkgQGVudW1WYWx1ZXMg
PSAkY29kZUdlbmVyYXRvci0+VmFsaWRFbnVtVmFsdWVzKCRhcmdUeXBlKTsKQEAgLTMyNzksNyAr
MzI3OSw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OwogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFy
T2ZmKCRhcmdUeXBlKSBhbmQgbm90ICRpbnRlcmZhY2VOYW1lID1+IC9MaXN0JC8pIHsKQEAgLTM1
MjYsNyArMzUyNiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCkK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAKICAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKICAgICAgICAgfQogCkBAIC00MjcxLDcgKzQyNzEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qk
e2NsYXNzTmFtZX0oRXhlYwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBj
b250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICR7aW50ZXJmYWNlTmFtZX1Jbml0IGV2ZW50SW5pdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURP
TU9iamVjdC5jcHAKaW5kZXggM2NmYmZmZS4uNDBjNGI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RB
Y3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dAogewogICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwg
U3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdleGNpdGluZ0F0
dHInIG9uIGEgbm9uLVRlc3RBY3RpdmVET01PYmplY3Qgb2JqZWN0LiIpKTsKQEAgLTE3Myw3ICsx
NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4odGhpc1ZhbHVl
KTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmluZm8oKSk7
CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
ZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSkKQEAgLTE4Miw3ICsxODIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9u
RXhjaXRpbmdGdW5jdAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKICAgICBOb2RlKiBuZXh0Q2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5leGNpdGluZ0Z1bmN0aW9uKG5leHRDaGlsZCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE5MiwxNCArMTkyLDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
RnVuY3Rpb25Qb3N0TWVzc2FnZShFCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPih0aGlzVmFsdWUpOwotICAgIGlm
ICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6aW5mbygpKTsKICAgICBUZXN0
QWN0aXZlRE9NT2JqZWN0JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
cG9zdE1lc3NhZ2UobWVzc2FnZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDc2ZTZm
MjEuLmRhMWYwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAt
MTYzLDE0ICsxNjMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmMKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlciogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjppbmZvKCkpOwogICAgIFRlc3RDdXN0b21OYW1lZEdldHRlciYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHIoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0
eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW5vdGhlckZ1bmN0aW9uKHN0cik7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmNwcAppbmRleCBjZjczYjZkLi5hNWQ5NGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RF
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
ZXhlYywgIkNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFp
bGFibGUiKSk7CiAKICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50Q29u
c3RydWN0b3JJbml0IGV2ZW50SW5pdDsKQEAgLTE3MCw3ICsxNzAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsCiB7CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhp
cykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewog
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkg
J2F0dHIxJyBvbiBhIG5vbi1UZXN0RXZlbnRDb25zdHJ1Y3RvciBvYmplY3QuIikpOwpAQCAtMTg5
LDcgKzE4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwKIHsKICAgICBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBh
dHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnYXR0cjInIG9uIGEgbm9uLVRlc3RFdmVudENvbnN0
cnVjdG9yIG9iamVjdC4iKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCA3NzQ0NjJj
Li5iYzhiYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAgLTE5Nyw3ICsxOTcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogZQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFj
YXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0RXZlbnRUYXJnZXQ6OmluZm8oKSk7CiAgICAgVGVzdEV2ZW50VGFy
Z2V0JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
bkl0ZW0oRXhlY1N0YXRlKiBlCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9T
SVpFX0VSUik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgfQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaXRlbShpbmRleCkpKTsK
QEAgLTIxOSw3ICsyMTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2
ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKAogewogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdEV2ZW50VGFy
Z2V0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KHRoaXNW
YWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0RXZlbnRUYXJnZXQ6OmluZm8oKSk7
CiAgICAgVGVzdEV2ZW50VGFyZ2V0JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMjM0
LDcgKzIzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4odGhpc1ZhbHVlKTsK
LSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBU
ZXN0RXZlbnRUYXJnZXQmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0yNDksNyArMjQ5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChFeGUKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUpOwotICAgIGlm
ICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdEV2ZW50VGFyZ2V0OjppbmZvKCkpOwogICAgIFRlc3RFdmVu
dFRhcmdldCYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25EaXNwYXRjaEV2ZW50KEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBFdmVudCogZXZ0KHRvRXZlbnQoZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5kaXNwYXRjaEV2
ZW50KGV2dCwgZWMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggYzRhODQ5Ny4uZDRjZjQ5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSgogewogICAgIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RXhjZXB0aW9uKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5n
KCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICduYW1lJyBvbiBhIG5vbi1U
ZXN0RXhjZXB0aW9uIG9iamVjdC4iKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IDBjNTMw
ZjUuLjAyYzc0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC0xMjEsMTAgKzEyMSwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhYwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBjb25zdCBTdHJpbmcmIHN0cjEoZXhlYy0+YXJndW1lbnQoMCkuaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGNvbnN0IFN0cmluZyYgc3RyMihleGVjLT5hcmd1bWVudCgx
KS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRl
eHQpCkBAIC0zMDEsNyArMzAxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UKIHsKICAgICBK
U1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFj
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
Kj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAg
ICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRv
IGFjY2VzcyBwcm9wZXJ0eSAnaW1wbGVtZW50c1N0cjEnIG9uIGEgbm9uLVRlc3RJbnRlcmZhY2Ug
b2JqZWN0LiIpKTsKQEAgLTMyMiw3ICszMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZQog
ewogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJB
TShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0
dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdpbXBsZW1lbnRzU3RyMicgb24gYSBub24tVGVzdElu
dGVyZmFjZSBvYmplY3QuIikpOwpAQCAtMzQzLDcgKzM0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlCiB7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJl
Y2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2ltcGxlbWVudHNTdHIzJyBvbiBhIG5v
bi1UZXN0SW50ZXJmYWNlIG9iamVjdC4iKSk7CkBAIC0zNjEsNyArMzYxLDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmlu
ZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnaW1wbGVtZW50c05vZGUn
IG9uIGEgbm9uLVRlc3RJbnRlcmZhY2Ugb2JqZWN0LiIpKTsKQEAgLTQwNiw3ICs0MDYsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYQogewogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlz
KSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAg
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdzdXBwbGVt
ZW50YWxTdHIxJyBvbiBhIG5vbi1UZXN0SW50ZXJmYWNlIG9iamVjdC4iKSk7CkBAIC00MjcsNyAr
NDI3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmEKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7
CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0
eSAnc3VwcGxlbWVudGFsU3RyMicgb24gYSBub24tVGVzdEludGVyZmFjZSBvYmplY3QuIikpOwpA
QCAtNDQ4LDcgKzQ0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhCiB7CiAgICAgSlNUZXN0
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
LSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHNs
b3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nl
c3MgcHJvcGVydHkgJ3N1cHBsZW1lbnRhbFN0cjMnIG9uIGEgbm9uLVRlc3RJbnRlcmZhY2Ugb2Jq
ZWN0LiIpKTsKQEAgLTQ2Niw3ICs0NjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYQogewog
ICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50
ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVt
cHQgdG8gYWNjZXNzIHByb3BlcnR5ICdzdXBwbGVtZW50YWxOb2RlJyBvbiBhIG5vbi1UZXN0SW50
ZXJmYWNlIG9iamVjdC4iKSk7CkBAIC01MTgsNyArNTE4LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUo
dmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgVGVzdEludGVyZmFj
ZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtNTMxLDEzICs1
MzEsMTMgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICoKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAg
IEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJm
YWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykg
eworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0SW50ZXJmYWNlJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUo
dmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbXBs
ZW1lbnRzU3RyMihuYXRpdmVWYWx1ZSk7CiB9CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBzZXRK
U1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAv
KiBiYXNlT2JqZWN0ICoKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTU2NSwxMyArNTY1LDEzIEBAIHZvaWQgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9i
amVjdCAqCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgVGVzdEludGVyZmFjZSYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBOb2RlKiBuYXRpdmVWYWx1ZSh0b05vZGUodmFsdWUpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0SW1wbGVtZW50c05vZGUobmF0aXZlVmFsdWUpOwog
fQpAQCAtNTg0LDcgKzU4NCw3IEBAIHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JT
dXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplCiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKICAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1l
bnRhbFN0YXRpY0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtNTk3LDEzICs1OTcsMTMgQEAgdm9p
ZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIC8qIGJhc2VPYmplY3QKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdEludGVy
ZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0SW50ZXJmYWNlJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwogICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFsdWUuaXNFbXB0
eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c2V0U3Vw
cGxlbWVudGFsU3RyMigmaW1wbCwgbmF0aXZlVmFsdWUpOwogfQpAQCAtNjE2LDcgKzYxNiw3IEBA
IHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzEsMTMgKzYzMSwxMyBAQCB2b2lkIHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogLyogYmFzZU9iamVjdAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RJbnRlcmZhY2UmIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CiAgICAgTm9kZSogbmF0aXZlVmFsdWUodG9Ob2RlKHZhbHVlKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVt
ZW50YWxOb2RlKCZpbXBsLCBuYXRpdmVWYWx1ZSk7CiB9CkBAIC02NTQsNyArNjU0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
bkltcGxlbWVudHNNZXRob2QxKEUKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlz
KQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIFRlc3RJbnRlcmZhY2UmIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC02NjksNyArNjY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
b2QyKEUKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdElu
dGVyZmFjZSo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCkpOwogICAgIFRlc3RJbnRlcmZhY2UmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CkBAIC02ODAsMTAgKzY4MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoRQogICAgIGlm
ICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5hcmd1bWVudCgwKS5pc0Vt
cHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1
bWVudCgxKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVtZW50c01l
dGhvZDIoc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwpAQCAtNjk4LDcgKzY5
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMyhFCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNNZXRob2QzKGV4ZWMpKTsKQEAgLTcyMCw3
ICs3MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4odGhpc1ZhbHVlKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7CiAgICAgVGVzdEludGVy
ZmFjZSYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTczNSw3ICs3MzUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kMgogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMp
CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7CiAgICAgVGVzdEludGVyZmFjZSYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKQEAgLTc0NiwxMCArNzQ2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxN
ZXRob2QyCiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFy
Z3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0
T2JqKGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoVGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMigmaW1wbCwgc2NyaXB0Q29udGV4dCwg
c3RyQXJnLCBvYmpBcmcsIGVjKSkpOwpAQCAtNzY0LDcgKzc2NCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50
YWxNZXRob2QzCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdElu
dGVyZmFjZTo6aW5mbygpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PnN1cHBsZW1lbnRhbE1ldGhvZDMoZXhlYykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDZmMzNlODUuLjA5MTEzYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPih0aGlz
VmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI6OmluZm8oKSk7CiAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
YjU0NDk4Ni4uYTVmZDM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApA
QCAtNjYsMTMgKzY2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGNvbnN0IFN0cmluZyYgc3RyMShleGVj
LT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHIy
KGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQo
MSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBjb25zdCBTdHJpbmcm
IHN0cjMoYXJndW1lbnRPck51bGwoZXhlYywgMikuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBhcmd1
bWVudE9yTnVsbChleGVjLCAyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIHN0
cjEsIHN0cjIsIHN0cjMsIGVjKTsKICAgICBpZiAoZWMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggYzFmMWM3
Zi4uMzY2MzY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTM5Nyw3ICszOTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbgogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJB
TShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQg
dG8gYWNjZXNzIHByb3BlcnR5ICdyZWFkT25seUxvbmdBdHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9i
amVjdC4iKSk7CkBAIC00MTYsNyArNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVh
ZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLAogewog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0g
ICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
IHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnR5ICdyZWFkT25seVN0cmluZ0F0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAg
LTQzNSw3ICs0MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLAogewogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0
ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAg
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdyZWFkT25s
eVRlc3RPYmpBdHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC00NzQsNyArNDc0
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXMKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgewor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygi
RGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnVGVzdFN1Yk9iaicgb24gYSBu
b24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0
byBhY2Nlc3MgcHJvcGVydHkgJ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nJyBvbiBhIG5vbi1U
ZXN0T2JqIG9iamVjdC4iKSk7CkBAIC01MTEsNyArNTExLDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1YKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
c2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFj
Y2VzcyBwcm9wZXJ0eSAnZW51bUF0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAg
LTUzMCw3ICs1MzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVgogewogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0
ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAg
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdieXRlQXR0
cicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQg
YXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ29jdGV0QXR0cicgb24gYSBub24tVGVzdE9iaiBv
YmplY3QuIikpOwpAQCAtNTY4LDcgKzU2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialNo
b3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTCiB7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
LSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNl
KSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNz
YWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJv
cGVydHkgJ3Nob3J0QXR0cicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtNTg3LDcg
KzU4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMp
IHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJp
bmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ3Vuc2lnbmVkU2hvcnRB
dHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC02MDYsNyArNjA2LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1YKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnbG9uZ0F0dHInIG9uIGEgbm9uLVRlc3RPYmog
b2JqZWN0LiIpKTsKQEAgLTYyNSw3ICs2MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZQog
ewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFz
ZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVz
c2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHBy
b3BlcnR5ICdsb25nTG9uZ0F0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTY0
NCw3ICs2NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZQogewogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwg
U3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICd1bnNpZ25lZExv
bmdMb25nQXR0cicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtNjYzLDcgKzY2Myw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRl
cHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ3N0cmluZ0F0dHInIG9uIGEgbm9u
LVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTY4Miw3ICs2ODIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZAogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUq
PihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8g
YWNjZXNzIHByb3BlcnR5ICd0ZXN0T2JqQXR0cicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikp
OwpAQCAtNzAxLDcgKzcwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKCiB7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAo
IWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAg
ICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ1hN
TE9iakF0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTcyMCw3ICs3MjAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbAogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXBy
ZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdjcmVhdGUnIG9uIGEgbm9uLVRlc3RP
Ymogb2JqZWN0LiIpKTsKQEAgLTczOSw3ICs3MzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNl
LAogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNz
IHByb3BlcnR5ICdyZWZsZWN0ZWRTdHJpbmdBdHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4i
KSk7CkBAIC03NTgsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
SW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXMKIHsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlm
ICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAg
ICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAn
cmVmbGVjdGVkSW50ZWdyYWxBdHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC03
NzcsNyArNzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoKIHsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVk
VGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3Is
IFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAncmVmbGVjdGVk
VW5zaWduZWRJbnRlZ3JhbEF0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTc5
Niw3ICs3OTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZQogewogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwg
U3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdyZWZsZWN0ZWRC
b29sZWFuQXR0cicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtODE1LDcgKzgxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRl
cHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ3JlZmxlY3RlZFVSTEF0dHInIG9u
IGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTgzNCw3ICs4MzQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLAogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVt
cHQgdG8gYWNjZXNzIHByb3BlcnR5ICdyZWZsZWN0ZWRTdHJpbmdBdHRyJyBvbiBhIG5vbi1UZXN0
T2JqIG9iamVjdC4iKSk7CkBAIC04NTMsNyArODUzLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHMKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xv
dEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2Vz
cyBwcm9wZXJ0eSAncmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyJyBvbiBhIG5vbi1UZXN0T2Jq
IG9iamVjdC4iKSk7CkBAIC04NzIsNyArODcyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2wK
IHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2Up
OwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBw
cm9wZXJ0eSAncmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHInIG9uIGEgbm9uLVRlc3RPYmogb2Jq
ZWN0LiIpKTsKQEAgLTg5MSw3ICs4OTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYQogewog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0g
ICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
IHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnR5ICdyZWZsZWN0ZWRDdXN0b21VUkxBdHRyJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7
CkBAIC05MTAsNyArOTEwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY28KIHsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAg
ICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAndHlw
ZWRBcnJheUF0dHInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTkyOSw3ICs5Mjks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QgogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7Cisg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJE
ZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdhdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbicgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtOTQ5LDcgKzk0OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0
ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uJyBv
biBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC05NjgsNyArOTY4LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCoKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
ICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24nIG9u
IGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTk4OCw3ICs5ODgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KgogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVt
cHQgdG8gYWNjZXNzIHByb3BlcnR5ICdzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbicgb24g
YSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEoKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
ICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnY3VzdG9tQXR0cicgb24gYSBub24tVGVzdE9iaiBvYmpl
Y3QuIikpOwpAQCAtMTAyMyw3ICsxMDIzLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3QKIHsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwot
ICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2Up
KSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9w
ZXJ0eSAnd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4i
KSk7CkBAIC0xMDQxLDcgKzEwNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTTwogewogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsK
ICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5
ICd3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZScgb24gYSBub24tVGVzdE9iaiBv
YmplY3QuIikpOwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QK
IHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2Up
OwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBw
cm9wZXJ0eSAnd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzJyBvbiBhIG5vbi1UZXN0T2Jq
IG9iamVjdC4iKSk7CkBAIC0xMDgyLDcgKzEwODIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4
ZQogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNz
IHByb3BlcnR5ICd3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcycgb24g
YSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTEwNSw3ICsxMTA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShFeGVjU3QKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
ICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZScgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTEyNiw3
ICsxMTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygKIHsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhp
cykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0
cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnd2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcycgb24gYSBub24tVGVz
dE9iaiBvYmplY3QuIikpOwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWIKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
c2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFj
Y2VzcyBwcm9wZXJ0eSAnd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTExNzAs
NyArMTE3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjCiB7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBT
dHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ3dpdGhTY3JpcHRB
cmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIp
KTsKQEAgLTExODksNyArMTE4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewog
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkg
J2NvbmRpdGlvbmFsQXR0cjEnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEyMTAs
NyArMTIxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBT
dHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2NvbmRpdGlvbmFs
QXR0cjInIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEyMzEsNyArMTIzMSw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
VGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJl
Y2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2NvbmRpdGlvbmFsQXR0cjMnIG9uIGEg
bm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEyNTIsNyArMTI1Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BB
UkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAg
ICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1w
dCB0byBhY2Nlc3MgcHJvcGVydHkgJ2NvbmRpdGlvbmFsQXR0cjQnIG9uIGEgbm9uLVRlc3RPYmog
b2JqZWN0LiIpKTsKQEAgLTEyNzAsNyArMTI3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBz
CiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RC
YXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBN
ZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3Mg
cHJvcGVydHkgJ2NvbmRpdGlvbmFsQXR0cjUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsK
QEAgLTEyODgsNyArMTI4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzCiB7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAo
IWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAg
ICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2Nv
bmRpdGlvbmFsQXR0cjYnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEzMDUsNyAr
MTMwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMp
IHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJp
bmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2NhY2hlZEF0dHJpYnV0
ZTEnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEzMjcsNyArMTMyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0
ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2NhY2hlZEF0dHJpYnV0ZTInIG9uIGEgbm9u
LVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTEzNDksNyArMTM0OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0
byBhY2Nlc3MgcHJvcGVydHkgJ2FueUF0dHJpYnV0ZScgb24gYSBub24tVGVzdE9iaiBvYmplY3Qu
IikpOwpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVu
dERvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmMKIHsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAg
IGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7
CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0
eSAnY29udGVudERvY3VtZW50JyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC0xMzg1
LDcgKzEzODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZQogewogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwg
U3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdtdXRhYmxlUG9p
bnQnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTE0MDQsNyArMTQwNCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0
ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2ltbXV0YWJsZVBvaW50JyBvbiBhIG5vbi1U
ZXN0T2JqIG9iamVjdC4iKSk7CkBAIC0xNDIzLDcgKzE0MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSgogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUq
PihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8g
YWNjZXNzIHByb3BlcnR5ICdzdHJhd2JlcnJ5JyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7
CkBAIC0xNDQyLDcgKzE0NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RGbG9h
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZAogewogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYg
KCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAg
ICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdz
dHJpY3RGbG9hdCcgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTQ2MSw3ICsxNDYx
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWQKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgewor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygi
RGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnZGVzY3JpcHRpb24nIG9uIGEg
bm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTE0ODAsNyArMTQ4MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0CiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BB
UkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAg
ICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1w
dCB0byBhY2Nlc3MgcHJvcGVydHkgJ2lkJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBA
IC0xNDk5LDcgKzE0OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZQogewogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFj
YXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAg
ICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdoYXNo
JyBvbiBhIG5vbi1UZXN0T2JqIG9iamVjdC4iKSk7CkBAIC0xNTE4LDcgKzE1MTgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzbG90QmFzZQogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVk
IGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdyZXBsYWNlYWJsZUF0dHJpYnV0ZScgb24gYSBu
b24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTUzNyw3ICsxNTM3LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEIKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90
eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAg
ICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0
IHRvIGFjY2VzcyBwcm9wZXJ0eSAnbnVsbGFibGVEb3VibGVBdHRyaWJ1dGUnIG9uIGEgbm9uLVRl
c3RPYmogb2JqZWN0LiIpKTsKQEAgLTE1NTksNyArMTU1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBz
bG90QmFzCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBh
Y2Nlc3MgcHJvcGVydHkgJ251bGxhYmxlTG9uZ0F0dHJpYnV0ZScgb24gYSBub24tVGVzdE9iaiBv
YmplY3QuIikpOwpAQCAtMTU4MSw3ICsxNTgxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3QK
IHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2Up
OwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBw
cm9wZXJ0eSAnbnVsbGFibGVCb29sZWFuQXR0cmlidXRlJyBvbiBhIG5vbi1UZXN0T2JqIG9iamVj
dC4iKSk7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90Qgogewog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0g
ICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
IHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnR5ICdudWxsYWJsZVN0cmluZ0F0dHJpYnV0ZScgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikp
OwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVM
b25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoKIHsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlm
ICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAg
ICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAn
bnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIp
KTsKQEAgLTE2NDcsNyArMTY0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsCiB7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewog
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkg
J251bGxhYmxlU3RyaW5nVmFsdWUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTE2
NzAsNyArMTY3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTCiB7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3Rl
ZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ2F0dHJpYnV0
ZScgb24gYSBub24tVGVzdE9iaiBvYmplY3QuIikpOwpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCoKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGUnIG9uIGEgbm9uLVRlc3RPYmogb2JqZWN0LiIpKTsKQEAgLTE3MTksNyArMTcxOSw3IEBAIHZv
aWQgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIC8qIGJhc2VPCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBjb25zdCBTdHJp
bmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtMTcz
MCw3ICsxNzMwLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGlu
Z0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3NDQsMTMgKzE3NDQsMTMgQEAgdm9p
ZCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNl
T2JqZWN0ICovLCBFbmNvZGVkSlMKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAobmF0aXZlVmFsdWUgIT0gIiIgJiYgbmF0aXZlVmFsdWUgIT0gIkVu
dW1WYWx1ZTEiICYmIG5hdGl2ZVZhbHVlICE9ICJFbnVtVmFsdWUyIiAmJiBuYXRpdmVWYWx1ZSAh
PSAiRW51bVZhbHVlMyIpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NjMsMTMgKzE3NjMsMTMgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBi
YXNlT2JqZWN0ICovLCBFbmNvZGVkSlMKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwog
ICAgIGludDhfdCBuYXRpdmVWYWx1ZSh0b0ludDgoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Qnl0ZUF0
dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtMTc4MCwxMyArMTc4MCwxMyBAQCB2b2lkIHNldEpTVGVz
dE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICov
LCBFbmNvZGVkSgogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgdWludDhfdCBu
YXRpdmVWYWx1ZSh0b1VJbnQ4KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE9jdGV0QXR0cihuYXRpdmVW
YWx1ZSk7CiB9CkBAIC0xNzk3LDEzICsxNzk3LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqU2hvcnRB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhc2VPYmplY3QgKi8sIEVuY29kZWRK
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAo
IWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVz
dE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpbnQxNl90IG5hdGl2ZVZhbHVl
KHRvSW50MTYoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U2hvcnRBdHRyKG5hdGl2ZVZhbHVlKTsKIH0K
QEAgLTE4MTQsMTMgKzE4MTQsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLAogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlz
KSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgdWludDE2X3QgbmF0aXZlVmFsdWUodG9VSW50MTYo
ZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGltcGwuc2V0VW5zaWduZWRTaG9ydEF0dHIobmF0aXZlVmFsdWUpOwogfQpA
QCAtMTgzMSwxMyArMTgzMSwxMyBAQCB2b2lkIHNldEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhc2VPYmplY3QgKi8sIEVuY29kZWRKUwogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlz
KSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwuc2V0TG9uZ0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtMTg0OCwxMyArMTg0
OCwxMyBAQCB2b2lkIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFbmNvZAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgbG9uZyBsb25nIG5hdGl2ZVZhbHVlKHRvSW50NjQoZXhlYywgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwuc2V0TG9uZ0xvbmdBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTE4NjUsMTMgKzE4NjUsMTMg
QEAgdm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICoKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVWYWx1ZSh0b1VJbnQ2NChleGVjLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihuYXRpdmVWYWx1ZSk7CiB9CkBAIC0xODgy
LDEzICsxODgyLDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFbmNvZGVkCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1w
dHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cihuYXRp
dmVWYWx1ZSk7CiB9CkBAIC0xODk5LDEzICsxODk5LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqVGVz
dE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRW5j
b2RlCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
VGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2JqKiBuYXRpdmVW
YWx1ZSh0b1Rlc3RPYmoodmFsdWUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0VGVzdE9iakF0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtMTkxNiwxMyArMTkx
NiwxMyBAQCB2b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogLyogYmFzZU9iamVjdCAqLywgRW5jb2RlZAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUodG9UZXN0T2JqKHZhbHVlKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFhNTE9iakF0dHIobmF0aXZl
VmFsdWUpOwogfQpAQCAtMTkzMywxMyArMTkzMywxMyBAQCB2b2lkIHNldEpTVGVzdE9iakNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFbmNvZGVkSlNW
YQogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRl
c3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgYm9vbCBuYXRpdmVWYWx1ZSh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRDcmVhdGUobmF0aXZlVmFsdWUpOwogfQpAQCAtMTk1MCwxMyArMTk1MCwxMyBA
QCB2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogLyogYmFzZU9iamVjdCAqLwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgY29uc3QgU3RyaW5nJiBuYXRpdmVWYWx1ZSh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVj
ayhleGVjLCB2YWx1ZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTE5NjcsMTMgKzE5
NjcsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0
dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CkBAIC0xOTg0LDEzICsxOTg0LDEzIEBAIHZvaWQgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogLyogYmFzCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICB1bnNp
Z25lZCBuYXRpdmVWYWx1ZSh0b1VJbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25lZElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yMDAxLDEzICsyMDAxLDEzIEBAIHZv
aWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogLyogYmFzZU9iamVjdCAqCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAg
ICBib29sIG5hdGl2ZVZhbHVlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KQEAg
LTIwMTgsMTMgKzIwMTgsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhc2VPYmplY3QgKi8sIEUKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykg
eworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9
CkBAIC0yMDM1LDEzICsyMDM1LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovCiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIG5hdGl2
ZVZhbHVlKTsKIH0KQEAgLTIwNTIsMTMgKzIwNTIsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFz
ZU8KICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlm
ICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBU
ZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGludCBuYXRpdmVWYWx1ZSh0
b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0K
QEAgLTIwNjksMTMgKzIwNjksMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2IKICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhp
cykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGJvb2wgbmF0aXZlVmFsdWUodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFu
QXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTIwODYsMTMgKzIwODYsMTMgQEAgdm9pZCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIC8qIGJhc2VPYmplY3QKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGNv
bnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywg
dmFsdWUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRVUkxBdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwogfQpAQCAtMjEwMywxMyArMjEwMywxMyBA
QCB2b2lkIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIC8qIGJhc2VPYmplY3QgKi8sIEVuYwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbmF0aXZlVmFsdWUodG9GbG9hdDMyQXJyYXkodmFs
dWUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0VHlwZWRB
cnJheUF0dHIobmF0aXZlVmFsdWUuZ2V0KCkpOwogfQpAQCAtMjEyMCwxMyArMjEyMCwxMyBAQCB2
b2lkIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIC8qIGJhc2VPYmplYwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUpOwogfQpAQCAtMjEzNywxNCArMjEzNywxNCBAQCB2
b2lkIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIC8qIGJhc2VPYmplYwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhl
YywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUsIGVj
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtMjE1NiwxMyArMjE1NiwxMyBA
QCB2b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhcwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgY29uc3QgU3RyaW5nJiBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmco
KSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTIxNzMsMTQgKzIxNzMsMTQgQEAgdm9pZCBzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiAvKiBiYXMKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFsdWUuaXNFbXB0eSgp
ID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CkBAIC0yMTkyLDcgKzIxOTIsNyBAQCB2b2lkIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRW5jb2RlZAogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIwNSwxMyArMjIw
NSwxMyBAQCB2b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZQogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKGV4ZWMsIG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTIyMjIs
MTMgKzIyMjIsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KgogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUodG9UZXN0T2JqKHZhbHVlKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
c2NyaXB0Q29udGV4dCkKQEAgLTIyNDIsMTMgKzIyNDIsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
LyogYmEKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFRlc3RPYmoqIG5hdGl2
ZVZhbHVlKHRvVGVzdE9iaih2YWx1ZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZXhlYywgbmF0aXZl
VmFsdWUpOwogfQpAQCAtMjI1OSwxMyArMjI1OSwxMyBAQCB2b2lkIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YgogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRl
c3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFs
dWUodG9UZXN0T2JqKHZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKQEAgLTIyNzksMTMgKzIyNzksMTMg
QEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXgKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlKHRvVGVzdE9iaih2YWx1ZSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCkBAIC0yMjk5LDEzICsyMjk5LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhCiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3Rl
ZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSh0b1Rl
c3RPYmoodmFsdWUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQpAQCAtMjMxOSwxMyArMjMxOSwxMyBAQCB2b2lk
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlKEV4ZQogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
VGVzdE9iaiogbmF0aXZlVmFsdWUodG9UZXN0T2JqKHZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKQEAg
LTIzMzksMTMgKzIzMzksMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmoKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykg
eworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlKHRvVGVzdE9iaih2
YWx1ZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRXaXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKG5hdGl2ZVZhbHVlKTsKIH0KQEAg
LTIzNTcsMTMgKzIzNTcsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhc2VPYmplY3QgKi8sIEUKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykg
eworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEobmF0aXZlVmFsdWUpOwogfQpAQCAtMjM3Niwx
MyArMjM3NiwxMyBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRQogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwuc2V0Q29uZGl0aW9uYWxBdHRyMihuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yMzk1LDEzICsyMzk1
LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKICAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRD
b25kaXRpb25hbEF0dHIzKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTI0MTQsNyArMjQxNCw3IEBAIHZv
aWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIC8qIGJhc2VPCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yNDMwLDcgKzI0MzAsNyBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNl
TwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ0
Niw3ICsyNDQ2LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU8KICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NjEsMTMgKzI0NjEsMTMgQEAgdm9p
ZCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyog
YmFzZU9iamVjdCAqLywgRW5jb2QKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QW55QXR0cmlidXRl
KG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTI0NzgsMTMgKzI0NzgsMTMgQEAgdm9pZCBzZXRKU1Rlc3RP
YmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAq
LywgRW5jb2QKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFNWR1Byb3BlcnR5
VGVhck9mZjxTVkdQb2ludD4qIG5hdGl2ZVZhbHVlKHRvU1ZHUG9pbnQodmFsdWUpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0TXV0YWJsZVBvaW50KG5hdGl2
ZVZhbHVlKTsKIH0KQEAgLTI0OTUsMTMgKzI0OTUsMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpJbW11
dGFibGVQb2ludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBF
bmMKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlm
ICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBU
ZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFNWR1Byb3BlcnR5VGVhck9m
ZjxTVkdQb2ludD4qIG5hdGl2ZVZhbHVlKHRvU1ZHUG9pbnQodmFsdWUpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0SW1tdXRhYmxlUG9pbnQobmF0aXZlVmFs
dWUpOwogfQpAQCAtMjUxMiwxMyArMjUxMiwxMyBAQCB2b2lkIHNldEpTVGVzdE9ialN0cmF3YmVy
cnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRW5jb2RlZAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFj
YXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RP
YmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50
MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGltcGwuc2V0Qmx1ZWJlcnJ5KG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTI1
MjksMTMgKzI1MjksMTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTdHJpY3RGbG9hdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFbmNvZGUKICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgewor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwogICAgIGZsb2F0IG5hdGl2ZVZhbHVlKHZhbHVlLnRvRmxvYXQoZXhl
YykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRTdHJpY3RG
bG9hdChuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHZvaWQgc2V0SlNU
ZXN0T2JqSWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRW5j
b2RlZEpTVmFsdWUKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGludCBuYXRp
dmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldElkKG5hdGl2ZVZhbHVlKTsKIH0K
QEAgLTI1NjMsNyArMjU2Myw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqCiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMp
IHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTc3LDEzICsyNTc3LDEz
IEBAIHZvaWQgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXROdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yNTk0LDEzICsy
NTk0LDEzIEBAIHZvaWQgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKICAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5z
ZXROdWxsYWJsZVN0cmluZ1ZhbHVlKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTI2MTEsMTMgKzI2MTEs
MTMgQEAgdm9pZCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXMKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmF0aXZlVmFsdWUgIT0gIiIgJiYgbmF0aXZlVmFs
dWUgIT0gIk9wdGlvbmFsVmFsdWUxIiAmJiBuYXRpdmVWYWx1ZSAhPSAiT3B0aW9uYWxWYWx1ZTIi
ICYmIG5hdGl2ZVZhbHVlICE9ICJPcHRpb25hbFZhbHVlMyIpCiAgICAgICAgIHJldHVybjsKQEAg
LTI2MzQsNyArMjYzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwpAQCAtMjY0NiwyMCArMjY0NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdz
KEV4ZWNTdAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgaW50IGxvbmdBcmcodG9JbnQz
MihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC52b2lkTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yNjY5LDcg
KzI2NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQnl0ZU1ldGhvZChFeGVjU3RhdGUqIGV4ZQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKQEAgLTI2ODIsMjAgKzI2ODIsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhFeGVjU3QK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1
ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RP
YmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIGludDhfdCBieXRlQXJnKHRvSW50OChleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbikpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGNvbnN0
IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
ZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlTWV0aG9kV2l0aEFy
Z3MoYnl0ZUFyZywgc3RyQXJnLCBvYmpBcmcpKTsKQEAgLTI3MDYsNyArMjcwNiw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1l
dGhvZChFeGVjU3RhdGUqIGV4CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMjcx
OSwyMCArMjcxOSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyhFeGVjUwogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNh
c3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CiAgICAgdWludDhfdCBvY3RldEFyZyh0b1VJbnQ4KGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJB
cmcoZXhlYy0+YXJndW1lbnQoMSkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVu
dCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9i
akFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMikpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0TWV0aG9kV2l0aEFyZ3Mob2N0ZXRBcmcs
IHN0ckFyZywgb2JqQXJnKSk7CkBAIC0yNzQzLDcgKzI3NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZChFeGVjU3Rh
dGUqIGV4ZQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTI3NTYsMjAgKzI3NTYs
MjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkxvbmdNZXRob2RXaXRoQXJncyhFeGVjU3QKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwog
ICAgIGludCBsb25nQXJnKHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5hcmd1bWVu
dCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihl
eGVjLT5hcmd1bWVudCgyKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwubG9uZ01ldGhvZFdpdGhBcmdzKGxvbmdBcmcsIHN0ckFyZywgb2JqQXJnKSk7
CkBAIC0yNzgwLDcgKzI3ODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYwogewogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTI3OTMsMjAgKzI3OTMsMjAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhB
cmdzKEV4ZWNTdGEKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIGludCBsb25nQXJnKHRv
SW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBT
dHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSkp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwub2JqTWV0aG9kV2l0aEFyZ3MobG9u
Z0FyZywgc3RyQXJnLCBvYmpBcmcpKSk7CkBAIC0yODE3LDE0ICsyODE3LDE0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
U2VxdWVuY2VBcmcoRXhlCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBWZWN0b3I8UmVm
UHRyPFNjcmlwdFByb2ZpbGU+ID4gc2VxdWVuY2VBcmcoKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2Ny
aXB0UHJvZmlsZSwgSlNTY3JpcHRQcm9maWxlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJnRv
U2NyaXB0UHJvZmlsZSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhz
ZXF1ZW5jZUFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTI4MzQsMTQgKzI4MzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJldHVybmluZ1NlcXVlbmNlKEUKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwogICAgIGludCBsb25nQXJnKHRvSW50MzIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1l
dGhvZFJldHVybmluZ1NlcXVlbmNlKGxvbmdBcmcpKTsKQEAgLTI4NTIsMTQgKzI4NTIsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGEKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIGNv
bnN0IFN0cmluZyBlbnVtQXJnKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpZiAoZW51bUFyZyAhPSAiIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUxIiAmJiBlbnVt
QXJnICE9ICJFbnVtVmFsdWUyIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUzIikKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CkBAIC0yODcxLDcgKzI4NzEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJncwogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTI4
NzksMTAgKzI4NzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoZXhl
Yy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyh0
b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihpbXBsLm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcs
IGVjKSkpOwpAQCAtMjg5NCwxNCArMjg5NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVl
KTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9i
aiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZEFyZyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgMCwgMCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKHNl
cmlhbGl6ZWRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0yOTExLDE3ICsyOTExLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSoKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwogICAgIERpY3Rpb25hcnkgb28oZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIERpY3Rpb25hcnkgb29vKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm9wdGlvbnNPYmplY3Qob28sIG9vbyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI5MzEsNyArMjkzMSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
RXhjZXB0aW9uKEV4ZWNTCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMjk0NSw3
ICsyOTQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChFeGVjU3RhdGUqIGUKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+Y3VzdG9tTWV0aG9kKGV4ZWMpKTsKQEAgLTI5NTUsNyArMjk1NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21N
ZXRob2RXaXRoQXJncyhFeGVjCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1l
dGhvZFdpdGhBcmdzKGV4ZWMpKTsKQEAgLTI5NjUsNyArMjk2NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVy
KEV4ZWNTdGF0CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
Pih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
ICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMjk4MCw3ICsyOTgw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1MKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CkBAIC0yOTk1LDcgKzI5OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVjUwogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAg
ICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTMwMDcsMTMgKzMwMDcsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRT
dGF0ZU9iaihFeGVjU3QKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAKICAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooZXhlYykpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0zMDIyLDcgKzMwMjIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAg
LTMwMzYsNyArMzAzNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwpAQCAtMzA0NCw3ICszMDQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4
Y2VwdGkKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2Vw
dGlvbihleGVjLCBlYykpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTMwNTMsNyArMzA1Myw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwpAQCAtMzA2OCw3ICszMDY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXgKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zMDgzLDcgKzMwODMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTMwOTQsNyArMzA5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGV4
ZWMsIHNjcmlwdENvbnRleHQsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMzEwMyw3
ICszMTAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXgKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CkBAIC0zMTEyLDcgKzMxMTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleAog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZVdpdGhTcGFjZXMoZXhlYywgc2NyaXB0Q29udGV4dCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0zMTIxLDcgKzMxMjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTMxMzQsNyAr
MzEzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhp
cykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwpAQCAtMzE0Niw3ICszMTQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGUKICAg
ICB9CiAKICAgICBpbnQgb3B0KHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMTU2LDE0
ICszMTU2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVk
VGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKICAgICBpbnQgbm9uT3B0KHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CkBAIC0zMTczLDcgKzMxNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQQogICAgIH0KIAogICAgIGludCBvcHQodG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgx
KSwgTm9ybWFsQ29udmVyc2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMTgzLDE0ICszMTgzLDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBpbnQgbm9uT3B0KHRv
SW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0zMjAw
LDcgKzMyMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIH0KIAogICAgIGludCBv
cHQxKHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKICAgICAgICAgaW1wbC5tZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxKTsKQEAgLTMyMDgs
NyArMzIwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgfQogCiAgICAgaW50IG9w
dDIodG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbikpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdz
KG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTMyMTgsNyArMzIxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoCiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUp
OwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2Jq
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMzIzMCw3ICszMjMwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZygKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0cihleGVjLT5h
cmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtMzI0MCwxMiArMzI0MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAg
ICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBjb25zdCBTdHJpbmcmIHN0cihleGVjLT5hcmd1
bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdJc1VuZGVmaW5lZChzdHIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0zMjU1LDEyICszMjU1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFs
dWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0
T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGNvbnN0IFN0cmluZyYgc3RyKGFy
Z3VtZW50T3JOdWxsKGV4ZWMsIDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogYXJndW1lbnRPck51
bGwoZXhlYywgMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyhzdHIpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMjcwLDcgKzMyNzAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrQXJnKEV4ZQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTMy
ODcsMTQgKzMyODcsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0EKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFj
YXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwogICAgIGludCBub25DYWxsYmFjayh0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVu
dCgxKS5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwpAQCAtMzMwNyw3ICszMzA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGkKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zMzQ5LDcgKzMzNDksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRo
b2QxKEV4ZWNTdAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTMzNjUsNyArMzM2
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDIoRXhlY1N0CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykK
KyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwpAQCAtMzM4MCw3ICszMzgwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhFeGVjU3QKIHsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0g
ICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zMzk0LDE3ICszMzk0LDE3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEoCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBUZXN0T2JqKiBv
YmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3Ry
aW5nJiBzdHJBcmcoZXhlYy0+YXJndW1lbnQoMSkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIHN0ckFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM0MTQsMTQgKzM0MTQsMTQgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMigKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIFRlc3RPYmoqIG9i
akFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHNpemVfdCBh
cmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0zNDMxLDcgKzM0MzEsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QyKAogICAgIH0KIAogICAgIGludCBsb25nQXJnKHRvSW50MzIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBsb25nQXJnKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzQ0MSwxNCArMzQ0MSwxNCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QzKAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgY29uc3QgU3Ry
aW5nJiBzdHJBcmcoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChzdHJBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0zNDU4LDE0ICszNDU4LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDQoCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBpbnQgbG9uZ0FyZyh0b0ludDMy
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5vdmVybG9hZGVkTWV0aG9kKGxvbmdBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNDc1LDcgKzM0NzUsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q1KAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTM0OTIsMTQgKzM0OTIs
MTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNigKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQor
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwog
ICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0QXJnKHRvRE9NU3RyaW5nTGlzdChleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChsaXN0
QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzUw
OSwxNCArMzUwOSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3KAogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNh
c3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTxTdHJp
bmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMzUyNiwxNCArMzUyNiwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KAogewog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsK
LSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVj
LT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNTQzLDE0
ICszNTQzLDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVk
VGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKICAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PFN0cmluZz4o
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2QoYXJyYXlBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0zNTYwLDE0ICszNTYwLDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAg
IGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKICAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnKHRvTmF0aXZl
QXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5vdmVybG9hZGVkTWV0aG9kKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMzU3NywxNCArMzU3NywxNCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJB
cmcoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZChzdHJBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC0zNjM5LDcgKzM2MzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbAogICAg
IH0KIAogICAgIGludCBhcmcodG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZykpOwpAQCAtMzY1OSw3ICszNjU5
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgaW50IGFyZyh0b0ludDMyKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iajo6b3Zl
cmxvYWRlZE1ldGhvZDEoYXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtMzY3Myw3ICszNjczLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgY29u
c3QgU3RyaW5nJiB0eXBlKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMSh0eXBlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzcwNCw3ICszNzA0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aENsYW1wKEV4ZWMKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zNzEyLDcgKzM3
MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAoRXhlYwogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICB1bnNp
Z25lZCBzaG9ydCBvYmpBcmdzU2hvcnQgPSAwOwogICAgIGRvdWJsZSBvYmpBcmdzU2hvcnROYXRp
dmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
aWYgKCFzdGQ6OmlzbmFuKG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKSkKQEAgLTM3MjAsNyArMzcy
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjCiAKICAgICB1bnNpZ25lZCBsb25nIG9iakFy
Z3NMb25nID0gMDsKICAgICBkb3VibGUgb2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKG9i
akFyZ3NMb25nTmF0aXZlVmFsdWUpKQpAQCAtMzczNCwxNCArMzczNCwxNCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVu
c2lnbmVkTG9uZ1NlcQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgVmVjdG9yPHVuc2ln
bmVkPiB1bnNpZ25lZExvbmdTZXF1ZW5jZSh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVuc2lnbmVkTG9u
Z1NlcXVlbmNlKHVuc2lnbmVkTG9uZ1NlcXVlbmNlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzc1MSw3ICszNzUxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rp
b24oRXhlY1MKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zNzU5LDcgKzM3NTks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihFeGVjUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxT
dHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU0M6OkpTVmFs
dWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC5zdHJpbmdBcnJheUZ1bmN0aW9uKHZhbHVlcywgZWMpKTsKQEAgLTM3NzEsNyArMzc3MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25E
b21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpA
QCAtMzc3OSw3ICszNzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihFeGUKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHZhbHVlcyh0b0RPTVN0cmluZ0xpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLmRvbVN0cmluZ0xpc3RGdW5jdGlvbih2YWx1ZXMs
IGVjKSkpOwpAQCAtMzc5MSw3ICszNzkxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEV4ZWNTdGF0ZSoKIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7
Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmom
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0zODA4LDE0ICszODA4LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0
MShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBUZXN0Tm9k
ZSogdmFsdWUodG9UZXN0Tm9kZShleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
Y29udmVydDEodmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC0zODI1LDE0ICszODI1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwot
ICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBUZXN0Tm9kZSogdmFsdWUodG9UZXN0Tm9kZShleGVj
LT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDIodmFsdWUpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zODQyLDE0ICszODQyLDE0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0NChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAg
ICBUZXN0Tm9kZSogdmFsdWUodG9UZXN0Tm9kZShleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwuY29udmVydDQodmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC0zODU5LDE0ICszODU5LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBU
ZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBUZXN0Tm9kZSogdmFsdWUodG9UZXN0
Tm9kZShleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDUodmFsdWUp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zODc2LDcg
KzM4NzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlYwogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKQEAgLTM4ODksNyArMzg4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4CiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUp
OwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2Jq
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMzkwMiw3ICszOTAyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMzkxNCw3
ICszOTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CkBAIC0zOTIyLDEzICszOTIyLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbihFeGVjU3RhdGUq
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGNvbnN0IFN0
cmluZyYgc3RyKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBmbG9h
dCBhKGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGludCBiKHRv
SW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMp
KSk7CkBAIC0zOTQwLDcgKzM5NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuYwogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKLSAg
ICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTM5NTAsMTAgKzM5NTAsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0
aW9uV2l0aFNlcXVlbmMKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhl
Yy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCku
aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50
KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBhKHRvTmF0aXZlQXJyYXk8dW5zaWdu
ZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU0M6OkpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoaW1wbC5zdHJpY3RGdW5jdGlvbldpdGhTZXF1ZW5jZShvYmpBcmcsIGEsIGVjKSkpOwpAQCAt
Mzk2NSw3ICszOTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uV2l0aEFycmF5KEUKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFj
YXN0ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CkBAIC0zOTc1LDEwICszOTc1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbldpdGhB
cnJheShFCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRz
KEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgwKSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFZlY3RvcjxpbnQ+IGFycmF5KHRvTmF0aXZlQXJyYXk8aW50PihleGVjLCBleGVj
LT5hcmd1bWVudCgxKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuc3RyaWN0
RnVuY3Rpb25XaXRoQXJyYXkob2JqQXJnLCBhcnJheSwgZWMpKSk7CkBAIC0zOTkwLDE3ICszOTkw
LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChFeGVjCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhpcykK
KyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
ICAgICBjb25zdCBTdHJpbmcmIGhlYWQoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxTdHJpbmc+
KGV4ZWMsIDEpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudmFyaWFkaWNTdHJpbmdNZXRob2QoaGVhZCwgdGFp
bCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQwMTAs
MTcgKzQwMTAsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEV4ZWMKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0
ZWRUaGlzKQorICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmomIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwogICAgIGRvdWJsZSBoZWFkKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBWZWN0b3I8ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91
YmxlPihleGVjLCAxKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKGhlYWQs
IHRhaWwpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00
MDMwLDE0ICs0MDMwLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoRXhlY1N0CiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKICAgICBOb2RlKiBoZWFkKHRvTm9kZShleGVjLT5hcmd1bWVudCgwKSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFZlY3RvcjxOb2RlKj4gdGFpbDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxLCBj
b3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTQwNTMs
MTcgKzQwNTMsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhp
cykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKICAgICBmbG9hdCBhKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGludCBiKHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNp
b24pKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLmFueShhLCBiKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMuY3BwCmluZGV4IDBjMGU5ZmQuLjNhMWFlN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6
OmNvbnN0cnVjdEoKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CiAgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKHRvQXJyYXlCdWZmZXIoZXhlYy0+
YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZm
ZXIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwpAQCAtNTgsNyArNTgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1
ZmZlclZpZXcodG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXJWaWV3KTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIG9iamVjdC5nZXQoKSkpKTsKQEAgLTcwLDcgKzcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEoKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CiAgICAgQmxvYiogYmxvYih0b0Jsb2IoZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBS
ZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpjcmVhdGUoYmxvYik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
c09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0
KCkpKSk7CkBAIC04Miw3ICs4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKCiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBS
ZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5n
ZXQoKSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKaW5kZXggNDM0YTk4My4uZDJmODhiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTEzMiw3
ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZQogewogICAgIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7
CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWlj
Q2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90
QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNz
IHByb3BlcnR5ICd2YWx1ZScgb24gYSBub24tVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBvYmplY3QuIikpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBl
eGVjCiB7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRl
cHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJ3JlYWRvbmx5VmFsdWUnIG9uIGEg
bm9uLVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ugb2JqZWN0LiIpKTsKQEAgLTE3
MCw3ICsxNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsCiB7CiAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMp
IHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHNs
b3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nl
c3MgcHJvcGVydHkgJ2NhY2hlZFZhbHVlJyBvbiBhIG5vbi1UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlIG9iamVjdC4iKSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamUKIHsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0o
c2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0
cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAncG9ydHMnIG9uIGEg
bm9uLVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ugb2JqZWN0LiIpKTsKQEAgLTIx
MSw3ICsyMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZQogewogICAgIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlz
KSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihz
bG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNj
ZXNzIHByb3BlcnR5ICdjYWNoZWRSZWFkb25seVZhbHVlJyBvbiBhIG5vbi1UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIG9iamVjdC4iKSk7CkBAIC0yNDQsMTMgKzI0NCwxMyBAQCB2
b2lkIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIC8qCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBu
YXRpdmVWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgMCwg
MCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRWYWx1ZShu
YXRpdmVWYWx1ZSk7CiB9CkBAIC0yNjEsMTMgKzI2MSwxMyBAQCB2b2lkIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplYwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIDAsIDApKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUobmF0aXZlVmFsdWUp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggMjA0YWNhYS4uMWFiMzk2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0VHlwZWRlZnMoCiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIGNv
bnN0IFN0cmluZyYgaGVsbG8oZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsbwogewogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXBy
ZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICd1bnNpZ25lZExvbmdMb25nQXR0cicg
b24gYSBub24tVGVzdFR5cGVkZWZzIG9iamVjdC4iKSk7CkBAIC0yMDAsNyArMjAwLDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBKU08KIHsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsK
KyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIFN0
cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnaW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlJyBvbiBhIG5vbi1UZXN0VHlwZWRlZnMgb2JqZWN0LiIpKTsKQEAg
LTIxOSw3ICsyMTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
VGVzdFN1Yk9iaihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbAogewogICAgIEpTVGVzdFR5
cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAg
IGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFz
ZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVz
c2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHBy
b3BlcnR5ICdUZXN0U3ViT2JqJyBvbiBhIG5vbi1UZXN0VHlwZWRlZnMgb2JqZWN0LiIpKTsKQEAg
LTIzNSw3ICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqCiB7CiAgICAgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAg
aWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KHNsb3RCYXNl
KSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNz
YWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJv
cGVydHkgJ2F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uJyBvbiBhIG5vbi1UZXN0VHlwZWRlZnMgb2Jq
ZWN0LiIpKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqCiB7CiAg
ICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVk
ZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZSo+KHNsb3RCYXNlKSkgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0
byBhY2Nlc3MgcHJvcGVydHkgJ2F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uJyBvbiBhIG5vbi1UZXN0
VHlwZWRlZnMgb2JqZWN0LiIpKTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYgogewogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNh
dGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICdzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbicgb24gYSBub24tVGVzdFR5cGVkZWZzIG9iamVjdC4iKSk7CkBAIC0yOTQsNyArMjk0LDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2IKIHsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBpZiAoIWNhc3RlZFRo
aXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4oc2xvdEJhc2UpKSB7CiAgICAgICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIFN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnc3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24nIG9uIGEgbm9uLVRlc3RUeXBlZGVmcyBvYmplY3QuIikp
OwpAQCAtMzI0LDEzICszMjQsMTMgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9u
Z0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIC8qIGJhc2VPYmoKICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAo
IWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVGVz
dFR5cGVkZWZzJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBuYXRpdmVWYWx1ZSh0b1VJbnQ2NChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25lZExv
bmdMb25nQXR0cihuYXRpdmVWYWx1ZSk7CiB9CkBAIC0zNDEsMTMgKzM0MSwxMyBAQCB2b2lkIHNl
dEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rlc3RUeXBlZGVmcyog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFRlc3RUeXBlZGVmcyYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBuYXRpdmVWYWx1ZShTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgMCwgMCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbW11dGFibGVTZXJpYWxpemVkU2Ny
aXB0VmFsdWUobmF0aXZlVmFsdWUpOwogfQpAQCAtMzU4LDEzICszNTgsMTMgQEAgdm9pZCBzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIC8qIGJhc2UKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpIHsKKyAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgVGVzdFR5cGVkZWZzJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTM3NSwxNCArMzc1LDE0
IEBAIHZvaWQgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiAvKiBiYXNlCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKSB7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RUeXBlZGVmcyYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbnQgbmF0
aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihuYXRpdmVWYWx1ZSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBA
IC0zOTQsMTMgKzM5NCwxMyBAQCB2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLwogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmICghY2Fz
dGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBUZXN0VHlw
ZWRlZnMmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgY29uc3QgU3RyaW5nJiBuYXRp
dmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBs
LnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTQx
MSwxNCArNDExLDE0IEBAIHZvaWQgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAvCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKCFjYXN0ZWRU
aGlzKSB7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFRlc3RUeXBlZGVm
cyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
bmF0aXZlVmFsdWUsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtNDM0
LDcgKzQzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkZ1bmMoRXhlY1N0YXRlKiBleGVjCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsKLSAgICBp
ZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBUZXN0VHlwZWRl
ZnMmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVu
YyhFeGVjU3RhdGUqIGV4ZWMKICAgICB9CiAKICAgICBWZWN0b3I8aW50PiB4KHRvTmF0aXZlQXJy
YXk8aW50PihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZnVuYyh4
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDU2LDIw
ICs0NTYsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSoKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwotICAgIGlm
ICghY2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RUeXBlZGVm
cyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgZmxvYXQgd2lkdGgoZXhlYy0+YXJndW1lbnQo
MCkudG9GbG9hdChleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZmxvYXQgaGVpZ2h0KGV4ZWMtPmFyZ3VtZW50
KDEpLnRvRmxvYXQoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGZsb2F0IGJsdXIoZXhlYy0+YXJndW1lbnQo
MikudG9GbG9hdChleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhFeGVjU3Rh
dGUqCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiBjb2xvcihleGVjLT5hcmd1bWVudCgzKS5p
c0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDMpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSA0KSB7CiAgICAgICAgIGlt
cGwuc2V0U2hhZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbG9yKTsKQEAgLTQ4Nyw3ICs0ODcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKgogICAgIH0KIAogICAgIGZsb2F0IGFscGhhKGV4
ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2V0U2hhZG93
KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbG9yLCBhbHBoYSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQ5NywxNCArNDk3LDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhTZXF1ZW5jZUFyCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RU
eXBlZGVmczo6aW5mbygpKTsKICAgICBUZXN0VHlwZWRlZnMmIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwogICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2VxdWVuY2VBcmco
KHRvUmVmUHRyTmF0aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZ0b1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
Lm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZykpOwpAQCAtNTE1LDE0ICs1MTUsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVBcnJheUFyZyhFeGUKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVk
VGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RUeXBlZGVmcyYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcodG9OYXRpdmVBcnJh
eTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5udWxs
YWJsZUFycmF5QXJnKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtNTMyLDcgKzUzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXAoRXhlY1N0CiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygp
KTsKICAgICBUZXN0VHlwZWRlZnMmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC01NDAs
NyArNTQwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChFeGVjU3QKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGFyZzEgPSAwOwogICAgIGRvdWJsZSBhcmcxTmF0aXZlVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICghc3Rk
Ojppc25hbihhcmcxTmF0aXZlVmFsdWUpKQpAQCAtNTU1LDcgKzU1NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRo
Q2xhbXAoRXhlY1N0CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXJnMiA9IDA7CiAgICAgZG91
YmxlIGFyZzJOYXRpdmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKGFyZzJOYXRpdmVWYWx1ZSkpCkBAIC01NjksNyAr
NTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGkKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
Y2FzdGVkVGhpcykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RUeXBlZGVmcyYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTU4Miw3ICs1ODIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdB
cnJheUZ1bmN0aW9uKAogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RUeXBlZGVmcyo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFjYXN0ZWRUaGlzKQorICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgVGVzdFR5cGVkZWZzJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwpAQCAtNTkwLDcgKzU5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFZlY3RvcjxTdHJpbmc+
IHZhbHVlcyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24odmFsdWVzLCBlYykp
OwpAQCAtNjAyLDcgKzYwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24yCiB7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRl
ZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVl
KTsKLSAgICBpZiAoIWNhc3RlZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBU
ZXN0VHlwZWRlZnMmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC02MTAsNyArNjEwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzKHRvTmF0aXZlQXJyYXk8U3Ry
aW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVl
IHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
c3RyaW5nQXJyYXlGdW5jdGlvbjIodmFsdWVzLCBlYykpOwpAQCAtNjIyLDE0ICs2MjIsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXQKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwotICAgIGlmICghY2FzdGVkVGhp
cykKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RUeXBlZGVmcyYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CiAgICAgVmVjdG9yPFJlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+ID4gc2VxdWVu
Y2VBcmcoKHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50VGFyZ2V0LCBKU1Rlc3RFdmVudFRh
cmdldD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZ0b1Rlc3RFdmVudFRhcmdldCkpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0aFNl
cXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShzZXF1ZW5jZUFyZykpOwpAQCAtNjQwLDcgKzY0MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIWNhc3Rl
ZFRoaXMpCisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBUZXN0VHlwZWRlZnMmIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAppbmRleCAzYThlZjE4Li4xM2MxOTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNh
dHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU2F0dHJpYnV0ZS5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc2F0
dHJpYnV0ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSgogewogICAgIEpTYXR0cmlidXRlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU2F0
dHJpYnV0ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBVTlVTRURfUEFSQU0o
c2xvdEJhc2UpOwotICAgIGlmICghY2FzdGVkVGhpcykgeworICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNhdHRyaWJ1dGVQcm90b3R5
cGUqPihzbG90QmFzZSkpIHsKICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQg
dG8gYWNjZXNzIHByb3BlcnR5ICdyZWFkb25seScgb24gYSBub24tYXR0cmlidXRlIG9iamVjdC4i
KSk7Cg==
</data>
<flag name="review"
          id="249988"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>